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.
- package/dist/es/dynamicsetting/dynamicDrawer.js +3 -3
- package/dist/es/table/components/FilterDropdown.js +1 -1
- package/dist/es/table/excel.js +2 -3
- package/dist/es/table/hooks.js +49 -4
- package/dist/es/table/interface.d.ts +13 -0
- package/dist/es/table/table.js +12 -7
- package/dist/es/table/useColumns.js +19 -9
- package/dist/es/table/utils.js +196 -20
- package/package.json +1 -1
|
@@ -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
|
-
|
|
73
|
-
|
|
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
|
|
package/dist/es/table/excel.js
CHANGED
|
@@ -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,
|
|
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
|
}
|
package/dist/es/table/hooks.js
CHANGED
|
@@ -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 {
|
|
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
|
*/
|
package/dist/es/table/table.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
176
|
+
handleFilterConfigChange: handleFilterConfigChange,
|
|
177
|
+
}), _newColumns = _v.newColumns, newRowSelection = _v.rowSelection;
|
|
175
178
|
// 处理表格合并和维度
|
|
176
|
-
var
|
|
179
|
+
var _w = useAutoMerge(filterDataSource, _newColumns, {
|
|
177
180
|
isAutoMerge: isAutoMerge,
|
|
178
181
|
isDimensionDynamic: isDimensionDynamic,
|
|
179
|
-
|
|
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
|
|
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
|
|
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
|
|
126
|
+
var _d = getColumnsItem({
|
|
124
127
|
currentDynamicList: currentDynamicList,
|
|
125
128
|
currentKey: _key,
|
|
126
129
|
keyIndex: keyIndex,
|
|
127
|
-
}), result =
|
|
130
|
+
}), result = _d.result, newList = _d.newList;
|
|
128
131
|
if (result) {
|
|
129
132
|
result.filter = filter;
|
|
130
133
|
}
|
|
131
134
|
if (dynamicKey) {
|
|
132
|
-
(
|
|
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
|
-
|
|
149
|
-
|
|
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
|
}
|
package/dist/es/table/utils.js
CHANGED
|
@@ -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 =
|
|
462
|
-
|
|
463
|
-
|
|
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
|
-
|
|
575
|
-
|
|
576
|
-
var
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
if (
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
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;
|