29 lines
1.7 KiB
Markdown
29 lines
1.7 KiB
Markdown
# 主页 UI 显示逻辑
|
||
|
||
依赖接口:`GET /v1/user/common_info` 返回的 `data.surge`(JSON 字符串)解析为 extConfig,结构见 [extConfig.md](extConfig.md)。
|
||
|
||
## extConfig 与顶部分类栏
|
||
|
||
- **need_wait**(是否展示 Video 菜单)
|
||
- 解析自 `surge.need_wait`,写入 `UserState.needShowVideoMenu`。
|
||
- **仅 need_wait === true**:展示顶部分类栏(对应 Pencil 设计中的 tabRow,节点 bK6o6),行为见下。
|
||
- **其他情况**(need_wait === false、未下发或未解析):不展示顶部分类栏,列表只展示 **extConfig.items** 的图片列表。
|
||
|
||
## need_wait === true 时的分类与列表
|
||
|
||
1. **分类栏**
|
||
使用图转视频分类接口数据,在分类列表**末尾**增加一个固定分类「pets」。
|
||
2. **列表内容**
|
||
- 选中**固定分类 pets**:列表展示 **extConfig.items** 的图片列表(不请求视频任务接口)。
|
||
- 选中**其他分类**:按原逻辑请求对应分类的视频任务接口,列表展示接口返回的视频任务。
|
||
|
||
## 数据流简述
|
||
|
||
1. 登录后请求 `common_info`,在 `AuthService._saveCommonInfoToState` 中解析 `data.surge`:
|
||
- 写入 `enable_third_party_payment` 等;
|
||
- 解析 `need_wait`、`items`,通过 `UserState.setExtConfig(needShowVideoMenuValue: needWait, items: items)` 写入。
|
||
2. 主页 `HomeScreen` 监听 `UserState.needShowVideoMenu`、`UserState.extConfigItems`,据此决定:
|
||
- 是否渲染顶部分类栏;
|
||
- 当前列表是来自 extConfig.items 还是来自视频任务接口。
|
||
3. extConfig 的 **items** 单项字段:`image`、`cost`、`title`、`detail`,用于展示卡片并作为生图参数(taskType / ext)。
|