270 lines
7.2 KiB
Markdown
270 lines
7.2 KiB
Markdown
# 平台“存档”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. 未登录时不请求云端存档列表,也不会出现受保护接口报错。
|