Skip to content

fix(CityArea): 修复移动端直属县市值回填异常 - #21529

Open
dvd233 wants to merge 1 commit into
baidu:masterfrom
dvd233:fix/mobile-city-direct-county-values
Open

dvd233 wants to merge 1 commit into
baidu:masterfrom
dvd233:fix/mobile-city-direct-county-values

Conversation

@dvd233

@dvd233 dvd233 commented Oct 6, 2026 •

Copy link
Copy Markdown

What

修复移动端 CityArea 回填直属县市值时的异常,例如重庆城口县 500229、丰都县 500230 和湖北仙桃市 429004。

Related to #21268。原 issue 未提供可复现的 schema 和平台信息,本 PR 仅处理上述移动端回填路径。

Why

这类地区在 CityDB 中是第二列的叶子节点,没有下一级区县。getPropsValue 原先将同一个 code 同时放入 city 和 district,导致名称重复,并在构建区县列时访问不存在的区县映射,触发 Cannot read properties of undefined (reading 'map')。

How

  • 仅当 code 尚未占据 city 层级时才设置 district,保留最终行政区 code 及结构化输出语义,不生成虚构的 district。数据库及 Picker 均未改动。
  • 将原 mobileCity.test.tsx 注释 TODO 替换为 18 个真实组件测试,使用原生 workspace Jest 配置及真实 CityDB、Picker 和 PopUp。覆盖数字/字符串回填、确认后重新打开、跨层级和跨省切换、取消/遮罩关闭、层级开关及结构化输出,并保留普通三级地区对照。
  • 既有独立差分复核覆盖全部地区编码及层级开关组合,行为变化仅涉及预期的 43 个直属县市。

Validation

源码固定为 5263bd31f971e4cd38958bec6c326df096b5d9e2,独立 baseline 为其父提交 43a33ee066990589f5891674e645c4c927761fe5。

完整验证运行及原始产物:

  • 修复与 baseline 各自独立安装依赖,分别完成六个 workspace 的原生 build(含 SDK)、根目录 typecheck。没有共享 node_modules 或跨 checkout 的 workspace 链接。
  • 两侧原始 npm test --workspaces 均退出 0。修复侧 amis 为 166 suites / 941 tests / 580 snapshots,baseline 为 166 / 924 / 580,全部通过;差额来自新增的 18 项测试替换一个占位测试。formula/core/ui 分别为 185、150、2 tests,均通过;editor 的 echo-only test 脚本不计为测试。两侧 office-viewer 另有 68 suites / 524 tests / 33 snapshots 全部通过。
  • 同一组组件回归测试:修复侧 18/18 通过,baseline 11 个目标 map 异常、7 个对照通过,验证后恢复 baseline 原测试文件。
  • Chromium 移动端模拟中,真实 SDK input-city renderer 的 18 个场景全部通过。baseline 的直属县市 500229 复现目标异常,普通地区 110101 对照通过。

该完整工作流的最终状态仍为 failure。失败来自补充验证器,原始结果保留,不能将下面的独立分析视为整条工作流变绿:

  1. 依赖比较器未规范化 baseline 的 validation/../baseline 路径。仅规范化双方真实 checkout 根路径后,root/office 构建前后的四组完整依赖图及 144 条解析记录完全一致。npm ls 的 missing/invalid 报告和退出码 1 仍然存在,两侧相同,未声称修复这些既有依赖问题。
  2. 浏览器错误归因器只识别明文模块名,但 FIS 将 CityArea 压为 0c4aa3a。使用实际发布的 fis3@3.5.0-beta.3 与此源码的 FIS 规则计算,md5('6.13.0' + 'amis-sdk' + '/node_modules/amis-ui/lib/components/CityArea.js') 的前 7 位正是该 ID;原错误首帧和 served 文件哈希均匹配,没有额外的页面或资源错误。此项是对保留产物的后处理,并非重新运行浏览器。产物未保留完整 SDK 文件;归因使用运行时留下的首帧、模块 ID 和已校验 served 哈希,再以独立核对的 FIS 规则重建模块映射。
  3. 历史日期诊断将 Date.now() 完全冻结却仍使用真实定时器;同版 Lodash 的独立实验确认这种组合会阻止 trailing debounce 回调。四组诊断还共同出现额外的 inputDate.test.tsx:338 失败。原来的四项一天偏差,已通过两侧相同的时区对照与真实 filterDate 调用定位到 native Date 的本地日历字段和 Jest 中 Moment 的 Asia/Shanghai 默认时区不一致。

聚焦日期对照运行已成功:仅在固定源码上使用“历史起点 + 单调经过时间”的诊断时钟,保留原三个 suite 的全部 24 项断言。UTC 为 20 pass / 4 fail,位置与历史四项一致;Asia/Shanghai 为 24 pass / 0 fail。额外的 line 338 失败不再出现,源码前后校验通过。本次只补跑日期诊断,没有重跑或改写之前的完整 baseline、原生测试和浏览器结果。

历史运行 37511008882 的失败记录也保留;本轮独立 baseline 和浏览器验证补足了该运行的验证缺口。上游 CI 与维护者评审仍以本 PR 页面为准。

Limits

浏览器验证覆盖 DOM 标签、值与交互;Linux 截图存在中文字体缺字,未声称完成中文字体视觉验收,也未验证真实设备的滚动或惯性。香港/澳门另一数据模型中的 26 个编码仍有原有问题,未包含在本次修复中;本 PR 不声明覆盖 #21268 的全部桌面场景。

AI-assisted implementation and independent AI reviews. 尚无维护者或人工审核签核。

@github-actions github-actions Bot added the fix label Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown

👍 Thanks for this!
🏷 I have applied any labels matching special text in your issue.

Please review the labels and make any necessary changes.

@dvd233
dvd233 marked this pull request as ready for review October 16, 2026 06:38

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant