L-20260824-01 MFR 开放报价 V2 前端落地验证 + BPL Mock 样本补齐¶
任务编号:L-20260824-01 / 执行人:听码 WDE / 日期:2026-08-24 任务来源:用户指令「你是听码,请了解项目要求和进展,执行之」 上游设计:DTL L-20260824-03(MFR 开放报价 V2 前端全面优化设计,MSC-FE 原则 #4) 上游验证:DTL L-20260824-04(typecheck 修复与 MkDocs 构建验证) 范围:
dip1/本地代码(前端 mfr-portal + 后端回归验证) 约束:只改dip1/;不 git push/pull;不接触生产环境;最小化原则
1. 任务起止与输入产物¶
- 开始/完成:2026-08-24
- 输入产物:
- DTL L-20260824-03 §四 6 组件交互设计规格 + §五 代码结构建议
- 既有代码:
apps/mfr-portal/app/quote/page.tsxV2(1115 行,DT 同步产出初稿 + DTL L-20260824-04 修复 5 个 TS strict 错误)+globals.cssV2 增量 265 行 - 后端工作区未提交热修复:
ppl_idHeader 可选化 + CORS 中间件(DTL L-20260823-05 对应代码) - 输出产物:
page.tsxBPL_SAMPLES 8 → 30 条补齐(唯一代码改动)- 全量验证结果(后端 pytest / 前端 typecheck+build)
- 本日志
2. 执行内容¶
2.1 设计规格符合性核查(只读)¶
对照 DTL L-20260824-03 §四逐项核查 6 组件落地情况:
| 组件 | 规格要点 | 落地核查 | 结论 |
|---|---|---|---|
| ① 8 品类卡片 | emoji + SCL 编码 + 默认选中家具 + 选中态样式 | CATEGORIES_8 8 品类 emoji/μ/σ 与规格 §4.2 完全一致 |
✅ |
| ② 参数结构化引导 | 3 尺寸滑动条 + G1-G4 徽章 + 重量滑块 + 易碎品 SV3 横幅 + 工时柱状图 | calcGauge 阈值 60/120/200 对齐 LQM;generateGaussBars 50 柱三色(μ±1σ 绿 / μ±2σ 黄 / 其余红);LaborChartComp 微调按钮 0.5h 步进 |
✅ |
| ③ 地址智能解析 | 500ms debounce + BPL 匹配 + 4 问题自检兜底 + 修改二次确认 | bplSearch 关键词遍历、候选下拉含区域/类型/电梯徽章;自检 Q1-Q4 完整;修改弹 confirm 重置档案 |
✅ |
| ④ 品牌档位 + 徽章 | 路径 A(ppl_id 绑定 → 哈希徽章 Mock)/ 路径 B(3 档卡片横排) | hashPplCent 0-33 铜/34-66 银/67-100 金;BRAND_TIERS 3 档卡片 PREMIUM 默认选中 |
✅ |
| ⑤ 5 项绿勾校验 | 缺项 disabled + tooltip + 点击跳闪 | checklist useMemo 5 项;黄色闪烁 flash-yellow 3×0.5s;按钮文案实时显示 N/5 绿勾 |
✅ |
| ⑥ 结果页 6 区块 | 金额大卡 + 9 步明细树 + QSV-09 灵活部分 + 3 按钮 + SV 档位 + 微调返回 | ResultV2Comp 6 区块齐全;STEP_FORMULA_DESC 9 步公式说明;PDF 复用 V1;L1 写 localStorage;分享模态含 5×5 点阵 QR 示意 + 复制链接 |
✅ |
| V1 高级模式 | 右上角切换,V1 表单原封保留 | advancedMode useState 双分支渲染,V1 提交逻辑独立保留 |
✅ |
| API 契约(约束 C3) | buildPayloadV2 → P0~P8 与 V1 一致;ppl_id 非空才传 Header | buildPayloadV2() 翻译映射正确;if (pplId) headers["ppl_id"] = pplId 与热修复行为对齐 |
✅ |
| 零新增依赖(约束 C1) | 纯 SVG 柱状图 / CSS 点阵 QR / emoji 图标 | package.json 无变化 | ✅ |
发现缺口 1 项:BPL_SAMPLES 仅 8 条,规格 §4.3 要求「30 条,公屋/村屋/唐楼各覆盖至少 3 条」(当时 公屋 1 / 村屋 2 / 唐楼 1,未达标)。
2.2 BPL Mock 样本补齐(8 → 30 条)¶
- 改动文件:
apps/mfr-portal/app/quote/page.tsx(仅此 1 处,纯数据追加) - 新增 22 条,分类覆盖:
- 公屋 +4(黄大仙下邨/石硖尾邨/柴湾兴华邨/沙田禾輋邨)→ 共 5 条
- 村屋 +3(大埔林村/西贡蚝涌村/屯门蓝地)→ 共 5 条
- 唐楼 +3(深水埗大南街/湾仔太原街/佐敦吴松街)→ 共 4 条
- 私人屋苑 +6(太古城/黄埔花园/日出康城/愉景新城/半山干德道/愉景湾)
- 办公楼 +4(观塘创纪之城/湾仔中环广场/九龙湾企业广场/葵涌写字楼)
- 字段规范:全部含 bpl_id(HKI/KLN/NT/I-L 区域前缀)/ keywords(中英文别名)/ 合理 GPS / 电梯·楼层·停车·楼梯宽度特征
- 性质声明:全部为 MVP-Lite Mock 示范数据(名称标注「示范」),对接真实
/api/v2/mds/bpl/search后整体删除(代码内已有 TODO 标注)
2.3 本地环境修复(非代码问题)¶
- 现象:后端全量 pytest 首跑 10 个 QSV 测试 404(
test_qsv_quote.py全部) - 根因:本地
.venv未安装reportlab(L-20260823-02 新增的 PDF 依赖)→qsv_routerimport 时ModuleNotFoundError→ 被interfaces/api/__init__.pyL25 的宽 except 静默跳过 → qsv 路由整体未挂载 - 处置:
.venv内pip install -e .(reportlab 5.0.0 装入)→ 复跑全绿 - 风险提示:
build_api_router()的裸except Exception: continue会把「依赖缺失」这类部署级错误降级为 404,排障成本高。建议后续改为「开发模式重抛异常 / 生产模式记日志告警」(见 §5 遗留项 #1)
3. 验证结果¶
3.1 后端(Python 3.12 + pytest 9.1.1 + reportlab 5.0.0)¶
| 项 | 命令 | 结果 |
|---|---|---|
| ruff | ruff check app tests |
✅ All checks passed |
| pytest 全量 | pytest tests -q |
✅ 272 passed / 0 failed(73s),含 MFR 报价 + PDF + dev token + ppl_id 可选化回归 |
| 已知警告 | HMAC key 25 字节 < 32(开发模式默认密钥) | 沿用既有声明,生产 DIP1_JWT_SECRET ≥32 字节消除 |
注:后端 4 文件工作区改动(ppl_id 可选化 + CORS)为 DTL L-20260823-05 热修复的本地代码,本日志完成其全量回归验证,行为与测试断言一致。
3.2 前端(pnpm + tsc + next 14.2.5)¶
| 项 | 命令 | 结果 |
|---|---|---|
| typecheck | pnpm --filter @dip1/mfr-portal run typecheck |
✅ 0 TS 错误(BPL 扩充后复跑仍 0 错误) |
| build | pnpm --filter @dip1/mfr-portal build |
✅ 4 页面静态生成;/quote 14.4 kB(First Load 111 kB,BPL +22 条后 +1.3 kB) |
4. MSC-L4 合规复核¶
空白字段占比 = 1(型号 text)/ 8 = 12.5% ≤ 30% 红线 ✅(与 DTL L-20260824-03 §5.3 结论一致,本次 BPL 扩充不引入空白字段)。
5. 遗留问题与移交¶
| # | 项 | 移交方 | 说明 |
|---|---|---|---|
| 1 | build_api_router() 裸 except 静默跳过模块导入错误 |
听码(下一迭代) | 依赖缺失 → 全路由 404 难排障;建议开发模式重抛 + 启动日志显式打印跳过原因 |
| 2 | MFR V2 生产部署(112.74.108.189:3000) | 听云 OCM | 前端 page.tsx + globals.css 已就绪;参考 DTL L-20260823-05 热修复部署流程 |
| 3 | 人工交互层端到端冒烟(浏览器 8 项检查) | 听写 DT + 人工 | DTL L-20260824-04 §五未勾选项 |
| 4 | B1-B4 后端接口阻塞(BPL search / L1 from-quote / PPL badge / 短链) | 听码(按 DTL L-20260824-03 §6.1 排期) | 前端 Mock 均已预留 TODO 切换点 |
| 5 | git 提交与 hk2026 主仓同步 | 听写 DT | 听码不执行 git push;本日志完成后由听写打包提交(关联 DTL L-20260824-03/-04) |
6. 修订记录¶
| 版本 | 修订内容 |
|---|---|
| V1.0 | 2026-08-24 听码 WDE 初稿:V2 前端规格核查 + BPL 样本 8→30 补齐 + 后端 reportlab 依赖修复回归 272 全过 |
本日志登记 MFR 开放报价 V2 前端编码收尾验证;上游设计 DTL L-20260824-03,类型修复验证 DTL L-20260824-04。