Files
zkxw/docs/superpowers/specs/2026-05-24-work-order-task-edit-design.md
T
2026-05-24 17:57:28 +08:00

182 lines
6.7 KiB
Markdown
Raw 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.
# 工单/任务编辑与生产结论 — 设计文档
> 日期: 2026-05-24
> 状态: 已实现(2026-05-24)
> 范围: 质检工单、生产工单、生产任务(web-admin + backend)
## 1. 背景
在工单融合(`work_order_type`: inbound / temporary)之后,列表侧缺少对**备注**与**生产任务结论**的维护入口。本变更补齐编辑能力,并复用既有 API/组件,控制改动面。
## 2. 已确认的产品决策
| 问题 | 决策 |
|------|------|
| 入库工单编辑备注:已完成状态是否可改? | **可以**(任意工单状态均可改备注) |
| 临时生产工单「编辑信息」范围? | **仅备注** |
| 生产任务结论「失败」是否触发业务副作用? | **不触发**;v1 仅结果存储 |
| 结论字段编码? | **拼音缩写**存库;界面展示**中文** |
| 生产任务列表:已完成任务是否可编辑基础信息? | **不需要**(已完成任务不展示「编辑」) |
## 3. 功能清单
### 3.1 质检工单 — 入库 Tab
- 列表操作列增加 **「编辑」**(`EditPen`)。
- 弹窗字段:**仅备注**(`textarea`,max 512)。
- 任意 `work_order_status`(含 `ywc`)可保存。
- 与临时 Tab 的「编辑」(细胞产品 + 备注)区分:入库仅走备注弹窗。
### 3.2 生产工单 — 入库 Tab
- 列表增加 **「编辑」** → 仅备注弹窗(同上)。
- 任意工单状态可改备注。
### 3.3 生产工单 — 临时 Tab
- 列表增加 **「编辑」** → 仅备注弹窗(与入库共用交互)。
- 不包含改任务名称/工艺路线(任务级能力保留在「派发任务」「编辑任务」)。
### 3.4 生产任务 — 列表
- 列表增加 **「编辑」** → 复用 `EditTaskInfoDialog`(`taskName` / `description` / `remark`)。
- **显示条件**:`task_status` 为 `dpz` 或 `jxz`;`ywc` **不展示**编辑按钮。
- 后端可对 `ywc` 拒绝更新(双保险,可选)。
### 3.5 生产任务 — 完成任务结论
- 入口:任务执行弹窗 `TaskExecutionDialog` →「完成任务」。
- 流程:现有 I/O 校验通过 → 弹出**结论弹窗**(非简单 `confirm`)→ 提交完成。
- 结论(必填):
- 存库:`cg` = 成功,`sb` = 失败
- 展示:成功 / 失败;Tag:`success` / `danger`
- 可选备注(`textarea`)。
- v1:**不**改变细胞产品入库、工单状态同步、通知等既有逻辑;仅写入 `conclusion`(及可选 `remark`)并置 `task_status=ywc`。
## 4. 数据模型
### 4.1 已有字段(无需 DDL)
- `biz_qc_work_order.remark`
- `biz_production_work_order.remark`
- `biz_production_task.remark` / `task_name` / `description`
### 4.2 新增字段
```sql
ALTER TABLE biz_production_task
ADD COLUMN conclusion VARCHAR(16) NULL
COMMENT '生产结论 cg=成功 sb=失败'
AFTER completed_time;
```
- 迁移脚本:`docs/sql/production_task_conclusion.sql`
- 全量基线:同步 `docs/sql/zkxw.sql`
### 4.3 结论枚举
| 编码 | 中文标签 | Tag type |
|------|----------|----------|
| `cg` | 成功 | `success` |
| `sb` | 失败 | `danger` |
## 5. API 设计
### 5.1 质检工单 `PUT /web/admin/qc-work-orders/{id}`
**现状**:仅 `temporary` 可更新(`update_temp_qc_work_order`)。
**调整**:
- `inbound`:仅接受 `remark`(忽略 `cellProductId`)。
- `temporary`:保持 `cellProductId` + `remark`。
- 不校验工单是否已完成(备注始终可改)。
### 5.2 生产工单 `PUT /web/admin/production-work-orders/{id}`(新增)
- Body:`{ remark?: string }`
- 入库/临时均可更新备注;任意 `work_order_status`。
- CRUD:`update_production_work_order(db, wo_id, tenant_no, user_id, remark=...)`
### 5.3 生产任务 `PUT /web/admin/production-tasks/{id}/status`
**扩展 Body**(完成时):
```json
{
"taskStatus": "ywc",
"conclusion": "cg",
"remark": "可选"
}
```
- `taskStatus=ywc` 时 **`conclusion` 必填**,且必须为 `cg` | `sb`。
- `remark` 可选;若传入则更新任务 `remark`(与完成备注合并策略:写入 `remark` 字段)。
- `jxz` / `dpz` 状态变更逻辑不变。
### 5.4 列表/详情响应
- `biz_production_task` 序列化增加:`conclusion`、`conclusionLabel`(后端映射中文)。
## 6. 前端设计
### 6.1 共用组件(建议)
`components/business/work-order-remark-dialog/index.vue`(可选抽取)
- Props:`visible`, `title`, `initialRemark`, `loading`
- Emit:`submit(remark)`, `update:visible`
- 规范:`dialog-form-layout`、`label-position="top"`、底栏 Close/Check
若不抽取,各页内联单字段弹窗亦可(最小 diff)。
### 6.2 页面改动
| 页面 | 文件 | 改动 |
|------|------|------|
| 质检工单 | `views/quality-inspection/qc-work-order/index.vue` | 入库 Tab「编辑」+ 备注弹窗;`handleEditRemark` |
| 生产工单 | `views/production/production-work-order/index.vue` | 入库/临时 Tab「编辑」+ 备注弹窗 |
| 生产任务 | `views/production/production-task/index.vue` | `EditTaskInfoDialog`;`v-if` 非 `ywc` |
| 任务执行 | `useTaskStepEditor.ts` + 新 `CompleteProductionTaskDialog.vue` | 完成前结论弹窗 |
| API | `qc-work-order.ts`, `production-work-order.ts`, `production-task.ts` | 新增/扩展类型 |
### 6.3 生产任务列表(可选增强)
- 增加列「生产结论」:`ywc` 行展示 `el-tag`;未完成显示 `—`。
### 6.4 UI 规范
- 操作列 `fixed="right"`,宽度预留(质检约 +60px,生产工单约 +60px,生产任务约 +80px)。
- 结论 Tag 遵循 OpenSpec ui-conventions(状态/结论字段用 `el-tag`)。
## 7. 权限
- 质检:沿用 `biz:qcWorkOrder:list`(现有 PUT)。
- 生产工单/任务:沿用 `require_admin_or_super_admin`。
## 8. 不在本期范围
- 结论为 `sb` 时禁止产出、回滚库存、消息通知。
- 已完成生产任务的基础信息编辑。
- 质检任务完成结论(已有 `tg`/`btg` 流程,不改动)。
## 9. 实施顺序
1. DDL + Model `BizProductionTask.conclusion`
2. 后端:QC 工单 PUT 扩展、生产工单 PUT 新增、完成任务 conclusion 校验
3. 前端 API 类型
4. 质检/生产工单备注编辑 UI
5. 生产任务列表编辑(非 ywc)
6. 完成任务结论弹窗 + 列表结论列(可选)
7. `scripts/check_field_consistency.py`(若扩展 schema)
8. `./scripts/update-graph.sh backend` + `frontend`
## 10. 验收要点
- [ ] 入库质检工单:任意状态可改备注并列表刷新
- [ ] 临时质检工单:原编辑(产品+备注)不受影响
- [ ] 入库/临时生产工单:任意状态可改备注
- [ ] 生产任务:`dpz`/`jxz` 可编辑基础信息;`ywc` 无编辑按钮
- [ ] 完成任务:必须选成功/失败;完成后详情/列表可见中文结论
- [ ] 失败结论不改变细胞产品/工单等下游行为