fix(pl): 按车辆类型统一派车日历卡片配色以区分自有三方和待派车。

This commit is contained in:
wuzilong committed 2026-11-01 13:42:54 +08:00
1 parent cb0344498a
commit 043e2ef661
11 files changed
+268 -27

No files matched your search

@@ -0,0 +1,42 @@
# 派车日历车辆配色 Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development to implement this plan task-by-task.
**Goal:** 实现工单 #5 已确认的两端日卡车辆类型配色。
**Architecture:** 后端批量解析只读车辆类型,前端共用日卡按该类型着色。保留租户和数据范围、现有写入及日历交互;不新增数据库列。
**Tech Stack:** FastAPI / SQLAlchemy / Vue 3 / TypeScript / SCSS。
## Task 1:类型返回与共用日卡
修改 `backend/app/services/pl_dispatch_calendar_service.py`、`backend/app/api/pl/dispatch_calendar.py`、`backend/app/api/pl/site_dispatch_calendar.py`、`web-admin/src/api/pl/dispatch-calendar.ts`、`web-admin/src/views/pl/dispatch-calendar/manual-model.ts`、`ManualDayContent.vue`;测试沿用 `backend/tests/test_pl_dispatch_calendar.py` 和 `web-admin/scripts/manual-dispatch-calendar.test.ts`。
- [x] 先添加 SQLite 回归:自有/三方/待派车列表返回 `vehicleType`,无权限、删除和跨租户车辆返回 unknown;断言分页多行只执行一次车辆查询。运行并确认新增用例因缺字段失败。
- [x] `_row_to_dict(row, vehicle_type=None)` 返回规范枚举;保存时复用提交前类型,列表/详情通过批量序列化显式传类型。使用 `_query(db, tenant_no, user, PlVehicle).filter(PlVehicle.id.in_(ids))` 解析当前页 ID。列表与详情复用批量解析;创建、编辑响应使用非持久化属性,提交后不查询。
- [x] 前端增加可选只读 `vehicleType?: 'self' | 'carrier' | 'pending' | 'unknown'`。模型函数先判断 `vehicleId === '__pending_vehicle__'`,再白名单校验车辆类型,其他为 unknown。
- [x] 单车卡及多趟分组绑定 `vehicle-${类型}`;背景使用设计中的四组色值,移动自有车辆覆盖为 `#e9f9f2`。保留产品汇总配色。
- [x] 运行后端日历三个专项文件与前端日历模型测试;规格审查通过,代码质量审查另见下方交付记录。
## Task 2:验证与交付记录
- [x] 浏览器渲染实际组件,用合成数据检查 Web、375px、414px 的三类单车/多趟卡、未知类型与点击行为,保存本地截图。
- [x] 执行目标文件 ESLint、Stylelint 和 `pnpm build:typecheck`,记录基线问题,不改无关代码。
- [x] 复核工单最新正文与评论、运行 `git diff --check`,记录最终验证及限制;仅在本地任务分支保存实现,不推送、合并或关闭工单。
## 2026-11-01 验证与交付记录
- 用户已明确确认 Figma 18:2 配色并要求实施。分支 `codex/gitea-issue-5`,基线 `cb0344498abc4c796bc12ee20f25e9097a4076f1`。
- 工单正文/全部评论在交付前重新读取,正文未变,0评论,无图片,远端仍 open。
- 后端:使用主工作目录现有 Python 3.9 venv,工作目录为本任务 backend;`DATABASE_URL` 指向本机不可连接的测试地址,测试fixture仅使用SQLite。运行 `python -m pytest tests/test_pl_dispatch_calendar.py tests/test_site_dispatch_calendar.py tests/test_pl_dispatch_calendar_site_sync.py -q`:126 passed,12条既有依赖警告。
- 前端:`pnpm exec tsx --test scripts/manual-dispatch-calendar.test.ts scripts/mobile-dispatch-calendar.test.ts scripts/pl-dispatch-calendar.test.ts scripts/calendar-copy.test.ts`:38 passed。
- 对本次四个前端修改文件执行 ESLint;对 ManualDayContent.vue 执行 Stylelint,均通过。Prettier目标检查通过,`git diff --check`通过。
- `pnpm build` 最终通过(39.22秒),存在既有组件重名与产物体积提示。
- `pnpm build:typecheck` 未通过:首次隔离目录缺自动导入声明;生成声明后单独执行 `pnpm exec vue-tsc --noEmit`,基线与修改后均505条错误,输出1351行逐行一致,本次无新增。不能称全量类型检查通过。
- pnpm复用同仓库现有node_modules软链,命令附 `pnpm_config_verify_deps_before_run=false`,防止新版pnpm自动重装共享依赖;未安装/更新依赖。
- 浏览器:Vite在内存编译实际 ManualDayContent.vue,以合成数据在Chrome验证Web 1440px、移动375px/414px × 单车/多趟,共6组通过。核对三种类型及未知回退背景、选择事件、移动触达高度>=44、无横向溢出;实际截图已查看,与已批准配色一致。
- 本地证据位于 `.local/agent/issue5/`:`verify-colors.mjs`、六张截图、`backend-final.log`、`vite-final.log`、`typecheck-baseline.log`、`typecheck-final.log`;这些临时证据被Git忽略。
- 保存回归修正:先以8组commit后禁SQL用例确认6失败/2通过,再复用提交前车辆类型,修正后全部通过。列表仍实时查询类型,保存不新增提交后数据库依赖。
- 独立规格审查和最终代码质量审查均通过,无剩余阻塞;审查者独立执行git diff --check通过。
- 验证限制:未连接真实业务库,未执行微信真机或完整业务环境端到端验收。未修改数据库schema、未推送、未合并、未关闭工单。
@@ -0,0 +1,24 @@
# 工单 #5:派车日历车辆类型配色
来源:https://gitea.aichengyan.com/cykj/shanxia2.0/issues/5 。2026-11-01 已重新读取正文及全部评论(0 条,无图片)。
用户已确认按 Figma v1 实施:https://www.figma.com/design/ImDcikQnCX5GiJQLwUHwDC/shanxia2.0?node-id=18-2 。
## 范围与视觉依据
复用 P08/P27 现有派车日历和 `web-admin/src/views/pl/dispatch-calendar/ManualDayContent.vue`;小程序入口实际使用移动 H5,复用同一日卡组件。酸、碱、其他、现场手工日历沿用现有结构、汇总、复制、打印和点击行为;实际派车信息页不在本次手工日卡范围内。
- 自有车辆:Web 沿用日卡浅绿 `#e8f3ec`,移动端采用三墙浅绿 `#e9f9f2`。
- 三方车辆:沿用日历浅蓝 `#e7f0f8`。
- 待派车:采用 Fresh Mint 浅红 `#fee2e2`。
- 同车多趟的整个分组采用相同车辆类型背景;产品汇总保留产品配色。
- 无法识别类型的历史车辆使用中性 `#f1f5f9`,不推断为三方车辆。
## 数据与实现
后端从当前租户、未删除且满足数据范围的车辆档案批量读取 `vehicle_type`,作为只读 `vehicleType` 返回。取值 `self` / `carrier` / `pending` / `unknown`;待派车以 `__pending_vehicle__` 专用 ID 判断,不依赖显示车牌名称。列表分页不增加逐行查询,详情和保存响应保持同一字段语义。不增加数据库字段,不改变写入、同步或权限逻辑。
前端只读字段不进入保存表单。日卡及同车多趟分组按车辆类型选择背景,不再按产品名选择卡片背景。旧响应缺字段时保留待派车 ID 识别,其余中性回退。
## 验收
覆盖三种类型、未知/已删除/跨租户/无权限车辆、同车多趟、待派车优先级;检查移动端 375/414px 和 Web 日卡的背景、内容及点击。后端用 SQLite 隔离测试,禁止连接业务库。执行受影响前端测试、检查和构建;独立审查后记录实际结果。未授权推送、合并或关单。