# 生产计划单 - 页面设计开发说明文档 > 版本: 1.5.0 > 创建日期: 2026-02-06 > 更新日期: 2026-02-13 > 来源系统: 升阳云ERP 演示系统;表与接口对齐《erp与mom数据库表映射对照表》以对接 MOM API > 来源页面: `https://demo.rsun.vip/mp/plan/order/working?workType=0&fmConfig=010501,020501` > 所属模块: 生产计划 > 生产计划单 > 前端路由: `/mp/plan/order/working` > **关联文档**: [erp与mom数据库表映射对照表](db/erp与mom数据库表映射对照表.md)(生产计划模块表与字段映射、与 MOM API 对接时使用);[MOM系统数据升级方案-销售采购生产计划](db/mom系统数据升级方案-销售采购生产计划.md)(MOM 侧 erp_mp_* 镜像表与 pro_workorder 新增字段) --- ## 目录 1. [页面概述](#1-页面概述) 2. [页面结构](#2-页面结构) 3. [列表页设计](#3-列表页设计) 4. [新增/编辑页设计](#4-新增编辑页设计) 5. [数据字段定义](#5-数据字段定义) 6. [按钮操作说明](#6-按钮操作说明) 7. [页面交互规则](#7-页面交互规则) 8. [接口调用说明](#8-接口调用说明) 9. [状态流转](#9-状态流转) 10. [业务规则](#10-业务规则) 11. [前端组件设计](#11-前端组件设计) 12. [数据模型](#12-数据模型) --- ## 1. 页面概述 ### 1.1 功能说明 生产计划单页面用于管理企业的生产计划。生产计划单是连接销售订单与生产执行的核心环节,计划员基于销售订单引入产品物料信息,关联产品BOM,执行BOM运算以展开物料需求,并将生产任务下发至各车间。生产计划单是后续物料清单(MBOM)、采购计划、生产订单的数据来源。 ### 1.2 业务场景 - **新建计划**: 计划员新建生产计划单,通过「引入」按钮选择销售订单/备货订单物料信息,关联产品BOM - **BOM运算**: 计划审核后执行BOM计算,展开产品物料清单,生成物料需求(生产件、采购件、委外件) - **BOM补料**: 对于不在标准BOM中的物料(如定制包装物),通过补料方式添加到计划中 - **下发车间**: 将物料清单中的加工件、装配件、委外件下发到对应车间生产 - **齐套检查**: 检查物料清单中物料的库存可用量,判断是否需要采购 - **采购计划**: 针对缺料物料生成采购计划单 - **审核流程**: 计划单创建后需经审核生效,审核后方可执行BOM运算和下发操作 ### 1.3 URL路由参数 | 参数名 | 类型 | 说明 | |--------|------|------| | workType | integer | 工作类型,0=生产计划单 | | fmConfig | string | 表单配置编码,010501,020501 | ### 1.4 页面截图参考 以下截图均来自项目 `screenshot/` 目录(路径相对于项目根目录),用于开发时对照页面与交互。 | 截图文件 | 说明 | |----------|------| | `screenshot/生产计划-生产计划单-列表明细视图.png` | 列表页 - 明细视图(默认视图),侧重订单物料维度 | | `screenshot/生产计划-生产计划单-列表单据视图.png` | 列表页 - 单据视图,工具栏显示「回明细」切换,侧重单据流程与批量操作 | | `screenshot/生产计划-生产计划单-列表-点击物料名称弹窗.png` | 列表页 - 点击物料名称/物料清单列弹出的「物料清单」弹窗 | | `screenshot/生产计划-生产计划单-单据详情.png` | 列表页 - 点击单据编码进入的详情/关联信息(可对应关联单据弹窗或查看页) | | `screenshot/生产计划-生产计划单-新增初始化页.png` | 新增页 - 空白表单初始状态 | | `screenshot/生产计划-生产计划单新增-引入业务订单.png` | 新增/编辑页 - 「引入」打开的「订单信息」选择弹窗(引入业务订单) | | `screenshot/生产计划-生产计划单新增-订单BOM-选择EBOM单.png` | 表头「订单BOM」- 「选择」打开的「选择EBOM单」弹窗(可展开子件) | | `screenshot/生产计划-生产计划单详情-订单BOM查看弹窗.png` | 表头「订单BOM」- 「查看」打开的 EBOM 详情弹窗 | | `screenshot/生产计划-生产计划单-BOM运算.png` | 编辑/查看页 - BOM运算后含物料清单、操作列(齐套检查/BOM补料/生产补料) | | `screenshot/生产计划-生产计划单详情-物料清单点击后弹窗.png` | 详情页 - 点击物料清单后弹出的物料清单弹窗 | | `screenshot/生产计划-生产计划单详情-物料清单单据编码后打开页面.png` | 物料清单(MBOM)独立查看页 - 通过单据编码打开的页面,含上一条/下一条、翻单、物料信息表(需求数量、可用量、领用量) | **同模块相关截图(可选参考):** | 截图文件 | 说明 | |----------|------| | `screenshot/生产计划-物料清单-列表.png` | 生产计划 - 物料清单(MBOM)列表页 | | `screenshot/生产计划-物料清单-详情.png` | 生产计划 - 物料清单详情页 | | `screenshot/生产计划-计划执行明细表.png` | 计划执行明细表 | | `screenshot/生产计划-计划执行汇总表.png` | 计划执行汇总表 | | `screenshot/生产计划-采购计划单-列表.png` | 采购计划单列表 | | `screenshot/生产计划-零部件订单-列表.png` | 零部件订单列表 | | `screenshot/生产计划下发.png` | 计划下发相关界面 | --- ## 2. 页面结构 ### 2.1 整体布局 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 顶部导航栏 (64px) │ ├────────┬────────────────────────────────────────────────────────┤ │ 左侧 │ 面包屑: 首页 / 生产计划 / 生产计划单 │ │ 菜单 │ ┌────────────────────────────────────────────────┐ │ │ (200px │ │ Tab标签: ● 生产计划单 │ │ │ /64px)│ ├────────────────────────────────────────────────┤ │ │ │ │ 查询区域 (搜索条件) │ │ │ 生产计 │ ├────────────────────────────────────────────────┤ │ │ 划 │ │ 工具栏 (操作按钮 + 快捷筛选标签) │ │ │ ├生产 │ ├────────────────────────────────────────────────┤ │ │ 计划 │ │ 数据表格 │ │ │ 单★ │ │ │ │ │ ├零部 │ │ │ │ │ 件订 │ ├────────────────────────────────────────────────┤ │ │ 单 │ │ 底部统计 + 分页组件 │ │ │ ├零部 │ └────────────────────────────────────────────────┘ │ │ 件计 │ │ │ 划单 │ │ │ ├物料 │ │ │ 清单 │ │ │ ├采购 │ │ │ 计划 │ │ │ 单 │ │ ├────────┴────────────────────────────────────────────────────────┤ ``` ### 2.2 页面模式 | 模式 | 说明 | 入口 | |------|------|------| | 列表页 - 明细视图 | **默认视图**,以订单物料维度展示计划列表,侧重物料和销售订单信息 | 菜单点击「生产计划单」 | | 列表页 - 单据视图 | 以计划单据维度展示列表,侧重单据流程管理 | 明细视图点击「单据」按钮切换 | | 新增页 | 新建生产计划单,填写表头+引入订单信息 | 列表页点击「新增」按钮 | | 编辑页 | 修改已有计划单(仅开立状态) | 单据视图点击「编辑」按钮 | | 查看页 | 只读查看计划单详情(含物料清单、补料清单) | 单据视图点击「查看」按钮 | ### 2.3 列表页双视图概述 列表页提供 **明细视图** 和 **单据视图** 两种展示模式,通过工具栏左侧第一个按钮相互切换: ``` ┌──────────────────────────────────────────────────────────────┐ │ 明细视图(默认) 单据视图 │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ [单据] 按钮 │ ──切换到单据视图──► │ [明细] 按钮 │ │ │ │ │ ◄──切换到明细视图── │ │ │ │ └─────────────┘ └─────────────┘ │ │ │ │ ● 侧重物料信息展示 ● 侧重单据流程管理 │ │ ● 含销售订单信息 ● 有复选框,支持批量操作 │ │ ● 无复选框 ● 操作列: 查看/编辑/删除 │ │ ● 含快捷产品筛选标签 ● 搜索含单据状态/业务状态 │ │ ● 底部显示计划数量汇总 ● 底部显示计划数量汇总 │ └──────────────────────────────────────────────────────────────┘ ``` **两种视图对比总览:** | 对比项 | 明细视图(默认) | 单据视图 | |--------|-----------------|---------| | 切换按钮 | 工具栏显示「单据」按钮 | 工具栏显示「明细」或「回明细」按钮 | | 复选框列 | 无 | 有 | | 序号列 | 有 | 无 | | 搜索条件 | 销售订单号、单据编码、物料编码、物料名称、日期范围 | 单据编码、**单据状态**、**业务状态**、日期范围 | | 工具栏按钮 | 单据、查询所有、新增、导出 | 明细、查询所有、新增、删除、审核、反审核 | | 快捷筛选 | 有(产品类别标签,如"胶带""机柜""电脑") | 无 | | 数据列 | 序号、销售员、销售订单号、订单交期、单据编码、物料名称、物料编码、数量、主计量、物料清单、单据状态、单据日期 | 单据编码、单据日期、单据状态、业务类型、业务部门、业务人员、业务状态、审核日期、操作 | | 操作列 | 无(单据编码可点击查看详情) | 查看、编辑、删除(按状态显隐) | | 批量操作 | 不支持 | 支持(删除、审核、反审核) | | 底部统计 | 计划数量汇总 | 计划数量汇总 | | 适用场景 | 计划员查看订单物料和计划进度 | 管理员进行单据审核管理 | --- ## 3. 列表页设计 ### 3.1 明细视图(默认视图) 明细视图是进入生产计划单页面时的默认视图,侧重于展示计划对应的订单物料信息。 > 截图参考: `screenshot/生产计划-生产计划单-列表明细视图.png` #### 3.1.1 搜索条件区域 | 序号 | 字段名 | 标签 | 组件类型 | 宽度 | 说明 | |------|--------|------|----------|------|------| | 1 | salesOrderCode | 销售订单号 | el-input | 160px | 模糊搜索 | | 2 | planCode | 单据编码 | el-input | 140px | 模糊搜索 | | 3 | itemCode | 物料编码 | el-input | 140px | 模糊搜索 | | 4 | itemName | 物料名称 | el-input | 140px | 模糊搜索 | | 5 | startDate | 开始日期 | el-date-picker | 140px | 日期范围起 | | 6 | endDate | 结束日期 | el-date-picker | 140px | 日期范围止 | > **注意**: 明细视图的搜索条件没有「单据状态」和「业务状态」,但多了「销售订单号」和「物料编码」「物料名称」搜索。 #### 3.1.2 工具栏按钮 | 序号 | 按钮名称 | 图标 | 类型 | 权限标识 | 说明 | |------|----------|------|------|----------|------| | 1 | 单据 | - | primary | mp:plan:list | 切换到单据视图 | | 2 | 查询所有 | el-icon-tickets | default | mp:plan:list | 重置搜索条件并查询所有 | | 3 | 新增 | el-icon-plus | success | mp:plan:add | 打开新增计划单页面 | | 4 | 导出 | el-icon-download | default | mp:plan:export | 导出计划列表到Excel | #### 3.1.3 快捷筛选标签 工具栏按钮右侧显示一组产品类别快捷筛选标签(如 "胶带"、"机柜"、"电脑" 等),点击标签可快速按产品类别筛选列表数据。 | 属性 | 说明 | |------|------| | 来源 | 动态加载,来自系统中已有计划的产品类别 | | 样式 | 文字标签,可点击,选中高亮 | | 行为 | 点击标签筛选该类别产品的计划,再次点击取消筛选 | #### 3.1.4 数据表格列定义 | 序号 | 列标题 | 字段名 | 宽度 | 对齐 | 说明 | |------|--------|--------|------|------|------| | 1 | 序号 | - | 60px | center | 自动编号(无复选框) | | 2 | 销售员 | salesUserName | 80px | center | 销售人员姓名 | | 3 | 销售订单号 | salesOrderCode | 140px | left | 关联的销售订单编码 | | 4 | 订单交期 | deliveryDate | 100px | center | 销售订单交货日期 | | 5 | 单据编码 | planCode | 140px | left | 蓝色链接,可点击打开详情 | | 6 | 物料名称 | itemName | 200px | left | 产品物料名称,可能显示为彩色链接 | | 7 | 物料编码 | itemCode | 120px | left | 产品物料编码 | | 8 | 数量 | totalQuantity | 120px | right | 计划生产总数量(保留2位小数) | | 9 | 主计量 | unitName | 60px | center | 计量单位(台、个、只等) | | 10 | 物料清单 | mbomStatus | 100px | center | BOM运算状态(显示"BOM运算"/"BOM运算,BOM补料"/空) | | 11 | 单据状态 | status | 80px | center | 状态标签(开立/审核) | | 12 | 单据日期 | planDate | 100px | center | 计划单创建日期 | > **注意**: 明细视图没有操作列按钮,通过点击「单据编码」列蓝色链接来查看详情。 --- ### 3.2 单据视图 单据视图侧重于计划单的单据流程管理,支持批量操作(审核、反审核、删除)。 > 截图参考: `screenshot/生产计划-生产计划单-列表单据视图.png` #### 3.2.1 搜索条件区域 | 序号 | 字段名 | 标签 | 组件类型 | 宽度 | 说明 | |------|--------|------|----------|------|------| | 1 | planCode | 单据编码 | el-input | 160px | 模糊搜索 | | 2 | status | 单据状态 | el-select | 120px | 下拉选择,可清空 | | 3 | businessStatus | 业务状态 | el-select | 120px | 下拉选择,可清空 | | 4 | startDate | 开始日期 | el-date-picker | 140px | 日期范围起 | | 5 | endDate | 结束日期 | el-date-picker | 140px | 日期范围止 | > **注意**: 单据视图没有「销售订单号」「物料编码」「物料名称」,而是有「单据状态」和「业务状态」两个下拉选择。 **单据状态选项:** | 值 | 标签 | 标签颜色 | |----|------|----------| | DRAFT | 开立 | info (灰色) | | APPROVED | 审核 | success (绿色) | **业务状态选项:** | 值 | 标签 | |----|------| | NORMAL | 正常 | | PAUSE | 暂停 | | CANCEL | 取消 | #### 3.2.2 工具栏按钮 | 序号 | 按钮名称 | 图标 | 类型 | 权限标识 | 说明 | |------|----------|------|------|----------|------| | 1 | 明细 | - | primary | mp:plan:list | 切换到明细视图 | | 2 | 查询所有 | el-icon-tickets | default | mp:plan:list | 重置搜索条件并查询所有 | | 3 | 新增 | el-icon-plus | success | mp:plan:add | 打开新增计划单页面 | | 4 | 删除 | el-icon-delete | danger | mp:plan:remove | 批量删除选中记录(需勾选,disabled until selected) | | 5 | 审核 | el-icon-check | primary | mp:plan:approve | 批量审核选中记录(需勾选,disabled until selected) | | 6 | 反审核 | - | default | mp:plan:unapprove | 批量反审核选中记录(需勾选,disabled until selected) | #### 3.2.3 数据表格列定义 | 序号 | 列标题 | 字段名 | 宽度 | 对齐 | 排序 | 说明 | |------|--------|--------|------|------|------|------| | 0 | (复选框) | - | 55px | center | - | 多选列,用于批量操作 | | 1 | 单据编码 | planCode | 140px | left | 否 | 可点击打开详情,如 SCJH000105 | | 2 | 单据日期 | planDate | 120px | center | 是 ▼ | 默认降序排列 | | 3 | 单据状态 | status | 80px | center | 否 | 状态标签(颜色区分) | | 4 | 业务类型 | businessType | 100px | center | 否 | 如:生产计划 | | 5 | 业务部门 | deptName | 100px | center | 否 | | | 6 | 业务人员 | operatorName | 100px | center | 否 | | | 7 | 业务状态 | businessStatus | 80px | center | 否 | 正常/暂停/取消 | | 8 | 审核日期 | approveDate | 120px | center | 否 | 仅审核后显示 | | 9 | 操作 | - | 160px | center | - | 操作按钮组(查看/编辑/删除) | #### 3.2.4 单据视图操作列按钮 单据视图操作列按钮,所有状态统一显示: | 按钮 | 颜色 | 权限 | 说明 | |------|------|------|------| | 查看 | success (绿色文字) | mp:plan:query | 打开查看页(只读) | | 编辑 | primary (蓝色文字) | mp:plan:edit | 打开编辑页(仅开立状态可编辑,已审核状态可查看并反审核后编辑) | | 删除 | danger (红色文字) | mp:plan:remove | 二次确认后删除(仅开立状态可删除) | > **注意**: 所有状态的计划单都显示「查看」「编辑」「删除」三个按钮,但已审核状态的编辑实际以查看模式打开,删除操作会被拦截提示。 --- ### 3.3 底部统计区域(两种视图通用) | 组件 | 位置 | 说明 | |------|------|------| | 计划数量统计 | 底部左侧 | 显示 "计划数量:{totalQty}",汇总当前查询结果的总计划数量 | ### 3.4 分页组件(两种视图通用) | 属性 | 值 | 说明 | |------|------|------| | 默认每页条数 | 100 | 可选: 10, 20, 50, 100 | | 布局 | total, sizes, prev, pager, next, jumper | 完整分页 | | 总条数显示 | 共 {total} 条 | 右侧显示 | --- ## 4. 新增/编辑页设计 ### 4.1 页面布局 新增/编辑页面为独立的全屏页面(非弹窗),包含表头表单区和三个子表区。 > 截图参考: 新增初始页 `screenshot/生产计划-生产计划单-新增初始化页.png`;BOM运算后 `screenshot/生产计划-生产计划单-BOM运算.png` ``` ┌──────────────────────────────────────────────────────────────┐ │ 生产计划单 [保存][取消][审核][反审核][收起] │ ├──────────────────────────────────────────────────────────────┤ │ 表头表单区 (4列布局,可折叠) │ │ ┌──────────┬──────────┬──────────┬──────────┐ │ │ │ 单据编码 │ 业务类型 │ 业务人员 │ 订单BOM │ │ │ │ 单据日期 │ 操作员 │ 业务单号 │ 版本号 │ │ │ │ 单据状态 │ 审核员 │ 订单交期 │ 版本说明 │ │ │ │ 业务状态 │ 审核日期 │ 备注 │ 生产总量 │ │ │ └──────────┴──────────┴──────────┴──────────┘ │ ├──────────────────────────────────────────────────────────────┤ │ 订单信息 [+ 引入] │ │ ┌────┬────────┬──────┬────┬──────┬──────┬──┬──┐ │ │ │序号│物料编码 │物料名│主计│数量 │质量要│备│操│ │ │ │ │ │称 │量 │ │求 │注│作│ │ │ ├────┼────────┼──────┼────┼──────┼──────┼──┼──┤ │ │ │ 1 │0102.. │简易..│台 │100 │ │ │删│ │ │ └────┴────────┴──────┴────┴──────┴──────┴──┴──┘ │ ├──────────────────────────────────────────────────────────────┤ │ 物料清单 │ │ ┌──┬──────┬────┬────┬──┬──────┬──────┬──┬────┬────┬────┬──┐ │ │ │序│单据编│单据│业务│状│物料编│物料名│主│供应│生产│下发│操│ │ │ │号│码 │状态│类型│态│码 │称 │量│方式│数量│车间│作│ │ │ └──┴──────┴────┴────┴──┴──────┴──────┴──┴────┴────┴────┴──┘ │ ├──────────────────────────────────────────────────────────────┤ │ 补料清单 │ │ ┌──┬──────┬────┬────┬──┬──────┬──────┬──┬────┬────┬────┬──┬─┐│ │ │序│单据编│单据│业务│状│物料编│物料名│主│供应│生产│补料│补│备││ │ │号│码 │状态│类型│态│码 │称 │量│方式│数量│事由│料│注││ │ │ │ │ │ │ │ │ │ │ │ │ │日│ ││ │ └──┴──────┴────┴────┴──┴──────┴──────┴──┴────┴────┴────┴──┴─┘│ └──────────────────────────────────────────────────────────────┘ ``` ### 4.2 表头表单字段 表头采用4列栅格布局(el-col :span="6"),每行4个字段。 | 序号 | 字段名 | 标签 | 组件类型 | 必填 | 默认值 | 可编辑 | 说明 | |------|--------|------|----------|------|--------|--------|------| | 1 | planCode | 单据编码 | el-input | 是 | 自动生成 | 否(只读) | 格式: SCJH000XXX,后端自动生成 | | 2 | businessType | 业务类型 | el-select | 是 | 生产计划 | 否(只读) | 固定为"生产计划" | | 3 | salesUserName | 业务人员 | el-input | 否 | - | 否(只读) | 引入订单后自动填充销售人员 | | 4 | bomId | 订单BOM | el-input + 选择按钮 | 否 | - | 是 | 点击「选择」弹窗选择产品BOM版本 | | 5 | planDate | 单据日期 | el-date-picker | 是 | 当天日期 | 是 | 日期选择器 | | 6 | operatorName | 操作员 | el-input | 是 | 当前登录用户 | 否(只读) | 自动填充当前登录用户名 | | 7 | salesOrderCode | 业务单号 | el-input | 否 | - | 否(只读) | 引入订单后自动填充销售订单号 | | 8 | bomVersion | 版本号 | el-input | 否 | - | 否(只读) | 选择BOM后自动带入版本号 | | 9 | status | 单据状态 | el-tag | - | 开立 | 否(只读) | 标签显示,开立=info(灰) | | 10 | approverName | 审核员 | el-input | 否 | - | 否(只读) | 审核时自动填充 | | 11 | deliveryDate | 订单交期 | el-date-picker | 否 | - | 否(只读) | 引入订单后自动填充交货日期 | | 12 | versionDesc | 版本说明 | el-input | 否 | - | 否(只读) | 选择BOM后自动带入 | | 13 | businessStatus | 业务状态 | el-select | 是 | 正常 | 是 | 下拉选择 | | 14 | approveDate | 审核日期 | el-date-picker | 否 | - | 否(只读) | 审核时自动填充 | | 15 | remark | 备注 | el-input(textarea) | 否 | - | 是 | 多行文本,最多500字 | | 16 | totalQuantity | 生产总量 | el-input | 否 | 0.00 | 否(只读) | 自动计算,订单信息数量合计 | **业务状态选项:** | 值 | 标签 | |----|------| | NORMAL | 正常 | | PAUSE | 暂停 | | CANCEL | 取消 | ### 4.3 订单信息子表 订单信息子表位于表头下方,标题为「订单信息」。通过「引入」按钮从销售订单引入产品物料。 | 序号 | 列标题 | 字段名 | 宽度 | 组件类型 | 必填 | 说明 | |------|--------|--------|------|----------|------|------| | 1 | 序号 | lineNo | 60px | 自动编号 | - | 行序号,自动递增 | | 2 | 物料编码 | itemCode | 150px | el-input | 是 | 只读,引入订单后自动填充 | | 3 | 物料名称 | itemName | 200px | el-input | - | 只读,引入订单后自动填充 | | 4 | 主计量 | unitName | 80px | el-input | - | 只读,引入订单后自动填充 | | 5 | 数量 | quantity | 120px | el-input-number | 是 | 可修改,引入后默认为订单数量 | | 6 | 质量要求 | qualityReq | 150px | el-input | 否 | 文本输入,质量要求描述 | | 7 | 备注 | remark | 120px | el-input | 否 | 行备注 | | 8 | 操作 | - | 80px | el-button | - | 删除按钮 | ### 4.4 物料清单子表 物料清单子表显示BOM运算后的展开结果,标题为「物料清单」。该表数据由后端BOM运算自动生成。**查看模式(已审核计划)下**,物料清单的部分列可编辑(供应方式、下发车间、下发日期、下发开关),用于计划员在审核后灵活调整物料的供应与下发信息。 | 序号 | 列标题 | 字段名 | 宽度 | 组件类型 | 可编辑 | 说明 | |------|--------|--------|------|----------|--------|------| | 1 | 序号 | - | 60px | 自动编号 | 否 | 自动编号 | | 2 | 单据编码 | mbomCode | 140px | 文本 | 否 | 物料清单单据编码, **可点击,点击后打开查看物料清单页** | | 3 | 单据状态 | mbomStatus | 80px | 标签 | 否 | 物料清单状态 | | 4 | 业务类型 | businessType | 100px | 文本 | 否 | 如:生产计划 | | 5 | 状态 | issueStatus | 80px | el-switch | 是 | 下发开关:ON=下发、OFF=撤销下发;**已下发行切换为OFF时需二次确认** | | 6 | 物料编码 | itemCode | 140px | 文本 | 否 | 物料编码 | | 7 | 物料名称 | itemName | 200px | 文本 | 否 | 物料名称 | | 8 | 主计量 | unitName | 80px | 文本 | 否 | 计量单位 | | 9 | 供应方式 | supplyType | 100px | el-select | 是 | 生产/加工/装配/委外/采购;**未下发状态均可修改**,修改后提示「修改成功」 ,**已下发状态不可修改**,提示"物料清单已经下发"| | 10 | 生产数量 | productionQty | 120px | 文本 | 否 | 需要生产/采购的数量 | | 11 | 下发车间 | workshopName | 120px | el-select | 条件 | 下发目标车间;**已下发(ISSUED)状态下禁用编辑**,提示「已下发状态下无法修改生产车间」 | | 12 | 下发日期 | issueDate | 120px | el-date-picker | 条件 | 下发日期;**已下发(ISSUED)状态下禁用编辑**,提示「已下发状态下无法修改生产日期」 | | 13 | 操作 | - | 100px | 按钮组 | - | **√ 齐套检查**(检查该行物料库存齐套)、**BOM补料**(打开BOM补料弹窗)、**生产补料**(打开生产补料弹窗);审核且BOM运算后显示 | > **编辑条件说明**: 物料清单在计划状态为「审核(APPROVED)」且已完成BOM运算(即 mbomList 非空)时允许编辑,包括查看模式下。已下发(ISSUED)状态的行,仅「供应方式」和「下发开关(撤销下发)」可操作,「下发车间」和「下发日期」禁用。 ### 4.5 补料清单子表 补料清单子表用于BOM计算后的物料补充,标题为「补料清单」。 | 序号 | 列标题 | 字段名 | 宽度 | 说明 | |------|--------|--------|------|------| | 1 | 序号 | - | 60px | 自动编号 | | 2 | 单据编码 | supCode | 140px | 补料单据编码 | | 3 | 单据状态 | supStatus | 80px | 补料清单状态 | | 4 | 业务类型 | businessType | 100px | 业务类型 | | 5 | 状态 | issueStatus | 80px | 状态 | | 6 | 物料编码 | itemCode | 140px | 物料编码 | | 7 | 物料名称 | itemName | 200px | 物料名称 | | 8 | 主计量 | unitName | 80px | 计量单位 | | 9 | 供应方式 | supplyType | 100px | 供应方式 | | 10 | 生产数量 | productionQty | 120px | 生产数量 | | 11 | 补料事由 | supReason | 150px | 补料原因说明 | | 12 | 补料日期 | supDate | 120px | 补料日期 | | 13 | 备注 | remark | 120px | 备注 | ### 4.6 引入订单弹窗 点击订单信息区域的「引入」按钮,打开销售订单选择弹窗(目标系统中弹窗标题为「订单信息」)。 > 截图参考: `screenshot/生产计划-生产计划单新增-引入业务订单.png` | 属性 | 值 | |------|------| | 弹窗标题 | 选择销售订单 / 订单信息(目标系统) | | 弹窗宽度 | 1000px | | 弹窗高度 | 自适应,最大70vh | | 关闭方式 | 右上角 X 按钮、取消按钮 | | 选择模式 | 可勾选多条订单或多条订单明细行(多选) | **弹窗搜索区:** | 组件 | 说明 | |------|------| | 销售单号/订单编码 | 模糊搜索销售订单编码 | | 物料编码 | 可选,模糊搜索物料 | | 物料名称 | 模糊搜索物料名称 | | 开始日期、结束日期 | 可选,日期范围筛选 | | 搜索按钮 | primary类型,执行搜索 | | 查询所有按钮 | 清空条件并刷新列表(目标系统) | **弹窗列表结构(目标系统为层级表格):** - **父行**(订单头):业务人员、业务单号、订单交期、交期状态、业务类型、备注;左侧可展开/收起箭头。 - **子行**(订单明细,展开后显示):物料编码、物料名称、主计量、数量、包装件数、备注等。 - 选择可在父行勾选(整单引入)或子行勾选(按明细行引入),依产品实现。底部「确定」将所选内容合并引入到表单「订单信息」子表。 **弹窗列表表格列(平铺模式时):** | 序号 | 列标题 | 字段名 | 宽度 | 说明 | |------|--------|--------|------|------| | 0 | (复选框) | - | 55px | 多选列 | | 1 | 订单编码 | orderCode | 140px | 销售订单编码 | | 2 | 物料编码 | itemCode | 140px | | | 3 | 物料名称 | itemName | 200px | | | 4 | 型号规格 | specification | 150px | | | 5 | 主计量 | unitName | 80px | 计量单位 | | 6 | 订单数量 | orderQty | 100px | | | 7 | 已计划数量 | plannedQty | 100px | 已被其他计划引用的数量 | | 8 | 可用数量 | availableQty | 100px | 订单数量 - 已计划数量 | | 9 | 交货日期 | deliveryDate | 120px | | **引入交互:** - 勾选一条或多条订单明细行,点击「确定」按钮 - 引入后自动填充订单信息子表:物料编码、物料名称、主计量、数量 - 同时自动填充表头:业务人员(销售人员)、业务单号(销售订单号)、订单交期 - 引入后数量可修改,支持分批次计划 ### 4.7 选择BOM弹窗(选择EBOM单) 点击表头「订单BOM」旁的「选择」按钮,打开BOM选择弹窗(目标系统中弹窗标题为「选择EBOM单」)。 > 截图参考: `screenshot/生产计划-生产计划单新增-订单BOM-选择EBOM单.png` | 属性 | 值 | |------|------| | 弹窗标题 | 选择产品BOM / 选择EBOM单(目标系统) | | 弹窗宽度 | 建议 1000px,最大高度 70vh | | 选择模式 | 单选(每行复选框选一条EBOM) | | 数据范围 | 仅显示引入产品对应的已审核EBOM(同一产品可有多个BOM版本) | **主表列(目标系统):** EBOM单号、物料编码、物料名称、母件基数、版本号、版本说明、图纸号、单据日期、复选框。 **行展开(目标系统):** 主行可展开显示该EBOM的**子件明细**,列:物料编码、物料名称、主计量、领料方式、分子、固定用量、备注。便于选择前查看BOM结构。 **分页:** 共 N 条、100条/页、上一页/下一页、前往 N 页;底部「确定」「取消」。 **选择交互:** - 勾选一条EBOM后点击「确定」,弹窗关闭,自动填充表头「订单BOM」(EBOM单号或显示名)、「版本号」、「版本说明」 - 如产品仅有一个BOM版本,可自动带入无需手动选择 --- ## 5. 数据字段定义 ### 5.1 生产计划单表头字段(erp_mp_plan) > 字段定义以 **《erp数据库设计-数据字典》** 与 **erp数据库设计-DDL.sql** 为准;API 路径见数据字典 8.1:`/mp/plan/order`。 | 字段名 | 数据库字段 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|-----------|------|------|------|--------|------| | 计划ID | plan_id | bigint | - | 是 | AUTO | 主键,自增 | | 租户ID | tenant_id | varchar | 20 | 是 | - | 多租户隔离 | | 计划编码 | plan_code | varchar | 32 | 是 | 自动生成 | 格式: SCJH + 6位流水号 | | 计划日期 | plan_date | date | - | 是 | 当天 | 单据创建日期 | | 单据状态 | status | varchar | 20 | 是 | DRAFT | 开立/审核 | | 业务状态 | business_status | varchar | 20 | 否 | NORMAL | 正常/暂停/取消 | | 业务类型 | business_type | varchar | 20 | 否 | NULL | 业务类型,如生产计划 | | 工作类型 | work_type | int | - | 是 | 0 | 0=生产计划单/1=零部件计划/2=零部件订单 | | 销售订单ID | sales_order_id | bigint | - | 否 | - | 外键 → erp_sl_order | | 销售订单编码 | sales_order_code | varchar | 32 | 否 | - | 冗余 | | 销售员ID | sales_user_id | bigint | - | 否 | - | 销售员ID | | 销售员名称 | sales_user_name | varchar | 50 | 否 | - | 冗余 | | 交货日期 | delivery_date | date | - | 否 | - | 订单交货日期 | | BOM ID | bom_id | bigint | - | 否 | - | 外键 → erp_md_bom | | BOM版本 | bom_version | varchar | 20 | 否 | - | BOM版本号 | | BOM说明 | bom_desc | varchar | 200 | 否 | - | BOM版本说明 | | 生产总量 | total_quantity | decimal | 18,4 | 否 | 0 | 订单物料数量合计 | | 备注 | remark | varchar | 500 | 否 | - | | | 操作员ID | operator_id | bigint | - | 否 | - | 操作员ID | | 操作员名称 | operator_name | varchar | 50 | 否 | - | 操作员名称 | | 审核员ID | approver_id | bigint | - | 否 | - | 审核员ID | | 审核员名称 | approver_name | varchar | 50 | 否 | - | 审核员名称 | | 审核日期 | approve_date | datetime | - | 否 | - | 审核日期 | | 删除标志 | del_flag | char | 1 | 是 | 0 | 0存在/1删除 | | 创建者 | create_by | varchar | 64 | 否 | - | | | 创建时间 | create_time | datetime | - | 否 | - | | | 更新者 | update_by | varchar | 64 | 否 | - | | | 更新时间 | update_time | datetime | - | 否 | - | | ### 5.2 生产计划明细字段(erp_mp_plan_line) > 与 **erp数据库设计-DDL.sql** 中 `erp_mp_plan_line` 一致。供应方式在物料清单(erp_mp_mbom)中维护,计划明细行无 supply_type。 | 字段名 | 数据库字段 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|-----------|------|------|------|--------|------| | 明细ID | line_id | bigint | - | 是 | AUTO | 主键,自增 | | 计划ID | plan_id | bigint | - | 是 | - | 外键 → erp_mp_plan.plan_id | | 计划单编码 | plan_code | varchar | 32 | 是 | - | 冗余 | | 行号 | line_no | int | - | 是 | - | 行序号 | | 销售订单明细ID | sales_line_id | bigint | - | 否 | - | 外键 → erp_sl_order_line.line_id | | 跟单编号 | track_code | varchar | 32 | 否 | - | 跟单编号 | | 物料ID | item_id | bigint | - | 是 | - | 外键 → erp_md_item.item_id | | 物料编码 | item_code | varchar | 32 | 是 | - | 冗余 | | 物料名称 | item_name | varchar | 100 | 是 | - | 冗余 | | 规格型号 | specification | varchar | 200 | 否 | - | | | 计量单位ID | unit_id | bigint | - | 否 | - | 外键 → 计量单位 | | 计量单位 | unit_name | varchar | 20 | 否 | - | 冗余 | | 数量 | quantity | decimal | 18,4 | 是 | 0 | 计划生产数量 | | 质量要求 | quality_req | varchar | 200 | 否 | - | 质量要求描述 | | 备注 | remark | varchar | 200 | 否 | - | | | 删除标志 | del_flag | char | 1 | 是 | 0 | 0存在/1删除 | | 租户ID | tenant_id | varchar | 20 | 是 | - | | ### 5.3 物料清单字段(erp_mp_mbom / erp_mp_mbom_line) 物料清单由 BOM 运算自动生成。**erp_mp_mbom** 表头字段见《erp数据库设计-数据字典》8.2(API 路径 `/mp/plan/mbom`),含 mbom_id、plan_id、plan_code、item_id、supply_type、**quantity**(生产数量)、issue_status、workshop_id 等。**erp_mp_mbom_line** 主键为 **line_id**,含 mbom_id、mbom_code、line_no、parent_item_id、bom_level、item_id、quantity、base_qty、loss_rate、supply_type 等(见 erp数据库设计-DDL.sql)。与 MOM 表映射见 **《erp与mom数据库表映射对照表》** 第 7 节(erp_mp_mbom/erp_mp_mbom_line → MOM 镜像表及 pro_workorder/pro_workorder_bom)。 ### 5.4 与MOM系统表映射关系(对接MOM API时使用) 生产计划单页面**主数据与业务接口以 ERP 表为准**(erp_mp_plan、erp_mp_plan_line、erp_mp_mbom、erp_mp_mbom_line)。根据 **《erp与mom数据库表映射对照表》** 与 **《MOM系统数据升级方案-销售采购生产计划》**: - **MOM 升级后**:MOM 侧存在与 ERP 同名的 **镜像表**(erp_mp_plan、erp_mp_plan_line、erp_mp_mbom、erp_mp_mbom_line),计划审核后可 1:1 同步到 MOM 镜像表(主键一致)。 - **下发车间**:由后端按供应方式将 erp_mp_plan/erp_mp_mbom 拆解写入 MOM 业务表 pro_workorder、pro_workorder_bom;pro_workorder 新增 plan_id、plan_code、bom_version、delivery_date、mbom_id、mbom_code 等字段(见升级方案)。 完整字段与值转换见 **《erp与mom数据库表映射对照表》** 第 2.5 节、第 7 节。 | ERP表名 | MOM 镜像表(1:1) | MOM 业务表(下发时) | 说明 | |---------|-------------------|----------------------|------| | erp_mp_plan | erp_mp_plan | pro_workorder | 计划单→镜像表;下发时 plan_code→source_code,并写入 plan_id、plan_code 等 | | erp_mp_plan_line | erp_mp_plan_line | pro_workorder_bom | 计划明细→镜像表;下发时 item_id→product_id、quantity 等 | | erp_mp_mbom | erp_mp_mbom | pro_workorder(拆解) | 物料清单→镜像表;下发时按供应方式拆解为多个工单 | | erp_mp_mbom_line | erp_mp_mbom_line | pro_workorder_bom | 物料清单明细→镜像表;下发时写入工单BOM | **关键字段对接(ERP → pro_workorder,下发时):** | ERP 表.字段 | MOM 表.字段 | 说明 | |-------------|-------------|------| | erp_mp_plan.plan_code | pro_workorder.source_code | 计划编码作为来源单据编码 | | erp_mp_plan.status | pro_workorder.status | 状态值需转换:DRAFT→PREPARE, APPROVED→CONFIRMED, CLOSED→FINISHED | | erp_mp_plan.work_type | pro_workorder.workorder_type | 0→SELF, 1→SELF, 2→OUTSOURCE | | erp_mp_plan.delivery_date | pro_workorder.request_date | 订单交期→需求日期 | | erp_mp_plan.total_quantity | pro_workorder.quantity | 生产总量→生产数量 | | erp_mp_plan_line.item_id | pro_workorder.product_id | 产品物料ID | | erp_mp_plan_line.quantity | pro_workorder.quantity | 计划数量 | | erp_mp_mbom.supply_type | pro_workorder.workorder_type | 供应方式→工单类型(生产/加工/装配→SELF,委外→OUTSOURCE,采购→不建工单) | | erp_mp_mbom_line.* | pro_workorder_bom.* | 明细字段见《erp与mom数据库表映射对照表》7.3 节;ERP 主键为 line_id | --- ## 6. 按钮操作说明 ### 6.1 明细视图工具栏按钮 #### 6.1.1 「单据」按钮(视图切换) | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 切换到单据视图,重新加载列表数据 | | 权限 | mp:plan:list | | 效果 | 搜索区域、工具栏、表格列全部切换为单据视图样式 | #### 6.1.2 查询所有按钮 | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 清空所有搜索条件(包括快捷筛选标签选择),重新加载列表(pageNum=1) | | 权限 | mp:plan:list | #### 6.1.3 新增按钮 | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 路由跳转到新增生产计划单页面 | | 权限 | mp:plan:add | | 路由 | `/mp/plan/orderadd?open=addStatus&workType=0&fmConfig=010501,020501` | #### 6.1.4 导出按钮 | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 按当前搜索条件导出计划列表到Excel | | 权限 | mp:plan:export | ### 6.2 单据视图工具栏按钮 #### 6.2.1 「明细」按钮(视图切换) | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 切换到明细视图,重新加载列表数据 | | 权限 | mp:plan:list | #### 6.2.2 删除按钮(批量) | 项目 | 说明 | |------|------| | 触发条件 | 勾选一条或多条记录(否则disabled) | | 前置校验 | 仅开立(DRAFT)状态允许删除;已审核状态记录跳过并提示 | | 操作 | 弹出确认框:"确认删除选中的{n}条计划记录?",确认后调用删除接口 | | 权限 | mp:plan:remove | #### 6.2.3 审核按钮(批量) | 项目 | 说明 | |------|------| | 触发条件 | 勾选一条或多条记录(否则disabled) | | 前置校验 | 仅开立(DRAFT)状态允许审核;需要至少有1条订单明细 | | 操作 | 弹出确认框,确认后批量审核 | | 权限 | mp:plan:approve | | 结果 | status → APPROVED,自动记录审核员和审核日期 | #### 6.2.4 反审核按钮(批量) | 项目 | 说明 | |------|------| | 触发条件 | 勾选一条或多条记录(否则disabled) | | 前置校验 | 仅审核(APPROVED)状态允许反审核;需检查是否已执行BOM运算或下发 | | 操作 | 弹出确认框,确认后批量反审核 | | 权限 | mp:plan:unapprove | | 结果 | status → DRAFT,清空审核员和审核日期 | ### 6.3 新增/编辑页按钮 #### 6.3.1 保存按钮 | 项目 | 说明 | |------|------| | 位置 | 页面右上角 | | 颜色 | primary (蓝色) | | 触发条件 | 表单校验通过 | | 操作 | 保存计划表头和订单信息数据 | | 成功提示 | "保存成功" | | 失败提示 | 显示后端返回的错误信息 | #### 6.3.2 取消按钮 | 项目 | 说明 | |------|------| | 位置 | 保存按钮右侧 | | 颜色 | default (灰色) | | 操作 | 如有未保存修改,弹出确认框"有未保存的数据,确认离开?";返回列表页 | #### 6.3.3 审核按钮 | 项目 | 说明 | |------|------| | 位置 | 取消按钮右侧 | | 颜色 | success (绿色) | | 显示条件 | 仅在编辑模式且 status = DRAFT 时启用(新增页disabled) | | 前置条件 | 需先保存,至少有1条订单明细 | | 操作 | 调用审核接口,成功后页面变为只读 | #### 6.3.4 反审核按钮 | 项目 | 说明 | |------|------| | 位置 | 审核按钮右侧 | | 颜色 | warning (橙色) | | 显示条件 | 仅在查看模式且 status = APPROVED 时启用 | | 前置条件 | 该计划未执行BOM运算或所有物料清单未下发 | | 操作 | 调用反审核接口,成功后页面变为可编辑 | #### 6.3.5 收起/展开按钮 | 项目 | 说明 | |------|------| | 位置 | 页面右上角最右侧 | | 操作 | 折叠/展开表头表单区域,仅显示子表明细 | #### 6.3.6 引入按钮(订单信息子表) | 项目 | 说明 | |------|------| | 位置 | 订单信息区域右上角 | | 颜色 | primary (蓝色) | | 操作 | 打开销售订单选择弹窗,引入订单物料行 | | 显示条件 | 仅编辑状态显示 | #### 6.3.7 BOM运算按钮(审核后显示) | 项目 | 说明 | |------|------| | 位置 | 物料清单区域上方 | | 显示条件 | 仅计划已审核(APPROVED)且已选择BOM时显示 | | 操作 | 调用BOM运算接口,后端展开产品BOM生成物料清单 | | **重新运算** | 当物料清单已有数据(mbomList非空)时,点击BOM运算弹出确认对话框:「确认是否重新执行物料计算?」(type: warning);用户确认后方调用接口,后端自动**删除未下发的MBOM记录**后重新生成,避免重复数据;已下发(ISSUED)的MBOM保留不受影响 | | 结果 | 物料清单子表填充数据,显示所有需要的物料(按供应方式分类) | #### 6.3.8 BOM补料按钮 | 项目 | 说明 | |------|------| | 位置 | 物料清单区域 | | 显示条件 | 仅BOM运算完成后显示 | | 操作 | 打开补料弹窗,选择额外物料添加到补料清单 | #### 6.3.9 订单BOM「查看」按钮(查看/已审核时) | 项目 | 说明 | |------|------| | 位置 | 表头「订单BOM」字段右侧,当已选择BOM后显示 | | 颜色 | primary(蓝色文字链接) | | 显示条件 | 查看页或编辑/新增页已填写订单BOM时显示 | | 操作 | 打开「EBOM详情」弹窗,展示 EBOM单号、业务类型、物料编码/名称、属性(母件基数、图纸号、版本号、版本说明)及BOM组件表;只读 | #### 6.3.10 订单信息「BOM计算」「物料清单」按钮(审核后) | 项目 | 说明 | |------|------| | 位置 | 订单信息区域右上角(计划已审核后与「引入」的显示逻辑可二选一或并存) | | BOM计算 | 蓝色按钮,点击调用BOM运算接口,刷新物料清单、补料清单子表 | | 物料清单 | 绿色按钮,可打开销售订单中产品的物料清单列表 **列表标题:「生产计划单号-产品物料编码-产品名称-计划生产总数量」- 物料清单, 列表显示字段:序号 物料编码 物料名称 主计量单位 需求量 可用量 领用量 供应方式** | #### 6.3.11 物料清单子表操作列(齐套检查 / BOM补料 / 生产补料) | 项目 | 说明 | |------|------| | 位置 | 物料清单子表每行「操作」列 | | 显示条件 | 计划已审核且已执行BOM运算后 | | 齐套检查 | 链接「√ 齐套检查」:检查该行物料库存,弹窗或行内展示**序号 物料编码 物料名称 主计量单位 需求量 可用量 缺少量 计划采购 采购订单 采购到货 入库数量 供应方式** | | BOM补料 | 链接「BOM补料」:打开BOM补料弹窗,提交后写入补料清单 | | 生产补料 | 链接「生产补料」:打开生产补料弹窗,提交后写入补料清单 | #### 6.3.12 记录导航「上一条」「下一条」 | 项目 | 说明 | |------|------| | 位置 | 表头区域右侧或订单信息区块上方 | | 显示条件 | 查看/编辑单条计划且存在多条计划记录时 | | 操作 | 上一条:加载上一条计划详情并刷新表单;下一条:加载下一条计划详情并刷新表单 | #### 6.3.13 查看页顶部工具栏(新增/编辑/审核/反审核/打印/操作/收起) | 项目 | 说明 | |------|------| | 适用 | 查看生产计划单页面 | | 按钮 | 新增、编辑、审核、反审核、打印、操作(下拉)、收起;与新增/编辑页差异:无「保存」「取消」,有「新增」「编辑」「打印」「操作」 | | 编辑 | 点击后跳转编辑页或当前页切换为编辑模式 | | 操作下拉 | 可包含打印、导出、复制等,依产品定义 | #### 6.3.14 物料清单下发开关(下发/撤销下发) | 项目 | 说明 | |------|------| | 位置 | 物料清单子表每行「状态」列(el-switch 组件) | | 显示条件 | 计划已审核(APPROVED)且已完成BOM运算 | | 下发(ON) | 开关从 OFF 切换到 ON 时执行下发操作;前置校验:必须已选择下发车间,否则提示「请先选择下发车间」并回退开关状态;校验通过后调用下发接口 `PUT /mp/plan/issue/{mbomId}` | | **撤销下发(OFF)** | 开关从 ON 切换到 OFF 时弹出确认对话框:「撤销下发」(type: warning);用户确认后调用撤销下发接口 `PUT /erp/mp/mbom/revoke-issue/{mbomId}`;撤销后 issueStatus 清空,但保留下发车间和下发日期信息以便调整后重新下发;撤销成功后自动刷新计划数据 | | 取消确认 | 用户点击取消时,开关回退到之前的状态,不执行任何操作 | #### 6.3.15 物料清单供应方式修改 | 项目 | 说明 | |------|------| | 位置 | 物料清单子表每行「供应方式」列(el-select 组件) | | 显示条件 | 计划已审核(APPROVED)且已完成BOM运算 | | 可编辑范围 | **未下发状态下可修改供应方式** | | 操作 | 选择新的供应方式后调用更新接口,成功后提示「修改成功」 | | 选项 | 生产(PRODUCTION)、加工(MACHINING)、装配(ASSEMBLY)、委外(OUTSOURCE)、采购(PURCHASE) | | 转委外按钮 | 供应方式旁可能存在「转委外」快捷按钮,点击直接将供应方式改为委外 | --- ## 7. 页面交互规则 ### 7.1 列表页通用交互 | 序号 | 交互场景 | 交互规则 | |------|----------|----------| | 1 | 页面首次加载 | 默认以明细视图加载第1页数据,按单据日期降序排列 | | 2 | 搜索操作 | 点击搜索按钮,重置pageNum=1,保持当前pageSize不变 | | 3 | 单据编码点击 | 点击单据编码列蓝色链接:可**弹窗展示关联单据**(物料清单MBOM、采购计划单等),或路由跳转查看页;弹窗标题为「{单据编码} - {产品/物料名称}」 | | 4 | 状态标签 | 用el-tag组件渲染:开立=info(灰), 审核=success(绿) | | 5 | 空数据状态 | 列表无数据时显示空状态图标和"暂无数据"文字 | | 6 | 视图切换 | 切换视图时保留搜索条件中的公共字段(单据编码、日期范围),清空视图特有字段 | | 7 | 底部汇总 | 两种视图均显示"计划数量:{total}"汇总 | ### 7.2 明细视图特有交互 | 序号 | 交互场景 | 交互规则 | |------|----------|----------| | 1 | 快捷筛选标签 | 点击产品类别标签,按该类别筛选;再次点击取消筛选 | | 2 | 无批量操作 | 明细视图无复选框,不支持批量选择和批量操作 | | 3 | 物料名称/物料清单点击 | 点击**物料名称**或**物料清单**列,打开「物料清单」弹窗:标题为「{计划编码} {物料编码} {物料名称} {数量} - 物料清单」,表格列:序号、物料编码、物料名称、主计量、需求量、可用量、领用量、供应方式;可用量为负表示缺料;弹窗只读,仅有关闭按钮 | | 4 | 物料清单列 | 显示BOM运算状态文字("BOM运算""BOM运算,BOM补料""生产补料"或空) | ### 7.3 单据视图特有交互 | 序号 | 交互场景 | 交互规则 | |------|----------|----------| | 1 | 批量选择 | 复选框勾选多条记录后,批量操作按钮(删除/审核/反审核)启用;未勾选时置灰disabled | | 2 | 操作列 | 所有状态显示查看+编辑+删除三个按钮,但已审核状态的删除操作会被后端拦截 | | 3 | 单条删除 | 点击行操作列「删除」→ 确认弹窗 → 调用删除接口 → 刷新列表 | | 4 | 批量删除 | 勾选记录 → 点击工具栏「删除」→ 校验状态 → 确认弹窗 → 调用删除接口 | | 5 | 批量审核 | 勾选记录 → 点击工具栏「审核」→ 校验状态和明细 → 确认弹窗 → 调用审核接口 | | 6 | 批量反审核 | 勾选记录 → 点击工具栏「反审核」→ 校验状态和下游引用 → 确认弹窗 → 调用反审核接口 | ### 7.4 新增/编辑页交互 | 序号 | 交互场景 | 交互规则 | |------|----------|----------| | 1 | 页面加载(新增) | 自动填充:单据编码(调接口获取)、单据日期(当天)、操作员(当前用户)、业务类型(生产计划)、业务状态(正常)、生产总量(0.00) | | 2 | 页面加载(编辑) | 调用详情接口加载计划表头、订单信息、物料清单、补料清单数据 | | 3 | 引入订单 | 点击「引入」按钮 → 打开订单选择弹窗 → 勾选订单明细行 → 确认引入 → 自动填充订单信息子表和表头关联字段 | | 4 | 引入后修改数量 | 引入的订单物料数量可以修改,支持分批次计划(如订单100台,本次计划50台) | | 5 | 选择BOM | 引入订单后,点击「订单BOM」的「选择」按钮 → 弹窗显示该产品的所有审核BOM版本 → 选择一个BOM → 自动填充版本号和版本说明 | | 6 | 保存操作 | 前端表单校验 → 校验通过调用保存接口 → 成功提示 → 页面变为编辑模式 | | 7 | 审核操作 | 需先保存 → 确认弹窗 → 调用审核接口 → 成功后页面变只读,出现BOM运算按钮 | | 8 | BOM运算 | 审核后点击BOM运算 → 后端展开BOM → 物料清单子表填充数据 → 可进行下发、齐套检查 | | 8a | **BOM重新运算** | 当物料清单已有数据时,点击BOM运算 → 弹出确认框「确认是否重新执行物料计算?」(warning) → 确认后调用接口 → 后端删除MBOM后重新生成 → 刷新物料清单 | | 9 | 反审核操作 | 确认弹窗 → 调用反审核接口 → 成功后页面变可编辑(需检查无下游引用) | | 10 | 表头折叠 | 点击「收起」→ 表头表单区域收起,仅显示子表明细;点击「展开」→ 恢复 | | 11 | 离开页面 | 有未保存修改时,触发 `beforeRouteLeave` 提示确认 | | 12 | 生产总量自动计算 | 订单信息中物料数量的合计值自动更新到表头「生产总量」字段 | | 13 | **查看模式物料清单编辑** | 计划已审核(APPROVED)且已完成BOM运算后,即使在查看模式下,物料清单子表的供应方式、下发车间、下发日期、下发开关仍可编辑操作 | | 14 | **撤销下发** | 物料清单行已下发(ISSUED)状态时,切换下发开关为OFF → 弹出确认框「撤销下发」(warning) → 确认后调用撤销下发接口 → issueStatus 清空,保留车间和日期 → 刷新计划数据 | | 15 | **已下发行编辑限制** | 已下发(ISSUED)状态的物料清单行:「下发车间」下拉框禁用(disabled),尝试修改提示「下发状态下无法修改生产车间」;「下发日期」日期选择器禁用(disabled),尝试修改提示「下发状态下无法修改生产日期」 | | 16 | **供应方式修改** | 物料清单行的供应方式在未下发状态下可修改,修改后调用更新接口,成功提示「修改成功」 | ### 7.5 表单校验规则 #### 表头校验 | 字段 | 规则 | 提示信息 | |------|------|----------| | planCode | 必填 | 单据编码不能为空 | | planDate | 必填 | 单据日期不能为空 | | businessStatus | 必填 | 业务状态不能为空 | #### 订单信息校验 | 字段 | 规则 | 提示信息 | |------|------|----------| | itemCode | 必填 | 请引入订单物料 | | quantity | 必填,min=0.01 | 数量必须大于0 | #### 业务校验 | 规则 | 说明 | |------|------| | 至少一行订单明细 | 保存时至少要有一条订单物料行 | | 审核前需保存 | 审核操作前需先保存当前数据 | | BOM运算前需审核 | BOM运算只能在审核后执行 | | BOM运算前需选择BOM | 必须先选择产品BOM后才能执行BOM运算 | ### 7.6 弹窗与对话框交互(用户操作与弹窗对应关系) 以下为根据目标ERP系统采集的**按钮/链接点击后弹窗**交互说明,便于前端实现与设计对齐。 #### 7.6.1 列表页 - 点击「单据编码」→ 关联单据弹窗 > 截图参考: `screenshot/生产计划-生产计划单-单据详情.png`(点击单据编码后详情/关联信息) | 项目 | 说明 | |------|------| | 触发 | 列表页(明细视图或单据视图)点击表格中「单据编码」蓝色链接 | | 弹窗标题 | 「{单据编码} - {产品/物料名称}」,如:SCJH000084 - 组装电脑 | | 弹窗宽度 | 建议 900px~1000px | | 内容 | 表格展示**关联单据**(该计划单下游生成的单据) | | 表格列 | 序号、单据编码、单据类型、单据日期、单据状态、业务类型、业务状态 | | 数据示例 | 物料清单(MBOM)、采购计划单(CGJH) 等 | | 操作 | 仅右上角关闭按钮;无确定/取消,只读浏览 | #### 7.6.2 列表页 - 点击「物料名称」/「物料清单」→ 物料清单明细弹窗 > 截图参考: `screenshot/生产计划-生产计划单-列表-点击物料名称弹窗.png` | 项目 | 说明 | |------|------| | 触发 | 明细视图表格中点击「物料名称」或「物料清单」列(某一行) | | 弹窗标题 | 「{计划编码} {物料编码} {物料名称} {数量} - 物料清单」,如:SCJH000106 0102000001 简易机 1 - 物料清单 | | 弹窗宽度 | 建议 1000px | | 内容 | 该计划行对应的 BOM 展开明细(需求量、可用量、领用量) | | 表格列 | 序号、物料编码、物料名称、主计量、需求量、可用量、领用量、供应方式 | | 业务说明 | 可用量为负表示缺料,需采购或补料 | | 操作 | 仅右上角关闭按钮;只读,无编辑与确定/取消 | #### 7.6.3 表单页 - 订单信息「引入」→ 订单信息选择弹窗 > 截图参考: `screenshot/生产计划-生产计划单新增-引入业务订单.png` | 项目 | 说明 | |------|------| | 触发 | 新增/编辑页「订单信息」区域点击「引入」按钮 | | 弹窗标题 | 「订单信息」 | | 弹窗宽度 | 建议 1000px,高度最大 70vh | | 搜索区 | 销售单号、物料编码、物料名称、开始日期、结束日期;按钮「搜索」「查询所有」 | | 列表结构 | **层级表格**:父行=销售订单(业务人员、业务单号、订单交期、交期状态、业务类型、备注),可展开;子行=订单明细(物料编码、物料名称、主计量、数量、包装件数、备注) | | 选择方式 | 可勾选**多条订单**或**多条订单明细行**(复选框在父行或子行,依产品实现);支持多选后一次引入 | | 底部 | 分页(共 N 条、100条/页、上一页/下一页、前往 N 页)、「确定」「取消」 | | 确定后 | 将所选订单明细合并写入表单「订单信息」子表,并填充表头:业务人员、业务单号、订单交期(取第一个选中订单或合并规则) | #### 7.6.4 表单页 - 订单BOM「选择」→ 选择EBOM单弹窗 > 截图参考: `screenshot/生产计划-生产计划单新增-订单BOM-选择EBOM单.png` | 项目 | 说明 | |------|------| | 触发 | 新增/编辑页表头「订单BOM」旁点击「选择」按钮 | | 弹窗标题 | 「选择EBOM单」 | | 弹窗宽度 | 建议 1000px,高度最大 70vh | | 列表列 | EBOM单号、物料编码、物料名称、母件基数、版本号、版本说明、图纸号、单据日期、复选框(单选) | | 行展开 | 主行可展开查看该 EBOM 的**子件明细**(物料编码、物料名称、主计量、领料方式、分子、固定用量、备注) | | 分页 | 共 N 条、100条/页、上一页/下一页、前往 N 页 | | 底部按钮 | 「确定」「取消」 | | 确定后 | 将选中 EBOM 的 EBOM单号/显示名、版本号、版本说明回填到表头「订单BOM」「版本号」「版本说明」 | #### 7.6.5 表单页 - 订单BOM「查看」→ EBOM详情弹窗 > 截图参考: `screenshot/生产计划-生产计划单详情-订单BOM查看弹窗.png` | 项目 | 说明 | |------|------| | 触发 | 查看/编辑页表头「订单BOM」已填写时,显示「查看」按钮,点击打开 | | 弹窗标题 | 「{EBOM单号}-{业务类型}」,如:EBOM000781-机械BOM | | 弹窗宽度 | 建议 900px | | 内容结构 | **EBOM信息**:EBOM单号、业务类型、物料编码、物料名称;**属性**:母件基数、图纸号、版本号、版本说明;**BOM组件表**:序号、物料编码、物料名称、主计量、用料方式、分子、固定用量(可为开关) | | 操作 | 只读查看,仅关闭按钮;若存在固定用量等可操作项,按产品定义为仅查看或可编辑 | #### 7.6.6 表单页 - 订单信息「BOM计算」「物料清单」按钮(审核后) > 物料清单弹窗截图: `screenshot/生产计划-生产计划单详情-物料清单点击后弹窗.png`;独立页截图: `screenshot/生产计划-生产计划单详情-物料清单单据编码后打开页面.png` | 项目 | 说明 | |------|------| | 显示条件 | 计划已审核(APPROVED)后,订单信息区域**上方**显示「BOM计算」「物料清单」按钮(替代或与「引入」并存逻辑依产品而定:新增/未引入时显示引入,已审核且已有订单行时可显示 BOM计算、物料清单) | | BOM计算 | 点击后调用 BOM 运算接口,刷新「物料清单」「补料清单」子表数据 | | 物料清单 | 点击后可打开物料清单汇总弹窗或跳转物料清单(MBOM)列表/详情,依产品实现 | #### 7.6.7 表单页 - 物料清单子表「操作」列(齐套检查 / BOM补料 / 生产补料) | 项目 | 说明 | |------|------| | 显示位置 | 计划已审核且已执行 BOM 运算后,「物料清单」子表每行「操作」列 | | 操作项 | **√ 齐套检查**:检查该行物料库存齐套情况,可弹窗或行内展示可用量、缺料数;**BOM补料**:打开 BOM 补料弹窗,为该计划/物料追加补料;**生产补料**:打开生产补料弹窗,录入生产补料 | | 交互 | 齐套检查可为弹窗只读;BOM补料/生产补料为表单弹窗,提交后更新「补料清单」子表 | #### 7.6.8 表单页 - 记录导航「上一条」「下一条」 | 项目 | 说明 | |------|------| | 位置 | 表头区域右侧或订单信息区块上方 | | 显示条件 | 查看/编辑单条计划时,当存在多条计划记录时显示 | | 操作 | 「上一条」:加载上一条计划详情并刷新表单;「下一条」:加载下一条计划详情并刷新表单;顺序可按计划编码或单据日期,与列表查询条件一致 | --- ## 8. 接口调用说明 ### 8.1 接口总览 | 序号 | 功能 | 方法 | 路径 | 说明 | |------|------|------|------|------| | 1 | 查询计划列表(明细) | GET | /mp/plan/list | 分页查询,明细视图(含订单物料维度) | | 2 | 查询计划列表(单据) | GET | /mp/plan/order/list | 分页查询,单据视图(计划单维度) | | 3 | 获取计划详情 | GET | /mp/plan/{planId} | 获取单条计划表头+订单信息+物料清单+补料清单 | | 4 | 新增计划 | POST | /mp/plan | 创建新计划 | | 5 | 修改计划 | PUT | /mp/plan | 更新计划表头+订单信息 | | 6 | 删除计划 | DELETE | /mp/plan/{planIds} | 批量删除计划 | | 7 | 审核计划 | PUT | /mp/plan/approve/{planId} | 审核单据 | | 8 | 反审核计划 | PUT | /mp/plan/unapprove/{planId} | 反审核单据 | | 9 | 获取计划编码 | GET | /mp/plan/genCode | 生成新的计划编码 | | 10 | BOM运算 | POST | /mp/plan/bomCalc/{planId} | 执行BOM运算展开物料清单 | | 11 | BOM补料 | POST | /mp/plan/supplement/{planId} | 添加补料物料 | | 12 | 下发车间 | PUT | /mp/plan/issue/{mbomId} | 下发物料清单到车间 | | 13 | 齐套检查 | GET | /mp/plan/kitCheck/{planId} | 检查物料齐套情况 | | 14 | 导出计划 | GET | /mp/plan/export | 导出计划列表到Excel | | 15 | 查询可引入订单 | GET | /sl/order/available | 获取可引入的销售订单明细 | | 16 | 查询BOM列表 | GET | /rd/ebom/listByItem/{itemId} | 获取指定产品的BOM列表 | | 17 | **撤销下发** | PUT | /erp/mp/mbom/revoke-issue/{mbomId} | 撤销已下发的物料清单行 | **说明(与MOM对接):** 上表路径为 **ERP 侧接口**(可为网关前缀 `/erp` 下的 `/erp/mp/plan` 等),对应数据库表为 **erp_mp_plan**、**erp_mp_plan_line**、**erp_mp_mbom**、**erp_mp_mbom_line**(表与字段以《erp数据库设计-数据字典》及 DDL 为准)。生产计划单页面的增删改查、审核、BOM运算、齐套检查等均调用上述 ERP 接口。**MOM 侧**(见《MOM系统数据升级方案-销售采购生产计划》):计划审核后可 1:1 同步到 MOM 的 **erp_mp_*** 镜像表;**下发车间** 时由后端按供应方式拆解写入 `pro_workorder`、`pro_workorder_bom`(plan_id、plan_code、bom_version、delivery_date、mbom_id、mbom_code 等见映射表 5.4 与《erp与mom数据库表映射对照表》)。若前端或中台需**直接调用 MOM API**,查询计划层可用 MOM 的 erp_mp_* 镜像表接口(若已实施);查询工单列表、工单报工等使用 MOM 的 pro_workorder 相关接口与字段(workorder_code、source_code=plan_code、status 枚举 CONFIRMED/PRODUCING/FINISHED 等)。 ### 8.2 接口详细说明 #### 8.2.1 查询计划列表(明细视图) ``` GET /mp/plan/list ``` **请求参数:** | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | pageNum | integer | 否 | 页码,默认1 | | pageSize | integer | 否 | 每页数,默认100 | | planCode | string | 否 | 单据编码(模糊) | | salesOrderCode | string | 否 | 销售订单号(模糊) | | itemCode | string | 否 | 物料编码(模糊) | | itemName | string | 否 | 物料名称(模糊) | | beginDate | string | 否 | 开始日期 (yyyy-MM-dd) | | endDate | string | 否 | 结束日期 (yyyy-MM-dd) | | workType | integer | 否 | 工作类型,0=生产计划单 | **响应示例:** ```json { "total": 101, "rows": [ { "planId": 105, "planCode": "SCJH000105", "planDate": "2026-02-04", "status": "APPROVED", "salesUserName": "张键", "salesOrderCode": "XSDD000090", "deliveryDate": "2026-02-06", "itemId": 100, "itemCode": "0102000001", "itemName": "简易机", "unitName": "台", "totalQuantity": 100.00, "mbomStatus": "BOM运算", "businessStatus": "正常", "approveDate": "2026-02-06" } ], "code": 200, "msg": "查询成功", "totalQuantitySum": 32434255 } ``` #### 8.2.2 获取计划详情 ``` GET /mp/plan/{planId} ``` **响应示例:** ```json { "code": 200, "data": { "planId": 105, "planCode": "SCJH000105", "planDate": "2026-02-04", "status": "APPROVED", "businessType": "PRODUCTION", "businessStatus": "NORMAL", "salesOrderId": 90, "salesOrderCode": "XSDD000090", "salesUserName": "张键", "deliveryDate": "2026-02-06", "bomId": 50, "bomVersion": "1.0", "bomDesc": "", "totalQuantity": 100.00, "operatorName": "njrsun", "approverName": "njrsun", "approveDate": "2026-02-06", "remark": "", "lines": [ { "lineId": 1001, "planId": 105, "lineNo": 1, "itemId": 100, "itemCode": "0102000001", "itemName": "简易机", "unitName": "台", "quantity": 100.00, "qualityReq": "", "remark": "" } ], "mbomList": [ { "mbomId": 201, "mbomCode": "MBOM000169", "planId": 105, "status": "APPROVED", "businessType": "PRODUCTION", "itemId": 200, "itemCode": "0301000001", "itemName": "底架组件", "unitName": "套", "supplyType": "ASSEMBLY", "productionQty": 100.00, "issueStatus": "NOT_ISSUED", "workshopName": "" } ], "supplementList": [] } } ``` #### 8.2.3 新增计划 ``` POST /mp/plan ``` **请求体:** ```json { "planDate": "2026-02-06", "businessStatus": "NORMAL", "salesOrderId": 90, "salesOrderCode": "XSDD000090", "salesUserName": "张键", "deliveryDate": "2026-02-06", "bomId": 50, "bomVersion": "1.0", "remark": "", "lines": [ { "lineNo": 1, "itemId": 100, "itemCode": "0102000001", "itemName": "简易机", "unitName": "台", "quantity": 100.00, "qualityReq": "" } ] } ``` #### 8.2.4 修改计划 ``` PUT /mp/plan ``` **请求体:** 同新增,但包含 `planId` 和各明细行的 `lineId`。 **注意:** 修改时采用全量提交策略,后端根据lineId判断新增/修改/删除。 #### 8.2.5 删除计划 ``` DELETE /mp/plan/{planIds} ``` **业务规则:** - 仅允许删除开立(DRAFT)状态的计划 - 删除时同时删除订单明细行记录 - 逻辑删除(del_flag = 1) #### 8.2.6 审核计划 ``` PUT /mp/plan/approve/{planId} ``` **业务规则:** - 仅开立(DRAFT)状态允许审核 - 至少有一条订单明细 - 审核后自动填充审核员和审核日期 - status → APPROVED #### 8.2.7 反审核计划 ``` PUT /mp/plan/unapprove/{planId} ``` **业务规则:** - 仅审核(APPROVED)状态允许反审核 - 需校验是否已执行BOM运算,若已执行则需先清除物料清单 - 需校验物料清单中是否有已下发的记录 - 反审核后清空审核员和审核日期 - status → DRAFT #### 8.2.8 BOM运算 ``` POST /mp/plan/bomCalc/{planId} ``` **业务规则:** - 仅已审核(APPROVED)状态且已选择BOM的计划可执行 - 展开产品BOM,按供应方式(生产、加工、装配、委外、采购)分类生成物料清单 - 自动计算各物料的需求数量 - 如存在孪生物料,按优先级和库存情况自动替换 **响应:** ```json { "code": 200, "msg": "BOM运算完成", "data": { "mbomCount": 5, "totalItems": 12 } } ``` #### 8.2.9 下发车间 ``` PUT /mp/plan/issue/{mbomId} ``` **业务规则:** - 将物料清单行下发到指定车间 - 下发后在MOM系统创建对应的生产工单 - issueStatus → ISSUED #### 8.2.10 撤销下发 ``` PUT /erp/mp/mbom/revoke-issue/{mbomId} ``` **请求参数:** | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | mbomId | long | 是 | 物料清单ID(路径参数) | **业务规则:** - 仅允许已下发(ISSUED)状态的物料清单行执行撤销操作 - 撤销后 issueStatus 清空(设为 null) - **保留** workshopId、workshopName、issueDate 等字段,方便用户调整后重新下发 - 自动更新 update_time 时间戳 **响应示例:** ```json { "code": 200, "msg": "撤销下发成功" } ``` **后端实现要点:** - Controller 层: `MpMbomController` 新增 `PUT /erp/mp/mbom/revoke-issue/{mbomId}` - Service 接口: `IMpMbomService` 新增 `revokeIssue(Long mbomId)` 方法 - Service 实现: `MpMbomServiceImpl` 实现撤销逻辑(校验 MBOM 存在且为 ISSUED 状态 → 清空 issueStatus → 更新时间戳) #### 8.2.11 导出计划 ``` GET /mp/plan/export ``` **请求参数:** 同查询列表参数。 **响应:** 返回Excel文件流 --- ## 9. 状态流转 ### 9.1 单据状态流转图 ``` ┌──────────────┐ │ │ ┌─────────► 开立(DRAFT) ◄──────────┐ │ │ │ │ │ └──────┬───────┘ │ │ │ │ │ [审核操作] [反审核操作] │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ │ │ └──────────┤ 审核(APPROVED)├───────────┘ │ │ └──────┬───────┘ │ [BOM运算] │ ▼ ┌──────────────┐ │ │ │ BOM运算完成 │ │ │ └──────┬───────┘ │ [下发车间] │ ▼ ┌──────────────┐ │ │ │ 生产执行中 │ │ │ └──────────────┘ ``` ### 9.2 状态说明 | 状态 | 编码 | 可执行操作 | 说明 | |------|------|-----------|------| | 开立 | DRAFT | 编辑、保存、删除、审核 | 初始状态,可自由编辑 | | 审核 | APPROVED | 查看、反审核、BOM运算、下发、齐套检查、导出 | 生效状态,不可编辑表头和订单信息 | ### 9.3 BOM运算状态 | 状态 | 说明 | |------|------| | 未运算 | 审核后初始状态,物料清单为空 | | BOM运算 | 已执行BOM运算,物料清单已展开 | | BOM运算,BOM补料 | 已执行BOM运算且有补料记录 | ### 9.4 物料清单下发状态 | 状态 | 编码 | 说明 | |------|------|------| | 未下发 | NOT_ISSUED | 初始状态,物料清单行尚未下发到车间 | | 已下发 | ISSUED | 已下发到车间,MOM系统已创建对应工单 | | 部分下发 | PARTIAL_ISSUED | 部分数量已下发 | --- ## 10. 业务规则 ### 10.1 编码规则 | 规则 | 说明 | |------|------| | 前缀 | SCJH | | 流水号 | 6位数字,不足补零 | | 格式 | SCJH000001, SCJH000002, ... | | 生成方式 | 后端自动生成,不可手动修改 | ### 10.2 引入订单规则 | 规则 | 说明 | |------|------| | 来源 | 仅可引入已审核的销售订单/备货订单中供货方式为"计划生产"的物料 | | 数量限制 | 引入数量不能超过订单可用数量(订单数量 - 已被其他计划引入数量) | | 数量可修改 | 引入后可修改数量,支持分批次计划 | | 多订单引入 | 同一计划单可引入多个销售订单的物料(一般为同一产品的不同订单) | | 重复引入 | 已引入的订单行不允许重复引入 | ### 10.3 BOM运算规则 | 规则 | 说明 | |------|------| | 前置条件 | 计划已审核、已选择产品BOM | | 展开方式 | 按BOM层级逐级展开,直到最底层物料 | | 供应分类 | 按物料供应方式(生产、加工、装配、委外、采购)分类生成物料清单 | | 数量计算 | 根据BOM用量比例和计划数量自动计算各物料需求量 | | 孪生物料 | 如配置了孪生物料(可替换物料),按优先级和库存可用量自动选择 | | 重复运算 | 可重新执行BOM运算,前端弹出确认对话框「确认是否重新执行物料计算?」 | | **重新运算后端逻辑** | 后端在创建新MBOM前,先查询该计划下已有的MBOM记录:**删除未下发(非ISSUED)状态的MBOM及其明细行(mbom_line)**,防止产生重复数据;**已下发(ISSUED)的MBOM保留不动**;仅为没有已下发MBOM对应的计划明细行重新创建MBOM | ### 10.4 下发规则 | 规则 | 说明 | |------|------| | 下发顺序 | 通常先下发委外件→加工件→装配件→最后产成品 | | 齐套检查 | 下发前建议执行齐套检查,确认物料库存充足 | | 下发前置 | 下发前必须已选择下发车间,否则提示「请先选择下发车间」并阻止下发 | | 部分下发 | 支持部分数量下发 | | 下发结果 | 下发后在MOM系统自动创建生产工单 | | **撤销下发** | 已下发(ISSUED)的物料清单行可撤销下发:前端弹出确认对话框「撤销下发」;确认后调用 `PUT /erp/mp/mbom/revoke-issue/{mbomId}`;撤销后 issueStatus 清空(设为 null),但**保留**下发车间和下发日期信息,用户可调整后重新下发 | | **已下发行编辑限制** | 已下发(ISSUED)状态的物料清单行:「下发车间」和「下发日期」禁止修改(el-select/el-date-picker disabled),尝试修改分别提示「下发状态下无法修改生产车间」和「下发状态下无法修改生产日期」;「供应方式」不受限制,可随时修改 | ### 10.5 下游引用规则 | 引用场景 | 影响 | |----------|------| | 已执行BOM运算 | 反审核前需先清除物料清单 | | 物料清单已下发 | 不允许反审核、不允许删除 | | 已生成采购计划 | 需关注采购计划联动 | --- ## 11. 前端组件设计 ### 11.1 文件结构 ``` src/ ├── api/ │ └── mp/ │ └── plan.js # 生产计划单相关API接口定义 ├── views/ │ └── mp/ │ └── plan/ │ ├── index.vue # 列表页入口(含明细视图+单据视图切换) │ ├── list.vue # 列表页实现组件 │ ├── form.vue # 新增/编辑/查看页 │ └── components/ │ ├── DetailViewTable.vue # 明细视图表格组件 │ ├── DocumentViewTable.vue # 单据视图表格组件 │ ├── PlanHeaderForm.vue # 表头表单组件 │ ├── OrderLineTable.vue # 订单信息子表组件(可编辑) │ ├── MbomTable.vue # 物料清单子表组件(只读) │ ├── SupplementTable.vue # 补料清单子表组件(只读) │ ├── OrderSelectDialog.vue # 销售订单选择弹窗组件 │ └── BomSelectDialog.vue # BOM选择弹窗组件 ``` ### 11.2 API接口文件 ```javascript // src/api/mp/plan.js import request from '@/utils/request' // 查询计划列表(明细视图) export function listPlan(query) { return request({ url: '/mp/plan/list', method: 'get', params: query }) } // 查询计划列表(单据视图) export function listPlanOrder(query) { return request({ url: '/mp/plan/order/list', method: 'get', params: query }) } // 获取计划详情 export function getPlan(planId) { return request({ url: '/mp/plan/' + planId, method: 'get' }) } // 新增计划 export function addPlan(data) { return request({ url: '/mp/plan', method: 'post', data: data }) } // 修改计划 export function updatePlan(data) { return request({ url: '/mp/plan', method: 'put', data: data }) } // 删除计划 export function delPlan(planIds) { return request({ url: '/mp/plan/' + planIds, method: 'delete' }) } // 审核计划 export function approvePlan(planId) { return request({ url: '/mp/plan/approve/' + planId, method: 'put' }) } // 反审核计划 export function unapprovePlan(planId) { return request({ url: '/mp/plan/unapprove/' + planId, method: 'put' }) } // 获取计划编码 export function genPlanCode() { return request({ url: '/mp/plan/genCode', method: 'get' }) } // BOM运算 export function bomCalc(planId) { return request({ url: '/mp/plan/bomCalc/' + planId, method: 'post' }) } // BOM补料 export function supplement(planId, data) { return request({ url: '/mp/plan/supplement/' + planId, method: 'post', data: data }) } // 下发车间 export function issueMbom(mbomId, data) { return request({ url: '/mp/plan/issue/' + mbomId, method: 'put', data: data }) } // 齐套检查 export function kitCheck(planId) { return request({ url: '/mp/plan/kitCheck/' + planId, method: 'get' }) } // 导出计划 export function exportPlan(query) { return request({ url: '/mp/plan/export', method: 'get', params: query, responseType: 'blob' }) } // 查询可引入订单 export function listAvailableOrders(query) { return request({ url: '/sl/order/available', method: 'get', params: query }) } // 查询产品BOM列表 export function listBomByItem(itemId) { return request({ url: '/rd/ebom/listByItem/' + itemId, method: 'get' }) } ``` ### 11.3 路由配置 ```javascript // src/router/modules/mp.js { path: '/mp', component: Layout, redirect: '/mp/plan/order/working', name: 'Mp', meta: { title: '生产计划', icon: 'el-icon-date' }, children: [ { path: 'plan/order/working', name: 'PlanOrder', component: () => import('@/views/mp/plan/list'), meta: { title: '生产计划单', icon: 'el-icon-document' } }, { path: 'plan/orderadd', name: 'PlanOrderAdd', component: () => import('@/views/mp/plan/form'), meta: { title: '新增生产计划单', activeMenu: '/mp/plan/order/working' }, hidden: true }, { path: 'plan/orderedit/:planId', name: 'PlanOrderEdit', component: () => import('@/views/mp/plan/form'), meta: { title: '编辑生产计划单', activeMenu: '/mp/plan/order/working' }, hidden: true }, { path: 'plan/orderview/:planId', name: 'PlanOrderView', component: () => import('@/views/mp/plan/form'), meta: { title: '查看生产计划单', activeMenu: '/mp/plan/order/working' }, hidden: true } ] } ``` --- ## 12. 数据模型 ### 12.1 表关系图 ``` ┌──────────────────────────┐ │ erp_sl_order │ │ (销售订单) │ │ │ │ order_id (PK) │ │ order_code │ │ sales_user_name │ │ delivery_date │ └──────────┬───────────────┘ │ 1:N (引入) ▼ ┌──────────────────────────┐ ┌──────────────────────────┐ │ erp_mp_plan │ │ erp_md_bom │ │ (生产计划单/表头) │────►│ (产品BOM) │ │ │ │ │ │ plan_id (PK) │ │ bom_id (PK) │ │ plan_code (UK) │ │ bom_code │ │ sales_order_id (FK)──────┼──► │ item_id │ │ bom_id (FK) ─────────────┼──► │ version │ │ status │ └──────────────────────────┘ │ total_quantity │ └──────────┬───────────────┘ │ 1:N ▼ ┌──────────────────────────┐ │ erp_mp_plan_line │ ┌──────────────────────────┐ │ (计划明细/订单信息) │ │ erp_md_item │ │ │ │ (物料档案) │ │ line_id (PK) │ │ │ │ plan_id (FK) ────────────┼──► │ item_id (PK) │ │ item_id (FK) ────────────┼──► │ item_code │ │ quantity │ │ item_name │ │ quality_req │ │ supply_type │ └──────────────────────────┘ └──────────────────────────┘ ┌──────────────────────────┐ │ erp_mp_mbom │ │ (物料清单/BOM运算结果) │ │ │ │ mbom_id (PK) │ │ mbom_code │ │ plan_id (FK) ────────────┼──► erp_mp_plan.plan_id │ plan_code │ │ item_id (FK) ────────────┼──► erp_md_item.item_id │ supply_type │ │ quantity │ (生产数量,与数据字典一致) │ issue_status │ └──────────┬───────────────┘ │ 1:N ▼ ┌──────────────────────────┐ │ erp_mp_mbom_line │ │ (物料清单明细) │ │ │ │ line_id (PK) │ (与 DDL 一致,主键为 line_id) │ mbom_id (FK) ────────────┼──► erp_mp_mbom.mbom_id │ mbom_code │ │ item_id (FK) ────────────┼──► erp_md_item.item_id (子件物料) │ quantity │ │ base_qty, loss_rate │ │ supply_type │ └──────────────────────────┘ ``` ### 12.2 MOM系统表映射(与《erp与mom数据库表映射对照表》一致) 生产计划单页面涉及的 ERP 表与 MOM 表对应关系如下(含 **MOM 升级后** 的镜像表,见《MOM系统数据升级方案-销售采购生产计划》)。**对接 MOM API 时** 需区分:查询计划层数据可使用 MOM 侧 **erp_mp_*** 镜像表;查询工单/报工使用 **pro_workorder**、**pro_workorder_bom** 及字段名(详见映射表文档第 7 节)。 | ERP表名 | MOM 镜像表(1:1) | MOM 业务表(下发时) | 说明 | |---------|-------------------|----------------------|------| | erp_mp_plan | erp_mp_plan | pro_workorder | 计划审核后同步到镜像表;下发时拆解为工单,plan_code→source_code,并写入 plan_id、plan_code、bom_version、delivery_date、mbom_id 等 | | erp_mp_plan_line | erp_mp_plan_line | pro_workorder_bom | 计划明细同步到镜像表;下发时 item_id→product_id 等 | | erp_mp_mbom | erp_mp_mbom | pro_workorder (拆解) | 物料清单同步到镜像表;下发时按供应方式拆解为多个子工单 | | erp_mp_mbom_line | erp_mp_mbom_line | pro_workorder_bom | 物料清单明细同步到镜像表;下发时写入工单BOM | | erp_md_item | - | md_item | 物料档案 | | erp_md_bom | - | md_bom | 产品BOM | | erp_sl_order | erp_sl_order | - | 销售订单(MOM 镜像表存订单;工单通过 source_code 等关联) | **MOM 侧关键字段(对接工单 API 时使用):** `pro_workorder.plan_id`、`pro_workorder.plan_code`、`pro_workorder.source_code`(= plan_code)、`pro_workorder.status`(CONFIRMED/PRODUCING/FINISHED 等)、`pro_workorder.workorder_type`(SELF/OUTSOURCE)、`pro_workorder.request_date`(= delivery_date)、`pro_workorder.delivery_date`、`pro_workorder.quantity`(= total_quantity)、`pro_workorder.bom_version`、`pro_workorder.mbom_id`、`pro_workorder.mbom_code`;`pro_workorder_bom.product_id`、`pro_workorder_bom.quantity` 等。完整字段与值转换见《erp与mom数据库表映射对照表》7.1~7.3 节。 ### 12.3 数据同步方向 ``` ERP (erp_mp_plan / erp_mp_plan_line / erp_mp_mbom / erp_mp_mbom_line) │ ├── 审核后 1:1 同步 ──► MOM 镜像表 (erp_mp_plan / erp_mp_plan_line / erp_mp_mbom / erp_mp_mbom_line) │ └── 下发车间时 ──► MOM 业务表: erp_mp_plan/erp_mp_mbom → pro_workorder(按供应方式拆解) erp_mp_plan_line/erp_mp_mbom_line → pro_workorder_bom ``` - **同步方向**: ERP → MOM(单向同步) - **镜像表同步**: 计划审核后,ERP 表 1:1 同步到 MOM 同名 erp_mp_* 表(主键一致,见《MOM系统数据升级方案-销售采购生产计划》) - **下发触发**: 物料清单**下发车间**时,由后端按供应方式拆解写入 pro_workorder、pro_workorder_bom(plan_id、plan_code、bom_version、delivery_date、mbom_id、mbom_code 等写入 pro_workorder) - **同步方式**: 生产/加工/装配→SELF,委外→OUTSOURCE;采购不建工单,走采购计划/到货通知 - **接口约定**: 页面增删改查、审核、BOM 运算、齐套检查等调用 **ERP 接口**(操作 erp_mp_* 表);MOM 若已实施升级方案,可提供对 erp_mp_* 镜像表的查询接口;工单列表/报工等使用 MOM 的 pro_workorder、pro_workorder_bom 及对应 API --- ## 附录A: 状态标签颜色映射 ```javascript // 状态标签类型映射 const statusTagMap = { 'DRAFT': 'info', // 灰色 - 开立 'APPROVED': 'success' // 绿色 - 审核 } // 状态标签文字映射 const statusLabelMap = { 'DRAFT': '开立', 'APPROVED': '审核' } // 业务状态映射 const businessStatusMap = { 'NORMAL': '正常', 'PAUSE': '暂停', 'CANCEL': '取消' } // 物料清单下发状态映射 const issueStatusMap = { 'NOT_ISSUED': '未下发', 'ISSUED': '已下发', 'PARTIAL_ISSUED': '部分下发' } // 供应方式映射 const supplyTypeMap = { 'PRODUCTION': '生产', 'MACHINING': '加工', 'ASSEMBLY': '装配', 'OUTSOURCE': '委外', 'PURCHASE': '采购' } ``` --- ## 附录B: 权限标识汇总 | 权限标识 | 说明 | 对应操作 | 所属视图 | |----------|------|----------|----------| | mp:plan:list | 列表查询 | 查看计划列表、视图切换 | 通用 | | mp:plan:query | 详情查询 | 查看计划详情 | 单据视图 | | mp:plan:add | 新增 | 新增计划单 | 通用 | | mp:plan:edit | 编辑 | 修改计划单 | 单据视图 | | mp:plan:remove | 删除 | 删除计划单 | 单据视图 | | mp:plan:approve | 审核 | 审核计划单 | 单据视图 | | mp:plan:unapprove | 反审核 | 反审核计划单 | 单据视图 | | mp:plan:export | 导出 | 导出计划列表 | 明细视图 | | mp:plan:bomCalc | BOM运算 | 执行BOM运算 | 编辑页 | | mp:plan:issue | 下发 | 下发物料清单到车间 | 编辑页 | | mp:plan:kitCheck | 齐套检查 | 检查物料齐套情况 | 编辑页 | | mp:plan:supplement | 补料 | BOM补料操作 | 编辑页 | --- ## 附录C: 与产品BOM页面的关联说明 生产计划单页面与产品BOM页面存在紧密的业务关联: | 关联点 | 说明 | |--------|------| | 选择BOM | 生产计划单中选择的「订单BOM」来自产品BOM页面创建的已审核BOM记录 | | BOM运算 | BOM运算时读取选中BOM的物料清单,按层级展开为物料需求 | | BOM版本 | 支持选择同一产品的不同BOM版本用于不同计划 | | 数据流向 | 产品BOM(EBOM)→ 生产计划BOM运算 → 物料清单(MBOM)→ 下发车间 | --- ## 修订历史 | 版本 | 日期 | 修订内容 | 修订人 | |------|------|----------|--------| | 1.0.0 | 2026-02-06 | 初始版本,基于目标ERP系统采集分析,完整页面设计开发说明 | System | | 1.1.0 | 2026-02-07 | 补充用户交互与弹窗:列表点击单据编码/物料名称弹窗、引入订单信息弹窗、选择EBOM单/EBOM详情弹窗、订单信息BOM计算与物料清单按钮、物料清单操作列(齐套检查/BOM补料/生产补料)、上一条/下一条、查看页顶部工具栏 | System | | 1.2.0 | 2026-02-07 | 对齐《erp与mom数据库表映射对照表》:新增 5.4 与MOM表映射关系、8.1 接口与MOM对接说明、12.2/12.3 表映射与同步方向,便于与 MOM 系统 API 对接 | System | | 1.3.0 | 2026-02-07 | 更新页面截图参考:全部引用改为项目 screenshot/ 目录下生产计划单相关截图;1.4 完善截图对照表并增加同模块相关截图;3.1/3.2、4.1/4.6/4.7、7.6 各节补充对应截图路径 | System | | 1.4.0 | 2026-02-07 | 对齐 prd/db 数据库文档:5.1/5.2 表头与明细字段与《erp数据库设计-数据字典》及 DDL 一致(plan 表补 sales_user_id/operator_id/approver 等,total_quantity 18,4;plan_line 用 sales_line_id/track_code/unit_id,quantity 18,4,移除 supply_type);5.3 物料清单引用数据字典 8.2 与 DDL;5.4/12.2/12.3 补充 MOM 镜像表及下发链路;12.1 数据模型图 erp_mp_mbom 用 quantity、erp_mp_mbom_line 主键 line_id;8.1 接口说明与 MOM 对接描述更新;关联文档增加升级方案 | System | | 1.5.0 | 2026-02-13 | 完善生产计划单MBOM功能:(1) 查看模式下物料清单可编辑——已审核计划在查看页支持修改供应方式、下发车间、下发日期、下发开关(canEditMbom 移除查看模式限制);(2) BOM重新运算——物料清单已有数据时增加确认对话框,后端删除未下发MBOM后重新生成,防止重复;(3) 撤销下发——新增 PUT /erp/mp/mbom/revoke-issue/{mbomId} 接口及前端确认交互,撤销后清空 issueStatus 但保留车间/日期信息;(4) 已下发行编辑限制——下发车间/下发日期在 ISSUED 状态下禁用并提示错误;(5) 供应方式修改成功提示「修改成功」;新增 6.3.14(下发/撤销下发开关)、6.3.15(供应方式修改)按钮说明,更新 4.4 物料清单子表列定义、7.4 交互规则、8.1/8.2.10 接口、10.3 BOM运算规则、10.4 下发规则 | System |