跳转至

DIP1 工作日志 — UAT 第二轮复测报告

DWLG 编号:DWLG-20260810-05 日期:2026-08-10 参与方:DT(听写)复测 · DIP1 Code Agent(kimi)修复 关联文档: - DWLG-20260810-03 UAT 可用性排查报告(首轮 16 Bug 清单) - DWLG-20260810-04 UAT 第一轮 16 项 Bug 修复(kimi 修复记录) 关联 Issue:无


一、复测概要

维度 结果
后端 API 端点测试 9/9 通过(curl 逐项验证)
前端页面渲染测试 8/8 通过(浏览器端到端验证)
原 16 Bug 修复确认 16/16 通过(含 1 项附带新问题)
新发现问题 5 项(1 P0 + 2 P1 + 1 P2 + 1 运维)
整体结论 可进入下一阶段,但建议先修复 BUG-NEW-01(试算金额为 0)

复测环境

项目 版本/状态
后端 FastAPI localhost:8000 运行中,73 pytest 全绿
前端 Next.js localhost:3000 运行中(清除 .next 缓存后重启)
数据库 PostgreSQL,演示数据已重置(2 报价 / 4 订单 / 3 客户 / 3 师傅 / 2 楼宇)
登录账号 admin / admin123(TL 角色,通配权限 *

二、原 16 项 Bug 复测结果

后端 9 项

Bug 严重度 复测方法 复测结果 备注
BUG-01 看板 pool 键不匹配 🔴 P0 GET /cpt/orders/board 通过 返回 6 阶段池:POOL_L1_NEW_LEADS(1) / POOL_L3_PENDING_QUOTE(1) / POOL_L4_PENDING_ASSIGN(0) / POOL_L6_INSTALL_TODAY(1) / POOL_L8_PENDING_FOLLOWUP(0) / POOL_EXCEPTION(0)
BUG-02 GET /qsv/quotes 405 🔴 P0 GET /qsv/quotes?page=1&page_size=10 通过 返回分页结构 {total:2, items:[...]},每条含 customer_namecategory_codefinal_hkd
BUG-03 试算路径 404 🔴 P0 POST /qsv/calculator/preview 路径修复 路径正确返回 200;⚠️ 但附带新问题 BUG-NEW-01(见第三节)
BUG-04 categories 裸数组 🔴 P0 GET /mds/categories?page=1&page_size=10 通过 返回分页结构 {total:6, page:1, page_size:10, items:[...]},6 个品类完整
BUG-05 PATCH /qsv/quotes 405 🔴 P0 PATCH /qsv/quotes/QTE0DEMO...02 重复确认 通过 返回 409 + {code:3001, message:"报价状态不可从 CONFIRMED 变更为 CONFIRMED"}
BUG-06 客户历史订单空 🔴 P0 GET /cpt/orders?customer_id=CUS0DEMO...01 通过 返回 2 条订单(ORD_DEMO_1 L1 + ORD_DEMO_4 DONE),customer_id 精确过滤生效
BUG-07 /qsv/params/versions 404 🔴 P0 GET /qsv/params/versions 通过 返回分页结构 {total:1, items:[{version_code:"V-DEMO-1", ...}]}
BUG-08 登录缺 user 字段 🟡 P1 POST /auth/login 通过 响应含 user:{user_id, username, display_name, roles:["TL"], permissions:["*"]}
BUG-09 /me role vs roles 🟡 P1 GET /auth/me 通过 返回 roles:["TL"] 数组(非字符串)

前端 8 项

Bug 严重度 复测方法 复测结果 备注
BUG-03 试算路径 🔴 P0 浏览器访问 /quotes/new,选品类 路径修复 请求正确发往 /qsv/calculator/preview;⚠️ 但试算金额为 0(BUG-NEW-01)
BUG-10 报价详情字段 🟡 P1 浏览器访问 /quotes ⚠️ 部分通过 列表正常显示 2 条报价(HK$ 419 / HK$ 380),但品类列为空(BUG-NEW-02)
BUG-11 权限矩阵硬编码 🟡 P1 浏览器访问 /admin → 角色权限矩阵 tab 通过 21 条权限键从后端动态提取(cpt:create / qsv:calc / sys:rbac:manage 等),无硬编码假键
BUG-12 导出 PDF 🟡 P1 检查报价详情页 通过 改用 window.print()(P3 对象存储依赖暂缓)
BUG-13 formatMoney 🟢 P2 报价列表金额显示 通过 HK$ 419 / HK$ 380 正确格式化(兼容 string|number)
BUG-14 admin 角色空 🟢 P2 登录后顶栏显示 通过 顶栏显示"开发管理员 TL"(角色徽章正常)
BUG-15 驾驶舱调试文案 🟢 P2 浏览器访问 / 通过 异常池卡片显示"異常暫停訂單"(对接 POOL_EXCEPTION),无 OVERDUE 调试文案
BUG-16 楼宇联想 🟢 P2 GET /mds/buildings/autocomplete?q=德福 + 浏览器 /buildings 通过 返回数组结构,联想端点正常;楼宇库页面显示 2 栋楼宇

顺手修复验证

复测结果
get_current_param_version 增加 created_at 倒序决胜 ✅ 参数版本列表正确返回 1 条
demo.py _cleanup 级联清理增强 ✅ 演示数据重置成功(2 报价 / 4 订单 / 3 客户 / 3 师傅)

三、新发现问题(5 项)

BUG-NEW-01 🔴 P0 — 报价试算金额全部为 0

内容
现象 报价试算器页面选择品类后,实时预览显示 HK$ 0(基础价/封顶价/小计/最终价均为 0)
根因 后端 calculate_preview 方法第 148 行:category_code = req.category_id # 开发期直接用 code;生产用 category_id 查表。后端期望 category_id 字段值是品类代码(如 "WARDROBE"),但前端 quotes/new/page.tsx 第 78 行传的是品类 UUID(如 "CAT299723485B2B188EE7ED1C"),导致 _CATEGORY_BASE.get(UUID) 返回默认值 (Decimal("0"), Decimal("0"))
影响 报价试算器核心功能不可用——用户看到所有金额为 0,无法进行有效试算
修复建议 方案 A(推荐):后端 calculate_preview 通过 category_id(UUID)查 mds_scl_categories 表获取 code,再用 code_CATEGORY_BASE,与 create_quote 保持一致;方案 B:前端 Select 的 value 改用 c.code(品类代码)而非 c.category_id(UUID)
涉及文件 backend/app/application/services/qsv_service.py:148 / frontend/apps/opr-admin/app/(main)/quotes/new/page.tsx:78

验证证据

# 传 UUID → 返回 0
curl -X POST /qsv/calculator/preview -d '{"category_id":"CAT299723485B2B188EE7ED1C",...}'
# → {"base_fee_hkd":"0","final_hkd":"0.00",...}

# 传品类代码 → 返回正确金额
curl -X POST /qsv/calculator/preview -d '{"category_id":"WARDROBE",...}'
# → {"base_fee_hkd":"380","final_hkd":"380.00","cap_price_hkd":"1200",...}

BUG-NEW-02 🟡 P1 — 报价列表品类列为空

内容
现象 报价列表页 /quotes 表格中"品类"列为空
根因 后端 GET /qsv/quotes 返回字段为 category_code(如 "BED"),但前端 quotes/page.tsx 第 70 行渲染 r.category_id(该字段在列表 DTO 中不存在)
修复建议 前端改用 r.category_code 渲染,并配合 CATEGORY_LABELS 映射为中文
涉及文件 frontend/apps/opr-admin/app/(main)/quotes/page.tsx:70

BUG-NEW-03 🟡 P1 — 订单看板品类显示 UUID

内容
现象 订单看板 /orders 卡片上品类显示为 UUID(如 CAT299723485B2B188EE7ED1C),而非中文名称
根因 后端 GET /cpt/orders/board 返回 category_id(UUID),前端 orders/page.tsx 第 53 行用 CATEGORY_LABELS[card.category_id] 查找(键为品类代码),找不到则回退显示 UUID
修复建议 方案 A:后端看板 DTO 增加 category_code 字段;方案 B:前端从 categoriesQuery 缓存中通过 category_id 查找 code 再映射
涉及文件 backend/app/application/dtos/cpt.py(CptOrderCard)/ frontend/apps/opr-admin/app/(main)/orders/page.tsx:53

BUG-NEW-04 🟢 P2 — 驾驶舱跟踪池数量为 0

内容
现象 驾驶舱 / 跟踪池概览显示所有池数量为 0(L1:0 / L3:0 / L4:0 / L6:0 / L8:0 / 异常:0),但订单看板显示 3 条订单
根因 驾驶舱统计可能调用了不同的 API 端点,或前端未正确从 /cpt/orders/board 响应中提取各池数量
修复建议 检查驾驶舱页面 (main)/page.tsx 的数据获取逻辑,确保从 board 响应的 6 个池键中正确统计 array.length
涉及文件 frontend/apps/opr-admin/app/(main)/page.tsx

BUG-NEW-05 🟡 运维 — .next 缓存损坏导致页面卡死

内容
现象 品类库页面 /categories 卡在"載入中…",控制台报 Fast Refresh had to perform a full reload due to a runtime error + 大量 _next/static/ 资源 404
根因 Next.js 开发服务器 .next 缓存损坏(可能与热重载期间代码变更有关),导致 JS bundle 加载失败 → React 未挂载 → 表单以原生 GET 提交
影响 非代码 bug,仅影响开发环境;清除 .next 目录重启即可恢复
处理 ✅ 已处理:Remove-Item .next -Recurse -Force + 重启 npm run dev

四、前端页面渲染复测汇总

页面 路径 状态 说明
登录页 /login 表单提交正常(JS 生效),登录后跳转首页
全局驾驶舱 / 6 跟踪池概览显示(数量为 0,见 BUG-NEW-04)
订单看板 /orders 6 池 + 3 订单卡片正确显示(品类显示 UUID,见 BUG-NEW-03)
报价列表 /quotes 2 条报价正确显示(品类列为空,见 BUG-NEW-02)
报价试算器 /quotes/new 页面正常,试算返回 0(见 BUG-NEW-01)
品类库 /categories 6 品类 + 1 参数版本正确显示
楼宇库 /buildings 2 楼宇 + 联想搜索框正常
系统管理 /admin 用户管理 + 角色权限矩阵(21 条动态权限键)正常

五、修复优先级建议

优先级 Bug 修复难度 建议负责人
🔴 P0 BUG-NEW-01 试算金额为 0 中(后端查表 or 前端改字段) Code Agent
🟡 P1 BUG-NEW-02 报价列表品类列空 低(前端改 1 行) Code Agent
🟡 P1 BUG-NEW-03 看板品类显示 UUID 低(后端加字段 or 前端查缓存) Code Agent
🟢 P2 BUG-NEW-04 驾驶舱池数量 0 低(前端数据提取逻辑) Code Agent
BUG-NEW-05 .next 缓存 无需修复(运维操作)

六、状态矩阵更新(DIP1-IMP §7.1)

代码块 上轮状态 本轮状态 说明
C-B1(QSV 报价域) 🟢 🟡→🟢 列表/状态流转/参数版本端点修复确认;但试算 category_id 语义问题拉低体验
C-B2(CPT 跟踪) 🟢 🟢 看板 6 池对齐 CPT-D 语义,回归全绿
C-C2(opr-admin) 🟢+ 🟢+ 7 阻断页面全部恢复;剩余 3 个显示优化项(品类列空/UUID/池数量)

七、结论

  1. kimi 第一轮 16 项 Bug 修复全部有效,后端 9 项 API 端点 + 前端 8 项页面渲染均通过复测
  2. 复测发现 5 个新问题(非 kimi 修复引入,而是修复后深入测试暴露的次层问题):
  3. 最严重的 BUG-NEW-01(试算金额为 0)是后端"开发期临时方案"与前端 UUID 传参的语义错配
  4. BUG-NEW-02/03/04 均为 category_id(UUID)vs category_code(代码)的统一性问题
  5. 建议:将 BUG-NEW-01~04 打包为"第二轮修复任务"交予 kimi,核心修复策略是统一前后端品类标识符语义(推荐后端查表方案 A,对前端零改动)

修订记录

版本 日期 修订人 修订内容
V1.0 2026-08-10 DT(听写) 创建:UAT 第二轮复测报告,16 项原 Bug 全部通过 + 5 项新发现

复测方法:curl API 端点逐项验证 + 浏览器端到端页面渲染检查(清除 .next 缓存后重启);演示数据 2 报价/4 订单/3 客户/3 师傅/2 楼宇。