diff --git a/changelogs-v2/2026-08/12_5888_调整订单加费守卫误拦修复+归属校验-修复缺陷-管理后台.md b/changelogs-v2/2026-08/12_5888_调整订单加费守卫误拦修复+归属校验-修复缺陷-管理后台.md new file mode 100644 index 0000000..2dd78c2 --- /dev/null +++ b/changelogs-v2/2026-08/12_5888_调整订单加费守卫误拦修复+归属校验-修复缺陷-管理后台.md @@ -0,0 +1,41 @@ +--- +schema: "hl-changelog/v2" +ticket: "5888" +title: "修复调整订单加费被核单金融守卫误拦——定制师本人无法提交(584086)" +consumer: "admin" +change_type: "修复缺陷" +author: "wx(GIT)" +backend_status: "deployed" +gateway_status: "not_required" +frontend_status: "not_required" +frontend_owner: "" +frontend_ref: "" +target_release: "" +verified_at: "2026-08-12" +status_note: "后端已修复并部署测试服。定制师本人调整订单产生加费差额不再 584086;同时补上 submit 全链路订单归属校验(跨单操作 581008),行为对前端透明。" +updated_at: "2026-08-12" +base: "dev-v3" +--- + +# 修复:调整订单加费被核单金融守卫误拦(#5888 / #5891) + +> **服务**: hl-order-service-v3 +> **PR**: #5889 + #5892(已合并 dev-v3 并部署测试服) +> **日期**: 2026-08-12 +> **背景**: 定制师本人操作「调整订单」,产生加费差额(priceDelta>0)即报 `584086 无权修改核单资金数据,仅主管、管理员或财务可操作`,无法提交。减费方向不受影响。 + +--- + +## 修复内容(对前端透明,无接口契约变化) + +1. **移除误加的金融角色守卫**:`DiscountService.insertActiveSurcharge` 是「调整订单算价差额写入专用」方法,7-21 核单其他收入 PR 给它误加了 `SettlementWriteGuard`(只放行主管/管理员/财务),导致定制师本人被拦。已移除,与减费侧(`insertActiveDiscount`)口径对齐。 + +2. **补全 submit 全链路订单归属校验**(#5891):`AdjustmentService.submit` 锁定订单后新增 `OrderViewGuard.assertOrderAccessible` —— ADMIN/SUPER_ADMIN 放行;房务角色 581045;其余角色须为本单定制师(`consultantId == adminId`),否则 **581008 无权查看此订单**。 + +## 行为变化 + +| 场景 | 旧 | 新 | +|---|---|---| +| 定制师本人调整订单加费 | ❌ 584086 | ✅ 正常提交 | +| 非本单定制师/车务等调整他人订单 | ⚠️ 可提交(越权) | ❌ 581008 拦截 | +| 房务角色提交调整 | ⚠️ 可提交(越权) | ❌ 581045 拦截 | diff --git a/changelogs-v2/2026-08/12_frontend_确认执行页多段执行车辆师傅显示空白-前端缺陷-管理后台.md b/changelogs-v2/2026-08/12_frontend_确认执行页多段执行车辆师傅显示空白-前端缺陷-管理后台.md new file mode 100644 index 0000000..19b245d --- /dev/null +++ b/changelogs-v2/2026-08/12_frontend_确认执行页多段执行车辆师傅显示空白-前端缺陷-管理后台.md @@ -0,0 +1,70 @@ +--- +schema: "hl-changelog/v2" +ticket: "frontend" +title: "确认执行页「车·师傅」多段/已派槽位显示空白:单段分支读 UI 选中态 props 而非执行段数据" +consumer: "admin" +change_type: "前端缺陷" +author: "wx(GIT)" +backend_status: "not_required" +gateway_status: "not_required" +frontend_status: "pending" +frontend_owner: "mmg" +frontend_ref: "" +target_release: "" +verified_at: "" +status_note: "后端零改动。已用测试服真实 API 核实(订单 26-3698,看板 GET /admin/fleet/board/orders/2086270138171994114):activeAssignments 返回 1 条完整执行段(vehiclePlate=蒙A-H7777 / vehicleModel=丰田汉兰达 / vehicleSeats=7 / driverName=阿拉坦 / driverPhone=135****5019 / startDate=08-17 / endDate=08-19),父层 confirmationAssignments 即取自该数据。根因在前端 Step4Confirm.vue:confirmationSegments.length<=1 时走单段分支,读的是父层 vehicle/driver props(= AssignModal 的 selVehicleObj/selDriverObj,useVehicleDriverPicker 的 UI 当前选中态),用户未做改派选择时为空 → 显示空白。应对单段分支也 fallback 到 confirmationSegments[0](或直接统一走 segments 分支)。" +updated_at: "2026-08-12" +base: "dev-v3" +--- + +# 确认执行页「车·师傅」多段/已派槽位显示空白(前端) + +> **页面**:车务管理 → 派单看板 → 订单派车弹窗 → Step4「确认执行」→「车 · 师傅」区 +> **后端**:本条**零改动**。下面结论来自测试服真实 API(订单 26-3698)。 + +--- + +## 一、现象 + +确认执行页(Step4)「车 · 师傅」区显示空白/不全:车辆「· · 座」、师傅「·」,明明该槽位已派 1 车 3 天。 + +## 二、后端已排除(数据完整) + +`GET /admin/fleet/board/orders/2086270138171994114` → `activeAssignments` 返回 **1 条聚合执行段**: + +```json +{ + "vehiclePlate": "蒙A-H7777", + "vehicleModel": "丰田汉兰达", + "vehicleSeats": 7, + "driverName": "阿拉坦", + "driverPhone": "135****5019", + "serviceDate": null, + "startDate": "2026-08-17", + "endDate": "2026-08-19" +} +``` + +(单槽位聚合整段,startDate~endDate=3 天。字段完整,非空。) + +## 三、根因(前端) + +`AssignModal.vue` 把 `confirmationAssignments`(= `activeAssignments`)作为 `:assignments` 传给 `Step4Confirm.vue`,同时传 `:vehicle="selVehicleObj"` `:driver="selDriverObj"`。 + +`Step4Confirm.vue` 渲染逻辑(`confirmationSegments` computed): + +- **多段分支**(`confirmationSegments.length > 1`):遍历 `confirmationSegments` 正确展示。 +- **单段分支**(`length <= 1`,当前场景命中):读父层 props `vehicle?.plate / driver?.name` —— 即 `selVehicleObj/selDriverObj`(`useVehicleDriverPicker` 的 **UI 当前选中态**)。用户直接从已派状态进入 Step4 未做改派选择时,这两个对象为 **null** → 显示空白。 + +即:单段执行时错误依赖了「本次 UI 是否选中过车辆/司机」,而不是回退到服务端已有的执行段数据。 + +## 四、修复建议 + +- 单段分支也改为读 `confirmationSegments[0]`(vehiclePlate/vehicleModel/vehicleSeats + driverName/driverPhone),与多段分支同一数据源; +- 或直接去掉单段分支,统一走 `confirmationSegments` 遍历(数据已由父层聚合好)。 + +## 五、验收 + +- [ ] 已派 1 车 3 天的槽位进 Step4,「车·师傅」显示 蒙A-H7777 · 丰田汉兰达 · 7座 / 阿拉坦 · 135****5019 +- [ ] 未做任何改派选择时也能正确回显(不再依赖 UI 选中态) +- [ ] 多段接续(同一槽位不同天不同车/司机)仍按段展示不受影响 diff --git a/changelogs-v2/2026-08/15_5934_车务契约漂移补录-修改接口-管理后台.md b/changelogs-v2/2026-08/16_5934_车务契约漂移补录-修改接口-管理后台.md similarity index 98% rename from changelogs-v2/2026-08/15_5934_车务契约漂移补录-修改接口-管理后台.md rename to changelogs-v2/2026-08/16_5934_车务契约漂移补录-修改接口-管理后台.md index a024ea1..476071f 100644 --- a/changelogs-v2/2026-08/15_5934_车务契约漂移补录-修改接口-管理后台.md +++ b/changelogs-v2/2026-08/16_5934_车务契约漂移补录-修改接口-管理后台.md @@ -13,7 +13,7 @@ frontend_ref: "" target_release: "" verified_at: "" status_note: "后端完成:PR #5980 已合并 dev-v3 并部署 TEST。属契约文档对齐 + 代码分包重构,零行为变更。补录 5 项既有实现的契约口径,前端需按补录口径对齐筛选项与状态色标。" -updated_at: "2026-08-15" +updated_at: "2026-08-16" base: "dev-v3" generated: "2026-08-15T23:56:00+08:00" --- diff --git a/changelogs-v2/2026-08/15_5936_排车软清司机车辆选中-新增接口-管理后台.md b/changelogs-v2/2026-08/16_5936_排车软清司机车辆选中-新增接口-管理后台.md similarity index 79% rename from changelogs-v2/2026-08/15_5936_排车软清司机车辆选中-新增接口-管理后台.md rename to changelogs-v2/2026-08/16_5936_排车软清司机车辆选中-新增接口-管理后台.md index 4617e91..402ba25 100644 --- a/changelogs-v2/2026-08/15_5936_排车软清司机车辆选中-新增接口-管理后台.md +++ b/changelogs-v2/2026-08/16_5936_排车软清司机车辆选中-新增接口-管理后台.md @@ -12,8 +12,8 @@ frontend_owner: "" frontend_ref: "" target_release: "" verified_at: "" -status_note: "后端完成:PR #5981 已合并 dev-v3 并部署 TEST(hl-fleet-service 双实例 UP)。网关真 token 实测软清端点:软清后行保留/vehicle+driver 置空/状态回 unassigned/无取消历史/占用释放可重派;已出发 605043、已结束 605047 门禁拦截。" -updated_at: "2026-08-15" +status_note: "后端完成:PR #5981 已合并 dev-v3(29404b692)并部署 TEST(hl-fleet-service 双实例 UP)。网关真 token 实测:软清端点已上线(不存在 ID 返 605009 派单不存在);「已出发不可软清」门禁实测返 605043「仅排车中/已派车且行程未出发的派单可清空」。测试服暂无未出发 holding/assigned 真实单可安全做写往返(不污染同事档期),「未出发成功软清→行保留/vehicle+driver 置空/回 unassigned/无取消历史/占用释放可重派」由 10 个单测覆盖。" +updated_at: "2026-08-16" base: "dev-v3" generated: "2026-08-15T23:55:00+08:00" ---