From a71fdf0180bf20829c729ffcc920f8eea94c6487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 18 Aug 2026 17:27:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=80=9A=E7=94=A8=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=99=A8=E6=A0=B9=E7=9B=AE=E5=BD=95=E4=B8=8E=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 统一文件管理器根路径并修复导入标题图标布局 修复 Tauri 导入请求字段映射并覆盖 camelCase 反序列化 --- .../src-tauri/src/commands.rs | 35 ++++++++++++++++--- .../src/components/AssetImporter/index.tsx | 5 +-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/commands.rs b/apps/ai-game-creator-shell/src-tauri/src/commands.rs index 85115930e..a4aa7e7e0 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/commands.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/commands.rs @@ -7,7 +7,7 @@ const UI_EDITOR_FONT_MAX_COUNT: usize = 64; #[derive(Clone, Debug, Deserialize)] #[serde(rename_all = "camelCase")] -struct AssetImportRequirements { +pub(crate) struct AssetImportRequirements { max_items: usize, max_file_size_bytes: Option, max_total_size_bytes: Option, @@ -15,15 +15,19 @@ struct AssetImportRequirements { #[derive(Clone, Debug, Deserialize)] #[serde(rename_all = "camelCase")] -struct AssetImportPolicy { +pub(crate) struct AssetImportPolicy { destination: String, accepted_media_types: Vec, accepted_extensions: Vec, } #[derive(Debug, Deserialize)] -#[serde(tag = "source", rename_all = "camelCase")] -pub enum UiEditorAssetImportRequest { +#[serde( + tag = "source", + rename_all = "camelCase", + rename_all_fields = "camelCase" +)] +pub(crate) enum UiEditorAssetImportRequest { Local { project_path: String, local_source_paths: Vec, @@ -38,6 +42,29 @@ pub enum UiEditorAssetImportRequest { }, } +#[cfg(test)] +mod ui_editor_asset_import_request_tests { + use super::UiEditorAssetImportRequest; + + #[test] + fn local_request_accepts_tauri_camel_case_fields() { + let request = serde_json::from_value::(serde_json::json!({ + "source": "local", + "projectPath": "/project", + "localSourcePaths": ["/source/font.ttf"], + "localPolicy": { + "destination": "assets/fonts", + "acceptedMediaTypes": ["font/ttf"], + "acceptedExtensions": ["ttf"] + }, + "localRequirements": { "maxItems": 64 } + })) + .expect("deserialize local import request"); + + assert!(matches!(request, UiEditorAssetImportRequest::Local { .. })); + } +} + fn validate_asset_import_policy(policy: &AssetImportPolicy) -> Result { let normalized_destination = policy.destination.trim(); let is_font = normalized_destination == "assets/fonts"; diff --git a/apps/ai-game-creator-shell/src/components/AssetImporter/index.tsx b/apps/ai-game-creator-shell/src/components/AssetImporter/index.tsx index 9b6493369..8e560bc7b 100644 --- a/apps/ai-game-creator-shell/src/components/AssetImporter/index.tsx +++ b/apps/ai-game-creator-shell/src/components/AssetImporter/index.tsx @@ -38,7 +38,7 @@ export type { RemoteAssetCandidate, } from './utils'; -const ROOT_PATH = '/'; +const ROOT_PATH = ''; export type AssetImporterProps = { open: boolean; @@ -387,7 +387,7 @@ export function AssetImporter({ panelClassName="flex h-[min(760px,92dvh)] w-[min(1100px,96vw)] min-w-0 flex-col overflow-hidden rounded-2xl shadow-2xl" >
-

+

{settings.icon} {settings.title}

@@ -412,6 +412,7 @@ export function AssetImporter({ ) : null}