From 996fcf0105c859ce0e25bfd9fa546f27a8730065 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 20 Aug 2026 01:24:22 +0000 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20=E4=BA=8C=E6=AC=A1=E5=91=8A?= =?UTF-8?q?=E7=9F=A5=E5=89=8D=E7=AB=AF-=E8=AE=A2=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=9C=80=E5=90=8E=E6=93=8D=E4=BD=9C=E4=BA=BA(6077)+?= =?UTF-8?q?=E4=BD=8F=E5=AE=BF=E6=AF=8F=E6=99=9AstayDate=E5=B7=B2=E8=BF=94?= =?UTF-8?q?=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...加费守卫误拦修复+归属校验-修复缺陷-管理后台.md | 41 ++++++++ ...多段执行车辆师傅显示空白-前端缺陷-管理后台.md | 70 ++++++++++++++ ...后操作人与住宿每晚日期回显-修改接口-管理后台.md | 93 +++++++++++++++++++ 3 files changed, 204 insertions(+) create mode 100644 .tmp/12_5888_调整订单加费守卫误拦修复+归属校验-修复缺陷-管理后台.md create mode 100644 .tmp/12_frontend_确认执行页多段执行车辆师傅显示空白-前端缺陷-管理后台.md create mode 100644 changelogs-v2/2026-08/20_6077_订单详情最后操作人与住宿每晚日期回显-修改接口-管理后台.md diff --git a/.tmp/12_5888_调整订单加费守卫误拦修复+归属校验-修复缺陷-管理后台.md b/.tmp/12_5888_调整订单加费守卫误拦修复+归属校验-修复缺陷-管理后台.md new file mode 100644 index 0000000..2dd78c2 --- /dev/null +++ b/.tmp/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/.tmp/12_frontend_确认执行页多段执行车辆师傅显示空白-前端缺陷-管理后台.md b/.tmp/12_frontend_确认执行页多段执行车辆师傅显示空白-前端缺陷-管理后台.md new file mode 100644 index 0000000..19b245d --- /dev/null +++ b/.tmp/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/20_6077_订单详情最后操作人与住宿每晚日期回显-修改接口-管理后台.md b/changelogs-v2/2026-08/20_6077_订单详情最后操作人与住宿每晚日期回显-修改接口-管理后台.md new file mode 100644 index 0000000..64a75d7 --- /dev/null +++ b/changelogs-v2/2026-08/20_6077_订单详情最后操作人与住宿每晚日期回显-修改接口-管理后台.md @@ -0,0 +1,93 @@ +--- +schema: "hl-changelog/v2" +ticket: "6077" +title: "订单详情最后操作房务/车务人员 + 住宿每晚日期回显(二次告知)" +consumer: "admin" +author: "wx" +change_type: "修改接口" +backend_status: "deployed" +gateway_status: "verified" +frontend_status: "pending" +frontend_owner: "mmg" +frontend_ref: "" +target_release: "" +verified_at: "2026-08-20" +status_note: "二次告知:操作人字段(6077)早已部署测试服并网关实测,前端似乎未接;住宿每晚日期 stayDate 也确认已在返回。前端按本文取值即可。" +updated_at: "2026-08-20" +base: "dev-v3" +generated: "2026-08-20T09:00:00+08:00" +--- + +# 订单详情最后操作人 + 住宿每晚日期回显(二次告知) + +## 背景 + +前端反馈:①订单详情页没看到「最后操作的房务/车务人员」;②住宿安排「第一晚没有具体时间」。 + +核实结论:**两块数据后端都已在返回**,是前端未接/未展示。本文把取值位置一次性写清。 + +## 变更接口 + +| 接口 | 变更 | +| --- | --- | +| `GET /v3/admin/order/{id}`(订单详情) | 无结构变更。`data.overview.customerInfo.houseOperatorName` / `vehicleOperatorName` 已在返回(#6077 交付),本文再次告知取值位置 | +| `GET /v3/admin/order/{id}/itinerary`(行程安排) | 无结构变更。`data.hotelGroup.assignments[].stayDate`(每晚日历日期)已在返回,本文再次告知取值位置 | + +## 一、最后操作房务/车务人员(#6077,已部署测试服) + +接口:`GET /v3/admin/order/{id}`(订单详情) + +读这里(已实测有值): + +```json +{ + "data": { + "overview": { + "customerInfo": { + "houseOperatorName": "王骁", + "vehicleOperatorName": null + } + } + } +} +``` + +- `data.overview.customerInfo.houseOperatorName` — 最后操作房务人员姓名(无操作为 null) +- `data.overview.customerInfo.vehicleOperatorName` — 最后操作车务人员姓名(无操作为 null) +- 顶层 `data.houseOperatorName` 等同名字段当前为 null,**以 `overview.customerInfo` 内为准**。 +- 为 null 时前端自行决定隐藏或显示「-」。 + +## 二、住宿安排每晚日期(第一晚具体时间) + +接口:`GET /v3/admin/order/{id}/itinerary` → `data.hotelGroup.assignments[]` + +每条回配酒店都有 `stayDate`(该晚日历日期)+ `dayNumber`(第几晚),实测: + +```json +{ + "dayNumber": 1, + "stayDate": "2026-08-19", + "hotelName": "呼伦贝尔香格里拉大酒店", + "roomType": "BIG_BED", + "roomCount": 1 +} +``` + +出发日 2026-08-19 → 第一晚 `stayDate=2026-08-19`、第二晚 `2026-08-20`,已对齐。前端在住宿安排卡片每行渲染 `stayDate` 即可。 + +注意:只有**已配房**的订单 `assignments` 才有数据;未配房(需求阶段)为空数组属正常。 + +## 前端动作 + +1. 操作人:订单详情页读 `data.overview.customerInfo.houseOperatorName` / `vehicleOperatorName` 展示。 +2. 每晚日期:住宿安排卡片每行展示 `assignments[].stayDate`。 + +## 验证证据 + +- 6077:PR #6080 已合并 dev-v3(merge commit 39c489673),测试服双实例 2026-08-19 15:02 重启;网关实测 `overview.customerInfo.houseOperatorName="王骁"` 有值。 +- stayDate:2026-08-20 测试服网关实测订单 2090087196236095490,assignments 两条 stayDate=2026-08-19/2026-08-20 正确。 + +## 关联 / 联系人 + +- Issue #6077:https://git.1814.love:8443/wx/HL/issues/6077 +- 后端负责人:wx