3.6 KiB
3.6 KiB
编辑生产任务 · 步骤详情内派发字段 — 设计
日期: 2026-06-25
状态: 已评审,可实施
依赖:2026-06-25-production-step-dispatch-design.md
1. 背景
【编辑生产任务】(DispatchTaskDialog 阶段二)使用三栏编辑器 + StepDetailPanel。步骤负责人与计划开始时间仅能通过独立弹窗 DispatchStepDialog 配置,步骤详情无展示与编辑入口,导致:
- 已派发数据在 API 中存在,右侧详情不可见;
- 工艺库新增步骤无法设置负责人与时间;
- 改派需切换弹窗,体验割裂。
2. 决策
| 项 | 决策 |
|---|---|
| 方案 | A:在 StepDetailPanel 增加负责人 + 计划开始时间 |
| 关闭校验 | 宽松:关闭编辑弹窗时不强制每步均有负责人 |
| 保存策略 | A1:并入步骤「保存」按钮(handleManualSave) |
| 批量改派 | 保留 DispatchStepDialog 作批量入口 |
3. UI
3.1 展示条件
canEditStepDispatch()且!readonly:可编辑控件(编辑工艺 / 任务执行,manage 与 mine 均可)- 只读「任务详情」:展示文本 Tag / 时间,不可改
3.2 任务执行弹窗
- manage 与 mine 均在步骤详情可配置负责人与时间(保存时调
steps/dispatch,带operateScope) - mine 对未派发的新步骤:任务内任一步负责人可配置并保存
3.3 控件(对齐 DispatchStepDialog)
| 字段 | 控件 |
|---|---|
| 负责人 | el-select multiple + remote 用户搜索,nickName(userNo) |
| 计划开始时间 | el-date-picker datetime,value-format="YYYY-MM-DDTHH:mm:00",可清空 |
置于步骤详情 form-grid-4 内(与工序名称等同区),label label-position="top"。
3.4 提示
- 无负责人时:字段下 muted 提示「未派发;保存工艺后可在本处或「步骤派发」中指定负责人」
4. 数据与保存
4.1 加载
- 任务详情 steps 已含
assigneeUserIds、assignees、plannedStartTime normalizeStepSubTables补全assigneeUserIds(来自assignees),并记录快照_snapshotAssigneeUserIds、_snapshotPlannedStartTime用于脏检测
4.2 保存
handleManualSave在saveStepBasic等之后调用saveStepDispatch()- 仅当
stepDispatchChanged(step)时调用PUT steps/dispatch(单步 payload) - 允许
assigneeUserIds为空(清空负责人);plannedStartTime传null表示清空 - 成功后更新快照,避免重复提交
4.3 关闭弹窗
- 不校验全步骤是否已派发;未派步骤仍仅 manage 可见(沿用步骤派发设计 §1.2)
5. 文件
| 文件 | 变更 |
|---|---|
StepDetailPanel.vue |
负责人、计划开始时间表单项 |
useTaskStepEditor.ts |
用户搜索、saveStepDispatch、快照脏检测、并入 handleManualSave |
DispatchTaskDialog.vue |
打开编辑时预加载用户列表(可选) |
6. 测试要点
- 编辑工艺:已派发步骤在详情可见负责人与时间。
- 修改负责人/时间后点「保存」,mine 列表与步骤派发弹窗数据一致。
- 工艺库新增步骤:选中后可在详情设置并保存。
- 清空负责人或计划时间后保存,DB 与再次打开一致。
- 仅改工序名称未改派发字段时,保存不触发 dispatch API。
- 关闭编辑弹窗:部分步骤未派发仍可关闭。
- 工单页 · 任务执行(manage):工艺库新增步骤可在详情设负责人/时间并保存。
- 我的生产任务 · 执行(mine):可编辑负责人/时间并保存(需为任务步骤负责人;未派发新步可由任务内负责人配置)。