|
|
@@ -0,0 +1,111 @@
|
|
|
+# 运输计划 · 创建日期字段与取货/送达默认 — 设计文档
|
|
|
+
|
|
|
+> **日期**: 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)。
|