ztxkui 4.2.18-2 → 4.2.18-21

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.
Files changed (75) hide show
  1. package/README.md +57 -57
  2. package/dist/DemoCom/SyhDemo.d.ts +3 -0
  3. package/dist/DemoCom/SyhDemo.js +257 -0
  4. package/dist/DemoCom/TableDemo.js +8 -4
  5. package/dist/TableDemo/BasicTable.js +2 -1
  6. package/dist/TableDemo/EditableTable.js +83 -67
  7. package/dist/TableDemo/ProEditableTable.d.ts +21 -0
  8. package/dist/TableDemo/ProEditableTable.js +482 -0
  9. package/dist/TableDemo/data.d.ts +15 -0
  10. package/dist/TableDemo/data.js +33 -1
  11. package/dist/TableDemo/index.js +6 -5
  12. package/dist/components/DatePicker/data-picker.d.ts +7 -8
  13. package/dist/components/Menu/menu.d.ts +3 -3
  14. package/dist/components/PrintContainer/utils.js +3 -3
  15. package/dist/components/ProTable/hooks.d.ts +28 -0
  16. package/dist/components/ProTable/hooks.js +279 -0
  17. package/dist/components/ProTable/index.d.ts +8 -0
  18. package/dist/components/ProTable/index.js +77 -0
  19. package/dist/components/ProTable/interface.d.ts +51 -0
  20. package/dist/components/ProTable/interface.js +1 -0
  21. package/dist/components/Table/components/FillDown.d.ts +8 -0
  22. package/dist/components/Table/components/FillDown.js +10 -0
  23. package/dist/components/Table/components/FilterDropdown.d.ts +14 -0
  24. package/dist/components/Table/components/FilterDropdown.js +69 -0
  25. package/dist/components/Table/constants.d.ts +2 -0
  26. package/dist/components/Table/constants.js +2 -0
  27. package/dist/components/Table/hooks/useColumns.d.ts +20 -8
  28. package/dist/components/Table/hooks/useColumns.js +484 -182
  29. package/dist/components/Table/hooks/useDropRef.js +2 -1
  30. package/dist/components/Table/hooks/useInnerPagination.js +1 -0
  31. package/dist/components/Table/hooks/useSelectSubtotal.d.ts +4 -0
  32. package/dist/components/Table/hooks/useSelectSubtotal.js +178 -0
  33. package/dist/components/Table/index.d.ts +7 -0
  34. package/dist/components/Table/table-adddel-column.d.ts +8 -5
  35. package/dist/components/Table/table-adddel-column.js +15 -5
  36. package/dist/components/Table/table-dynamic.js +63 -5
  37. package/dist/components/Table/table-enhance-cell.d.ts +6 -3
  38. package/dist/components/Table/table-enhance-cell.js +196 -109
  39. package/dist/components/Table/table-enhance-row.d.ts +4 -4
  40. package/dist/components/Table/table-enhance-row.js +10 -11
  41. package/dist/components/Table/table-headTooltip.d.ts +6 -0
  42. package/dist/components/Table/table-headTooltip.js +13 -0
  43. package/dist/components/Table/table-resizable-title.d.ts +4 -5
  44. package/dist/components/Table/table-resizable-title.js +32 -6
  45. package/dist/components/Table/table-sort.d.ts +11 -0
  46. package/dist/components/Table/table-sort.js +65 -0
  47. package/dist/components/Table/table.d.ts +20 -4
  48. package/dist/components/Table/table.js +478 -176
  49. package/dist/components/Table/utils/dom.d.ts +26 -0
  50. package/dist/components/Table/utils/dom.js +122 -0
  51. package/dist/components/Table/utils/filterHandle.d.ts +1 -0
  52. package/dist/components/Table/utils/filterHandle.js +51 -0
  53. package/dist/components/Table/utils/getSummaryData.d.ts +1 -0
  54. package/dist/components/Table/utils/getSummaryData.js +3 -1
  55. package/dist/components/Table/utils/shallowEqual.d.ts +2 -0
  56. package/dist/components/Table/utils/shallowEqual.js +34 -0
  57. package/dist/components/Table/utils/validate.d.ts +1 -1
  58. package/dist/components/Table/utils/validate.js +5 -5
  59. package/dist/components/TimePicker/time-picker.d.ts +0 -1
  60. package/dist/components/ZtIcon/index.d.ts +1 -1
  61. package/dist/components/business/Common/UserForgetPassword/index.js +17 -6
  62. package/dist/components/business/Common/UserInfo/index.js +3 -1
  63. package/dist/components/business/Common/UserPassword/index.d.ts +1 -0
  64. package/dist/components/business/Common/UserPassword/index.js +42 -14
  65. package/dist/components/business/Common/validatePassword.d.ts +8 -0
  66. package/dist/components/business/Common/validatePassword.js +168 -0
  67. package/dist/components/utils/index.d.ts +1 -0
  68. package/dist/components/utils/index.js +20 -0
  69. package/dist/components/utils/useLastest.d.ts +2 -0
  70. package/dist/components/utils/useLastest.js +6 -0
  71. package/dist/index.css +96 -7
  72. package/dist/index.css.map +1 -1
  73. package/dist/index.d.ts +1 -0
  74. package/dist/index.js +5 -0
  75. package/package.json +4 -3
@@ -14,64 +14,118 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
14
14
  to[j] = from[i];
15
15
  return to;
16
16
  };
17
- import React, { useCallback, useEffect, useState, useRef } from 'react';
17
+ import React, { useCallback, useState, useRef, useMemo } from 'react';
18
+ import { unstable_batchedUpdates } from 'react-dom';
18
19
  import Button from '../../Button';
19
20
  import { Popconfirm } from '../../../index';
20
21
  import { PicRightOutlined, MinusSquareOutlined } from '@ant-design/icons';
21
22
  import TableAddDelColumn from '../table-adddel-column';
23
+ import TableHeadTooltip from '../table-headTooltip';
22
24
  import { getInnerIndex } from './useInnerPagination';
25
+ import TableSortTitle from '../table-sort';
26
+ import FilterDropdown from '../components/FilterDropdown';
27
+ import FillDown from '../components/FillDown';
28
+ import { SearchOutlined } from '@ant-design/icons';
29
+ import { filterHandle } from '../utils/filterHandle';
23
30
  // 获取表格columns完整数据
24
31
  export var getTableLayoutFullData = function (columns, tableLayout) {
32
+ // const columns = _columns.map((item) => {
33
+ // return {
34
+ // ...item,
35
+ // key: item?.key || item?.title,
36
+ // dataIndex: item?.dataIndex || item?.title,
37
+ // };
38
+ // });
25
39
  if (Array.isArray(tableLayout) && tableLayout.length > 0) {
26
- var preColumns_1 = [];
40
+ var newAddColumns_1 = columns.filter(function (item) { return (item === null || item === void 0 ? void 0 : item.key) || (item === null || item === void 0 ? void 0 : item.dataIndex); });
41
+ // 找到没有传key 但是传了 fixed属性的字段
42
+ // 这块将 !== 'right'逻辑 改成 === 'left'逻辑
43
+ // 避免命中 { title: 'xxxx', render: xxx } || { title: 'xx', children: [..] }
44
+ var preColumns_1 = columns.filter(function (item) {
45
+ return !(item === null || item === void 0 ? void 0 : item.key) &&
46
+ !(item === null || item === void 0 ? void 0 : item.dataIndex) &&
47
+ ((item === null || item === void 0 ? void 0 : item.fixed) === 'left' || (item === null || item === void 0 ? void 0 : item.fixed) === true);
48
+ });
27
49
  var middleColumns_1 = [];
28
- var afterColumns_1 = [];
50
+ var afterColumns_1 = columns.filter(function (item) { return !(item === null || item === void 0 ? void 0 : item.key) && !(item === null || item === void 0 ? void 0 : item.dataIndex) && (item === null || item === void 0 ? void 0 : item.fixed) === 'right'; });
29
51
  // 这里存在,业务可能会修改原始columns数据,所以按照columns数据,将本地存储数据换新
30
52
  // 1. 如果本地存储中有,原始columns中没有,那么删除掉本地存储中的
31
53
  // 2. 将数据 按照 原始数据中的 是否固定 固定位置来分组。前 中 后三组
32
54
  // 3. 缓存的数据只用来合并中间的并且能在原始columns中找到的内容
33
55
  tableLayout.forEach(function (item) {
34
56
  if ((item === null || item === void 0 ? void 0 : item.key) || (item === null || item === void 0 ? void 0 : item.dataIndex)) {
35
- var result = columns.find(function (column) {
36
- if (column.key) {
37
- return column.key === (item === null || item === void 0 ? void 0 : item.key);
57
+ var index = newAddColumns_1.findIndex(function (column) {
58
+ if (column.key && item.key && column.key === (item === null || item === void 0 ? void 0 : item.key)) {
59
+ return true;
60
+ }
61
+ if (column.dataIndex &&
62
+ item.dataIndex &&
63
+ column.dataIndex === (item === null || item === void 0 ? void 0 : item.dataIndex)) {
64
+ return true;
38
65
  }
39
- if (column.dataIndex) {
40
- return column.dataIndex === (item === null || item === void 0 ? void 0 : item.dataIndex);
66
+ if (column.title && item.title && column.title === (item === null || item === void 0 ? void 0 : item.title)) {
67
+ return true;
41
68
  }
42
69
  return false;
43
70
  });
44
71
  // 如果能再原始数据中找到对应的值
45
- if (result && !result.fixed) {
46
- middleColumns_1.push(__assign(__assign({}, result), item));
72
+ if (index > -1) {
73
+ var result = newAddColumns_1[index];
74
+ var column = __assign(__assign({}, result), item);
75
+ // 兼容存入localstorge里面的旧数据
76
+ if (!item.key || !item.dataIndex) {
77
+ column = result;
78
+ }
79
+ // 如果业务代码中设置了hideColumn,那么不做自定义显隐控制
80
+ // if (result.hideColumn !== undefined) {
81
+ // column.hideColumn = result.hideColumn;
82
+ // column.isNoDynamicHide = true;
83
+ // }
84
+ if (!column.fixed) {
85
+ middleColumns_1.push(column);
86
+ }
87
+ else if (column.fixed === 'left' || column.fixed === true) {
88
+ preColumns_1.push(column);
89
+ }
90
+ else if (column.fixed === 'right') {
91
+ afterColumns_1.push(column);
92
+ }
93
+ newAddColumns_1.splice(index, 1);
47
94
  }
48
95
  // 如果没有在原始数据中找到对应的值,那说明这个应该删除,不应该添加进去
49
96
  }
50
97
  else if (item.children && !item.fixed) {
51
- middleColumns_1.push(__assign({}, item));
98
+ // 这里处理一下children里面的render方法。
99
+ // 这里没办法 因为可能children里面有render方法。
100
+ // 必须要用columns里面的来替换下 但是因为没有唯一键。所以只能通过title来做判断
101
+ var cColumn = columns.find(function (c) { return c.title === item.title; });
102
+ middleColumns_1.push(__assign(__assign({}, item), cColumn));
52
103
  }
53
104
  // 如果没有key 或者dataIndex 则说明该值不应该存在
54
105
  // return {
55
106
  // ...item,
56
107
  // };
57
108
  });
58
- // 在按照规则,将原始columns中可能新增的数据,做一下处理
59
- // 1. 取出所有定位元素,将定位元素添加到对应的组内
60
- // 2. 找到所有没有定位的元素,并且tableLayout中中间元素中不存在的元素
61
- columns
62
- .filter(function (column) { return column.fixed; })
63
- .forEach(function (column) {
64
- if (column.fixed === 'left') {
109
+ // 可能遍历到最后,newAddColumns里面可能还有值 并且他可能是固定列配置的项,所以需要再遍历一次 过滤调这些固定的选项
110
+ var filterNewAddColumns = newAddColumns_1.filter(function (column) {
111
+ if (column.fixed === 'left' || column.fixed === true) {
65
112
  preColumns_1.push(__assign({}, column));
113
+ return false;
66
114
  }
67
115
  else if (column.fixed === 'right') {
68
116
  afterColumns_1.push(__assign({}, column));
117
+ return false;
69
118
  }
119
+ return true;
70
120
  });
71
- var newAddColumns = columns.filter(function (column) {
72
- return !column.fixed && !middleColumns_1.find(function (item) { return item.key === column.key; });
73
- });
74
- return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], preColumns_1), middleColumns_1), newAddColumns), afterColumns_1);
121
+ // 在按照规则,将原始columns中可能新增的数据,做一下处理
122
+ // 1. 取出所有定位元素,将定位元素添加到对应的组内
123
+ // 2. 找到所有没有定位的元素,并且tableLayout中中间元素中不存在的元素
124
+ // const newAddColumns = columns.filter(
125
+ // (column) =>
126
+ // !column.fixed && !middleColumns.find((item) => item.key === column.key)
127
+ // );
128
+ return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], preColumns_1), middleColumns_1), filterNewAddColumns), afterColumns_1);
75
129
  }
76
130
  return columns;
77
131
  };
@@ -81,7 +135,7 @@ export var LOCALSTORAGE_KEY = 'ztui_dynamic_table_key';
81
135
  export var LOCALSTORAGE_LRU_KEY = 'ztui_dynamic_table_lru_key';
82
136
  // 搜索表单存储表单最大长度
83
137
  export var LOCALSTORAGE_LRU_MAX_SIZE = 500;
84
- function getStorage(key) {
138
+ export function getStorage(key) {
85
139
  // 历史数据处理
86
140
  // 直接从localstorage中取key值,如果能取到,那么需要删除原先的值,重新设置到统一出处
87
141
  // 如果不能取到,那么什么都不做
@@ -152,134 +206,172 @@ export function setDynamicKey(dynamicStorageKey, value) {
152
206
  obj[dynamicStorageKey] = value;
153
207
  localStorage.setItem(LOCALSTORAGE_KEY, JSON.stringify(obj));
154
208
  localStorage.setItem(LOCALSTORAGE_LRU_KEY, JSON.stringify(lruKeys));
209
+ // // 2023-11-29
210
+ // // 设置表格动态列配置相关信息
211
+ // catchHandle(
212
+ // {
213
+ // customKey: LOCALSTORAGE_KEY,
214
+ // customValue: JSON.stringify(obj),
215
+ // mark: '表格动态列配置缓存数据',
216
+ // },
217
+ // 'table_id'
218
+ // );
219
+ // catchHandle(
220
+ // {
221
+ // customKey: LOCALSTORAGE_LRU_KEY,
222
+ // customValue: JSON.stringify(lruKeys),
223
+ // mark: '表格动态列配置缓存LRUKey数据',
224
+ // },
225
+ // 'table_lru_id'
226
+ // );
155
227
  }
156
- function useColumns(props) {
157
- var columns = props.columns, showColumnDynamic = props.showColumnDynamic, showColumnDynamicKey = props.showColumnDynamicKey, onAddAndDelHandle = props.onAddAndDelHandle, hideAddIcon = props.hideAddIcon, showDelAllBtn = props.showDelAllBtn, delAllChange = props.delAllChange, addIconText = props.addIconText, hideDelIcon = props.hideDelIcon, delIconText = props.delIconText, showDynamicHandle = props.showDynamicHandle, onEditableSave = props.onEditableSave, configInfo = props.configInfo, copyByKey = props.copyByKey, onTableChange = props.onTableChange, currentPage = props.currentPage;
158
- var tableLayout = getStorage(showColumnDynamicKey);
159
- var newColumnsRef = useRef();
160
- // 新的columns
161
- var _a = useState(getTableLayoutFullData(columns, tableLayout)), newColumns = _a[0], setNewColumns = _a[1];
162
- // 需要动态配置的列
163
- var _b = useState(getTableLayoutFullData(columns, tableLayout)), dynamicColumns = _b[0], setDynamicColumns = _b[1];
164
- // 动态列配置显隐
165
- var ColumnDynamicCom = useCallback(function () { return (React.createElement(PicRightOutlined, { className: "zt-column--daynamic-icon", onClick: showDynamicHandle })); }, [showDynamicHandle]);
166
- // 动态列配置显隐
167
- var DelAllCom = useCallback(function () {
168
- return showDelAllBtn ? (React.createElement(Popconfirm, { title: "\u662F\u5426\u5168\u90E8\u5220\u9664", onConfirm: function () { return delAllChange && delAllChange(); } },
169
- React.createElement(MinusSquareOutlined, { className: "zt-column--daynamic-icon", style: { marginLeft: '4px' } }))) : null;
170
- }, [delAllChange, showDelAllBtn]);
171
- useEffect(function () {
172
- var tableLayout = getStorage(showColumnDynamicKey);
173
- var catchColumns = getTableLayoutFullData(columns, tableLayout);
174
- if (!Array.isArray(catchColumns)) {
175
- throw new Error('columns 必须为一个数组');
176
- }
177
- // 根据配置处理columns
178
- // 主要处理是否隐藏
179
- // 是否添加required配置
180
- var _columns = [];
181
- if (configInfo && Object.keys(configInfo).length > 0) {
182
- catchColumns.forEach(function (col) {
183
- var _a, _b, _c, _d;
184
- var _column = __assign({}, col);
185
- var dataIndex = _column.dataIndex;
186
- if (!dataIndex) {
187
- _columns.push(__assign({}, _column));
188
- }
189
- else {
190
- // 如果没有配置,或者配置isRequired为存在
191
- if (((_a = configInfo[dataIndex]) === null || _a === void 0 ? void 0 : _a.isRequired) === 1 ||
192
- ((_b = configInfo[dataIndex]) === null || _b === void 0 ? void 0 : _b.isRequired) === '1') {
193
- _column.required = true;
194
- }
195
- else {
196
- _column.validate = undefined;
197
- }
198
- // 如果没有配置,或者配置isDisplay为存在
199
- if (!configInfo[dataIndex] ||
200
- ((_c = configInfo[dataIndex]) === null || _c === void 0 ? void 0 : _c.isDisplay) === 1 ||
201
- ((_d = configInfo[dataIndex]) === null || _d === void 0 ? void 0 : _d.isDisplay) === '1') {
202
- _columns.push(__assign({}, _column));
203
- }
204
- }
205
- });
206
- }
207
- else {
208
- _columns = catchColumns;
209
- }
210
- var _newColumns = [];
211
- var _dynamicColumns = [];
212
- // 处理columns
213
- _columns.forEach(function (col) {
228
+ function getNewColumns(basicConfig, editableConfig, dynamicConfig, otherConfig) {
229
+ var columns = basicConfig.columns, newColumnsRef = basicConfig.newColumnsRef, showColumnDynamic = basicConfig.showColumnDynamic, showColumnDynamicKey = basicConfig.showColumnDynamicKey, configInfo = basicConfig.configInfo, currentDataSource = basicConfig.currentDataSource, preDataSource = basicConfig.preDataSource, rowKey = basicConfig.rowKey, dataSourceRef = basicConfig.dataSourceRef, expandableChildrenColumnName = basicConfig.expandableChildrenColumnName, upDateColumnsRef = basicConfig.upDateColumnsRef, setUpDateColumnsRef = basicConfig.setUpDateColumnsRef, isUpDateColumnsRef = basicConfig.isUpDateColumnsRef, setIsUpDateColumnsRef = basicConfig.setIsUpDateColumnsRef;
230
+ var onEditableSave = editableConfig.onEditableSave, onTableChange = editableConfig.onTableChange, currentPage = editableConfig.currentPage, onFillDownChangeRef = editableConfig.onFillDownChangeRef;
231
+ var ColumnDynamicCom = dynamicConfig.ColumnDynamicCom, DelAllCom = dynamicConfig.DelAllCom, onAddAndDelHandleMemo = dynamicConfig.onAddAndDelHandleMemo, onAddAndDelHandle = dynamicConfig.onAddAndDelHandle, hideAddIcon = dynamicConfig.hideAddIcon, addIconText = dynamicConfig.addIconText, hideDelIcon = dynamicConfig.hideDelIcon, delIconText = dynamicConfig.delIconText;
232
+ var copyByKey = otherConfig.copyByKey, myCatchColumns = otherConfig.myCatchColumns, customSortHandle = otherConfig.customSortHandle, customOrder = otherConfig.customOrder, setCustomOrder = otherConfig.setCustomOrder, isSort = otherConfig.isSort, handleSearch = otherConfig.handleSearch, handleReset = otherConfig.handleReset, searchInput = otherConfig.searchInput;
233
+ var tableLayout = showColumnDynamicKey
234
+ ? getStorage(showColumnDynamicKey)
235
+ : myCatchColumns;
236
+ var catchColumns = getTableLayoutFullData(columns, tableLayout);
237
+ if (!Array.isArray(catchColumns)) {
238
+ throw new Error('columns 必须为一个数组');
239
+ }
240
+ // 根据配置处理columns
241
+ // 主要处理是否隐藏
242
+ // 是否添加required配置
243
+ var _columns = [];
244
+ if (configInfo && Object.keys(configInfo).length > 0) {
245
+ catchColumns.forEach(function (col) {
246
+ var _a, _b, _c, _d;
214
247
  var _column = __assign({}, col);
215
- // 添加超出隐藏
216
- // !_column.render 兼容下拉框滚动行为,设置了ellipsis的话,会导致overflow:hidden,导致一些问题
217
- if (_column.ellipsis !== false) {
218
- _column.ellipsis = true;
248
+ var dataIndex = _column.dataIndex;
249
+ if (!dataIndex) {
250
+ _columns.push(__assign({}, _column));
219
251
  }
220
- // 如果列需要编辑
221
- if (_column.editable) {
222
- var title_1 = _column.title, editable_1 = _column.editable, editableConfig_1 = _column.editableConfig, dataIndex_1 = _column.dataIndex;
223
- _column = __assign(__assign({}, _column), { onCell: function (record, index) {
224
- return ({
225
- record: record,
226
- index: index,
227
- editable: editable_1,
228
- editableConfig: editableConfig_1,
229
- dataIndex: dataIndex_1,
230
- title: title_1,
231
- handleSave: onEditableSave,
232
- columns: function () { return newColumnsRef.current; },
233
- onTableChange: onTableChange,
234
- currentpage: currentPage,
235
- });
236
- } });
237
- // 兼容下拉框滚动行为
238
- if ((editableConfig_1 === null || editableConfig_1 === void 0 ? void 0 : editableConfig_1.type) === 'select') {
239
- _column.ellipsis = false;
252
+ else {
253
+ // 如果没有配置,或者配置isRequired为存在
254
+ if (((_a = configInfo[dataIndex]) === null || _a === void 0 ? void 0 : _a.isRequired) === 1 ||
255
+ ((_b = configInfo[dataIndex]) === null || _b === void 0 ? void 0 : _b.isRequired) === '1') {
256
+ _column.required = true;
240
257
  }
241
- }
242
- // 如果列需要添加复制按钮
243
- if (_column.showCopy) {
244
- if (_column.validate) {
245
- _column.validate.title = _column.validate.title
246
- ? _column.validate.title
247
- : _column.title;
258
+ else {
259
+ _column.validate = undefined;
260
+ }
261
+ // 如果没有配置,或者配置isDisplay为存在
262
+ if (!configInfo[dataIndex] ||
263
+ ((_c = configInfo[dataIndex]) === null || _c === void 0 ? void 0 : _c.isDisplay) === 1 ||
264
+ ((_d = configInfo[dataIndex]) === null || _d === void 0 ? void 0 : _d.isDisplay) === '1') {
265
+ _columns.push(__assign({}, _column));
248
266
  }
249
- _column.title = (React.createElement(React.Fragment, null,
250
- _column.title,
251
- React.createElement(Button, { type: "link", onClick: function () {
252
- copyByKey(typeof _column.showCopy === 'string'
253
- ? _column.showCopy
254
- : _column.key || _column.dataIndex);
255
- }, style: {
256
- fontSize: '13px',
257
- marginLeft: '2px',
258
- display: 'block',
259
- width: '100%',
260
- textAlign: _column.align,
261
- } }, "\u590D\u5236\u6574\u5217")));
262
- }
263
- // 如果配置了固定列的 不做处理
264
- if (!col.fixed) {
265
- _dynamicColumns.push(__assign({}, col));
266
267
  }
267
- // 添加必填标识
268
- if (typeof _column.required === 'function') {
269
- var res = _column.required();
270
- var _res = typeof res === 'boolean' ? res : res === 1 || res === '1';
271
- if (_res) {
272
- if (_column.validate) {
273
- _column.validate.title = _column.validate.title
274
- ? _column.validate.title
275
- : _column.title;
268
+ });
269
+ }
270
+ else {
271
+ _columns = catchColumns;
272
+ }
273
+ var _newColumns = [];
274
+ var _dynamicColumns = [];
275
+ // 处理columns
276
+ _columns.forEach(function (col, index) {
277
+ var _column = __assign({}, col);
278
+ var align = _column.align;
279
+ // 这里解决一个bug,对于dataSource.slice().reverse() 之后。scu配置的字段并不会更新 render中的index
280
+ if (_column.shouldCellUpdate) {
281
+ var fn_1 = _column.shouldCellUpdate;
282
+ _column.shouldCellUpdate = function (record, preRecord) {
283
+ try {
284
+ var recordKey_1 = record[rowKey];
285
+ if (Array.isArray(currentDataSource) &&
286
+ Array.isArray(preDataSource)) {
287
+ var currentIndex = currentDataSource.findIndex(function (item) { return item[rowKey] === recordKey_1; });
288
+ var preIndex = preDataSource.findIndex(function (item) { return item[rowKey] === recordKey_1; });
289
+ if (currentIndex !== preIndex) {
290
+ return true;
291
+ }
292
+ if (typeof _column.dataIndex === 'string' &&
293
+ record[_column.dataIndex] !== preRecord[_column.dataIndex]) {
294
+ return true;
295
+ }
296
+ // 通过dynamic配置更新fixed的时候,触发更新
297
+ if (upDateColumnsRef.current &&
298
+ upDateColumnsRef.current[index] &&
299
+ upDateColumnsRef.current[index].fixed !== _column.fixed) {
300
+ setUpDateColumnsRef(_column, index);
301
+ return true;
302
+ }
303
+ if (isUpDateColumnsRef.current) {
304
+ setIsUpDateColumnsRef(false);
305
+ return true;
306
+ }
276
307
  }
277
- _column.title = (React.createElement(React.Fragment, null,
278
- React.createElement("i", { className: "zt-column--required" }, "*"),
279
- _column.title));
280
308
  }
309
+ catch (err) {
310
+ console.log(err);
311
+ }
312
+ return fn_1(record, preRecord);
313
+ };
314
+ }
315
+ // 添加超出隐藏
316
+ // !_column.render 兼容下拉框滚动行为,设置了ellipsis的话,会导致overflow:hidden,导致一些问题
317
+ if (_column.ellipsis !== false) {
318
+ _column.ellipsis = true;
319
+ }
320
+ // 如果列需要编辑
321
+ if (_column.editable) {
322
+ var title_1 = _column.title, editable_1 = _column.editable, editableConfig_1 = _column.editableConfig, dataIndex_1 = _column.dataIndex;
323
+ _column = __assign(__assign({}, _column), { onCell: function (record, index) {
324
+ return ({
325
+ record: record,
326
+ index: index,
327
+ editable: editable_1,
328
+ editableConfig: editableConfig_1,
329
+ dataIndex: dataIndex_1,
330
+ title: title_1,
331
+ handleSave: onEditableSave,
332
+ columns: function () { return newColumnsRef.current; },
333
+ onTableChange: onTableChange,
334
+ dataSource: function () { return dataSourceRef.current; },
335
+ currentpage: currentPage,
336
+ rowKey: rowKey,
337
+ expandableChildrenColumnName: expandableChildrenColumnName,
338
+ });
339
+ } });
340
+ // 兼容下拉框滚动行为
341
+ if ((editableConfig_1 === null || editableConfig_1 === void 0 ? void 0 : editableConfig_1.type) === 'select') {
342
+ _column.ellipsis = false;
281
343
  }
282
- else if (_column.required) {
344
+ }
345
+ // 如果列需要添加复制按钮
346
+ if (_column.showCopy) {
347
+ if (_column.validate) {
348
+ _column.validate.title = _column.validate.title
349
+ ? _column.validate.title
350
+ : _column.title;
351
+ }
352
+ _column.title = (React.createElement(React.Fragment, null,
353
+ _column.title,
354
+ React.createElement(Button, { type: "link", onClick: function () {
355
+ copyByKey(typeof _column.showCopy === 'string'
356
+ ? _column.showCopy
357
+ : _column.key || _column.dataIndex);
358
+ }, style: {
359
+ fontSize: '13px',
360
+ marginLeft: '2px',
361
+ display: 'block',
362
+ width: '100%',
363
+ textAlign: _column.align,
364
+ } }, "\u590D\u5236\u6574\u5217")));
365
+ }
366
+ // 如果配置了固定列的 不做处理
367
+ // if (!col.fixed) {
368
+ _dynamicColumns.push(__assign({}, col));
369
+ // }
370
+ // 添加必填标识
371
+ if (typeof _column.required === 'function') {
372
+ var res = _column.required();
373
+ var _res = typeof res === 'boolean' ? res : res === 1 || res === '1';
374
+ if (_res) {
283
375
  if (_column.validate) {
284
376
  _column.validate.title = _column.validate.title
285
377
  ? _column.validate.title
@@ -289,69 +381,279 @@ function useColumns(props) {
289
381
  React.createElement("i", { className: "zt-column--required" }, "*"),
290
382
  _column.title));
291
383
  }
292
- // 去掉不显示表头的项
293
- if (!_column.hideColumn) {
294
- _newColumns.push(_column);
384
+ }
385
+ else if (_column.required) {
386
+ if (_column.validate) {
387
+ _column.validate.title = _column.validate.title
388
+ ? _column.validate.title
389
+ : _column.title;
295
390
  }
296
- // 添加render字段
297
- if (!_column.render) {
298
- _column.render = function (text, record, index) {
299
- return text == null || text === '' ? '— —' : text;
391
+ _column.title = (React.createElement(React.Fragment, null,
392
+ React.createElement("i", { className: "zt-column--required" }, "*"),
393
+ _column.title));
394
+ }
395
+ // 去掉不显示表头的项
396
+ if (!_column.hideColumn) {
397
+ _newColumns.push(_column);
398
+ }
399
+ // 添加render字段
400
+ if (!_column.render) {
401
+ _column.render = function (text, record, index) {
402
+ return text == null || text === '' ? '— —' : text;
403
+ };
404
+ }
405
+ // 添加表头提示信息
406
+ if (_column.headTooltip) {
407
+ _column.title = (React.createElement(TableHeadTooltip, { headTooltip: _column.headTooltip }, _column.title));
408
+ }
409
+ // 往下复制
410
+ if (_column.isFillDown) {
411
+ var title_2 = _column.title;
412
+ _column.title = function () {
413
+ return (React.createElement(FillDown, { title: title_2, field: key, onClick: onFillDownChangeRef }));
414
+ };
415
+ }
416
+ // 添加过滤规则
417
+ var filterKey = _column.key || _column.dataIndex;
418
+ if (_column.isFilter === true &&
419
+ typeof filterKey === 'string' &&
420
+ !onEditableSave) {
421
+ _column.filterDropdown = function (_a) {
422
+ var setSelectedKeys = _a.setSelectedKeys, selectedKeys = _a.selectedKeys, confirm = _a.confirm, clearFilters = _a.clearFilters;
423
+ return (React.createElement(FilterDropdown, { searchInputRef: searchInput, setSelectedKeys: setSelectedKeys, selectedKeys: selectedKeys, confirm: confirm, clearFilters: clearFilters, dataIndex: filterKey, handleSearch: handleSearch, handleReset: handleReset, dataSourceRef: dataSourceRef }));
424
+ };
425
+ _column.filterIcon = function () { return React.createElement(SearchOutlined, null); };
426
+ _column.onFilter = function (value, record) {
427
+ var arg = [];
428
+ for (var _i = 2; _i < arguments.length; _i++) {
429
+ arg[_i - 2] = arguments[_i];
430
+ }
431
+ return filterHandle(value, record, filterKey);
432
+ };
433
+ _column.onFilterDropdownVisibleChange = function (visible) {
434
+ if (visible) {
435
+ setTimeout(function () { var _a; return (_a = searchInput.current) === null || _a === void 0 ? void 0 : _a.select(); }, 100);
436
+ }
437
+ };
438
+ }
439
+ // 2023-05-04 添加排序功能 如果是必填字段 不做处理
440
+ var key = col.dataIndex;
441
+ if (typeof key === 'string' && !onEditableSave && !_column.required) {
442
+ // 如果用户传入了排序字段,那么说明该列需要排序
443
+ if (_column.sorter === true) {
444
+ var title_3 = _column.title;
445
+ _column.title = function () {
446
+ return (React.createElement(TableSortTitle, { title: title_3, field: key, customOrder: customOrder, setCustomOrder: setCustomOrder, onChange: customSortHandle, align: align }));
300
447
  };
448
+ _column.sorter = false;
301
449
  }
302
- });
303
- if (showColumnDynamic) {
304
- // 如果需要展示动态列
305
- if (!onAddAndDelHandle) {
306
- // 并且不需要展示删减功能,那么动态列,加到序号列,也就是第0项
307
- _newColumns[0].title = function () { return React.createElement(ColumnDynamicCom, null); };
450
+ // 如果传入得排序函数
451
+ if (typeof _column.sorter === 'function') {
452
+ var title_4 = _column.title;
453
+ var sorterHandle_1 = _column.sorter;
454
+ _column.title = function () {
455
+ return (React.createElement(TableSortTitle, { title: title_4, field: key, customOrder: customOrder, setCustomOrder: setCustomOrder, align: align, onChange: function (info) {
456
+ customSortHandle(info, { sorterHandle: sorterHandle_1 });
457
+ } }));
458
+ };
459
+ _column.sorter = false;
308
460
  }
309
- else {
310
- // 需要展示删减功能
311
- var newColumn = {
312
- title: function () { return (React.createElement(React.Fragment, null,
313
- React.createElement(ColumnDynamicCom, null),
314
- React.createElement(DelAllCom, null))); },
315
- width: 52,
316
- fixed: 'left',
317
- align: 'center',
318
- render: function (text, render, index) { return (React.createElement(TableAddDelColumn, { onAddAndDelHandle: function (type) {
319
- var innerIndex = getInnerIndex(currentPage, index);
320
- onAddAndDelHandle(type, innerIndex);
321
- }, hideAddIcon: hideAddIcon, addIconText: addIconText, hideDelIcon: hideDelIcon, delIconText: delIconText })); },
461
+ // 纯粹的前端排序
462
+ if (_column.sorter == null && isSort) {
463
+ var title_5 = _column.title;
464
+ _column.title = function () {
465
+ return (React.createElement(TableSortTitle, { title: title_5, field: key, customOrder: customOrder, setCustomOrder: setCustomOrder, onChange: customSortHandle, align: align }));
322
466
  };
323
- _newColumns.unshift(newColumn);
324
467
  }
325
468
  }
326
- else if (onAddAndDelHandle) {
327
- // 没有动态列配置
469
+ });
470
+ if (showColumnDynamic) {
471
+ // 如果需要展示动态列
472
+ if (!onAddAndDelHandle) {
473
+ // 并且不需要展示删减功能,那么动态列,加到序号列,也就是第0项
474
+ _newColumns[0].title = function () { return React.createElement(ColumnDynamicCom, null); };
475
+ _newColumns[0].filterDropdown = undefined;
476
+ _newColumns[0].filterIcon = undefined;
477
+ _newColumns[0].onFilter = undefined;
478
+ _newColumns[0].onFilterDropdownVisibleChange = undefined;
479
+ }
480
+ else {
481
+ // 需要展示删减功能
328
482
  var newColumn = {
329
483
  title: function () { return (React.createElement(React.Fragment, null,
484
+ React.createElement(ColumnDynamicCom, null),
330
485
  React.createElement(DelAllCom, null))); },
331
486
  width: 52,
332
487
  fixed: 'left',
333
488
  align: 'center',
334
- render: function (text, render, index) { return (React.createElement(TableAddDelColumn, { onAddAndDelHandle: function (type) { return onAddAndDelHandle(type, index); }, hideAddIcon: hideAddIcon, addIconText: addIconText, hideDelIcon: hideDelIcon, delIconText: delIconText })); },
489
+ render: function (text, record, index) { return (React.createElement(TableAddDelColumn, { onAddAndDelHandle: onAddAndDelHandleMemo, index: index, hideAddIcon: hideAddIcon, addIconText: addIconText, hideDelIcon: hideDelIcon, record: record, delIconText: delIconText })); },
335
490
  };
336
491
  _newColumns.unshift(newColumn);
337
492
  }
338
- setNewColumns(_newColumns);
339
- setDynamicColumns(_dynamicColumns);
340
- newColumnsRef.current = _newColumns;
341
- // eslint-disable-next-line react-hooks/exhaustive-deps
493
+ }
494
+ else if (onAddAndDelHandle) {
495
+ // 没有动态列配置
496
+ var newColumn = {
497
+ title: function () { return (React.createElement(React.Fragment, null,
498
+ React.createElement(DelAllCom, null))); },
499
+ width: 52,
500
+ fixed: 'left',
501
+ align: 'center',
502
+ render: function (text, record, index) { return (React.createElement(TableAddDelColumn, { onAddAndDelHandle: onAddAndDelHandleMemo, index: index, hideAddIcon: hideAddIcon, addIconText: addIconText, hideDelIcon: hideDelIcon, record: record, delIconText: delIconText })); },
503
+ };
504
+ _newColumns.unshift(newColumn);
505
+ }
506
+ newColumnsRef.current = _newColumns;
507
+ return {
508
+ _newColumns: _newColumns,
509
+ _dynamicColumns: _dynamicColumns,
510
+ };
511
+ }
512
+ function useColumns(props) {
513
+ var columns = props.columns, hiddenColumnDynamicIcon = props.hiddenColumnDynamicIcon, showColumnDynamic = props.showColumnDynamic, showColumnDynamicKey = props.showColumnDynamicKey, onAddAndDelHandle = props.onAddAndDelHandle, hideAddIcon = props.hideAddIcon, showDelAllBtn = props.showDelAllBtn, delAllChange = props.delAllChange, addIconText = props.addIconText, hideDelIcon = props.hideDelIcon, delIconText = props.delIconText, showDynamicHandle = props.showDynamicHandle, onEditableSave = props.onEditableSave, configInfo = props.configInfo, copyByKey = props.copyByKey, onTableChange = props.onTableChange, currentPage = props.currentPage, currentDataSource = props.currentDataSource, preDataSource = props.preDataSource, rowKey = props.rowKey, dataSourceRef = props.dataSourceRef, expandableChildrenColumnName = props.expandableChildrenColumnName, customSortHandle = props.customSortHandle, customOrder = props.customOrder, setCustomOrder = props.setCustomOrder, isSort = props.isSort, onFillDownChangeRef = props.onFillDownChangeRef;
514
+ var newColumnsRef = useRef();
515
+ var _a = useAsyncSetValue(columns), upDateColumnsRef = _a[0], setUpDateColumnsRef = _a[1];
516
+ var _b = useAsyncSetValue(false), isUpDateColumnsRef = _b[0], setIsUpDateColumnsRef = _b[1];
517
+ var searchInput = useRef(null);
518
+ var handleSearch = function (selectedKeys, confirm, dataIndex) {
519
+ confirm();
520
+ };
521
+ var handleReset = function (clearFilters) {
522
+ clearFilters();
523
+ };
524
+ // 动态列配置显隐
525
+ var ColumnDynamicCom = useCallback(function () {
526
+ return hiddenColumnDynamicIcon ? null : (React.createElement(PicRightOutlined, { className: "zt-column--daynamic-icon", onClick: showDynamicHandle }));
527
+ }, [showDynamicHandle, hiddenColumnDynamicIcon]);
528
+ // 动态列配置显隐
529
+ var DelAllCom = useCallback(function () {
530
+ return showDelAllBtn ? (React.createElement(Popconfirm, { title: "\u662F\u5426\u5168\u90E8\u5220\u9664", onConfirm: function () { return delAllChange && delAllChange(); } },
531
+ React.createElement(MinusSquareOutlined, { className: "zt-column--daynamic-icon", style: { marginLeft: '4px' } }))) : null;
532
+ }, [delAllChange, showDelAllBtn]);
533
+ // 增减行回调
534
+ var onAddAndDelHandleMemo = useCallback(function (type, index) {
535
+ unstable_batchedUpdates(function () {
536
+ var innerIndex = getInnerIndex(currentPage, index);
537
+ onAddAndDelHandle && onAddAndDelHandle(type, innerIndex);
538
+ });
539
+ },
540
+ // eslint-disable-next-line react-hooks/exhaustive-deps
541
+ [onAddAndDelHandle]);
542
+ // 设置方法
543
+ var getNewColumnsMemo = useCallback(function (columns, refresh, myCatchColumns) {
544
+ // console.log('计算', currentDataSource, preDataSource);
545
+ return getNewColumns({
546
+ columns: columns,
547
+ newColumnsRef: newColumnsRef,
548
+ showColumnDynamic: showColumnDynamic,
549
+ showColumnDynamicKey: showColumnDynamicKey,
550
+ configInfo: configInfo,
551
+ currentDataSource: currentDataSource,
552
+ preDataSource: preDataSource,
553
+ rowKey: rowKey,
554
+ dataSourceRef: dataSourceRef,
555
+ expandableChildrenColumnName: expandableChildrenColumnName,
556
+ upDateColumnsRef: upDateColumnsRef,
557
+ setUpDateColumnsRef: setUpDateColumnsRef,
558
+ isUpDateColumnsRef: isUpDateColumnsRef,
559
+ setIsUpDateColumnsRef: setIsUpDateColumnsRef,
560
+ }, {
561
+ onEditableSave: onEditableSave,
562
+ onTableChange: onTableChange,
563
+ onFillDownChangeRef: onFillDownChangeRef,
564
+ currentPage: currentPage,
565
+ }, {
566
+ ColumnDynamicCom: ColumnDynamicCom,
567
+ DelAllCom: DelAllCom,
568
+ onAddAndDelHandleMemo: onAddAndDelHandleMemo,
569
+ onAddAndDelHandle: onAddAndDelHandle,
570
+ hideAddIcon: hideAddIcon,
571
+ addIconText: addIconText,
572
+ hideDelIcon: hideDelIcon,
573
+ delIconText: delIconText,
574
+ }, {
575
+ copyByKey: copyByKey,
576
+ myCatchColumns: myCatchColumns,
577
+ customSortHandle: customSortHandle,
578
+ customOrder: customOrder,
579
+ setCustomOrder: setCustomOrder,
580
+ isSort: isSort,
581
+ handleSearch: handleSearch,
582
+ handleReset: handleReset,
583
+ searchInput: searchInput,
584
+ });
342
585
  }, [
343
- columns,
344
586
  showColumnDynamic,
587
+ showColumnDynamicKey,
588
+ configInfo,
589
+ onEditableSave,
590
+ onTableChange,
591
+ currentPage,
592
+ ColumnDynamicCom,
593
+ DelAllCom,
594
+ onAddAndDelHandleMemo,
345
595
  onAddAndDelHandle,
346
596
  hideAddIcon,
347
597
  addIconText,
348
598
  hideDelIcon,
349
599
  delIconText,
350
- ColumnDynamicCom,
351
- onEditableSave,
352
- configInfo,
353
- showColumnDynamicKey,
600
+ copyByKey,
601
+ currentDataSource,
602
+ preDataSource,
603
+ rowKey,
604
+ dataSourceRef,
605
+ expandableChildrenColumnName,
606
+ customSortHandle,
607
+ customOrder,
608
+ setCustomOrder,
609
+ upDateColumnsRef,
610
+ setUpDateColumnsRef,
611
+ isUpDateColumnsRef,
612
+ setIsUpDateColumnsRef,
613
+ isSort,
614
+ onFillDownChangeRef,
354
615
  ]);
355
- return { newColumns: newColumns, dynamicColumns: dynamicColumns, setNewColumns: setNewColumns };
616
+ var _c = useState(false), refreshColumns = _c[0], setRefreshColumns = _c[1];
617
+ var _d = useState([]), myCatchColumns = _d[0], setMyCatchColumns = _d[1];
618
+ var refreshColumnsHandle = useCallback(function (columns) {
619
+ unstable_batchedUpdates(function () {
620
+ setRefreshColumns(function (refresh) { return !refresh; });
621
+ setIsUpDateColumnsRef(true);
622
+ if (columns) {
623
+ setMyCatchColumns(columns);
624
+ }
625
+ else {
626
+ setMyCatchColumns([]);
627
+ }
628
+ });
629
+ }, [setIsUpDateColumnsRef]);
630
+ var calcColumns = useMemo(function () {
631
+ return getNewColumnsMemo(columns, refreshColumns, myCatchColumns);
632
+ }, [getNewColumnsMemo, columns, refreshColumns, myCatchColumns]);
633
+ return {
634
+ newColumns: calcColumns._newColumns,
635
+ dynamicColumns: calcColumns._dynamicColumns,
636
+ refreshColumnsHandle: refreshColumnsHandle,
637
+ };
638
+ }
639
+ // 异步修改值
640
+ function useAsyncSetValue(initialValue) {
641
+ var timeoutRef = useRef();
642
+ var targetRef = useRef(initialValue);
643
+ var setValue = useCallback(function (value, index) {
644
+ if (timeoutRef.current) {
645
+ clearTimeout(timeoutRef.current);
646
+ timeoutRef.current = null;
647
+ }
648
+ timeoutRef.current = setTimeout(function () {
649
+ if (Array.isArray(targetRef.current)) {
650
+ targetRef.current[index] = value;
651
+ }
652
+ else {
653
+ targetRef.current = value;
654
+ }
655
+ });
656
+ }, []);
657
+ return [targetRef, setValue];
356
658
  }
357
659
  export default useColumns;