Files
Genarrative/docs/prd/PLATFORM_SAVE_TAB_PRD_2026-04-19.md
2026-05-01 20:29:09 +08:00

7.2 KiB
Raw Blame History

平台“存档”Tab PRD

更新时间:2026-04-20

0. 目标

把原本堆在“我的”页中的“最近游玩 / 历史浏览”移出,新增平台一级主 Tab“存档”用于承载当前账号在平台里玩过的所有游戏留下的最近可恢复存档。

这次改动的核心目标不是做复杂多槽位存档系统,而是先落地一个稳定、可跨设备同步、可直接继续游玩的账号级存档入口。


1. 信息架构调整

1.1 平台主导航

平台主导航从:

  • 首页
  • 创作
  • 我的

调整为:

  • 首页
  • 创作
  • 存档
  • 我的

移动端底部导航与桌面端左侧纵向导航都必须同步调整。

1.2 “我的”页调整

“我的”页删除以下内容块:

  • 最近游玩
  • 历史浏览

“我的”页保留:

  • 账号资料与身份卡
  • 数据看板
  • 常用功能
  • 设置与账号安全

说明:

  • 历史浏览本期直接从“我的”页移除,不再占据个人页首屏空间。
  • 存档能力统一收口到平台一级“存档”Tab不再同时在“我的”页重复展示。

2. 存档定义

2.1 本期存档口径

本期“存档”Tab 展示的是:

  • 当前账号在每个已游玩游戏 / 世界下保留的最近一个可恢复存档

不是:

  • 同一游戏下的完整多槽位存档管理页
  • 手动重命名 / 置顶 / 删除存档系统

2.2 世界唯一键

服务端必须按 worldKey 聚合最近存档:

  • 自定义世界:custom:<profileId>
  • 内建世界:builtin:<worldType>

同一账号、同一 worldKey 只保留最近一次成功保存的可恢复存档。

2.3 生命周期

  1. 玩家每次成功写入运行时快照时,同步刷新该世界的最近存档记录。
  2. 删除当前活动快照时,不删除历史存档归档。
  3. 点击“继续游玩”时,从该世界最近存档恢复为当前活动快照,再进入游戏。

3. 界面设计

3.1 存档 Tab 首屏结构

页面首屏直接展示存档列表,不再单独保留顶部“最近存档”摘要卡。

列表容器本身需要承担首屏入口作用:

  • 用户进入“存档”Tab 后第一屏就看到可恢复存档列表
  • 不额外重复展示首个存档的大卡摘要
  • 存档数量、排序状态如需表达,应收敛在列表标题或轻量状态信息中

不要在 UI 中默认堆规则说明文案,只保留简洁的状态表达。

3.2 列表排序

列表按 lastPlayedAt 倒序。

最近更新的存档始终在最前面。

3.3 列表项字段

每个列表项必须展示:

  • 游戏名称
  • 最后游玩时间
  • 游戏信息

3.3.0 拼图存档字段与视觉层级

拼图玩法的存档列表项必须按作品维度展示,不把关卡名当作作品名:

  • 主标题展示作品名,来源为服务端存档投影的 worldName,视觉层级必须是卡片内最醒目的文本。
  • 副标题展示当前可继续入口,格式为 第 N 关 · 关卡名;无关卡名时只展示 第 N 关
  • 卡片中不展示英文 Archive / ARCHIVE 标签。
  • 封面缩略图固定为 1:1 正方形比例,使用当前可继续关卡图片。
  • 封面图上不再覆盖“最近存档”标签;保存时间独立展示在信息区内。

3.3.1 移动端卡片布局约束

  • 移动端列表卡片中的封面只能作为独立缩略图或弱化背景层使用,不能直接占满整张卡片并压在正文信息下方。
  • 标题、时间、摘要所在的信息区必须保持 min-width: 0 的可收缩布局,长标题不能把正文挤出屏幕外。
  • 世界名称最多展示 2 行,游戏信息最多展示 3 行,超出后截断,不允许横向溢出。
  • 时间标签、状态标签在窄屏下必须允许换行或独立成行,不能为了保持单行导致卡片内容错位。
  • 列表卡片缩略图区域比例固定,文本区与缩略图区在移动端需要保持稳定对齐,避免出现上下参差和视觉歪斜。

其中“游戏信息”优先级如下:

  1. continueGameDigest
  2. 当前故事文本摘要
  3. 世界简介 / 场景简介
  4. 若都没有则给出简洁兜底文案

可附带展示封面,但封面不是必填验收项。

3.4 点击行为

点击列表项后:

  1. 调用后端恢复接口
  2. 将所选存档切换为当前活动快照
  3. 直接进入游戏继续游玩

前端不允许自行拼装恢复上下文。

3.5 空状态

已登录但无存档

  • 展示轻量空态
  • 引导去首页开始游玩

未登录

  • 展示登录态空壳
  • 不请求受保护的云端存档列表接口

4. 默认进入逻辑

当满足以下条件时玩家进入网站后的平台首页默认进入“存档”Tab

  1. 当前处于登录状态
  2. 当前账号至少存在一个存档

否则:

  • 仍默认进入“首页”Tab

注意:

  • 这个默认进入逻辑只在平台首屏初始化时执行,不能覆盖用户手动切换后的选择。
  • 若平台首页的公开作品、个人数据、存档列表仍在异步加载中,用户已经手动切到“创作 / 存档 / 我的”时,请求完成后也不能把当前 Tab 回刷成默认 Tab。

5. 后端设计

5.1 新增数据表

建议新增 profile_save_archives

  • user_id
  • world_key
  • owner_user_id
  • profile_id
  • world_type
  • world_name
  • world_subtitle
  • summary_text
  • cover_image_src
  • saved_at
  • bottom_tab
  • game_state_json
  • current_story_json
  • updated_at

约束:

  • 主键:user_id + world_key
  • 排序索引:user_id + saved_at desc

5.2 写入规则

每次 /api/runtime/save/snapshot 成功写入后:

  1. 正常更新当前活动快照
  2. 同步 upsert 对应 world_key 的存档归档
  3. 继续保留原有个人看板 / 已玩作品同步逻辑

5.3 列表接口

GET /api/runtime/profile/save-archives

返回:

  • 当前账号全部最近存档

字段至少包含:

  • worldKey
  • worldName
  • worldSubtitle
  • summaryText
  • coverImageSrc
  • lastPlayedAt
  • worldType
  • profileId
  • ownerUserId

5.4 恢复接口

POST /api/runtime/profile/save-archives/:worldKey/resume

用途:

  • 将指定存档归档恢复为当前活动快照
  • 返回恢复后的快照

限制:

  • 恢复动作不能重复记账,不得再次累计个人资产流水
  • 恢复动作不能重复累计已玩时长
  • 恢复动作不能破坏现有快照水合逻辑

6. 前端实现要求

  1. PlatformHomeView 新增 存档 主 Tab。
  2. PreGameSelectionFlow 在平台数据加载时同时拉取存档列表。
  3. 已登录且有存档时,平台首屏默认选中 存档 Tab。
  4. “我的”页删除“最近游玩 / 历史浏览”两个区块。
  5. 点击存档列表项时必须经过后端恢复接口,恢复成功后直接进入游戏。
  6. 移动端优先,列表项点击区域不能过小。

7. 验收标准

  1. 已登录账号可以在“存档”Tab 看到所有已玩过世界的最近存档。
  2. 列表按最近更新时间倒序。
  3. 列表项可看到游戏名称、最后游玩时间和游戏信息。
  4. 点击列表项后可直接继续对应游戏。
  5. 已登录且至少有一个存档时进入网站默认打开“存档”Tab。
  6. 未登录时不请求云端存档列表,也不会出现受保护接口报错。