2026-06-25-edit-task-step-dispatch-in-panel-design.md 3.6 KB

编辑生产任务 · 步骤详情内派发字段 — 设计

日期: 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. 测试要点

  1. 编辑工艺:已派发步骤在详情可见负责人与时间。
  2. 修改负责人/时间后点「保存」,mine 列表与步骤派发弹窗数据一致。
  3. 工艺库新增步骤:选中后可在详情设置并保存。
  4. 清空负责人或计划时间后保存,DB 与再次打开一致。
  5. 仅改工序名称未改派发字段时,保存不触发 dispatch API。
  6. 关闭编辑弹窗:部分步骤未派发仍可关闭。
  7. 工单页 · 任务执行(manage):工艺库新增步骤可在详情设负责人/时间并保存。
  8. 我的生产任务 · 执行(mine):可编辑负责人/时间并保存(需为任务步骤负责人;未派发新步可由任务内负责人配置)。