zmdms-webui 3.2.4 → 3.2.5
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/es/dynamicsetting/dynamicDrawer.js +100 -144
- package/package.json +1 -1
|
@@ -170,8 +170,96 @@ var DynamicDrawer = function (props, ref) {
|
|
|
170
170
|
}, [setTempDynamicList, filterDynamicColumnsRef, isSearchFilterEnabled]);
|
|
171
171
|
// 确认
|
|
172
172
|
var onSureHandle = function () {
|
|
173
|
+
// 验证依赖关系
|
|
174
|
+
var validationResult = validateDependencies();
|
|
175
|
+
if (!validationResult.valid) {
|
|
176
|
+
myMessage.warning(validationResult.message);
|
|
177
|
+
return; // 阻止提交
|
|
178
|
+
}
|
|
173
179
|
onSure && onSure(tempDynamicList);
|
|
174
180
|
};
|
|
181
|
+
// 验证依赖关系
|
|
182
|
+
var validateDependencies = function () {
|
|
183
|
+
// 获取所有已勾选的主元素和子元素
|
|
184
|
+
var checkedKeys = new Set();
|
|
185
|
+
tempDynamicList.forEach(function (item) {
|
|
186
|
+
if (item.checked) {
|
|
187
|
+
checkedKeys.add(item.key);
|
|
188
|
+
}
|
|
189
|
+
if (item.children) {
|
|
190
|
+
item.children.forEach(function (child) {
|
|
191
|
+
if (child.checked) {
|
|
192
|
+
checkedKeys.add(child.key);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
// 构建依赖关系映射(包括主元素和子元素)
|
|
198
|
+
var dependenciesMap = {};
|
|
199
|
+
tempDynamicList.forEach(function (item) {
|
|
200
|
+
if (item.dimensionDependencies) {
|
|
201
|
+
dependenciesMap[item.key] = item.dimensionDependencies;
|
|
202
|
+
}
|
|
203
|
+
// 添加子元素的依赖
|
|
204
|
+
if (item.children) {
|
|
205
|
+
item.children.forEach(function (child) {
|
|
206
|
+
if (child.dimensionDependencies) {
|
|
207
|
+
dependenciesMap[child.key] = child.dimensionDependencies;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
// 检查每个已勾选项的依赖关系是否满足
|
|
213
|
+
var checkedKeysArray = Array.from(checkedKeys);
|
|
214
|
+
for (var _i = 0, checkedKeysArray_1 = checkedKeysArray; _i < checkedKeysArray_1.length; _i++) {
|
|
215
|
+
var checkedKey = checkedKeysArray_1[_i];
|
|
216
|
+
var deps = dependenciesMap[checkedKey];
|
|
217
|
+
if (!deps)
|
|
218
|
+
continue;
|
|
219
|
+
// 获取当前项的标签
|
|
220
|
+
var getItemLabel = function (key) {
|
|
221
|
+
var item = tempDynamicList.find(function (d) { return d.key === key; });
|
|
222
|
+
if (item)
|
|
223
|
+
return String((item === null || item === void 0 ? void 0 : item.label) || key);
|
|
224
|
+
var label = key;
|
|
225
|
+
tempDynamicList.forEach(function (pItem) {
|
|
226
|
+
if (pItem.children) {
|
|
227
|
+
var child = pItem.children.find(function (c) { return c.key === key; });
|
|
228
|
+
if (child) {
|
|
229
|
+
label = String(child.label || key);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
return label;
|
|
234
|
+
};
|
|
235
|
+
var currentLabel = getItemLabel(checkedKey);
|
|
236
|
+
// 检查 required 依赖(必须全部选中)
|
|
237
|
+
if (deps.required && deps.required.length > 0) {
|
|
238
|
+
var missingRequired = deps.required.filter(function (depKey) { return !checkedKeys.has(depKey); });
|
|
239
|
+
if (missingRequired.length > 0) {
|
|
240
|
+
var missingLabels = missingRequired.map(getItemLabel).join("、");
|
|
241
|
+
return {
|
|
242
|
+
valid: false,
|
|
243
|
+
message: "\u3010".concat(currentLabel, "\u3011\u9700\u8981\u4F9D\u8D56\u3010").concat(missingLabels, "\u3011\uFF0C\u8BF7\u5148\u52FE\u9009\u8FD9\u4E9B\u4F9D\u8D56\u9879\uFF01"),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// 检查 anyOf 依赖(至少选中一个)
|
|
248
|
+
if (deps.anyOf && deps.anyOf.length > 0) {
|
|
249
|
+
var hasAnyOfSelected = deps.anyOf.some(function (depKey) {
|
|
250
|
+
return checkedKeys.has(depKey);
|
|
251
|
+
});
|
|
252
|
+
if (!hasAnyOfSelected) {
|
|
253
|
+
var anyOfLabels = deps.anyOf.map(getItemLabel).join("、");
|
|
254
|
+
return {
|
|
255
|
+
valid: false,
|
|
256
|
+
message: "\u3010".concat(currentLabel, "\u3011\u9700\u8981\u81F3\u5C11\u4F9D\u8D56\u4EE5\u4E0B\u4E00\u9879\uFF1A\u3010").concat(anyOfLabels, "\u3011\uFF0C\u8BF7\u5148\u52FE\u9009\u5176\u4E2D\u4E00\u9879\uFF01"),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return { valid: true };
|
|
262
|
+
};
|
|
175
263
|
var onCheckboxChange = function (checkedValues) {
|
|
176
264
|
// 1. 找出本次变化的项(新增或移除的)
|
|
177
265
|
var prevCheckedKeys = new Set(checkedValues.filter(function (key) {
|
|
@@ -239,141 +327,9 @@ var DynamicDrawer = function (props, ref) {
|
|
|
239
327
|
myMessage.warning("所选项存在互斥关系,不能同时勾选!");
|
|
240
328
|
return; // 拦截本次勾选
|
|
241
329
|
}
|
|
242
|
-
// 4.
|
|
243
|
-
var finalCheckedValues = __spreadArray([], checkedValues, true);
|
|
244
|
-
// 构建依赖关系映射(包括主元素和子元素)
|
|
245
|
-
var dependenciesMap = {};
|
|
246
|
-
tempDynamicList.forEach(function (item) {
|
|
247
|
-
if (item.dimensionDependencies) {
|
|
248
|
-
dependenciesMap[item.key] = item.dimensionDependencies;
|
|
249
|
-
}
|
|
250
|
-
// 添加子元素的依赖
|
|
251
|
-
if (item.children) {
|
|
252
|
-
item.children.forEach(function (child) {
|
|
253
|
-
if (child.dimensionDependencies) {
|
|
254
|
-
dependenciesMap[child.key] = child.dimensionDependencies;
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
// 如果本次是勾选操作(isChecked = true),检查并自动添加依赖项
|
|
260
|
-
if (isChecked && changedKey && dependenciesMap[changedKey]) {
|
|
261
|
-
var deps = dependenciesMap[changedKey];
|
|
262
|
-
var autoCheckKeys_1 = [];
|
|
263
|
-
var childrenCheckedKeys_1 = {}; // 记录需要勾选的子元素 { parentIndex: [childKeys] }
|
|
264
|
-
// 处理 required 依赖(必须全部选中)
|
|
265
|
-
if (deps.required && deps.required.length > 0) {
|
|
266
|
-
deps.required.forEach(function (depKey) {
|
|
267
|
-
// 检查依赖项是否在主列表中
|
|
268
|
-
var depInMain = tempDynamicList.find(function (d) { return d.key === depKey; });
|
|
269
|
-
if (depInMain && !finalCheckedValues.includes(depKey)) {
|
|
270
|
-
autoCheckKeys_1.push(depKey);
|
|
271
|
-
}
|
|
272
|
-
else if (!depInMain) {
|
|
273
|
-
// 依赖项可能在子元素中,查找并记录
|
|
274
|
-
tempDynamicList.forEach(function (item, pIndex) {
|
|
275
|
-
if (item.children) {
|
|
276
|
-
var child = item.children.find(function (c) { return c.key === depKey; });
|
|
277
|
-
if (child && !child.checked) {
|
|
278
|
-
if (!childrenCheckedKeys_1[pIndex]) {
|
|
279
|
-
childrenCheckedKeys_1[pIndex] = [];
|
|
280
|
-
}
|
|
281
|
-
childrenCheckedKeys_1[pIndex].push(depKey);
|
|
282
|
-
autoCheckKeys_1.push(depKey);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
// 处理 anyOf 依赖(至少选中一个)
|
|
290
|
-
if (deps.anyOf && deps.anyOf.length > 0) {
|
|
291
|
-
// 检查 anyOf 中是否已经有被选中的(包括主列表和子元素)
|
|
292
|
-
var hasAnyOfSelected = deps.anyOf.some(function (depKey) {
|
|
293
|
-
var inMain = finalCheckedValues.includes(depKey);
|
|
294
|
-
if (inMain)
|
|
295
|
-
return true;
|
|
296
|
-
// 检查子元素
|
|
297
|
-
var foundInChild = false;
|
|
298
|
-
tempDynamicList.forEach(function (item) {
|
|
299
|
-
if (item.children) {
|
|
300
|
-
var child = item.children.find(function (c) { return c.key === depKey; });
|
|
301
|
-
if (child && child.checked) {
|
|
302
|
-
foundInChild = true;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
return foundInChild;
|
|
307
|
-
});
|
|
308
|
-
// 如果没有任何一个被选中,自动选中第一个
|
|
309
|
-
if (!hasAnyOfSelected && deps.anyOf[0]) {
|
|
310
|
-
var depKey_1 = deps.anyOf[0];
|
|
311
|
-
var depInMain = tempDynamicList.find(function (d) { return d.key === depKey_1; });
|
|
312
|
-
if (depInMain && !finalCheckedValues.includes(depKey_1)) {
|
|
313
|
-
autoCheckKeys_1.push(depKey_1);
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
// 查找子元素
|
|
317
|
-
tempDynamicList.forEach(function (item, pIndex) {
|
|
318
|
-
if (item.children) {
|
|
319
|
-
var child = item.children.find(function (c) { return c.key === depKey_1; });
|
|
320
|
-
if (child && !child.checked) {
|
|
321
|
-
if (!childrenCheckedKeys_1[pIndex]) {
|
|
322
|
-
childrenCheckedKeys_1[pIndex] = [];
|
|
323
|
-
}
|
|
324
|
-
childrenCheckedKeys_1[pIndex].push(depKey_1);
|
|
325
|
-
autoCheckKeys_1.push(depKey_1);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
// 添加自动勾选的主元素
|
|
333
|
-
autoCheckKeys_1.forEach(function (key) {
|
|
334
|
-
if (!finalCheckedValues.includes(key)) {
|
|
335
|
-
finalCheckedValues.push(key);
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
// 提示用户
|
|
339
|
-
if (autoCheckKeys_1.length > 0) {
|
|
340
|
-
var depLabels = autoCheckKeys_1
|
|
341
|
-
.map(function (key) {
|
|
342
|
-
// 先在主列表中查找
|
|
343
|
-
var item = tempDynamicList.find(function (d) { return d.key === key; });
|
|
344
|
-
if (item)
|
|
345
|
-
return (item === null || item === void 0 ? void 0 : item.label) || key;
|
|
346
|
-
// 在子元素中查找
|
|
347
|
-
var label = key;
|
|
348
|
-
tempDynamicList.forEach(function (pItem) {
|
|
349
|
-
if (pItem.children) {
|
|
350
|
-
var child = pItem.children.find(function (c) { return c.key === key; });
|
|
351
|
-
if (child) {
|
|
352
|
-
label = child.label || key;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
});
|
|
356
|
-
return label;
|
|
357
|
-
})
|
|
358
|
-
.join("、");
|
|
359
|
-
myMessage.success("\u5DF2\u81EA\u52A8\u52FE\u9009\u4F9D\u8D56\u9879\uFF1A".concat(depLabels));
|
|
360
|
-
}
|
|
361
|
-
// 6. 更新子元素的选中状态(针对依赖项)
|
|
362
|
-
if (Object.keys(childrenCheckedKeys_1).length > 0) {
|
|
363
|
-
tempDynamicList.forEach(function (item, pIndex) {
|
|
364
|
-
if (item.children && childrenCheckedKeys_1[pIndex]) {
|
|
365
|
-
item.children.forEach(function (child) {
|
|
366
|
-
if (childrenCheckedKeys_1[pIndex].includes(child.key)) {
|
|
367
|
-
child.checked = true;
|
|
368
|
-
}
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
// 5. 正常更新,包括联动子元素
|
|
330
|
+
// 4. 正常更新,包括联动子元素
|
|
375
331
|
var newDynamicList = tempDynamicList.map(function (item) {
|
|
376
|
-
var isItemChecked =
|
|
332
|
+
var isItemChecked = checkedValues.includes(item.key);
|
|
377
333
|
var newItem = __assign(__assign({}, item), { checked: isItemChecked });
|
|
378
334
|
// 如果当前变化的是这个主元素,并且它有子元素,联动子元素
|
|
379
335
|
if (item.key === changedKey &&
|
|
@@ -442,14 +398,14 @@ var DynamicDrawer = function (props, ref) {
|
|
|
442
398
|
var finalCheckedValues = __spreadArray([], checkedValues, true);
|
|
443
399
|
if (isChecked && changedKey && dependenciesMap[changedKey]) {
|
|
444
400
|
var deps = dependenciesMap[changedKey];
|
|
445
|
-
var
|
|
401
|
+
var autoCheckKeys_1 = [];
|
|
446
402
|
// 处理 required 依赖(必须全部选中)
|
|
447
403
|
if (deps.required && deps.required.length > 0) {
|
|
448
404
|
deps.required.forEach(function (depKey) {
|
|
449
405
|
// 检查依赖项是否在当前子列表或主列表中
|
|
450
406
|
var depInChildren = changeCList.find(function (c) { return c.key === depKey; });
|
|
451
407
|
if (depInChildren && !finalCheckedValues.includes(depKey)) {
|
|
452
|
-
|
|
408
|
+
autoCheckKeys_1.push(depKey);
|
|
453
409
|
}
|
|
454
410
|
else if (!depInChildren) {
|
|
455
411
|
// 依赖项在主列表中,需要检查主列表
|
|
@@ -471,13 +427,13 @@ var DynamicDrawer = function (props, ref) {
|
|
|
471
427
|
(depInMain && depInMain.checked));
|
|
472
428
|
});
|
|
473
429
|
if (!hasAnyOfSelected && deps.anyOf[0]) {
|
|
474
|
-
var
|
|
475
|
-
var depInChildren = changeCList.find(function (c) { return c.key ===
|
|
476
|
-
if (depInChildren && !finalCheckedValues.includes(
|
|
477
|
-
|
|
430
|
+
var depKey_1 = deps.anyOf[0];
|
|
431
|
+
var depInChildren = changeCList.find(function (c) { return c.key === depKey_1; });
|
|
432
|
+
if (depInChildren && !finalCheckedValues.includes(depKey_1)) {
|
|
433
|
+
autoCheckKeys_1.push(depKey_1);
|
|
478
434
|
}
|
|
479
435
|
else {
|
|
480
|
-
var depInMain = newDynamicList.find(function (d) { return d.key ===
|
|
436
|
+
var depInMain = newDynamicList.find(function (d) { return d.key === depKey_1; });
|
|
481
437
|
if (depInMain && !depInMain.checked) {
|
|
482
438
|
depInMain.checked = true;
|
|
483
439
|
var depLabel = depInMain.label || depInMain.key;
|
|
@@ -487,13 +443,13 @@ var DynamicDrawer = function (props, ref) {
|
|
|
487
443
|
}
|
|
488
444
|
}
|
|
489
445
|
// 添加自动勾选的子项
|
|
490
|
-
if (
|
|
491
|
-
|
|
446
|
+
if (autoCheckKeys_1.length > 0) {
|
|
447
|
+
autoCheckKeys_1.forEach(function (key) {
|
|
492
448
|
if (!finalCheckedValues.includes(key)) {
|
|
493
449
|
finalCheckedValues.push(key);
|
|
494
450
|
}
|
|
495
451
|
});
|
|
496
|
-
var depLabels =
|
|
452
|
+
var depLabels = autoCheckKeys_1
|
|
497
453
|
.map(function (key) {
|
|
498
454
|
var item = changeCList.find(function (c) { return c.key === key; });
|
|
499
455
|
return (item === null || item === void 0 ? void 0 : item.label) || key;
|