6.6 KiB
6.6 KiB
平台“存档”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 生命周期
- 玩家每次成功写入运行时快照时,同步刷新该世界的最近存档记录。
- 删除当前活动快照时,不删除历史存档归档。
- 点击“继续游玩”时,从该世界最近存档恢复为当前活动快照,再进入游戏。
3. 界面设计
3.1 存档 Tab 首屏结构
页面首屏直接展示存档列表,不再单独保留顶部“最近存档”摘要卡。
列表容器本身需要承担首屏入口作用:
- 用户进入“存档”Tab 后第一屏就看到可恢复存档列表
- 不额外重复展示首个存档的大卡摘要
- 存档数量、排序状态如需表达,应收敛在列表标题或轻量状态信息中
不要在 UI 中默认堆规则说明文案,只保留简洁的状态表达。
3.2 列表排序
列表按 lastPlayedAt 倒序。
最近更新的存档始终在最前面。
3.3 列表项字段
每个列表项必须展示:
- 游戏名称
- 最后游玩时间
- 游戏信息
3.3.1 移动端卡片布局约束
- 移动端列表卡片中的封面只能作为独立缩略图或弱化背景层使用,不能直接占满整张卡片并压在正文信息下方。
- 标题、时间、摘要所在的信息区必须保持
min-width: 0的可收缩布局,长标题不能把正文挤出屏幕外。 - 世界名称最多展示 2 行,游戏信息最多展示 3 行,超出后截断,不允许横向溢出。
- 时间标签、状态标签在窄屏下必须允许换行或独立成行,不能为了保持单行导致卡片内容错位。
- 列表卡片缩略图区域比例固定,文本区与缩略图区在移动端需要保持稳定对齐,避免出现上下参差和视觉歪斜。
其中“游戏信息”优先级如下:
continueGameDigest- 当前故事文本摘要
- 世界简介 / 场景简介
- 若都没有则给出简洁兜底文案
可附带展示封面,但封面不是必填验收项。
3.4 点击行为
点击列表项后:
- 调用后端恢复接口
- 将所选存档切换为当前活动快照
- 直接进入游戏继续游玩
前端不允许自行拼装恢复上下文。
3.5 空状态
已登录但无存档
- 展示轻量空态
- 引导去首页开始游玩
未登录
- 展示登录态空壳
- 不请求受保护的云端存档列表接口
4. 默认进入逻辑
当满足以下条件时,玩家进入网站后的平台首页默认进入“存档”Tab:
- 当前处于登录状态
- 当前账号至少存在一个存档
否则:
- 仍默认进入“首页”Tab
注意:
- 这个默认进入逻辑只在平台首屏初始化时执行,不能覆盖用户手动切换后的选择。
- 若平台首页的公开作品、个人数据、存档列表仍在异步加载中,用户已经手动切到“创作 / 存档 / 我的”时,请求完成后也不能把当前 Tab 回刷成默认 Tab。
5. 后端设计
5.1 新增数据表
建议新增 profile_save_archives:
user_idworld_keyowner_user_idprofile_idworld_typeworld_nameworld_subtitlesummary_textcover_image_srcsaved_atbottom_tabgame_state_jsoncurrent_story_jsonupdated_at
约束:
- 主键:
user_id + world_key - 排序索引:
user_id + saved_at desc
5.2 写入规则
每次 /api/runtime/save/snapshot 成功写入后:
- 正常更新当前活动快照
- 同步 upsert 对应
world_key的存档归档 - 继续保留原有个人看板 / 已玩作品同步逻辑
5.3 列表接口
GET /api/runtime/profile/save-archives
返回:
- 当前账号全部最近存档
字段至少包含:
worldKeyworldNameworldSubtitlesummaryTextcoverImageSrclastPlayedAtworldTypeprofileIdownerUserId
5.4 恢复接口
POST /api/runtime/profile/save-archives/:worldKey/resume
用途:
- 将指定存档归档恢复为当前活动快照
- 返回恢复后的快照
限制:
- 恢复动作不能重复记账,不得再次累计个人资产流水
- 恢复动作不能重复累计已玩时长
- 恢复动作不能破坏现有快照水合逻辑
6. 前端实现要求
PlatformHomeView新增存档主 Tab。PreGameSelectionFlow在平台数据加载时同时拉取存档列表。- 已登录且有存档时,平台首屏默认选中
存档Tab。 - “我的”页删除“最近游玩 / 历史浏览”两个区块。
- 点击存档列表项时必须经过后端恢复接口,恢复成功后直接进入游戏。
- 移动端优先,列表项点击区域不能过小。
7. 验收标准
- 已登录账号可以在“存档”Tab 看到所有已玩过世界的最近存档。
- 列表按最近更新时间倒序。
- 列表项可看到游戏名称、最后游玩时间和游戏信息。
- 点击列表项后可直接继续对应游戏。
- 已登录且至少有一个存档时,进入网站默认打开“存档”Tab。
- 未登录时不请求云端存档列表,也不会出现受保护接口报错。