diff --git a/src/components/providers/ProviderCard.tsx b/src/components/providers/ProviderCard.tsx index 7bb81c712..26865c2f7 100644 --- a/src/components/providers/ProviderCard.tsx +++ b/src/components/providers/ProviderCard.tsx @@ -183,7 +183,8 @@ export function ProviderCard({ ? "hover:border-emerald-500/50" : "hover:border-border-active", // 当前激活的供应商边框样式 - shouldUseGreen && "border-emerald-500/60 shadow-sm shadow-emerald-500/10", + shouldUseGreen && + "border-emerald-500/60 shadow-sm shadow-emerald-500/10", shouldUseBlue && "border-blue-500/60 shadow-sm shadow-blue-500/10", !isActiveProvider && "hover:shadow-sm", dragHandleProps?.isDragging && @@ -233,7 +234,7 @@ export function ProviderCard({ {/* 健康状态徽章 */} - {isProxyRunning && health && ( + {isProxyRunning && isInFailoverQueue && health && ( diff --git a/src/hooks/useDragSort.ts b/src/hooks/useDragSort.ts index 1f26573dc..c7df771b5 100644 --- a/src/hooks/useDragSort.ts +++ b/src/hooks/useDragSort.ts @@ -75,6 +75,11 @@ export function useDragSort(providers: Record, appId: AppId) { queryKey: ["providers", appId], }); + // 刷新故障转移队列(因为队列顺序依赖 sort_index) + await queryClient.invalidateQueries({ + queryKey: ["failoverQueue", appId], + }); + // 更新托盘菜单以反映新的排序(失败不影响主操作) try { await providersApi.updateTrayMenu(); diff --git a/src/hooks/useProxyStatus.ts b/src/hooks/useProxyStatus.ts index a1c6d326d..fb69f1915 100644 --- a/src/hooks/useProxyStatus.ts +++ b/src/hooks/useProxyStatus.ts @@ -73,8 +73,10 @@ export function useProxyStatus() { ); queryClient.invalidateQueries({ queryKey: ["proxyStatus"] }); queryClient.invalidateQueries({ queryKey: ["proxyTakeoverStatus"] }); - // 清除所有供应商健康状态缓存(后端已清空数据库记录) - queryClient.invalidateQueries({ queryKey: ["providerHealth"] }); + // 彻底删除所有供应商健康状态缓存(后端已清空数据库记录) + queryClient.removeQueries({ queryKey: ["providerHealth"] }); + // 彻底删除所有熔断器统计缓存(代理停止后熔断器状态已重置) + queryClient.removeQueries({ queryKey: ["circuitBreakerStats"] }); // 注意:故障转移队列和开关状态会保留,不需要刷新 }, onError: (error: Error) => { diff --git a/src/lib/query/failover.ts b/src/lib/query/failover.ts index 7ba1ea6e1..4ba57bcfa 100644 --- a/src/lib/query/failover.ts +++ b/src/lib/query/failover.ts @@ -162,6 +162,18 @@ export function useRemoveFromFailoverQueue() { queryClient.invalidateQueries({ queryKey: ["providers", variables.appType], }); + // 清除该供应商的健康状态缓存(退出队列后不再需要健康监控) + queryClient.invalidateQueries({ + queryKey: ["providerHealth", variables.providerId, variables.appType], + }); + // 清除该供应商的熔断器统计缓存 + queryClient.invalidateQueries({ + queryKey: [ + "circuitBreakerStats", + variables.providerId, + variables.appType, + ], + }); }, }); }