From 8e3f0b892079ef24be3b9cbd26777c9344684599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Wed, 7 Oct 2026 14:13:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=A0=A1=E9=AA=8C=E6=94=B9?= =?UTF-8?q?=E7=94=A8=E8=90=BD=E7=9B=98=E5=90=8E=E7=9A=84=E6=9D=83=E5=A8=81?= =?UTF-8?q?=E8=A1=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - packageAll 的本地校验改用 effectiveFormRef.current ?? form,避免 refresh/flush 后仍用陈旧闭包放行盘上的非法值 --- .../project-development/export/state/useTaonierExport.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/ai-game-creator-shell/src/view/project-development/export/state/useTaonierExport.ts b/apps/ai-game-creator-shell/src/view/project-development/export/state/useTaonierExport.ts index 92cc2bd95..350463b1c 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/export/state/useTaonierExport.ts +++ b/apps/ai-game-creator-shell/src/view/project-development/export/state/useTaonierExport.ts @@ -827,8 +827,11 @@ export function useTaonierExport({ // 没解决的冲突 / 字段红字:盘上的内容和用户看到的不一致,先别打包。 if (conflict || fieldErrors.length > 0) return false; // 盘上的表单要能过本地校验:校验不过时留在表单上,不跑构建(对齐「校验不过不触宿主」)。 - if (form && validateTaonierForm(form).length > 0) { - setFieldErrors(validateTaonierForm(form)); + // `form` 是 render 闭包快照,前面的 `refresh()`/flush 可能已把更权威的落盘表单写进 + // `effectiveFormRef`;这里必须校验真正落定的那份,否则会放行盘上的非法值。 + const effectiveForm = effectiveFormRef.current ?? form; + if (effectiveForm && validateTaonierForm(effectiveForm).length > 0) { + setFieldErrors(validateTaonierForm(effectiveForm)); setDirty(false); return false; }