从0到1构建企业级制造系统前端:TMom基于Vue3+TypeScript+Ant Design Vue的技术实践
你是否正在寻找一套既能满足复杂制造业务需求,又具备现代前端架构特性的解决方案?作为生产执行系统(MES/MOM)的核心交互层,前端架构直接决定了系统的响应速度、可维护性和用户体验。本文将深入解析TMom系统如何基于Vue3、TypeScript和Ant Design Vue构建企业级前端架构,从技术选型、工程化实践到性能优化,全方位展示如何解决制造系统特有的复杂交互与大数据渲染难题。
读完本文你将掌握:
- 制造系统前端架构的设计方法论
- Vue3+TypeScript在大型项目中的最佳实践
- 复杂表单与动态表格的高效实现方案
- 企业级权限系统的前端落地策略
- 微前端架构在多厂区系统中的应用
技术栈选型:为何选择Vue3+TS+Ant Design Vue组合
TMom作为面向多厂区、多项目的制造执行系统,需要同时满足复杂业务逻辑、高频数据交互和多端适配三大核心需求。经过多轮技术选型验证,最终确定以下技术组合:
pie
title TMom前端技术栈占比
"Vue3核心" : 35
"TypeScript" : 25
"Ant Design Vue" : 20
"工程化工具" : 15
"其他生态" : 5
核心框架选型分析
Vue3的不可替代性体现在其独特的响应式系统重构和Composition API设计:
- 性能优势:相比Vue2,渲染性能提升40%+,内存占用减少55%,特别适合制造系统中数据密集型页面
- Composition API:将分散的业务逻辑按功能聚合,解决了Vue2 Options API在复杂业务场景下的代码组织问题
- 更好的TypeScript支持:原生支持TS类型推导,为大型团队协作提供保障
TypeScript的必要性在制造系统中尤为突出:
- 业务模型复杂:产品BOM、工艺路线等核心数据结构需要严格类型约束
- 接口契约明确:与.NET后端形成强类型交互,减少80%的接口联调问题
- 重构安全性:支持安全重构,适应制造系统频繁的业务变更需求
Ant Design Vue的企业级优势:
- 组件完备性:200+组件覆盖制造系统所有UI场景,包括复杂表格、树形控件等
- 设计一致性:符合企业级产品设计规范,降低用户学习成本
- 可定制性:支持主题定制和组件二次封装,满足制造业品牌化需求
项目架构设计:打造可扩展的制造系统前端框架
TMom前端采用分层架构设计,严格区分业务逻辑与技术实现,确保系统可扩展性。整体架构分为五层:
flowchart TD
A[表现层] --> B[应用层]
B --> C[核心层]
C --> D[基础设施层]
D --> E[外部依赖层]
subgraph 表现层
A1[页面组件]
A2[布局组件]
A3[业务组件]
end
subgraph 应用层
B1[路由管理]
B2[状态管理]
B3[权限控制]
end
subgraph 核心层
C1[表单引擎]
C2[表格引擎]
C3[业务模型]
end
subgraph 基础设施层
D1[HTTP客户端]
D2[工具函数]
D3[缓存管理]
end
subgraph 外部依赖层
E1[Vue3]
E2[TypeScript]
E3[Ant Design Vue]
end
目录结构设计
遵循"按功能模块组织"的原则,将业务相关性高的文件放在同一目录,提高开发效率:
src/
├── api/ # 接口请求层
├── assets/ # 静态资源
├── components/ # 通用组件
│ ├── basic/ # 基础组件
│ ├── business/ # 业务组件
│ └── core/ # 核心组件(表单/表格)
├── hooks/ # 组合式API
├── layout/ # 布局组件
├── router/ # 路由配置
├── store/ # 状态管理
├── styles/ # 样式文件
├── utils/ # 工具函数
├── views/ # 页面视图
│ ├── process/ # 工艺管理模块
│ ├── product/ # 生产管理模块
│ └── sys/ # 系统管理模块
└── main.ts # 入口文件
这种结构的优势在于:
- 业务模块内聚,降低跨模块依赖
- 新功能开发只需关注对应模块目录
- 支持多团队并行开发,减少代码冲突
核心技术实现:解决制造系统前端痛点
1. 表单引擎:动态生成复杂业务表单
制造系统中存在大量动态表单场景,如工艺参数配置、质量检验项设置等。TMom基于JSON Schema实现了灵活的表单引擎:
// 工艺参数表单配置示例
export const processParamSchema = [
{
field: 'processCode',
component: 'Input',
label: '工艺编码',
required: true,
rules: [{ required: true, message: '请输入工艺编码' }],
colProps: { span: 12 }
},
{
field: 'processName',
component: 'Input',
label: '工艺名称',
required: true,
colProps: { span: 12 }
},
{
field: 'paramType',
component: 'Select',
label: '参数类型',
required: true,
componentProps: {
options: [
{ label: '数值型', value: 'number' },
{ label: '文本型', value: 'text' },
{ label: '枚举型', value: 'enum' }
]
}
},
{
field: 'paramOptions',
component: 'Input',
label: '枚举选项',
ifShow: ({ values }) => values.paramType === 'enum',
helpMessage: '多个选项用逗号分隔'
}
] as FormSchema[];
表单引擎核心功能:
- 动态显示/隐藏:基于业务规则控制字段可见性
- 联动校验:支持跨字段复杂校验逻辑
- 动态组件:根据配置渲染不同输入控件
- 布局控制:支持栅格布局和卡片布局切换
2. 表格引擎:高性能处理制造大数据
制造系统中生产数据表格通常包含复杂交互:行编辑、树形展开、动态列等。TMom表格引擎基于Ant Design Vue Table二次封装,实现以下核心能力:
// 工艺路线表格配置示例
export const processRouteTableSchema = {
columns: [
{
title: '工序序号',
dataIndex: 'sequence',
width: 80,
fixed: 'left',
editable: true
},
{
title: '工序名称',
dataIndex: 'operationName',
width: 180,
fixed: 'left',
search: {
component: 'Input'
}
},
{
title: '工作中心',
dataIndex: 'workCenter',
width: 150,
filters: true,
filterMode: 'tree'
},
{
title: '标准工时',
dataIndex: 'standardTime',
width: 120,
sorter: true,
render: (val) => `${val}分钟`
},
{
title: '操作',
width: 150,
fixed: 'right',
actions: [
{ type: 'edit', permission: 'process:route:edit' },
{ type: 'delete', permission: 'process:route:delete' },
{
type: 'custom',
text: '复制',
onClick: (record) => handleCopy(record)
}
]
}
],
pagination: true,
bordered: true,
size: 'middle',
rowKey: 'id',
expandable: {
expandedRowRender: (record) => renderOperationDetails(record)
}
}
表格引擎特性:
- 动态列配置:支持列显示/隐藏、固定列、动态宽度
- 内置搜索过滤:支持多种搜索组件和过滤模式
- 行编辑功能:支持单元格编辑和整行编辑两种模式
- 权限控制:基于权限动态显示操作按钮
- 大数据优化:支持虚拟滚动,轻松处理10000+行数据
3. 权限系统:基于RBAC模型的前端实现
制造系统对权限控制要求极高,需支持多维度权限隔离(功能权限、数据权限、操作权限)。TMom实现了一套完整的权限控制体系:
// 权限指令实现
export const setupPermissionDirective = (app: App) => {
app.directive('permission', {
mounted(el: HTMLElement, binding: DirectiveBinding) {
const { value } = binding;
const userStore = useUserStore();
const hasPermission = userStore.hasPermission(value);
if (!hasPermission) {
el.parentNode?.removeChild(el);
}
}
});
};
// 路由守卫实现
export const createRouterGuards = (router: Router) => {
router.beforeEach(async (to, from, next) => {
const userStore = useUserStore();
// 检查是否已登录
if (!userStore.token) {
return next({ path: '/login' });
}
// 检查路由权限
if (!userStore.hasRoutePermission(to.meta.permission)) {
return next({ path: '/403' });
}
// 处理数据权限
setDataPermission(to.meta.dataScope);
next();
});
};
权限系统设计:
- 指令式权限控制:通过v-permission指令控制按钮级权限
- 路由守卫:控制页面访问权限
- 数据权限:基于用户角色过滤表格数据
- 权限缓存:权限信息缓存至本地,减少请求次数
4. 状态管理:模块化的Pinia设计
采用Pinia替代Vuex,结合模块化设计和持久化存储,实现高效状态管理:
// 用户状态管理模块
export const useUserStore = defineStore('user', {
state: (): UserState => ({
token: Storage.get(ACCESS_TOKEN_KEY),
userInfo: Storage.get(USER_INFO_KEY) || {},
permissions: [],
roles: [],
lastUpdateTime: 0
}),
getters: {
hasPermission: (state) => (permission: string) => {
return state.permissions.includes(permission) || state.permissions.includes('admin');
},
isAdmin: (state) => state.roles.includes('admin')
},
actions: {
async login(loginParams: LoginParams) {
const { data } = await loginApi(loginParams);
this.token = data.token;
this.userInfo = data.userInfo;
// 存储到本地
Storage.set(ACCESS_TOKEN_KEY, data.token);
Storage.set(USER_INFO_KEY, data.userInfo);
// 获取权限信息
await this.getPermissionInfo();
},
async getPermissionInfo() {
const { data } = await getPermissionApi();
this.permissions = data.permissions;
this.roles = data.roles;
this.lastUpdateTime = Date.now();
},
logout() {
this.$reset();
Storage.clear();
router.push('/login');
}
},
// 持久化配置
persist: {
key: 'user-store',
storage: localStorage,
paths: ['token', 'userInfo']
}
});
Pinia优势体现:
- TypeScript友好:完全支持类型推导,无需手动定义类型
- 模块化设计:每个业务模块独立store,降低耦合
- 持久化插件:内置持久化能力,简化本地存储逻辑
- DevTools支持:提供更好的调试体验
工程化实践:提升开发效率与代码质量
1. 项目构建优化
基于Vite构建工具,针对制造系统特点进行定制化配置:
// vite.config.ts关键配置
export default defineConfig({
build: {
target: 'es2015',
outDir: 'dist',
assetsDir: 'assets',
// 制造系统大文件分割策略
rollupOptions: {
output: {
chunkFileNames: 'js/[name]-[hash].js',
entryFileNames: 'js/[name]-[hash].js',
assetFileNames: '[ext]/[name]-[hash].[ext]',
manualChunks: {
// 第三方库分割
vendor: ['vue', 'vue-router', 'pinia', 'ant-design-vue'],
// 图表库单独分割
charts: ['echarts', 'vue-echarts'],
// 业务组件库分割
business: ['@/components/business']
}
}
}
},
// 开发服务器配置
server: {
port: 3000,
proxy: {
'/api': {
target: 'http://localhost:5000',
changeOrigin: true,
// 制造系统API路径重写
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
});
构建优化成果:
- 首屏加载时间减少60%
- 构建速度提升3倍(相比Webpack)
- 生产环境包体积减少45%
- 支持多环境配置切换
2. 代码规范与质量保障
建立严格的代码规范体系,确保团队协作效率和代码质量:
// .eslintrc.js配置
module.exports = {
root: true,
env: {
browser: true,
es2021: true,
node: true
},
extends: [
'plugin:vue/vue3-essential',
'eslint:recommended',
'@vue/typescript/recommended',
'@vue/eslint-config-prettier'
],
parserOptions: {
ecmaVersion: 'latest',
parser: '@typescript-eslint/parser'
},
rules: {
// 制造系统特殊规则
'vue/max-attributes-per-line': ['error', { singleline: 5 }],
'vue/component-tags-order': ['error', { order: ['template', 'script', 'style'] }],
'@typescript-eslint/no-explicit-any': ['error', { ignoreRestArgs: true }],
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
}
};
代码质量保障措施:
- ESLint + Prettier:确保代码风格一致性
- Husky + lint-staged:提交代码时自动检查
- TypeScript严格模式:开启strict: true,强制类型检查
- 单元测试:核心功能组件覆盖率>80%
性能优化:打造流畅的制造系统体验
制造系统常面临数据量大、组件复杂、交互频繁等性能挑战,TMom实施了多维度优化策略:
1. 渲染性能优化
// 虚拟滚动表格实现
<template>
<a-table
v-if="virtualScroll"
:data-source="virtualData"
:columns="columns"
:row-key="rowKey"
:pagination="false"
:scroll="{ y: 600 }"
:components="components"
/>
</template>
<script setup lang="ts">
import { useVirtualScroll } from '@/hooks/useVirtualScroll';
const { virtualData, components } = useVirtualScroll({
data: tableData,
itemHeight: 54, // 行高
containerHeight: 600 // 容器高度
});
</script>
关键优化手段:
- 虚拟滚动:列表和表格均支持虚拟滚动,只渲染可视区域内容
- 组件懒加载:路由级和组件级双重懒加载
- 缓存策略:合理使用keep-alive缓存频繁访问页面
- 事件防抖节流:高频操作(如搜索输入)添加防抖处理
2. 网络请求优化
// 请求优化示例
const http = createRequest({
baseURL: import.meta.env.VITE_API_BASE_URL,
timeout: 10000,
// 请求拦截器
requestInterceptors: (config) => {
// 添加token
const token = useUserStore().token;
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
// 响应拦截器
responseInterceptors: (response) => {
const { data } = response;
// 统一错误处理
if (data.code !== 200) {
ElMessage.error(data.msg || '操作失败');
return Promise.reject(data);
}
return data.data;
},
// 错误处理
errorHandler: (error) => {
const { response } = error;
if (response?.status === 401) {
// 权限过期处理
useUserStore().logout();
}
return Promise.reject(error);
}
});
// 缓存请求示例
export const getProcessList = http.get<ProcessItem[]>({
url: '/process/list',
options: {
cacheOptions: {
// 缓存10分钟
ttl: 600000,
// 缓存key
key: (config) => `process:${config.params?.workshopId}`
}
}
});
网络优化策略:
- 请求缓存:对不变数据进行本地缓存
- 请求合并:批量操作接口合并多个请求
- 断点续传:大文件上传支持断点续传
- 接口降级:非核心接口失败时自动降级
3. 大数据渲染优化
制造系统的报表和看板页面常需渲染大量数据,TMom采用以下优化方案:
// 大数据表格优化示例
export const useBigDataTable = (props) => {
// 1. 数据分页处理
const currentPage = ref(1);
const pageSize = ref(100);
const total = ref(0);
const tableData = ref([]);
// 2. 数据处理工作线程
const worker = ref(null);
// 3. 数据加载函数
const loadData = async (params) => {
const res = await getBigDataList({ ...params, page: currentPage.value, size: pageSize.value });
total.value = res.total;
// 使用web worker处理数据转换
if (!worker.value) {
worker.value = new Worker(new URL('@/utils/worker/dataProcessor.ts', import.meta.url));
}
worker.value.postMessage({ type: 'processTableData', data: res.list });
worker.value.onmessage = (e) => {
tableData.value = e.data;
};
};
// 4. 清理工作线程
onUnmounted(() => {
worker.value?.terminate();
});
return {
tableData,
currentPage,
pageSize,
total,
loadData
};
};
大数据优化手段:
- 数据分片:后端分页+前端虚拟滚动
- Web Worker:复杂数据处理放入worker线程
- 按需渲染:可视区域外数据延迟渲染
- Canvas渲染:极端场景下使用Canvas替代DOM渲染
多端适配:制造系统的全场景覆盖
TMom支持多端统一体验,包括PC端、平板和移动端,满足车间、办公室、管理层等不同场景需求:
timeline
title TMom多端适配方案
2023-06 : PC端核心功能开发
2023-04 : 响应式布局改造
2023-07 : 移动端适配完成
2023-10 : 大屏看板系统上线
2024-01 : AOT客户端发布
响应式设计实现
// 响应式工具示例
export const useResponsive = () => {
const breakpoint = ref<BreakpointEnum>(BreakpointEnum.XL);
const isMobile = computed(() =>
[BreakpointEnum.XS, BreakpointEnum.SM].includes(breakpoint.value)
);
const isTablet = computed(() => breakpoint.value === BreakpointEnum.MD);
const isDesktop = computed(() =>
[BreakpointEnum.LG, BreakpointEnum.XL, BreakpointEnum.XXL].includes(breakpoint.value)
);
// 监听窗口大小变化
const resizeHandler = () => {
const windowWidth = window.innerWidth;
if (windowWidth < 576) {
breakpoint.value = BreakpointEnum.XS;
} else if (windowWidth < 768) {
breakpoint.value = BreakpointEnum.SM;
} else if (windowWidth < 992) {
breakpoint.value = BreakpointEnum.MD;
} else if (windowWidth < 1200) {
breakpoint.value = BreakpointEnum.LG;
} else if (windowWidth < 1600) {
breakpoint.value = BreakpointEnum.XL;
} else {
breakpoint.value = BreakpointEnum.XXL;
}
};
onMounted(() => {
resizeHandler();
window.addEventListener('resize', resizeHandler);
});
onUnmounted(() => {
window.removeEventListener('resize', resizeHandler);
});
return {
breakpoint,
isMobile,
isTablet,
isDesktop
};
};
多端适配策略:
- 响应式布局:基于断点动态调整布局
- 组件适配:同一组件在不同端展示不同样式和交互
- 功能适配:移动端简化复杂操作,保留核心功能
- 性能适配:低端设备自动降低动画效果和数据加载量
最佳实践与经验总结
经过多个制造企业的实践验证,TMom前端架构形成了一套成熟的最佳实践:
1. 组件设计原则
- 单一职责:一个组件只做一件事
- ** props设计**:明确props类型和默认值,使用required标记必填项
- 事件设计:统一事件命名规范,使用kebab-case格式
- 样式隔离:优先使用scoped样式,避免全局污染
- 适度抽象:业务组件适度抽象,避免过度设计
2. 代码组织建议
- 业务逻辑聚合:相关业务逻辑放在同一目录
- 复用逻辑提取:通用逻辑提取为hooks或utils
- 常量集中管理:业务常量和枚举集中定义
- 注释规范:核心业务逻辑必须添加注释
- 命名规范:遵循统一的命名约定,提高可读性
3. 性能优化 checklist
- 避免不必要的渲染(使用v-memo)
- 合理设置key值,避免DOM复用错误
- 大列表使用虚拟滚动
- 图片使用适当的尺寸和格式
- 避免在模板中使用复杂表达式
- 路由懒加载和组件懒加载
- 合理使用缓存减少请求
未来展望:制造系统前端技术趋势
随着制造业数字化转型加速,制造系统前端将呈现以下发展趋势:
- 低代码/无代码:进一步降低制造系统定制门槛,支持业务人员直接参与界面配置
- 3D可视化:引入3D技术实现产线和设备的实时可视化监控
- AI辅助:集成AI能力实现智能表单填充、异常检测和预测分析
- 增强现实(AR):通过AR技术辅助生产操作和设备维护
- 跨平台技术:采用Electron+WebAssembly技术栈,实现更高性能的桌面客户端
TMom将持续跟进这些技术趋势,不断优化产品体验,为制造企业提供更强大、更易用的前端交互平台。
结语
本文详细解析了TMom前端架构的设计思路和实现细节,展示了如何基于Vue3、TypeScript和Ant Design Vue构建企业级制造系统前端解决方案。从技术选型到架构设计,从核心功能实现到性能优化,TMom前端架构充分考虑了制造系统的业务特点和技术挑战,为同类项目提供了可参考的完整方案。
作为开源项目,TMom欢迎更多开发者参与贡献,共同推动制造系统前端技术的发展。您可以通过以下方式参与:
- 代码贡献:提交PR参与功能开发和bug修复
- 文档完善:帮助改进技术文档和使用手册
- 问题反馈:通过issue报告bug和提出建议
- 社区交流:参与项目讨论和技术交流
项目地址:https://gitcode.com/thgao/tmom
让我们共同打造更优秀的制造系统前端框架,为中国制造业数字化转型贡献力量!
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00