From 880ed529eb934524d8f9fdc42cecb04ebbf0002d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 27 Jul 2026 16:37:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E5=8D=95=E9=80=89=E7=B4=A0?= =?UTF-8?q?=E6=9D=90=E5=AF=BC=E5=87=BA=E6=88=90=E5=8A=9F=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 让单素材导出返回浏览器下载是否已触发 仅在选中素材下载成功后展示成功状态 新增单选下载成功提示断言 --- .../useImageCanvasAssetExportWorkflow.test.tsx | 3 +++ .../useImageCanvasAssetExportWorkflow.ts | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/components/image-editor/useImageCanvasAssetExportWorkflow.test.tsx b/src/components/image-editor/useImageCanvasAssetExportWorkflow.test.tsx index 8641b149b..14284f82b 100644 --- a/src/components/image-editor/useImageCanvasAssetExportWorkflow.test.tsx +++ b/src/components/image-editor/useImageCanvasAssetExportWorkflow.test.tsx @@ -154,6 +154,9 @@ describe('useImageCanvasAssetExportWorkflow', () => { fireEvent.click(screen.getByRole('button', { name: '下载一个选中素材' })); await waitFor(() => expect(downloads).toHaveLength(1)); expect(downloads[0]?.name).toMatch(/^素材A-\d{8}-\d{6}\.png$/u); + expect(screen.getByTestId('status').textContent).toBe( + 'success:选中素材已导出', + ); fireEvent.click(screen.getByRole('button', { name: '下载多个选中素材' })); await waitFor(() => expect(downloads).toHaveLength(2)); diff --git a/src/components/image-editor/useImageCanvasAssetExportWorkflow.ts b/src/components/image-editor/useImageCanvasAssetExportWorkflow.ts index db7d1221c..7c15dbf35 100644 --- a/src/components/image-editor/useImageCanvasAssetExportWorkflow.ts +++ b/src/components/image-editor/useImageCanvasAssetExportWorkflow.ts @@ -282,7 +282,7 @@ export function useImageCanvasAssetExportWorkflow({ ) => { const exportMode = options.mode ?? 'spine-json'; if (!layer) { - return; + return false; } if (layer.mediaType === 'image-sequence') { try { @@ -300,13 +300,14 @@ export function useImageCanvasAssetExportWorkflow({ message: '当前浏览器不支持素材下载', }); } + return downloaded; } catch { setAssetExportStatus({ tone: 'error', message: '序列帧导出失败', }); + return false; } - return; } try { @@ -326,11 +327,13 @@ export function useImageCanvasAssetExportWorkflow({ message: '当前浏览器不支持素材下载', }); } + return downloaded; } catch { setAssetExportStatus({ tone: 'error', message: '素材导出失败', }); + return false; } }, [], @@ -649,7 +652,15 @@ export function useImageCanvasAssetExportWorkflow({ setIsExportingAssets(true); setAssetExportStatus(null); try { - await exportLayerImage(exportableLayers[0] ?? null); + const downloaded = await exportLayerImage( + exportableLayers[0] ?? null, + ); + if (downloaded) { + setAssetExportStatus({ + tone: 'success', + message: '选中素材已导出', + }); + } } finally { isExportingAssetsRef.current = false; setIsExportingAssets(false);