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; -}