修复:补齐比价记录状态枚举映射 #100

Merged
guke merged 2 commits from codex/comparison-status-enums into main 2026-08-01 23:25:38 +08:00
Member

变更说明

  • 补齐主状态 running 及历史业务状态的中文映射
  • 补齐 source/ok/store_closed/no_delivery 等逐平台状态
  • 修复 platform_results 实际为对象时无法渲染的问题
  • 无 platform_results 时兼容回退 platforms 数组
  • 增加进行中状态筛选

验证

  • Next.js 生产构建:通过
  • TypeScript:通过
## 变更说明 - 补齐主状态 running 及历史业务状态的中文映射 - 补齐 source/ok/store_closed/no_delivery 等逐平台状态 - 修复 platform_results 实际为对象时无法渲染的问题 - 无 platform_results 时兼容回退 platforms 数组 - 增加进行中状态筛选 ## 验证 - Next.js 生产构建:通过 - TypeScript:通过
linkeyu added 1 commit 2026-08-01 09:56:13 +08:00
Member

🤖 review-pr 深审结论

🟢 可合并 · 置信度 0.9 — 比价记录状态展示映射的前端补齐,与 server#209 同一枚举口径。合并最新 main 后隔离 worktree 实跑 tsc --noEmit(strict)零报错,type-safe。纯展示层改动,低风险。

改动 & 正面点

  • STATUS_COLOR / STATUS_LABEL 补齐历史细分值(below_minimum→绿/成功;store_closed / store_not_found / items_not_found / no_delivery / unsupported→红/失败)并新增 running→蓝/进行中;迁移前后数据都能正确显示。
  • 新增 platformResultRows():兼容 raw_payload.platform_results 既是**对象(dict,按 platform_id 键)**也是数组两种形态,dict 时补 platform_id 字段;无 platform_results 时回退 platforms 数组。修了一个真 bug——原代码 as Record<string, unknown>[] 直接把 dict 当数组,详情抽屉「结局」表对 dict 型 payload 实际渲染不出内容(server#209 测试里 platform_results 正是 dict)。
  • 状态筛选下拉补 running;结局列颜色改用 STUCK_COLOR 映射(替代原 s === 'success' ? green : orange 二值)。
  • 三处渲染(列表状态列 :352、详情抽屉 :563、结局表 :661)均走映射且带 || s 原值兜底,未知值降级为默认色 + 原文,不崩。

构建 / 类型(已实跑,诚实)

  • PR head 已含最新 main(merge 为 no-op),隔离 worktree 用 clone 的 node_modules(junction)跑 tsc --noEmit(TS 5.9.3,tsconfig strict:true)→ 退出 0,零类型错误
  • 未跑 next buildtsc --noEmit 已做全量类型检查;纯展示改动无需运行时验证)。

铁律1(跨 PR 类型契约)

  • @/lib/typesComparisonRecordListItem.status: stringComparisonRecordDetail.raw_payload: Record<string, unknown> | null 均为宽松类型;新代码签名 / 索引与之相容,无兄弟 PR 收紧成 union 而致编译不过。

关注

  • 🟢 与 server#209 是一对(前端=展示,后端=写归一 + 迁移)。前端映射对迁移前细分值迁移后桶值都兼容,不强依赖合并顺序;但建议与 #209 一并上线,口径一致。

建议

  • 无阻塞项。可选:列表状态列(:352)也加 || '-' 末级兜底(与 :661 一致),极端 null 更稳(当前 status 类型非空,影响可忽略)。

🤖 自动深审 · 全程只读 · 合并 base 后隔离 worktree 实跑 tsc

## 🤖 review-pr 深审结论 🟢 **可合并** · 置信度 0.9 — 比价记录状态展示映射的前端补齐,与 server#209 同一枚举口径。合并最新 `main` 后隔离 worktree 实跑 `tsc --noEmit`(strict)**零报错,type-safe**。纯展示层改动,低风险。 ### 改动 & 正面点 - `STATUS_COLOR / STATUS_LABEL` 补齐历史细分值(`below_minimum`→绿/成功;`store_closed / store_not_found / items_not_found / no_delivery / unsupported`→红/失败)并新增 `running`→蓝/进行中;迁移前后数据都能正确显示。 - 新增 `platformResultRows()`:兼容 `raw_payload.platform_results` 既是**对象(dict,按 platform_id 键)**也是数组两种形态,dict 时补 `platform_id` 字段;无 `platform_results` 时回退 `platforms` 数组。**修了一个真 bug**——原代码 `as Record<string, unknown>[]` 直接把 dict 当数组,详情抽屉「结局」表对 dict 型 payload 实际渲染不出内容(server#209 测试里 `platform_results` 正是 dict)。 - 状态筛选下拉补 `running`;结局列颜色改用 `STUCK_COLOR` 映射(替代原 `s === 'success' ? green : orange` 二值)。 - 三处渲染(列表状态列 `:352`、详情抽屉 `:563`、结局表 `:661`)均走映射且带 `|| s` 原值兜底,未知值降级为默认色 + 原文,不崩。 ### 构建 / 类型(已实跑,诚实) - PR head 已含最新 `main`(merge 为 no-op),隔离 worktree 用 clone 的 node_modules(junction)跑 `tsc --noEmit`(TS 5.9.3,tsconfig `strict:true`)→ **退出 0,零类型错误**。 - 未跑 `next build`(`tsc --noEmit` 已做全量类型检查;纯展示改动无需运行时验证)。 ### 铁律1(跨 PR 类型契约) - `@/lib/types` 中 `ComparisonRecordListItem.status: string`、`ComparisonRecordDetail.raw_payload: Record<string, unknown> | null` 均为宽松类型;新代码签名 / 索引与之相容,无兄弟 PR 收紧成 union 而致编译不过。 ### 关注 - 🟢 与 server#209 是一对(前端=展示,后端=写归一 + 迁移)。前端映射对**迁移前细分值**与**迁移后桶值**都兼容,不强依赖合并顺序;但建议与 #209 一并上线,口径一致。 ### 建议 - 无阻塞项。可选:列表状态列(`:352`)也加 `|| '-'` 末级兜底(与 `:661` 一致),极端 null 更稳(当前 status 类型非空,影响可忽略)。 <sub>🤖 自动深审 · 全程只读 · 合并 base 后隔离 worktree 实跑 tsc</sub>
linkeyu added 1 commit 2026-08-01 10:23:32 +08:00
Member

🤖 review-pr 深审结论(增量复审 @0f921f9e)

🟢 可合并 · 0.9 — 本次把「逐平台结局」表重构为「逐平台结果卡片判定」(状态归一 + 卡片分类 + 菜品差异 / 复杂规格摘要)。合并最新 main 后隔离 worktree 实跑 tsc --noEmit(strict)退出 0,type-safe。与 server#209 @f1dd0f4aplatforms 透传正确配对

本次增量(0c75c4f → 0f921f9e,2 文件 +161/-45)

  • src/lib/types.tsComparisonRecordDetail 新增 platforms: Record<string, unknown>[] —— 对接 server#209 后台详情新透传的 platforms 字段(铁律1 跨仓契约 ✓)。
  • page.tsx:删除旧 STUCK_LABEL/STUCK_COLOR,改由 platformDisplay(row) 统一判定:success/source→ok,按 is_best/role/is_user_original/has_dish_diff 归「#1 全网最低赢家 / #2 原选择 / #3 其他成功」,并覆盖 below_minimum/store_closed/items_not_found/store_not_found/failed/unsupported/no_delivery/not_installed/not_compared_this_time + 未知兜底;新增 hasDishDiff/dishDiffSummary/complexSpecSummary/stringList 摘要;表格扩为「平台 / 逐平台状态 / 卡片分类 / 价格 / 说明」五列。
  • 数据源优先级:detail.platformsraw_payload.platformsraw_payload.platform_results(灰度旧记录兜底)。

构建 / 类型(已实跑,诚实)

  • 隔离 worktree(clone node_modules junction)跑 tsc --noEmit(TS 5.9.3,strict)→ 退出 0,零类型错误

正面点

  • 全程防御式:detail?.platforms(platforms?.length ?? 0)typeof / Array.isArray 守卫 —— 即便后端 server#209 尚未上线(无 platforms 字段)也优雅降级不崩,回退 raw_payload。未知 status 走「#9 兜底」不异常。

关注(低)

  • 🟢 nit:types.tsplatforms 标为必填,但现网后端要等 server#209 上线后才保证有该字段;运行时代码已 ?. 兜底、不会崩,仅类型与现网契约暂不符 —— 待 #209 合并后即一致。建议两者一并上线

建议

  • 无阻塞项。

🤖 自动深审 · 增量复审 · 合并 base 后隔离 worktree 实跑 tsc

## 🤖 review-pr 深审结论(增量复审 @0f921f9e) 🟢 **可合并 · 0.9** — 本次把「逐平台结局」表重构为「逐平台结果卡片判定」(状态归一 + 卡片分类 + 菜品差异 / 复杂规格摘要)。合并最新 `main` 后隔离 worktree 实跑 `tsc --noEmit`(strict)**退出 0,type-safe**。与 server#209 `@f1dd0f4a` 的 `platforms` 透传**正确配对**。 ### 本次增量(`0c75c4f → 0f921f9e`,2 文件 +161/-45) - `src/lib/types.ts`:`ComparisonRecordDetail` 新增 `platforms: Record<string, unknown>[]` —— 对接 server#209 后台详情新透传的 `platforms` 字段(**铁律1 跨仓契约 ✓**)。 - `page.tsx`:删除旧 `STUCK_LABEL/STUCK_COLOR`,改由 `platformDisplay(row)` 统一判定:`success/source→ok`,按 `is_best/role/is_user_original/has_dish_diff` 归「#1 全网最低赢家 / #2 原选择 / #3 其他成功」,并覆盖 `below_minimum/store_closed/items_not_found/store_not_found/failed/unsupported/no_delivery/not_installed/not_compared_this_time` + 未知兜底;新增 `hasDishDiff/dishDiffSummary/complexSpecSummary/stringList` 摘要;表格扩为「平台 / 逐平台状态 / 卡片分类 / 价格 / 说明」五列。 - 数据源优先级:`detail.platforms` → `raw_payload.platforms` → `raw_payload.platform_results`(灰度旧记录兜底)。 ### 构建 / 类型(已实跑,诚实) - 隔离 worktree(clone `node_modules` junction)跑 `tsc --noEmit`(TS 5.9.3,`strict`)→ **退出 0,零类型错误**。 ### 正面点 - 全程防御式:`detail?.platforms`、`(platforms?.length ?? 0)`、`typeof` / `Array.isArray` 守卫 —— 即便后端 server#209 尚未上线(无 `platforms` 字段)也**优雅降级**不崩,回退 `raw_payload`。未知 status 走「#9 兜底」不异常。 ### 关注(低) - 🟢 nit:`types.ts` 里 `platforms` 标为**必填**,但现网后端要等 server#209 上线后才保证有该字段;运行时代码已 `?.` 兜底、不会崩,仅类型与现网契约暂不符 —— 待 #209 合并后即一致。建议两者**一并上线**。 ### 建议 - 无阻塞项。 <sub>🤖 自动深审 · 增量复审 · 合并 base 后隔离 worktree 实跑 tsc</sub>
guke merged commit 5d2841fc85 into main 2026-08-01 23:25:38 +08:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WonderableAI/shaguabijia-admin-web#100