diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/useUiEditorPage.ts b/apps/ai-game-creator-shell/src/view/ui-editor/useUiEditorPage.ts index 6a7eefab2..2263bedc6 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/useUiEditorPage.ts +++ b/apps/ai-game-creator-shell/src/view/ui-editor/useUiEditorPage.ts @@ -258,6 +258,17 @@ export function useUiEditorSession( const [completionNotice, setCompletionNotice] = useState(null); + function reportWorkflowCompletion( + step: UiEditorStepId, + outcome: WorkflowCompletionNotice['outcome'], + rawMessage: string, + setStatus: (message: string) => void, + ) { + const message = appendWorkflowCheckPrompt(rawMessage); + setStatus(message); + setCompletionNotice({ step, outcome, message }); + } + useEffect(() => { setActiveStep(initialStep); setFurthestStepIndex(normalizedInitialFurthestStepIndex); @@ -974,26 +985,20 @@ export function useUiEditorSession( ); editor.replaceState(applyUiDesignSuggestions(snapshot, suggestions)); setHasSuggested(true); - const message = appendWorkflowCheckPrompt( + reportWorkflowCompletion( + 'reference-analysis', + 'success', `参考图分析完成:已应用 ${suggestions.length} 条参考图语义建议`, + setSuggestionStatus, ); - setSuggestionStatus(message); - setCompletionNotice({ - step: 'reference-analysis', - outcome: 'success', - message, - }); }); } catch (cause) { - const message = appendWorkflowCheckPrompt( + reportWorkflowCompletion( + 'reference-analysis', + 'failure', cause instanceof Error ? cause.message : String(cause), + setSuggestionStatus, ); - setSuggestionStatus(message); - setCompletionNotice({ - step: 'reference-analysis', - outcome: 'failure', - message, - }); } finally { setIsSuggesting(false); } @@ -1018,26 +1023,20 @@ export function useUiEditorSession( nextState.ui_trees, 'layout_status', ); - const message = appendWorkflowCheckPrompt( + reportWorkflowCompletion( + 'structure-recognition', + 'success', `界面结构识别完成:已替换 ${result.ui_trees.length} 棵界面树,待检查 ${overview.needsAttention} 项(必须修复 ${overview.blocked} 项)`, + setRecognitionStatus, ); - setRecognitionStatus(message); - setCompletionNotice({ - step: 'structure-recognition', - outcome: 'success', - message, - }); }); } catch (cause) { - const message = appendWorkflowCheckPrompt( + reportWorkflowCompletion( + 'structure-recognition', + 'failure', cause instanceof Error ? cause.message : String(cause), + setRecognitionStatus, ); - setRecognitionStatus(message); - setCompletionNotice({ - step: 'structure-recognition', - outcome: 'failure', - message, - }); } finally { setIsRecognizing(false); } @@ -1092,27 +1091,21 @@ export function useUiEditorSession( history: index < batches.length - 1 ? 'skip' : 'record', }); } - const message = appendWorkflowCheckPrompt( + reportWorkflowCompletion( + 'visual-binding', + 'success', `视觉素材绑定完成:已处理 ${batches.length}/${batches.length} 个批次`, + setBindingStatus, ); - setBindingStatus(message); setHasBound(true); - setCompletionNotice({ - step: 'visual-binding', - outcome: 'success', - message, - }); }); } catch (cause) { - const message = appendWorkflowCheckPrompt( + reportWorkflowCompletion( + 'visual-binding', + 'failure', cause instanceof Error ? cause.message : String(cause), + setBindingStatus, ); - setBindingStatus(message); - setCompletionNotice({ - step: 'visual-binding', - outcome: 'failure', - message, - }); } finally { setIsBinding(false); }