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 +1 -0
- package/dist/components/aaa/setting/permission/components/UriModal.js +637 -0
- package/dist/components/aaa/setting/permission/index.js +18 -21
- package/dist/types/components/aaa/setting/permission/components/UriModal.d.ts +11 -0
- package/dist/utils/utils.js +7 -9
- package/package.json +1 -1
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
|
|
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,
|
|
526
|
+
}) : null, /*#__PURE__*/React.createElement(UriModal, {
|
|
527
|
+
visible: uriModalVisible,
|
|
522
528
|
title: "\u8BBE\u7F6E\u8BF7\u6C42",
|
|
523
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
}
|
|
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;
|
package/dist/utils/utils.js
CHANGED
|
@@ -165,13 +165,11 @@ export var getUploadFileData = function getUploadFileData(fileList) {
|
|
|
165
165
|
if (item.status !== 'done') {
|
|
166
166
|
throw '请等待上传完成!';
|
|
167
167
|
}
|
|
168
|
-
var
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
};
|