跳转至

完整修复计划 · 8.218 + 112 用户级缺陷(DTL L-20260828-03 衍生)

编号 修复 负责人 类型 状态
R1 8.218 Caddy /mfr/*handlehandle_path 听云 OCM 运维配置 🟡 已签发
R2 112 品类卡片点击无切换(生产 build vs dev build 差异) 听码 WDE 代码修复 🟠 待签发
R3 BPL 楼宇档案种子数据(尖沙咀/油尖旺区) 听写 DT 起草 + 听云 OCM 执行 数据层 🟠 待签发
R4 本地后端启动修复(已完成) 听写 DT 环境
R5 DispatchPendingList.tsx TypeError(后端未启动时) 听码 WDE 空值防御 🟠 待签发

R2 · 112 品类卡片点击无切换

根因假设

本地 dev server(:3001)点击 ✅,112 生产 build(:3000)点击 ❌。两者用相同源代码(next.config.mjs、quote/page.tsx onClick 正确),但 build 环境不同。

排查方向(听码 WDE)

  1. 对比本地 next build + next start vs dev server——如果 build 版也有 bug,就是生产优化问题;如果 build 版 OK,就是 112 上跑的 .next 产物是旧的
  2. 检查 React StrictMode——生产 build 是否启用了 StrictMode 导致某些 useEffect 行为差异(next.config.mjs 的 reactStrictMode: true)
  3. 检查 112 上 mfr-portal 的 .next 产物时间戳——确认是不是近期 basePath 改动后没有重新 build

WDE 任务单要点

  • 在本地 cd dip1/frontend/apps/mfr-portal && pnpm build && pnpm start 跑生产模式,浏览器测品类卡片
  • 对比 dev vs start 的行为差异
  • 如果生产 build OK → 112 需要重新 build + 部署
  • 如果生产 build 也有 bug → 代码层面排查(StrictMode / memo / useCallback 依赖)

R3 · BPL 楼宇档案种子数据

现状

GET /api/v2/mds/bpl/search?q=尖沙咀弥敦道[](空)。用户填的地址匹配不到,前端"地址解析成功"校验项永远 ❌,提交按钮 4/5 永远 disabled。

方案

听写起草香港主要区域的楼宇种子数据(尖沙咀、油尖旺、铜锣湾、中环、观塘等核心区典型街道 + 高频楼宇),听云通过 pg restore 或 API 批量注入。

种子数据格式示例(BPL 表)

bpl_id district street building_name floors has_elevator parking stair_width_ok
BPL-0001 油尖旺区 弥敦道 海运大厦 5 true true true
BPL-0002 油尖旺区 弥敦道 香港半岛酒店 8 true true true
BPL-0003 尖沙咀 弥敦道 崇光百货尖沙咀店 5 true true true
BPL-0004 尖沙咀 梳士巴利道 香港文化中心 3 true true true
BPL-0005 铜锣湾 轩尼诗道 铜锣湾时代广场 9 true true true
BPL-0006 中环 德辅道中 中环中心 18 true true true
... ... ... ... ... ... ... ...

覆盖 5 大区 × 每区 10-20 条 = 50-100 条种子数据即可让 BPL 匹配通过率从 0% 提升到 ≥80%。

R5 · DispatchPendingList.tsx 空值防御

现状

本地后端未启动时,disPendingList() API 返回非预期结构(undefined)→ items.length 报 TypeError 白屏。

修复

在组件中加空值防御:

setItems(res.items ?? []);  // 而非 setItems(res.items)
setTotal(res.total ?? 0);   // 而非 setTotal(res.total)

同时检查 api.ts 的 HTTP client——非 2xx 响应是否会抛异常还是返回 undefined。


执行优先级

R1 (P0 听云) → 立即执行,30min
R5 (P1 听码) → 独立小修,与 R2 并行
R2 (P1 听码) → build 排查,1h
R3 (P1 听写→听云) → 种子数据起草 2h + 执行 10min

全部完成后重新执行 Phase 4 浏览器级闭环复测(D01-D03 全量 + 四端功能点击 + 提交报价完整流程)。