From 224d7a8be0f709d91609f873af4446535a98a664 Mon Sep 17 00:00:00 2001 From: Jason Date: Sun, 24 Aug 2025 23:04:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Tauri=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E5=AF=BC=E8=87=B4=E7=9A=84=E9=85=8D=E7=BD=AE=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E4=B8=8E=E6=B8=B2=E6=9F=93=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 前端:始终绑定 ,避免环境判断失误造成白屏 - 后端: 仅初始化一次,并通过 注入,避免双实例不一致 - 配置: 兼容 回退,提高旧配置兼容性 - 结果:主页面数据正常加载,底部配置路径组件恢复显示 --- src-tauri/src/config.rs | 10 ++++++++-- src-tauri/src/lib.rs | 8 +++++--- src/lib/tauri-api.ts | 13 ++++--------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src-tauri/src/config.rs b/src-tauri/src/config.rs index 966e8cf..d6d8ac6 100644 --- a/src-tauri/src/config.rs +++ b/src-tauri/src/config.rs @@ -12,7 +12,13 @@ pub fn get_claude_config_dir() -> PathBuf { /// 获取 Claude Code 主配置文件路径 pub fn get_claude_settings_path() -> PathBuf { - get_claude_config_dir().join("settings.json") + let dir = get_claude_config_dir(); + let settings = dir.join("settings.json"); + if settings.exists() { + return settings; + } + // 兼容旧版命名:claude.json + dir.join("claude.json") } /// 获取应用配置目录路径 (~/.cc-switch) @@ -133,4 +139,4 @@ pub fn import_current_config_as_default() -> Result { log::info!("已导入当前配置为默认供应商"); Ok(settings_config) -} \ No newline at end of file +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 96f9a3d..1030c49 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -4,6 +4,7 @@ mod store; mod commands; use store::AppState; +use tauri::Manager; #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { @@ -18,7 +19,7 @@ pub fn run() { )?; } - // 初始化应用状态 + // 初始化应用状态(仅创建一次,并在本函数末尾注入 manage) let app_state = AppState::new(); // 如果没有供应商且存在 Claude Code 配置,自动导入 @@ -51,9 +52,10 @@ pub fn run() { } } + // 将同一个实例注入到全局状态,避免重复创建导致的不一致 + app.manage(app_state); Ok(()) }) - .manage(AppState::new()) .invoke_handler(tauri::generate_handler![ commands::get_providers, commands::get_current_provider, @@ -69,4 +71,4 @@ pub fn run() { ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); -} \ No newline at end of file +} diff --git a/src/lib/tauri-api.ts b/src/lib/tauri-api.ts index cbc5da6..4cafc86 100644 --- a/src/lib/tauri-api.ts +++ b/src/lib/tauri-api.ts @@ -144,15 +144,10 @@ export const tauriAPI = { // 创建全局 API 对象,兼容现有代码 if (typeof window !== 'undefined') { - // 检测是否在 Tauri 环境中 - const isTauri = '__TAURI__' in window; - - if (isTauri) { - // 在 Tauri 环境中,将 API 绑定到 window.electronAPI - // 保持代码兼容性,无需修改组件代码 - (window as any).electronAPI = tauriAPI; - } - + // 始终绑定到 window.electronAPI,以避免环境判断失误导致未绑定而报错 + // API 内部已做 try/catch,非 Tauri 环境下也会安全返回默认值 + (window as any).electronAPI = tauriAPI; + // 提供平台信息 (window as any).platform = { isMac: navigator.platform.toLowerCase().includes('mac')