Merge pull request #590 from Open-Less/fix/issue-573-overview-credentials-refresh

fix(overview): 凭据保存后状态不刷新仍显示「未配置」 (#573)
This commit is contained in:
Chris233 authored and GitHub committed 2026-06-04 21:57:46 +08:00
commit 6c17ffe35c
2 files changed
+35 -2

No files matched your search

+7 -2
View File
@@ -783,10 +783,15 @@ 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 状态)。
// issue #532 / #573:在 Settings 填写凭据但不切换提供商时,Overview 不会重拉状态,
// 仍显示「未配置」。该修复曾随 #538 合入 main,但被 beta→main 合并覆盖,beta 上缺失。
let _ = window.emit("credentials:changed", ());
Ok(())
}
#[tauri::command]
+28
View File
@@ -101,6 +101,34 @@ export function Overview({ onOpenHistory }: OverviewProps) {
refreshCredentials();
}, [refreshCredentials, prefs?.activeAsrProvider, prefs?.activeLlmProvider]);
// 凭据被保存后重新拉取状态(issue #532 / #573:在 Settings 中填写/更新凭据
// 但不切换提供商时,上面的 useEffect 不会重跑,导致概览页的状态仍停留在「未配置」)。
// 复用 refreshCredentials() 以带上 credentialsRequestSeq 防竞态。
useEffect(() => {
let cancelled = false;
let unlisten: (() => void) | undefined;
(async () => {
try {
const { listen } = await import('@tauri-apps/api/event');
const handle = await listen('credentials:changed', () => {
if (cancelled) return;
refreshCredentials();
});
if (cancelled) {
handle();
} else {
unlisten = handle;
}
} catch {
// browser dev mock — 没有 Tauri event bridge
}
})();
return () => {
cancelled = true;
unlisten?.();
};
}, [refreshCredentials]);
const metrics = useMemo(() => {
const today = new Date();
today.setHours(0, 0, 0, 0);