Add VectorEngine image generation config and raise request timeouts (env + scripts) from 180000 to 1000000ms. Introduce a reusable CreativeImageInputPanel component with tests and wire up mobile keyboard-focus helpers; update generation views and related tests (CustomWorldGenerationView, BarkBattle editor, Match3D, Puzzle flows). Improve API error handling / VectorEngine request guidance (packages/shared http.ts and docs), and apply multiple backend/frontend fixes for puzzle/match3d/prompt handling. Also include extensive docs and decision-log updates describing UI/UX decisions and verification steps.
59 lines
3.9 KiB
Markdown
59 lines
3.9 KiB
Markdown
# 作品货架统一 2026-04-25
|
||
|
||
## 背景
|
||
|
||
创作中心目前已经把 RPG、大鱼吃小鱼、拼图三类作品展示在同一个网格里,但前端组件仍直接消费三类原始 works:
|
||
|
||
1. RPG 使用 `status`、`title`、`subtitle`、`canEnterWorld`。
|
||
2. 大鱼使用 `status`、`title`、资源完成度字段。
|
||
3. 拼图使用 `publicationStatus`、`levelName`、`authorDisplayName`、`themeTags`。
|
||
|
||
这导致筛选、计数、按钮文案、卡片标题、副标题、标签、删除忙碌态都在 UI 组件里做三套判断。后续再接新作品类型时,货架组件会继续膨胀。
|
||
|
||
## 目标
|
||
|
||
1. 新增前端统一作品货架视图模型 `CreationWorkShelfItem`。
|
||
2. 由归一化函数把 RPG / Big Fish / Puzzle works 映射成统一字段。
|
||
3. `CustomWorldCreationHub` 只负责筛选、空态和动作分发。
|
||
4. `CustomWorldWorkCard` 只负责渲染统一字段,不再理解三类原始 schema。
|
||
|
||
## 非目标
|
||
|
||
1. 本轮不新增后端统一 works 聚合接口。
|
||
2. 不改变三类现有 works API contract。
|
||
3. 不改变平台首页公开广场的 gallery 合并逻辑。
|
||
4. 不改变删除、体验、恢复草稿的业务规则。
|
||
|
||
## 统一字段
|
||
|
||
`CreationWorkShelfItem` 至少包含:
|
||
|
||
1. `id`:稳定货架 id。
|
||
2. `kind`:`rpg | big-fish | puzzle`。
|
||
3. `status`:`draft | published`。
|
||
4. `title / subtitle / summary / updatedAt`。
|
||
5. `coverImageSrc / coverRenderMode / coverCharacterImageSrcs`。
|
||
6. `badges`:状态、类型、阶段、标签等展示徽标。
|
||
7. `metrics`:角色数、地点数、素材完成度、游玩数等底部指标。
|
||
8. `openActionLabel`:卡片无障碍文案与主动作语义。
|
||
9. `source`:保留原始 work,用于平台壳层执行动作。
|
||
|
||
## 验收
|
||
|
||
1. 创作中心三类作品仍在同一个网格展示。
|
||
2. 草稿 / 已发布筛选计数统一从 `CreationWorkShelfItem.status` 读取。
|
||
3. 卡片渲染不再直接判断 `publicationStatus` 或不同 works schema 的标题字段。
|
||
4. 统一货架按 `updatedAt` 倒序排序,兼容 ISO 字符串和 `seconds.microsZ` 后端时间文本。
|
||
5. 作品卡片以 `coverImageSrc` 作为整卡背景;若 `coverImageSrc` 为空,允许从同一作品已有的关卡图、背景图或素材图兜底,避免草稿页退回普通面板视觉。
|
||
6. 卡片不展示最后修改时间,`updatedAt` 只参与排序。
|
||
7. 现有创作中心交互测试通过。
|
||
|
||
## 2026-05-14 封面兜底补充
|
||
|
||
1. 货架视图模型仍只保存作品真实 `coverImageSrc` 或同作品真实素材兜底,不把玩法参考图写进数据模型,避免把 UI 兜底误认为作品资产。
|
||
2. `CustomWorldWorkCard` 按 `CreationWorkShelfKind` 为 `CustomWorldCoverArtwork` 传入本地玩法参考图;`ResolvedAssetImage` 在私有资源换签失败、普通图片 404 或真实封面缺失时使用该参考图作为卡片背景。
|
||
3. 兜底背景底色跟随百梦浅粉、暖白和珊瑚色调,不能继续使用深黑或暗蓝渐变作为草稿卡默认视觉。
|
||
4. 拼图作品列表摘要必须下发 `levels`,草稿页优先用关卡 `coverImageSrc`,再用选中候选图或最后一张候选图作为真实作品封面兜底。
|
||
5. 抓大鹅作品列表摘要必须保留 `generatedBackgroundAsset` 与 `generatedItemAssets` 中的 `imageObjectKey`、`containerImageObjectKey` 和 `imageViews[].imageObjectKey`;前端拿到 object key 后统一交给 `ResolvedAssetImage` 换签,不能因为缺少公开 URL 而退回黑卡。
|
||
6. `coverImageSrc` 若指向 `/creation-type-references/*`,只能视为玩法参考图兜底,不能当作作品真实封面。草稿页遇到这类值时必须继续向下解析同作品真实素材:拼图优先第一关正式图,再取选中候选图或最后一张候选图;抓大鹅优先 UI 背景图 `backgroundImageSrc/backgroundImageObjectKey/generatedBackgroundAsset.image*`,再取容器图,最后才取物品视角图或物品主图。
|