fix: 修复应用长时间挂后台后恢复时表格数据永久加载的问题
三层防护: - MySQL 连接获取时执行 ping 健康检查,死连接自动重连 - macOS Reopen 事件 + 前端 visibilitychange 触发连接刷新 - 前端 Promise.race 超时保护,确保 loading 状态不会超过 60s
This commit is contained in:
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);
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user