@zat-design/sisyphus-react 3.14.2 → 3.14.3-beta.1
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/index.esm.css +1 -1
- package/dist/less.esm.css +1 -1
- package/es/ProTree/components/ProTreeSelect/index.js +104 -71
- package/es/ProTreeModal/style/index.less +6 -0
- package/lib/ProTree/components/ProTreeSelect/index.js +104 -71
- package/lib/ProTreeModal/style/index.less +6 -0
- package/package.json +2 -1
|
@@ -14,8 +14,8 @@ require("antd/es/input/style");
|
|
|
14
14
|
var _input = _interopRequireDefault(require("antd/es/input"));
|
|
15
15
|
require("antd/es/message/style");
|
|
16
16
|
var _message2 = _interopRequireDefault(require("antd/es/message"));
|
|
17
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
18
17
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
18
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
19
19
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
20
20
|
require("antd/es/tree-select/style");
|
|
21
21
|
var _treeSelect = _interopRequireDefault(require("antd/es/tree-select"));
|
|
@@ -23,13 +23,13 @@ var _ahooks = require("ahooks");
|
|
|
23
23
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
24
24
|
var _react = _interopRequireWildcard(require("react"));
|
|
25
25
|
var _lodash = require("lodash");
|
|
26
|
+
var _utils = require("@zat-design/utils");
|
|
26
27
|
var _locale = _interopRequireDefault(require("../../../locale"));
|
|
27
28
|
var _ProConfigProvider = require("../../../ProConfigProvider");
|
|
28
29
|
var _Container = _interopRequireDefault(require("../../../ProForm/components/Container"));
|
|
29
30
|
var _AdaptiveTooltip = _interopRequireDefault(require("../AdaptiveTooltip"));
|
|
30
31
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
31
|
-
var _excluded = ["disabled", "code", "dataSource", "defaultDisableValue", "onChange", "useRequest", "transformResponse", "fieldNames", "placeholder", "tooltip", "showSearch", "filterTreeNode", "treeNodeFilterProp", "defaultExpandAll", "expandedKeys", "treeCheckable", "onSearch", "otherProps", "width", "dropdownStyle", "popupClassName", "style", "allowClear", "listHeight", "showCodeName", "className", "checkStrictly", "checkable"]
|
|
32
|
-
_excluded2 = ["children"];
|
|
32
|
+
var _excluded = ["disabled", "code", "dataSource", "defaultDisableValue", "onChange", "useRequest", "transformResponse", "fieldNames", "placeholder", "tooltip", "showSearch", "filterTreeNode", "treeNodeFilterProp", "defaultExpandAll", "expandedKeys", "treeCheckable", "onSearch", "otherProps", "width", "dropdownStyle", "popupClassName", "style", "allowClear", "listHeight", "showCodeName", "className", "checkStrictly", "checkable"];
|
|
33
33
|
/* eslint-disable react/no-danger */
|
|
34
34
|
/* eslint-disable react/jsx-closing-tag-location */
|
|
35
35
|
var SHOW_PARENT = _treeSelect.default.SHOW_PARENT;
|
|
@@ -42,14 +42,7 @@ var ProTreeSelect = (props, ref) => {
|
|
|
42
42
|
var _useProConfig = (0, _ProConfigProvider.useProConfig)('ProEnum'),
|
|
43
43
|
_useProConfig$dics = _useProConfig.dics,
|
|
44
44
|
dics = _useProConfig$dics === void 0 ? {} : _useProConfig$dics;
|
|
45
|
-
|
|
46
|
-
var code = 'value';
|
|
47
|
-
var uuidKey = 'value';
|
|
48
|
-
if (proSelectFieldNames && Object.keys(proSelectFieldNames).length) {
|
|
49
|
-
code = proSelectFieldNames.value;
|
|
50
|
-
label = proSelectFieldNames.label;
|
|
51
|
-
uuidKey = proSelectFieldNames.key || proSelectFieldNames.value;
|
|
52
|
-
}
|
|
45
|
+
|
|
53
46
|
// 配置属性
|
|
54
47
|
var disabled = props.disabled,
|
|
55
48
|
enumCode = props.code,
|
|
@@ -95,11 +88,32 @@ var ProTreeSelect = (props, ref) => {
|
|
|
95
88
|
var _ref3 = otherProps || {},
|
|
96
89
|
isView = _ref3.isView,
|
|
97
90
|
viewEmpty = _ref3.viewEmpty;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
91
|
+
|
|
92
|
+
// 合并全局和组件级别的 fieldNames,优先级:组件级 > 全局
|
|
93
|
+
var finalFieldNames = (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
94
|
+
label: 'label',
|
|
95
|
+
value: 'value',
|
|
96
|
+
children: 'children'
|
|
97
|
+
}, proSelectFieldNames), fieldNames);
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* 使用 tools.transformDataName 统一转换字段名
|
|
101
|
+
* 将原始数据转换为标准格式(label, value, children)
|
|
102
|
+
* tools.transformDataName 会自动检查数据是否已经是标准格式,如果是则直接返回
|
|
103
|
+
*/
|
|
104
|
+
var transformFieldNames = (0, _react.useCallback)(data => {
|
|
105
|
+
if (!data || !Array.isArray(data) || !data.length) {
|
|
106
|
+
return data || [];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 使用 tools.transformDataName 转换字段名
|
|
110
|
+
// 它会自动检查数据是否已经是标准格式(label, value, children),如果是则直接返回
|
|
111
|
+
return _utils.tools.transformDataName(data, {
|
|
112
|
+
label: finalFieldNames.label,
|
|
113
|
+
value: finalFieldNames.value,
|
|
114
|
+
children: finalFieldNames.children
|
|
115
|
+
});
|
|
116
|
+
}, [finalFieldNames]);
|
|
103
117
|
// 经过处理后的枚举数据,可能来自用户配置的处理函数后返回的结果
|
|
104
118
|
var _useSetState = (0, _ahooks.useSetState)({}),
|
|
105
119
|
_useSetState2 = (0, _slicedToArray2.default)(_useSetState, 2),
|
|
@@ -112,6 +126,7 @@ var ProTreeSelect = (props, ref) => {
|
|
|
112
126
|
|
|
113
127
|
/**
|
|
114
128
|
* 如果数据少于10条那么将数据平铺返回
|
|
129
|
+
* 注意:当 treeCheckable 为 false 时(单选模式),应保持树形结构,不进行平铺
|
|
115
130
|
* @param dictsEnum 原始数据
|
|
116
131
|
* @returns 平铺或者原始数据
|
|
117
132
|
*/
|
|
@@ -119,50 +134,33 @@ var ProTreeSelect = (props, ref) => {
|
|
|
119
134
|
if (treeCheckable) {
|
|
120
135
|
return dictsEnum;
|
|
121
136
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
var loopCount = data => {
|
|
125
|
-
data.map(item => {
|
|
126
|
-
count += 1;
|
|
127
|
-
var children = item.children,
|
|
128
|
-
other = (0, _objectWithoutProperties2.default)(item, _excluded2);
|
|
129
|
-
result.push((0, _objectSpread2.default)({}, other));
|
|
130
|
-
if (item.children) {
|
|
131
|
-
loopCount(item.children);
|
|
132
|
-
}
|
|
133
|
-
return item;
|
|
134
|
-
});
|
|
135
|
-
};
|
|
136
|
-
if ((dictsEnum === null || dictsEnum === void 0 ? void 0 : dictsEnum.length) > 10) {
|
|
137
|
-
return dictsEnum;
|
|
138
|
-
}
|
|
139
|
-
loopCount(dictsEnum);
|
|
140
|
-
if (count <= 10) {
|
|
141
|
-
return result;
|
|
142
|
-
}
|
|
137
|
+
// 单选模式(treeCheckable=false)时,保持树形结构,不进行平铺
|
|
138
|
+
// 因为 TreeSelect 在单选模式下也需要树形结构来正确展示层级关系
|
|
143
139
|
return dictsEnum;
|
|
144
140
|
};
|
|
145
141
|
|
|
146
142
|
/**
|
|
147
143
|
* 如果要展示code-name,那么将源数据的label转为code-name
|
|
148
|
-
*
|
|
144
|
+
* 注意:此时数据已经是标准格式(label, value, children)
|
|
145
|
+
* @param dataArr 源数据(标准格式)
|
|
149
146
|
* @param showCodeAndName 是否展示code-name
|
|
150
147
|
* @returns 转换结果
|
|
151
148
|
*/
|
|
152
149
|
var transferDataSource = (dataArr, showCodeAndName) => {
|
|
150
|
+
if (!showCodeAndName) {
|
|
151
|
+
return dataArr;
|
|
152
|
+
}
|
|
153
153
|
var copyData = (0, _lodash.cloneDeep)(dataArr);
|
|
154
154
|
var loop = arr => {
|
|
155
155
|
arr.map(item => {
|
|
156
|
-
item
|
|
156
|
+
item.label = `${item.value}-${item.label}`;
|
|
157
157
|
if (item.children) {
|
|
158
158
|
loop(item.children);
|
|
159
159
|
}
|
|
160
160
|
return item;
|
|
161
161
|
});
|
|
162
162
|
};
|
|
163
|
-
|
|
164
|
-
loop(copyData);
|
|
165
|
-
}
|
|
163
|
+
loop(copyData);
|
|
166
164
|
return copyData;
|
|
167
165
|
};
|
|
168
166
|
var defaultOnSuccessFun = res => {
|
|
@@ -174,7 +172,9 @@ var ProTreeSelect = (props, ref) => {
|
|
|
174
172
|
_message2.default.error(msg);
|
|
175
173
|
return;
|
|
176
174
|
}
|
|
177
|
-
|
|
175
|
+
// 先转换字段名,再处理 code-name 展示
|
|
176
|
+
var transformedData = transformFieldNames(data || []);
|
|
177
|
+
var resultData = transferDataSource(transformedData, showCodeName);
|
|
178
178
|
setState({
|
|
179
179
|
selectList: resultData || [],
|
|
180
180
|
origDataSource: resultData || []
|
|
@@ -203,7 +203,9 @@ var ProTreeSelect = (props, ref) => {
|
|
|
203
203
|
onSuccess: data => {
|
|
204
204
|
if (transformResponse && typeof transformResponse === 'function') {
|
|
205
205
|
var responseData = transformResponse(data);
|
|
206
|
-
|
|
206
|
+
// 先转换字段名,再处理 code-name 展示
|
|
207
|
+
var transformedData = transformFieldNames(responseData);
|
|
208
|
+
var resultData = transferDataSource(transformedData, showCodeName);
|
|
207
209
|
setState({
|
|
208
210
|
selectList: countChild(resultData),
|
|
209
211
|
origDataSource: resultData
|
|
@@ -224,7 +226,9 @@ var ProTreeSelect = (props, ref) => {
|
|
|
224
226
|
if (fetchFunction !== null && fetchFunction !== void 0 && fetchFunction.data, useRequest !== null && useRequest !== void 0 && (_useRequest$options2 = useRequest.options) !== null && _useRequest$options2 !== void 0 && _useRequest$options2.cacheKey) {
|
|
225
227
|
if (transformResponse && typeof transformResponse === 'function') {
|
|
226
228
|
var responseData = transformResponse(fetchFunction.data);
|
|
227
|
-
|
|
229
|
+
// 先转换字段名,再处理 code-name 展示
|
|
230
|
+
var transformedData = transformFieldNames(responseData);
|
|
231
|
+
var resultData = transferDataSource(transformedData, showCodeName);
|
|
228
232
|
setState({
|
|
229
233
|
selectList: countChild(resultData),
|
|
230
234
|
origDataSource: resultData
|
|
@@ -233,23 +237,29 @@ var ProTreeSelect = (props, ref) => {
|
|
|
233
237
|
defaultOnSuccessFun(fetchFunction.data);
|
|
234
238
|
}
|
|
235
239
|
}
|
|
236
|
-
}, [fetchFunction === null || fetchFunction === void 0 ? void 0 : fetchFunction.data]);
|
|
240
|
+
}, [fetchFunction === null || fetchFunction === void 0 ? void 0 : fetchFunction.data, transformFieldNames]);
|
|
237
241
|
(0, _ahooks.useDeepCompareEffect)(() => {
|
|
238
242
|
if (enumCode) {
|
|
239
243
|
var dictEnum = dics[enumCode] || [];
|
|
240
|
-
|
|
244
|
+
// 先转换字段名,再处理 code-name 展示
|
|
245
|
+
var transformedData = transformFieldNames(dictEnum);
|
|
246
|
+
var resultData = transferDataSource(transformedData, showCodeName);
|
|
247
|
+
var processedList = countChild(resultData);
|
|
241
248
|
setState({
|
|
242
|
-
selectList:
|
|
249
|
+
selectList: processedList,
|
|
243
250
|
origDataSource: resultData
|
|
244
251
|
});
|
|
245
252
|
} else if (dataSource) {
|
|
246
|
-
|
|
253
|
+
// 先转换字段名,再处理 code-name 展示
|
|
254
|
+
var _transformedData = transformFieldNames(dataSource);
|
|
255
|
+
var _resultData = transferDataSource(_transformedData, showCodeName);
|
|
256
|
+
var _processedList = countChild(_resultData);
|
|
247
257
|
setState({
|
|
248
|
-
selectList:
|
|
258
|
+
selectList: _processedList,
|
|
249
259
|
origDataSource: _resultData
|
|
250
260
|
});
|
|
251
261
|
}
|
|
252
|
-
}, [enumCode, dataSource]);
|
|
262
|
+
}, [enumCode, dataSource, transformFieldNames]);
|
|
253
263
|
(0, _ahooks.useDeepCompareEffect)(() => {
|
|
254
264
|
// code存在huo dataSource存在,不执行接口请求
|
|
255
265
|
if (enumCode || dataSource) {
|
|
@@ -285,6 +295,7 @@ var ProTreeSelect = (props, ref) => {
|
|
|
285
295
|
|
|
286
296
|
/**
|
|
287
297
|
* 根据值进行回显
|
|
298
|
+
* 注意:此时数据已经是标准格式(label, value, children)
|
|
288
299
|
* @param value 输入值
|
|
289
300
|
* @returns 对应枚举label
|
|
290
301
|
*/
|
|
@@ -294,8 +305,8 @@ var ProTreeSelect = (props, ref) => {
|
|
|
294
305
|
}
|
|
295
306
|
var labelResult = [];
|
|
296
307
|
var queryLabel = dicts => dicts.map(item => {
|
|
297
|
-
if (value.includes(item
|
|
298
|
-
var labelText = item
|
|
308
|
+
if (value.includes(item.value)) {
|
|
309
|
+
var labelText = item.label;
|
|
299
310
|
labelResult.push(labelText);
|
|
300
311
|
}
|
|
301
312
|
if (item.children) {
|
|
@@ -340,15 +351,22 @@ var ProTreeSelect = (props, ref) => {
|
|
|
340
351
|
|
|
341
352
|
/**
|
|
342
353
|
* 自定义渲染子树
|
|
343
|
-
*
|
|
354
|
+
* 注意:此时数据已经是标准格式(label, value, children)
|
|
355
|
+
* @param node 每个节点数据对象(标准格式)
|
|
344
356
|
* @returns 整个react节点树
|
|
345
357
|
*/
|
|
346
358
|
var renderTreeNode = (node, grade) => {
|
|
347
359
|
var children = node.children,
|
|
348
|
-
icon = node.icon
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
360
|
+
icon = node.icon,
|
|
361
|
+
label = node.label,
|
|
362
|
+
nodeValue = node.value,
|
|
363
|
+
nodeKey = node.key;
|
|
364
|
+
var labelText = label;
|
|
365
|
+
var value = nodeValue;
|
|
366
|
+
var key = nodeValue; // 使用 value 作为 key,如果有 key 字段则使用 key
|
|
367
|
+
if (nodeKey !== undefined) {
|
|
368
|
+
key = nodeKey;
|
|
369
|
+
}
|
|
352
370
|
// 三无走默认
|
|
353
371
|
if (['undefined-undefined', 'undefined'].includes(labelText) && !value && !key) {
|
|
354
372
|
if (showCodeName) {
|
|
@@ -416,7 +434,8 @@ var ProTreeSelect = (props, ref) => {
|
|
|
416
434
|
|
|
417
435
|
/**
|
|
418
436
|
* 从树形数据中找出用户搜索得数据,并且将搜索字符串高亮标识
|
|
419
|
-
*
|
|
437
|
+
* 注意:此时数据已经是标准格式(label, value, children)
|
|
438
|
+
* @param data 全量树(标准格式)
|
|
420
439
|
* @param searchStr 搜索字符串
|
|
421
440
|
* @returns 处理后得树
|
|
422
441
|
*/
|
|
@@ -433,11 +452,11 @@ var ProTreeSelect = (props, ref) => {
|
|
|
433
452
|
}
|
|
434
453
|
// 迭代完子节点向上回溯,如果有匹配到得子节点,那么加入当前节点得孩子对象上,否则加入得是空数组
|
|
435
454
|
item.children = currentNodeChild;
|
|
436
|
-
// 判断节点
|
|
455
|
+
// 判断节点label是否包含关键字 如果有,那么直接进行下一循环
|
|
437
456
|
// @ts-ignore
|
|
438
|
-
if (item
|
|
457
|
+
if (item.label && item.label.indexOf(keyWord) > -1 && (selectProps === null || selectProps === void 0 ? void 0 : selectProps.mode) !== 'treeSelect') {
|
|
439
458
|
var regExp = new RegExp(keyWord);
|
|
440
|
-
item
|
|
459
|
+
item.label = item.label.replace(regExp, `<span class="highlight-search-text">${keyWord}</span>`);
|
|
441
460
|
}
|
|
442
461
|
currentAllNodeChild.push(item);
|
|
443
462
|
}
|
|
@@ -475,16 +494,23 @@ var ProTreeSelect = (props, ref) => {
|
|
|
475
494
|
return _ref6.apply(this, arguments);
|
|
476
495
|
};
|
|
477
496
|
}(), 500);
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* 从树形数据中查找节点
|
|
500
|
+
* 注意:此时数据已经是标准格式(label, value, children)
|
|
501
|
+
* @param treeList 树形数据(标准格式)
|
|
502
|
+
* @param nodeValue 节点值
|
|
503
|
+
* @returns 找到的节点
|
|
504
|
+
*/
|
|
478
505
|
function findTreeNode(treeList, nodeValue) {
|
|
479
506
|
var result = {};
|
|
480
507
|
var filterData = function filterData(data) {
|
|
481
508
|
for (var i = 0; i < data.length; i++) {
|
|
482
509
|
var item = data[i];
|
|
483
|
-
if (item
|
|
510
|
+
if (item.value === nodeValue || Array.isArray(nodeValue) && nodeValue.includes(item.value)) {
|
|
484
511
|
result = (0, _objectSpread2.default)({}, item);
|
|
485
|
-
|
|
486
|
-
result.
|
|
487
|
-
delete result[(fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.children) || 'children'];
|
|
512
|
+
// 删除 children 字段,避免循环引用
|
|
513
|
+
delete result.children;
|
|
488
514
|
return null;
|
|
489
515
|
}
|
|
490
516
|
// 一直递归到最后一层子节点
|
|
@@ -496,6 +522,13 @@ var ProTreeSelect = (props, ref) => {
|
|
|
496
522
|
filterData(treeList);
|
|
497
523
|
return result;
|
|
498
524
|
}
|
|
525
|
+
/**
|
|
526
|
+
* 根据值获取标签
|
|
527
|
+
* 注意:此时数据已经是标准格式(label, value, children)
|
|
528
|
+
* @param treeList 树形数据(标准格式)
|
|
529
|
+
* @param nodeValue 节点值
|
|
530
|
+
* @returns 标签对象或数组
|
|
531
|
+
*/
|
|
499
532
|
function getLabelByValue(treeList, nodeValue) {
|
|
500
533
|
var result = nodeValue;
|
|
501
534
|
if (nodeValue) {
|
|
@@ -507,19 +540,19 @@ var ProTreeSelect = (props, ref) => {
|
|
|
507
540
|
return item;
|
|
508
541
|
});
|
|
509
542
|
} else {
|
|
510
|
-
result = findTreeNode(treeList, nodeValue
|
|
543
|
+
result = findTreeNode(treeList, nodeValue.value);
|
|
511
544
|
}
|
|
512
545
|
}
|
|
513
546
|
return result;
|
|
514
547
|
}
|
|
515
548
|
var handleChange = (newVal, label, extra) => {
|
|
516
549
|
// newVal回来得一定是label、value
|
|
550
|
+
// 注意:此时数据已经是标准格式(label, value, children)
|
|
517
551
|
var _selectList = selectList.map(item => {
|
|
518
|
-
var
|
|
519
|
-
|
|
520
|
-
if (label) {
|
|
552
|
+
var _label = item.label;
|
|
553
|
+
if (_label) {
|
|
521
554
|
var regex = /<span class="highlight-search-text">(.*?)<\/span>/g;
|
|
522
|
-
_label = item
|
|
555
|
+
_label = item.label = _label.replace(regex, '$1');
|
|
523
556
|
}
|
|
524
557
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
|
|
525
558
|
label: _label
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
@root-entry-name: 'default';
|
|
2
2
|
@import (reference) '~antd/es/style/themes/index.less';
|
|
3
3
|
|
|
4
|
+
.pro-tree-select-drop-down-container{
|
|
5
|
+
.@{ant-prefix}-select-tree-checkbox{
|
|
6
|
+
margin-top: 0;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
4
10
|
.pro-tree-modal-container .@{ant-prefix}-modal-content .@{ant-prefix}-modal-body {
|
|
5
11
|
max-height: 498px;
|
|
6
12
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zat-design/sisyphus-react",
|
|
3
|
-
"version": "3.14.
|
|
3
|
+
"version": "3.14.3-beta.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=18.19.0"
|
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
"@commitlint/config-conventional": "^12.1.1",
|
|
92
92
|
"@testing-library/jest-dom": "6.2.0",
|
|
93
93
|
"@testing-library/react": "12.1.5",
|
|
94
|
+
"@testing-library/react-hooks": "^8.0.1",
|
|
94
95
|
"@types/classnames": "^2.3.1",
|
|
95
96
|
"@types/jest": "^29.5.11",
|
|
96
97
|
"@types/lodash": "^4.14.171",
|