From 93555d50d8d3cb1a77c275f038158cd3bc9e2b3b Mon Sep 17 00:00:00 2001 From: H-Chris233 Date: Wed, 27 May 2026 18:28:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(overview):=20ASR=20=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=9C=A8=E5=87=AD=E6=8D=AE=E4=BF=9D=E5=AD=98=E5=90=8E=E6=9C=AA?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E4=BB=8D=E6=98=BE=E7=A4=BA=E3=80=8C=E6=9C=AA?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 Settings 中填写/更新 ASR 凭据(如 volcengine 的 APP ID、Access Token) 但不切换提供商时,Overview 页的 useEffect 因 prefs?.activeAsrProvider 不变 不会重跑 refreshCredentials(),导致状态卡在「未配置」。 修复:set_credential 后端命令保存凭据后 emit credentials:changed 事件, Overview 监听该事件刷新凭据状态。 --- openless-all/app/src-tauri/src/commands.rs | 7 +++-- openless-all/app/src/pages/Overview.tsx | 36 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/openless-all/app/src-tauri/src/commands.rs b/openless-all/app/src-tauri/src/commands.rs index 395cbf03..41bf19ba 100644 --- a/openless-all/app/src-tauri/src/commands.rs +++ b/openless-all/app/src-tauri/src/commands.rs @@ -695,10 +695,13 @@ pub fn set_credential(window: Window, account: String, value: String) -> Result< ensure_main_window(&window)?; let acc = parse_account(&account)?; if value.is_empty() { - CredentialsVault::remove(acc).map_err(|e| e.to_string()) + CredentialsVault::remove(acc).map_err(|e| e.to_string())?; } else { - CredentialsVault::set(acc, &value).map_err(|e| e.to_string()) + CredentialsVault::set(acc, &value).map_err(|e| e.to_string())?; } + // 通知前端凭据已变更(如 Overview 页需要刷新 asrConfigured 状态)。 + let _ = window.emit("credentials:changed", ()); + Ok(()) } #[tauri::command] diff --git a/openless-all/app/src/pages/Overview.tsx b/openless-all/app/src/pages/Overview.tsx index ea26b74b..1ac29799 100644 --- a/openless-all/app/src/pages/Overview.tsx +++ b/openless-all/app/src/pages/Overview.tsx @@ -87,6 +87,42 @@ export function Overview({ onOpenHistory }: OverviewProps) { }); }, [refreshHistory]); + // 凭据被保存后重新拉取状态(issue #532:在 Settings 中填写/更新凭据 + // 但不切换提供商时,原有的 useEffect 不会重跑,导致概览页的状态仍停留在「未配置」)。 + useEffect(() => { + let cancelled = false; + let unlisten: (() => void) | undefined; + (async () => { + try { + const { listen } = await import('@tauri-apps/api/event'); + const handle = await listen('credentials:changed', () => { + getCredentials() + .then(status => { + if (cancelled) return; + setCreds(status); + setCredsError(false); + }) + .catch(error => { + if (cancelled) return; + console.error('[overview] failed to load credentials status', error); + setCredsError(true); + }); + }); + if (cancelled) { + handle(); + } else { + unlisten = handle; + } + } catch { + // browser dev mock — 没有 Tauri event bridge + } + })(); + return () => { + cancelled = true; + unlisten?.(); + }; + }, []); + const metrics = useMemo(() => { const today = new Date(); today.setHours(0, 0, 0, 0);