From 3061762aaa94fe6553fe4d1749488705d9d185e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 6 Oct 2026 18:52:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E8=A1=A8=E5=8D=95=E6=8D=A2?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=97=B6=E4=B8=80=E5=B9=B6=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E5=B0=81=E9=9D=A2=E4=B8=8E=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - useGameDistributionPublishForm 的重置 effect 现在清空 cover / screenshots / 上传缓存,并回收已登记的预览 blob 地址 - 抽出 revokeTrackedObjectUrls 供重置与卸载共用 --- .../useGameDistributionPublishForm.ts | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/apps/ai-game-creator-shell/src/components/game-distribution/useGameDistributionPublishForm.ts b/apps/ai-game-creator-shell/src/components/game-distribution/useGameDistributionPublishForm.ts index 2723cfc0c..2347ff221 100644 --- a/apps/ai-game-creator-shell/src/components/game-distribution/useGameDistributionPublishForm.ts +++ b/apps/ai-game-creator-shell/src/components/game-distribution/useGameDistributionPublishForm.ts @@ -86,6 +86,18 @@ const COVER_GENERATION_MODEL = IMAGE_MODEL_GPT_IMAGE_2; const COVER_GENERATION_ASPECT_RATIO = '16:9'; const COVER_GENERATION_IMAGE_SIZE = '2K'; +/** 释放一组已登记的预览 blob 地址;重置与卸载共用,避免两处各写一遍。 */ +function revokeTrackedObjectUrls(objectUrls: Set) { + objectUrls.forEach((url) => { + try { + URL.revokeObjectURL(url); + } catch { + // 预览地址释放失败不影响重置 / 卸载。 + } + }); + objectUrls.clear(); +} + function buildPublishProjectContext(manifest: GameCreationAppManifest) { const taskSummary = (manifest.tasks ?? []) .slice(0, 16) @@ -224,7 +236,13 @@ export function useGameDistributionPublishForm({ setGeneratingCover(false); setCoverGenerationPrice(null); setCoverGenerationDetail(''); + // 表单在换项目时重来,封面与截图也必须跟着清:素材是「项目 A 的公开展示物料」, + // 留着会被当成项目 B 的封面 / 截图提交。缓存与预览地址一并回收。 + setCover(null); + setScreenshots([]); setPreviewScreenshot(null); + uploadedAssetCacheRef.current.clear(); + revokeTrackedObjectUrls(objectUrlsRef.current); summaryTouchedRef.current = false; categoryTouchedRef.current = false; @@ -282,14 +300,7 @@ export function useGameDistributionPublishForm({ useEffect(() => { const objectUrls = objectUrlsRef.current; return () => { - objectUrls.forEach((url) => { - try { - URL.revokeObjectURL(url); - } catch { - // 预览地址释放失败不影响关闭面板。 - } - }); - objectUrls.clear(); + revokeTrackedObjectUrls(objectUrls); }; }, []);