xydata-tools 1.0.35 → 1.0.37

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/README.md CHANGED
@@ -212,6 +212,7 @@ const renderFieldsValue = async () => {
212
212
  {
213
213
  name: "image.png",
214
214
  url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png",
215
+ fileName:'xxx'
215
216
  },
216
217
  {
217
218
  url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png",
@@ -0,0 +1,637 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
7
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
8
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
9
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
10
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
11
+ import React, { useState, useMemo, useEffect, useRef, useCallback, memo } from "react";
12
+ import { Modal, Checkbox, Input, Button, Divider, Space, Tree } from "antd";
13
+ import { SearchOutlined, FolderOutlined, FolderOpenOutlined } from "@ant-design/icons";
14
+
15
+ // 优化的URI卡片组件
16
+ var UriCard = /*#__PURE__*/memo(function (_ref) {
17
+ var uri = _ref.uri,
18
+ isSelected = _ref.isSelected,
19
+ isHighlighted = _ref.isHighlighted,
20
+ onToggle = _ref.onToggle,
21
+ onClearHighlight = _ref.onClearHighlight,
22
+ uriRef = _ref.uriRef;
23
+ var handleClick = useCallback(function () {
24
+ // 如果当前项被高亮,点击时取消高亮
25
+ if (isHighlighted) {
26
+ onClearHighlight();
27
+ }
28
+ // 执行正常的选择操作
29
+ onToggle(uri.id, !isSelected);
30
+ }, [isHighlighted, onClearHighlight, onToggle, uri.id, isSelected]);
31
+ var handleCheckboxChange = useCallback(function (e) {
32
+ e.stopPropagation();
33
+ onToggle(uri.id, e.target.checked);
34
+ }, [onToggle, uri.id]);
35
+ return /*#__PURE__*/React.createElement("div", {
36
+ ref: uriRef,
37
+ style: {
38
+ padding: "12px",
39
+ border: isHighlighted ? "2px solid #1890ff" : "1px solid #e8e8e8",
40
+ borderRadius: "6px",
41
+ backgroundColor: isHighlighted ? "#e6f7ff" : isSelected ? "#f6ffed" : "#fff",
42
+ transition: "all 0.3s ease",
43
+ cursor: "pointer",
44
+ position: "relative",
45
+ minWidth: 0,
46
+ boxSizing: "border-box",
47
+ transform: isHighlighted ? "scale(1.02)" : "scale(1)",
48
+ boxShadow: isHighlighted ? "0 4px 12px rgba(24, 144, 255, 0.3)" : "none"
49
+ },
50
+ onClick: handleClick
51
+ }, /*#__PURE__*/React.createElement("div", {
52
+ style: {
53
+ display: "flex",
54
+ alignItems: "flex-start",
55
+ gap: "8px"
56
+ }
57
+ }, /*#__PURE__*/React.createElement(Checkbox, {
58
+ checked: isSelected,
59
+ onChange: handleCheckboxChange,
60
+ style: {
61
+ marginTop: "2px",
62
+ flexShrink: 0
63
+ }
64
+ }), /*#__PURE__*/React.createElement("div", {
65
+ style: {
66
+ flex: 1,
67
+ minWidth: 0
68
+ }
69
+ }, /*#__PURE__*/React.createElement("div", {
70
+ style: {
71
+ fontSize: 13,
72
+ color: "#333",
73
+ marginBottom: 4,
74
+ lineHeight: 1.4
75
+ }
76
+ }, uri.description), uri.url && /*#__PURE__*/React.createElement("div", {
77
+ style: {
78
+ fontSize: 11,
79
+ color: "#999",
80
+ lineHeight: 1.3,
81
+ overflow: "hidden",
82
+ textOverflow: "ellipsis",
83
+ whiteSpace: "nowrap"
84
+ },
85
+ title: uri.url
86
+ }, uri.url))));
87
+ });
88
+ UriCard.displayName = 'UriCard';
89
+ var UriModal = function UriModal(_ref2) {
90
+ var visible = _ref2.visible,
91
+ onCancel = _ref2.onCancel,
92
+ onOk = _ref2.onOk,
93
+ loading = _ref2.loading,
94
+ _ref2$title = _ref2.title,
95
+ title = _ref2$title === void 0 ? "设置请求" : _ref2$title,
96
+ _ref2$uriList = _ref2.uriList,
97
+ uriList = _ref2$uriList === void 0 ? [] : _ref2$uriList,
98
+ _ref2$selectedUris = _ref2.selectedUris,
99
+ selectedUris = _ref2$selectedUris === void 0 ? [] : _ref2$selectedUris,
100
+ onSelectedChange = _ref2.onSelectedChange;
101
+ var _useState = useState(""),
102
+ _useState2 = _slicedToArray(_useState, 2),
103
+ searchText = _useState2[0],
104
+ setSearchText = _useState2[1];
105
+ var _useState3 = useState([]),
106
+ _useState4 = _slicedToArray(_useState3, 2),
107
+ selectedTreeKeys = _useState4[0],
108
+ setSelectedTreeKeys = _useState4[1];
109
+ var _useState5 = useState([]),
110
+ _useState6 = _slicedToArray(_useState5, 2),
111
+ expandedTreeKeys = _useState6[0],
112
+ setExpandedTreeKeys = _useState6[1];
113
+ var _useState7 = useState(null),
114
+ _useState8 = _slicedToArray(_useState7, 2),
115
+ highlightedUriId = _useState8[0],
116
+ setHighlightedUriId = _useState8[1];
117
+ var highlightTimeoutRef = useRef(null);
118
+ var moduleRefs = useRef({});
119
+ var uriRefs = useRef({});
120
+
121
+ // 重置搜索状态当Modal关闭时
122
+ useEffect(function () {
123
+ if (!visible) {
124
+ setSearchText("");
125
+ setSelectedTreeKeys([]);
126
+ setExpandedTreeKeys([]);
127
+ setHighlightedUriId(null);
128
+ if (highlightTimeoutRef.current) {
129
+ clearTimeout(highlightTimeoutRef.current);
130
+ highlightTimeoutRef.current = null;
131
+ }
132
+ moduleRefs.current = {};
133
+ uriRefs.current = {};
134
+ }
135
+ }, [visible]);
136
+
137
+ // 按模块分组并过滤 - 优化搜索性能
138
+ var groupedUriList = useMemo(function () {
139
+ var filteredList = uriList;
140
+
141
+ // 优化搜索:提前转换为小写并缓存
142
+ if (searchText) {
143
+ var searchLower = searchText.toLowerCase();
144
+ filteredList = uriList.filter(function (uri) {
145
+ var _uri$description, _uri$moduleName;
146
+ return ((_uri$description = uri.description) === null || _uri$description === void 0 ? void 0 : _uri$description.toLowerCase().includes(searchLower)) || ((_uri$moduleName = uri.moduleName) === null || _uri$moduleName === void 0 ? void 0 : _uri$moduleName.toLowerCase().includes(searchLower));
147
+ });
148
+ }
149
+
150
+ // 按模块名分组
151
+ var grouped = filteredList.reduce(function (acc, uri) {
152
+ var moduleName = uri.moduleName || "其他";
153
+ if (!acc[moduleName]) {
154
+ acc[moduleName] = [];
155
+ }
156
+ acc[moduleName].push(uri);
157
+ return acc;
158
+ }, {});
159
+
160
+ // 转换为数组格式并排序
161
+ return Object.entries(grouped).map(function (_ref3) {
162
+ var _ref4 = _slicedToArray(_ref3, 2),
163
+ moduleName = _ref4[0],
164
+ items = _ref4[1];
165
+ return {
166
+ moduleName: moduleName,
167
+ items: items,
168
+ count: items.length
169
+ };
170
+ }).sort(function (a, b) {
171
+ // "其他" 放在最后
172
+ if (a.moduleName === "其他") return 1;
173
+ if (b.moduleName === "其他") return -1;
174
+ return a.moduleName.localeCompare(b.moduleName);
175
+ });
176
+ }, [uriList, searchText]);
177
+
178
+ // 全局全选状态
179
+ var globalIndeterminate = useMemo(function () {
180
+ var allItems = groupedUriList.flatMap(function (group) {
181
+ return group.items;
182
+ });
183
+ if (allItems.length === 0) return false;
184
+ var allItemIds = allItems.map(function (item) {
185
+ return item.id;
186
+ });
187
+ var selectedInAll = selectedUris.filter(function (id) {
188
+ return allItemIds.includes(id);
189
+ });
190
+ return selectedInAll.length > 0 && selectedInAll.length < allItems.length;
191
+ }, [selectedUris, groupedUriList]);
192
+ var globalCheckAll = useMemo(function () {
193
+ var allItems = groupedUriList.flatMap(function (group) {
194
+ return group.items;
195
+ });
196
+ if (allItems.length === 0) return false;
197
+ var allItemIds = allItems.map(function (item) {
198
+ return item.id;
199
+ });
200
+ var selectedInAll = selectedUris.filter(function (id) {
201
+ return allItemIds.includes(id);
202
+ });
203
+ return selectedInAll.length === allItems.length;
204
+ }, [selectedUris, groupedUriList]);
205
+
206
+ // 单个模块的全选状态
207
+ var getModuleSelectState = function getModuleSelectState(moduleItems) {
208
+ if (moduleItems.length === 0) return {
209
+ indeterminate: false,
210
+ checkAll: false
211
+ };
212
+ var moduleItemIds = moduleItems.map(function (item) {
213
+ return item.id;
214
+ });
215
+ var selectedInModule = selectedUris.filter(function (id) {
216
+ return moduleItemIds.includes(id);
217
+ });
218
+ return {
219
+ indeterminate: selectedInModule.length > 0 && selectedInModule.length < moduleItems.length,
220
+ checkAll: selectedInModule.length === moduleItems.length
221
+ };
222
+ };
223
+
224
+ // 全局全选/反选
225
+ var handleGlobalSelectAll = function handleGlobalSelectAll(checked) {
226
+ if (!onSelectedChange) return;
227
+ var allItems = groupedUriList.flatMap(function (group) {
228
+ return group.items;
229
+ });
230
+ if (checked) {
231
+ // 全选:将所有项添加到已选择列表
232
+ var allItemIds = allItems.map(function (item) {
233
+ return item.id;
234
+ }).filter(Boolean);
235
+ var newSelected = _toConsumableArray(new Set([].concat(_toConsumableArray(selectedUris), _toConsumableArray(allItemIds))));
236
+ onSelectedChange(newSelected);
237
+ } else {
238
+ // 反选:从已选择列表中移除所有项
239
+ var _allItemIds = new Set(allItems.map(function (item) {
240
+ return item.id;
241
+ }).filter(Boolean));
242
+ var _newSelected = selectedUris.filter(function (id) {
243
+ return !_allItemIds.has(id);
244
+ });
245
+ onSelectedChange(_newSelected);
246
+ }
247
+ };
248
+
249
+ // 模块全选/反选
250
+ var handleModuleSelectAll = function handleModuleSelectAll(moduleItems, checked) {
251
+ if (!onSelectedChange) return;
252
+ if (checked) {
253
+ // 全选模块:将模块中的所有项添加到已选择列表
254
+ var moduleItemIds = moduleItems.map(function (item) {
255
+ return item.id;
256
+ }).filter(Boolean);
257
+ var newSelected = _toConsumableArray(new Set([].concat(_toConsumableArray(selectedUris), _toConsumableArray(moduleItemIds))));
258
+ onSelectedChange(newSelected);
259
+ } else {
260
+ // 反选模块:从已选择列表中移除模块中的所有项
261
+ var _moduleItemIds = new Set(moduleItems.map(function (item) {
262
+ return item.id;
263
+ }).filter(Boolean));
264
+ var _newSelected2 = selectedUris.filter(function (id) {
265
+ return !_moduleItemIds.has(id);
266
+ });
267
+ onSelectedChange(_newSelected2);
268
+ }
269
+ };
270
+
271
+ // 单个选择 - 使用useCallback优化
272
+ var handleSingleCheck = useCallback(function (uriId, checked) {
273
+ if (!onSelectedChange || !uriId) return;
274
+ if (checked) {
275
+ if (!selectedUris.includes(uriId)) {
276
+ onSelectedChange([].concat(_toConsumableArray(selectedUris), [uriId]));
277
+ }
278
+ } else {
279
+ onSelectedChange(selectedUris.filter(function (id) {
280
+ return id !== uriId;
281
+ }));
282
+ }
283
+ }, [onSelectedChange, selectedUris]);
284
+
285
+ // 清除高亮 - 使用useCallback优化
286
+ var handleClearHighlight = useCallback(function () {
287
+ if (highlightTimeoutRef.current) {
288
+ clearTimeout(highlightTimeoutRef.current);
289
+ highlightTimeoutRef.current = null;
290
+ }
291
+ setHighlightedUriId(null);
292
+ }, []);
293
+
294
+ // 清空搜索
295
+ var handleClearSearch = useCallback(function () {
296
+ setSearchText("");
297
+ }, []);
298
+
299
+ // 总计数
300
+ var totalCount = groupedUriList.reduce(function (acc, group) {
301
+ return acc + group.count;
302
+ }, 0);
303
+
304
+ // 预计算选中状态,避免在渲染时重复计算
305
+ var selectedUrisSet = useMemo(function () {
306
+ return new Set(selectedUris);
307
+ }, [selectedUris]);
308
+
309
+ // 生成树形数据 - 优化性能
310
+ var treeData = useMemo(function () {
311
+ return groupedUriList.map(function (group) {
312
+ var moduleState = getModuleSelectState(group.items);
313
+ var selectedCount = group.items.filter(function (item) {
314
+ return selectedUrisSet.has(item.id);
315
+ }).length;
316
+ return {
317
+ title: /*#__PURE__*/React.createElement("div", {
318
+ style: {
319
+ display: "inline"
320
+ }
321
+ }, /*#__PURE__*/React.createElement("span", {
322
+ style: {
323
+ color: moduleState.checkAll ? "#1890ff" : "#333",
324
+ fontWeight: moduleState.checkAll || moduleState.indeterminate ? 500 : 400,
325
+ fontSize: 13
326
+ }
327
+ }, group.moduleName), /*#__PURE__*/React.createElement("span", {
328
+ style: {
329
+ color: "#999",
330
+ fontSize: 11,
331
+ marginLeft: 4
332
+ }
333
+ }, selectedCount, "/", group.count)),
334
+ key: group.moduleName,
335
+ icon: function icon(_ref5) {
336
+ var expanded = _ref5.expanded;
337
+ return /*#__PURE__*/React.createElement("span", {
338
+ style: {
339
+ marginRight: 4
340
+ }
341
+ }, expanded ? /*#__PURE__*/React.createElement(FolderOpenOutlined, {
342
+ style: {
343
+ color: "#1890ff"
344
+ }
345
+ }) : /*#__PURE__*/React.createElement(FolderOutlined, null));
346
+ },
347
+ children: group.items.map(function (item) {
348
+ return {
349
+ title: /*#__PURE__*/React.createElement("div", {
350
+ style: {
351
+ color: selectedUrisSet.has(item.id) ? "#1890ff" : "#666",
352
+ fontSize: 12,
353
+ overflow: "hidden",
354
+ textOverflow: "ellipsis",
355
+ whiteSpace: "nowrap",
356
+ padding: "2px 0"
357
+ }
358
+ }, item.description),
359
+ key: "".concat(group.moduleName, "-").concat(item.id),
360
+ isLeaf: true,
361
+ uriId: item.id,
362
+ moduleName: group.moduleName
363
+ };
364
+ })
365
+ };
366
+ });
367
+ }, [groupedUriList, selectedUrisSet]);
368
+
369
+ // 初始化展开所有节点
370
+ useEffect(function () {
371
+ if (visible && groupedUriList.length > 0) {
372
+ var allKeys = groupedUriList.map(function (group) {
373
+ return group.moduleName;
374
+ });
375
+ setExpandedTreeKeys(allKeys);
376
+ }
377
+ }, [visible, groupedUriList]);
378
+
379
+ // 树节点选择处理
380
+ var handleTreeSelect = function handleTreeSelect(selectedKeys, info) {
381
+ if (selectedKeys.length === 0) return;
382
+ var key = selectedKeys[0];
383
+ setSelectedTreeKeys(selectedKeys);
384
+
385
+ // 清除之前的高亮和定时器
386
+ if (highlightTimeoutRef.current) {
387
+ clearTimeout(highlightTimeoutRef.current);
388
+ highlightTimeoutRef.current = null;
389
+ }
390
+ setHighlightedUriId(null);
391
+
392
+ // 如果是模块节点,滚动到对应模块
393
+ if (groupedUriList.find(function (group) {
394
+ return group.moduleName === key;
395
+ })) {
396
+ var moduleElement = moduleRefs.current[key];
397
+ if (moduleElement) {
398
+ moduleElement.scrollIntoView({
399
+ behavior: "smooth",
400
+ block: "start",
401
+ inline: "nearest"
402
+ });
403
+ }
404
+ } else {
405
+ // 如果是URI节点,直接滚动到对应的URI
406
+ var nodeData = info.node;
407
+ if (nodeData.uriId) {
408
+ var uriElement = uriRefs.current[nodeData.uriId];
409
+ if (uriElement) {
410
+ // 直接滚动到URI位置,不需要先滚动到模块
411
+ uriElement.scrollIntoView({
412
+ behavior: "smooth",
413
+ block: "center",
414
+ inline: "nearest"
415
+ });
416
+
417
+ // 立即高亮URI
418
+ setHighlightedUriId(nodeData.uriId);
419
+
420
+ // 设置新的定时器,5秒后取消高亮
421
+ highlightTimeoutRef.current = setTimeout(function () {
422
+ setHighlightedUriId(null);
423
+ highlightTimeoutRef.current = null;
424
+ }, 5000);
425
+ }
426
+ }
427
+ }
428
+ };
429
+ return /*#__PURE__*/React.createElement(Modal, {
430
+ title: title,
431
+ open: visible,
432
+ onCancel: onCancel,
433
+ onOk: onOk,
434
+ confirmLoading: loading,
435
+ width: 1400,
436
+ bodyStyle: {
437
+ height: 650,
438
+ overflow: "hidden",
439
+ padding: 0
440
+ },
441
+ maskClosable: false,
442
+ destroyOnClose: true
443
+ }, /*#__PURE__*/React.createElement("div", {
444
+ style: {
445
+ display: "flex",
446
+ height: "650px"
447
+ }
448
+ }, /*#__PURE__*/React.createElement("div", {
449
+ style: {
450
+ width: 300,
451
+ borderRight: "1px solid #f0f0f0",
452
+ backgroundColor: "#fafafa",
453
+ display: "flex",
454
+ flexDirection: "column"
455
+ }
456
+ }, /*#__PURE__*/React.createElement("div", {
457
+ style: {
458
+ padding: "16px 16px 12px 16px",
459
+ borderBottom: "1px solid #f0f0f0"
460
+ }
461
+ }, /*#__PURE__*/React.createElement("h4", {
462
+ style: {
463
+ margin: 0,
464
+ fontSize: 14,
465
+ color: "#333"
466
+ }
467
+ }, "\u6A21\u5757\u5BFC\u822A"), /*#__PURE__*/React.createElement("div", {
468
+ style: {
469
+ fontSize: 11,
470
+ color: "#666",
471
+ marginTop: 4
472
+ }
473
+ }, "\u70B9\u51FB\u6A21\u5757\u6216\u8BF7\u6C42\u5FEB\u901F\u5B9A\u4F4D")), /*#__PURE__*/React.createElement("div", {
474
+ style: {
475
+ flex: 1,
476
+ overflowY: "auto",
477
+ overflowX: "hidden",
478
+ padding: "12px 16px",
479
+ maxHeight: "calc(650px - 60px)" // 减去标题区域高度
480
+ }
481
+ }, /*#__PURE__*/React.createElement(Tree, {
482
+ treeData: treeData,
483
+ selectedKeys: selectedTreeKeys,
484
+ expandedKeys: expandedTreeKeys,
485
+ onSelect: handleTreeSelect,
486
+ onExpand: setExpandedTreeKeys,
487
+ showIcon: true,
488
+ style: {
489
+ fontSize: 12,
490
+ backgroundColor: "transparent"
491
+ }
492
+ }))), /*#__PURE__*/React.createElement("div", {
493
+ style: {
494
+ flex: 1,
495
+ display: "flex",
496
+ flexDirection: "column",
497
+ height: "650px"
498
+ }
499
+ }, /*#__PURE__*/React.createElement("div", {
500
+ style: {
501
+ padding: "16px 16px 0 16px",
502
+ borderBottom: "1px solid #f0f0f0",
503
+ backgroundColor: "#fff"
504
+ }
505
+ }, /*#__PURE__*/React.createElement(Input, {
506
+ placeholder: "\u641C\u7D22\u8BF7\u6C42\u63CF\u8FF0\u6216\u6A21\u5757\u540D\u79F0",
507
+ prefix: /*#__PURE__*/React.createElement(SearchOutlined, null),
508
+ value: searchText,
509
+ onChange: function onChange(e) {
510
+ return setSearchText(e.target.value);
511
+ },
512
+ allowClear: true,
513
+ style: {
514
+ marginBottom: 12
515
+ }
516
+ }), /*#__PURE__*/React.createElement("div", {
517
+ style: {
518
+ paddingBottom: 12,
519
+ marginBottom: 12,
520
+ backgroundColor: "#fafafa",
521
+ padding: "12px",
522
+ borderRadius: "6px"
523
+ }
524
+ }, /*#__PURE__*/React.createElement(Space, {
525
+ align: "center"
526
+ }, /*#__PURE__*/React.createElement(Checkbox, {
527
+ indeterminate: globalIndeterminate,
528
+ checked: globalCheckAll,
529
+ onChange: function onChange(e) {
530
+ return handleGlobalSelectAll(e.target.checked);
531
+ }
532
+ }, /*#__PURE__*/React.createElement("strong", null, "\u5168\u9009\u6240\u6709")), /*#__PURE__*/React.createElement("span", {
533
+ style: {
534
+ color: "#666",
535
+ fontSize: 12
536
+ }
537
+ }, "\u5171 ", groupedUriList.length, " \u4E2A\u6A21\u5757\uFF0C", totalCount, " \u4E2A\u8BF7\u6C42"), selectedUris.length > 0 && /*#__PURE__*/React.createElement("span", {
538
+ style: {
539
+ color: "#1890ff",
540
+ fontSize: 12,
541
+ fontWeight: 500
542
+ }
543
+ }, "\u5DF2\u9009\u62E9 ", selectedUris.length, " \u9879")))), /*#__PURE__*/React.createElement("div", {
544
+ style: {
545
+ flex: 1,
546
+ overflowY: "auto",
547
+ overflowX: "hidden",
548
+ padding: "16px"
549
+ }
550
+ }, groupedUriList.length === 0 ? /*#__PURE__*/React.createElement("div", {
551
+ style: {
552
+ textAlign: "center",
553
+ color: "#999",
554
+ padding: "40px 0"
555
+ }
556
+ }, searchText ? "未找到匹配的请求" : "暂无请求数据") : /*#__PURE__*/React.createElement("div", null, groupedUriList.map(function (group, groupIndex) {
557
+ var moduleState = getModuleSelectState(group.items);
558
+ return /*#__PURE__*/React.createElement("div", {
559
+ key: group.moduleName,
560
+ ref: function ref(el) {
561
+ return moduleRefs.current[group.moduleName] = el;
562
+ },
563
+ style: {
564
+ marginBottom: 24
565
+ }
566
+ }, /*#__PURE__*/React.createElement("div", {
567
+ style: {
568
+ marginBottom: 12,
569
+ padding: "8px 12px",
570
+ backgroundColor: "#f5f5f5",
571
+ borderRadius: "4px",
572
+ display: "flex",
573
+ justifyContent: "space-between",
574
+ alignItems: "center"
575
+ }
576
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Checkbox, {
577
+ indeterminate: moduleState.indeterminate,
578
+ checked: moduleState.checkAll,
579
+ onChange: function onChange(e) {
580
+ return handleModuleSelectAll(group.items, e.target.checked);
581
+ }
582
+ }, /*#__PURE__*/React.createElement("strong", {
583
+ style: {
584
+ fontSize: 14,
585
+ color: "#333"
586
+ }
587
+ }, group.moduleName))), /*#__PURE__*/React.createElement("span", {
588
+ style: {
589
+ color: "#666",
590
+ fontSize: 12
591
+ }
592
+ }, group.count, " \u4E2A\u8BF7\u6C42")), /*#__PURE__*/React.createElement("div", {
593
+ style: {
594
+ display: "grid",
595
+ gridTemplateColumns: "repeat(4, 1fr)",
596
+ gap: "12px",
597
+ padding: "0 12px",
598
+ width: "100%",
599
+ boxSizing: "border-box"
600
+ }
601
+ }, group.items.map(function (uri) {
602
+ return /*#__PURE__*/React.createElement(UriCard, {
603
+ key: uri.id,
604
+ uri: uri,
605
+ isSelected: selectedUrisSet.has(uri.id),
606
+ isHighlighted: highlightedUriId === uri.id,
607
+ onToggle: handleSingleCheck,
608
+ onClearHighlight: handleClearHighlight,
609
+ uriRef: function uriRef(el) {
610
+ return uriRefs.current[uri.id] = el;
611
+ }
612
+ });
613
+ })), groupIndex < groupedUriList.length - 1 && /*#__PURE__*/React.createElement(Divider, {
614
+ style: {
615
+ margin: "24px 0"
616
+ }
617
+ }));
618
+ })), searchText && /*#__PURE__*/React.createElement("div", {
619
+ style: {
620
+ marginTop: 16,
621
+ fontSize: 12,
622
+ color: "#666",
623
+ padding: "8px 12px",
624
+ backgroundColor: "#f9f9f9",
625
+ borderRadius: "4px"
626
+ }
627
+ }, "\u641C\u7D22 \"", searchText, "\" \u627E\u5230 ", groupedUriList.length, " \u4E2A\u6A21\u5757\uFF0C\u5171", " ", totalCount, " \u9879\u7ED3\u679C", totalCount < uriList.length && /*#__PURE__*/React.createElement(Button, {
628
+ type: "link",
629
+ size: "small",
630
+ onClick: handleClearSearch,
631
+ style: {
632
+ padding: 0,
633
+ marginLeft: 8
634
+ }
635
+ }, "\u6E05\u7A7A\u641C\u7D22\u67E5\u770B\u5168\u90E8"))))));
636
+ };
637
+ export default UriModal;
@@ -14,12 +14,13 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
14
14
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
15
15
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
16
16
  import { ExclamationCircleOutlined, PlusOutlined, SyncOutlined } from "@ant-design/icons";
17
- import { Button, Divider, message, Modal, Select } from "antd";
17
+ import { Button, Divider, message, Modal } from "antd";
18
18
  import React, { useEffect, useRef, useState } from "react";
19
19
  import ProTable from "@ant-design/pro-table";
20
20
  ;
21
21
  import Auth from "../../auth";
22
22
  import UpdateForm from "./components/UpdateForm";
23
+ import UriModal from "./components/UriModal";
23
24
  import { addPerm, assignUri, getPermUris, getUriList, loadPermData, queryPerm, removePerm, updatePerm } from "./service.js";
24
25
  /**
25
26
  * 添加权限
@@ -181,6 +182,10 @@ var PermList = function PermList() {
181
182
  _useState12 = _slicedToArray(_useState11, 2),
182
183
  currentItem = _useState12[0],
183
184
  setCurrentItem = _useState12[1];
185
+ var _useState13 = useState(false),
186
+ _useState14 = _slicedToArray(_useState13, 2),
187
+ uriModalLoading = _useState14[0],
188
+ setUriModalLoading = _useState14[1];
184
189
  var actionRef = useRef();
185
190
  var columns = [{
186
191
  title: "权限代码",
@@ -518,18 +523,23 @@ var PermList = function PermList() {
518
523
  type: "U",
519
524
  updateModalVisible: updateModalVisible,
520
525
  values: currentItem
521
- }) : null, uriModalVisible ? /*#__PURE__*/React.createElement(Modal, {
526
+ }) : null, /*#__PURE__*/React.createElement(UriModal, {
527
+ visible: uriModalVisible,
522
528
  title: "\u8BBE\u7F6E\u8BF7\u6C42",
523
- open: uriModalVisible,
529
+ loading: uriModalLoading,
530
+ uriList: uriList,
531
+ selectedUris: currentUris,
532
+ onSelectedChange: setCurrentUris,
524
533
  onCancel: function onCancel() {
525
534
  setUriModalVisible(false);
535
+ setCurrentUris([]);
526
536
  },
527
537
  onOk: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
528
- var hide, res;
538
+ var res;
529
539
  return _regeneratorRuntime().wrap(function _callee11$(_context11) {
530
540
  while (1) switch (_context11.prev = _context11.next) {
531
541
  case 0:
532
- hide = message.loading("正在设置请求信息");
542
+ setUriModalLoading(true);
533
543
  _context11.prev = 1;
534
544
  _context11.next = 4;
535
545
  return assignUri({
@@ -541,6 +551,7 @@ var PermList = function PermList() {
541
551
  if (res.rspCode === "000000") {
542
552
  message.success("设置成功");
543
553
  setUriModalVisible(false);
554
+ setCurrentUris([]);
544
555
  } else {
545
556
  message.error(res.rspMsg);
546
557
  }
@@ -551,27 +562,13 @@ var PermList = function PermList() {
551
562
  _context11.t0 = _context11["catch"](1);
552
563
  message.error("设置请求失败");
553
564
  case 11:
554
- hide();
565
+ setUriModalLoading(false);
555
566
  case 12:
556
567
  case "end":
557
568
  return _context11.stop();
558
569
  }
559
570
  }, _callee11, null, [[1, 8]]);
560
571
  }))
561
- }, /*#__PURE__*/React.createElement(Select, {
562
- value: currentUris,
563
- onChange: function onChange(value) {
564
- setCurrentUris(value);
565
- },
566
- mode: "multiple",
567
- style: {
568
- width: "100%"
569
- }
570
- }, uriList.map(function (e) {
571
- return /*#__PURE__*/React.createElement(Select.Option, {
572
- key: e.id,
573
- value: e.id
574
- }, e.description);
575
- }))) : null);
572
+ }));
576
573
  };
577
574
  export default PermList;
@@ -0,0 +1,11 @@
1
+ export default UriModal;
2
+ declare function UriModal({ visible, onCancel, onOk, loading, title, uriList, selectedUris, onSelectedChange, }: {
3
+ visible: any;
4
+ onCancel: any;
5
+ onOk: any;
6
+ loading: any;
7
+ title?: string;
8
+ uriList?: any[];
9
+ selectedUris?: any[];
10
+ onSelectedChange: any;
11
+ }): any;
@@ -165,13 +165,11 @@ export var getUploadFileData = function getUploadFileData(fileList) {
165
165
  if (item.status !== 'done') {
166
166
  throw '请等待上传完成!';
167
167
  }
168
- var _item$response$data = item === null || item === void 0 || (_item$response = item.response) === null || _item$response === void 0 ? void 0 : _item$response.data,
169
- pathUrl = _item$response$data.pathUrl,
170
- originFileName = _item$response$data.originFileName;
171
- return {
172
- url: pathUrl,
173
- name: originFileName
174
- };
168
+ var data = (item === null || item === void 0 || (_item$response = item.response) === null || _item$response === void 0 ? void 0 : _item$response.data) || {};
169
+ return _objectSpread({
170
+ url: data.pathUrl,
171
+ name: data.originFileName
172
+ }, data);
175
173
  });
176
174
  resolve(data);
177
175
  }
@@ -197,10 +195,10 @@ export var setUploadFileData = function setUploadFileData(fileList) {
197
195
  url: url,
198
196
  name: name,
199
197
  response: {
200
- data: {
198
+ data: _objectSpread({
201
199
  pathUrl: url,
202
200
  originFileName: name
203
- }
201
+ }, item)
204
202
  },
205
203
  status: 'done'
206
204
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xydata-tools",
3
- "version": "1.0.35",
3
+ "version": "1.0.37",
4
4
  "description": "xydata tools",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",