From 133f3cfc045babb5fa548f35373671f558de3c7d Mon Sep 17 00:00:00 2001
From: t8y2 <1156263951@qq.com>
Date: Sat, 30 May 2026 11:02:16 +0800
Subject: [PATCH] perf(desktop): use lightweight dropdown menus
---
.../src/components/editor/AiAssistant.vue | 113 +++------
apps/desktop/src/components/grid/DataGrid.vue | 157 ++++++++-----
.../src/components/layout/AppSidebar.vue | 48 ++--
.../src/components/layout/AppTabBar.vue | 65 +++---
.../src/components/layout/AppToolbar.vue | 112 ++++-----
.../src/components/sidebar/ConnectionTree.vue | 123 +++++-----
.../src/components/sidebar/TreeItem.vue | 4 +-
.../src/components/ui/LightDropdown.vue | 221 ++++++++++++++++++
8 files changed, 528 insertions(+), 315 deletions(-)
create mode 100644 apps/desktop/src/components/ui/LightDropdown.vue
diff --git a/apps/desktop/src/components/editor/AiAssistant.vue b/apps/desktop/src/components/editor/AiAssistant.vue
index 2453f610e..b2047c7be 100644
--- a/apps/desktop/src/components/editor/AiAssistant.vue
+++ b/apps/desktop/src/components/editor/AiAssistant.vue
@@ -33,13 +33,8 @@ import {
} from "lucide-vue-next";
import { Button } from "@/components/ui/button";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
-import {
- DropdownMenu,
- DropdownMenuContent,
- DropdownMenuItem,
- DropdownMenuTrigger,
-} from "@/components/ui/dropdown-menu";
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
+import LightDropdown from "@/components/ui/LightDropdown.vue";
import { ScrollArea } from "@/components/ui/scroll-area";
import { useTheme } from "@/composables/useTheme";
import { useSettingsStore } from "@/stores/settingsStore";
@@ -166,6 +161,27 @@ const activePlaceholder = computed(
() => `${t(`ai.placeholders.${activeAction.value}`)} ${t("ai.tableMentionPlaceholderHint")}`,
);
const activeModeHint = computed(() => t(`ai.modeHints.${assistantMode.value}`));
+const assistantModeItems = computed(() => [
+ {
+ value: "ask",
+ label: t("ai.modes.ask"),
+ title: t("ai.modeHints.ask"),
+ icon: MessageSquarePlus,
+ },
+ {
+ value: "agent",
+ label: t("ai.modes.agent"),
+ title: t("ai.modeHints.agent"),
+ icon: Bot,
+ },
+]);
+const actionMenuItems = computed(() =>
+ actionButtons.map((button) => ({
+ value: button.action,
+ label: t(button.key),
+ icon: button.icon,
+ })),
+);
const aiCodeAppearance = computed(() => (isDark.value ? "dark" : "light"));
const { databaseOptions: allDbOptions, loadDatabaseOptions } = useDatabaseOptions();
@@ -956,78 +972,19 @@ const messageRenderer = computed(() => {
@keydown="onPromptKeydown"
/>
-
-
-
-
-
-
-
-
- {{ t("ai.modes.ask") }}
-
-
-
-
- {{ t("ai.modes.agent") }}
-
-
-
-
-
-
-
-
-
-
- {{ t(btn.key) }}
-
-
-
+
+
selectAction(value as AiAction)"
+ />
-
-
-
-
-
-
-
- {{ t("grid.exportCsv") }}
- {{ t("grid.exportXlsx") }}
- {{ t("grid.exportJson") }}
- {{ t("grid.exportMarkdown") }}
-
-
- {{ t("grid.exportSelectedRowsCsv") }}
- {{ t("grid.exportSelectedRowsXlsx") }}
- {{ t("grid.exportSelectedRowsJson") }}
- {{
- t("grid.exportSelectedRowsMarkdown")
- }}
-
-
-
+
diff --git a/apps/desktop/src/components/layout/AppSidebar.vue b/apps/desktop/src/components/layout/AppSidebar.vue
index 64868e224..a0a7f1212 100644
--- a/apps/desktop/src/components/layout/AppSidebar.vue
+++ b/apps/desktop/src/components/layout/AppSidebar.vue
@@ -1,16 +1,11 @@
@@ -301,7 +309,7 @@ const dataTabsMenuContainerClass = computed(() =>
-
+
aria-hidden="true"
/>
-
-
-
-
-
-
-
-
-
- {{ tabDisplayTitle(tab) }}
-
-
-
+
diff --git a/apps/desktop/src/components/layout/AppToolbar.vue b/apps/desktop/src/components/layout/AppToolbar.vue
index 2021b69b5..9198a555e 100644
--- a/apps/desktop/src/components/layout/AppToolbar.vue
+++ b/apps/desktop/src/components/layout/AppToolbar.vue
@@ -1,4 +1,5 @@
+
+
+
+
+ {{ triggerLabel ?? selectedItem?.label }}
+
+
+
+
+
+