Files
Genarrative/docs/technical/【前端架构】UI编辑会话模块边界-2026-08-19.md
k88936 f5f94111ca
Project CI / Native shell tests (push) Successful in 20m12s
Project CI / Repository checks (push) Successful in 2m42s
Project CI / Frontend tests (push) Successful in 3m39s
Project CI / Backend tests (push) Successful in 7m18s
Project CI / Backend tests (pull_request) Failing after 9s
Project CI / Repository checks (pull_request) Failing after 9s
Project CI / Native shell tests (pull_request) Failing after 32m52s
Project CI / Frontend tests (pull_request) Failing after 44m27s
Feat/图片绑定选择器改用带预览的模态框 (#269)
before:
![image.png](/attachments/5ae7df1f-cf57-4712-8038-f65ae83e2ffa)

after:
![shotmd-1788417438.jpg](/attachments/676e653d-2561-4eca-b28f-9725d3b8af02)

close #268

---------

Co-authored-by: 段舒康 <kdletters@qq.com>
Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/269
Co-authored-by: 王德宇 <kvtodev@outlook.com>
Co-committed-by: 王德宇 <kvtodev@outlook.com>
2026-09-03 20:02:48 +08:00

2.0 KiB

UI 编辑会话模块边界

更新时间:2026-08-19

apps/ai-game-creator-shell 的 UI 编辑器以 useUiEditorSession 作为视图与 adapter 的唯一协调边界。会话持有资源加载、revision、预览请求、选择、节点可见性、步骤 gate、异步操作和保存意图;UiDesignStateStore 与 Tauri 调用仍由该模块注入,不进入视图组件。

页面与子视图不得再传递完整 controller。它们按职责读取以下小 projection:

  • input:资源输入、节点树及调试操作。
  • canvas:当前画布、选择、聚焦与节点变换。
  • inspector:当前检查对象及其编辑动作。
  • workflow:步骤 gate 与正式 AI 操作生命周期。
  • dialogs:导入、清空和删除确认。
  • save:加载 / revision 状态、脏状态、保存警告和保存意图。

预览树在会话边界归一化为 UITree | null:尚未选择界面图、正在加载或尚未识别树时均以 null 表示,不能把 Array.findundefined 传播到视图接口。

素材缩略图的加载失败状态按“素材 ID + 预览 URL”记录;同一 URL 失败后显示占位图,资源重新加载或重新导入产生新 URL 时必须允许再次尝试,不能把失败永久绑定到素材 ID。

保存与代码生成共享同一份持久化 State/revision。会话层在保存或生成进行期间互斥拦截,且代码生成必须基于已加载的持久化 revision;视图层的保存按钮和“保存并返回”按钮同步遵守该互斥状态。

UiDesignStateStoregenerateCode(assetId) 是必需能力,返回成功结果时不得为 nullable;所有注入的 adapter 与测试替身都必须实现该方法。

资源切换时,会话必须清理上一资源的保存/生成错误和生成中状态;普通保存开始时也清理代码生成错误。生成请求若因加载、锁定或 revision 等前置条件被拦截,必须向视图提供可见错误,而不是静默返回。