From 6bcc85233cf1559b05607055fe78db8ff086f068 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Sat, 6 Jun 2026 14:04:52 +0800 Subject: [PATCH] fix(grid): show local column filters in filter popover --- apps/desktop/src/components/grid/DataGrid.vue | 85 +++++++++++++++++-- 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/pt-BR.ts | 3 + apps/desktop/src/i18n/locales/zh-CN.ts | 3 + apps/desktop/src/i18n/locales/zh-TW.ts | 3 + 7 files changed, 95 insertions(+), 8 deletions(-) diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index 2e5b94fb5d..111e03bfe5 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -576,6 +576,23 @@ function localFilterActive(colIdx: number): boolean { const localFilterCount = computed(() => Object.values(localColumnFilters.value).filter((values) => values.size).length); const hasLocalColumnFilters = computed(() => localFilterCount.value > 0); +const filterButtonCount = computed(() => structuredFilterCount.value + localFilterCount.value); +const filterButtonActive = computed(() => hasStructuredFilters.value || hasLocalColumnFilters.value); +const localFilterSummaries = computed(() => + Object.entries(localColumnFilters.value) + .filter(([, selected]) => selected.size > 0) + .map(([columnIndexText, selected]) => { + const columnIndex = Number(columnIndexText); + const labelByKey = new Map(buildLocalFilterOptions(columnIndex).map((option) => [option.key, option.label])); + const values = [...selected].map((key) => labelByKey.get(key) ?? key); + return { + columnIndex, + columnName: props.result.columns[columnIndex] ?? `#${columnIndex + 1}`, + values: values.slice(0, 3), + hiddenValueCount: Math.max(0, values.length - 3), + }; + }), +); function rowMatchesLocalColumnFilters(data: CellValue[]): boolean { const activeEntries = Object.entries(localColumnFilters.value).filter(([, selected]) => selected.size > 0); @@ -996,10 +1013,10 @@ function resetStructuredFilters() { } async function clearAllFilters() { - if (!canUseWhereSearch.value) return; whereFilterInput.value = ""; resetStructuredFilters(); - await applyWhereFilter(); + clearLocalFilter(); + if (canUseWhereSearch.value) await applyWhereFilter(); } function buildGroupedWhere(conditions: string[], rules: StructuredFilterRule[]): string { @@ -5570,7 +5587,7 @@ const gridContextMenuItems = computed(() => { -