diff --git a/docs/superpowers/specs/2026-10-29-dispatch-calendar-other-kind-design.md b/docs/superpowers/specs/2026-10-29-dispatch-calendar-other-kind-design.md new file mode 100644 index 000000000..3c20d7572 --- /dev/null +++ b/docs/superpowers/specs/2026-10-29-dispatch-calendar-other-kind-design.md @@ -0,0 +1,48 @@ +# 派车日历增加「其他日历」设计 + +用户已于 2026-10-29 确认方案 1(扩展 `calendarKind`)并授权撰写本设计。 + +## 需求与边界 + +现有 Web `/pl/calendar-module/dispatch-calendar` 与小程序 H5 `/m/pl/dispatch-calendar` 页内 Tab 为:酸派车日历、碱派车日历、实际派车信息。客户需要在「碱派车日历」之后增加「其他日历」,用于酸/碱以外其他产品的手工派车。 + +「其他日历」功能、交互、样式与酸/碱手工日历完全一致;两端(Web + H5)同步增加。产品与车辆选择器仍共用现有主数据接口,不按产品分类过滤。实际派车信息 Tab 行为与样式不变。不新增菜单或权限码,继续使用现有 `dispatch-calendar:list` / `dispatch-calendar:manage`(Web 与 mini 前缀)。 + +## 展示与交互 + +Tab 顺序固定为: + +1. 酸派车日历(`acid`) +2. 碱派车日历(`alkali`) +3. 其他日历(`other`) +4. 实际派车信息(`actual`) + +手工三类 Tab 均挂载现有 `ManualCalendar`,仅传入不同的 `calendarKind` 与标题;「其他日历」标题文案为「其他日历」。主题 class `manual-calendar-theme` 在 `acid` / `alkali` / `other` 时启用。不新增独立组件、不改手工日历视觉主题。 + +模式沿用既有:P08 页内 Tab + P01 简单 CRUD + P09 查看弹窗 + P27 日历派生展示。 + +## 数据与接口 + +继续使用表 `pl_dispatch_calendar`。`calendar_kind` 允许值由 `acid | alkali` 扩展为 `acid | alkali | other`。列类型已是 `varchar(16)`,无需改列结构;补充幂等迁移仅更新字段 COMMENT,并同步模型注释与 `docs/sql` 基线注释(若仓库有对应 DDL 快照)。 + +列表、详情、创建、更新、删除均按当前 Tab 的 `calendarKind` 隔离;三类手工数据互不可见。更新时不允许修改 `calendarKind`(与酸/碱现状一致)。非法 `calendarKind` 返回 422。 + +API 路径与参数形状不变:查询参数 / 请求体字段 `calendarKind` 增加合法值 `other`。车辆、产品选项接口不变。 + +## 改动面 + +| 层 | 改动 | +|----|------| +| 后端 service / schema / model | `CALENDAR_KINDS` 与校验文案纳入 `other`;COMMENT 同步 | +| 后端测试 | `other` 隔离、非法 kind、不可跨类型改 kind | +| Web / H5 入口 | Tab + `ManualCalendar` 挂载;主题 class 覆盖 `other` | +| 前端类型 | `DispatchCalendarKind` 增加 `'other'` | +| SQL | 新迁移更新 COMMENT;必要时同步 docs/sql 注释 | +| 前端相关单测 / 浏览器脚本 | 若硬编码仅 acid/alkali,则扩展覆盖 `other` | + +## 验收 + +- 两端四个 Tab 可见且顺序正确;「其他日历」CRUD、筛选、复制、汇总与酸/碱一致(Web 另含打印)。 +- `other` 记录与酸/碱互不串;不可将记录的 `calendarKind` 改成另一类型。 +- 实际派车信息无回归;非法 `calendarKind` 仍 422。 +- 定向后端测试、前端相关测试、定向 lint、图谱增量更新通过。