From f8ed4e898f3d8d751ae09f75ecbd32f281d72879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 5 Oct 2026 17:22:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=AF=B9=E8=AF=9D=E6=A1=86?= =?UTF-8?q?=E7=9A=84=E9=BB=98=E8=AE=A4=E6=96=87=E4=BB=B6=E5=90=8D=E6=94=B6?= =?UTF-8?q?=E8=BF=9B=E4=B8=8B=E8=BD=BD=E5=8A=A9=E6=89=8B=EF=BC=8C=E5=A4=8D?= =?UTF-8?q?=E7=94=A8=E6=97=A2=E6=9C=89=E5=8F=96=E6=96=87=E4=BB=B6=E5=90=8D?= =?UTF-8?q?=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - xhsMinitoolDownload 自己从 relativePath 取最后一段当默认文件名(取不到才用调用方给的兜底名),参数名随之改为 fallbackFileName;/ 与 \ 两种分隔符统一交给既有的 resourceFileNameFromPath,不再在面板里写第二份取文件名实现。 - ArtifactsPane 只传兜底名,不再自己拼默认文件名,视图层也就不必跨到 features/resource-canvas 去 import。 --- .../export/state/xhsMinitoolDownload.ts | 10 +++++++--- .../export/tabs/xiaohongshu/ArtifactsPane.tsx | 12 ++---------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/apps/ai-game-creator-shell/src/view/project-development/export/state/xhsMinitoolDownload.ts b/apps/ai-game-creator-shell/src/view/project-development/export/state/xhsMinitoolDownload.ts index f91bbc09b..6ae5552db 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/export/state/xhsMinitoolDownload.ts +++ b/apps/ai-game-creator-shell/src/view/project-development/export/state/xhsMinitoolDownload.ts @@ -7,14 +7,15 @@ import { save as saveNativeFileDialog } from '@tauri-apps/plugin-dialog'; import { resolveTauriInvoke } from '../../../../app/tauri'; +import { resourceFileNameFromPath } from '../../../../features/resource-canvas/resourceCanvasAssetTransferModel'; /** 返回给用户看的一句话;用户取消对话框时返回空串(不打扰)。 */ export async function saveXhsMinitoolFileToDisk(input: { projectPath: string; /** 项目内相对路径,交给宿主的既有门禁复核。 */ relativePath: string; - /** 对话框里的默认文件名。 */ - defaultFileName: string; + /** 路径里取不出文件名时用的兜底名。 */ + fallbackFileName: string; title: string; }): Promise { const invoke = resolveTauriInvoke(); @@ -22,7 +23,10 @@ export async function saveXhsMinitoolFileToDisk(input: { let destination: string | null = null; try { destination = await saveNativeFileDialog({ - defaultPath: input.defaultFileName, + // 默认文件名取路径最后一段(`/` 与 `\` 都认),取不到就用调用方给的兜底名。 + defaultPath: + resourceFileNameFromPath(input.relativePath.trim()) || + input.fallbackFileName, title: input.title, }); } catch (error) { diff --git a/apps/ai-game-creator-shell/src/view/project-development/export/tabs/xiaohongshu/ArtifactsPane.tsx b/apps/ai-game-creator-shell/src/view/project-development/export/tabs/xiaohongshu/ArtifactsPane.tsx index 1cd649d8a..f60c33062 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/export/tabs/xiaohongshu/ArtifactsPane.tsx +++ b/apps/ai-game-creator-shell/src/view/project-development/export/tabs/xiaohongshu/ArtifactsPane.tsx @@ -34,7 +34,7 @@ export function ArtifactsPane({ void saveXhsMinitoolFileToDisk({ projectPath, relativePath: form.iconPath.trim(), - defaultFileName: fileNameOf(form.iconPath, 'icon.png'), + fallbackFileName: 'icon.png', title: '保存 icon 文件', }).then(setDownloadNotice); }; @@ -44,10 +44,7 @@ export function ArtifactsPane({ void saveXhsMinitoolFileToDisk({ projectPath, relativePath: XHS_MINITOOL_ARTIFACT_RELATIVE_PATH, - defaultFileName: fileNameOf( - XHS_MINITOOL_ARTIFACT_RELATIVE_PATH, - 'xhs-minitool.zip', - ), + fallbackFileName: 'xhs-minitool.zip', title: '保存代码 zip', }).then(setDownloadNotice); }; @@ -162,8 +159,3 @@ function saveHint(minitool: XhsMinitoolExportState): string { if (minitool.dirty) return '改动会在停手后自动保存'; return ''; } - -function fileNameOf(relativePath: string, fallback: string): string { - const name = relativePath.trim().split('/').pop(); - return name ? name : fallback; -}