首页
/ 从0到1构建企业级制造系统前端:TMom基于Vue3+TypeScript+Ant Design Vue的技术实践

从0到1构建企业级制造系统前端:TMom基于Vue3+TypeScript+Ant Design Vue的技术实践

2026-02-04 04:22:17作者:俞予舒Fleming

你是否正在寻找一套既能满足复杂制造业务需求,又具备现代前端架构特性的解决方案?作为生产执行系统(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复用错误
  • 大列表使用虚拟滚动
  • 图片使用适当的尺寸和格式
  • 避免在模板中使用复杂表达式
  • 路由懒加载和组件懒加载
  • 合理使用缓存减少请求

未来展望:制造系统前端技术趋势

随着制造业数字化转型加速,制造系统前端将呈现以下发展趋势:

  1. 低代码/无代码:进一步降低制造系统定制门槛,支持业务人员直接参与界面配置
  2. 3D可视化:引入3D技术实现产线和设备的实时可视化监控
  3. AI辅助:集成AI能力实现智能表单填充、异常检测和预测分析
  4. 增强现实(AR):通过AR技术辅助生产操作和设备维护
  5. 跨平台技术:采用Electron+WebAssembly技术栈,实现更高性能的桌面客户端

TMom将持续跟进这些技术趋势,不断优化产品体验,为制造企业提供更强大、更易用的前端交互平台。

结语

本文详细解析了TMom前端架构的设计思路和实现细节,展示了如何基于Vue3、TypeScript和Ant Design Vue构建企业级制造系统前端解决方案。从技术选型到架构设计,从核心功能实现到性能优化,TMom前端架构充分考虑了制造系统的业务特点和技术挑战,为同类项目提供了可参考的完整方案。

作为开源项目,TMom欢迎更多开发者参与贡献,共同推动制造系统前端技术的发展。您可以通过以下方式参与:

  • 代码贡献:提交PR参与功能开发和bug修复
  • 文档完善:帮助改进技术文档和使用手册
  • 问题反馈:通过issue报告bug和提出建议
  • 社区交流:参与项目讨论和技术交流

项目地址:https://gitcode.com/thgao/tmom

让我们共同打造更优秀的制造系统前端框架,为中国制造业数字化转型贡献力量!

登录后查看全文
热门项目推荐
相关项目推荐