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

112 lines
5.3 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.
# 运输计划 · 创建日期字段与取货/送达默认 — 设计文档
> **日期**: 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)。