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,
+ ],
+ });
},
});
}