From 38e1c66f262dc58e1af75e968fc0d5bff2d00978 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Thu, 30 Jul 2026 23:08:15 +0800 Subject: [PATCH] feat(grid): improve data copy format controls --- .../components/document/DocumentBrowser.vue | 16 ++++- apps/desktop/src/components/grid/DataGrid.vue | 67 ++++++++++++------- .../grid/DataGridCopyFormatControl.vue | 51 ++++++++++++++ .../src/components/grid/DataGridToolbar.vue | 5 +- .../src/components/layout/ContentArea.vue | 30 ++++++++- .../src/components/ui/CustomContextMenu.vue | 5 +- .../ui/__tests__/CustomContextMenu.spec.ts | 30 +++++++++ .../__tests__/useDataGridExport.spec.ts | 31 +++++++++ .../src/composables/useDataGridExtractor.ts | 10 +-- apps/desktop/src/i18n/locales/en.ts | 3 + apps/desktop/src/i18n/locales/es.ts | 3 + apps/desktop/src/i18n/locales/it.ts | 3 + apps/desktop/src/i18n/locales/ja.ts | 3 + apps/desktop/src/i18n/locales/ko.ts | 3 + apps/desktop/src/i18n/locales/pt-BR.ts | 3 + apps/desktop/src/i18n/locales/zh-CN.ts | 3 + apps/desktop/src/i18n/locales/zh-TW.ts | 3 + .../src/lib/dataGrid/dataGridContextMenu.ts | 1 + 18 files changed, 235 insertions(+), 35 deletions(-) create mode 100644 apps/desktop/src/components/grid/DataGridCopyFormatControl.vue diff --git a/apps/desktop/src/components/document/DocumentBrowser.vue b/apps/desktop/src/components/document/DocumentBrowser.vue index 4ba7a19352..008f8ed2e0 100644 --- a/apps/desktop/src/components/document/DocumentBrowser.vue +++ b/apps/desktop/src/components/document/DocumentBrowser.vue @@ -11,6 +11,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@ import DangerConfirmDialog from "@/components/editor/DangerConfirmDialog.vue"; import ErrorBanner from "@/components/ui/ErrorBanner.vue"; import DataGrid from "@/components/grid/DataGrid.vue"; +import DataGridCopyFormatControl from "@/components/grid/DataGridCopyFormatControl.vue"; import QueryLoadingState from "@/components/common/QueryLoadingState.vue"; import * as api from "@/lib/backend/api"; import { useConnectionStore } from "@/stores/connectionStore"; @@ -116,6 +117,7 @@ const sortInput = ref(""); const filterInputRef = ref(); const sortInputRef = ref(); const dataGridRef = ref>(); +const viewOptionsOpen = ref(false); const mongoUpdateTarget = computed(() => (props.databaseType === "mongodb" && mongoCopyDocumentsAvailable.value ? { collection: props.collection, idColumn: "_id" as const } : undefined)); const documentViewerRef = ref(); const documentSearchInputRef = ref(); @@ -126,6 +128,11 @@ const documentSearchHasNavigated = ref(false); const documentViewerSearchActive = ref(false); const columnVisibilitySearch = ref(""); const columnVisibilityOptions = computed(() => dataGridRef.value?.filteredColumnVisibilityOptions(columnVisibilitySearch.value) ?? []); + +function openDataGridExtractorConfiguration() { + viewOptionsOpen.value = false; + void nextTick(() => dataGridRef.value?.openExtractorConfiguration()); +} const tableSearchSplitContainerRef = ref(); const tableFindPaneWidth = ref(null); const isResizingTableSearchSplit = ref(false); @@ -1571,7 +1578,7 @@ defineExpose({ focusSearch }); - +