docs(changelog): 二次告知前端-订单详情最后操作人(6077)+住宿每晚stayDate已返回
所有检测均成功
changelog-filename-gate / validate (push) Successful in 1s
所有检测均成功
changelog-filename-gate / validate (push) Successful in 1s
这个提交包含在:
父节点
6e3ed604fb
当前提交
996fcf0105
@ -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 拦截 |
|
||||||
@ -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 选中态)
|
||||||
|
- [ ] 多段接续(同一槽位不同天不同车/司机)仍按段展示不受影响
|
||||||
@ -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
|
||||||
正在加载...
x
在新工单中引用
屏蔽一个用户