Files
shanxia2.0/openspec/changes/pl-plan-archive-draft/design.md
T
2026-08-30 09:30:02 +08:00

43 lines
2.2 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.
## Context
运输计划归档弹窗(`pl-plan-archive-dialog`)提交走 `POST /transport/plan/{id}/archive`,会写装卸货数量、运费、回传附件,触发库存,并将 `archive_status` 设为 `archived`。未归档计划无法中途保存部分填写内容。
## Goals / Non-Goals
**Goals:**
- 未正式归档时可暂存部分归档表单数据,下次打开自动回填
- 暂存不改库存、不完成计划
- 列表可区分未归档 / 已暂存 / 已归档
**Non-Goals:**
- localStorage 草稿、多人编辑锁
- 已归档「调整」模式的暂存
- 数据库新表或 DDL(`archive_status` 已为 VARCHAR(20))
## Decisions
1. **状态值 `draft`**:扩展 `archive_status` 为 `unarchived | draft | archived`,暂存时写入 `draft`;正式归档仍写 `archived`。备选「仅写字段不改状态」不利于列表识别,故不采用。
2. **独立草稿接口**:`POST .../archive-draft`,body 复用 `PlanArchiveBody`。与正式归档分离,避免误触发库存。
3. **同字段持久化**:草稿写入现有 `inbound_qty` / `outbound_qty` / 品牌 / 运费 / 附件字段;打开弹窗沿用现有加载逻辑即可回填。允许空数量(不强制 `_require_qty`)。
4. **运费暂存放宽**:`hasFreight=1` 但运输量未填齐时允许保存部分运费字段,跳过「运输量必须大于0」硬校验;正式归档仍严格校验。
5. **UI**:仅 `archiveStatus !== 'archived'` 显示「暂存」(Document 图标 + 中性描边);暂存成功后刷新列表状态并关闭弹窗。
## Risks / Trade-offs
- [Risk] 草稿部分数量被其他报表/导出误当成正式归档数 → Mitigation:导出与库存仅在 `archived` 时视为完成;列表明确「已暂存」
- [Risk] 运费草稿写入运输单后影响结算草稿 → Mitigation:沿用 `sync_draft_settlement_freight_for_transport`(仅草稿结算),正式结算仍受锁定校验约束
- [Risk] 产品行不完整提交 → Mitigation:草稿允许子集更新已提交行;缺失行保留库内原值
## Migration Plan
- 无 DDL;已有 `unarchived` 数据不变
- 回滚:前端隐藏暂存按钮并下线 draft 接口即可;库中 `draft` 可视为未归档处理
## Open Questions
- 无(方案 A 已确认)