zmdms-webui 1.8.1 → 1.8.2
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/table/interface.d.ts +1 -1
- package/dist/es/table/table.js +5 -11
- package/dist/es/table/useColumns.js +11 -2
- package/dist/es/table/utils.js +61 -20
- package/package.json +1 -1
|
@@ -238,7 +238,7 @@ interface IFuncInsertTableFromClipboardReturn {
|
|
|
238
238
|
interface IFuncInsertTableFromClipboard {
|
|
239
239
|
(e: any, options: IInserTableFromClipboard): Promise<IFuncInsertTableFromClipboardReturn>;
|
|
240
240
|
}
|
|
241
|
-
interface IColumnGroupType<RecordType> extends
|
|
241
|
+
interface IColumnGroupType<RecordType> extends IColumnType<RecordType> {
|
|
242
242
|
children?: IColumnsType<RecordType>;
|
|
243
243
|
}
|
|
244
244
|
type IColumnsTypeProp<RecordType> = IColumnGroupType<RecordType>;
|
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,
|
|
20
|
+
import { useScuRfresh, useCustomSort, useCalcScrollY, useEditChange, useMoveRowChange, useAddAndDelChange, 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';
|
|
@@ -114,15 +114,8 @@ var Table = function (props) {
|
|
|
114
114
|
currentPage: currentPage,
|
|
115
115
|
filterConfigRef: filterConfigRef,
|
|
116
116
|
});
|
|
117
|
-
// 处理自动合并的加减和选择框
|
|
118
|
-
var _u = useMergeAddAndDel({
|
|
119
|
-
rowSelection: rowSelection,
|
|
120
|
-
addAndDelProps: addAndDelProps,
|
|
121
|
-
columns: columns,
|
|
122
|
-
isAutoMerge: isAutoMerge,
|
|
123
|
-
}), newRowSelection = _u[0], newAddAndDelProps = _u[1];
|
|
124
117
|
// 处理列配置信息 得到新的列配置信息
|
|
125
|
-
var
|
|
118
|
+
var _u = useColumns(columns, {
|
|
126
119
|
// 动态列配置相关信息
|
|
127
120
|
dynamicKey: dynamicKey,
|
|
128
121
|
isRemeberFilter: isRemeberFilter,
|
|
@@ -158,11 +151,12 @@ var Table = function (props) {
|
|
|
158
151
|
hiddenAddBtnHandleRef: hiddenAddBtnHandleRef,
|
|
159
152
|
rowKey: props.rowKey,
|
|
160
153
|
filterConfigRef: filterConfigRef,
|
|
161
|
-
|
|
154
|
+
rowSelection: rowSelection,
|
|
155
|
+
addAndDelProps: addAndDelProps,
|
|
162
156
|
headerAlign: headerAlign,
|
|
163
157
|
mode: mode,
|
|
164
158
|
isAutoMerge: isAutoMerge,
|
|
165
|
-
}).newColumns;
|
|
159
|
+
}), _newColumns = _u.newColumns, newRowSelection = _u.rowSelection;
|
|
166
160
|
// 处理表格合并和维度
|
|
167
161
|
var _v = useAutoMerge(currentTableDataSource, _newColumns, {
|
|
168
162
|
isAutoMerge: isAutoMerge,
|
|
@@ -13,6 +13,7 @@ import SortTitle from './components/SortTitle.js';
|
|
|
13
13
|
import PopoverIcon from './components/PopoverIcon.js';
|
|
14
14
|
import FilterDropdown, { createFilterValue, filterHandle } from './components/FilterDropdown.js';
|
|
15
15
|
import { PLACEHOLDER_NULL } from '../config/constant.js';
|
|
16
|
+
import { useMergeAddAndDel } from './hooks.js';
|
|
16
17
|
import SearchOutlined from '../node_modules/@ant-design/icons/es/icons/SearchOutlined.js';
|
|
17
18
|
import ModalComponent from '../modal/modal.js';
|
|
18
19
|
|
|
@@ -22,8 +23,15 @@ import ModalComponent from '../modal/modal.js';
|
|
|
22
23
|
function useColumns(columns, options) {
|
|
23
24
|
var _this = this;
|
|
24
25
|
var _a, _b;
|
|
25
|
-
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, addAndDelProps = options.addAndDelProps, headerAlign = options.headerAlign, mode = options.mode, isAutoMerge = options.isAutoMerge;
|
|
26
|
+
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;
|
|
26
27
|
var newColumns = getTableColumns(columns, currentDynamicList).columns;
|
|
28
|
+
// 处理自动合并的加减和选择框
|
|
29
|
+
var _c = useMergeAddAndDel({
|
|
30
|
+
rowSelection: rowSelection,
|
|
31
|
+
addAndDelProps: addAndDelProps,
|
|
32
|
+
columns: newColumns,
|
|
33
|
+
isAutoMerge: isAutoMerge,
|
|
34
|
+
}), newRowSelection = _c[0], newAddAndDelProps = _c[1];
|
|
27
35
|
// 表头过滤的一些配置(获取表头过滤的input的输入框的引用)
|
|
28
36
|
var searchValueInputRef = useRef(null);
|
|
29
37
|
// 记录表头过滤的一些配置(通过ref记录,key => filter) 复制整列时,需要先走过滤
|
|
@@ -380,7 +388,7 @@ function useColumns(columns, options) {
|
|
|
380
388
|
? !(hiddenAddBtnHandleRef === null || hiddenAddBtnHandleRef === void 0 ? void 0 : hiddenAddBtnHandleRef.current(record, index))
|
|
381
389
|
: isAdd;
|
|
382
390
|
return (jsx(ColumnAddDel, { isAdd: hiddenAdd, isDel: hiddenDel, index: index, delPopTitle: delPopTitle, onAddAndDel: onAddAndDel }));
|
|
383
|
-
} },
|
|
391
|
+
} }, newAddAndDelProps);
|
|
384
392
|
myNewColumns.unshift(newColumn);
|
|
385
393
|
}
|
|
386
394
|
if (mode === "index") {
|
|
@@ -408,6 +416,7 @@ function useColumns(columns, options) {
|
|
|
408
416
|
}
|
|
409
417
|
return {
|
|
410
418
|
newColumns: myNewColumns,
|
|
419
|
+
rowSelection: newRowSelection,
|
|
411
420
|
};
|
|
412
421
|
}
|
|
413
422
|
/**
|
package/dist/es/table/utils.js
CHANGED
|
@@ -455,13 +455,15 @@ function flattenRecordsOptimized(records, mergeKeys, dimensionSummaryKeys, summa
|
|
|
455
455
|
mergeKeys.length === 0) {
|
|
456
456
|
return records;
|
|
457
457
|
}
|
|
458
|
-
|
|
458
|
+
// 0. 首先根据维度字段对数据进行排序
|
|
459
|
+
var result = sortByDimensions(__spreadArray([], records, true), mergeKeys);
|
|
459
460
|
// 1. 首先插入维度合计行
|
|
460
461
|
if (dimensionSummaryKeys &&
|
|
461
462
|
dimensionSummaryKeys.length > 0 &&
|
|
462
463
|
summaryKeys &&
|
|
463
464
|
summaryKeys.length > 0) {
|
|
464
|
-
result = insertDimensionSummaryRows(result,
|
|
465
|
+
result = insertDimensionSummaryRows(result, mergeKeys, // 传入完整的维度字段列表
|
|
466
|
+
dimensionSummaryKeys, summaryKeys);
|
|
465
467
|
}
|
|
466
468
|
// 2. 为每行初始化合并信息
|
|
467
469
|
for (var i = 0; i < result.length; i++) {
|
|
@@ -554,26 +556,61 @@ function flattenRecordsOptimized(records, mergeKeys, dimensionSummaryKeys, summa
|
|
|
554
556
|
}
|
|
555
557
|
return result;
|
|
556
558
|
}
|
|
559
|
+
/**
|
|
560
|
+
* 根据维度字段对数据进行排序
|
|
561
|
+
* 确保相同维度值的记录连续排列,以便正确进行合并处理
|
|
562
|
+
*/
|
|
563
|
+
function sortByDimensions(records, dimensionKeys) {
|
|
564
|
+
return records.sort(function (a, b) {
|
|
565
|
+
for (var i = 0; i < dimensionKeys.length; i++) {
|
|
566
|
+
var key = dimensionKeys[i];
|
|
567
|
+
var valueA = a[key] || "";
|
|
568
|
+
var valueB = b[key] || "";
|
|
569
|
+
// 字符串比较
|
|
570
|
+
if (valueA < valueB)
|
|
571
|
+
return -1;
|
|
572
|
+
if (valueA > valueB)
|
|
573
|
+
return 1;
|
|
574
|
+
// 如果当前字段相等,继续比较下一个字段
|
|
575
|
+
}
|
|
576
|
+
return 0; // 所有字段都相等
|
|
577
|
+
});
|
|
578
|
+
}
|
|
557
579
|
/**
|
|
558
580
|
* 插入维度合计行
|
|
581
|
+
* 优化版本:使用完整的维度字段列表
|
|
559
582
|
*/
|
|
560
|
-
function insertDimensionSummaryRows(records,
|
|
583
|
+
function insertDimensionSummaryRows(records, allDimensionKeys, // 完整的维度字段列表
|
|
584
|
+
dimensionSummaryKeys, // 需要合计的维度字段
|
|
585
|
+
summaryKeys) {
|
|
586
|
+
var result = __spreadArray([], records, true);
|
|
561
587
|
// 按维度层级从深到浅处理
|
|
562
|
-
for (var
|
|
563
|
-
var
|
|
588
|
+
for (var i = dimensionSummaryKeys.length - 1; i >= 0; i--) {
|
|
589
|
+
var currentDimensionKey = dimensionSummaryKeys[i];
|
|
590
|
+
// 找到当前维度字段在完整维度列表中的位置
|
|
591
|
+
var currentDimensionIndex = allDimensionKeys.indexOf(currentDimensionKey);
|
|
592
|
+
if (currentDimensionIndex === -1) {
|
|
593
|
+
console.warn("\u7EF4\u5EA6\u5B57\u6BB5 ".concat(currentDimensionKey, " \u4E0D\u5728\u7EF4\u5EA6\u5B57\u6BB5\u5217\u8868\u4E2D"));
|
|
594
|
+
continue;
|
|
595
|
+
}
|
|
596
|
+
// 获取当前维度及其前面的所有维度字段
|
|
597
|
+
var groupingKeys = allDimensionKeys.slice(0, currentDimensionIndex + 1);
|
|
564
598
|
// 对当前处理的数据进行分组
|
|
565
|
-
var groups = groupByDimensions(
|
|
566
|
-
|
|
599
|
+
var groups = groupByDimensions(result, groupingKeys);
|
|
600
|
+
var newResult = [];
|
|
567
601
|
for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
|
|
568
602
|
var group = groups_1[_i];
|
|
569
603
|
// 添加原始数据行
|
|
570
|
-
|
|
604
|
+
newResult.push.apply(newResult, group.items);
|
|
571
605
|
// 创建合计行
|
|
572
|
-
var summaryRow = createSummaryRow(group.items, group.key,
|
|
573
|
-
|
|
606
|
+
var summaryRow = createSummaryRow(group.items, group.key, groupingKeys, allDimensionKeys, // 传入完整的维度字段列表
|
|
607
|
+
summaryKeys, currentDimensionIndex);
|
|
608
|
+
newResult.push(summaryRow);
|
|
574
609
|
}
|
|
610
|
+
// 对插入合计行后的结果重新排序,确保数据顺序正确
|
|
611
|
+
result = sortByDimensions(newResult, allDimensionKeys);
|
|
575
612
|
}
|
|
576
|
-
return
|
|
613
|
+
return result;
|
|
577
614
|
}
|
|
578
615
|
/**
|
|
579
616
|
* 按维度分组
|
|
@@ -603,21 +640,25 @@ function groupByDimensions(records, dimensionKeys) {
|
|
|
603
640
|
/**
|
|
604
641
|
* 创建合计行
|
|
605
642
|
*/
|
|
606
|
-
function createSummaryRow(items, groupKey,
|
|
643
|
+
function createSummaryRow(items, groupKey, groupingKeys, // 当前分组使用的维度字段
|
|
644
|
+
allDimensionKeys, // 完整的维度字段列表
|
|
645
|
+
summaryKeys, summaryLevelIndex // 在完整维度列表中的索引
|
|
646
|
+
) {
|
|
607
647
|
var summaryRow = {};
|
|
608
|
-
//
|
|
609
|
-
for (var i = 0; i <
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
648
|
+
// 设置所有维度字段
|
|
649
|
+
for (var i = 0; i < allDimensionKeys.length; i++) {
|
|
650
|
+
var dimensionKey = allDimensionKeys[i];
|
|
651
|
+
if (i === summaryLevelIndex) {
|
|
652
|
+
// 当前合计维度字段加上"合计"后缀
|
|
653
|
+
summaryRow[dimensionKey] = "".concat(groupKey[i], "\u5408\u8BA1");
|
|
613
654
|
}
|
|
614
|
-
else if (i <
|
|
655
|
+
else if (i < summaryLevelIndex) {
|
|
615
656
|
// 前面的维度字段保持原值
|
|
616
|
-
summaryRow[
|
|
657
|
+
summaryRow[dimensionKey] = groupKey[i];
|
|
617
658
|
}
|
|
618
659
|
else {
|
|
619
660
|
// 后面的维度字段置空
|
|
620
|
-
summaryRow[
|
|
661
|
+
summaryRow[dimensionKey] = "";
|
|
621
662
|
}
|
|
622
663
|
}
|
|
623
664
|
var _loop_5 = function (summaryKey) {
|