Files
shanxia2.0/docs/superpowers/specs/2026-07-27-pl-plan-create-date-design.md
T

5.3 KiB
Raw Blame History

运输计划 · 创建日期字段与取货/送达默认 — 设计文档

日期: 2026-07-27
状态: 待实施
前置: docs/运输计划管理-需求说明文档.md §7;docs/superpowers/specs/2026-06-20-pl-plan-form-dialog-design.md

目标

  1. 在运输计划上新增独立业务字段 创建日期(create_date / createDate),与系统公共字段 create_time 分离。
  2. 在 新增/编辑弹窗(pl-plan-form-dialog)中,「计划日期」前展示可编辑的「创建日期」,默认当天。
  3. 取货时间 / 送达时间 在新增初始化时若为空,默认填为当前计划日期;用户改过后不再跟随计划日期变化。

已确认决策

# 决策 说明
D1 独立字段 pl_plan.create_date(DATE),API createDate;不复用、不改写系统 createTime
D2 存量回填 迁移时 create_date = DATE(create_time)(create_time 为空则用当天)
D3 UI 范围 仅新增/编辑弹窗;列表、查看弹窗、筛选 本期不做
D4 取货/送达默认 仅新增表单初始化:若为空 → 填 planDate;用户改过取货/送达后不再同步;不监听计划日期后续变更
D5 计划日期 语义不变(发起/计划执行业务日);默认仍为当天;与创建日期相互独立
D6 安排运输弹窗 本期不改 pl-plan-arrange-dialog 的取货/送达默认逻辑

非目标(本期不做)

  • 列表列、列表筛选、查看弹窗展示「创建日期」
  • 将「创建日期」写入送货单/入库单/分装单打印模板
  • 安排运输弹窗内自动默认取货/送达
  • 修改需求文档中历史「计划日期 = 发起计划的日期」表述的全量文档同步(可实现后择机改一句说明)

数据模型

pl_plan 新增列

列名 类型 约束 说明
create_date DATE NOT NULL(迁移后) 业务创建日期

字段顺序建议:业务编号区附近,放在 plan_date 之前或紧邻 plan_date(实现时与现有列序习惯对齐;公开字段区 create_time 等不变)。

迁移脚本

  • 路径:backend/scripts/ 增量 SQL + 同步 docs/sql/shanxia2.0.sql(或当前权威 DDL 快照约定)
  • 步骤建议:
    1. ADD COLUMN create_date DATE NULL COMMENT '创建日期'
    2. UPDATE pl_plan SET create_date = DATE(create_time) WHERE create_date IS NULL
    3. 对仍为空的行 SET create_date = CURDATE()
    4. MODIFY create_date DATE NOT NULL

ORM / Schema / API

  • PlPlan.create_date 映射注释「创建日期」
  • Create / Update body:createDate 必填(Create);Update 可传则覆盖
  • 列表/详情 _row_to_dict(或等价序列化)输出 createDate,供编辑回填;列表 UI 暂不展示
  • 系统 create_time / update_time 行为不变(仍由后端写入)

前端(pl-plan-form-dialog)

基础信息区字段顺序

创建日期 → 计划日期 → 归属公司 → 单据类型 → 跟进人

(栅格仍为 form-grid-4;多出一列时自然折行,不强制改列数。)

字段 控件 规则
创建日期 el-date-picker type="date" 必填;value-format="YYYY-MM-DD";新增默认当天;编辑回填 createDate
计划日期 现有 不变;新增默认当天

取货时间 / 送达时间默认

  • 新增打开并 reset 表单时:在设定默认 planDate 后,若 pickupTime / deliveryTime 为空,设为与 planDate 相同的 YYYY-MM-DD。
  • 不对 planDate 做 watch 联动。
  • 编辑回填:使用接口返回值;为空则保持空(不强制用计划日期覆盖历史空值)。
  • 提交:照常传 pickupTime / deliveryTime(可被用户清空则按现有后端可选语义)。

类型与 API

  • web-admin/src/api/pl/index.ts 中计划 Create/Update/Detail 类型增加 createDate: string
  • 提交 payload 包含 createDate

其它入口

  • 独立路由页 views/pl/plan/form.vue:若仍在使用,与弹窗对齐增加创建日期;若已废弃仅弹窗,可不改(实现前以入口为准,优先弹窗)。
  • 合同「发起计划」等若复用同一弹窗,自动获得本行为。

验收标准

  1. 新增弹窗基础信息区「创建日期」在「计划日期」之前,默认当天,可改,必填校验生效。
  2. 编辑弹窗回填已保存的 createDate,修改后保存成功,再次打开一致。
  3. 系统 createTime 不因修改创建日期而改变。
  4. 新增时取货时间、送达时间初始等于计划日期;用户改取货/送达后改计划日期,取货/送达不变。
  5. 列表、查看弹窗外观与筛选行为与改前一致(接口可多返回 createDate 字段)。
  6. 存量计划迁移后均有非空 create_date,且与原 create_time 日期一致(无 create_time 的用迁移日)。

风险与兼容

  • 旧客户端未传 createDate:Create 接口应校验必填或服务端默认 date.today()(推荐:前端必填 + 后端缺省时默认当天,避免脚本/旧调用直接 422)。
  • 字段一致性:实现后跑 python scripts/check_field_consistency.py(若覆盖 pl_plan)。