From 613fb51fd777cc417d87c1e667055146ba08e657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=88=AA=E5=AE=87?= <3364451258@qq.com> Date: Tue, 26 May 2026 22:09:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=AA=8C=E8=AF=81=20IPC=20=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=97=B6=E8=BF=94=E5=9B=9E=20unknown=20=E7=8A=B6?= =?UTF-8?q?=E6=80=81=EF=BC=8C=E4=B8=8D=E5=86=8D=E9=94=99=E8=AF=AF=E6=A0=87?= =?UTF-8?q?=E8=AE=B0=E4=B8=BA=E6=9C=89=E6=95=88=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- src/components/path-list/PathTable.tsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/components/path-list/PathTable.tsx b/src/components/path-list/PathTable.tsx index b4a7930..fc45b66 100644 --- a/src/components/path-list/PathTable.tsx +++ b/src/components/path-list/PathTable.tsx @@ -22,8 +22,9 @@ export function PathTable({ tabId }: PathTableProps) { const paths = tabId === 'system' ? sysPaths : userPaths; const isActive = activeTab === tabId; - // 本次会话中已验证过的路径缓存(key=path, value=isValid) - const [validationCache, setValidationCache] = useState>(new Map()); + type ValidationState = 'valid' | 'invalid' | 'unknown'; + // 本次会话中已验证过的路径缓存(key=path, value=ValidationState) + const [validationCache, setValidationCache] = useState>(new Map()); // 环境变量展开结果缓存(key=path, value=expanded) const [expandedCache, setExpandedCache] = useState>(new Map()); @@ -51,13 +52,13 @@ export function PathTable({ tabId }: PathTableProps) { // 批量验证(限制并发 20) const batch = toValidate.slice(0, 20); Promise.all( - batch.map(async (p): Promise<[string, boolean]> => { + batch.map(async (p): Promise<[string, ValidationState]> => { try { - if (p.includes('%')) return [p, true]; + if (p.includes('%')) return [p, 'valid']; const valid: boolean = await invoke('validate_path', { path: p }); - return [p, valid]; + return [p, valid ? 'valid' : 'invalid']; } catch { - return [p, true]; + return [p, 'unknown']; } }), ).then((results) => { @@ -109,7 +110,7 @@ export function PathTable({ tabId }: PathTableProps) { }; }, [paths, expandedCache]); - // 所有路径都默认有效(异步验证结果回来后再精确染色) + // 所有路径默认有效(异步验证结果回来后再精确染色) const validations = useMemo(() => { const seen = new Set(); return filtered.map(({ path }) => { @@ -117,7 +118,7 @@ export function PathTable({ tabId }: PathTableProps) { const isDuplicate = seen.has(lower); seen.add(lower); return { - isValid: validationCache.get(path) ?? true, + state: validationCache.get(path) ?? ('valid' as ValidationState), isDuplicate, isEnvVar: path.includes('%'), }; @@ -168,8 +169,9 @@ export function PathTable({ tabId }: PathTableProps) { const v = validations[rowIdx]; const isSelected = selectedIndices.includes(index); let textColor = 'var(--app-fg)'; - if (!v.isValid) textColor = '#dc3545'; + if (v.state === 'invalid') textColor = '#dc3545'; else if (v.isDuplicate) textColor = '#fd7e14'; + else if (v.state === 'unknown') textColor = 'var(--app-fg)'; return (