diff --git a/apps/ai-game-creator-shell/src/view/project-development/chat/DirectProjectChatView.tsx b/apps/ai-game-creator-shell/src/view/project-development/chat/DirectProjectChatView.tsx index f1c00df6d..94600a01a 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/chat/DirectProjectChatView.tsx +++ b/apps/ai-game-creator-shell/src/view/project-development/chat/DirectProjectChatView.tsx @@ -272,6 +272,7 @@ export function DirectProjectChatView({ pendingTurns={pendingTurns} composerNotice={composerNotice} busy={turnStatus.displayBusy} + canStopTurn={turnStatus.canStopTurn} turnCancelling={turnCancelling} onCancelPendingTurn={(clientTurnId) => void cancelPendingTurn(clientTurnId) diff --git a/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectComposer/DirectProjectComposer.tsx b/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectComposer/DirectProjectComposer.tsx index 97e3ae34d..f151e8344 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectComposer/DirectProjectComposer.tsx +++ b/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectComposer/DirectProjectComposer.tsx @@ -57,6 +57,7 @@ export function DirectProjectComposer({ pendingTurns, composerNotice, busy, + canStopTurn, turnCancelling, onCancelPendingTurn, onCancelTurn, @@ -72,7 +73,15 @@ export function DirectProjectComposer({ attachmentsImporting: boolean; pendingTurns: readonly DirectPendingTurn[]; composerNotice: string; + /** 「界面忙不忙」:三者并集,用来锁住模型 / 附件 / 语音这些与当前这轮冲突的控件。 */ busy: boolean; + /** + * 「现在点终止有没有作用对象」(见 `useDirectProjectTurnStatus` 的 `canStopTurn`)。 + * + * 与 `busy` 分开:队列非空也算忙,但待发消息不属于「终止」——按 `busy` 显示终止钮会得到一个 + * 点了只会报「当前没有正在运行的回合」的按钮。发送钮 / 终止钮只按它换。 + */ + canStopTurn: boolean; turnCancelling: boolean; onCancelPendingTurn: (clientTurnId: string) => void; onCancelTurn: () => void; @@ -159,7 +168,8 @@ export function DirectProjectComposer({ }, [onUploadFiles], ); - // 这个按钮只在非 busy 分支出现(busy 时由 ComposerStopButton 接管),所以不再带忙态逻辑。 + // 这个按钮只在"没有可终止对象"的分支出现(有的话由 ComposerStopButton 接管), + // 所以不再带忙态逻辑:队列里有待发消息时它照样在,用户能继续排。 const submitButton = (