Files
dbx/apps/desktop/src/composables/useVisibilityChange.ts
T
t8y2 b54eda1889 fix: 修复应用长时间挂后台后恢复时表格数据永久加载的问题
三层防护:
- MySQL 连接获取时执行 ping 健康检查,死连接自动重连
- macOS Reopen 事件 + 前端 visibilitychange 触发连接刷新
- 前端 Promise.race 超时保护,确保 loading 状态不会超过 60s
2026-05-29 15:12:14 +08:00

33 lines
902 B
TypeScript

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);
});
}