fix: 对齐领券成功率分母口径 #101

Merged
guke merged 3 commits from codex/coupon-rate-exclude-abandoned into main 2026-08-01 23:26:28 +08:00
Member

改动说明

  • 对齐后端领券成功率新口径
  • 卡片提示展示成功次数、发起数、中途退出数和实际分母
  • 中途退出已有结果显示真实单券成功率
  • 完全无逐券事件显示 0.0%(退出前无结果)
  • 只有 skipped 时显示 0.0%(无有效结果),并保留可点击的逐券明细入口
  • 完成/失败记录缺埋点仍显示 -,避免误报为 0%
  • 点位成功率维持原有独立口径

验证

  • TypeScript 类型检查通过
  • 生产构建通过
  • 已覆盖部分成功、无事件、只有 skipped、非退出埋点缺失组合

依赖后端:WonderableAI/shaguabijia-app-server#213,请同步发布。

## 改动说明 - 对齐后端领券成功率新口径 - 卡片提示展示成功次数、发起数、中途退出数和实际分母 - 中途退出已有结果显示真实单券成功率 - 完全无逐券事件显示 0.0%(退出前无结果) - 只有 skipped 时显示 0.0%(无有效结果),并保留可点击的逐券明细入口 - 完成/失败记录缺埋点仍显示 -,避免误报为 0% - 点位成功率维持原有独立口径 ## 验证 - TypeScript 类型检查通过 - 生产构建通过 - 已覆盖部分成功、无事件、只有 skipped、非退出埋点缺失组合 依赖后端:WonderableAI/shaguabijia-app-server#213,请同步发布。
linkeyu added 1 commit 2026-08-01 13:57:02 +08:00
linkeyu added 1 commit 2026-08-01 14:06:57 +08:00
Member

🤖 review-pr 深审结论

🟢 可合并 · 0.9 — 领券成功率前端对齐 server#213 新分母口径。合并最新 main 后隔离 worktree 实跑 tsc --noEmit(strict)退出 0,type-safe。纯展示层,防御式安全。

注:审的是 PR 当前最新 head 7d4de22e(发现时为 101102e6,审前作者又推了一版)。

改动(3 文件 +17/-3)

  • src/lib/types.tsDashboardOverview.couponabandoned / success_denominator —— 对接 server#213 后端字段(铁律1 跨仓契约 ✓)。
  • dashboard/page.tsx:大盘「领券成功率」提示改为 all_success ÷(started − abandoned) 并显示实际分母;success_rate 值直接取后端(已是新口径)。
  • coupon-data/page.tsxPointScorePopover 对「中途退出且退出前无单券结果(status=abandoned & 0/0)」显示「0.0%(退出前无结果)」;缺埋点(null)仍显示 -,不误报 0%。

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

  • tsc --noEmit(TS 5.9.3,strict)→ 退出 0,零类型错误

正面点

  • 全程防御式:fmtIntnull/undefined → '--',即使后端 #213 未上线也不崩(本 PR 已声明「依赖 #213 同步发布」)。
  • 展示口径分层清晰:大盘走新分母(剔除 abandoned)、coupon-data 点位成功率维持独立口径 —— 印证了 server#213 里我提的跨页分母差异是有意为之(本 PR body 明确「点位成功率维持原有独立口径」)。
  • abandoned 两种情形区分正确:有 0/0 结果 → 0.0%;缺埋点 null-

关注(低)

  • 🟢 nit:types.tsabandoned / success_denominator 标必填,但要 server#213 上线后才保证有;运行时 ?. + fmtInt 已兜底不崩,待 #213 合并即一致。建议与 #213 同步发布(body 已注明)。

建议

  • 无阻塞项。

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

## 🤖 review-pr 深审结论 🟢 **可合并 · 0.9** — 领券成功率前端对齐 server#213 新分母口径。合并最新 `main` 后隔离 worktree 实跑 `tsc --noEmit`(strict)**退出 0,type-safe**。纯展示层,防御式安全。 > 注:审的是 PR **当前最新 head `7d4de22e`**(发现时为 `101102e6`,审前作者又推了一版)。 ### 改动(3 文件 +17/-3) - `src/lib/types.ts`:`DashboardOverview.coupon` 加 `abandoned` / `success_denominator` —— 对接 server#213 后端字段(**铁律1 跨仓契约 ✓**)。 - `dashboard/page.tsx`:大盘「领券成功率」提示改为 `all_success ÷(started − abandoned)` 并显示实际分母;`success_rate` 值直接取后端(已是新口径)。 - `coupon-data/page.tsx`:`PointScorePopover` 对「中途退出且退出前无单券结果(`status=abandoned` & `0/0`)」显示「0.0%(退出前无结果)」;缺埋点(`null`)仍显示 `-`,不误报 0%。 ### 构建 / 类型(已实跑,诚实) - `tsc --noEmit`(TS 5.9.3,`strict`)→ **退出 0,零类型错误**。 ### 正面点 - 全程防御式:`fmtInt` 对 `null/undefined → '--'`,即使后端 #213 未上线也不崩(本 PR 已声明「依赖 #213 同步发布」)。 - 展示口径分层清晰:大盘走新分母(剔除 abandoned)、coupon-data 点位成功率维持独立口径 —— **印证了 server#213 里我提的跨页分母差异是有意为之**(本 PR body 明确「点位成功率维持原有独立口径」)。 - abandoned 两种情形区分正确:有 `0/0` 结果 → `0.0%`;缺埋点 `null` → `-`。 ### 关注(低) - 🟢 nit:`types.ts` 里 `abandoned` / `success_denominator` 标必填,但要 server#213 上线后才保证有;运行时 `?.` + `fmtInt` 已兜底不崩,待 #213 合并即一致。**建议与 #213 同步发布**(body 已注明)。 ### 建议 - 无阻塞项。 <sub>🤖 自动深审 · 全程只读 · 合并 base 后隔离 worktree 实跑 tsc</sub>
linkeyu added 1 commit 2026-08-01 14:12:38 +08:00
Member

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

🟢 可合并 · 0.9 — 本次「保留跳过单券明细入口」消费 server#213 新增的 point_event_count,把「退出前无结果」与「有跳过事件但无有效结果」区分开。合并最新 maintsc --noEmit(strict)退出 0、type-safe、除零安全。

本次增量(7d4de22e → b8363b31,3 文件 +29/-8)

  • CouponDataRow + point_event_count?: number(可选,消费 #213 新字段,向后兼容)。
  • PointScorePopover
    • abandoned 且 0/0 时不再早退 -,改按有无事件分流:hasPointDetails = (point_event_count ?? 0) > 0
    • 无任何事件 → 静态「0.0%(退出前无结果)」Tooltip;有跳过事件 → 「0.0%(无有效结果)」并保留 Popover 明细入口(可点开看 skipped 单券)。
    • scoreColorpoint_total_count > 0 && 守卫,避免 0===0 误判为完成态色。

除零 / 边界核对

  • 0/0 分支硬编码 0.0%(不做除法);仅 point_total_count > 0 时才走 success/total*100(早退保证),无 NaN / 除零

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

  • tsc --noEmit(TS 5.9.3,strict)→ 退出 0,零类型错误

关注(低,同前)

  • 🟢 与 server#213 / #214 同批:point_event_count 依赖 #213 后端;?? 0 兜底不崩。建议 #213#101 同步发布

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

## 🤖 review-pr 深审结论(增量复审 @b8363b31) 🟢 **可合并 · 0.9** — 本次「保留跳过单券明细入口」消费 server#213 新增的 `point_event_count`,把「退出前无结果」与「有跳过事件但无有效结果」区分开。合并最新 `main` 后 `tsc --noEmit`(strict)**退出 0**、type-safe、除零安全。 ### 本次增量(`7d4de22e → b8363b31`,3 文件 +29/-8) - `CouponDataRow` + `point_event_count?: number`(可选,消费 #213 新字段,向后兼容)。 - `PointScorePopover`: - abandoned 且 `0/0` 时不再早退 `-`,改按有无事件分流:`hasPointDetails = (point_event_count ?? 0) > 0`。 - 无任何事件 → 静态「0.0%(退出前无结果)」Tooltip;有跳过事件 → 「0.0%(无有效结果)」**并保留 Popover 明细入口**(可点开看 skipped 单券)。 - `scoreColor` 加 `point_total_count > 0 &&` 守卫,避免 `0===0` 误判为完成态色。 ### 除零 / 边界核对 - `0/0` 分支硬编码 `0.0%`(不做除法);仅 `point_total_count > 0` 时才走 `success/total*100`(早退保证),**无 NaN / 除零**。 ### 构建 / 类型(已实跑,诚实) - `tsc --noEmit`(TS 5.9.3,`strict`)→ **退出 0,零类型错误**。 ### 关注(低,同前) - 🟢 与 server#213 / #214 同批:`point_event_count` 依赖 #213 后端;`?? 0` 兜底不崩。**建议 #213 ↔ #101 同步发布**。 <sub>🤖 自动深审 · 增量复审 · 合并 base 后隔离 worktree 实跑 tsc</sub>
guke merged commit 5bec909dbd into main 2026-08-01 23:26:28 +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#101