From d70a1231b0056d1d067270488cdb1a029a2b29d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E4=B8=AB=E8=AE=B2=E6=A2=B5?= Date: Thu, 27 Aug 2026 12:18:42 +0800 Subject: [PATCH] feat(xlsx): add optional auto filter to xlsx export --- .../components/export/XlsxHeaderDialog.vue | 49 +++++++----- .../export/__tests__/XlsxHeaderDialog.spec.ts | 10 +-- .../src/components/objects/ObjectBrowser.vue | 24 +++--- .../__tests__/ObjectBrowserExport.spec.ts | 10 +-- .../__tests__/useDataGridExport.xlsx.spec.ts | 12 ++- .../useSidebarTreeExportRuntime.spec.ts | 6 +- .../src/composables/useDataGridExport.ts | 80 +++++++++++-------- .../useSidebarTreeExportRuntime.ts | 22 ++--- 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 + apps/desktop/src/lib/backend/http.ts | 16 +++- apps/desktop/src/lib/backend/tauri.ts | 17 +++- apps/desktop/src/lib/export/xlsxExport.ts | 6 +- apps/desktop/src/lib/export/xlsxHeader.ts | 5 ++ crates/dbx-core/src/query_result_export.rs | 4 + crates/dbx-core/src/table_export.rs | 15 ++++ crates/dbx-core/src/xlsx_export.rs | 80 ++++++++++++++----- .../live_clickhouse_query_result_export.rs | 1 + crates/dbx-core/tests/live_mysql57.rs | 2 + .../live_postgres_query_result_export.rs | 6 ++ .../tests/live_sqlserver_completion.rs | 1 + .../live_sqlserver_query_result_export.rs | 1 + src-tauri/src/commands/xlsx_export.rs | 13 ++- 29 files changed, 285 insertions(+), 119 deletions(-) diff --git a/apps/desktop/src/components/export/XlsxHeaderDialog.vue b/apps/desktop/src/components/export/XlsxHeaderDialog.vue index f2267e6cd3..e96fbfe27b 100644 --- a/apps/desktop/src/components/export/XlsxHeaderDialog.vue +++ b/apps/desktop/src/components/export/XlsxHeaderDialog.vue @@ -3,21 +3,25 @@ import { ref } from "vue"; import { useI18n } from "vue-i18n"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; -import type { XlsxHeaderMode } from "@/lib/export/xlsxHeader"; +import type { XlsxExportOptions, XlsxHeaderMode } from "@/lib/export/xlsxHeader"; const { t } = useI18n(); +const props = withDefaults(defineProps<{ showHeaderOptions?: boolean }>(), { + showHeaderOptions: true, +}); const open = defineModel("open", { default: false }); const selected = ref("name"); +const autoFilter = ref(false); const emit = defineEmits<{ - confirm: [mode: XlsxHeaderMode]; + confirm: [options: XlsxExportOptions]; cancel: []; }>(); function onConfirm() { open.value = false; - emit("confirm", selected.value); + emit("confirm", { headerMode: selected.value, autoFilter: autoFilter.value }); } function onCancel() { @@ -34,22 +38,31 @@ function onOpenChange(value: boolean) { - {{ t("grid.xlsxHeaderTitle") }} + {{ t("grid.xlsxExportTitle") }} -
-

{{ t("grid.xlsxHeaderPrompt") }}

-
- - -