# ProcessManagement/ProcessProduct/index 模块详细功能分析

分析对象：`src/views/ProcessManagement/ProcessProduct/index.vue`

## 1. 模块定位

该模块是“生产工艺维护”页面，用于围绕生产订单维护订单级生产工艺。它不是单纯的工艺基础资料维护，而是把“生产订单、物料、标准工艺、生产工艺、图纸、任务下发”串在一起：

- 查询生产订单及其标准工艺、生产工艺、图纸、任务状态。
- 对单个订单/物料维护生产工艺路线。
- 从工序基础库新增、插入、删除、调整生产工艺工序。
- 编辑工序工时、工装量具、指定机床、车间、属性、工序说明和备注。
- 从标准工艺或已有生产工艺拷贝生成当前订单生产工艺。
- 批量按标准工艺生成生产工艺。
- 将生产工艺保存启用，并可下发为生产任务。
- 查看零件图纸、工艺图纸 PDF。
- 可把当前订单生产工艺保存回标准工艺。

## 2. 页面结构

页面由三个主要区域组成：

1. 生产订单查询区
   - 输入条件：生产订单、销售订单、物料编码、物料名称、计划号。
   - 下拉条件：任务状态、属性、工艺状态。
   - 日期条件：下达日期范围。
   - 操作按钮：查询、批量生成生产工艺。

2. 生产订单列表
   - 支持多选，用于批量生成生产工艺。
   - 展示销售订单、计划号、生产订单、物料编码、物料名称、属性、计划数、下达日期、计划开始、计划完成。
   - 通过状态灯展示加急状态、标准工艺、生产工艺、图纸。
   - 每行提供“编辑工艺”入口。
   - 底部有分页，支持每页 20、50、100 条。

3. 弹窗
   - `编辑生产工艺`：核心维护弹窗。
   - `生产工艺拷贝`：代码中已实现，用于从标准工艺或生产工艺拷贝；但当前模板里的“拷贝”按钮被注释，页面默认没有显式入口。
   - `图纸`：PDF 预览弹窗。

## 3. 查询与列表功能

页面创建时会自动调用 `searchTable()` 查询订单列表。

查询入参：

- `订单号`：来自 `orderNo`，为空时传 `0`。
- `合同号`：销售订单。
- `产品编码`：物料编码。
- `产品名称`：物料名称。
- `下达日期1`、`下达日期2`：日期范围。
- `任务状态`：默认 `1`，即未下发。
- `订单状态`：默认 `1`，即机加件。
- `工艺状态`：默认 `0`，即全部。
- `计划号`。
- `PageCurrent`、`PageSize`、`PageCount`、`ItemCount`：分页和输出参数。

调用后台：

- `计划排产_生产订单_订单查询`

返回处理：

- `response.data.result` 赋给 `tableData`。
- `response.data.output[0].ItemCount` 转成 `total1`，驱动分页总数。

列表状态灯含义：

- `加急状态 == 1` 显示绿色，否则灰色。
- `标准工艺 == 1` 显示绿色，否则灰色。
- `生产工艺 == 1` 显示绿色，否则灰色。
- `worker != 0` 认为已有图纸，显示绿色，否则灰色。

## 4. 编辑生产工艺主流程

用户点击某行“编辑工艺”后执行 `editProcess(row)`：

1. 打开 `dialogcasual` 编辑弹窗。
2. 开启 loading。
3. 调用 `getitemdata(row.订单编号)` 获取该订单的原料信息。
4. 调用 `editProcesssearch(row)` 查询当前订单生产工艺。

### 4.1 原料信息

`getitemdata(item)` 根据订单编号查询原料：

- 后台过程：`工艺管理_获取物料原料信息`
- 入参：`订单编号`
- 仅保留 `U_MoType == '机加件'` 的子件。
- 展示字段：子件编码、子件名称、计划数量、材质、基本数量、存货量、待出数量、拣配数量。

这些原料信息展示在编辑弹窗顶部，用于工艺员维护工艺时参考物料和库存情况。

### 4.2 当前生产工艺查询

`editProcesssearch(row)` 查询生产工艺明细：

- 后台过程：`工艺管理_生产工艺_查询生产工艺`
- 入参：`物料编号`、`订单编号`

查询成功后同时加载：

- 工序基础列表：`getProcess()`
- 设备基础数据：`getbasedata()`
- 当前生产工艺明细：`tableData5`
- 插入占位行检测和设备字段转换：`fninsertidx()`

## 5. 编辑弹窗功能

编辑弹窗顶部展示：

- 当前物料编码。
- 当前物料名称。
- 机加原料清单。

弹窗按钮：

- `零件图纸`：查看零件图纸 PDF。
- `工艺图纸`：查看工艺图纸 PDF。
- `保存为标准工艺`：把当前生产工艺保存为标准工艺。
- `下发任务`：把整套生产工艺下发为生产任务。
- `保存/已保存`：启用当前生产工艺。

弹窗主体左右两栏：

- 左侧是工序基础库，支持按工序名称过滤，点击工序可加入当前生产工艺。
- 右侧是当前订单生产工艺明细，支持编辑、排序、插入、删除和单条下发。

## 6. 工序基础库

`getProcess()` 调用：

- 后台过程：`MES_ProcessManagement_ProcessGet`
- 入参：`工艺编号 = ''`

返回数据：

- 保存到 `tableData4`。
- 同步到 `filteredTableData4`。

`filterProcess()` 根据 `processSearchName` 做前端过滤：

- 匹配字段：`工艺名称`
- 过滤逻辑：`item.工艺名称.includes(processSearchName)`

点击左侧工序触发 `editProcedure(row)`。

## 7. 新增/插入生产工艺工序

### 7.1 普通新增工序

当 `insertidx` 为 0 时，点击左侧工序执行普通新增：

- 后台过程：`工艺管理_零件工序_生产工艺_修改数据`
- 入参：
  - `工艺编号`
  - `物料编号`
  - `计划数量`
  - `订单编号`

新增成功后重新查询当前生产工艺：

- `工艺管理_生产工艺_查询生产工艺`

### 7.2 插入占位行后补入工序

当 `insertidx` 非 0 时，表示右侧工艺表里存在一条空工序占位行。点击左侧工序会调用 `updateProcess2(param1)`：

- 后台过程：`工艺管理_零件工序_生产工艺_编辑插入工序`
- 入参：
  - `工艺编号`
  - `idd`：占位行 id
  - `计划数量`
  - `订单编号`

成功后重新查询生产工艺，并把 `insertidx` 重置为 0。

### 7.3 插入空工序行

右侧点击某行的“插入工序”按钮执行 `insertOne(row)`：

- 后台过程：`工艺管理_零件工序_生产工艺_插入工序`
- 入参：
  - `零件图号`：实际传当前 `selectedRow.物料编号`
  - `idd`：当前行 id
  - `订单编号`

该过程应在当前行附近生成空工序占位，之后用户再从左侧工序基础库选择工序填入。

## 8. 编辑生产工艺明细

右侧生产工艺表可编辑字段：

- `准备工时`
- `标准工时`
- `工时合计`
- `工卡量具`
- `指定机床`
- `车间`
- `属性`
- `工艺要求`
- `备注`

字段变更触发 `updateProcess(row)`：

- 后台过程：`工艺管理_零件工序_生产工艺_编辑`
- 入参：
  - `idd`
  - `工艺要求`
  - `准备工时`
  - `标准工时`
  - `工时合计`
  - `工卡量具`
  - `指定机床`
  - `车间`
  - `备注`
  - `属性`

`工卡量具` 和 `指定机床` 支持数组、对象、字符串三种输入形态。方法会统一转换成数组再提交。

注意：工时输入使用 `@input`，每次输入都会调用后台编辑过程；工序说明和备注使用 `@change`，失焦或确认后提交。

## 9. 工序排序与删除

右侧每条工序提供：

- 下移工序：`downOne(row)`
- 上移工序：`upOne(row)`
- 插入工序：`insertOne(row)`
- 删除工序：`deleteOne(row)`
- 单条下发任务：`oneworkprocess(row)`

排序/删除调用过程：

- 上移：`工艺管理_零件工序_生产工艺_上移工序`
- 下移：`工艺管理_零件工序_生产工艺_下移工序`
- 删除：`工艺管理_零件工序_生产工艺_删除工序`

通用入参：

- `物料编号`
- `idd`
- `订单编号`

每次操作成功后都会重新调用：

- `工艺管理_生产工艺_查询生产工艺`

并重新执行 `fninsertidx()` 处理空工序占位和设备字段格式。

## 10. 设备与属性基础数据

`getbasedata()` 调用：

- 后台过程：`设备管理_设备信息_查询`

按 `设备类型名称` 分类：

- `量具` -> `basedatagj`，用于工装量具多选。
- `机床` -> `basedatajc`，用于指定机床多选。
- `车间` -> `basedatacj`，用于车间下拉。

工序属性下拉为前端固定值：

- 外协
- 自制

设备字段后端返回通常是逗号字符串，`fninsertidx()` 和 `datadoing()` 会把：

- `工卡量具`
- `指定机床`

转换为数字数组，方便 Element UI 多选框回显。

## 11. 拷贝生产工艺功能

代码中实现了 `copyData()`、`submitCopy()`、`searchTable2()`、`searchTable4()`，用于从其他工艺来源拷贝到当前订单。

当前模板中原“拷贝”按钮被注释：

```vue
<!-- <el-button ... @click="copyData()">拷贝</el-button> -->
```

因此此能力在源码中存在，但当前页面默认不可见，除非后续恢复按钮或从其他逻辑触发。

### 11.1 选择拷贝来源

`processprodutc` 为勾选状态时，表示从生产工艺拷贝：

- 候选来源过程：`工艺管理_生产工艺_生产工艺拷贝`
- 明细查询过程：`工艺管理_制定标准工艺_拷贝生产工艺`
- 选择字段：`物料编号`

未勾选时，表示从标准工艺拷贝：

- 候选来源过程：`工艺管理_生产工艺_标准工艺拷贝`
- 明细查询过程：`MES_ProcessManagement_ProcessBindGet`
- 选择字段：`零件图号`

### 11.2 确认拷贝

`submitCopy()` 调用：

- 后台过程：`工艺管理_生产工艺_工艺拷贝`

入参：

- `物料编号`：当前订单物料编号。
- `零件图号`：选择的来源物料/零件。
- `订单编号`：当前订单编号。
- `计划数量`：当前订单计划数量。
- `工艺类型`：`processprodutc` 勾选时为 1，否则为 0。

返回 `response.data[0].result === '1'` 判定拷贝成功，然后刷新当前生产工艺。

## 12. 批量生成生产工艺

列表多选后点击“批量生成生产工艺”执行 `AllProductProcess()`。

筛选逻辑：

- 只处理 `标准工艺 == 1` 且 `生产工艺 != 1` 的选中行。
- 把符合条件的订单编号、物料编号、计划数量分别用逗号拼接。

调用后台：

- `工艺管理_零件工序_生产工艺_批量生成生产工艺`

入参：

- `订单编号`
- `零件图号`：实际传物料编号列表。
- `计划数量`

成功后刷新订单列表。

注意：如果选中了数据但没有任何行满足“有标准工艺且未生成生产工艺”，当前代码仍会提交空字符串参数，没有前端提示。

## 13. 保存、启用、保存为标准工艺

### 13.1 保存/启用生产工艺

`saveProcess()` 调用：

- 后台过程：`工艺管理_生产工艺_启用`
- 入参：`订单编号`

该动作更像“启用当前订单生产工艺”，成功后只提示“操作成功”，当前代码未立即刷新生产工艺明细，也未关闭弹窗。

### 13.2 保存为标准工艺

`processSave()` 调用：

- 后台过程：`车间生产管理工艺_零件工序_保存为标准工艺`
- 入参：
  - `物料编号`
  - `订单编号`

返回 `result === '1'` 时提示保存成功，否则提示保存失败。

该功能用于把订单级生产工艺沉淀回物料标准工艺。

## 14. 任务下发

### 14.1 整套生产工艺下发

点击编辑弹窗顶部“下发任务”执行 `workprocess()`。

前置判断：

- `tableData5.length < 1` 时提示下发失败。

调用后台：

- `计划排产_生产订单_订单任务_生产工艺任务下发`

入参：

- `订单编号`
- `物料编号`
- `计划数量`

返回处理：

- `response.data[0].result != 0`：认为下发成功。
- 否则提示“已下发任务”。
- 无论成功或已下发，都会刷新订单列表并关闭编辑弹窗。
- catch 分支也提示成功，说明这里对后台异常处理较宽松。

### 14.2 单条工序下发

右侧工序行点击“下发任务”执行 `oneworkprocess(row)`：

- 后台过程：`计划排产_生产订单_订单任务_单条生产工艺任务下发`
- 入参：
  - `订单编号`
  - `物料编号`
  - `计划数量`
  - `工艺顺序`

成功后刷新订单列表，但不关闭编辑弹窗。

## 15. 图纸查看

### 15.1 零件图纸

`getNum()` 调用：

- 后台过程：`工艺管理_图纸维护_查看图纸`
- 入参：`物料编号`

如果返回数据非空：

- 使用 `MESDownFile + uid + '.pdf'` 拼出 PDF 地址。
- 打开 `seeVisible` 弹窗。
- 调用 `seepdf(pdfSrc, 'see')` 渲染 PDF。

否则提示“未上传图纸”。

### 15.2 工艺图纸

`getNum2()` 调用：

- 后台过程：`工艺管理_工艺维护_查看图纸`
- 入参：`物料编号`

渲染逻辑与零件图纸相同。

## 16. 数据状态与关键变量

核心状态：

- `tableData`：订单列表。
- `tableData5`：当前订单生产工艺明细。
- `tableData4`：工序基础库。
- `filteredTableData4`：过滤后的工序基础库。
- `tableData3`：拷贝来源候选列表。
- `tableData6`：拷贝来源工艺明细预览。
- `selectedRow`：当前选中的订单行。
- `multipleSelection`：订单列表多选项。
- `itemdata`：当前订单机加原料信息。
- `insertidx`：空工序占位行 id，决定点击左侧工序是新增还是填入占位。
- `processStatus`：控制“保存/已保存”按钮显示，但当前代码中基本一直被置为 0。
- `taskstatus`：默认 `1`，页面初始只查未下发。
- `orderstatus`：默认 `1`，页面初始只查机加件。
- `standardprocess`：默认 `0`，工艺状态全部。
- `basedatagj`、`basedatajc`、`basedatacj`：量具、机床、车间选项。

## 17. 后台过程清单

本页面直接调用的后台过程：

- `工艺管理_获取物料原料信息`
- `工艺管理_生产工艺_查询生产工艺`
- `工艺管理_生产工艺_工艺拷贝`
- `工艺管理_生产工艺_生产工艺拷贝`
- `工艺管理_生产工艺_标准工艺拷贝`
- `计划排产_生产订单_订单查询`
- `计划排产_生产订单_订单任务_生产工艺任务下发`
- `计划排产_生产订单_订单任务_单条生产工艺任务下发`
- `工艺管理_零件工序_生产工艺_批量生成生产工艺`
- `设备管理_设备信息_查询`
- `MES_ProcessManagement_ProcessBindGet`
- `工艺管理_制定标准工艺_拷贝生产工艺`
- `MES_ProcessManagement_ProcessGet`
- `车间生产管理工艺_零件工序_保存为标准工艺`
- `工艺管理_图纸维护_查看图纸`
- `工艺管理_工艺维护_查看图纸`
- `工艺管理_零件工序_生产工艺_修改数据`
- `工艺管理_零件工序_生产工艺_编辑`
- `工艺管理_零件工序_生产工艺_编辑插入工序`
- `工艺管理_零件工序_生产工艺_删除工序`
- `工艺管理_零件工序_生产工艺_上移工序`
- `工艺管理_零件工序_生产工艺_下移工序`
- `工艺管理_零件工序_生产工艺_插入工序`
- `工艺管理_生产工艺_启用`

## 18. 业务数据流

典型流程如下：

1. 工艺员进入页面，默认查询未下发的机加件订单。
2. 工艺员按订单号、销售订单、物料、计划号、工艺状态等条件定位订单。
3. 如果订单已有标准工艺但未生成生产工艺，可批量生成生产工艺。
4. 点击“编辑工艺”进入订单级工艺维护。
5. 系统加载当前订单原料、生产工艺、工序基础库、设备基础数据。
6. 工艺员从左侧工序库添加工序，或对已有工序做插入、删除、上下移动。
7. 工艺员维护每道工序的工时、工装量具、指定机床、车间、外协/自制属性、工艺要求和备注。
8. 工艺员可查看零件图纸、工艺图纸辅助判断。
9. 工艺员保存/启用生产工艺。
10. 工艺员可将生产工艺保存为标准工艺。
11. 工艺确认后下发整套生产任务，或只下发单条工序任务。

## 19. 与其他模块关系

该模块位于工艺管理与计划排产之间，是订单进入生产执行前的关键节点。

- 上游依赖：
  - 生产订单/计划排产数据。
  - 标准工艺数据。
  - 工序基础资料。
  - 设备基础资料。
  - 图纸维护资料。

- 下游影响：
  - 生产任务下发。
  - 排产、报工、质检、生产计划跟踪等模块读取任务和工艺路线。
  - 生产工艺的标准工时、准备工时、外协/自制属性会影响计划工时、任务执行和统计报表。

旧技术文档中也将核心数据归为：

- `基础表_工序`
- `车间生产管理工艺_零件工序_工艺库`
- `车间生产管理工艺_零件生产工艺_工艺库`
- `View_标准工艺视图`
- `View_生产工艺视图`
- `物料基础数据_零件图纸`
- `物料基础数据_工艺图纸`

## 20. 代码层面的注意点

1. `selectedRow` 只在表格行点击时赋值。点击“编辑工艺”时没有在 `editProcess(row)` 内显式设置 `selectedRow = row`，依赖表格行点击事件是否先触发。更稳妥的写法应在 `editProcess(row)` 开头赋值。

2. `processStatus` 当前主要被置为 0，`已保存` 状态很难出现。需要结合后端返回或生产工艺状态重新设计。

3. “拷贝”按钮被注释，但相关代码仍完整存在。如果业务需要拷贝，应恢复入口并确认交互。

4. 批量生成时，如果选中行都不满足“有标准工艺且未生成生产工艺”，代码会提交空参数。建议增加前端校验并提示“所选数据无可生成项”。

5. `workprocess()` 的 catch 分支提示“操作成功”，可能掩盖真实失败。建议区分网络/后台异常。

6. `oneworkprocess()` 的 tooltip 文案仍是“删除工序”，但按钮实际是“下发任务”，提示文案不一致。

7. 工时字段使用 `@input` 直接调用后台，连续输入会频繁请求。建议防抖或改为 `@change`。

8. `insertidx` 在 `fninsertidx()` 中只要发现空 `工艺名称` 就赋值，但没有在每次扫描前清零，可能保留旧值。虽然部分流程会重置，但仍存在状态残留风险。

9. `dialogVisible` 在 data 中重复定义，`loading`、`productName`、`pageCurrent`、`pageSize` 也有重复定义或语义冲突，建议整理。

10. 日期控件类型为 `datetimerange`，但 `value-format` 是 `yyyy-MM-dd`，实际只传日期，不含时分秒。

## 21. 总结

`ProcessProduct/index.vue` 是订单级生产工艺维护页面。它的核心价值是把标准工艺和工序基础资料转成可执行的生产订单工艺，并在确认后下发到生产任务。该页面承担的功能包括订单查询、生产工艺生成、工艺路线编辑、工时和设备维护、图纸查看、工艺拷贝、保存启用、保存为标准工艺、整套或单条任务下发。

从业务链路看，该模块是“工艺准备完成”到“生产任务执行”的转换点；从数据风险看，生产工艺一旦下发会影响排产、报工、质检和统计，因此保存、启用、下发、编辑已下发工艺等行为需要明确状态控制。
