From d707deef4e79edb15e2a771523e052e0ea5153c5 Mon Sep 17 00:00:00 2001 From: suzmii Date: Mon, 24 Aug 2026 13:51:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B5=84=E6=BA=90=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0=E5=90=88=E5=B9=B6=E5=9B=9E=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 恢复 UI 编辑器钱包入口和创建资源语义 恢复资源详情关闭后的滚动位置 更新资源生成入口测试断言 锁定缺失登录时生成失败的公开投影 --- .../src/project/asset_canvas/generation.rs | 6 ++++ .../src/view/project-development/index.tsx | 34 +++++++++++++++---- .../appSurface/project-development.suite.ts | 8 +++-- .../projectResourceLiveIntegration.test.tsx | 2 +- 4 files changed, 39 insertions(+), 11 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/project/asset_canvas/generation.rs b/apps/ai-game-creator-shell/src-tauri/src/project/asset_canvas/generation.rs index 8c8ad923a..ee97bb107 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/project/asset_canvas/generation.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/project/asset_canvas/generation.rs @@ -8803,6 +8803,12 @@ mod tests { let public = serde_json::to_string(&public_draft).expect("serialize failed draft"); assert!(!public.contains(prompt)); assert!(!public.contains(&input.idempotency_key)); + assert!(public_draft + .generations + .iter() + .any(|record| record.generation_id == input.generation_id + && record.phase == AssetCanvasGenerationStatus::Failed + && record.error_code.as_deref() == Some("configuration-missing"))); let ledger = read_generation_ledger(directory.path(), &input.generation_id) .expect("read retryable generation ledger") .expect("missing-login ledger exists"); diff --git a/apps/ai-game-creator-shell/src/view/project-development/index.tsx b/apps/ai-game-creator-shell/src/view/project-development/index.tsx index 4fb7275a3..c8c48d411 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/index.tsx +++ b/apps/ai-game-creator-shell/src/view/project-development/index.tsx @@ -199,6 +199,15 @@ type ResourceEditorRoute = { generationMode: 'create' | 'derive'; }; +function defaultCreatedResourceName( + editKind: ResourceEditorRoute['capability']['editKind'], +) { + if (editKind === 'video') return '新视频'; + if (editKind === 'sound-effect') return '新音效'; + if (editKind === 'background-music') return '新背景音乐'; + return '新资源'; +} + type UiEditorRoute = { resourceId: string; resourceLabel: string; @@ -2002,7 +2011,7 @@ export default function ProjectDevelopmentView({ } function closeOnEscape(event: KeyboardEvent) { if (event.key === 'Escape') { - restoreResourceListScrollRef.current = false; + restoreResourceListScrollRef.current = true; setFocusedResourceId(null); } } @@ -3332,7 +3341,7 @@ export default function ProjectDevelopmentView({ function closeResourceFocus() { advanceFocusGeneration(); - restoreResourceListScrollRef.current = false; + restoreResourceListScrollRef.current = true; setFocusedResourceId(null); } @@ -3516,12 +3525,13 @@ export default function ProjectDevelopmentView({ ) : null} {mode === 'resources' && uiEditorRoute ? ( -
+
setUiEditorRoute(null)} />
@@ -3540,11 +3550,21 @@ export default function ProjectDevelopmentView({ /> ) : mode === 'resources' && resourceEditorRoute ? ( }) => void) | null = null; + | ((event: { payload: Record }) => void) + | null = null; const listen = vi.fn( async ( eventName: string, @@ -10367,7 +10368,8 @@ export function registerProjectAgentStatusTests() { }, ); let runtimeUpdateHandler: - ((event: { payload: Record }) => void) | null = null; + | ((event: { payload: Record }) => void) + | null = null; const listen = vi.fn( async ( eventName: string, diff --git a/apps/ai-game-creator-shell/tests/projectResourceLiveIntegration.test.tsx b/apps/ai-game-creator-shell/tests/projectResourceLiveIntegration.test.tsx index 3feecfd7d..ca2fda672 100644 --- a/apps/ai-game-creator-shell/tests/projectResourceLiveIntegration.test.tsx +++ b/apps/ai-game-creator-shell/tests/projectResourceLiveIntegration.test.tsx @@ -718,7 +718,7 @@ describe('project resource live canvas integration', () => { ); expect(sourceDetails.hasAttribute('aria-modal')).toBe(false); expect(document.querySelector('.game-resource-focus-backdrop')).toBeNull(); - expect(screen.getByRole('button', { name: '新增资源' })).not.toBeNull(); + expect(screen.getByRole('button', { name: '生成视频' })).not.toBeNull(); expect( screen .getByRole('button', { name: '按依赖' })