编辑 | blame | 历史 | 原始文档

工艺流程工序"产出产品"支持多选 - 前后端改动总结

状态:已完成

前端和后端改动均已实施,编译验证通过。

涉及页面

  • 生产管控 → 产品设计 → 工艺流程 → 工序编辑弹窗(工艺路线工序)
  • 生产管控 → 生产工单 → 工序编辑弹窗(工单工序)
  • 生产管控 → 生产工单 → 工序列表展示

API 变更

请求参数变更

MesProRouteProcessSaveReqVO(工艺路线工序保存):

字段 旧类型 新类型 说明
outputItemId Long 已删除 替换为 outputItemIds

| outputItemIds | - | List<Long> | 新增,产出产品物料编号列表 |

MesProWorkOrderProcessSaveReqVO(工单工序保存):

字段 旧类型 新类型 说明
outputItemId Long 已删除 替换为 outputItemIds

| outputItemIds | - | List<Long> | 新增,产出产品物料编号列表 |

响应字段变更

MesProRouteProcessRespVO(工艺路线工序响应):

字段 类型 说明
outputItemId Long 保留(向后兼容),取第一个产出产品
outputItemCode String 保留,第一个产出产品编码
outputItemName String 保留,第一个产出产品名称
outputItemIds List<Long> 新增,所有产出产品编号列表
outputItemNames String 新增,所有产出产品名称(逗号拼接)

MesProWorkOrderProcessRespVO(工单工序响应):

同上,字段一致。

列表接口

方法 路径 说明
GET /mes/pro/route-process/list-by-route?routeId={id} 工艺路线工序列表
GET /mes/pro/route-process/list-by-product?productId={id} 按产品获取工序列表(含投料BOM)
GET /mes/pro/work-order-process/list-by-work-order-id?workOrderId={id} 工单工序列表
GET /mes/pro/work-order-process/list-by-product-id?productId={id} 按产品获取工序列表(工单预填用)
POST /mes/pro/route-process/create 创建工艺路线工序
PUT /mes/pro/route-process/update 更新工艺路线工序
POST /mes/pro/work-order-process/create 创建工单工序
PUT /mes/pro/work-order-process/update 更新工单工序
POST /mes/pro/work-order-process/batch-save 批量保存工单工序

前端修改点

1. MdItemSelect 组件(src/views/mes/md/item/components/select.vue

新增 multiple prop:

Prop 类型 默认值 说明
multiple boolean false 是否多选模式

多选模式行为:
- modelValue 类型为 number[]
- 展示名称逗号拼接(取物料 name 拼接)
- 弹窗以 multiple: true 打开
- 选中值以数组形式 emit

单选模式行为不变。

2. API 类型定义

src/api/mes/pro/route/process/index.ts

RouteProcess 接口新增:
typescript outputItemIds?: number[]; // 产出产品编号列表 outputItemNames?: string; // 产出产品名称(逗号拼接)

src/api/mes/pro/workorder/process/index.ts

WorkOrderProcess 接口新增同上两个字段。

3. 工艺路线工序表单

src/views/mes/process-design/route/data.ts

产出产品字段 schema 修改:
- fieldName"outputItemId" 改为 "outputItemIds"
- componentProps 增加 multiple: true

src/views/mes/process-design/route/modules/process-list.vue

列表/表格中产出产品列展示改为 outputItemNames(逗号分隔的名称)。

4. 工单工序表单

src/views/mes/pro/workorder/modules/process-form.vue

产出产品字段改为多选组件,fieldName 改为 "outputItemIds"

src/views/mes/pro/workorder/data.ts

表格列中产出产品列展示改为 outputItemNames

src/views/mes/pro/workorder/modules/process-list.vue

工艺路线→工单工序映射时,透传多值 outputItemIds/outputItemNames

数据带入说明

工艺流程新增工序

  1. 用户在表单中多选产出产品 → outputItemIds: [101, 102]
  2. 保存时 POST body 传 { ..., outputItemIds: [101, 102] }
  3. 后端将 [101, 102] 转为 "101,102" 存入 DB
  4. 列表查询时后端返回 outputItemIds: [101, 102], outputItemNames: "产品A, 产品B"

工单从工艺路线带入

调用 GET /mes/pro/work-order-process/list-by-product-id?productId={id} 获取工序列表时:
- 响应中 outputItemIdsoutputItemNames 已由后端解析好
- 前端直接回显到表单即可

工单工序批量保存

请求 POST /mes/pro/work-order-process/batch-save
- 每个工序项传 outputItemIds: [101, 102]
- 后端合并处理

注意事项

  • 旧数据兼容:DB 中旧值 "101"(单值字符串)解析后自动转为 ["101"],不影响列表展示
  • 下游取第一个:排产任务创建时取 outputItemIds 第一个值作为任务物料,多产出场景下用户需确认第一个产出产品是正确的
  • 投料 BOM 展开:仍然按第一个产出产品 ID 匹配工序配方,如果后续需要支持多个产出产品的 BOM 展开,需另外改造
  • 前端 MdItemSelect 的 multiple prop 默认为 false,确保其他使用此组件的地方不受影响