vxe-pc-ui 4.6.9 → 4.6.11

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.
Files changed (78) hide show
  1. package/es/button/src/button.js +2 -4
  2. package/es/form/render/index.js +2 -4
  3. package/es/form/src/form.js +97 -37
  4. package/es/form-design/src/form-view.js +1 -3
  5. package/es/icon/style.css +1 -1
  6. package/es/list-design/src/layout-preview.js +5 -7
  7. package/es/list-design/src/list-view.js +5 -7
  8. package/es/modal/src/modal.js +2 -4
  9. package/es/pager/src/pager.js +1 -3
  10. package/es/style.css +1 -1
  11. package/es/style.min.css +1 -1
  12. package/es/table-select/src/table-select.js +5 -7
  13. package/es/tabs/src/tabs.js +2 -6
  14. package/es/tree/src/tree.js +238 -173
  15. package/es/ui/index.js +3 -7
  16. package/es/ui/src/log.js +1 -1
  17. package/es/upload/src/upload.js +5 -7
  18. package/lib/button/src/button.js +2 -4
  19. package/lib/button/src/button.min.js +1 -1
  20. package/lib/form/render/index.js +2 -4
  21. package/lib/form/render/index.min.js +1 -1
  22. package/lib/form/src/form.js +95 -36
  23. package/lib/form/src/form.min.js +1 -1
  24. package/lib/form-design/src/form-view.js +1 -3
  25. package/lib/form-design/src/form-view.min.js +1 -1
  26. package/lib/icon/style/style.css +1 -1
  27. package/lib/icon/style/style.min.css +1 -1
  28. package/lib/index.umd.js +422 -275
  29. package/lib/index.umd.min.js +1 -1
  30. package/lib/list-design/src/layout-preview.js +5 -7
  31. package/lib/list-design/src/layout-preview.min.js +1 -1
  32. package/lib/list-design/src/list-view.js +5 -7
  33. package/lib/list-design/src/list-view.min.js +1 -1
  34. package/lib/modal/src/modal.js +2 -4
  35. package/lib/modal/src/modal.min.js +1 -1
  36. package/lib/pager/src/pager.js +1 -3
  37. package/lib/pager/src/pager.min.js +1 -1
  38. package/lib/style.css +1 -1
  39. package/lib/style.min.css +1 -1
  40. package/lib/table-select/src/table-select.js +5 -7
  41. package/lib/table-select/src/table-select.min.js +1 -1
  42. package/lib/tabs/src/tabs.js +2 -6
  43. package/lib/tabs/src/tabs.min.js +1 -1
  44. package/lib/tree/src/tree.js +293 -179
  45. package/lib/tree/src/tree.min.js +1 -1
  46. package/lib/ui/index.js +3 -7
  47. package/lib/ui/index.min.js +1 -1
  48. package/lib/ui/src/log.js +1 -1
  49. package/lib/ui/src/log.min.js +1 -1
  50. package/lib/upload/src/upload.js +5 -7
  51. package/lib/upload/src/upload.min.js +1 -1
  52. package/package.json +2 -2
  53. package/packages/button/src/button.ts +2 -4
  54. package/packages/form/render/index.ts +2 -4
  55. package/packages/form/src/form.ts +98 -35
  56. package/packages/form-design/src/form-view.ts +1 -3
  57. package/packages/list-design/src/layout-preview.ts +5 -7
  58. package/packages/list-design/src/list-view.ts +5 -7
  59. package/packages/modal/src/modal.ts +2 -4
  60. package/packages/pager/src/pager.ts +1 -3
  61. package/packages/table-select/src/table-select.ts +5 -7
  62. package/packages/tabs/src/tabs.ts +2 -6
  63. package/packages/tree/src/tree.ts +235 -172
  64. package/packages/ui/index.ts +2 -6
  65. package/packages/upload/src/upload.ts +5 -7
  66. package/types/components/tree.d.ts +7 -5
  67. /package/es/icon/{iconfont.1747279440023.ttf → iconfont.1747357691240.ttf} +0 -0
  68. /package/es/icon/{iconfont.1747279440023.woff → iconfont.1747357691240.woff} +0 -0
  69. /package/es/icon/{iconfont.1747279440023.woff2 → iconfont.1747357691240.woff2} +0 -0
  70. /package/es/{iconfont.1747279440023.ttf → iconfont.1747357691240.ttf} +0 -0
  71. /package/es/{iconfont.1747279440023.woff → iconfont.1747357691240.woff} +0 -0
  72. /package/es/{iconfont.1747279440023.woff2 → iconfont.1747357691240.woff2} +0 -0
  73. /package/lib/icon/style/{iconfont.1747279440023.ttf → iconfont.1747357691240.ttf} +0 -0
  74. /package/lib/icon/style/{iconfont.1747279440023.woff → iconfont.1747357691240.woff} +0 -0
  75. /package/lib/icon/style/{iconfont.1747279440023.woff2 → iconfont.1747357691240.woff2} +0 -0
  76. /package/lib/{iconfont.1747279440023.ttf → iconfont.1747357691240.ttf} +0 -0
  77. /package/lib/{iconfont.1747279440023.woff → iconfont.1747357691240.woff} +0 -0
  78. /package/lib/{iconfont.1747279440023.woff2 → iconfont.1747357691240.woff2} +0 -0
@@ -53,10 +53,10 @@ export default defineComponent({
53
53
  type: String as PropType<VxeTreePropTypes.HasChildField>,
54
54
  default: () => getConfig().tree.hasChildField
55
55
  },
56
- // mapChildrenField: {
57
- // type: String as PropType<VxeTreePropTypes.MapChildrenField>,
58
- // default: () => getConfig().tree.mapChildrenField
59
- // },
56
+ mapChildrenField: {
57
+ type: String as PropType<VxeTreePropTypes.MapChildrenField>,
58
+ default: () => getConfig().tree.mapChildrenField
59
+ },
60
60
  transform: Boolean as PropType<VxeTreePropTypes.Transform>,
61
61
  // 已废弃
62
62
  isCurrent: Boolean as PropType<VxeTreePropTypes.IsCurrent>,
@@ -138,17 +138,19 @@ export default defineComponent({
138
138
 
139
139
  const reactData = reactive<TreeReactData>({
140
140
  currentNode: null,
141
- nodeMaps: {},
142
141
  selectRadioKey: props.checkNodeKey,
143
142
  treeList: [],
144
- treeExpandedMaps: {},
145
- treeExpandLazyLoadedMaps: {},
146
- selectCheckboxMaps: {},
147
- indeterminateCheckboxMaps: {}
143
+ updateExpandedFlag: 1,
144
+ updateCheckboxFlag: 1
148
145
  })
149
146
 
150
147
  const internalData: TreeInternalData = {
151
- // initialized: false
148
+ // initialized: false,
149
+ nodeMaps: {},
150
+ selectCheckboxMaps: {},
151
+ indeterminateRowMaps: {},
152
+ treeExpandedMaps: {},
153
+ treeExpandLazyLoadedMaps: {}
152
154
  }
153
155
 
154
156
  const refMaps: TreePrivateRef = {
@@ -176,6 +178,10 @@ export default defineComponent({
176
178
  return props.childrenField || 'children'
177
179
  })
178
180
 
181
+ const computeMapChildrenField = computed(() => {
182
+ return props.mapChildrenField || 'mapChildren'
183
+ })
184
+
179
185
  const computeHasChildField = computed(() => {
180
186
  return props.hasChildField || 'hasChild'
181
187
  })
@@ -250,9 +256,10 @@ export default defineComponent({
250
256
  }
251
257
 
252
258
  const isExpandByNode = (node: any) => {
253
- const { treeExpandedMaps } = reactData
259
+ const { updateExpandedFlag } = reactData
260
+ const { treeExpandedMaps } = internalData
254
261
  const nodeid = getNodeId(node)
255
- return !!treeExpandedMaps[nodeid]
262
+ return !!(updateExpandedFlag && treeExpandedMaps[nodeid])
256
263
  }
257
264
 
258
265
  const isCheckedByRadioNodeId = (nodeid: any) => {
@@ -265,8 +272,9 @@ export default defineComponent({
265
272
  }
266
273
 
267
274
  const isCheckedByCheckboxNodeId = (nodeid: any) => {
268
- const { selectCheckboxMaps } = reactData
269
- return !!selectCheckboxMaps[nodeid]
275
+ const { updateCheckboxFlag } = reactData
276
+ const { selectCheckboxMaps } = internalData
277
+ return !!(updateCheckboxFlag && selectCheckboxMaps[nodeid])
270
278
  }
271
279
 
272
280
  const isCheckedByCheckboxNode = (node: any) => {
@@ -274,8 +282,9 @@ export default defineComponent({
274
282
  }
275
283
 
276
284
  const isIndeterminateByCheckboxNodeid = (nodeid: any) => {
277
- const { indeterminateCheckboxMaps } = reactData
278
- return !!indeterminateCheckboxMaps[nodeid]
285
+ const { updateCheckboxFlag } = reactData
286
+ const { indeterminateRowMaps } = internalData
287
+ return !!(updateCheckboxFlag && indeterminateRowMaps[nodeid])
279
288
  }
280
289
 
281
290
  const isIndeterminateByCheckboxNode = (node: any) => {
@@ -302,41 +311,59 @@ export default defineComponent({
302
311
  if (!XEUtils.isArray(nodeList)) {
303
312
  nodeList = [nodeList]
304
313
  }
305
- handleCheckedCheckboxNode(nodeList.map((item: any) => getNodeId(item)), checked)
314
+ handleCheckedCheckboxNode(nodeList, checked)
306
315
  }
307
316
  return nextTick()
308
317
  }
309
318
 
310
319
  const setCheckboxByNodeId = (nodeIds: any | any[], checked: boolean) => {
320
+ const { nodeMaps } = internalData
311
321
  if (nodeIds) {
312
322
  if (!XEUtils.isArray(nodeIds)) {
313
323
  nodeIds = [nodeIds]
314
324
  }
315
- handleCheckedCheckboxNode(nodeIds, checked)
325
+ const nodeList: any[] = []
326
+ nodeIds.forEach((nodeid: string) => {
327
+ const nodeItem = nodeMaps[nodeid]
328
+ if (nodeItem) {
329
+ nodeList.push(nodeItem.item)
330
+ }
331
+ })
332
+ handleCheckedCheckboxNode(nodeList, checked)
316
333
  }
317
334
  return nextTick()
318
335
  }
319
336
 
320
- const handleCheckedCheckboxNode = (nodeIds: VxeTreePropTypes.CheckNodeKeys, checked: boolean) => {
321
- const selectKeyMaps: Record<string, boolean> = Object.assign({}, reactData.selectCheckboxMaps)
322
- nodeIds.forEach((key) => {
337
+ const handleCheckedCheckboxNode = (nodeList: any[], checked: boolean) => {
338
+ const { transform } = props
339
+ const { selectCheckboxMaps } = internalData
340
+ const mapChildrenField = computeMapChildrenField.value
341
+ const childrenField = computeChildrenField.value
342
+ const checkboxOpts = computeCheckboxOpts.value
343
+ const { checkStrictly } = checkboxOpts
344
+ const handleSelect = (node: any) => {
345
+ const nodeid = getNodeId(node)
323
346
  if (checked) {
324
- selectKeyMaps[key] = true
325
- } else if (selectKeyMaps[key]) {
326
- delete selectKeyMaps[key]
347
+ if (!selectCheckboxMaps[nodeid]) {
348
+ selectCheckboxMaps[nodeid] = node
349
+ }
350
+ } else {
351
+ if (selectCheckboxMaps[nodeid]) {
352
+ delete selectCheckboxMaps[nodeid]
353
+ }
327
354
  }
328
- })
329
- reactData.selectCheckboxMaps = selectKeyMaps
355
+ }
356
+ if (checkStrictly) {
357
+ nodeList.forEach(handleSelect)
358
+ } else {
359
+ XEUtils.eachTree(nodeList, handleSelect, { children: transform ? mapChildrenField : childrenField })
360
+ }
361
+ reactData.updateCheckboxFlag++
362
+ updateCheckboxStatus()
330
363
  }
331
364
 
332
365
  const updateCheckboxChecked = (nodeIds: VxeTreePropTypes.CheckNodeKeys) => {
333
- const selectKeyMaps: Record<string, boolean> = {}
334
- if (nodeIds) {
335
- nodeIds.forEach((key) => {
336
- selectKeyMaps[key] = true
337
- })
338
- }
339
- reactData.selectCheckboxMaps = selectKeyMaps
366
+ setCheckboxByNodeId(nodeIds, true)
340
367
  }
341
368
 
342
369
  const handleSetExpand = (nodeid: string, expanded: boolean, expandedMaps: Record<string, boolean>) => {
@@ -384,7 +411,8 @@ export default defineComponent({
384
411
  return null
385
412
  },
386
413
  getCurrentNode () {
387
- const { currentNode, nodeMaps } = reactData
414
+ const { currentNode } = reactData
415
+ const { nodeMaps } = internalData
388
416
  if (currentNode) {
389
417
  const nodeItem = nodeMaps[getNodeId(currentNode)]
390
418
  if (nodeItem) {
@@ -394,7 +422,7 @@ export default defineComponent({
394
422
  return null
395
423
  },
396
424
  setCurrentNodeId (nodeKey) {
397
- const { nodeMaps } = reactData
425
+ const { nodeMaps } = internalData
398
426
  const nodeItem = nodeMaps[nodeKey]
399
427
  reactData.currentNode = nodeItem ? nodeItem.item : null
400
428
  return nextTick()
@@ -411,7 +439,8 @@ export default defineComponent({
411
439
  return reactData.selectRadioKey || null
412
440
  },
413
441
  getRadioNode () {
414
- const { selectRadioKey, nodeMaps } = reactData
442
+ const { selectRadioKey } = reactData
443
+ const { nodeMaps } = internalData
415
444
  if (selectRadioKey) {
416
445
  const nodeItem = nodeMaps[selectRadioKey]
417
446
  if (nodeItem) {
@@ -428,11 +457,11 @@ export default defineComponent({
428
457
  setCheckboxNode,
429
458
  setCheckboxByNodeId,
430
459
  getCheckboxNodeIds () {
431
- const { selectCheckboxMaps } = reactData
460
+ const { selectCheckboxMaps } = internalData
432
461
  return Object.keys(selectCheckboxMaps)
433
462
  },
434
463
  getCheckboxNodes () {
435
- const { nodeMaps, selectCheckboxMaps } = reactData
464
+ const { nodeMaps, selectCheckboxMaps } = internalData
436
465
  const list: any[] = []
437
466
  XEUtils.each(selectCheckboxMaps, (item, nodeid) => {
438
467
  const nodeItem = nodeMaps[nodeid]
@@ -443,50 +472,56 @@ export default defineComponent({
443
472
  return list
444
473
  },
445
474
  clearCheckboxNode () {
446
- reactData.selectCheckboxMaps = {}
475
+ internalData.selectCheckboxMaps = {}
476
+ reactData.updateCheckboxFlag++
447
477
  return nextTick()
448
478
  },
449
479
  setAllCheckboxNode (checked) {
480
+ const { transform } = props
450
481
  const selectMaps: Record<string, boolean> = {}
451
482
  const childrenField = computeChildrenField.value
483
+ const mapChildrenField = computeMapChildrenField.value
452
484
  if (checked) {
453
485
  XEUtils.eachTree(reactData.treeList, (node) => {
454
486
  const nodeid = getNodeId(node)
455
487
  selectMaps[nodeid] = true
456
- }, { children: childrenField })
488
+ }, { children: transform ? mapChildrenField : childrenField })
457
489
  }
458
- reactData.selectCheckboxMaps = selectMaps
490
+ internalData.selectCheckboxMaps = selectMaps
491
+ reactData.updateCheckboxFlag++
459
492
  return nextTick()
460
493
  },
461
494
  clearExpandNode () {
462
495
  return treeMethods.clearAllExpandNode()
463
496
  },
464
497
  clearAllExpandNode () {
465
- XEUtils.each(reactData.nodeMaps, (nodeItem: VxeTreeDefines.NodeCacheItem) => {
498
+ const { nodeMaps } = internalData
499
+ XEUtils.each(nodeMaps, (nodeItem: VxeTreeDefines.NodeCacheItem) => {
466
500
  nodeItem.treeLoaded = false
467
501
  })
468
- reactData.treeExpandedMaps = {}
502
+ internalData.treeExpandedMaps = {}
503
+ reactData.updateExpandedFlag++
469
504
  return nextTick()
470
505
  },
471
506
  setExpandByNodeId (nodeids, expanded) {
472
- const expandedMaps: Record<string, boolean> = Object.assign({}, reactData.treeExpandedMaps)
507
+ const { treeExpandedMaps } = internalData
473
508
  if (nodeids) {
474
509
  if (!XEUtils.isArray(nodeids)) {
475
510
  nodeids = [nodeids]
476
511
  }
477
512
  nodeids.forEach((nodeid: string) => {
478
- handleSetExpand(nodeid, expanded, expandedMaps)
513
+ handleSetExpand(nodeid, expanded, treeExpandedMaps)
479
514
  })
480
- reactData.treeExpandedMaps = expandedMaps
515
+ reactData.updateExpandedFlag++
481
516
  }
482
517
  return nextTick()
483
518
  },
484
519
  getExpandNodeIds () {
485
- const { treeExpandedMaps } = reactData
486
- return Object.keys(treeExpandedMaps)
520
+ const { treeExpandedMaps } = internalData
521
+ return XEUtils.keys(treeExpandedMaps)
487
522
  },
488
523
  getExpandNodes () {
489
- const { nodeMaps, treeExpandedMaps } = reactData
524
+ const { nodeMaps, treeExpandedMaps } = internalData
490
525
  const list: any[] = []
491
526
  XEUtils.each(treeExpandedMaps, (item, nodeid) => {
492
527
  const nodeItem = nodeMaps[nodeid]
@@ -497,60 +532,62 @@ export default defineComponent({
497
532
  return list
498
533
  },
499
534
  setExpandNode (nodes, expanded) {
500
- const expandedMaps: Record<string, boolean> = Object.assign({}, reactData.treeExpandedMaps)
535
+ const { treeExpandedMaps } = internalData
501
536
  if (nodes) {
502
537
  if (!XEUtils.isArray(nodes)) {
503
538
  nodes = [nodes]
504
539
  }
505
540
  nodes.forEach((node: any) => {
506
541
  const nodeid = getNodeId(node)
507
- handleSetExpand(nodeid, expanded, expandedMaps)
542
+ handleSetExpand(nodeid, expanded, treeExpandedMaps)
508
543
  })
509
- reactData.treeExpandedMaps = expandedMaps
544
+ reactData.updateExpandedFlag++
510
545
  }
511
546
  return nextTick()
512
547
  },
513
548
  toggleExpandByNodeId (nodeids) {
514
- const expandedMaps: Record<string, boolean> = Object.assign({}, reactData.treeExpandedMaps)
549
+ const { treeExpandedMaps } = internalData
515
550
  if (nodeids) {
516
551
  if (!XEUtils.isArray(nodeids)) {
517
552
  nodeids = [nodeids]
518
553
  }
519
554
  nodeids.forEach((nodeid: string) => {
520
- handleSetExpand(nodeid, !expandedMaps[nodeid], expandedMaps)
555
+ handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps)
521
556
  })
522
- reactData.treeExpandedMaps = expandedMaps
557
+ reactData.updateExpandedFlag++
523
558
  }
524
559
  return nextTick()
525
560
  },
526
561
  toggleExpandNode (nodes) {
527
- const expandedMaps: Record<string, boolean> = Object.assign({}, reactData.treeExpandedMaps)
562
+ const { treeExpandedMaps } = internalData
528
563
  if (nodes) {
529
564
  if (!XEUtils.isArray(nodes)) {
530
565
  nodes = [nodes]
531
566
  }
532
567
  nodes.forEach((node: any) => {
533
568
  const nodeid = getNodeId(node)
534
- handleSetExpand(nodeid, !expandedMaps[nodeid], expandedMaps)
569
+ handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps)
535
570
  })
536
- reactData.treeExpandedMaps = expandedMaps
571
+ reactData.updateExpandedFlag++
537
572
  }
538
573
  return nextTick()
539
574
  },
540
575
  setAllExpandNode (expanded) {
541
- const expandedMaps: Record<string, boolean> = {}
576
+ const { transform } = props
577
+ const { treeExpandedMaps } = internalData
542
578
  const childrenField = computeChildrenField.value
579
+ const mapChildrenField = computeMapChildrenField.value
543
580
  if (expanded) {
544
581
  XEUtils.eachTree(reactData.treeList, (node) => {
545
582
  const childList: any[] = XEUtils.get(node, childrenField)
546
583
  const hasChild = childList && childList.length
547
584
  if (hasChild) {
548
585
  const nodeid = getNodeId(node)
549
- expandedMaps[nodeid] = true
586
+ treeExpandedMaps[nodeid] = true
550
587
  }
551
- }, { children: childrenField })
588
+ }, { children: transform ? mapChildrenField : childrenField })
552
589
  }
553
- reactData.treeExpandedMaps = expandedMaps
590
+ reactData.updateExpandedFlag++
554
591
  return nextTick()
555
592
  },
556
593
  reloadExpandNode (node) {
@@ -563,7 +600,7 @@ export default defineComponent({
563
600
  },
564
601
  clearExpandLoaded (node) {
565
602
  const { lazy } = props
566
- const { nodeMaps } = reactData
603
+ const { nodeMaps } = internalData
567
604
  if (lazy) {
568
605
  const nodeItem = nodeMaps[getNodeId(node)]
569
606
  if (nodeItem) {
@@ -577,7 +614,7 @@ export default defineComponent({
577
614
  */
578
615
  loadChildrenNode (node, childRecords) {
579
616
  const { lazy, transform } = props
580
- const { nodeMaps } = reactData
617
+ const { nodeMaps } = internalData
581
618
  if (!lazy) {
582
619
  return Promise.resolve([])
583
620
  }
@@ -614,21 +651,24 @@ export default defineComponent({
614
651
  isIndeterminateByCheckboxNode,
615
652
  isCheckedByCheckboxNode,
616
653
  getCheckboxIndeterminateNodes () {
617
- const { treeList, indeterminateCheckboxMaps } = reactData
618
- const indeterminateNodes: any[] = []
619
- XEUtils.eachTree(treeList, (node) => {
620
- if (indeterminateCheckboxMaps[getNodeId(node)]) {
621
- indeterminateNodes.push(node)
654
+ const { nodeMaps, indeterminateRowMaps } = internalData
655
+ const list: any[] = []
656
+ XEUtils.each(indeterminateRowMaps, (item, nodeid) => {
657
+ const nodeItem = nodeMaps[nodeid]
658
+ if (nodeItem) {
659
+ list.push(nodeItem.item)
622
660
  }
623
661
  })
624
- return indeterminateNodes
662
+ return list
625
663
  }
626
664
  }
627
665
 
628
666
  const cacheNodeMap = () => {
667
+ const { transform } = props
629
668
  const { treeList } = reactData
630
669
  const valueField = computeValueField.value
631
670
  const childrenField = computeChildrenField.value
671
+ const mapChildrenField = computeMapChildrenField.value
632
672
  const keyMaps: Record<string, VxeTreeDefines.NodeCacheItem> = {}
633
673
  XEUtils.eachTree(treeList, (item, itemIndex, items, path, parent, nodes) => {
634
674
  let nodeid = getNodeId(item)
@@ -646,32 +686,35 @@ export default defineComponent({
646
686
  lineCount: 0,
647
687
  treeLoaded: false
648
688
  }
649
- }, { children: childrenField })
650
- reactData.nodeMaps = keyMaps
689
+ }, { children: transform ? mapChildrenField : childrenField })
690
+ internalData.nodeMaps = keyMaps
651
691
  }
652
692
 
653
- const updateData = (list: any[]) => {
693
+ const loadTreeData = (list: any[]) => {
654
694
  const { expandAll, transform } = props
655
695
  const { initialized } = internalData
656
696
  const keyField = computeKeyField.value
657
697
  const parentField = computeParentField.value
658
- const childrenField = computeChildrenField.value
698
+ const mapChildrenField = computeMapChildrenField.value
659
699
  if (transform) {
660
- reactData.treeList = XEUtils.toArrayTree(list, { key: keyField, parentKey: parentField, mapChildren: childrenField })
700
+ reactData.treeList = XEUtils.toArrayTree(list, { key: keyField, parentKey: parentField, mapChildren: mapChildrenField })
661
701
  } else {
662
702
  reactData.treeList = list ? list.slice(0) : []
663
703
  }
664
704
  cacheNodeMap()
665
- if (expandAll && !initialized) {
705
+ if (!initialized) {
666
706
  if (list && list.length) {
667
707
  internalData.initialized = true
668
- $xeTree.setAllExpandNode(true)
708
+ if (expandAll) {
709
+ $xeTree.setAllExpandNode(true)
710
+ }
711
+ $xeTree.setCheckboxByNodeId(props.checkNodeKeys || [], true)
669
712
  }
670
713
  }
671
714
  }
672
715
 
673
716
  const handleCountLine = (item: any, isRoot: boolean, nodeItem: VxeTreeDefines.NodeCacheItem) => {
674
- const { treeExpandedMaps } = reactData
717
+ const { treeExpandedMaps } = internalData
675
718
  const childrenField = computeChildrenField.value
676
719
  const nodeid = getNodeId(item)
677
720
  nodeItem.lineCount++
@@ -685,7 +728,7 @@ export default defineComponent({
685
728
  }
686
729
 
687
730
  const updateNodeLine = (node: any) => {
688
- const { nodeMaps } = reactData
731
+ const { nodeMaps } = internalData
689
732
  if (node) {
690
733
  const nodeid = getNodeId(node)
691
734
  const nodeItem = nodeMaps[nodeid]
@@ -742,16 +785,14 @@ export default defineComponent({
742
785
  const { checkStrictly } = checkboxOpts
743
786
  return new Promise(resolve => {
744
787
  if (loadMethod) {
745
- const tempExpandLazyLoadedMaps = Object.assign({}, reactData.treeExpandLazyLoadedMaps)
746
- const { nodeMaps } = reactData
788
+ const { nodeMaps } = internalData
747
789
  const nodeid = getNodeId(node)
748
790
  const nodeItem = nodeMaps[nodeid]
749
- tempExpandLazyLoadedMaps[nodeid] = true
750
- reactData.treeExpandLazyLoadedMaps = tempExpandLazyLoadedMaps
791
+ internalData.treeExpandLazyLoadedMaps[nodeid] = true
751
792
  Promise.resolve(
752
793
  loadMethod({ $tree: $xeTree, node })
753
794
  ).then((childRecords: any) => {
754
- const { treeExpandLazyLoadedMaps } = reactData
795
+ const { treeExpandLazyLoadedMaps } = internalData
755
796
  nodeItem.treeLoaded = true
756
797
  if (treeExpandLazyLoadedMaps[nodeid]) {
757
798
  treeExpandLazyLoadedMaps[nodeid] = false
@@ -760,15 +801,15 @@ export default defineComponent({
760
801
  childRecords = []
761
802
  }
762
803
  if (childRecords) {
763
- return treeMethods.loadChildrenNode(node, childRecords).then(childRows => {
764
- const tempExpandedMaps = Object.assign({}, reactData.treeExpandedMaps)
765
- if (childRows.length && !tempExpandedMaps[nodeid]) {
766
- tempExpandedMaps[nodeid] = true
804
+ return $xeTree.loadChildrenNode(node, childRecords).then(childRows => {
805
+ const { treeExpandedMaps } = internalData
806
+ if (childRows.length && !treeExpandedMaps[nodeid]) {
807
+ treeExpandedMaps[nodeid] = true
767
808
  }
768
- reactData.treeExpandedMaps = tempExpandedMaps
809
+ reactData.updateExpandedFlag++
769
810
  // 如果当前节点已选中,则展开后子节点也被选中
770
- if (!checkStrictly && treeMethods.isCheckedByCheckboxNodeId(nodeid)) {
771
- handleCheckedCheckboxNode(childRows.map((item: any) => getNodeId(item)), true)
811
+ if (!checkStrictly && $xeTree.isCheckedByCheckboxNodeId(nodeid)) {
812
+ handleCheckedCheckboxNode(childRows, true)
772
813
  }
773
814
  updateNodeLine(node)
774
815
  dispatchEvent('load-success', { node, data: childRecords }, new Event('load-success'))
@@ -779,7 +820,7 @@ export default defineComponent({
779
820
  dispatchEvent('load-success', { node, data: childRecords }, new Event('load-success'))
780
821
  }
781
822
  }).catch((e) => {
782
- const { treeExpandLazyLoadedMaps } = reactData
823
+ const { treeExpandLazyLoadedMaps } = internalData
783
824
  nodeItem.treeLoaded = false
784
825
  if (treeExpandLazyLoadedMaps[nodeid]) {
785
826
  treeExpandLazyLoadedMaps[nodeid] = false
@@ -803,8 +844,8 @@ export default defineComponent({
803
844
  */
804
845
  const handleBaseTreeExpand = (nodeList: any[], expanded: boolean) => {
805
846
  const { lazy, accordion, toggleMethod } = props
806
- const { nodeMaps, treeExpandLazyLoadedMaps } = reactData
807
- const tempExpandedMaps = Object.assign({}, reactData.treeExpandedMaps)
847
+ const { treeExpandLazyLoadedMaps, treeExpandedMaps } = internalData
848
+ const { nodeMaps } = internalData
808
849
  const childrenField = computeChildrenField.value
809
850
  const hasChildField = computeHasChildField.value
810
851
  const result: any[] = []
@@ -817,8 +858,8 @@ export default defineComponent({
817
858
  if (nodeItem) {
818
859
  nodeItem.items.forEach(item => {
819
860
  const itemNodeId = getNodeId(item)
820
- if (tempExpandedMaps[itemNodeId]) {
821
- delete tempExpandedMaps[itemNodeId]
861
+ if (treeExpandedMaps[itemNodeId]) {
862
+ delete treeExpandedMaps[itemNodeId]
822
863
  }
823
864
  })
824
865
  }
@@ -827,7 +868,7 @@ export default defineComponent({
827
868
  if (expanded) {
828
869
  validNodes.forEach((item) => {
829
870
  const itemNodeId = getNodeId(item)
830
- if (!tempExpandedMaps[itemNodeId]) {
871
+ if (!treeExpandedMaps[itemNodeId]) {
831
872
  const nodeItem = nodeMaps[itemNodeId]
832
873
  const isLoad = lazy && item[hasChildField] && !nodeItem.treeLoaded && !treeExpandLazyLoadedMaps[itemNodeId]
833
874
  // 是否使用懒加载
@@ -835,7 +876,7 @@ export default defineComponent({
835
876
  result.push(handleAsyncTreeExpandChilds(item))
836
877
  } else {
837
878
  if (item[childrenField] && item[childrenField].length) {
838
- tempExpandedMaps[itemNodeId] = true
879
+ treeExpandedMaps[itemNodeId] = true
839
880
  expandNodes.push(item)
840
881
  }
841
882
  }
@@ -844,20 +885,20 @@ export default defineComponent({
844
885
  } else {
845
886
  validNodes.forEach(item => {
846
887
  const itemNodeId = getNodeId(item)
847
- if (tempExpandedMaps[itemNodeId]) {
848
- delete tempExpandedMaps[itemNodeId]
888
+ if (treeExpandedMaps[itemNodeId]) {
889
+ delete treeExpandedMaps[itemNodeId]
849
890
  expandNodes.push(item)
850
891
  }
851
892
  })
852
893
  }
853
- reactData.treeExpandedMaps = tempExpandedMaps
894
+ reactData.updateExpandedFlag++
854
895
  expandNodes.forEach(updateNodeLine)
855
896
  return Promise.all(result)
856
897
  }
857
898
 
858
899
  const toggleExpandEvent = (evnt: MouseEvent, node: any) => {
859
900
  const { lazy } = props
860
- const { treeExpandedMaps, treeExpandLazyLoadedMaps } = reactData
901
+ const { treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData
861
902
  const nodeid = getNodeId(node)
862
903
  const expanded = !treeExpandedMaps[nodeid]
863
904
  evnt.stopPropagation()
@@ -866,72 +907,95 @@ export default defineComponent({
866
907
  }
867
908
  }
868
909
 
869
- const handleNodeCheckboxStatus = (node: any, selectKeyMaps: Record<string, boolean>, indeterminateMaps: Record<string, boolean>) => {
870
- const childrenField = computeChildrenField.value
871
- const childList: any[] = XEUtils.get(node, childrenField)
872
- const nodeid = getNodeId(node)
873
- if (childList && childList.length) {
874
- let checkSome = false
875
- let checkSize = 0
876
- childList.forEach(childNode => {
877
- const childNodeid = getNodeId(childNode)
878
- const isChecked = selectKeyMaps[childNodeid]
879
- if (isChecked || indeterminateMaps[childNodeid]) {
880
- if (isChecked) {
881
- checkSize++
882
- }
883
- checkSome = true
884
- }
885
- })
886
- const checkAll = checkSize === childList.length
887
- if (checkAll) {
888
- if (!selectKeyMaps[nodeid]) {
889
- selectKeyMaps[nodeid] = true
890
- }
891
- if (indeterminateMaps[nodeid]) {
892
- delete indeterminateMaps[nodeid]
893
- }
894
- } else {
895
- if (selectKeyMaps[nodeid]) {
896
- delete selectKeyMaps[nodeid]
897
- }
898
- indeterminateMaps[nodeid] = checkSome
899
- }
900
- } else {
901
- if (indeterminateMaps[nodeid]) {
902
- delete indeterminateMaps[nodeid]
903
- }
904
- }
905
- }
906
-
907
910
  const updateCheckboxStatus = () => {
911
+ const { transform } = props
908
912
  const { treeList } = reactData
913
+ const { selectCheckboxMaps, indeterminateRowMaps } = internalData
909
914
  const childrenField = computeChildrenField.value
915
+ const mapChildrenField = computeMapChildrenField.value
910
916
  const checkboxOpts = computeCheckboxOpts.value
911
- const { checkStrictly } = checkboxOpts
917
+ const { checkStrictly, checkMethod } = checkboxOpts
912
918
  if (!checkStrictly) {
913
- const selectKeyMaps = Object.assign({}, reactData.selectCheckboxMaps)
914
- const indeterminateMaps: Record<string, boolean> = {}
915
- XEUtils.eachTree(treeList, (node, index, items, path, parent, nodes) => {
916
- const childList: any[] = XEUtils.get(node, childrenField)
917
- if (!childList || !childList.length) {
918
- handleNodeCheckboxStatus(node, selectKeyMaps, indeterminateMaps)
919
+ const childRowMaps: Record<string, number> = {}
920
+ const childRowList: any[][] = []
921
+ XEUtils.eachTree(treeList, (node) => {
922
+ const nodeid = getNodeId(node)
923
+ const childList = node[childrenField]
924
+ if (childList && childList.length && !childRowMaps[nodeid]) {
925
+ childRowMaps[nodeid] = 1
926
+ childRowList.unshift([node, nodeid, childList])
919
927
  }
920
- if (index === items.length - 1) {
921
- for (let len = nodes.length - 2; len >= 0; len--) {
922
- const parentItem = nodes[len]
923
- handleNodeCheckboxStatus(parentItem, selectKeyMaps, indeterminateMaps)
928
+ }, { children: transform ? mapChildrenField : childrenField })
929
+
930
+ childRowList.forEach(vals => {
931
+ const node: string = vals[0]
932
+ const nodeid: string = vals[1]
933
+ const childList: any[] = vals[2]
934
+ let sLen = 0 // 已选
935
+ let hLen = 0 // 半选
936
+ let vLen = 0 // 有效行
937
+ childList.forEach(
938
+ checkMethod
939
+ ? (item) => {
940
+ const childNodeid = getNodeId(item)
941
+ const isSelect = selectCheckboxMaps[childNodeid]
942
+ if (checkMethod({ node: item })) {
943
+ if (isSelect) {
944
+ sLen++
945
+ } else if (indeterminateRowMaps[childNodeid]) {
946
+ hLen++
947
+ }
948
+ vLen++
949
+ } else {
950
+ if (isSelect) {
951
+ sLen++
952
+ } else if (indeterminateRowMaps[childNodeid]) {
953
+ hLen++
954
+ }
955
+ }
956
+ }
957
+ : item => {
958
+ const childNodeid = getNodeId(item)
959
+ const isSelect = selectCheckboxMaps[childNodeid]
960
+ if (isSelect) {
961
+ sLen++
962
+ } else if (indeterminateRowMaps[childNodeid]) {
963
+ hLen++
964
+ }
965
+ vLen++
966
+ }
967
+ )
968
+ const isSelected = sLen >= vLen
969
+ const halfSelect = !isSelected && (sLen >= 1 || hLen >= 1)
970
+ if (isSelected) {
971
+ selectCheckboxMaps[nodeid] = node
972
+ if (indeterminateRowMaps[nodeid]) {
973
+ delete indeterminateRowMaps[nodeid]
974
+ }
975
+ } else {
976
+ if (selectCheckboxMaps[nodeid]) {
977
+ delete selectCheckboxMaps[nodeid]
978
+ }
979
+ if (halfSelect) {
980
+ indeterminateRowMaps[nodeid] = node
981
+ } else {
982
+ if (indeterminateRowMaps[nodeid]) {
983
+ delete indeterminateRowMaps[nodeid]
984
+ }
924
985
  }
925
986
  }
926
987
  })
927
- reactData.selectCheckboxMaps = selectKeyMaps
928
- reactData.indeterminateCheckboxMaps = indeterminateMaps
988
+ reactData.updateCheckboxFlag++
929
989
  }
930
990
  }
931
991
 
932
992
  const changeCheckboxEvent = (evnt: MouseEvent, node: any) => {
933
993
  evnt.preventDefault()
934
994
  evnt.stopPropagation()
995
+ const { transform } = props
996
+ const { selectCheckboxMaps } = internalData
997
+ const childrenField = computeChildrenField.value
998
+ const mapChildrenField = computeMapChildrenField.value
935
999
  const checkboxOpts = computeCheckboxOpts.value
936
1000
  const { checkStrictly, checkMethod } = checkboxOpts
937
1001
  let isDisabled = !!checkMethod
@@ -941,33 +1005,31 @@ export default defineComponent({
941
1005
  if (isDisabled) {
942
1006
  return
943
1007
  }
944
- const selectKeyMaps = Object.assign({}, reactData.selectCheckboxMaps)
945
- const childrenField = computeChildrenField.value
946
1008
  const nodeid = getNodeId(node)
947
1009
  let isChecked = false
948
- if (selectKeyMaps[nodeid]) {
949
- delete selectKeyMaps[nodeid]
1010
+ if (selectCheckboxMaps[nodeid]) {
1011
+ delete selectCheckboxMaps[nodeid]
950
1012
  } else {
951
1013
  isChecked = true
952
- selectKeyMaps[nodeid] = isChecked
1014
+ selectCheckboxMaps[nodeid] = node
953
1015
  }
954
1016
  if (!checkStrictly) {
955
1017
  XEUtils.eachTree(XEUtils.get(node, childrenField), (childNode) => {
956
1018
  const childNodeid = getNodeId(childNode)
957
1019
  if (isChecked) {
958
- if (!selectKeyMaps[childNodeid]) {
959
- selectKeyMaps[childNodeid] = true
1020
+ if (!selectCheckboxMaps[childNodeid]) {
1021
+ selectCheckboxMaps[childNodeid] = true
960
1022
  }
961
1023
  } else {
962
- if (selectKeyMaps[childNodeid]) {
963
- delete selectKeyMaps[childNodeid]
1024
+ if (selectCheckboxMaps[childNodeid]) {
1025
+ delete selectCheckboxMaps[childNodeid]
964
1026
  }
965
1027
  }
966
- }, { children: childrenField })
1028
+ }, { children: transform ? mapChildrenField : childrenField })
967
1029
  }
968
- reactData.selectCheckboxMaps = selectKeyMaps
1030
+ reactData.updateCheckboxFlag++
969
1031
  updateCheckboxStatus()
970
- const value = Object.keys(reactData.selectCheckboxMaps)
1032
+ const value = XEUtils.keys(selectCheckboxMaps)
971
1033
  emitCheckboxMode(value)
972
1034
  dispatchEvent('checkbox-change', { node, value, checked: isChecked }, evnt)
973
1035
  }
@@ -1086,7 +1148,8 @@ export default defineComponent({
1086
1148
 
1087
1149
  const renderNode = (node: any): VNode => {
1088
1150
  const { lazy, showRadio, showCheckbox, showLine, indent, iconOpen, iconClose, iconLoaded, showIcon } = props
1089
- const { nodeMaps, treeExpandedMaps, currentNode, selectRadioKey, treeExpandLazyLoadedMaps } = reactData
1151
+ const { currentNode, selectRadioKey, updateExpandedFlag } = reactData
1152
+ const { nodeMaps, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData
1090
1153
  const childrenField = computeChildrenField.value
1091
1154
  const titleField = computeTitleField.value
1092
1155
  const hasChildField = computeHasChildField.value
@@ -1096,7 +1159,7 @@ export default defineComponent({
1096
1159
  const titleSlot = slots.title
1097
1160
  const extraSlot = slots.extra
1098
1161
  const nodeid = getNodeId(node)
1099
- const isExpand = treeExpandedMaps[nodeid]
1162
+ const isExpand = updateExpandedFlag && treeExpandedMaps[nodeid]
1100
1163
  const nodeItem = nodeMaps[nodeid]
1101
1164
  const nodeValue = XEUtils.get(node, titleField)
1102
1165
  const childVns: VNode[] = []
@@ -1255,7 +1318,7 @@ export default defineComponent({
1255
1318
  dataFlag.value++
1256
1319
  })
1257
1320
  watch(dataFlag, () => {
1258
- updateData(props.data || [])
1321
+ loadTreeData(props.data || [])
1259
1322
  })
1260
1323
 
1261
1324
  watch(() => props.checkNodeKey, (val) => {
@@ -1275,12 +1338,12 @@ export default defineComponent({
1275
1338
 
1276
1339
  onUnmounted(() => {
1277
1340
  reactData.treeList = []
1278
- reactData.treeExpandedMaps = {}
1279
- reactData.nodeMaps = {}
1341
+ internalData.treeExpandedMaps = {}
1342
+ internalData.indeterminateRowMaps = {}
1343
+ internalData.nodeMaps = {}
1280
1344
  })
1281
1345
 
1282
- updateData(props.data || [])
1283
- updateCheckboxChecked(props.checkNodeKeys || [])
1346
+ loadTreeData(props.data || [])
1284
1347
 
1285
1348
  $xeTree.renderVN = renderVN
1286
1349