From 1bbecfd87b3bc17a845b2c4e1644126b5b893f51 Mon Sep 17 00:00:00 2001 From: Linghong Date: Fri, 28 Aug 2026 02:30:03 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DGDD=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9C=9F=E9=97=B4=E6=8F=90=E4=BA=A4=E7=AB=9E?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 审批按钮在 hydrate 期间统一禁用 修改和退回弹窗提交复用同一忙碌状态门禁 提交处理函数同步阻止过期 pending 决定 --- .../features/project-workspace/GddApprovalCard.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/ai-game-creator-shell/src/features/project-workspace/GddApprovalCard.tsx b/apps/ai-game-creator-shell/src/features/project-workspace/GddApprovalCard.tsx index 4b3541bd2..628f6f517 100644 --- a/apps/ai-game-creator-shell/src/features/project-workspace/GddApprovalCard.tsx +++ b/apps/ai-game-creator-shell/src/features/project-workspace/GddApprovalCard.tsx @@ -376,12 +376,13 @@ export function GddApprovalCard({ const canDecide = Boolean( pending && state.state === 'ready_for_approval' && !state.recoveryPending, ); + const decisionDisabled = !canDecide || decisionBusy || hydrateBusy; const submitComment = () => { // 方案 §18.2:`recoveryPending` 期间只允许重试同一 ID,不允许提交决定。触发按钮 // 已经由 `canDecide` 门住,但弹层是打开后才可能被后台 hydrate 翻掉资格的, // 所以提交口要自己再判一次,不能只靠按钮 disabled。 - if (!canDecide || !commentAction || !comment.trim()) { + if (decisionDisabled || !commentAction || !comment.trim()) { return; } void onDecision(commentAction, comment.trim()) @@ -438,7 +439,7 @@ export function GddApprovalCard({