This commit is contained in:
2026-04-29 20:56:59 +08:00
parent fb6f455530
commit 730f485f48
200 changed files with 9881 additions and 2221 deletions

View File

@@ -1,11 +1,11 @@
# 平台统一作品详情页与 Remix 数据链路设计
更新时间:`2026-04-28`
更新时间:`2026-04-29`
## 1. 本次目标
1. 平台首页、公开广场、分类列表中的每个公开作品点击后,统一先进入作品详情页,不再直接启动玩法。
2. 作品详情页结构参考 TapTap 详情页:顶部封面图、作品基础信息、右侧 Remix 按钮、四项统计、简介内容、底部启动按钮。
2. 作品详情页结构参考 TapTap 详情页:顶部封面图、作品基础信息、右侧“作品改造”按钮、四项统计、简介内容、底部启动按钮。
3. 删除参考图顶部 Tab不接入评价和论坛功能不展示“开发者的话”模块。
4. 统计数据必须从数据库读模型贯穿到前端展示,禁止在前端用假字段、游玩数冒充点赞数或固定文案代替真实字段。
5. Remix 按钮必须由后端事务复制公开作品为当前用户草稿,并同步增加原作品改造次数,成功后前端进入新草稿详情/结果页。
@@ -15,18 +15,21 @@
统一详情页只做作品展示与动作入口,不承担规则说明。
1. 顶部导航:返回按钮、标题“详情”、更多按钮占位;不展示“统计 / 详情 / 评价 / 论坛”Tab。
2. 封面区:使用作品封面图作为主视觉背景可用同图弱化铺底;缺图时只显示平台主题底,不新增说明文字。
2. 封面区:固定 `16:9` 比例,使用作品封面图 `cover` 填满整块主视觉背景可用同图弱化铺底;缺图时只显示平台主题底,不新增说明文字。
3. 基础信息区:
- 左侧作品图标使用作品封面或首图。
- 中间展示作品名、作者名、玩法类型。
- 右侧原 TapTap 评分位置替换为 `Remix` 按钮。
- 中间展示作品名、作者头像、作者名、玩法类型;作者头像读取公开用户资料 `avatarUrl`,缺失时使用作者昵称首字占位
- 右侧原 TapTap 评分位置替换为 `作品改造` 按钮。
4. 统计区固定四项:
- 改造次数`remixCount`
- 游玩次数`playCount`
- 点赞次数`likeCount`
- 上线日期:`publishedAt`
- 改造:`remixCount`,显示为“数字 + 次”,单位放在数字后方。
- 游玩:`playCount`,显示为“数字 + 次”,单位放在数字后方。
- 点赞:`likeCount`,显示为“数字 + 赞”,单位放在数字后方。
- 最近更新:优先展示 `updatedAt`,缺失时回退 `publishedAt`;前端只负责格式化显示,必须兼容后端当前 `seconds.microsZ` 与 ISO 字符串两种真实时间文本,显示为完整 `YYYY-MM-DD`,使用更小字号并保持单行不换行。
- 四项统计需要使用浅色图标底强化识别,但不得追加规则说明类文案。
5. 简介区:展示玩法标签和作品简介;不追加说明类文案。
6. 底部动作:主按钮为“启动”,点击后进入对应玩法运行态并记录游玩次数。
7. 页面配色必须跟随平台明暗主题变量;亮色主题使用平台浅色底、深色文字和主按钮渐变,暗色主题使用平台暗色底、亮色文字和对应主按钮渐变,不在详情页写死独立黑色皮肤。
8. 字号规范跟随平台页面既有节奏:标题/主按钮使用 `1rem` 级别,作品名使用卡片标题同级 `1rem`,辅助信息与简介使用 `0.8125rem` / `0.875rem`,标签与统计标签使用 `0.75rem`,避免在详情页使用随视口放大的独立大字号。
## 3. 数据真相源
@@ -55,7 +58,7 @@
### 3.3 大鱼吃小鱼作品
1. `big_fish_creation_session` 现有 `play_count` 继续作为游玩统计,新增 `remix_count``like_count``published_at`
2. `publish_big_fish_game` 写入 `published_at`,公开列表和详情用它展示上线日期
2. `publish_big_fish_game` 写入 `published_at``updated_at`,公开列表和详情优先用 `updated_at` 展示最近更新
3. `record_big_fish_play` 继续作为游玩次数递增入口。
4. `remix_big_fish_work` 在同一事务内:
- 校验源 session 为已发布作品。
@@ -65,7 +68,8 @@
## 4. API 与前端接入
1. 三类公开作品摘要统一返回:`playCount``remixCount``likeCount``publishedAt`
1. 三类公开作品摘要统一返回:`playCount``remixCount``likeCount``publishedAt``updatedAt`
- 作者头像不固化到作品读模型;详情页按 `authorPublicUserCode``ownerUserId` 读取公开用户摘要中的 `avatarUrl`,确保头像跟随账号资料更新。
2. Remix API
- RPG`POST /api/runtime/custom-world-gallery/{owner_user_id}/{profile_id}/remix`
- 拼图:`POST /api/runtime/puzzle/gallery/{profile_id}/remix`
@@ -76,6 +80,8 @@
- RPG进入复制出的草稿详情。
- 拼图:进入复制出的拼图结果页草稿。
- 大鱼:进入复制出的大鱼结果页草稿。
6. 拼图作品详情页启动时复用当前详情页已经展示的公开作品读模型,直接调用 `POST /api/runtime/puzzle/runs` 记录游玩并进入运行态;不得在启动前额外依赖 `GET /api/runtime/puzzle/gallery/{profile_id}`,避免开发代理或详情读取短断点阻塞启动链路。
7. 本地开发时 `localhost:3000` 是 Vite 前端端口,`/api/**` 默认代理到 Rust `api-server:3100`;若 3100 未监听,点击启动或作品改造会在浏览器显示 `/api/... 500`,此时真实断点是 Rust 后端未启动,不允许用前端假数据替代后端事务。
## 5. 验收点