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) }} - - - + + - - - - {{ s }} {{ t("grid.rowsPerPageShort") }} - - - {{ t("grid.customRowsPerPage") }} -
- - - - - - {{ t("grid.applyPageSize") }} - -
-
- + +
+
{{ t("grid.customRowsPerPage") }}
+
+ + + + + + {{ t("grid.applyPageSize") }} + +
+ @@ -5782,28 +5821,20 @@ const gridContextMenuItems = computed(() => { - - - - - - {{ t("grid.exportCsv") }} - {{ t("grid.exportXlsx") }} - {{ t("grid.exportJson") }} - {{ t("grid.exportMarkdown") }} - - - + 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 @@ + +