zmdms-webui 1.8.1 → 1.8.3

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.
@@ -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 Omit<IColumnType<RecordType>, "dataIndex"> {
241
+ interface IColumnGroupType<RecordType> extends IColumnType<RecordType> {
242
242
  children?: IColumnsType<RecordType>;
243
243
  }
244
244
  type IColumnsTypeProp<RecordType> = IColumnGroupType<RecordType>;
@@ -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, useMergeAddAndDel, useAutoMerge } from './hooks.js';
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 _newColumns = useColumns(columns, {
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
- addAndDelProps: newAddAndDelProps,
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
- } }, addAndDelProps);
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
  /**
@@ -455,13 +455,17 @@ function flattenRecordsOptimized(records, mergeKeys, dimensionSummaryKeys, summa
455
455
  mergeKeys.length === 0) {
456
456
  return records;
457
457
  }
458
- var result = __spreadArray([], records, true);
458
+ // 0. 首先根据维度字段对数据进行排序
459
+ var result = (dimensionSummaryKeys === null || dimensionSummaryKeys === void 0 ? void 0 : dimensionSummaryKeys.length) > 0
460
+ ? sortByDimensions(__spreadArray([], records, true), mergeKeys)
461
+ : __spreadArray([], records, true);
459
462
  // 1. 首先插入维度合计行
460
463
  if (dimensionSummaryKeys &&
461
464
  dimensionSummaryKeys.length > 0 &&
462
465
  summaryKeys &&
463
466
  summaryKeys.length > 0) {
464
- result = insertDimensionSummaryRows(result, dimensionSummaryKeys, summaryKeys);
467
+ result = insertDimensionSummaryRows(result, mergeKeys, // 传入完整的维度字段列表
468
+ dimensionSummaryKeys, summaryKeys);
465
469
  }
466
470
  // 2. 为每行初始化合并信息
467
471
  for (var i = 0; i < result.length; i++) {
@@ -554,26 +558,61 @@ function flattenRecordsOptimized(records, mergeKeys, dimensionSummaryKeys, summa
554
558
  }
555
559
  return result;
556
560
  }
561
+ /**
562
+ * 根据维度字段对数据进行排序
563
+ * 确保相同维度值的记录连续排列,以便正确进行合并处理
564
+ */
565
+ function sortByDimensions(records, dimensionKeys) {
566
+ return records.sort(function (a, b) {
567
+ for (var i = 0; i < dimensionKeys.length; i++) {
568
+ var key = dimensionKeys[i];
569
+ var valueA = a[key] || "";
570
+ var valueB = b[key] || "";
571
+ // 字符串比较
572
+ if (valueA < valueB)
573
+ return -1;
574
+ if (valueA > valueB)
575
+ return 1;
576
+ // 如果当前字段相等,继续比较下一个字段
577
+ }
578
+ return 0; // 所有字段都相等
579
+ });
580
+ }
557
581
  /**
558
582
  * 插入维度合计行
583
+ * 优化版本:使用完整的维度字段列表
559
584
  */
560
- function insertDimensionSummaryRows(records, dimensionSummaryKeys, summaryKeys) {
585
+ function insertDimensionSummaryRows(records, allDimensionKeys, // 完整的维度字段列表
586
+ dimensionSummaryKeys, // 需要合计的维度字段
587
+ summaryKeys) {
588
+ var result = __spreadArray([], records, true);
561
589
  // 按维度层级从深到浅处理
562
- for (var level = dimensionSummaryKeys.length - 1; level >= 0; level--) {
563
- var currentDimensionKeys = dimensionSummaryKeys.slice(0, level + 1);
590
+ for (var i = dimensionSummaryKeys.length - 1; i >= 0; i--) {
591
+ var currentDimensionKey = dimensionSummaryKeys[i];
592
+ // 找到当前维度字段在完整维度列表中的位置
593
+ var currentDimensionIndex = allDimensionKeys.indexOf(currentDimensionKey);
594
+ if (currentDimensionIndex === -1) {
595
+ console.warn("\u7EF4\u5EA6\u5B57\u6BB5 ".concat(currentDimensionKey, " \u4E0D\u5728\u7EF4\u5EA6\u5B57\u6BB5\u5217\u8868\u4E2D"));
596
+ continue;
597
+ }
598
+ // 获取当前维度及其前面的所有维度字段
599
+ var groupingKeys = allDimensionKeys.slice(0, currentDimensionIndex + 1);
564
600
  // 对当前处理的数据进行分组
565
- var groups = groupByDimensions(records, currentDimensionKeys);
566
- records = [];
601
+ var groups = groupByDimensions(result, groupingKeys);
602
+ var newResult = [];
567
603
  for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
568
604
  var group = groups_1[_i];
569
605
  // 添加原始数据行
570
- records.push.apply(records, group.items);
606
+ newResult.push.apply(newResult, group.items);
571
607
  // 创建合计行
572
- var summaryRow = createSummaryRow(group.items, group.key, currentDimensionKeys, summaryKeys, level);
573
- records.push(summaryRow);
608
+ var summaryRow = createSummaryRow(group.items, group.key, groupingKeys, allDimensionKeys, // 传入完整的维度字段列表
609
+ summaryKeys, currentDimensionIndex);
610
+ newResult.push(summaryRow);
574
611
  }
612
+ // 对插入合计行后的结果重新排序,确保数据顺序正确
613
+ result = sortByDimensions(newResult, allDimensionKeys);
575
614
  }
576
- return records;
615
+ return result;
577
616
  }
578
617
  /**
579
618
  * 按维度分组
@@ -603,21 +642,25 @@ function groupByDimensions(records, dimensionKeys) {
603
642
  /**
604
643
  * 创建合计行
605
644
  */
606
- function createSummaryRow(items, groupKey, dimensionKeys, summaryKeys, level) {
645
+ function createSummaryRow(items, groupKey, groupingKeys, // 当前分组使用的维度字段
646
+ allDimensionKeys, // 完整的维度字段列表
647
+ summaryKeys, summaryLevelIndex // 在完整维度列表中的索引
648
+ ) {
607
649
  var summaryRow = {};
608
- // 设置维度字段
609
- for (var i = 0; i < dimensionKeys.length; i++) {
610
- if (i === level) {
611
- // 最后一个维度字段加上"合计"后缀
612
- summaryRow[dimensionKeys[i]] = "".concat(groupKey[i], "\u5408\u8BA1");
650
+ // 设置所有维度字段
651
+ for (var i = 0; i < allDimensionKeys.length; i++) {
652
+ var dimensionKey = allDimensionKeys[i];
653
+ if (i === summaryLevelIndex) {
654
+ // 当前合计维度字段加上"合计"后缀
655
+ summaryRow[dimensionKey] = "".concat(groupKey[i], "\u5408\u8BA1");
613
656
  }
614
- else if (i < level) {
657
+ else if (i < summaryLevelIndex) {
615
658
  // 前面的维度字段保持原值
616
- summaryRow[dimensionKeys[i]] = groupKey[i];
659
+ summaryRow[dimensionKey] = groupKey[i];
617
660
  }
618
661
  else {
619
662
  // 后面的维度字段置空
620
- summaryRow[dimensionKeys[i]] = "";
663
+ summaryRow[dimensionKey] = "";
621
664
  }
622
665
  }
623
666
  var _loop_5 = function (summaryKey) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zmdms-webui",
3
- "version": "1.8.1",
3
+ "version": "1.8.3",
4
4
  "private": false,
5
5
  "main": "dist/index.es.js",
6
6
  "module": "dist/index.es.js",