refactor: 收口个人数据展示模型

This commit is contained in:
2026-06-03 17:30:28 +08:00
parent 4f59a0e791
commit a178942033
6 changed files with 250 additions and 72 deletions

View File

@@ -0,0 +1,30 @@
# 【前端架构】Profile Dashboard Presentation 收口计划
## 背景
`RpgEntryHomeView.tsx` 的“我的数据”、钱包 chip 和“玩过”弹窗共用一批展示规则:泥点数量压缩、累计时长固定小时展示、单作品游玩时长压缩、作品类型标签和作品 ID 兜底。原先这些规则散在页面 **Implementation** 内,导致格式口径只能靠 UI 集成测试间接保护。
## 决策
新增 `src/components/rpg-entry/rpgEntryProfileDashboardPresentation.ts`,作为个人数据展示 **Module**。该 **Module****Interface** 收口为:
- `buildProfileDashboardPresentation(dashboard)`:统一生成钱包余额、钱包文案、累计时长文案和已玩数量文案。
- `formatDashboardCount(value)`:统一泥点和计数压缩规则。
- `formatTotalPlayTimeHours(playTimeMs)`:统一“累计游戏时长”固定小时口径。
- `formatCompactPlayTime(playTimeMs)`:统一“玩过”单作品紧凑时长。
- `formatPlayedWorkType(value)``formatPlayedWorkId(work)`:统一“玩过”列表里的玩法标签和作品号兜底。
`RpgEntryHomeView.tsx` 只消费这些 presentation 函数,保留卡片、弹窗和点击处理。个人数据展示规则的 **Locality** 转移到该 **Module** 与纯测试,后续修改计数、时长或作品类型标签不再穿透页面 JSX。
## 约定
- `formatDashboardCount` 与公开作品卡片的 `formatCompactCount` 不合并,二者展示口径不同。
- “累计游戏时长”固定以小时展示,避免个人数据卡在分钟 / 天之间跳动。
- “玩过”列表当前仍按历史契约用 `profileId || worldKey` 展示作品号;若后端未来下发 `publicWorkCode`,应在此 **Module** 改口径。
## 验证
- `npm run test -- src/components/rpg-entry/rpgEntryProfileDashboardPresentation.test.ts`
- `npm run typecheck`
- `npm run check:encoding`
- 针对变更文件执行 ESLint