hl-api-changelog/changelogs/2026-04/30_fe-bug_product_itinerary-gather-place-render-mismatch.md
API Changelog Bot 1c5967c411 fe-bug(product): 行程编排 DAY 1 开始字段渲染缺字 (CitySelect tag/watch 异步)
后端 DB + RespVO 字段对称,纯前端 BUG。同 4-20 经验。
通知 yst / mmg。
2026-04-30 17:06:24 +08:00

3.5 KiB

前端 BUG 通知:产品行程编排 DAY 1「开始」集合地渲染缺字

类型: 前端 BUG (后端零改动) 关联: 经验 nselect-tag-mode-stringify-race.md (2026-04-20 同类) + two-render-paths-same-data-isolate-component-bug.md 日期: 2026-04-30 前端处理者: yst / mmg 复现路径: web.test.1814.love:9443/product/edit?id=2045018534152478721 → Step 2 行程编排 → DAY 1 "专车接机+自由活动"


现象

DAY 1 卡片:

  • 「开始」(集合地) 输入框显示 海拉尔缺"区"字
  • 「结束」(解散地) 输入框显示 海拉尔区 ← 正常

二者使用同一个 CitySelect 组件,同一份数据,两处渲染结果不一致

后端排查 (零问题)

DB 实际值 (192.168.100.236 / hl_product_service / product_itinerary_day)

gather_place:    {"name": "海拉尔区", "level": "district", "adcode": "150702", "fullPath": "内蒙古自治区/呼伦贝尔市/海拉尔区", "levelName": "区/县"}
dismissal_place: {"name": "海拉尔区", "level": "district", "adcode": "150702", "fullPath": "内蒙古自治区/呼伦贝尔市/海拉尔区", "levelName": "区/县"}

两字段值完全相同,name 都是"海拉尔区"。

后端 RespVO 结构 (ItineraryDayRespVO.java:24-26)

private Object gatherPlace;     // line 24
private Object dismissalPlace;  // line 26

两字段都是 Object 类型对称返回,JSON 输出格式一致。后端零嫌疑

根因

memory 经验 experience/backend-dev/nselect-tag-mode-stringify-race.md (2026-04-20) 直接命中:

CitySelect 集合地/解散地下拉框显示 JSON 串/原 ID 而非中文。三件套触发: tag 开 + value 是 JSON 对象 + options 异步。不影响保存仅显示。

本次"海拉尔" vs "海拉尔区" 缺字也是同根: CitySelect tag 模式下 watch 异步,在 options 还没加载完时,直接对 value.name 字符串做了截断/部分匹配显示。两个字段渲染时机不同导致一处对一处错。

前端待修

复现步骤

  1. 进入产品 2045018534152478721 编辑页
  2. 切到 Step 2 行程编排
  3. DAY 1 "专车接机+自由活动" 展开
  4. 看「开始」和「结束」两个输入框 → "开始" 显示 海拉尔 (缺字),"结束" 显示 海拉尔区 (正常)

待排查方向

参考 4-20 经验文件,可能修复方向:

  1. CitySelect 组件 valueoptions 加载完成的同步问题 — 等 options 都 ready 再渲染 tag
  2. tag 模式 + JSON value 对象 + 异步 options 三件套是否其中之一可去掉
  3. 显示层用 fullPath 兜底而不是 name?或者用 name 时确保完整字符串不被截断
  4. 4-20 那次只修了部分场景(可能某个组件路径或某个父组件的 props 传递),这次新的复现说明遗漏

验证

修完后:

  • 重新进入同一产品编辑页
  • DAY 1 "开始" 和 "结束" 都应显示 海拉尔区
  • 切换 DAY 2/3/4/5 同样验证
  • 切换 Step 后再回 Step 2 验证 watch 复测
  • 保存后 reload 页面再验证

后端不动

后端 RespVO 字段类型对称,DB 数据正确,gather_place 与 dismissal_place 完全等价。本次纯 UI 渲染 BUG,后端零改动。

关联经验沉淀

  • experience/backend-dev/nselect-tag-mode-stringify-race.md — 4-20 同根问题
  • experience/bug-analyst/two-render-paths-same-data-isolate-component-bug.md — 同对象两处渲染不一致 = 锁定组件 BUG
  • feedback_frontend-bug-no-issue-changelog-only.md — 前端 BUG 不建工单只发 changelog