fix: 修复应用长时间挂后台后恢复时表格数据永久加载的问题

三层防护:
- MySQL 连接获取时执行 ping 健康检查,死连接自动重连
- macOS Reopen 事件 + 前端 visibilitychange 触发连接刷新
- 前端 Promise.race 超时保护,确保 loading 状态不会超过 60s
This commit is contained in:
t8y2 committed 2026-05-29 15:12:14 +08:00
1 parent 6c0db6f517
commit b54eda1889
8 files changed
+157 -13

No files matched your search

@@ -0,0 +1,32 @@
import { onMounted, onUnmounted } from "vue";
import { refreshConnections } from "@/lib/api";
import { useQueryStore } from "@/stores/queryStore";
let hiddenAt: number | null = null;
function handleVisibilityChange() {
if (document.hidden) {
hiddenAt = Date.now();
} else {
const wasHidden = hiddenAt;
hiddenAt = null;
if (wasHidden && Date.now() - wasHidden > 30_000) {
refreshConnections().catch(() => {});
const queryStore = useQueryStore();
const stuckTabs = queryStore.tabs.filter((t) => t.isExecuting);
if (stuckTabs.length > 0) {
queryStore.notifyConnectionMayBeLost();
}
}
}
}
export function useVisibilityChange() {
onMounted(() => {
document.addEventListener("visibilitychange", handleVisibilityChange);
});
onUnmounted(() => {
document.removeEventListener("visibilitychange", handleVisibilityChange);
});
}