zmdms-webui 3.4.5 → 3.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,164 @@
1
- import { __assign, __spreadArray } from '../../_virtual/_tslib.js';
2
- import { useState, useEffect, useMemo } from 'react';
1
+ import { __spreadArray, __assign } from '../../_virtual/_tslib.js';
2
+ import { useState, useEffect } from 'react';
3
3
  import { useMemoizedFn } from 'ahooks';
4
4
  import 'zmdms-utils';
5
5
  import 'dayjs';
6
6
  import { getAllLeafColumns, findColumnByKey } from '../utils/columnHelpers.js';
7
+ import { IS_SUMMARY } from '../../table/constant.js';
8
+ import 'lodash/isEqual';
9
+ import '../../node_modules/immutability-helper/index.js';
10
+ import 'react/jsx-runtime';
11
+ import '../../node_modules/exceljs/dist/exceljs.min.js';
7
12
 
8
13
  /**
9
14
  * 表格状态管理 Hook
10
15
  */
16
+ /**
17
+ * 根据数据源和列配置,自动生成筛选选项(基于数据的唯一值)
18
+ * 提取为独立函数,以便在含合计行的最终数据源上调用
19
+ */
20
+ var generateAutoFilters = function (dataSource, columns) {
21
+ var filtersMap = {};
22
+ if (dataSource.length === 0) {
23
+ return filtersMap;
24
+ }
25
+ var leafColumns = getAllLeafColumns(columns);
26
+ leafColumns.forEach(function (column) {
27
+ if ((column.filters && column.filters.length > 0) ||
28
+ column.isFilter === false ||
29
+ column.key === "__selection__") {
30
+ return;
31
+ }
32
+ var dataIndex = column.dataIndex || column.key;
33
+ var uniqueValues = new Set();
34
+ dataSource.forEach(function (record) {
35
+ var value = record[dataIndex];
36
+ if (value !== null && value !== undefined && value !== "") {
37
+ uniqueValues.add(value);
38
+ }
39
+ });
40
+ if (uniqueValues.size > 0) {
41
+ filtersMap[column.key] = Array.from(uniqueValues)
42
+ .map(function (value) { return ({
43
+ text: String(value),
44
+ value: value,
45
+ }); })
46
+ .slice(0, 50);
47
+ }
48
+ });
49
+ return filtersMap;
50
+ };
51
+ /** 判断是否为数值筛选 */
52
+ var isNumberFilter = function (value) {
53
+ return (value &&
54
+ typeof value === "object" &&
55
+ "operator" in value &&
56
+ "value" in value);
57
+ };
58
+ /** 判断是否为模糊查询 */
59
+ var isFuzzyFilter = function (value) {
60
+ return value && typeof value === "object" && "__fuzzy__" in value;
61
+ };
62
+ /** 应用数值筛选 */
63
+ var applyNumberFilter = function (recordValue, filterValue) {
64
+ var numValue = parseFloat(recordValue);
65
+ if (isNaN(numValue))
66
+ return false;
67
+ var operator = filterValue.operator, value = filterValue.value;
68
+ switch (operator) {
69
+ case "=":
70
+ return numValue === value;
71
+ case "!=":
72
+ return numValue !== value;
73
+ case ">":
74
+ return numValue > value;
75
+ case "<":
76
+ return numValue < value;
77
+ case ">=":
78
+ return numValue >= value;
79
+ case "<=":
80
+ return numValue <= value;
81
+ default:
82
+ return false;
83
+ }
84
+ };
85
+ /**
86
+ * 对数据应用筛选和排序
87
+ * 提取为独立函数,以便在含合计行的最终数据源上调用,
88
+ * 使合计行也能参与筛选
89
+ */
90
+ var processData = function (dataSource, filters, columns, sortField, sortOrder, isAutoMerge) {
91
+ var data = __spreadArray([], dataSource, true);
92
+ // 应用过滤
93
+ Object.keys(filters).forEach(function (key) {
94
+ var filterValues = filters[key];
95
+ if (filterValues && filterValues.length > 0) {
96
+ var column_1 = findColumnByKey(columns, key);
97
+ var dataIndex_1 = (column_1 === null || column_1 === void 0 ? void 0 : column_1.dataIndex) || key;
98
+ if (column_1 === null || column_1 === void 0 ? void 0 : column_1.onFilter) {
99
+ data = data.filter(function (record) {
100
+ return filterValues.some(function (value) { return column_1.onFilter(value, record); });
101
+ });
102
+ }
103
+ else {
104
+ var firstValue = filterValues[0];
105
+ if (isNumberFilter(firstValue)) {
106
+ data = data.filter(function (record) {
107
+ return filterValues.every(function (filterValue) {
108
+ return applyNumberFilter(record[dataIndex_1], filterValue);
109
+ });
110
+ });
111
+ }
112
+ else if (isFuzzyFilter(firstValue)) {
113
+ var searchText_1 = firstValue.text.toLowerCase();
114
+ data = data.filter(function (record) {
115
+ var recordValue = String(record[dataIndex_1] || "");
116
+ return recordValue.toLowerCase().includes(searchText_1);
117
+ });
118
+ }
119
+ else {
120
+ data = data.filter(function (record) {
121
+ return filterValues.includes(record[dataIndex_1]);
122
+ });
123
+ }
124
+ }
125
+ }
126
+ });
127
+ // 应用排序(isAutoMerge 时排序由 useAutoMerge 内部处理)
128
+ if (sortField && sortOrder && !isAutoMerge) {
129
+ // 合计行始终保持在末尾,不参与排序
130
+ var summaryRows = data.filter(function (r) { return r[IS_SUMMARY]; });
131
+ var normalRows = data.filter(function (r) { return !r[IS_SUMMARY]; });
132
+ var column_2 = findColumnByKey(columns, sortField);
133
+ if (column_2 && column_2.isOrder !== false) {
134
+ var sortFn_1 = typeof column_2.sorter === "function"
135
+ ? column_2.sorter
136
+ : function (a, b) {
137
+ var dataIndex = column_2.dataIndex || column_2.key;
138
+ var aVal = a[dataIndex];
139
+ var bVal = b[dataIndex];
140
+ if (aVal === bVal)
141
+ return 0;
142
+ if (aVal === null || aVal === undefined)
143
+ return 1;
144
+ if (bVal === null || bVal === undefined)
145
+ return -1;
146
+ if (typeof aVal === "number" && typeof bVal === "number") {
147
+ return aVal - bVal;
148
+ }
149
+ return String(aVal).localeCompare(String(bVal));
150
+ };
151
+ normalRows.sort(function (a, b) {
152
+ var result = sortFn_1(a, b);
153
+ return sortOrder === "ascend" ? result : -result;
154
+ });
155
+ }
156
+ data = __spreadArray(__spreadArray([], normalRows, true), summaryRows, true);
157
+ }
158
+ return data;
159
+ };
11
160
  var useTableState = function (params) {
12
- var dataSource = params.dataSource, columns = params.columns, rowSelection = params.rowSelection, onFilterChange = params.onFilterChange, isAutoMerge = params.isAutoMerge;
161
+ var rowSelection = params.rowSelection, onFilterChange = params.onFilterChange;
13
162
  // 表格状态
14
163
  var _a = useState({
15
164
  sortField: null,
@@ -42,159 +191,6 @@ var useTableState = function (params) {
42
191
  setState(function (prev) { return (__assign(__assign({}, prev), { selectedRowKeys: rowSelection.selectedRowKeys || [] })); });
43
192
  }
44
193
  }, [rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.selectedRowKeys]);
45
- // 自动生成筛选选项(基于数据的唯一值)
46
- var autoGeneratedFilters = useMemo(function () {
47
- var filtersMap = {};
48
- // 如果没有数据,直接返回空对象
49
- if (dataSource.length === 0) {
50
- return filtersMap;
51
- }
52
- // 获取所有叶子列(包括多级表头中的嵌套列)
53
- var leafColumns = getAllLeafColumns(columns);
54
- leafColumns.forEach(function (column) {
55
- // 如果列已经有有效的filters或未开启filter,跳过
56
- if ((column.filters && column.filters.length > 0) ||
57
- column.isFilter === false ||
58
- column.key === "__selection__") {
59
- return;
60
- }
61
- var dataIndex = column.dataIndex || column.key;
62
- var uniqueValues = new Set();
63
- dataSource.forEach(function (record) {
64
- var value = record[dataIndex];
65
- if (value !== null && value !== undefined && value !== "") {
66
- uniqueValues.add(value);
67
- }
68
- });
69
- if (uniqueValues.size > 0) {
70
- filtersMap[column.key] = Array.from(uniqueValues)
71
- .map(function (value) { return ({
72
- text: String(value),
73
- value: value,
74
- }); })
75
- .slice(0, 50);
76
- }
77
- });
78
- return filtersMap;
79
- }, [dataSource, columns]);
80
- // 判断是否为数值筛选
81
- var isNumberFilter = function (value) {
82
- return (value &&
83
- typeof value === "object" &&
84
- "operator" in value &&
85
- "value" in value);
86
- };
87
- // 判断是否为模糊查询
88
- var isFuzzyFilter = function (value) {
89
- return value && typeof value === "object" && "__fuzzy__" in value;
90
- };
91
- // 应用数值筛选
92
- var applyNumberFilter = function (recordValue, filterValue) {
93
- var numValue = parseFloat(recordValue);
94
- if (isNaN(numValue))
95
- return false;
96
- var operator = filterValue.operator, value = filterValue.value;
97
- switch (operator) {
98
- case "=":
99
- return numValue === value;
100
- case "!=":
101
- return numValue !== value;
102
- case ">":
103
- return numValue > value;
104
- case "<":
105
- return numValue < value;
106
- case ">=":
107
- return numValue >= value;
108
- case "<=":
109
- return numValue <= value;
110
- default:
111
- return false;
112
- }
113
- };
114
- // 过滤和排序后的数据
115
- var processedDataSource = useMemo(function () {
116
- var data = __spreadArray([], dataSource, true);
117
- // 应用过滤
118
- Object.keys(state.filters).forEach(function (key) {
119
- var filterValues = state.filters[key];
120
- if (filterValues && filterValues.length > 0) {
121
- var column_1 = findColumnByKey(columns, key);
122
- var dataIndex_1 = (column_1 === null || column_1 === void 0 ? void 0 : column_1.dataIndex) || key;
123
- if (column_1 === null || column_1 === void 0 ? void 0 : column_1.onFilter) {
124
- // 使用自定义过滤方法
125
- data = data.filter(function (record) {
126
- return filterValues.some(function (value) { return column_1.onFilter(value, record); });
127
- });
128
- }
129
- else {
130
- // 检查是否为数值筛选
131
- var firstValue = filterValues[0];
132
- if (isNumberFilter(firstValue)) {
133
- // 数值筛选逻辑
134
- // 如果有多个条件(区间筛选),需要同时满足所有条件(且关系)
135
- // 如果只有一个条件(单值筛选),满足该条件即可
136
- data = data.filter(function (record) {
137
- return filterValues.every(function (filterValue) {
138
- return applyNumberFilter(record[dataIndex_1], filterValue);
139
- });
140
- });
141
- }
142
- else if (isFuzzyFilter(firstValue)) {
143
- // 模糊查询逻辑
144
- var searchText_1 = firstValue.text.toLowerCase();
145
- data = data.filter(function (record) {
146
- var recordValue = String(record[dataIndex_1] || "");
147
- return recordValue.toLowerCase().includes(searchText_1);
148
- });
149
- }
150
- else {
151
- // 使用默认过滤方法(精确匹配)
152
- data = data.filter(function (record) {
153
- return filterValues.includes(record[dataIndex_1]);
154
- });
155
- }
156
- }
157
- }
158
- });
159
- // 应用排序
160
- if (state.sortField && state.sortOrder && !isAutoMerge) {
161
- var column_2 = findColumnByKey(columns, state.sortField);
162
- if (column_2 && column_2.isOrder !== false) {
163
- var sortFn_1 = typeof column_2.sorter === "function"
164
- ? column_2.sorter
165
- : function (a, b) {
166
- var dataIndex = column_2.dataIndex || column_2.key;
167
- var aVal = a[dataIndex];
168
- var bVal = b[dataIndex];
169
- // 默认排序逻辑
170
- if (aVal === bVal)
171
- return 0;
172
- if (aVal === null || aVal === undefined)
173
- return 1;
174
- if (bVal === null || bVal === undefined)
175
- return -1;
176
- // 数字排序
177
- if (typeof aVal === "number" && typeof bVal === "number") {
178
- return aVal - bVal;
179
- }
180
- // 字符串排序
181
- return String(aVal).localeCompare(String(bVal));
182
- };
183
- data.sort(function (a, b) {
184
- var result = sortFn_1(a, b);
185
- return state.sortOrder === "ascend" ? result : -result;
186
- });
187
- }
188
- }
189
- return data;
190
- }, [
191
- dataSource,
192
- columns,
193
- state.filters,
194
- state.sortField,
195
- state.sortOrder,
196
- isAutoMerge,
197
- ]);
198
194
  // 处理过滤变化
199
195
  var handleFilterChange = useMemoizedFn(function (columnKey, values) {
200
196
  var _a;
@@ -216,11 +212,9 @@ var useTableState = function (params) {
216
212
  return {
217
213
  state: state,
218
214
  setState: setState,
219
- processedDataSource: processedDataSource,
220
215
  handleFilterChange: handleFilterChange,
221
216
  closeFilterPopover: closeFilterPopover,
222
- autoGeneratedFilters: autoGeneratedFilters,
223
217
  };
224
218
  };
225
219
 
226
- export { useTableState };
220
+ export { generateAutoFilters, processData, useTableState };
@@ -4,7 +4,7 @@ import { useMemoizedFn, useLatest } from 'ahooks';
4
4
  import update from '../node_modules/immutability-helper/index.js';
5
5
  import { getInnerIndex } from './useInnerPagination.js';
6
6
  import { flattenRecordsOptimized } from './utils.js';
7
- import { IS_SUMMARY, MERGE_INDEX, MERGE_ROW_SPANS } from './constant.js';
7
+ import { IS_SUMMARY, MERGE_ROW_SPANS, MERGE_INDEX } from './constant.js';
8
8
  import { filterHandle } from './components/FilterDropdown.js';
9
9
 
10
10
  /**
@@ -596,61 +596,115 @@ function useMergeAddAndDel(_a) {
596
596
  return [newRowSelection, newAddAndDelProps];
597
597
  }
598
598
  /**
599
- * 自定义处理过滤逻辑
599
+ * 对数据应用自定义筛选
600
+ * 提取为独立函数,以便在含合计行的数据上调用
600
601
  */
601
- function useCustomFilter(dataSource, _newColumns) {
602
- var _a = useState(), filterConfig = _a[0], setFilterConfig = _a[1];
603
- var columnsRef = useLatest(_newColumns);
604
- var newDataSource = useMemo(function () {
605
- if (!filterConfig)
606
- return dataSource;
607
- return dataSource.filter(function (item, index) {
608
- var _a, _b;
609
- var keys = Object.keys(filterConfig);
610
- var _loop_1 = function (i) {
611
- var key = keys[i];
612
- var column = (_b = (_a = columnsRef.current) === null || _a === void 0 ? void 0 : _a.find) === null || _b === void 0 ? void 0 : _b.call(_a, function (col) { return (col === null || col === void 0 ? void 0 : col.key) === key || (col === null || col === void 0 ? void 0 : col.dataIndex) === key; });
613
- var filter = filterConfig[key];
614
- if (filter.input) {
615
- if (!filterHandle(filter.input, item, key, {
602
+ function applyCustomFilter(dataSource, filterConfig, columns) {
603
+ if (!filterConfig)
604
+ return dataSource;
605
+ return dataSource.filter(function (item, index) {
606
+ var _a;
607
+ var keys = Object.keys(filterConfig);
608
+ var _loop_1 = function (i) {
609
+ var key = keys[i];
610
+ var column = (_a = columns === null || columns === void 0 ? void 0 : columns.find) === null || _a === void 0 ? void 0 : _a.call(columns, function (col) { return (col === null || col === void 0 ? void 0 : col.key) === key || (col === null || col === void 0 ? void 0 : col.dataIndex) === key; });
611
+ var filter = filterConfig[key];
612
+ if (filter.input) {
613
+ if (!filterHandle(filter.input, item, key, {
614
+ column: column,
615
+ recordIndex: index,
616
+ })) {
617
+ return { value: false };
618
+ }
619
+ }
620
+ if (filter.checkbox && filter.checkbox.length > 0) {
621
+ var flag = false;
622
+ for (var _b = 0, _c = filter.checkbox; _b < _c.length; _b++) {
623
+ var value = _c[_b];
624
+ if (filterHandle(value, item, key, {
616
625
  column: column,
617
626
  recordIndex: index,
627
+ checkbox: filter.checkbox,
618
628
  })) {
619
- return { value: false };
629
+ flag = true;
630
+ break;
620
631
  }
621
632
  }
622
- if (filter.checkbox && filter.checkbox.length > 0) {
623
- var flag = false;
624
- for (var _c = 0, _d = filter.checkbox; _c < _d.length; _c++) {
625
- var value = _d[_c];
626
- if (filterHandle(value, item, key, {
627
- column: column,
628
- recordIndex: index,
629
- checkbox: filter.checkbox,
630
- })) {
631
- flag = true;
632
- break;
633
- }
634
- }
635
- if (!flag) {
636
- return { value: false };
637
- }
633
+ if (!flag) {
634
+ return { value: false };
638
635
  }
639
- };
640
- for (var i = 0; i < keys.length; i++) {
641
- var state_1 = _loop_1(i);
642
- if (typeof state_1 === "object")
643
- return state_1.value;
644
636
  }
645
- return true;
646
- });
647
- }, [dataSource, filterConfig, columnsRef]);
637
+ };
638
+ for (var i = 0; i < keys.length; i++) {
639
+ var state_1 = _loop_1(i);
640
+ if (typeof state_1 === "object")
641
+ return state_1.value;
642
+ }
643
+ return true;
644
+ });
645
+ }
646
+ /**
647
+ * 自定义处理过滤逻辑
648
+ */
649
+ function useCustomFilter(dataSource, _newColumns) {
650
+ var _a = useState(), filterConfig = _a[0], setFilterConfig = _a[1];
651
+ var columnsRef = useLatest(_newColumns);
652
+ var newDataSource = useMemo(function () { return applyCustomFilter(dataSource, filterConfig, columnsRef.current); }, [dataSource, filterConfig, columnsRef]);
648
653
  var handleFilterConfigChange = useMemoizedFn(function (value) {
649
654
  setFilterConfig(function (oldValue) {
650
655
  return __assign(__assign({}, oldValue), value);
651
656
  });
652
657
  });
653
- return [newDataSource, handleFilterConfigChange];
658
+ return [newDataSource, handleFilterConfigChange, filterConfig];
659
+ }
660
+ /**
661
+ * 筛选/排序后重新计算合并行的 rowSpan
662
+ * 原始 MERGE_ROW_SPANS 基于全量数据计算,
663
+ * 筛选后行数和顺序变化,需要基于实际数据重新计算
664
+ */
665
+ function recalcMergeRowSpans(data) {
666
+ var _a;
667
+ if (!data || data.length === 0)
668
+ return data;
669
+ // 浅拷贝,避免修改原数据
670
+ var result = data.map(function (item) {
671
+ var _a;
672
+ return (__assign(__assign({}, item), (_a = {}, _a[MERGE_ROW_SPANS] = __assign({}, ((item === null || item === void 0 ? void 0 : item[MERGE_ROW_SPANS]) || {})), _a)));
673
+ });
674
+ // 从第一行获取所有需要合并的 key
675
+ var firstSpans = (_a = result[0]) === null || _a === void 0 ? void 0 : _a[MERGE_ROW_SPANS];
676
+ if (!firstSpans || typeof firstSpans !== "object")
677
+ return result;
678
+ var mergeKeys = Object.keys(firstSpans);
679
+ for (var _b = 0, mergeKeys_1 = mergeKeys; _b < mergeKeys_1.length; _b++) {
680
+ var key = mergeKeys_1[_b];
681
+ var i = 0;
682
+ while (i < result.length) {
683
+ // 合计行独立,rowSpan=1,且打断合并连续性
684
+ if (result[i][IS_SUMMARY]) {
685
+ result[i][MERGE_ROW_SPANS][key] = 1;
686
+ i++;
687
+ continue;
688
+ }
689
+ // 找连续相同值(跳过合计行)
690
+ var span = 1;
691
+ while (i + span < result.length) {
692
+ var next = result[i + span];
693
+ if (next[IS_SUMMARY])
694
+ break;
695
+ if (next[key] !== result[i][key])
696
+ break;
697
+ span++;
698
+ }
699
+ // 设置 rowSpan
700
+ result[i][MERGE_ROW_SPANS][key] = span;
701
+ for (var j = 1; j < span; j++) {
702
+ result[i + j][MERGE_ROW_SPANS][key] = 0;
703
+ }
704
+ i += span;
705
+ }
706
+ }
707
+ return result;
654
708
  }
655
709
 
656
- export { useAddAndDelChange, useAutoMerge, useCalcScrollY, useCustomFilter, useCustomSort, useDateKeys, useEditChange, useMergeAddAndDel, useMergeKeys, useMoveRowChange, useNumKeys, useScuRfresh };
710
+ export { applyCustomFilter, recalcMergeRowSpans, useAddAndDelChange, useAutoMerge, useCalcScrollY, useCustomFilter, useCustomSort, useDateKeys, useEditChange, useMergeAddAndDel, useMergeKeys, useMoveRowChange, useNumKeys, useScuRfresh };
@@ -18,7 +18,7 @@ import { useColumns } from './useColumns.js';
18
18
  import { useDynamicListByColumns } from './useDynamicListByColumns.js';
19
19
  import useSummary from './useSummary.js';
20
20
  import useInnerPagination, { getInnerIndex } from './useInnerPagination.js';
21
- import { useScuRfresh, useCustomSort, useCalcScrollY, useEditChange, useMoveRowChange, useAddAndDelChange, useCustomFilter, useAutoMerge } from './hooks.js';
21
+ import { useScuRfresh, useCustomSort, useCalcScrollY, useEditChange, useMoveRowChange, useAddAndDelChange, useCustomFilter, applyCustomFilter, useAutoMerge, recalcMergeRowSpans } from './hooks.js';
22
22
  import { HTML5Backend } from '../node_modules/react-dnd-html5-backend/dist/index.js';
23
23
  import { scrollTo, VList } from '../node_modules/virtuallist-antd/dist/index.es.js';
24
24
  import useTableValidate, { tableValidate } from './useTableValidate.js';
@@ -103,6 +103,8 @@ var Table = function (props) {
103
103
  var currentTableDataSource = sortDataSource ? sortDataSource : dataSource;
104
104
  // 将表格数据 在 Ref中 存储一份
105
105
  var dataSourceRef = useLatest(currentTableDataSource);
106
+ // 筛选候选值数据源 ref:跟踪含维度合计行的最终数据,供 FilterDropdown 使用
107
+ var mergedDataForFilterRef = useRef(currentTableDataSource);
106
108
  var hiddenDelBtnHandleRef = useLatest(hiddenDelBtnHandle);
107
109
  var hiddenAddBtnHandleRef = useLatest(hiddenAddBtnHandle);
108
110
  var scrolly = useCalcScrollY(isAutoScrollY, autoScrollYMarginBottom, tableId);
@@ -156,7 +158,7 @@ var Table = function (props) {
156
158
  filterConfigRef: filterConfigRef,
157
159
  });
158
160
  // 表格内部自定义处理过滤,不走antd内部
159
- var _y = useCustomFilter(currentTableDataSource, columns), filterDataSource = _y[0], handleFilterConfigChange = _y[1];
161
+ var _y = useCustomFilter(currentTableDataSource, columns), handleFilterConfigChange = _y[1], filterConfig = _y[2];
160
162
  // 处理列配置信息 得到新的列配置信息
161
163
  var _z = useColumns(columns, {
162
164
  // 动态列配置相关信息
@@ -168,6 +170,7 @@ var Table = function (props) {
168
170
  onCurrentListChange: onCurrentListChange,
169
171
  dataSource: currentTableDataSource,
170
172
  dataSourceRef: dataSourceRef,
173
+ mergedDataForFilterRef: mergedDataForFilterRef,
171
174
  onEditableSave: onEditableSave,
172
175
  isEdit: isEdit,
173
176
  isAdd: isAdd,
@@ -204,13 +207,30 @@ var Table = function (props) {
204
207
  isDynamicColumnTextEnable: isDynamicColumnTextEnable,
205
208
  }), _newColumns = _z.newColumns, newRowSelection = _z.rowSelection;
206
209
  // 处理表格合并和维度
207
- var _0 = useAutoMerge(filterDataSource, _newColumns, {
210
+ // isAutoMerge 时维度合计基于全量数据(合计值不随筛选变化),筛选在合计之后执行
211
+ var autoMergeInput = isAutoMerge
212
+ ? currentTableDataSource
213
+ : applyCustomFilter(currentTableDataSource, filterConfig, _newColumns);
214
+ var _0 = useAutoMerge(autoMergeInput, _newColumns, {
208
215
  isAutoMerge: isAutoMerge,
209
216
  isDimensionDynamic: isDimensionDynamic,
210
217
  isDimensionMergeChildren: isDimensionMergeChildren,
211
218
  order: order,
212
219
  dimensionCustomSumKeys: dimensionCustomSumKeys,
213
220
  }), newDataSource = _0[0], newColumns = _0[1];
221
+ // isAutoMerge 时在含合计行的全量数据上应用筛选,使合计行也参与筛选
222
+ var finalDataSource = useMemo(function () {
223
+ var result = isAutoMerge
224
+ ? applyCustomFilter(newDataSource, filterConfig, _newColumns)
225
+ : newDataSource;
226
+ // 仅在筛选后行数减少时重新计算合并 rowSpan(筛选前保持原始逻辑)
227
+ if (isAutoMerge && result.length < newDataSource.length) {
228
+ result = recalcMergeRowSpans(result);
229
+ }
230
+ return result;
231
+ }, [isAutoMerge, newDataSource, filterConfig, _newColumns]);
232
+ // 更新筛选候选值数据源为含合计行的全量数据(不随筛选变化)
233
+ mergedDataForFilterRef.current = newDataSource;
214
234
  // 表格验证
215
235
  var _1 = useTableValidate(), tableRef = _1.tableRef, getCurrentTable = _1.getCurrentTable, clearErrorClass = _1.clearErrorClass;
216
236
  // 内部表格总结栏
@@ -464,7 +484,7 @@ var Table = function (props) {
464
484
  scroll: proxyScroll,
465
485
  }).tipRef;
466
486
  // 表格
467
- var SingleTable = (jsx(Table$1, __assign({ className: classes, bordered: bordered, dataSource: newDataSource, columns: newColumns, components: componentsMemo, onRow: onRow, summary: getSummaryHandle, rowSelection: newRowSelection, pagination: isInnerPagination
487
+ var SingleTable = (jsx(Table$1, __assign({ className: classes, bordered: bordered, dataSource: finalDataSource, columns: newColumns, components: componentsMemo, onRow: onRow, summary: getSummaryHandle, rowSelection: newRowSelection, pagination: isInnerPagination
468
488
  ? pagination
469
489
  ? pagination
470
490
  : paginationConfig
@@ -26,7 +26,7 @@ import ModalComponent from '../modal/modal.js';
26
26
  function useColumns(columns, options) {
27
27
  var _this = this;
28
28
  var _a, _b;
29
- var dynamicKey = options.dynamicKey, isRemeberFilter = options.isRemeberFilter, hiddenDynamicIcon = options.hiddenDynamicIcon, currentDynamicList = options.currentDynamicList, dataSource = options.dataSource, dataSourceRef = options.dataSourceRef, onEditableSave = options.onEditableSave, isEdit = options.isEdit, isAdd = options.isAdd, isTheadTitleAdd = options.isTheadTitleAdd, isDel = options.isDel, delPopTitle = options.delPopTitle, dynamicSettingRef = options.dynamicSettingRef, onCurrentListChange = options.onCurrentListChange, onAddAndDel = options.onAddAndDel, getRefreshScuCell = options.getRefreshScuCell, isDelAll = options.isDelAll, currentPage = options.currentPage, onTableChange = options.onTableChange, order = options.order, setOrder = options.setOrder, customSortHandle = options.customSortHandle, isResizableColumn = options.isResizableColumn, isResizableTitleEllipsis = options.isResizableTitleEllipsis, isRealTimeValidate = options.isRealTimeValidate, hiddenDelBtnHandleRef = options.hiddenDelBtnHandleRef, hiddenAddBtnHandleRef = options.hiddenAddBtnHandleRef, rowKey = options.rowKey, filterConfigRef = options.filterConfigRef, rowSelection = options.rowSelection, addAndDelProps = options.addAndDelProps, headerAlign = options.headerAlign, mode = options.mode, isAutoMerge = options.isAutoMerge, handleFilterConfigChange = options.handleFilterConfigChange, _c = options.isAutoMergeAddAndDel, isAutoMergeAddAndDel = _c === void 0 ? true : _c, isDynamicColumnTextEnable = options.isDynamicColumnTextEnable;
29
+ var dynamicKey = options.dynamicKey, isRemeberFilter = options.isRemeberFilter, hiddenDynamicIcon = options.hiddenDynamicIcon, currentDynamicList = options.currentDynamicList, dataSource = options.dataSource, dataSourceRef = options.dataSourceRef, mergedDataForFilterRef = options.mergedDataForFilterRef, onEditableSave = options.onEditableSave, isEdit = options.isEdit, isAdd = options.isAdd, isTheadTitleAdd = options.isTheadTitleAdd, isDel = options.isDel, delPopTitle = options.delPopTitle, dynamicSettingRef = options.dynamicSettingRef, onCurrentListChange = options.onCurrentListChange, onAddAndDel = options.onAddAndDel, getRefreshScuCell = options.getRefreshScuCell, isDelAll = options.isDelAll, currentPage = options.currentPage, onTableChange = options.onTableChange, order = options.order, setOrder = options.setOrder, customSortHandle = options.customSortHandle, isResizableColumn = options.isResizableColumn, isResizableTitleEllipsis = options.isResizableTitleEllipsis, isRealTimeValidate = options.isRealTimeValidate, hiddenDelBtnHandleRef = options.hiddenDelBtnHandleRef, hiddenAddBtnHandleRef = options.hiddenAddBtnHandleRef, rowKey = options.rowKey, filterConfigRef = options.filterConfigRef, rowSelection = options.rowSelection, addAndDelProps = options.addAndDelProps, headerAlign = options.headerAlign, mode = options.mode, isAutoMerge = options.isAutoMerge, handleFilterConfigChange = options.handleFilterConfigChange, _c = options.isAutoMergeAddAndDel, isAutoMergeAddAndDel = _c === void 0 ? true : _c, isDynamicColumnTextEnable = options.isDynamicColumnTextEnable;
30
30
  var newColumns = getTableColumns(columns, currentDynamicList).columns;
31
31
  // 处理自动合并的加减和选择框
32
32
  var _d = useMergeAddAndDel({
@@ -108,8 +108,9 @@ function useColumns(columns, options) {
108
108
  * @returns
109
109
  */
110
110
  _column.filterDropdown = function (_a) {
111
+ var _b;
111
112
  var selectedKeys = _a.selectedKeys, setSelectedKeys = _a.setSelectedKeys, confirm = _a.confirm, clearFilters = _a.clearFilters;
112
- return (jsx(FilterDropdown, { dataSource: dataSource, dataSourceRef: dataSourceRef, filterKey: _key, selectedKeys: selectedKeys, setSelectedKeys: setSelectedKeys, confirm: confirm, clearFilters: clearFilters, searchValueInputRef: searchValueInputRef, defaultFilterSearchValue: isRemeberFilter ? input_1 : undefined, defaultFilterSearchCheckboxValue: isRemeberFilter ? checkbox_1 : undefined, onFilterChange: function (filter) {
113
+ return (jsx(FilterDropdown, { dataSource: (_b = mergedDataForFilterRef === null || mergedDataForFilterRef === void 0 ? void 0 : mergedDataForFilterRef.current) !== null && _b !== void 0 ? _b : dataSource, dataSourceRef: dataSourceRef, filterKey: _key, selectedKeys: selectedKeys, setSelectedKeys: setSelectedKeys, confirm: confirm, clearFilters: clearFilters, searchValueInputRef: searchValueInputRef, defaultFilterSearchValue: isRemeberFilter ? input_1 : undefined, defaultFilterSearchCheckboxValue: isRemeberFilter ? checkbox_1 : undefined, onFilterChange: function (filter) {
113
114
  var _a, _b;
114
115
  var _c;
115
116
  // 实时记录下当前的值