zmdms-webui 3.2.2 → 3.2.3

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.
@@ -201,7 +201,7 @@ var DynamicDrawer = function (props, ref) {
201
201
  }
202
202
  }
203
203
  }
204
- // 2. 构建互斥关系映射
204
+ // 2. 构建互斥关系映射(包括主元素和子元素)
205
205
  var exclusiveMap = {};
206
206
  tempDynamicList.forEach(function (item) {
207
207
  var key = item.key;
@@ -210,6 +210,17 @@ var DynamicDrawer = function (props, ref) {
210
210
  .map(function (k) { return k.trim(); })
211
211
  .filter(Boolean);
212
212
  exclusiveMap[key] = new Set(__spreadArray([key], exclusiveKeys, true));
213
+ // 添加子元素的互斥关系
214
+ if (item.children) {
215
+ item.children.forEach(function (child) {
216
+ var childKey = child.key;
217
+ var childExclusiveKeys = (child.dimensionExclusive || "")
218
+ .split(",")
219
+ .map(function (k) { return k.trim(); })
220
+ .filter(Boolean);
221
+ exclusiveMap[childKey] = new Set(__spreadArray([childKey], childExclusiveKeys, true));
222
+ });
223
+ }
213
224
  });
214
225
  // 3. 检查本次勾选是否有互斥
215
226
  var hasConflict = false;
@@ -231,52 +242,135 @@ var DynamicDrawer = function (props, ref) {
231
242
  }
232
243
  // 4. 处理依赖关系:自动勾选依赖项
233
244
  var finalCheckedValues = __spreadArray([], checkedValues, true);
234
- // 构建依赖关系映射
245
+ // 构建依赖关系映射(包括主元素和子元素)
235
246
  var dependenciesMap = {};
236
247
  tempDynamicList.forEach(function (item) {
237
248
  if (item.dimensionDependencies) {
238
249
  dependenciesMap[item.key] = item.dimensionDependencies;
239
250
  }
251
+ // 添加子元素的依赖
252
+ if (item.children) {
253
+ item.children.forEach(function (child) {
254
+ if (child.dimensionDependencies) {
255
+ dependenciesMap[child.key] = child.dimensionDependencies;
256
+ }
257
+ });
258
+ }
240
259
  });
241
260
  // 如果本次是勾选操作(isChecked = true),检查并自动添加依赖项
242
261
  if (isChecked && changedKey && dependenciesMap[changedKey]) {
243
262
  var deps = dependenciesMap[changedKey];
244
263
  var autoCheckKeys_1 = [];
264
+ var childrenCheckedKeys_1 = {}; // 记录需要勾选的子元素 { parentIndex: [childKeys] }
245
265
  // 处理 required 依赖(必须全部选中)
246
266
  if (deps.required && deps.required.length > 0) {
247
267
  deps.required.forEach(function (depKey) {
248
- if (!finalCheckedValues.includes(depKey)) {
268
+ // 检查依赖项是否在主列表中
269
+ var depInMain = tempDynamicList.find(function (d) { return d.key === depKey; });
270
+ if (depInMain && !finalCheckedValues.includes(depKey)) {
249
271
  autoCheckKeys_1.push(depKey);
250
272
  }
273
+ else if (!depInMain) {
274
+ // 依赖项可能在子元素中,查找并记录
275
+ tempDynamicList.forEach(function (item, pIndex) {
276
+ if (item.children) {
277
+ var child = item.children.find(function (c) { return c.key === depKey; });
278
+ if (child && !child.checked) {
279
+ if (!childrenCheckedKeys_1[pIndex]) {
280
+ childrenCheckedKeys_1[pIndex] = [];
281
+ }
282
+ childrenCheckedKeys_1[pIndex].push(depKey);
283
+ autoCheckKeys_1.push(depKey);
284
+ }
285
+ }
286
+ });
287
+ }
251
288
  });
252
289
  }
253
290
  // 处理 anyOf 依赖(至少选中一个)
254
291
  if (deps.anyOf && deps.anyOf.length > 0) {
255
- // 检查 anyOf 中是否已经有被选中的
292
+ // 检查 anyOf 中是否已经有被选中的(包括主列表和子元素)
256
293
  var hasAnyOfSelected = deps.anyOf.some(function (depKey) {
257
- return finalCheckedValues.includes(depKey);
294
+ var inMain = finalCheckedValues.includes(depKey);
295
+ if (inMain)
296
+ return true;
297
+ // 检查子元素
298
+ var foundInChild = false;
299
+ tempDynamicList.forEach(function (item) {
300
+ if (item.children) {
301
+ var child = item.children.find(function (c) { return c.key === depKey; });
302
+ if (child && child.checked) {
303
+ foundInChild = true;
304
+ }
305
+ }
306
+ });
307
+ return foundInChild;
258
308
  });
259
309
  // 如果没有任何一个被选中,自动选中第一个
260
310
  if (!hasAnyOfSelected && deps.anyOf[0]) {
261
- autoCheckKeys_1.push(deps.anyOf[0]);
311
+ var depKey_1 = deps.anyOf[0];
312
+ var depInMain = tempDynamicList.find(function (d) { return d.key === depKey_1; });
313
+ if (depInMain && !finalCheckedValues.includes(depKey_1)) {
314
+ autoCheckKeys_1.push(depKey_1);
315
+ }
316
+ else {
317
+ // 查找子元素
318
+ tempDynamicList.forEach(function (item, pIndex) {
319
+ if (item.children) {
320
+ var child = item.children.find(function (c) { return c.key === depKey_1; });
321
+ if (child && !child.checked) {
322
+ if (!childrenCheckedKeys_1[pIndex]) {
323
+ childrenCheckedKeys_1[pIndex] = [];
324
+ }
325
+ childrenCheckedKeys_1[pIndex].push(depKey_1);
326
+ autoCheckKeys_1.push(depKey_1);
327
+ }
328
+ }
329
+ });
330
+ }
262
331
  }
263
332
  }
264
- // 添加自动勾选的项
333
+ // 添加自动勾选的主元素
334
+ autoCheckKeys_1.forEach(function (key) {
335
+ if (!finalCheckedValues.includes(key)) {
336
+ finalCheckedValues.push(key);
337
+ }
338
+ });
339
+ // 提示用户
265
340
  if (autoCheckKeys_1.length > 0) {
266
- autoCheckKeys_1.forEach(function (key) {
267
- if (!finalCheckedValues.includes(key)) {
268
- finalCheckedValues.push(key);
269
- }
270
- });
271
- // 提示用户
272
341
  var depLabels = autoCheckKeys_1
273
342
  .map(function (key) {
343
+ // 先在主列表中查找
274
344
  var item = tempDynamicList.find(function (d) { return d.key === key; });
275
- return (item === null || item === void 0 ? void 0 : item.label) || key;
345
+ if (item)
346
+ return (item === null || item === void 0 ? void 0 : item.label) || key;
347
+ // 在子元素中查找
348
+ var label = key;
349
+ tempDynamicList.forEach(function (pItem) {
350
+ if (pItem.children) {
351
+ var child = pItem.children.find(function (c) { return c.key === key; });
352
+ if (child) {
353
+ label = child.label || key;
354
+ }
355
+ }
356
+ });
357
+ return label;
276
358
  })
277
359
  .join("、");
278
360
  myMessage.success("\u5DF2\u81EA\u52A8\u52FE\u9009\u4F9D\u8D56\u9879\uFF1A".concat(depLabels));
279
361
  }
362
+ // 6. 更新子元素的选中状态(针对依赖项)
363
+ if (Object.keys(childrenCheckedKeys_1).length > 0) {
364
+ tempDynamicList.forEach(function (item, pIndex) {
365
+ if (item.children && childrenCheckedKeys_1[pIndex]) {
366
+ item.children.forEach(function (child) {
367
+ if (childrenCheckedKeys_1[pIndex].includes(child.key)) {
368
+ child.checked = true;
369
+ }
370
+ });
371
+ }
372
+ });
373
+ }
280
374
  }
281
375
  // 5. 正常更新,包括联动子元素
282
376
  var newDynamicList = tempDynamicList.map(function (item) {
@@ -303,19 +397,118 @@ var DynamicDrawer = function (props, ref) {
303
397
  var changeCList = ((_b = (_a = newDynamicList[pIndex].children) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, function (item) { return (__assign({}, item)); })) ||
304
398
  [] ||
305
399
  [];
306
- // 更新子元素的选中状态
307
- changeCList.forEach(function (item) {
308
- if (!checkedValues.find(function (value) { return value === item.key; })) {
309
- item.checked = false;
400
+ // 1. 找出本次变化的子元素
401
+ var prevCheckedKeys = new Set(checkedValues.filter(function (key) {
402
+ var item = changeCList.find(function (d) { return d.key === key; });
403
+ return item && item.checked;
404
+ }));
405
+ var currentCheckedKeys = new Set(checkedValues);
406
+ var changedKey = null;
407
+ var isChecked = false;
408
+ for (var _i = 0, checkedValues_2 = checkedValues; _i < checkedValues_2.length; _i++) {
409
+ var key = checkedValues_2[_i];
410
+ if (!prevCheckedKeys.has(key)) {
411
+ changedKey = key;
412
+ isChecked = true;
413
+ break;
310
414
  }
311
- else {
312
- item.checked = true;
415
+ }
416
+ if (!changedKey) {
417
+ for (var _c = 0, changeCList_1 = changeCList; _c < changeCList_1.length; _c++) {
418
+ var item = changeCList_1[_c];
419
+ if (item.checked && !currentCheckedKeys.has(item.key)) {
420
+ changedKey = item.key;
421
+ isChecked = false;
422
+ break;
423
+ }
424
+ }
425
+ }
426
+ // 2. 构建完整的依赖关系映射(包括所有主元素和子元素)
427
+ var dependenciesMap = {};
428
+ // 添加主元素的依赖
429
+ tempDynamicList.forEach(function (item) {
430
+ if (item.dimensionDependencies) {
431
+ dependenciesMap[item.key] = item.dimensionDependencies;
432
+ }
433
+ // 添加子元素的依赖
434
+ if (item.children) {
435
+ item.children.forEach(function (child) {
436
+ if (child.dimensionDependencies) {
437
+ dependenciesMap[child.key] = child.dimensionDependencies;
438
+ }
439
+ });
440
+ }
441
+ });
442
+ // 3. 如果本次是勾选操作,检查并自动添加依赖项
443
+ var finalCheckedValues = __spreadArray([], checkedValues, true);
444
+ if (isChecked && changedKey && dependenciesMap[changedKey]) {
445
+ var deps = dependenciesMap[changedKey];
446
+ var autoCheckKeys_2 = [];
447
+ // 处理 required 依赖(必须全部选中)
448
+ if (deps.required && deps.required.length > 0) {
449
+ deps.required.forEach(function (depKey) {
450
+ // 检查依赖项是否在当前子列表或主列表中
451
+ var depInChildren = changeCList.find(function (c) { return c.key === depKey; });
452
+ if (depInChildren && !finalCheckedValues.includes(depKey)) {
453
+ autoCheckKeys_2.push(depKey);
454
+ }
455
+ else if (!depInChildren) {
456
+ // 依赖项在主列表中,需要检查主列表
457
+ var depInMain = newDynamicList.find(function (d) { return d.key === depKey; });
458
+ if (depInMain && !depInMain.checked) {
459
+ depInMain.checked = true;
460
+ var depLabel = depInMain.label || depInMain.key;
461
+ myMessage.success("\u5DF2\u81EA\u52A8\u52FE\u9009\u4F9D\u8D56\u9879\uFF1A".concat(depLabel));
462
+ }
463
+ }
464
+ });
313
465
  }
466
+ // 处理 anyOf 依赖(至少选中一个)
467
+ if (deps.anyOf && deps.anyOf.length > 0) {
468
+ var hasAnyOfSelected = deps.anyOf.some(function (depKey) {
469
+ var depInChildren = changeCList.find(function (c) { return c.key === depKey; });
470
+ var depInMain = newDynamicList.find(function (d) { return d.key === depKey; });
471
+ return ((depInChildren && finalCheckedValues.includes(depKey)) ||
472
+ (depInMain && depInMain.checked));
473
+ });
474
+ if (!hasAnyOfSelected && deps.anyOf[0]) {
475
+ var depKey_2 = deps.anyOf[0];
476
+ var depInChildren = changeCList.find(function (c) { return c.key === depKey_2; });
477
+ if (depInChildren && !finalCheckedValues.includes(depKey_2)) {
478
+ autoCheckKeys_2.push(depKey_2);
479
+ }
480
+ else {
481
+ var depInMain = newDynamicList.find(function (d) { return d.key === depKey_2; });
482
+ if (depInMain && !depInMain.checked) {
483
+ depInMain.checked = true;
484
+ var depLabel = depInMain.label || depInMain.key;
485
+ myMessage.success("\u5DF2\u81EA\u52A8\u52FE\u9009\u4F9D\u8D56\u9879\uFF1A".concat(depLabel));
486
+ }
487
+ }
488
+ }
489
+ }
490
+ // 添加自动勾选的子项
491
+ if (autoCheckKeys_2.length > 0) {
492
+ autoCheckKeys_2.forEach(function (key) {
493
+ if (!finalCheckedValues.includes(key)) {
494
+ finalCheckedValues.push(key);
495
+ }
496
+ });
497
+ var depLabels = autoCheckKeys_2
498
+ .map(function (key) {
499
+ var item = changeCList.find(function (c) { return c.key === key; });
500
+ return (item === null || item === void 0 ? void 0 : item.label) || key;
501
+ })
502
+ .join("、");
503
+ myMessage.success("\u5DF2\u81EA\u52A8\u52FE\u9009\u4F9D\u8D56\u9879\uFF1A".concat(depLabels));
504
+ }
505
+ }
506
+ // 4. 更新子元素的选中状态
507
+ changeCList.forEach(function (item) {
508
+ item.checked = finalCheckedValues.includes(item.key);
314
509
  });
315
510
  newDynamicList[pIndex].children = changeCList;
316
- // 联动父元素
317
- // const allChildrenChecked =
318
- // changeCList.length > 0 && changeCList.every((child) => child.checked);
511
+ // 5. 联动父元素
319
512
  var someChildrenChecked = changeCList.some(function (child) { return child.checked; });
320
513
  if (someChildrenChecked) {
321
514
  // 只要有子元素选中,父元素就应该是 checked = true
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zmdms-webui",
3
- "version": "3.2.2",
3
+ "version": "3.2.3",
4
4
  "private": false,
5
5
  "main": "dist/index.es.js",
6
6
  "module": "dist/index.es.js",