zmdms-webui 2.0.5 → 2.0.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.
@@ -68,9 +68,9 @@ var DynamicDrawer = function (props, ref) {
68
68
  if (oldGroup !== dragGroup) {
69
69
  return true;
70
70
  }
71
- if ((oldItem === null || oldItem === void 0 ? void 0 : oldItem.dimensionPriority) !== undefined) {
72
- if ((dragItem === null || dragItem === void 0 ? void 0 : dragItem.dimensionPriority) === undefined ||
73
- (oldItem === null || oldItem === void 0 ? void 0 : oldItem.dimensionPriority) < (dragItem === null || dragItem === void 0 ? void 0 : dragItem.dimensionPriority)) {
71
+ if ((oldItem === null || oldItem === void 0 ? void 0 : oldItem.dimensionPriority) !== undefined &&
72
+ (dragItem === null || dragItem === void 0 ? void 0 : dragItem.dimensionPriority) !== undefined) {
73
+ if ((oldItem === null || oldItem === void 0 ? void 0 : oldItem.dimensionPriority) < (dragItem === null || dragItem === void 0 ? void 0 : dragItem.dimensionPriority)) {
74
74
  myMessage.warning("".concat(dragItem === null || dragItem === void 0 ? void 0 : dragItem.label, "\u4E0D\u80FD\u6392\u5E8F\u5230").concat(oldItem === null || oldItem === void 0 ? void 0 : oldItem.label).concat(isUp ? "前面" : "后面"));
75
75
  return false;
76
76
  }
@@ -2,9 +2,9 @@ import { __assign } from '../../_virtual/_tslib.js';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { useMemo, useEffect, useState } from 'react';
4
4
  import { useLatest } from 'ahooks';
5
+ import myMessage from '../../message/index.js';
5
6
  import MemoInput from '../../input/input.js';
6
7
  import ButtonCom from '../../button/button.js';
7
- import myMessage from '../../message/index.js';
8
8
  import { Checkbox, Tooltip } from 'antd';
9
9
  import QuestionCircleOutlined from '../../node_modules/@ant-design/icons/es/icons/QuestionCircleOutlined.js';
10
10
 
@@ -502,7 +502,6 @@ function applyExcelStyles(worksheet, data, numKeys, columns, headerRowCount, has
502
502
  var isSubtotal = rowData.__is_summary__;
503
503
  for (var c = 1; c <= totalCols; c++) {
504
504
  var cell = worksheet.getCell(headerRowCount + rowIndex + 1, c);
505
- var currentColumn = columns && Array.isArray(columns) ? columns[c - 1] : undefined;
506
505
  var base = isSubtotal ? summaryStyle : normalStyle;
507
506
  var columnAlign = columns && Array.isArray(columns)
508
507
  ? (_c = columns[c - 1]) === null || _c === void 0 ? void 0 : _c.align
@@ -562,8 +561,8 @@ function useExcelExport(records, config) {
562
561
  var columns = config.columns, isAutoMerge = config.isAutoMerge, columnHeaders = config.columnHeaders, summaryConfig = config.summaryConfig;
563
562
  var mergeKeys = useMergeKeys(columns, isAutoMerge);
564
563
  var numKeys = useNumKeys(columns);
565
- var exportFunction = useMemoizedFn(function (fileName, _a) {
566
- var topDescription = _a.topDescription, topDescriptionRowHeight = _a.topDescriptionRowHeight, time = _a.time;
564
+ var exportFunction = useMemoizedFn(function (fileName, options) {
565
+ var _a = options || {}, topDescription = _a.topDescription, topDescriptionRowHeight = _a.topDescriptionRowHeight, time = _a.time;
567
566
  if (!fileName.includes(".xlsx")) {
568
567
  fileName = fileName + ".xlsx";
569
568
  }
@@ -1,10 +1,11 @@
1
1
  import { __assign, __spreadArray } from '../_virtual/_tslib.js';
2
2
  import { useCallback, useRef, useState, useEffect, useMemo } from 'react';
3
+ import { useMemoizedFn } from 'ahooks';
3
4
  import update from '../node_modules/immutability-helper/index.js';
4
5
  import { getInnerIndex } from './useInnerPagination.js';
5
6
  import { flattenRecordsOptimized } from './utils.js';
6
7
  import { IS_SUMMARY, MERGE_INDEX, MERGE_ROW_SPANS } from './constant.js';
7
- import { useMemoizedFn } from 'ahooks';
8
+ import { filterHandle } from './components/FilterDropdown.js';
8
9
 
9
10
  /**
10
11
  * @param dataSourceRef 数据引用
@@ -398,7 +399,7 @@ var useNumKeys = function (columns) {
398
399
  * 自动合并的一些处理
399
400
  */
400
401
  function useAutoMerge(dataSource, columns, _a) {
401
- var isAutoMerge = _a.isAutoMerge, isDimensionDynamic = _a.isDimensionDynamic;
402
+ var isAutoMerge = _a.isAutoMerge, isDimensionDynamic = _a.isDimensionDynamic, order = _a.order, dimensionCustomSumKeys = _a.dimensionCustomSumKeys;
402
403
  // 计算需要合并的字段key集合
403
404
  var mergeKeys = useMergeKeys(columns, isAutoMerge);
404
405
  var firstMergeKey = mergeKeys === null || mergeKeys === void 0 ? void 0 : mergeKeys[0];
@@ -422,7 +423,7 @@ function useAutoMerge(dataSource, columns, _a) {
422
423
  if (!mergeKeys)
423
424
  return dataSource;
424
425
  else {
425
- var newDataSource_2 = flattenRecordsOptimized(__spreadArray([], (dataSource || []), true), mergeKeys, dimensionSummaryKeys, summaryKeys, isDimensionDynamic);
426
+ var newDataSource_2 = flattenRecordsOptimized(__spreadArray([], (dataSource || []), true), mergeKeys, dimensionSummaryKeys, summaryKeys, isDimensionDynamic, order, dimensionCustomSumKeys);
426
427
  return newDataSource_2;
427
428
  }
428
429
  }
@@ -433,6 +434,8 @@ function useAutoMerge(dataSource, columns, _a) {
433
434
  dimensionSummaryKeys,
434
435
  summaryKeys,
435
436
  isDimensionDynamic,
437
+ order,
438
+ dimensionCustomSumKeys,
436
439
  ]);
437
440
  var newColumns = useMemo(function () {
438
441
  var _columns = columns;
@@ -517,6 +520,48 @@ function useMergeAddAndDel(_a) {
517
520
  return addAndDelProps;
518
521
  }, [addAndDelProps, isAutoMerge, firstMergeKey]);
519
522
  return [newRowSelection, newAddAndDelProps];
523
+ }
524
+ /**
525
+ * 自定义处理过滤逻辑
526
+ */
527
+ function useCustomFilter(dataSource) {
528
+ var _a = useState(), filterConfig = _a[0], setFilterConfig = _a[1];
529
+ var newDataSource = useMemo(function () {
530
+ if (!filterConfig)
531
+ return dataSource;
532
+ return dataSource.filter(function (item) {
533
+ var keys = Object.keys(filterConfig);
534
+ for (var i = 0; i < keys.length; i++) {
535
+ var key = keys[i];
536
+ var filter = filterConfig[key];
537
+ if (filter.input) {
538
+ if (!filterHandle(filter.input, item, key)) {
539
+ return false;
540
+ }
541
+ }
542
+ if (filter.checkbox && filter.checkbox.length > 0) {
543
+ var flag = false;
544
+ for (var _a = 0, _b = filter.checkbox; _a < _b.length; _a++) {
545
+ var value = _b[_a];
546
+ if (filterHandle(value, item, key)) {
547
+ flag = true;
548
+ break;
549
+ }
550
+ }
551
+ if (!flag) {
552
+ return false;
553
+ }
554
+ }
555
+ }
556
+ return true;
557
+ });
558
+ }, [dataSource, filterConfig]);
559
+ var handleFilterConfigChange = useMemoizedFn(function (value) {
560
+ setFilterConfig(function (oldValue) {
561
+ return __assign(__assign({}, oldValue), value);
562
+ });
563
+ });
564
+ return [newDataSource, handleFilterConfigChange];
520
565
  }
521
566
 
522
- export { useAddAndDelChange, useAutoMerge, useCalcScrollY, useCustomSort, useEditChange, useMergeAddAndDel, useMergeKeys, useMoveRowChange, useNumKeys, useScuRfresh };
567
+ export { useAddAndDelChange, useAutoMerge, useCalcScrollY, useCustomFilter, useCustomSort, useEditChange, useMergeAddAndDel, useMergeKeys, useMoveRowChange, useNumKeys, useScuRfresh };
@@ -512,6 +512,19 @@ interface ITableProps<RecordType> extends Omit<TableProps<RecordType>, "columns"
512
512
  * 开启维度自定义。开启后,会根据columns中的isDimension属性来是否开启维度自定义,需要合并行时,需要开启这个属性isAutoMerge
513
513
  */
514
514
  isDimensionDynamic?: boolean;
515
+ /**
516
+ * 开启维度自定义后,开启维度合计的字段,与column中的isSummary相同,主要用于自定义合计字段
517
+ */
518
+ dimensionCustomSumKeys?: (string | {
519
+ /** 自定义合计的key */
520
+ key: string;
521
+ /** 自定义合计的值 */
522
+ value: (record: any) => string | number;
523
+ /** 合计方式 */
524
+ summaryType?: "sum" | "first" | "computed";
525
+ /** 当summaryType为computed时,用于计算合计值的函数 */
526
+ computedSummary?: (items: any[], summaryRow: any) => string | number;
527
+ })[];
515
528
  /**
516
529
  * 开启自动合并行
517
530
  */
@@ -17,7 +17,7 @@ import { useColumns } from './useColumns.js';
17
17
  import { useDynamicListByColumns } from './useDynamicListByColumns.js';
18
18
  import useSummary from './useSummary.js';
19
19
  import useInnerPagination, { getInnerIndex } from './useInnerPagination.js';
20
- import { useScuRfresh, useCustomSort, useCalcScrollY, useEditChange, useMoveRowChange, useAddAndDelChange, useAutoMerge } from './hooks.js';
20
+ import { useScuRfresh, useCustomSort, useCalcScrollY, useEditChange, useMoveRowChange, useAddAndDelChange, useCustomFilter, useAutoMerge } from './hooks.js';
21
21
  import { HTML5Backend } from '../node_modules/react-dnd-html5-backend/dist/index.js';
22
22
  import { VList, scrollTo } from '../node_modules/virtuallist-antd/dist/index.es.js';
23
23
  import useTableValidate, { tableValidate } from './useTableValidate.js';
@@ -41,7 +41,7 @@ import { DndProvider } from '../node_modules/react-dnd/dist/core/DndProvider.js'
41
41
  // completed: 实现从execl复制到表格中的功能
42
42
  var Table = function (props) {
43
43
  // console.log("表格渲染");
44
- var className = props.className, _a = props.bordered, bordered = _a === void 0 ? true : _a, _b = props.pagination, pagination = _b === void 0 ? false : _b, isFlex = props.isFlex; props.tablePreferences; var dynamicKey = props.dynamicKey, dynamicVersion = props.dynamicVersion, customDynamicListHandle = props.customDynamicListHandle, isRemeberFilter = props.isRemeberFilter, _c = props.isOrderUpdateData, isOrderUpdateData = _c === void 0 ? true : _c, hiddenDynamicIcon = props.hiddenDynamicIcon, _columns = props.columns, dataSource = props.dataSource, onTableChange = props.onTableChange, isEdit = props.isEdit, isMove = props.isMove, isAdd = props.isAdd, hiddenAddBtnHandle = props.hiddenAddBtnHandle, _d = props.isTheadTitleAdd, isTheadTitleAdd = _d === void 0 ? true : _d, addMode = props.addMode, addCallback = props.addCallback, isDel = props.isDel, delPopTitle = props.delPopTitle, hiddenDelBtnHandle = props.hiddenDelBtnHandle, _e = props.isDelAll, isDelAll = _e === void 0 ? true : _e, isAddAndDelAuto = props.isAddAndDelAuto, summaryConfig = props.summaryConfig, _f = props.summaryFixed, summaryFixed = _f === void 0 ? true : _f, isInnerPagination = props.isInnerPagination, _g = props.innerPaginationPageSize, innerPaginationPageSize = _g === void 0 ? 30 : _g, _h = props.innerPaginationPosition, innerPaginationPosition = _h === void 0 ? INNER_TABLE_PAGINATION_POSITION : _h, _j = props.innerPaginationPageSizeOptions, innerPaginationPageSizeOptions = _j === void 0 ? INNER_TABLE_PAGINATION_PAGESIZEOPTIONS : _j, innerPaginationConfig = props.innerPaginationConfig, tableRefHandle = props.tableRefHandle, tableName = props.tableName, serviceOrder = props.serviceOrder, differences = props.differences, virtualKey = props.virtualKey, _k = props.isResizableColumn, isResizableColumn = _k === void 0 ? true : _k, _l = props.isResizableTitleEllipsis, isResizableTitleEllipsis = _l === void 0 ? true : _l, _m = props.isRealTimeValidate, isRealTimeValidate = _m === void 0 ? true : _m, isMarginTop = props.isMarginTop, isMarginBottom = props.isMarginBottom, scroll = props.scroll, addAndDelProps = props.addAndDelProps, _o = props.autoScrollYMarginBottom, autoScrollYMarginBottom = _o === void 0 ? 65 : _o, _p = props.isAutoScrollY, isAutoScrollY = _p === void 0 ? false : _p, tableId = props.tableId, extraOnRow = props.onRow, fixedRowsCount = props.fixedRowsCount, fixedRowsConfig = props.fixedRowsConfig, headerAlign = props.headerAlign, isDimensionDynamic = props.isDimensionDynamic, isAutoMerge = props.isAutoMerge, mode = props.mode, rowSelection = props.rowSelection, isContextMenu = props.isContextMenu, isFullscreenHandle = props.isFullscreenHandle, resetProps = __rest(props, ["className", "bordered", "pagination", "isFlex", "tablePreferences", "dynamicKey", "dynamicVersion", "customDynamicListHandle", "isRemeberFilter", "isOrderUpdateData", "hiddenDynamicIcon", "columns", "dataSource", "onTableChange", "isEdit", "isMove", "isAdd", "hiddenAddBtnHandle", "isTheadTitleAdd", "addMode", "addCallback", "isDel", "delPopTitle", "hiddenDelBtnHandle", "isDelAll", "isAddAndDelAuto", "summaryConfig", "summaryFixed", "isInnerPagination", "innerPaginationPageSize", "innerPaginationPosition", "innerPaginationPageSizeOptions", "innerPaginationConfig", "tableRefHandle", "tableName", "serviceOrder", "differences", "virtualKey", "isResizableColumn", "isResizableTitleEllipsis", "isRealTimeValidate", "isMarginTop", "isMarginBottom", "scroll", "addAndDelProps", "autoScrollYMarginBottom", "isAutoScrollY", "tableId", "onRow", "fixedRowsCount", "fixedRowsConfig", "headerAlign", "isDimensionDynamic", "isAutoMerge", "mode", "rowSelection", "isContextMenu", "isFullscreenHandle"]);
44
+ var className = props.className, _a = props.bordered, bordered = _a === void 0 ? true : _a, _b = props.pagination, pagination = _b === void 0 ? false : _b, isFlex = props.isFlex; props.tablePreferences; var dynamicKey = props.dynamicKey, dynamicVersion = props.dynamicVersion, customDynamicListHandle = props.customDynamicListHandle, isRemeberFilter = props.isRemeberFilter, _c = props.isOrderUpdateData, isOrderUpdateData = _c === void 0 ? true : _c, hiddenDynamicIcon = props.hiddenDynamicIcon, _columns = props.columns, dataSource = props.dataSource, onTableChange = props.onTableChange, isEdit = props.isEdit, isMove = props.isMove, isAdd = props.isAdd, hiddenAddBtnHandle = props.hiddenAddBtnHandle, _d = props.isTheadTitleAdd, isTheadTitleAdd = _d === void 0 ? true : _d, addMode = props.addMode, addCallback = props.addCallback, isDel = props.isDel, delPopTitle = props.delPopTitle, hiddenDelBtnHandle = props.hiddenDelBtnHandle, _e = props.isDelAll, isDelAll = _e === void 0 ? true : _e, isAddAndDelAuto = props.isAddAndDelAuto, summaryConfig = props.summaryConfig, _f = props.summaryFixed, summaryFixed = _f === void 0 ? true : _f, isInnerPagination = props.isInnerPagination, _g = props.innerPaginationPageSize, innerPaginationPageSize = _g === void 0 ? 30 : _g, _h = props.innerPaginationPosition, innerPaginationPosition = _h === void 0 ? INNER_TABLE_PAGINATION_POSITION : _h, _j = props.innerPaginationPageSizeOptions, innerPaginationPageSizeOptions = _j === void 0 ? INNER_TABLE_PAGINATION_PAGESIZEOPTIONS : _j, innerPaginationConfig = props.innerPaginationConfig, tableRefHandle = props.tableRefHandle, tableName = props.tableName, serviceOrder = props.serviceOrder, differences = props.differences, virtualKey = props.virtualKey, _k = props.isResizableColumn, isResizableColumn = _k === void 0 ? true : _k, _l = props.isResizableTitleEllipsis, isResizableTitleEllipsis = _l === void 0 ? true : _l, _m = props.isRealTimeValidate, isRealTimeValidate = _m === void 0 ? true : _m, isMarginTop = props.isMarginTop, isMarginBottom = props.isMarginBottom, scroll = props.scroll, addAndDelProps = props.addAndDelProps, _o = props.autoScrollYMarginBottom, autoScrollYMarginBottom = _o === void 0 ? 65 : _o, _p = props.isAutoScrollY, isAutoScrollY = _p === void 0 ? false : _p, tableId = props.tableId, extraOnRow = props.onRow, fixedRowsCount = props.fixedRowsCount, fixedRowsConfig = props.fixedRowsConfig, headerAlign = props.headerAlign, isDimensionDynamic = props.isDimensionDynamic, dimensionCustomSumKeys = props.dimensionCustomSumKeys, isAutoMerge = props.isAutoMerge, mode = props.mode, rowSelection = props.rowSelection, isContextMenu = props.isContextMenu, isFullscreenHandle = props.isFullscreenHandle, resetProps = __rest(props, ["className", "bordered", "pagination", "isFlex", "tablePreferences", "dynamicKey", "dynamicVersion", "customDynamicListHandle", "isRemeberFilter", "isOrderUpdateData", "hiddenDynamicIcon", "columns", "dataSource", "onTableChange", "isEdit", "isMove", "isAdd", "hiddenAddBtnHandle", "isTheadTitleAdd", "addMode", "addCallback", "isDel", "delPopTitle", "hiddenDelBtnHandle", "isDelAll", "isAddAndDelAuto", "summaryConfig", "summaryFixed", "isInnerPagination", "innerPaginationPageSize", "innerPaginationPosition", "innerPaginationPageSizeOptions", "innerPaginationConfig", "tableRefHandle", "tableName", "serviceOrder", "differences", "virtualKey", "isResizableColumn", "isResizableTitleEllipsis", "isRealTimeValidate", "isMarginTop", "isMarginBottom", "scroll", "addAndDelProps", "autoScrollYMarginBottom", "isAutoScrollY", "tableId", "onRow", "fixedRowsCount", "fixedRowsConfig", "headerAlign", "isDimensionDynamic", "dimensionCustomSumKeys", "isAutoMerge", "mode", "rowSelection", "isContextMenu", "isFullscreenHandle"]);
45
45
  var classes = classNames("ztxk-table", className, {
46
46
  "ztxk-table--flex": isFlex,
47
47
  });
@@ -129,8 +129,10 @@ var Table = function (props) {
129
129
  currentPage: currentPage,
130
130
  filterConfigRef: filterConfigRef,
131
131
  });
132
+ // 表格内部自定义处理过滤,不走antd内部
133
+ var _u = useCustomFilter(currentTableDataSource), filterDataSource = _u[0], handleFilterConfigChange = _u[1];
132
134
  // 处理列配置信息 得到新的列配置信息
133
- var _u = useColumns(columns, {
135
+ var _v = useColumns(columns, {
134
136
  // 动态列配置相关信息
135
137
  dynamicKey: dynamicKey,
136
138
  isRemeberFilter: isRemeberFilter,
@@ -171,12 +173,15 @@ var Table = function (props) {
171
173
  headerAlign: headerAlign,
172
174
  mode: mode,
173
175
  isAutoMerge: isAutoMerge,
174
- }), _newColumns = _u.newColumns, newRowSelection = _u.rowSelection;
176
+ handleFilterConfigChange: handleFilterConfigChange,
177
+ }), _newColumns = _v.newColumns, newRowSelection = _v.rowSelection;
175
178
  // 处理表格合并和维度
176
- var _v = useAutoMerge(currentTableDataSource, _newColumns, {
179
+ var _w = useAutoMerge(filterDataSource, _newColumns, {
177
180
  isAutoMerge: isAutoMerge,
178
181
  isDimensionDynamic: isDimensionDynamic,
179
- }), newDataSource = _v[0], newColumns = _v[1];
182
+ order: order,
183
+ dimensionCustomSumKeys: dimensionCustomSumKeys,
184
+ }), newDataSource = _w[0], newColumns = _w[1];
180
185
  // 内部表格总结栏
181
186
  var getSummaryHandle = useSummary(summaryConfig, newColumns, {
182
187
  summaryFixed: summaryFixed,
@@ -186,7 +191,7 @@ var Table = function (props) {
186
191
  isDel: isDel,
187
192
  });
188
193
  // 表格验证
189
- var _w = useTableValidate(), tableRef = _w.tableRef, getCurrentTable = _w.getCurrentTable, clearErrorClass = _w.clearErrorClass;
194
+ var _x = useTableValidate(), tableRef = _x.tableRef, getCurrentTable = _x.getCurrentTable, clearErrorClass = _x.clearErrorClass;
190
195
  // 虚拟滚动选项
191
196
  var vComponents = useMemo(function () {
192
197
  if (virtualKey) {
@@ -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;
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;
30
30
  var newColumns = getTableColumns(columns, currentDynamicList).columns;
31
31
  // 处理自动合并的加减和选择框
32
32
  var _c = useMergeAddAndDel({
@@ -109,27 +109,30 @@ function useColumns(columns, options) {
109
109
  _column.filterDropdown = function (_a) {
110
110
  var selectedKeys = _a.selectedKeys, setSelectedKeys = _a.setSelectedKeys, confirm = _a.confirm, clearFilters = _a.clearFilters;
111
111
  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) {
112
- var _a;
113
- var _b;
112
+ var _a, _b;
113
+ var _c;
114
114
  // 实时记录下当前的值
115
115
  var filteredValue = createFilterValue(filter === null || filter === void 0 ? void 0 : filter.input, filter === null || filter === void 0 ? void 0 : filter.checkbox);
116
116
  filterConfigRef.current = (_a = {},
117
117
  _a[_key] = filteredValue,
118
118
  _a);
119
+ handleFilterConfigChange === null || handleFilterConfigChange === void 0 ? void 0 : handleFilterConfigChange((_b = {},
120
+ _b[_key] = filter,
121
+ _b));
119
122
  if (!isRemeberFilter) {
120
123
  return;
121
124
  }
122
125
  // 如果有持久化 那么更新持久化数据
123
- var _c = getColumnsItem({
126
+ var _d = getColumnsItem({
124
127
  currentDynamicList: currentDynamicList,
125
128
  currentKey: _key,
126
129
  keyIndex: keyIndex,
127
- }), result = _c.result, newList = _c.newList;
130
+ }), result = _d.result, newList = _d.newList;
128
131
  if (result) {
129
132
  result.filter = filter;
130
133
  }
131
134
  if (dynamicKey) {
132
- (_b = dynamicSettingRef === null || dynamicSettingRef === void 0 ? void 0 : dynamicSettingRef.current) === null || _b === void 0 ? void 0 : _b.updateList(newList);
135
+ (_c = dynamicSettingRef === null || dynamicSettingRef === void 0 ? void 0 : dynamicSettingRef.current) === null || _c === void 0 ? void 0 : _c.updateList(newList);
133
136
  }
134
137
  else {
135
138
  onCurrentListChange === null || onCurrentListChange === void 0 ? void 0 : onCurrentListChange(newList);
@@ -145,9 +148,12 @@ function useColumns(columns, options) {
145
148
  _column.filteredValue = filteredValue;
146
149
  }
147
150
  _column.filterIcon = function () { return jsx(SearchOutlined, {}); };
148
- _column.onFilter = function (value, record) {
149
- return filterHandle(value, record, _key);
150
- };
151
+ // 自动合并单元格的情况下,不进行内部过滤
152
+ if (!isAutoMerge) {
153
+ _column.onFilter = function (value, record) {
154
+ return filterHandle(value, record, _key);
155
+ };
156
+ }
151
157
  _column.onFilterDropdownOpenChange = function (visible) {
152
158
  if (visible) {
153
159
  setTimeout(function () {
@@ -337,7 +343,11 @@ function useColumns(columns, options) {
337
343
  };
338
344
  var __render__1 = _column.render;
339
345
  // 代理render方法,像外部传入一些事件给外部调用
346
+ // 自定义合计行,不需要render属性
340
347
  _column.render = function (text, record, index) {
348
+ if (record[IS_SUMMARY]) {
349
+ return text;
350
+ }
341
351
  return __render__1(text, record, index, options_1);
342
352
  };
343
353
  }
@@ -449,7 +449,7 @@ function startColumnInsertTableData(options) {
449
449
  * @param summaryKeys 合计字段
450
450
  * @param isDimensionDynamic 维度合并
451
451
  */
452
- function flattenRecordsOptimized(records, mergeKeys, dimensionSummaryKeys, summaryKeys, isDimensionDynamic) {
452
+ function flattenRecordsOptimized(records, mergeKeys, dimensionSummaryKeys, summaryKeys, isDimensionDynamic, order, dimensionCustomSumKeys) {
453
453
  var _a;
454
454
  if (!records ||
455
455
  records.length === 0 ||
@@ -458,14 +458,27 @@ function flattenRecordsOptimized(records, mergeKeys, dimensionSummaryKeys, summa
458
458
  return records;
459
459
  }
460
460
  // 0. 首先根据维度字段对数据进行排序
461
- var result = isDimensionDynamic
462
- ? sortByDimensions(__spreadArray([], records, true), mergeKeys)
463
- : __spreadArray([], records, true);
461
+ var result = [];
462
+ // 如果order没有排序方向,但isDimensionDynamic为true,则按维度字段排序
463
+ if (isDimensionDynamic) {
464
+ result = sortByDimensions(__spreadArray([], records, true), mergeKeys);
465
+ }
466
+ // 否则保持原样
467
+ else {
468
+ result = __spreadArray([], records, true);
469
+ }
464
470
  // 1. 如果开启了维度合并,按所有 mergeKeys 的组合来计算合计值
465
471
  if (isDimensionDynamic && mergeKeys.length > 0) {
466
- var groupedResult = groupByLastMergeKey(result, mergeKeys, summaryKeys);
472
+ var groupedResult = groupByLastMergeKey(result, mergeKeys, summaryKeys, dimensionCustomSumKeys);
467
473
  result = groupedResult;
468
474
  }
475
+ // 如果order有排序方向,则按order排序
476
+ result = sortRecords({
477
+ records: result,
478
+ // 开启自定义维度后因为最后一个维度字段会合并为一行,所以可以不排序最后一个维度字段
479
+ mergeKeys: isDimensionDynamic ? mergeKeys.slice(0, -1) : mergeKeys,
480
+ order: order,
481
+ });
469
482
  // 2. 首先插入维度合计行
470
483
  if (dimensionSummaryKeys &&
471
484
  dimensionSummaryKeys.length > 0 &&
@@ -565,22 +578,108 @@ function flattenRecordsOptimized(records, mergeKeys, dimensionSummaryKeys, summa
565
578
  }
566
579
  return result;
567
580
  }
581
+ function sortRecords(_a) {
582
+ var records = _a.records, mergeKeys = _a.mergeKeys, order = _a.order;
583
+ var result = [];
584
+ if (order && order.order) {
585
+ result = sortByDimensions(__spreadArray([], records, true), mergeKeys, order);
586
+ }
587
+ // 否则保持原样
588
+ else {
589
+ result = __spreadArray([], records, true);
590
+ }
591
+ return result;
592
+ }
568
593
  /**
569
594
  * 根据维度字段对数据进行排序
570
595
  * 确保相同维度值的记录连续排列,以便正确进行合并处理
596
+ * @param records 数据记录
597
+ * @param dimensionKeys 维度字段
598
+ * @param order 排序配置
571
599
  */
572
- function sortByDimensions(records, dimensionKeys) {
600
+ function sortByDimensions(records, dimensionKeys, order) {
573
601
  return records.sort(function (a, b) {
574
- for (var i = 0; i < dimensionKeys.length; i++) {
575
- var key = dimensionKeys[i];
576
- var valueA = a[key] || "";
577
- var valueB = b[key] || "";
578
- // 字符串比较
579
- if (valueA < valueB)
580
- return -1;
581
- if (valueA > valueB)
582
- return 1;
583
- // 如果当前字段相等,继续比较下一个字段
602
+ // 如果有排序配置且有排序方向
603
+ if (order && order.order && order.field) {
604
+ var field = order.field, sortOrder = order.order;
605
+ // 找到排序字段在维度字段中的位置
606
+ var sortFieldIndex = dimensionKeys.indexOf(field);
607
+ if (sortFieldIndex !== -1) {
608
+ // 先按维度字段排序到排序字段之前的字段
609
+ for (var i = 0; i < sortFieldIndex; i++) {
610
+ var key = dimensionKeys[i];
611
+ var valueA_1 = a[key] || "";
612
+ var valueB_1 = b[key] || "";
613
+ // 字符串比较
614
+ if (valueA_1 < valueB_1)
615
+ return -1;
616
+ if (valueA_1 > valueB_1)
617
+ return 1;
618
+ // 如果当前字段相等,继续比较下一个字段
619
+ }
620
+ // 按排序字段进行排序
621
+ var valueA = a[field] || "";
622
+ var valueB = b[field] || "";
623
+ var compareResult = 0;
624
+ if (valueA < valueB)
625
+ compareResult = -1;
626
+ else if (valueA > valueB)
627
+ compareResult = 1;
628
+ if (compareResult !== 0) {
629
+ return sortOrder === "ascend" ? compareResult : -compareResult;
630
+ }
631
+ // 如果排序字段相等,继续按后面的维度字段排序
632
+ for (var i = sortFieldIndex + 1; i < dimensionKeys.length; i++) {
633
+ var key = dimensionKeys[i];
634
+ var valueA_2 = a[key] || "";
635
+ var valueB_2 = b[key] || "";
636
+ // 字符串比较
637
+ if (valueA_2 < valueB_2)
638
+ return -1;
639
+ if (valueA_2 > valueB_2)
640
+ return 1;
641
+ // 如果当前字段相等,继续比较下一个字段
642
+ }
643
+ }
644
+ else {
645
+ // 如果排序字段不在维度字段中,按原逻辑排序维度字段
646
+ for (var i = 0; i < dimensionKeys.length; i++) {
647
+ var key = dimensionKeys[i];
648
+ var valueA_3 = a[key] || "";
649
+ var valueB_3 = b[key] || "";
650
+ // 字符串比较
651
+ if (valueA_3 < valueB_3)
652
+ return -1;
653
+ if (valueA_3 > valueB_3)
654
+ return 1;
655
+ // 如果当前字段相等,继续比较下一个字段
656
+ }
657
+ // 最后按排序字段排序
658
+ var valueA = a[field] || "";
659
+ var valueB = b[field] || "";
660
+ var compareResult = 0;
661
+ if (valueA < valueB)
662
+ compareResult = -1;
663
+ else if (valueA > valueB)
664
+ compareResult = 1;
665
+ if (compareResult !== 0) {
666
+ return sortOrder === "ascend" ? compareResult : -compareResult;
667
+ }
668
+ }
669
+ }
670
+ else {
671
+ // 没有排序配置,按原逻辑排序
672
+ for (var i = 0; i < dimensionKeys.length; i++) {
673
+ var key = dimensionKeys[i];
674
+ var valueA = a[key] || "";
675
+ var valueB = b[key] || "";
676
+ // 字符串比较
677
+ if (valueA < valueB)
678
+ return -1;
679
+ if (valueA > valueB)
680
+ return 1;
681
+ // 如果当前字段相等,继续比较下一个字段
682
+ }
584
683
  }
585
684
  return 0; // 所有字段都相等
586
685
  });
@@ -591,7 +690,8 @@ function sortByDimensions(records, dimensionKeys) {
591
690
  */
592
691
  function insertDimensionSummaryRows(records, allDimensionKeys, // 完整的维度字段列表
593
692
  dimensionSummaryKeys, // 需要合计的维度字段
594
- summaryKeys) {
693
+ summaryKeys, order // 排序配置
694
+ ) {
595
695
  var result = __spreadArray([], records, true);
596
696
  // 按维度层级从深到浅处理
597
697
  for (var i = dimensionSummaryKeys.length - 1; i >= 0; i--) {
@@ -616,8 +716,7 @@ summaryKeys) {
616
716
  summaryKeys, currentDimensionIndex);
617
717
  newResult.push(summaryRow);
618
718
  }
619
- // 对插入合计行后的结果重新排序,确保数据顺序正确
620
- result = sortByDimensions(newResult, allDimensionKeys);
719
+ result = newResult;
621
720
  }
622
721
  return result;
623
722
  }
@@ -714,7 +813,7 @@ function hasParentGroupChanged(records, currentIndex, mergeKeys, currentKeyIndex
714
813
  * 确保相同维度组合的记录被正确分组
715
814
  */
716
815
  function groupByLastMergeKey(records, mergeKeys, // 改为传入所有合并键
717
- summaryKeys) {
816
+ summaryKeys, dimensionCustomSumKeys) {
718
817
  var groups = new Map();
719
818
  var _loop_6 = function (record) {
720
819
  var key = mergeKeys.map(function (k) { return record[k]; });
@@ -756,6 +855,83 @@ summaryKeys) {
756
855
  var summaryKey = summaryKeys_2[_d];
757
856
  _loop_7(summaryKey);
758
857
  }
858
+ // 处理dimensionCustomSumKeys的额外合并计算逻辑
859
+ if (dimensionCustomSumKeys && Array.isArray(dimensionCustomSumKeys)) {
860
+ var _loop_8 = function (customSumKey) {
861
+ if (typeof customSumKey === "string") {
862
+ // 如果是字符串,对指定字段进行合计
863
+ summaryRow[customSumKey] = items
864
+ .filter(function (item) { return !isSummaryRow(item); }) // 排除已有的合计行
865
+ .reduce(function (sum, item) {
866
+ var value = parseFloat(item[customSumKey]) || 0;
867
+ return plus(sum, value);
868
+ }, 0);
869
+ }
870
+ else if (typeof customSumKey === "object" &&
871
+ customSumKey.key &&
872
+ typeof customSumKey.value === "function") {
873
+ // 如果是对象,使用自定义的key和value函数
874
+ var key = customSumKey.key, valueFn_1 = customSumKey.value, _f = customSumKey.summaryType, summaryType = _f === void 0 ? "sum" : _f, computedSummary = customSumKey.computedSummary;
875
+ var filteredItems = items.filter(function (item) { return !isSummaryRow(item); }); // 排除已有的合计行
876
+ switch (summaryType) {
877
+ case "sum":
878
+ // 默认累加方式
879
+ var customValues = filteredItems.map(function (item) {
880
+ var result = valueFn_1(item);
881
+ return typeof result === "number"
882
+ ? result
883
+ : parseFloat(result) || 0;
884
+ });
885
+ var customSum = customValues.reduce(function (sum, value) {
886
+ return plus(sum, value);
887
+ }, 0);
888
+ summaryRow[key] = customSum;
889
+ break;
890
+ case "first":
891
+ // 使用第一条记录的值
892
+ if (filteredItems.length > 0) {
893
+ var result_1 = valueFn_1(filteredItems[0]);
894
+ summaryRow[key] =
895
+ typeof result_1 === "number" ? result_1 : parseFloat(result_1) || 0;
896
+ }
897
+ else {
898
+ summaryRow[key] = 0;
899
+ }
900
+ break;
901
+ case "computed":
902
+ // 使用自定义计算函数
903
+ if (typeof computedSummary === "function") {
904
+ var result_2 = computedSummary(filteredItems, summaryRow);
905
+ summaryRow[key] =
906
+ typeof result_2 === "number" ? result_2 : parseFloat(result_2) || 0;
907
+ }
908
+ else {
909
+ console.warn("\u5B57\u6BB5 ".concat(key, " \u8BBE\u7F6E\u4E86 summaryType: 'computed' \u4F46\u6CA1\u6709\u63D0\u4F9B computedSummary \u51FD\u6570"));
910
+ summaryRow[key] = 0;
911
+ }
912
+ break;
913
+ default:
914
+ console.warn("\u672A\u77E5\u7684 summaryType: ".concat(summaryType, "\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u7684 sum \u65B9\u5F0F"));
915
+ // 回退到默认的 sum 方式
916
+ var defaultValues = filteredItems.map(function (item) {
917
+ var result = valueFn_1(item);
918
+ return typeof result === "number"
919
+ ? result
920
+ : parseFloat(result) || 0;
921
+ });
922
+ var defaultSum = defaultValues.reduce(function (sum, value) {
923
+ return plus(sum, value);
924
+ }, 0);
925
+ summaryRow[key] = defaultSum;
926
+ break;
927
+ }
928
+ }
929
+ };
930
+ for (var _e = 0, dimensionCustomSumKeys_1 = dimensionCustomSumKeys; _e < dimensionCustomSumKeys_1.length; _e++) {
931
+ var customSumKey = dimensionCustomSumKeys_1[_e];
932
+ _loop_8(customSumKey);
933
+ }
934
+ }
759
935
  result.push(summaryRow);
760
936
  }
761
937
  return result;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zmdms-webui",
3
- "version": "2.0.5",
3
+ "version": "2.0.7",
4
4
  "private": false,
5
5
  "main": "dist/index.es.js",
6
6
  "module": "dist/index.es.js",