Files
my-mom-system/prd/mom系统生产计划单-页面开发说明文档.md
panchengyong c28ada5050 commit content
2026-03-06 02:02:59 +08:00

1847 lines
93 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 生产计划单 - 页面设计开发说明文档
> 版本: 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.2API 路径 `/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_bompro_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 - 组装电脑 |
| 弹窗宽度 | 建议 900px1000px |
| 内容 | 表格展示**关联单据**(该计划单下游生成的单据) |
| 表格列 | 序号、单据编码、单据类型、单据日期、单据状态、业务类型、业务状态 |
| 数据示例 | 物料清单(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.17.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_bomplan_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版本用于不同计划 |
| 数据流向 | 产品BOMEBOM→ 生产计划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,4plan_line 用 sales_line_id/track_code/unit_idquantity 18,4移除 supply_type5.3 物料清单引用数据字典 8.2 与 DDL5.4/12.2/12.3 补充 MOM 镜像表及下发链路12.1 数据模型图 erp_mp_mbom 用 quantity、erp_mp_mbom_line 主键 line_id8.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 |