--- schema: "hl-changelog/v2" ticket: "6210" title: "调整订单弹窗「客户自订」勾选未回显,重交后自订标记被静默抹掉" consumer: "admin" author: "kimi(wx)" change_type: "前端缺陷" backend_status: "deployed" gateway_status: "verified" frontend_status: "pending" frontend_owner: "mmg" frontend_ref: "" target_release: "" verified_at: "2026-08-23" status_note: "前端缺陷:调整订单弹窗酒店 tab 未绑定 days[].customerSelfBooked——快照已返回该字段但「客户自订」勾选框恒不勾,且自订晚被按普通晚渲染默认空段;重交时标记丢失(null 落库),该晚变回「待房务配房」,房务会重复配房。后端读/写/换版链路实证无 bug。修复:回显绑定 + 原样重交该字段。" updated_at: "2026-08-23" base: "dev-v3" generated: "2026-08-23T15:45:00+08:00" --- # 调整订单弹窗「客户自订」勾选未回显,重交后自订标记被静默抹掉(#6210) > 前端缺陷,待前端修复。后端契约完整(快照已返回字段、upsert 原样落库),DB 实测 + 网关实证。 ## 现象(TEST 实证,订单 HL20260823145314586 / 团号 26-7603) 「调整订单」弹窗 → 酒店安排 tab,每晚左侧「**客户自订**」勾选框(#5838 引入):**此前标过自订的晚,打开修改弹窗时框是空的**;更严重的是在该弹窗里做任何修改重交后,自订标记被静默抹掉。 ## 证据链(DB + 调整记录 + 网关实测,三证闭环) 该订单 2026-08-27 出行、6 天 5 晚、酒店 6 间: | 时间 | 事件 | days JSON 事实 | |------|------|----------------| | 14:57:23 | 顾问经弹窗提交需求 v1 | 第 1/3/4/5 晚 `customerSelfBooked: true`、`segments: []`;第 2 晚呼伦贝尔香格里拉大酒店 | | 15:18:25 | 顾问经弹窗再次提交(v2,调整记录仅 HOTEL_REQ 一项,非改期/改人数触发) | **全部 5 晚 `customerSelfBooked: null`**;第 1/3/4/5 晚各自多出一个默认空段(roomCount=1 + 空候选)——自订晚被按普通晚渲染的形态 | - `order_adjustment_record`:两次均为徐莱经弹窗提交的「酒店需求已调整」,无 SCHEDULE/PEOPLE 记录 → 排除后端内部换版丢值。 - 网关实测(2026-08-23):`GET /v3/admin/order/{id}/adjustment/snapshot?scope=HOTEL_REQ` 返回 200,`hotelRequirement.days[]` **每项均含 `customerSelfBooked` 键**(当前值为 null 是因 v2 数据已丢,契约本身完整)。 - 后端代码链路(origin/dev-v3):快照 `AdjustmentService.buildHotelReqFromDb` → `RequirementService.parseHotelDays` 显式读该键(L2927,带防丢注释);upsert 按请求原样落库;改期/改天数换版走同一 parseHotelDays 入口保留标记。**读/写/换版三条链路均无 bug。** ## 前端缺陷点(三处,同源) 1. **回显未绑定**:打开弹窗拉快照后,未把 `hotelRequirement.days[].customerSelfBooked === true` 绑定到对应晚的「客户自订」勾选框。 2. **自订晚被当普通晚渲染**:自订晚(segments 为空)被补了默认空段结构展示(v2 数据形态实证)。 3. **重交丢字段**:提交调整时未带上 `days[].customerSelfBooked`(快照契约注释明确要求「无损回显 + 原样重交」),null 落库后该晚变回「待房务配房」。 ## 涉及接口(后端契约均无需改动) | 接口 | 说明 | |------|------| | `GET /v3/admin/order/{id}/adjustment/snapshot?scope=HOTEL_REQ` | 回显源:`hotelRequirement.days[].customerSelfBooked`(Boolean,true=该晚客人自订) | | `POST /v3/admin/order/{id}/adjustment/submit`(updates.hotelRequirement.days) | 重交时必须原样带回 `customerSelfBooked` | | `PUT /v3/admin/order/{id}/hotel-requirement` | 同字段语义(三分支 upsert) | 字段语义(#5838):`customerSelfBooked=true` → 该晚客人自己订酒店、房务无需配房;不计入配房进度分母、不列「未配房」;自订晚 `segments` 可为空(可带备注如「客人自订汉庭,勿重复订」)。 ## 修复要求(前端) 1. 弹窗初始化:`days[i].customerSelfBooked === true` → 第 i 晚「客户自订」勾选框置勾,且该晚按自订态渲染(候选/段区域禁用或隐藏,与首次标记自订时的交互一致)。 2. 提交组装:每晚原样带上 `customerSelfBooked`(勾选=true,未勾=false/null),**不得因用户没动过该晚而丢键**。 3. 勾选自订的晚提交时 `segments` 传空数组(与 #5838 提交形态一致),不要补默认空段。 ## 数据善后(TEST 订单 HL20260823145314586) v2 已丢第 1/3/4/5 晚自订标记,这 4 晚当前对房务显示为「待配房」。待前端修复部署后,由顾问重新打开调整弹窗把这 4 晚重新勾「客户自订」提交即可走正常业务路径恢复(v3);如需立即恢复可联系后端 SQL 补数(另起数据单,需 wx 确认)。