From 164fd7fb828ab632092eeda18d39d1d955d7a118 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Thu, 14 May 2026 22:40:31 +0800 Subject: [PATCH] feat: auto-open Driver Manager when driver is not installed When a connection fails because the agent driver or JRE is not installed, automatically open the Driver Manager page so users can install it without navigating manually. --- src/App.vue | 3 +++ src/components/sidebar/TreeItem.vue | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/App.vue b/src/App.vue index e2d4d04ef8..c9445c4a7f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -511,6 +511,9 @@ onMounted(async () => { const mountStart = performance.now(); applyTheme(); window.addEventListener("keydown", handleKeydown, true); + window.addEventListener("dbx-open-driver-store", () => { + showDriverStore.value = true; + }); if (isDesktop) { document.addEventListener("contextmenu", handleContextMenu); } diff --git a/src/components/sidebar/TreeItem.vue b/src/components/sidebar/TreeItem.vue index cefa657ac3..caeb4e0e47 100644 --- a/src/components/sidebar/TreeItem.vue +++ b/src/components/sidebar/TreeItem.vue @@ -305,7 +305,11 @@ async function toggle() { } } catch (e: any) { if (!wasExpanded) node.isExpanded = false; - toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000); + const errMsg = e?.message || String(e); + toast(t("connection.connectFailed", { message: translateBackendError(t, errMsg) }), 5000); + if (errMsg.includes("driver is not installed") || errMsg.includes("is not installed")) { + window.dispatchEvent(new Event("dbx-open-driver-store")); + } } } @@ -361,6 +365,12 @@ async function openObjectBrowser() { } } catch (e: any) { toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000); + if ( + e?.message?.includes("driver is not installed") || + (e?.message?.includes("JRE") && e?.message?.includes("not installed")) + ) { + window.dispatchEvent(new Event("dbx-open-driver-store")); + } } } @@ -463,6 +473,12 @@ async function newQuery() { queryStore.createTab(node.connectionId, resolveDefaultDatabase(connection, options), undefined, "query"); } catch (e: any) { toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000); + if ( + e?.message?.includes("driver is not installed") || + (e?.message?.includes("JRE") && e?.message?.includes("not installed")) + ) { + window.dispatchEvent(new Event("dbx-open-driver-store")); + } } } @@ -491,6 +507,12 @@ async function refresh() { await connectionStore.refreshTreeNode(props.node); } catch (e: any) { toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000); + if ( + e?.message?.includes("driver is not installed") || + (e?.message?.includes("JRE") && e?.message?.includes("not installed")) + ) { + window.dispatchEvent(new Event("dbx-open-driver-store")); + } } }