日期:2026-09-02
范围:web-admin 运输计划列表与新增/编辑弹窗;backend 计划 create-full / update 及跟进状态相关门禁
状态:已评审(待实现)
业务希望在【运输计划】新增/编辑弹窗增加【暂存】:跳过合同、装送货段、产品等业务校验,以跟进状态「草稿中」落库,便于稍后补全。
正式【创建/保存】仍走全量校验;若原状态为草稿,正式保存后自动升为「待安排」。
| 项 | 决策 |
|---|---|
| 列表默认可见 | 「草稿中」进入默认筛选(与待安排等同类) |
| 首个 Tab | 文案改为「待安排/草稿」;默认同时查 pending_arrange + drafting |
| 跟进状态筛选 | 保持多选;该 Tab 下不再禁用,可继续增删勾选 |
| 暂存校验 | 仅要求归属公司 + 创建日期;跳过业务校验 |
| 正式保存 | 草稿 → 自动变为待安排 |
| 【暂存】可见性 | 新建、草稿中、待安排可暂存;等通知/已安排/已完成/已取消不可 |
| 列表操作 | 草稿与待安排完全相同(安排运输、等通知等;动作内仍全量校验) |
| 实现路径 | 新增状态值 drafting + create/update 增加 saveMode(方案 1) |
| value | 文案 | Tag 建议 |
|---|---|---|
drafting |
草稿中 | info |
wait_notice |
等通知 | warning |
pending_arrange |
待安排 | danger |
arranged |
已安排 | success |
completed |
已完成 | success |
cancelled |
已取消 | info |
draft(展示层曾映射为「待安排」)。archive_status = draft(归档暂存,另一概念)。pl_plan.follow_status 为字符串字段,无需 DDL;更新 schema 注释、前端选项与强制改状态白名单即可。新建【暂存】 ──────────────────▶ drafting
drafting / pending_arrange
【暂存】 ──────────────────▶ drafting
drafting
【创建/保存】formal ────────▶ pending_arrange
drafting / pending_arrange
【安排运输】全量校验 ───────▶ arranged
drafting / pending_arrange
【等通知】全量校验 ─────────▶ wait_notice
wait_notice / arranged / completed / cancelled
✕ 不允许【暂存】降级
凡业务上写死「仅 pending_arrange」且应对草稿开放的能力,同步允许 drafting:
canWaitNotice、删除按钮可见性等wait-notice、delete、ALLOWED_FORCE_FOLLOW_STATUSES(纳入 drafting)drafting 直接进入 arranged在现有接口 body 增加(缺省兼容现网):
saveMode?: 'draft' | 'formal' // 默认 'formal'
涉及:
POST /transport/plan/create-fullPUT /transport/plan/{id}不新增独立草稿 URL。
| saveMode | 校验 | follow_status 写入 |
|---|---|---|
draft |
仅强制 belongsCompany、createDate(缺省则服务端用当天);跳过 validate_create_full、装送货合同/产品等业务校验;不完整装送货结构宽松落库或按空段处理 |
固定 drafting |
formal |
保持现有全量校验 | 新建 → pending_arrange;若原为 drafting → 升为 pending_arrange;其它正式状态按现有更新逻辑 |
draft 更新门禁:仅当当前 follow_status ∈ {drafting, pending_arrange},否则 400「当前状态不可暂存」。
| 接口 | 调整 |
|---|---|
wait-notice |
源状态允许 drafting | pending_arrange |
delete |
允许 drafting(仍要求未安排运输、未归档) |
force-follow-status |
白名单加入 drafting |
| 安排运输链路 | 全量校验后 → arranged(可自 drafting) |
文件主要:web-admin/src/utils/pl-display.ts、web-admin/src/views/pl/plan/index.vue
PL_PLAN_LIST_TABS 首项 label:待安排/草稿(name 仍为 pending_arrange)plPlanListTabToFilters('pending_arrange') → followStatus: 'pending_arrange,drafting'searchForm.followStatus = ['pending_arrange', 'drafting']PL_PLAN_DEFAULT_FOLLOW_STATUSES(含 drafting,不含 cancelled)el-select multiple;去掉该 Tab 下的 :disabledPL_PLAN_FOLLOW_STATUS_OPTIONS 增加「草稿中」/draftinggetPlPlanFollowStatusLabel / TagType 支持 draftingPlPlanFormDialog)顺序:取消 → 暂存(条件)→ 创建|保存 → 创建并安排|保存并安排 / 调整运输
【暂存】显示:
followStatus ∈ {drafting, pending_arrange}样式:中性描边(非 primary);与保存共用/互斥 loading。
handleSubmit 增加 mode:'draft' | 'save' | 'saveAndArrange' | 'rearrange'
draft:只校验归属公司 + 创建日期;saveMode: 'draft';成功「暂存成功」save:全量校验;saveMode: 'formal'| 场景 | 行为 |
|---|---|
| 暂存缺归属公司/创建日期 | 高亮两项 + Message;不跑其它校验 |
| 非法状态暂存 | 后端 400 |
| 正式保存/安排失败 | 与现网一致,状态不变 |
| 暂存成功 | 关弹窗、刷新列表 |
| 层 | 路径 |
|---|---|
| 展示常量 | web-admin/src/utils/pl-display.ts |
| 列表页 | web-admin/src/views/pl/plan/index.vue |
| 表单弹窗 | web-admin/src/components/business/pl-plan-form-dialog/index.vue |
| API 类型 | web-admin/src/api/pl/index.ts(saveMode) |
| Schema | backend/app/schemas/pl/plan.py |
| 创建/更新 | backend/app/api/pl/plan.py |
| 校验辅助 | backend/app/services/pl_plan_service.py(按需拆 validate_draft_min_fields) |
| 强制改状态等 | 同 plan.py 白名单与 wait-notice / delete |
危化品证等其它列表若复用 PL_PLAN_FOLLOW_STATUS_OPTIONS / 默认筛选,一并带上 drafting(与「默认可见」决策一致)。
archive_status)语义与「归档草稿」接口draft 跟进值(若存在,展示兼容可保留,与新 drafting 并存)name 仍为 pending_arrange,文档与代码注释需标明「含草稿」以免后续误改回单状态过滤