From 520904a58604e6de50b964179e676623335402fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 3 Sep 2026 14:17:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=B4=A0=E6=9D=90=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E5=A4=B1=E8=B4=A5=E5=90=8E=E7=9A=84=E9=87=8D=E8=AF=95?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按预览 URL 记录失败状态,允许资源重新生成地址后再次加载 补充预览重试回归测试并同步 UI 编辑会话边界文档 --- .../Components/ImageAssetSelector.tsx | 20 +++++----- .../tests/imageAssetSelector.test.tsx | 37 ++++++++++++++++++- ...前端架构】UI编辑会话模块边界-2026-08-19.md | 2 + 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Components/ImageAssetSelector.tsx b/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Components/ImageAssetSelector.tsx index 6ec0e1517..42c15c56f 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Components/ImageAssetSelector.tsx +++ b/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Components/ImageAssetSelector.tsx @@ -18,9 +18,9 @@ export function ImageAssetSelector({ onChange: (value: string | null) => void; }) { const [open, setOpen] = useState(false); - const [failedPreviewIds, setFailedPreviewIds] = useState>( - () => new Set(), - ); + const [failedPreviewUrls, setFailedPreviewUrls] = useState< + Record + >({}); const selectedSprite = value ? sprites[value] : undefined; const selectedLabel = selectedSprite ? selectedSprite.metadata.name || value || '未绑定' @@ -38,12 +38,10 @@ export function ImageAssetSelector({ close(); } - function markPreviewFailed(id: string) { - setFailedPreviewIds((current) => { - if (current.has(id)) return current; - const next = new Set(current); - next.add(id); - return next; + function markPreviewFailed(id: string, url: string) { + setFailedPreviewUrls((current) => { + if (current[id] === url) return current; + return { ...current, [id]: url }; }); } @@ -111,7 +109,7 @@ export function ImageAssetSelector({ {Object.entries(sprites).map(([id, sprite]) => { const previewUrl = previewUrls[id]; const hasPreview = - Boolean(previewUrl) && !failedPreviewIds.has(id); + Boolean(previewUrl) && failedPreviewUrls[id] !== previewUrl; const selected = value === id; return (