feat: extract driver management into standalone tab page with registry cache

Move driver management (Agent + JDBC) out of the settings dialog into a
dedicated tab page accessible from the top toolbar. Agent drivers are shown
as a compact horizontal list; JDBC plugin/driver management is on a second
tab. Add 5-minute in-memory cache for the agent registry to avoid repeated
GitHub requests on install/uninstall/refresh operations.
This commit is contained in:
t8y2
2026-05-13 11:05:21 +08:00
parent 047e8fc2f1
commit 4d4c8f4224
7 changed files with 527 additions and 218 deletions
+12 -2
View File
@@ -11,6 +11,7 @@ import EditorToolbar from "@/components/layout/EditorToolbar.vue";
import ContentArea from "@/components/layout/ContentArea.vue";
import AppDialogs from "@/components/layout/AppDialogs.vue";
import WelcomeScreen from "@/components/layout/WelcomeScreen.vue";
import DriverStorePage from "@/components/config/DriverStoreDialog.vue";
import UpdateDialog from "@/components/layout/UpdateDialog.vue";
import LoginPage from "@/components/auth/LoginPage.vue";
import { useConnectionStore } from "@/stores/connectionStore";
@@ -73,6 +74,7 @@ const setupRequired = ref(false);
const showConnectionDialog = ref(false);
const showSettingsDialog = ref(false);
const showDriverStore = ref(false);
const showHistory = ref(false);
const showAiPanel = ref(localStorage.getItem("dbx-ai-panel-open") !== "false");
const { sidebarWidth, aiPanelWidth, historyWidth, startSidebarResize, startAiPanelResize, startHistoryResize } =
@@ -159,6 +161,7 @@ watch(
() => {
selectedSql.value = "";
activeOutputView.value = "result";
showDriverStore.value = false;
},
);
@@ -540,6 +543,7 @@ onUnmounted(() => {
:theme-mode="themeMode"
:show-ai-panel="showAiPanel"
:show-history="showHistory"
:show-driver-store="showDriverStore"
:checking-updates="checkingUpdates"
:has-connections="connectionStore.connections.length > 0"
:has-sql-file-connections="hasSqlFileConnections"
@@ -550,6 +554,7 @@ onUnmounted(() => {
@toggle-history="showHistory = !showHistory"
@open-github="openGitHub"
@open-settings="showSettingsDialog = true"
@open-driver-store="showDriverStore = !showDriverStore"
@check-updates="checkUpdates()"
@open-transfer="dialogs.showTransferDialog.value = true"
@open-sql-file="dialogs.showSqlFileDialog.value = true"
@@ -580,8 +585,13 @@ onUnmounted(() => {
"
>
<div class="h-full flex flex-col min-w-0">
<AppTabBar />
<div v-if="activeTab" class="flex flex-col flex-1 min-h-0">
<AppTabBar
:show-driver-store="showDriverStore"
@toggle-driver-store="showDriverStore = true"
@close-driver-store="showDriverStore = false"
/>
<DriverStorePage v-if="showDriverStore" />
<div v-else-if="activeTab" class="flex flex-col flex-1 min-h-0">
<EditorToolbar
v-if="activeTab.mode === 'query' && !isPreviewTab(activeTab)"
:active-tab="activeTab"