vxe-pc-ui 4.7.5 → 4.7.7

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 (197) hide show
  1. package/es/icon/style.css +1 -1
  2. package/es/language/ar-EG.js +19 -1
  3. package/es/language/de-DE.js +19 -1
  4. package/es/language/en-US.js +20 -2
  5. package/es/language/es-ES.js +19 -1
  6. package/es/language/fr-FR.js +19 -1
  7. package/es/language/hu-HU.js +19 -1
  8. package/es/language/hy-AM.js +18 -0
  9. package/es/language/id-ID.js +19 -1
  10. package/es/language/it-IT.js +19 -1
  11. package/es/language/ja-JP.js +19 -1
  12. package/es/language/ko-KR.js +19 -1
  13. package/es/language/ms-MY.js +19 -1
  14. package/es/language/nb-NO.js +19 -1
  15. package/es/language/pt-BR.js +19 -1
  16. package/es/language/ru-RU.js +19 -1
  17. package/es/language/th-TH.js +19 -1
  18. package/es/language/ug-CN.js +19 -1
  19. package/es/language/uk-UA.js +19 -1
  20. package/es/language/uz-UZ.js +19 -1
  21. package/es/language/vi-VN.js +19 -1
  22. package/es/language/zh-CHT.js +19 -1
  23. package/es/language/zh-CN.js +18 -0
  24. package/es/list/src/list.js +1 -1
  25. package/es/select/src/select.js +135 -42
  26. package/es/select/style.css +21 -0
  27. package/es/select/style.min.css +1 -1
  28. package/es/style.css +1 -1
  29. package/es/style.min.css +1 -1
  30. package/es/tree/src/tree.js +924 -407
  31. package/es/tree/src/util.js +32 -0
  32. package/es/tree/style.css +29 -26
  33. package/es/tree/style.min.css +1 -1
  34. package/es/tree-select/src/tree-select.js +227 -18
  35. package/es/tree-select/style.css +36 -1
  36. package/es/tree-select/style.min.css +1 -1
  37. package/es/ui/index.js +19 -3
  38. package/es/ui/src/dom.js +9 -0
  39. package/es/ui/src/log.js +1 -1
  40. package/es/vxe-select/style.css +21 -0
  41. package/es/vxe-select/style.min.css +1 -1
  42. package/es/vxe-tree/style.css +29 -26
  43. package/es/vxe-tree/style.min.css +1 -1
  44. package/es/vxe-tree-select/style.css +36 -1
  45. package/es/vxe-tree-select/style.min.css +1 -1
  46. package/lib/icon/style/style.css +1 -1
  47. package/lib/icon/style/style.min.css +1 -1
  48. package/lib/index.umd.js +1512 -530
  49. package/lib/index.umd.min.js +1 -1
  50. package/lib/language/ar-EG.js +19 -1
  51. package/lib/language/ar-EG.min.js +1 -1
  52. package/lib/language/ar-EG.umd.js +19 -1
  53. package/lib/language/de-DE.js +19 -1
  54. package/lib/language/de-DE.min.js +1 -1
  55. package/lib/language/de-DE.umd.js +19 -1
  56. package/lib/language/en-US.js +20 -2
  57. package/lib/language/en-US.min.js +1 -1
  58. package/lib/language/en-US.umd.js +20 -2
  59. package/lib/language/es-ES.js +19 -1
  60. package/lib/language/es-ES.min.js +1 -1
  61. package/lib/language/es-ES.umd.js +19 -1
  62. package/lib/language/fr-FR.js +19 -1
  63. package/lib/language/fr-FR.min.js +1 -1
  64. package/lib/language/fr-FR.umd.js +19 -1
  65. package/lib/language/hu-HU.js +19 -1
  66. package/lib/language/hu-HU.min.js +1 -1
  67. package/lib/language/hu-HU.umd.js +19 -1
  68. package/lib/language/hy-AM.js +18 -0
  69. package/lib/language/hy-AM.min.js +1 -1
  70. package/lib/language/hy-AM.umd.js +18 -0
  71. package/lib/language/id-ID.js +19 -1
  72. package/lib/language/id-ID.min.js +1 -1
  73. package/lib/language/id-ID.umd.js +19 -1
  74. package/lib/language/it-IT.js +19 -1
  75. package/lib/language/it-IT.min.js +1 -1
  76. package/lib/language/it-IT.umd.js +19 -1
  77. package/lib/language/ja-JP.js +19 -1
  78. package/lib/language/ja-JP.min.js +1 -1
  79. package/lib/language/ja-JP.umd.js +19 -1
  80. package/lib/language/ko-KR.js +19 -1
  81. package/lib/language/ko-KR.min.js +1 -1
  82. package/lib/language/ko-KR.umd.js +19 -1
  83. package/lib/language/ms-MY.js +19 -1
  84. package/lib/language/ms-MY.min.js +1 -1
  85. package/lib/language/ms-MY.umd.js +19 -1
  86. package/lib/language/nb-NO.js +19 -1
  87. package/lib/language/nb-NO.min.js +1 -1
  88. package/lib/language/nb-NO.umd.js +19 -1
  89. package/lib/language/pt-BR.js +19 -1
  90. package/lib/language/pt-BR.min.js +1 -1
  91. package/lib/language/pt-BR.umd.js +19 -1
  92. package/lib/language/ru-RU.js +19 -1
  93. package/lib/language/ru-RU.min.js +1 -1
  94. package/lib/language/ru-RU.umd.js +19 -1
  95. package/lib/language/th-TH.js +19 -1
  96. package/lib/language/th-TH.min.js +1 -1
  97. package/lib/language/th-TH.umd.js +19 -1
  98. package/lib/language/ug-CN.js +19 -1
  99. package/lib/language/ug-CN.min.js +1 -1
  100. package/lib/language/ug-CN.umd.js +19 -1
  101. package/lib/language/uk-UA.js +19 -1
  102. package/lib/language/uk-UA.min.js +1 -1
  103. package/lib/language/uk-UA.umd.js +19 -1
  104. package/lib/language/uz-UZ.js +19 -1
  105. package/lib/language/uz-UZ.min.js +1 -1
  106. package/lib/language/uz-UZ.umd.js +19 -1
  107. package/lib/language/vi-VN.js +19 -1
  108. package/lib/language/vi-VN.min.js +1 -1
  109. package/lib/language/vi-VN.umd.js +19 -1
  110. package/lib/language/zh-CHT.js +19 -1
  111. package/lib/language/zh-CHT.min.js +1 -1
  112. package/lib/language/zh-CHT.umd.js +19 -1
  113. package/lib/language/zh-CN.js +18 -0
  114. package/lib/language/zh-CN.min.js +1 -1
  115. package/lib/language/zh-CN.umd.js +18 -0
  116. package/lib/list/src/list.js +1 -1
  117. package/lib/list/src/list.min.js +1 -1
  118. package/lib/select/src/select.js +139 -44
  119. package/lib/select/src/select.min.js +1 -1
  120. package/lib/select/style/style.css +21 -0
  121. package/lib/select/style/style.min.css +1 -1
  122. package/lib/style.css +1 -1
  123. package/lib/style.min.css +1 -1
  124. package/lib/tree/src/tree.js +1154 -572
  125. package/lib/tree/src/tree.min.js +1 -1
  126. package/lib/tree/src/util.js +51 -0
  127. package/lib/tree/src/util.min.js +1 -0
  128. package/lib/tree/style/style.css +29 -26
  129. package/lib/tree/style/style.min.css +1 -1
  130. package/lib/tree-select/src/tree-select.js +237 -21
  131. package/lib/tree-select/src/tree-select.min.js +1 -1
  132. package/lib/tree-select/style/style.css +36 -1
  133. package/lib/tree-select/style/style.min.css +1 -1
  134. package/lib/ui/index.js +19 -3
  135. package/lib/ui/index.min.js +1 -1
  136. package/lib/ui/src/dom.js +10 -0
  137. package/lib/ui/src/dom.min.js +1 -1
  138. package/lib/ui/src/log.js +1 -1
  139. package/lib/ui/src/log.min.js +1 -1
  140. package/lib/vxe-select/style/style.css +21 -0
  141. package/lib/vxe-select/style/style.min.css +1 -1
  142. package/lib/vxe-tree/style/style.css +29 -26
  143. package/lib/vxe-tree/style/style.min.css +1 -1
  144. package/lib/vxe-tree-select/style/style.css +36 -1
  145. package/lib/vxe-tree-select/style/style.min.css +1 -1
  146. package/package.json +1 -1
  147. package/packages/language/ar-EG.ts +19 -1
  148. package/packages/language/de-DE.ts +19 -1
  149. package/packages/language/en-US.ts +20 -2
  150. package/packages/language/es-ES.ts +19 -1
  151. package/packages/language/fr-FR.ts +19 -1
  152. package/packages/language/hu-HU.ts +19 -1
  153. package/packages/language/hy-AM.ts +18 -0
  154. package/packages/language/id-ID.ts +19 -1
  155. package/packages/language/it-IT.ts +19 -1
  156. package/packages/language/ja-JP.ts +19 -1
  157. package/packages/language/ko-KR.ts +19 -1
  158. package/packages/language/ms-MY.ts +19 -1
  159. package/packages/language/nb-NO.ts +19 -1
  160. package/packages/language/pt-BR.ts +19 -1
  161. package/packages/language/ru-RU.ts +19 -1
  162. package/packages/language/th-TH.ts +19 -1
  163. package/packages/language/ug-CN.ts +19 -1
  164. package/packages/language/uk-UA.ts +19 -1
  165. package/packages/language/uz-UZ.ts +19 -1
  166. package/packages/language/vi-VN.ts +19 -1
  167. package/packages/language/zh-CHT.ts +19 -1
  168. package/packages/language/zh-CN.ts +18 -0
  169. package/packages/list/src/list.ts +1 -1
  170. package/packages/select/src/select.ts +146 -50
  171. package/packages/tree/src/tree.ts +947 -410
  172. package/packages/tree/src/util.ts +35 -0
  173. package/packages/tree-select/src/tree-select.ts +240 -19
  174. package/packages/ui/index.ts +18 -2
  175. package/packages/ui/src/dom.ts +10 -0
  176. package/styles/components/select.scss +19 -0
  177. package/styles/components/tree-select.scss +36 -1
  178. package/styles/components/tree.scss +34 -31
  179. package/types/components/button.d.ts +11 -1
  180. package/types/components/grid.d.ts +5 -0
  181. package/types/components/icon-picker.d.ts +11 -1
  182. package/types/components/input.d.ts +2 -2
  183. package/types/components/select.d.ts +28 -39
  184. package/types/components/tree-select.d.ts +73 -12
  185. package/types/components/tree.d.ts +125 -8
  186. /package/es/icon/{iconfont.1752151733538.ttf → iconfont.1752462949194.ttf} +0 -0
  187. /package/es/icon/{iconfont.1752151733538.woff → iconfont.1752462949194.woff} +0 -0
  188. /package/es/icon/{iconfont.1752151733538.woff2 → iconfont.1752462949194.woff2} +0 -0
  189. /package/es/{iconfont.1752151733538.ttf → iconfont.1752462949194.ttf} +0 -0
  190. /package/es/{iconfont.1752151733538.woff → iconfont.1752462949194.woff} +0 -0
  191. /package/es/{iconfont.1752151733538.woff2 → iconfont.1752462949194.woff2} +0 -0
  192. /package/lib/icon/style/{iconfont.1752151733538.ttf → iconfont.1752462949194.ttf} +0 -0
  193. /package/lib/icon/style/{iconfont.1752151733538.woff → iconfont.1752462949194.woff} +0 -0
  194. /package/lib/icon/style/{iconfont.1752151733538.woff2 → iconfont.1752462949194.woff2} +0 -0
  195. /package/lib/{iconfont.1752151733538.ttf → iconfont.1752462949194.ttf} +0 -0
  196. /package/lib/{iconfont.1752151733538.woff → iconfont.1752462949194.woff} +0 -0
  197. /package/lib/{iconfont.1752151733538.woff2 → iconfont.1752462949194.woff2} +0 -0
package/lib/index.umd.js CHANGED
@@ -3573,8 +3573,26 @@ setTheme();
3573
3573
  operError: '发生错误,操作失败!'
3574
3574
  },
3575
3575
  select: {
3576
+ clear: '清除',
3577
+ allChecked: '全选',
3578
+ total: '{0} / {1}',
3576
3579
  search: '搜索',
3577
3580
  loadingText: '加载中',
3581
+ emptyText: '暂无数据',
3582
+ maxSize: '最大可选择的数量不能超过 {0} 个',
3583
+ overSizeErr: '已超出最大可选数量 {0} 个,超出部分将被忽略!',
3584
+ searchEmpty: '未匹配到数据!'
3585
+ },
3586
+ tree: {
3587
+ searchEmpty: '未匹配到数据!'
3588
+ },
3589
+ treeSelect: {
3590
+ clearChecked: '清除',
3591
+ allChecked: '全选',
3592
+ allExpand: '全部展开',
3593
+ clearExpand: '全部收起',
3594
+ total: '已选 {0}',
3595
+ search: '搜索',
3578
3596
  emptyText: '暂无数据'
3579
3597
  },
3580
3598
  pager: {
@@ -4260,14 +4278,14 @@ function checkDynamic() {
4260
4278
  }
4261
4279
  ;// CONCATENATED MODULE: ./packages/ui/src/log.ts
4262
4280
 
4263
- const log_version = `ui v${"4.7.5"}`;
4281
+ const log_version = `ui v${"4.7.7"}`;
4264
4282
  const warnLog = log.create('warn', log_version);
4265
4283
  const errLog = log.create('error', log_version);
4266
4284
  ;// CONCATENATED MODULE: ./packages/ui/index.ts
4267
4285
 
4268
4286
 
4269
4287
 
4270
- const ui_version = "4.7.5";
4288
+ const ui_version = "4.7.7";
4271
4289
  index_esm_VxeUI.uiVersion = ui_version;
4272
4290
  index_esm_VxeUI.dynamicApp = dynamicApp;
4273
4291
  function config(options) {
@@ -4557,7 +4575,7 @@ setConfig({
4557
4575
  },
4558
4576
  virtualYConfig: {
4559
4577
  enabled: true,
4560
- gt: 100,
4578
+ gt: 50,
4561
4579
  oSize: 2
4562
4580
  }
4563
4581
  },
@@ -4614,16 +4632,32 @@ setConfig({
4614
4632
  isArrow: true
4615
4633
  },
4616
4634
  tree: {
4635
+ // autoResize: false,
4617
4636
  indent: 20,
4618
4637
  minHeight: 60,
4619
4638
  radioConfig: {
4620
4639
  strict: true
4640
+ },
4641
+ virtualYConfig: {
4642
+ enabled: true,
4643
+ gt: 50,
4644
+ oSize: 2
4621
4645
  }
4622
4646
  },
4623
4647
  treeSelect: {
4648
+ autoClose: true,
4649
+ virtualYConfig: {
4650
+ enabled: true,
4651
+ gt: 0,
4652
+ oSize: 2
4653
+ },
4624
4654
  treeConfig: {
4655
+ maxHeight: 300,
4625
4656
  radioConfig: {},
4626
- checkboxConfig: {}
4657
+ checkboxConfig: {},
4658
+ filterConfig: {
4659
+ autoExpandAll: true
4660
+ }
4627
4661
  }
4628
4662
  },
4629
4663
  upload: {
@@ -5106,6 +5140,15 @@ function getAbsolutePos(elem) {
5106
5140
  visibleWidth
5107
5141
  };
5108
5142
  }
5143
+ function getPaddingTopBottomSize(elem) {
5144
+ if (elem) {
5145
+ const computedStyle = getComputedStyle(elem);
5146
+ const paddingTop = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(computedStyle.paddingTop);
5147
+ const paddingBottom = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(computedStyle.paddingBottom);
5148
+ return paddingTop + paddingBottom;
5149
+ }
5150
+ return 0;
5151
+ }
5109
5152
  const scrollIntoViewIfNeeded = 'scrollIntoViewIfNeeded';
5110
5153
  const scrollIntoView = 'scrollIntoView';
5111
5154
  function scrollToView(elem) {
@@ -24998,7 +25041,7 @@ const Link = VxeLink;
24998
25041
  ref: refVirtualBody,
24999
25042
  class: 'vxe-list--body',
25000
25043
  style: {
25001
- marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
25044
+ transform: `translateY(${topSpaceHeight}px)`
25002
25045
  }
25003
25046
  }, defaultSlot ? defaultSlot({
25004
25047
  items,
@@ -28541,6 +28584,7 @@ const Option = VxeOption;
28541
28584
 
28542
28585
 
28543
28586
 
28587
+
28544
28588
  function isOptionVisible(option) {
28545
28589
  return option.visible !== false;
28546
28590
  }
@@ -28592,25 +28636,46 @@ function getOptUniqueId() {
28592
28636
  filterable: Boolean,
28593
28637
  filterMethod: Function,
28594
28638
  remote: Boolean,
28595
- // 已废弃,被 remote-config.queryMethod 替换
28596
- remoteMethod: Function,
28597
28639
  remoteConfig: Object,
28598
28640
  emptyText: String,
28641
+ showTotalButoon: {
28642
+ type: Boolean,
28643
+ default: () => getConfig().select.showTotalButoon
28644
+ },
28645
+ showCheckedButoon: {
28646
+ type: Boolean,
28647
+ default: () => getConfig().select.showCheckedButoon
28648
+ },
28649
+ showClearButton: {
28650
+ type: Boolean,
28651
+ default: () => getConfig().select.showClearButton
28652
+ },
28599
28653
  transfer: {
28600
28654
  type: Boolean,
28601
28655
  default: null
28602
28656
  },
28603
28657
  virtualYConfig: Object,
28604
28658
  scrollY: Object,
28605
- // 已废弃,被 option-config.keyField 替换
28659
+ /**
28660
+ * 已废弃,被 remote-config.queryMethod 替换
28661
+ * @deprecated
28662
+ */
28663
+ remoteMethod: Function,
28664
+ /**
28665
+ * 已废弃,被 option-config.keyField 替换
28666
+ * @deprecated
28667
+ */
28606
28668
  optionId: {
28607
28669
  type: String,
28608
28670
  default: () => getConfig().select.optionId
28609
28671
  },
28610
- // 已废弃,被 option-config.useKey 替换
28672
+ /**
28673
+ * 已废弃,被 option-config.useKey 替换
28674
+ * @deprecated
28675
+ */
28611
28676
  optionKey: Boolean
28612
28677
  },
28613
- emits: ['update:modelValue', 'change', 'clear', 'blur', 'focus', 'click', 'scroll', 'visible-change'],
28678
+ emits: ['update:modelValue', 'change', 'all-change', 'clear', 'blur', 'focus', 'click', 'scroll', 'visible-change'],
28614
28679
  setup(props, context) {
28615
28680
  const {
28616
28681
  slots,
@@ -28637,7 +28702,6 @@ function getOptUniqueId() {
28637
28702
  bodyHeight: 0,
28638
28703
  topSpaceHeight: 0,
28639
28704
  optList: [],
28640
- afterVisibleList: [],
28641
28705
  staticOptions: [],
28642
28706
  reactFlag: 0,
28643
28707
  currentOption: null,
@@ -28654,6 +28718,7 @@ function getOptUniqueId() {
28654
28718
  const internalData = {
28655
28719
  synchData: [],
28656
28720
  fullData: [],
28721
+ afterVisibleList: [],
28657
28722
  optAddMaps: {},
28658
28723
  optGroupKeyMaps: {},
28659
28724
  optFullValMaps: {},
@@ -28760,16 +28825,11 @@ function getOptUniqueId() {
28760
28825
  });
28761
28826
  const computeIsMaximize = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
28762
28827
  const {
28763
- modelValue,
28764
- multiple,
28765
- max
28828
+ modelValue
28766
28829
  } = props;
28767
- if (multiple && max) {
28768
- return (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(modelValue) ? modelValue.length : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(modelValue) ? 0 : 1) >= external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(max);
28769
- }
28770
- return false;
28830
+ return checkMaxLimit(modelValue);
28771
28831
  });
28772
- const computeSYOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
28832
+ const computeVirtualYOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
28773
28833
  return Object.assign({}, getConfig().select.virtualYConfig || getConfig().select.scrollY, props.virtualYConfig || props.scrollY);
28774
28834
  });
28775
28835
  const computeRemoteOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
@@ -28833,6 +28893,16 @@ function getOptUniqueId() {
28833
28893
  const optid = option[getOptKey()];
28834
28894
  return optid ? encodeURIComponent(optid) : '';
28835
28895
  };
28896
+ const checkMaxLimit = selectVals => {
28897
+ const {
28898
+ multiple,
28899
+ max
28900
+ } = props;
28901
+ if (multiple && max) {
28902
+ return (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(selectVals) ? selectVals.length : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(selectVals) ? 0 : 1) >= external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(max);
28903
+ }
28904
+ return false;
28905
+ };
28836
28906
  const getRemoteSelectLabel = value => {
28837
28907
  const {
28838
28908
  remoteValMaps,
@@ -28923,7 +28993,7 @@ function getOptUniqueId() {
28923
28993
  cacheItem._index = index;
28924
28994
  }
28925
28995
  });
28926
- reactData.afterVisibleList = avList;
28996
+ internalData.afterVisibleList = avList;
28927
28997
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
28928
28998
  };
28929
28999
  const setCurrentOption = option => {
@@ -28984,7 +29054,7 @@ function getOptUniqueId() {
28984
29054
  reactData.isAniVisible = true;
28985
29055
  if (filterable) {
28986
29056
  if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !fullData.length) {
28987
- triggerSearchEvent();
29057
+ handleSearchEvent();
28988
29058
  } else {
28989
29059
  handleOption();
28990
29060
  updateYData();
@@ -29042,6 +29112,52 @@ function getOptUniqueId() {
29042
29112
  clearValueEvent($event, null);
29043
29113
  hideOptionPanel();
29044
29114
  };
29115
+ const allCheckedPanelEvent = params => {
29116
+ const {
29117
+ $event
29118
+ } = params;
29119
+ const {
29120
+ modelValue,
29121
+ multiple,
29122
+ max
29123
+ } = props;
29124
+ const {
29125
+ optList
29126
+ } = reactData;
29127
+ const valueField = computeValueField.value;
29128
+ if (multiple) {
29129
+ const multipleValue = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(modelValue) ? [] : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(modelValue) ? modelValue : [modelValue];
29130
+ for (let i = 0; i < optList.length; i++) {
29131
+ const option = optList[i];
29132
+ const selectValue = option[valueField];
29133
+ // 检测是否超过最大可选数量
29134
+ if (checkMaxLimit(multipleValue)) {
29135
+ if (index_esm_VxeUI) {
29136
+ index_esm_VxeUI.modal.message({
29137
+ content: getI18n('vxe.select.overSizeErr', [max]),
29138
+ status: 'warning'
29139
+ });
29140
+ }
29141
+ break;
29142
+ }
29143
+ if (!multipleValue.some(val => val === selectValue)) {
29144
+ multipleValue.push(selectValue);
29145
+ }
29146
+ }
29147
+ changeEvent($event, multipleValue);
29148
+ dispatchEvent('all-change', {
29149
+ value: multipleValue
29150
+ }, $event);
29151
+ hideOptionPanel();
29152
+ }
29153
+ };
29154
+ const clearCheckedPanelEvent = params => {
29155
+ const {
29156
+ $event
29157
+ } = params;
29158
+ clearValueEvent($event, null);
29159
+ hideOptionPanel();
29160
+ };
29045
29161
  const changeOptionEvent = (evnt, option) => {
29046
29162
  const {
29047
29163
  modelValue,
@@ -29124,12 +29240,12 @@ function getOptUniqueId() {
29124
29240
  allowCreate
29125
29241
  } = props;
29126
29242
  const {
29127
- afterVisibleList,
29128
29243
  optList
29129
29244
  } = reactData;
29130
29245
  const {
29131
29246
  optFullValMaps,
29132
- optAddMaps
29247
+ optAddMaps,
29248
+ afterVisibleList
29133
29249
  } = internalData;
29134
29250
  const valueField = computeValueField.value;
29135
29251
  let fullList = afterVisibleList;
@@ -29342,13 +29458,10 @@ function getOptUniqueId() {
29342
29458
  }
29343
29459
  }
29344
29460
  };
29345
- const checkOptionDisabled = (isSelected, option, group) => {
29461
+ const checkOptionDisabled = (isSelected, option) => {
29346
29462
  if (option.disabled) {
29347
29463
  return true;
29348
29464
  }
29349
- if (group && group.disabled) {
29350
- return true;
29351
- }
29352
29465
  const isMaximize = computeIsMaximize.value;
29353
29466
  if (isMaximize && !isSelected) {
29354
29467
  return true;
@@ -29357,11 +29470,11 @@ function getOptUniqueId() {
29357
29470
  };
29358
29471
  const updateYSpace = () => {
29359
29472
  const {
29360
- scrollYLoad,
29361
- afterVisibleList
29473
+ scrollYLoad
29362
29474
  } = reactData;
29363
29475
  const {
29364
- scrollYStore
29476
+ scrollYStore,
29477
+ afterVisibleList
29365
29478
  } = internalData;
29366
29479
  reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0;
29367
29480
  reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0;
@@ -29373,12 +29486,12 @@ function getOptUniqueId() {
29373
29486
  } = props;
29374
29487
  const {
29375
29488
  scrollYLoad,
29376
- afterVisibleList,
29377
29489
  searchValue
29378
29490
  } = reactData;
29379
29491
  const {
29380
29492
  optAddMaps,
29381
- scrollYStore
29493
+ scrollYStore,
29494
+ afterVisibleList
29382
29495
  } = internalData;
29383
29496
  const labelField = computeLabelField.value;
29384
29497
  const valueField = computeValueField.value;
@@ -29410,13 +29523,10 @@ function getOptUniqueId() {
29410
29523
  scrollYStore
29411
29524
  } = internalData;
29412
29525
  const virtualBodyElem = refVirtualBody.value;
29413
- const sYOpts = computeSYOpts.value;
29526
+ const virtualYOpts = computeVirtualYOpts.value;
29414
29527
  let rowHeight = 0;
29415
29528
  let firstItemElem;
29416
29529
  if (virtualBodyElem) {
29417
- if (sYOpts.sItem) {
29418
- firstItemElem = virtualBodyElem.querySelector(sYOpts.sItem);
29419
- }
29420
29530
  if (!firstItemElem) {
29421
29531
  firstItemElem = virtualBodyElem.children[0];
29422
29532
  }
@@ -29430,7 +29540,7 @@ function getOptUniqueId() {
29430
29540
  if (scrollYLoad) {
29431
29541
  const scrollBodyElem = refVirtualWrapper.value;
29432
29542
  const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0);
29433
- const offsetYSize = Math.max(0, Math.min(2, external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(sYOpts.oSize)));
29543
+ const offsetYSize = Math.max(0, Math.min(2, external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(virtualYOpts.oSize)));
29434
29544
  scrollYStore.offsetSize = offsetYSize;
29435
29545
  scrollYStore.visibleSize = visibleYSize;
29436
29546
  scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex);
@@ -29456,6 +29566,9 @@ function getOptUniqueId() {
29456
29566
  if (avIndex > -1) {
29457
29567
  const optWrapperElem = refVirtualWrapper.value;
29458
29568
  const panelElem = refOptionPanel.value;
29569
+ if (!panelElem) {
29570
+ return;
29571
+ }
29459
29572
  const optElem = panelElem.querySelector(`[optid='${optid}']`);
29460
29573
  if (optWrapperElem) {
29461
29574
  if (optElem) {
@@ -29600,7 +29713,7 @@ function getOptUniqueId() {
29600
29713
  scrollYStore
29601
29714
  } = internalData;
29602
29715
  const defaultOpts = computeDefaultOpts.value;
29603
- const sYOpts = computeSYOpts.value;
29716
+ const virtualYOpts = computeVirtualYOpts.value;
29604
29717
  const valueField = computeValueField.value;
29605
29718
  Object.assign(scrollYStore, {
29606
29719
  startIndex: 0,
@@ -29609,7 +29722,7 @@ function getOptUniqueId() {
29609
29722
  });
29610
29723
  internalData.synchData = datas || [];
29611
29724
  // 如果gt为0,则总是启用
29612
- reactData.scrollYLoad = !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt <= fullData.length);
29725
+ reactData.scrollYLoad = !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt <= fullData.length);
29613
29726
  handleData();
29614
29727
  if (!isLoaded) {
29615
29728
  const {
@@ -29687,13 +29800,17 @@ function getOptUniqueId() {
29687
29800
  },
29688
29801
  focus() {
29689
29802
  const $input = refInput.value;
29803
+ if ($input) {
29804
+ $input.blur();
29805
+ }
29690
29806
  reactData.isActivated = true;
29691
- $input.blur();
29692
29807
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
29693
29808
  },
29694
29809
  blur() {
29695
29810
  const $input = refInput.value;
29696
- $input.blur();
29811
+ if ($input) {
29812
+ $input.blur();
29813
+ }
29697
29814
  reactData.isActivated = false;
29698
29815
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
29699
29816
  },
@@ -29701,7 +29818,7 @@ function getOptUniqueId() {
29701
29818
  clearScroll
29702
29819
  };
29703
29820
  Object.assign($xeSelect, selectMethods);
29704
- const renderOption = (list, group) => {
29821
+ const renderOption = list => {
29705
29822
  const {
29706
29823
  allowCreate,
29707
29824
  optionKey,
@@ -29732,11 +29849,11 @@ function getOptUniqueId() {
29732
29849
  const isAdd = !!(allowCreate && optAddMaps[optid]);
29733
29850
  const isSelected = !isAdd && (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(modelValue) ? modelValue.indexOf(optionValue) > -1 : modelValue === optionValue);
29734
29851
  const isVisible = isAdd || !isOptGroup || isOptionVisible(option);
29735
- const isDisabled = !isAdd && checkOptionDisabled(isSelected, option, group);
29852
+ const isDisabled = !isAdd && checkOptionDisabled(isSelected, option);
29736
29853
  const defaultSlot = slots ? slots.default : null;
29737
29854
  const optParams = {
29738
29855
  option,
29739
- group: null,
29856
+ group: isOptGroup ? option : null,
29740
29857
  $select: $xeSelect
29741
29858
  };
29742
29859
  let optLabel = '';
@@ -29810,15 +29927,21 @@ function getOptUniqueId() {
29810
29927
  };
29811
29928
  const renderVN = () => {
29812
29929
  const {
29930
+ modelValue,
29813
29931
  className,
29814
29932
  popupClassName,
29933
+ multiple,
29815
29934
  loading,
29816
- filterable
29935
+ filterable,
29936
+ showTotalButoon,
29937
+ showCheckedButoon,
29938
+ showClearButton
29817
29939
  } = props;
29818
29940
  const {
29819
29941
  initialized,
29820
29942
  isActivated,
29821
29943
  isAniVisible,
29944
+ optList,
29822
29945
  visiblePanel,
29823
29946
  bodyHeight,
29824
29947
  topSpaceHeight
@@ -29844,6 +29967,7 @@ function getOptUniqueId() {
29844
29967
  class: 'vxe-select-label'
29845
29968
  }, selectLabel)]);
29846
29969
  }
29970
+ const selectVals = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(modelValue) ? [] : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(modelValue) ? modelValue : [modelValue];
29847
29971
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
29848
29972
  ref: refElem,
29849
29973
  class: ['vxe-select', className ? external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(className) ? className({
@@ -29910,9 +30034,23 @@ function getOptUniqueId() {
29910
30034
  onFocus: focusSearchEvent,
29911
30035
  onChange: triggerSearchEvent,
29912
30036
  onSearch: triggerSearchEvent
29913
- })]) : renderEmptyElement($xeSelect), headerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
30037
+ })]) : renderEmptyElement($xeSelect), showTotalButoon || showCheckedButoon && multiple || showClearButton || headerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
29914
30038
  class: 'vxe-select--panel-header'
29915
- }, headerSlot({})) : renderEmptyElement($xeSelect), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
30039
+ }, headerSlot ? callSlot(headerSlot, {}) : [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
30040
+ class: 'vxe-select--header-button'
30041
+ }, [showTotalButoon ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
30042
+ class: 'vxe-select--header-total'
30043
+ }, getI18n('vxe.select.total', [selectVals.length, optList.length])) : renderEmptyElement($xeSelect), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
30044
+ class: 'vxe-select--header-btns'
30045
+ }, [showCheckedButoon && multiple ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(src_button, {
30046
+ content: getI18n('vxe.select.allChecked'),
30047
+ mode: 'text',
30048
+ onClick: allCheckedPanelEvent
30049
+ }) : renderEmptyElement($xeSelect), showClearButton ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(src_button, {
30050
+ content: getI18n('vxe.select.clear'),
30051
+ mode: 'text',
30052
+ onClick: clearCheckedPanelEvent
30053
+ }) : renderEmptyElement($xeSelect)])])]) : renderEmptyElement($xeSelect), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
29916
30054
  class: 'vxe-select--panel-body'
29917
30055
  }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
29918
30056
  ref: refVirtualWrapper,
@@ -29927,11 +30065,11 @@ function getOptUniqueId() {
29927
30065
  ref: refVirtualBody,
29928
30066
  class: 'vxe-select--body',
29929
30067
  style: {
29930
- marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
30068
+ transform: `translateY(${topSpaceHeight}px)`
29931
30069
  }
29932
30070
  }, renderOpts())])]), footerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
29933
30071
  class: 'vxe-select--panel-footer'
29934
- }, footerSlot({})) : renderEmptyElement($xeSelect)])] : [])])]);
30072
+ }, callSlot(footerSlot, {})) : renderEmptyElement($xeSelect)])] : [])])]);
29935
30073
  };
29936
30074
  (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(() => reactData.staticOptions, val => {
29937
30075
  loadData(val);
@@ -37175,6 +37313,52 @@ dynamicApp.use(VxeTooltip);
37175
37313
  index_esm_VxeUI.component(tooltip);
37176
37314
  const Tooltip = VxeTooltip;
37177
37315
  /* harmony default export */ var packages_tooltip = (VxeTooltip);
37316
+ ;// CONCATENATED MODULE: ./packages/tree/src/util.ts
37317
+ function countTreeExpand($xeTree, prevNode) {
37318
+ let count = 1;
37319
+ if (!prevNode) {
37320
+ return count;
37321
+ }
37322
+ const props = $xeTree.props;
37323
+ const {
37324
+ transform
37325
+ } = props;
37326
+ const reactData = $xeTree.reactData;
37327
+ const {
37328
+ updateExpandedFlag
37329
+ } = reactData;
37330
+ const internalData = $xeTree.internalData;
37331
+ const {
37332
+ treeExpandedMaps
37333
+ } = internalData;
37334
+ const {
37335
+ computeChildrenField,
37336
+ computeMapChildrenField
37337
+ } = $xeTree.getComputeMaps();
37338
+ const childrenField = computeChildrenField.value;
37339
+ const mapChildrenField = computeMapChildrenField.value;
37340
+ const nodeChildren = prevNode[transform ? mapChildrenField : childrenField];
37341
+ if (nodeChildren && updateExpandedFlag && treeExpandedMaps[$xeTree.getNodeId(prevNode)]) {
37342
+ for (let index = 0; index < nodeChildren.length; index++) {
37343
+ count += countTreeExpand($xeTree, nodeChildren[index]);
37344
+ }
37345
+ }
37346
+ return count;
37347
+ }
37348
+ function calcTreeLine($xeTree, node, prevNode) {
37349
+ const internalData = $xeTree.internalData;
37350
+ const {
37351
+ scrollYStore
37352
+ } = internalData;
37353
+ const {
37354
+ rowHeight
37355
+ } = scrollYStore;
37356
+ let expandSize = 1;
37357
+ if (prevNode) {
37358
+ expandSize = countTreeExpand($xeTree, prevNode);
37359
+ }
37360
+ return (rowHeight || 28) * expandSize - (prevNode ? 1 : 12);
37361
+ }
37178
37362
  ;// CONCATENATED MODULE: ./packages/tree/src/tree.ts
37179
37363
 
37180
37364
 
@@ -37184,6 +37368,8 @@ const Tooltip = VxeTooltip;
37184
37368
 
37185
37369
 
37186
37370
 
37371
+
37372
+
37187
37373
  /**
37188
37374
  * 生成节点的唯一主键
37189
37375
  */
@@ -37194,7 +37380,15 @@ function getNodeUniqueId() {
37194
37380
  name: 'VxeTree',
37195
37381
  props: {
37196
37382
  data: Array,
37383
+ autoResize: {
37384
+ type: Boolean,
37385
+ default: () => getConfig().tree.autoResize
37386
+ },
37197
37387
  height: [String, Number],
37388
+ maxHeight: {
37389
+ type: [String, Number],
37390
+ default: () => getConfig().tree.maxHeight
37391
+ },
37198
37392
  minHeight: {
37199
37393
  type: [String, Number],
37200
37394
  default: () => getConfig().tree.minHeight
@@ -37286,12 +37480,15 @@ function getNodeUniqueId() {
37286
37480
  type: String,
37287
37481
  default: () => getConfig().tree.iconLoaded
37288
37482
  },
37483
+ filterValue: [String, Number],
37484
+ filterConfig: Object,
37289
37485
  size: {
37290
37486
  type: String,
37291
37487
  default: () => getConfig().tree.size || getConfig().size
37292
- }
37488
+ },
37489
+ virtualYConfig: Object
37293
37490
  },
37294
- emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error'],
37491
+ emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error', 'scroll'],
37295
37492
  setup(props, context) {
37296
37493
  const {
37297
37494
  emit,
@@ -37302,8 +37499,19 @@ function getNodeUniqueId() {
37302
37499
  computeSize
37303
37500
  } = useSize(props);
37304
37501
  const refElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
37502
+ const refHeaderWrapperElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
37503
+ const refFooterWrapperElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
37504
+ const refVirtualWrapper = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
37505
+ const refVirtualBody = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
37305
37506
  const reactData = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.reactive)({
37507
+ parentHeight: 0,
37508
+ customHeight: 0,
37509
+ customMinHeight: 0,
37510
+ customMaxHeight: 0,
37306
37511
  currentNode: null,
37512
+ scrollYLoad: false,
37513
+ bodyHeight: 0,
37514
+ topSpaceHeight: 0,
37307
37515
  selectRadioKey: props.checkNodeKey,
37308
37516
  treeList: [],
37309
37517
  updateExpandedFlag: 1,
@@ -37311,11 +37519,26 @@ function getNodeUniqueId() {
37311
37519
  });
37312
37520
  const internalData = {
37313
37521
  // initialized: false,
37522
+ // lastFilterValue: '',
37523
+ treeFullData: [],
37524
+ afterTreeList: [],
37525
+ afterVisibleList: [],
37314
37526
  nodeMaps: {},
37315
37527
  selectCheckboxMaps: {},
37316
37528
  indeterminateRowMaps: {},
37317
37529
  treeExpandedMaps: {},
37318
- treeExpandLazyLoadedMaps: {}
37530
+ treeExpandLazyLoadedMaps: {},
37531
+ lastScrollLeft: 0,
37532
+ lastScrollTop: 0,
37533
+ scrollYStore: {
37534
+ startIndex: 0,
37535
+ endIndex: 0,
37536
+ visibleSize: 0,
37537
+ offsetSize: 0,
37538
+ rowHeight: 0
37539
+ },
37540
+ lastScrollTime: 0
37541
+ // hpTimeout: undefined
37319
37542
  };
37320
37543
  const refMaps = {
37321
37544
  refElem
@@ -37342,6 +37565,9 @@ function getNodeUniqueId() {
37342
37565
  const computeHasChildField = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
37343
37566
  return props.hasChildField || 'hasChild';
37344
37567
  });
37568
+ const computeVirtualYOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
37569
+ return Object.assign({}, getConfig().tree.virtualYConfig, props.virtualYConfig);
37570
+ });
37345
37571
  const computeIsRowCurrent = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
37346
37572
  const nodeOpts = computeNodeOpts.value;
37347
37573
  const {
@@ -37380,19 +37606,28 @@ function getNodeUniqueId() {
37380
37606
  });
37381
37607
  const computeTreeStyle = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
37382
37608
  const {
37383
- height,
37384
- minHeight
37385
- } = props;
37609
+ customHeight,
37610
+ customMinHeight,
37611
+ customMaxHeight
37612
+ } = reactData;
37386
37613
  const stys = {};
37387
- if (height) {
37388
- stys.height = toCssUnit(height);
37614
+ if (customHeight) {
37615
+ stys.height = toCssUnit(customHeight);
37389
37616
  }
37390
- if (minHeight) {
37391
- stys.minHeight = toCssUnit(minHeight);
37617
+ if (customMinHeight) {
37618
+ stys.minHeight = toCssUnit(customMinHeight);
37619
+ }
37620
+ if (customMaxHeight) {
37621
+ stys.maxHeight = toCssUnit(customMaxHeight);
37392
37622
  }
37393
37623
  return stys;
37394
37624
  });
37625
+ const computeFilterOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
37626
+ return Object.assign({}, getConfig().tree.filterConfig, props.filterConfig);
37627
+ });
37395
37628
  const computeMaps = {
37629
+ computeChildrenField,
37630
+ computeMapChildrenField,
37396
37631
  computeRadioOpts,
37397
37632
  computeCheckboxOpts,
37398
37633
  computeNodeOpts
@@ -37548,6 +37783,39 @@ function getNodeUniqueId() {
37548
37783
  $tree: $xeTree
37549
37784
  }, params));
37550
37785
  };
37786
+ const getParentElem = () => {
37787
+ const el = refElem.value;
37788
+ return el ? el.parentElement : null;
37789
+ };
37790
+ const calcTableHeight = key => {
37791
+ const {
37792
+ parentHeight
37793
+ } = reactData;
37794
+ const val = props[key];
37795
+ let num = 0;
37796
+ if (val) {
37797
+ if (val === '100%' || val === 'auto') {
37798
+ num = parentHeight;
37799
+ } else {
37800
+ if (isScale(val)) {
37801
+ num = Math.floor((external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toInteger(val) || 1) / 100 * parentHeight);
37802
+ } else {
37803
+ num = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(val);
37804
+ }
37805
+ num = Math.max(40, num);
37806
+ }
37807
+ }
37808
+ return num;
37809
+ };
37810
+ const updateHeight = () => {
37811
+ reactData.customHeight = calcTableHeight('height');
37812
+ reactData.customMinHeight = calcTableHeight('minHeight');
37813
+ reactData.customMaxHeight = calcTableHeight('maxHeight');
37814
+ // 如果启用虚拟滚动,默认高度
37815
+ if (reactData.scrollYLoad && !(reactData.customHeight || reactData.customMinHeight)) {
37816
+ reactData.customHeight = 300;
37817
+ }
37818
+ };
37551
37819
  const createNode = records => {
37552
37820
  const valueField = computeValueField.value;
37553
37821
  return Promise.resolve(records.map(obj => {
@@ -37562,428 +37830,454 @@ function getNodeUniqueId() {
37562
37830
  return item;
37563
37831
  }));
37564
37832
  };
37565
- const treeMethods = {
37566
- dispatchEvent,
37567
- clearCurrentNode() {
37568
- reactData.currentNode = null;
37569
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37570
- },
37571
- getCurrentNodeId() {
37572
- const {
37573
- currentNode
37574
- } = reactData;
37575
- if (currentNode) {
37576
- return getNodeId(currentNode);
37833
+ const cacheNodeMap = () => {
37834
+ const {
37835
+ treeFullData
37836
+ } = internalData;
37837
+ const valueField = computeValueField.value;
37838
+ const childrenField = computeChildrenField.value;
37839
+ const keyMaps = {};
37840
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(treeFullData, (item, index, items, path, parent, nodes) => {
37841
+ let nodeid = getNodeId(item);
37842
+ if (!nodeid) {
37843
+ nodeid = getNodeUniqueId();
37844
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(item, valueField, nodeid);
37577
37845
  }
37578
- return null;
37579
- },
37580
- getCurrentNode() {
37581
- const {
37582
- currentNode
37583
- } = reactData;
37584
- const {
37585
- nodeMaps
37586
- } = internalData;
37587
- if (currentNode) {
37588
- const nodeItem = nodeMaps[getNodeId(currentNode)];
37589
- if (nodeItem) {
37590
- return nodeItem.item;
37591
- }
37846
+ keyMaps[nodeid] = {
37847
+ item,
37848
+ index,
37849
+ items,
37850
+ parent,
37851
+ nodes,
37852
+ level: nodes.length,
37853
+ treeIndex: index,
37854
+ lineCount: 0,
37855
+ treeLoaded: false
37856
+ };
37857
+ }, {
37858
+ children: childrenField
37859
+ });
37860
+ internalData.nodeMaps = keyMaps;
37861
+ };
37862
+ const updateAfterDataIndex = () => {
37863
+ const {
37864
+ transform
37865
+ } = props;
37866
+ const {
37867
+ afterTreeList,
37868
+ nodeMaps
37869
+ } = internalData;
37870
+ const childrenField = computeChildrenField.value;
37871
+ const mapChildrenField = computeMapChildrenField.value;
37872
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterTreeList, (item, index, items) => {
37873
+ const nodeid = getNodeId(item);
37874
+ const nodeItem = nodeMaps[nodeid];
37875
+ if (nodeItem) {
37876
+ nodeItem.items = items;
37877
+ nodeItem.treeIndex = index;
37878
+ } else {
37879
+ const rest = {
37880
+ item,
37881
+ index,
37882
+ items,
37883
+ parent,
37884
+ nodes: [],
37885
+ level: 0,
37886
+ treeIndex: index,
37887
+ lineCount: 0,
37888
+ treeLoaded: false
37889
+ };
37890
+ nodeMaps[nodeid] = rest;
37592
37891
  }
37593
- return null;
37594
- },
37595
- setCurrentNodeId(nodeKey) {
37596
- const {
37597
- nodeMaps
37598
- } = internalData;
37599
- const nodeItem = nodeMaps[nodeKey];
37600
- reactData.currentNode = nodeItem ? nodeItem.item : null;
37601
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37602
- },
37603
- setCurrentNode(node) {
37604
- reactData.currentNode = node;
37605
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37606
- },
37607
- clearRadioNode() {
37608
- reactData.selectRadioKey = null;
37609
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37610
- },
37611
- getRadioNodeId() {
37612
- return reactData.selectRadioKey || null;
37613
- },
37614
- getRadioNode() {
37615
- const {
37616
- selectRadioKey
37617
- } = reactData;
37618
- const {
37619
- nodeMaps
37620
- } = internalData;
37621
- if (selectRadioKey) {
37622
- const nodeItem = nodeMaps[selectRadioKey];
37623
- if (nodeItem) {
37624
- return nodeItem.item;
37625
- }
37892
+ }, {
37893
+ children: transform ? mapChildrenField : childrenField
37894
+ });
37895
+ };
37896
+ const updateAfterFullData = () => {
37897
+ const {
37898
+ transform,
37899
+ filterValue
37900
+ } = props;
37901
+ const {
37902
+ treeFullData,
37903
+ lastFilterValue
37904
+ } = internalData;
37905
+ const titleField = computeTitleField.value;
37906
+ const childrenField = computeChildrenField.value;
37907
+ const mapChildrenField = computeMapChildrenField.value;
37908
+ const filterOpts = computeFilterOpts.value;
37909
+ const {
37910
+ autoExpandAll,
37911
+ beforeFilterMethod,
37912
+ filterMethod,
37913
+ afterFilterMethod
37914
+ } = filterOpts;
37915
+ let fullList = treeFullData;
37916
+ let treeList = fullList;
37917
+ let filterStr = '';
37918
+ if (filterValue || filterValue === 0) {
37919
+ filterStr = `${filterValue}`;
37920
+ const handleSearch = filterMethod ? item => {
37921
+ return filterMethod({
37922
+ $tree: $xeTree,
37923
+ node: item,
37924
+ filterValue: filterStr
37925
+ });
37926
+ } : item => {
37927
+ return String(item[titleField]).toLowerCase().indexOf(filterStr) > -1;
37928
+ };
37929
+ const bafParams = {
37930
+ $tree: $xeTree,
37931
+ filterValue: filterStr
37932
+ };
37933
+ if (beforeFilterMethod) {
37934
+ beforeFilterMethod(bafParams);
37935
+ }
37936
+ if (transform) {
37937
+ treeList = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().searchTree(treeFullData, handleSearch, {
37938
+ children: childrenField,
37939
+ mapChildren: mapChildrenField,
37940
+ isEvery: true
37941
+ });
37942
+ fullList = treeList;
37943
+ } else {
37944
+ fullList = treeFullData.filter(handleSearch);
37626
37945
  }
37627
- return null;
37628
- },
37629
- setRadioNodeId(nodeKey) {
37630
- reactData.selectRadioKey = nodeKey;
37631
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37632
- },
37633
- setRadioNode,
37634
- setCheckboxNode,
37635
- setCheckboxByNodeId,
37636
- getCheckboxNodeIds() {
37637
- const {
37638
- selectCheckboxMaps
37639
- } = internalData;
37640
- return Object.keys(selectCheckboxMaps);
37641
- },
37642
- getCheckboxNodes() {
37643
- const {
37644
- nodeMaps,
37645
- selectCheckboxMaps
37646
- } = internalData;
37647
- const list = [];
37648
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(selectCheckboxMaps, (item, nodeid) => {
37649
- const nodeItem = nodeMaps[nodeid];
37650
- if (nodeItem) {
37651
- list.push(nodeItem.item);
37946
+ internalData.lastFilterValue = filterStr;
37947
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)(() => {
37948
+ // 筛选时自动展开
37949
+ if (autoExpandAll) {
37950
+ $xeTree.setAllExpandNode(true).then(() => {
37951
+ if (afterFilterMethod) {
37952
+ afterFilterMethod(bafParams);
37953
+ }
37954
+ });
37955
+ } else {
37956
+ if (afterFilterMethod) {
37957
+ afterFilterMethod(bafParams);
37958
+ }
37652
37959
  }
37653
37960
  });
37654
- return list;
37655
- },
37656
- clearCheckboxNode() {
37657
- internalData.selectCheckboxMaps = {};
37658
- reactData.updateCheckboxFlag++;
37659
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37660
- },
37661
- setAllCheckboxNode(checked) {
37662
- const {
37663
- transform
37664
- } = props;
37665
- const selectMaps = {};
37666
- const childrenField = computeChildrenField.value;
37667
- const mapChildrenField = computeMapChildrenField.value;
37668
- if (checked) {
37669
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(reactData.treeList, node => {
37670
- const nodeid = getNodeId(node);
37671
- selectMaps[nodeid] = true;
37672
- }, {
37673
- children: transform ? mapChildrenField : childrenField
37961
+ } else {
37962
+ if (transform) {
37963
+ treeList = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().searchTree(treeFullData, () => true, {
37964
+ children: childrenField,
37965
+ mapChildren: mapChildrenField,
37966
+ isEvery: true
37674
37967
  });
37968
+ fullList = treeList;
37969
+ if (lastFilterValue) {
37970
+ const bafParams = {
37971
+ $tree: $xeTree,
37972
+ filterValue: filterStr
37973
+ };
37974
+ if (beforeFilterMethod) {
37975
+ beforeFilterMethod(bafParams);
37976
+ }
37977
+ // 取消筛选时自动收起
37978
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)(() => {
37979
+ if (autoExpandAll) {
37980
+ $xeTree.clearAllExpandNode().then(() => {
37981
+ if (afterFilterMethod) {
37982
+ afterFilterMethod(bafParams);
37983
+ }
37984
+ });
37985
+ } else {
37986
+ if (afterFilterMethod) {
37987
+ afterFilterMethod(bafParams);
37988
+ }
37989
+ }
37990
+ });
37991
+ }
37675
37992
  }
37676
- internalData.selectCheckboxMaps = selectMaps;
37677
- reactData.updateCheckboxFlag++;
37678
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37679
- },
37680
- clearExpandNode() {
37681
- return treeMethods.clearAllExpandNode();
37682
- },
37683
- clearAllExpandNode() {
37684
- const {
37685
- nodeMaps
37686
- } = internalData;
37687
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(nodeMaps, nodeItem => {
37688
- nodeItem.treeLoaded = false;
37993
+ internalData.lastFilterValue = '';
37994
+ }
37995
+ internalData.afterVisibleList = fullList;
37996
+ internalData.afterTreeList = treeList;
37997
+ updateAfterDataIndex();
37998
+ };
37999
+ /**
38000
+ * 如果为虚拟树、则将树结构拍平
38001
+ */
38002
+ const handleTreeToList = () => {
38003
+ const {
38004
+ transform
38005
+ } = props;
38006
+ const {
38007
+ afterTreeList,
38008
+ treeExpandedMaps
38009
+ } = internalData;
38010
+ const mapChildrenField = computeMapChildrenField.value;
38011
+ const expandMaps = {};
38012
+ if (transform) {
38013
+ const fullData = [];
38014
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterTreeList, (item, index, items, path, parentRow) => {
38015
+ const nodeid = getNodeId(item);
38016
+ const parentNodeid = getNodeId(parentRow);
38017
+ if (!parentRow || expandMaps[parentNodeid] && treeExpandedMaps[parentNodeid]) {
38018
+ expandMaps[nodeid] = 1;
38019
+ fullData.push(item);
38020
+ }
38021
+ }, {
38022
+ children: mapChildrenField
37689
38023
  });
37690
- internalData.treeExpandedMaps = {};
37691
- reactData.updateExpandedFlag++;
37692
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37693
- },
37694
- setExpandByNodeId(nodeids, expanded) {
37695
- const {
37696
- treeExpandedMaps
37697
- } = internalData;
37698
- if (nodeids) {
37699
- if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(nodeids)) {
37700
- nodeids = [nodeids];
38024
+ updateScrollYStatus(fullData);
38025
+ internalData.afterVisibleList = fullData;
38026
+ return fullData;
38027
+ }
38028
+ return internalData.afterVisibleList;
38029
+ };
38030
+ const handleData = force => {
38031
+ const {
38032
+ scrollYLoad
38033
+ } = reactData;
38034
+ const {
38035
+ scrollYStore
38036
+ } = internalData;
38037
+ let fullList = internalData.afterVisibleList;
38038
+ if (force) {
38039
+ // 更新数据,处理筛选和排序
38040
+ updateAfterFullData();
38041
+ // 如果为虚拟树,将树结构拍平
38042
+ fullList = handleTreeToList();
38043
+ }
38044
+ const treeList = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
38045
+ reactData.treeList = treeList;
38046
+ };
38047
+ const triggerSearchEvent = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().debounce(() => handleData(true), 350, {
38048
+ trailing: true
38049
+ });
38050
+ const loadData = list => {
38051
+ const {
38052
+ expandAll,
38053
+ transform
38054
+ } = props;
38055
+ const {
38056
+ initialized,
38057
+ scrollYStore
38058
+ } = internalData;
38059
+ const keyField = computeKeyField.value;
38060
+ const parentField = computeParentField.value;
38061
+ const childrenField = computeChildrenField.value;
38062
+ const fullData = transform ? external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toArrayTree(list, {
38063
+ key: keyField,
38064
+ parentKey: parentField,
38065
+ mapChildren: childrenField
38066
+ }) : list ? list.slice(0) : [];
38067
+ internalData.treeFullData = fullData;
38068
+ Object.assign(scrollYStore, {
38069
+ startIndex: 0,
38070
+ endIndex: 1,
38071
+ visibleSize: 0
38072
+ });
38073
+ const sYLoad = updateScrollYStatus(fullData);
38074
+ cacheNodeMap();
38075
+ handleData(true);
38076
+ if (sYLoad) {
38077
+ if (!(props.height || props.maxHeight)) {
38078
+ errLog('vxe.error.reqProp', ['height | max-height | virtual-y-config.enabled=false']);
38079
+ }
38080
+ }
38081
+ return computeScrollLoad().then(() => {
38082
+ if (!initialized) {
38083
+ if (list && list.length) {
38084
+ internalData.initialized = true;
38085
+ if (expandAll) {
38086
+ $xeTree.setAllExpandNode(true);
38087
+ }
38088
+ $xeTree.setCheckboxByNodeId(props.checkNodeKeys || [], true);
37701
38089
  }
37702
- nodeids.forEach(nodeid => {
37703
- handleSetExpand(nodeid, expanded, treeExpandedMaps);
37704
- });
37705
- reactData.updateExpandedFlag++;
37706
38090
  }
37707
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37708
- },
37709
- getExpandNodeIds() {
37710
- const {
37711
- treeExpandedMaps
37712
- } = internalData;
37713
- return external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().keys(treeExpandedMaps);
37714
- },
37715
- getExpandNodes() {
38091
+ updateHeight();
38092
+ refreshScroll();
38093
+ });
38094
+ };
38095
+ const updateScrollYStatus = fullData => {
38096
+ const {
38097
+ transform
38098
+ } = props;
38099
+ const virtualYOpts = computeVirtualYOpts.value;
38100
+ const allList = fullData || internalData.treeFullData;
38101
+ // 如果gt为0,则总是启用
38102
+ const scrollYLoad = !!transform && !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt < allList.length);
38103
+ reactData.scrollYLoad = scrollYLoad;
38104
+ return scrollYLoad;
38105
+ };
38106
+ const updateYSpace = () => {
38107
+ const {
38108
+ scrollYLoad
38109
+ } = reactData;
38110
+ const {
38111
+ scrollYStore,
38112
+ afterVisibleList
38113
+ } = internalData;
38114
+ reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0;
38115
+ reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0;
38116
+ };
38117
+ const updateYData = () => {
38118
+ handleData();
38119
+ updateYSpace();
38120
+ };
38121
+ const computeScrollLoad = () => {
38122
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)().then(() => {
37716
38123
  const {
37717
- nodeMaps,
37718
- treeExpandedMaps
37719
- } = internalData;
37720
- const list = [];
37721
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(treeExpandedMaps, (item, nodeid) => {
37722
- const nodeItem = nodeMaps[nodeid];
37723
- if (nodeItem) {
37724
- list.push(nodeItem.item);
37725
- }
37726
- });
37727
- return list;
37728
- },
37729
- setExpandNode(nodes, expanded) {
38124
+ scrollYLoad
38125
+ } = reactData;
37730
38126
  const {
37731
- treeExpandedMaps
38127
+ scrollYStore
37732
38128
  } = internalData;
37733
- if (nodes) {
37734
- if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(nodes)) {
37735
- nodes = [nodes];
38129
+ const virtualBodyElem = refVirtualBody.value;
38130
+ const virtualYOpts = computeVirtualYOpts.value;
38131
+ let rowHeight = 0;
38132
+ let firstItemElem;
38133
+ if (virtualBodyElem) {
38134
+ if (!firstItemElem) {
38135
+ firstItemElem = virtualBodyElem.children[0];
37736
38136
  }
37737
- nodes.forEach(node => {
37738
- const nodeid = getNodeId(node);
37739
- handleSetExpand(nodeid, expanded, treeExpandedMaps);
37740
- });
37741
- reactData.updateExpandedFlag++;
37742
- }
37743
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37744
- },
37745
- toggleExpandByNodeId(nodeids) {
37746
- const {
37747
- treeExpandedMaps
37748
- } = internalData;
37749
- if (nodeids) {
37750
- if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(nodeids)) {
37751
- nodeids = [nodeids];
37752
- }
37753
- nodeids.forEach(nodeid => {
37754
- handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
37755
- });
37756
- reactData.updateExpandedFlag++;
37757
38137
  }
37758
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37759
- },
37760
- toggleExpandNode(nodes) {
37761
- const {
37762
- treeExpandedMaps
37763
- } = internalData;
37764
- if (nodes) {
37765
- if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(nodes)) {
37766
- nodes = [nodes];
37767
- }
37768
- nodes.forEach(node => {
37769
- const nodeid = getNodeId(node);
37770
- handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
37771
- });
37772
- reactData.updateExpandedFlag++;
38138
+ if (firstItemElem) {
38139
+ rowHeight = firstItemElem.offsetHeight;
37773
38140
  }
37774
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37775
- },
37776
- setAllExpandNode(expanded) {
37777
- const {
37778
- transform
37779
- } = props;
37780
- const {
37781
- treeExpandedMaps
37782
- } = internalData;
37783
- const childrenField = computeChildrenField.value;
37784
- const mapChildrenField = computeMapChildrenField.value;
37785
- if (expanded) {
37786
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(reactData.treeList, node => {
37787
- const childList = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(node, childrenField);
37788
- const hasChild = childList && childList.length;
37789
- if (hasChild) {
37790
- const nodeid = getNodeId(node);
37791
- treeExpandedMaps[nodeid] = true;
37792
- }
37793
- }, {
37794
- children: transform ? mapChildrenField : childrenField
37795
- });
38141
+ rowHeight = Math.max(20, rowHeight);
38142
+ scrollYStore.rowHeight = rowHeight;
38143
+ // 计算 Y 逻辑
38144
+ if (scrollYLoad) {
38145
+ const scrollBodyElem = refVirtualWrapper.value;
38146
+ const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0);
38147
+ const offsetYSize = Math.max(0, Math.min(2, external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(virtualYOpts.oSize)));
38148
+ scrollYStore.offsetSize = offsetYSize;
38149
+ scrollYStore.visibleSize = visibleYSize;
38150
+ scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex);
38151
+ updateYData();
37796
38152
  } else {
37797
- internalData.treeExpandedMaps = {};
37798
- }
37799
- reactData.updateExpandedFlag++;
37800
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37801
- },
37802
- reloadExpandNode(node) {
37803
- const {
37804
- lazy
37805
- } = props;
37806
- if (lazy) {
37807
- treeMethods.clearExpandLoaded(node);
37808
- return handleAsyncTreeExpandChilds(node);
38153
+ updateYSpace();
37809
38154
  }
37810
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37811
- },
37812
- clearExpandLoaded(node) {
37813
- const {
37814
- lazy
37815
- } = props;
37816
- const {
37817
- nodeMaps
37818
- } = internalData;
37819
- if (lazy) {
37820
- const nodeItem = nodeMaps[getNodeId(node)];
37821
- if (nodeItem) {
37822
- nodeItem.treeLoaded = false;
37823
- }
38155
+ });
38156
+ };
38157
+ /**
38158
+ * 如果有滚动条,则滚动到对应的位置
38159
+ * @param {Number} scrollLeft 左距离
38160
+ * @param {Number} scrollTop 上距离
38161
+ */
38162
+ const scrollTo = (scrollLeft, scrollTop) => {
38163
+ const scrollBodyElem = refVirtualWrapper.value;
38164
+ if (scrollBodyElem) {
38165
+ if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(scrollLeft)) {
38166
+ scrollBodyElem.scrollLeft = scrollLeft;
37824
38167
  }
37825
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37826
- },
37827
- /**
37828
- * 用于树结构,给行数据加载子节点
37829
- */
37830
- loadChildrenNode(node, childRecords) {
37831
- const {
37832
- lazy,
37833
- transform
37834
- } = props;
37835
- const {
37836
- nodeMaps
37837
- } = internalData;
37838
- if (!lazy) {
37839
- return Promise.resolve([]);
38168
+ if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(scrollTop)) {
38169
+ scrollBodyElem.scrollTop = scrollTop;
37840
38170
  }
37841
- const childrenField = computeChildrenField.value;
37842
- const parentNodeItem = nodeMaps[getNodeId(node)];
37843
- const parentLevel = parentNodeItem ? parentNodeItem.level : 0;
37844
- const parentNodes = parentNodeItem ? parentNodeItem.nodes : [];
37845
- return createNode(childRecords).then(nodeList => {
37846
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(nodeList, (childRow, index, items, path, parent, nodes) => {
37847
- const itemNodeId = getNodeId(childRow);
37848
- nodeMaps[itemNodeId] = {
37849
- item: node,
37850
- itemIndex: -1,
37851
- items,
37852
- parent: parent || parentNodeItem.item,
37853
- nodes: parentNodes.concat(nodes),
37854
- level: parentLevel + nodes.length,
37855
- lineCount: 0,
37856
- treeLoaded: false
37857
- };
37858
- }, {
37859
- children: childrenField
37860
- });
37861
- node[childrenField] = nodeList;
37862
- if (transform) {
37863
- node[childrenField] = nodeList;
37864
- }
37865
- updateNodeLine(node);
37866
- return nodeList;
37867
- });
37868
- },
37869
- isExpandByNode,
37870
- isCheckedByRadioNodeId,
37871
- isCheckedByRadioNode,
37872
- isCheckedByCheckboxNodeId,
37873
- isIndeterminateByCheckboxNode,
37874
- isCheckedByCheckboxNode,
37875
- getCheckboxIndeterminateNodes() {
37876
- const {
37877
- nodeMaps,
37878
- indeterminateRowMaps
37879
- } = internalData;
37880
- const list = [];
37881
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(indeterminateRowMaps, (item, nodeid) => {
37882
- const nodeItem = nodeMaps[nodeid];
37883
- if (nodeItem) {
37884
- list.push(nodeItem.item);
37885
- }
38171
+ }
38172
+ if (reactData.scrollYLoad) {
38173
+ return new Promise(resolve => {
38174
+ setTimeout(() => {
38175
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)(() => {
38176
+ resolve();
38177
+ });
38178
+ }, 50);
37886
38179
  });
37887
- return list;
37888
38180
  }
38181
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37889
38182
  };
37890
- const cacheNodeMap = () => {
37891
- const {
37892
- transform
37893
- } = props;
38183
+ /**
38184
+ * 刷新滚动条
38185
+ */
38186
+ const refreshScroll = () => {
37894
38187
  const {
37895
- treeList
37896
- } = reactData;
37897
- const valueField = computeValueField.value;
37898
- const childrenField = computeChildrenField.value;
37899
- const mapChildrenField = computeMapChildrenField.value;
37900
- const keyMaps = {};
37901
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(treeList, (item, itemIndex, items, path, parent, nodes) => {
37902
- let nodeid = getNodeId(item);
37903
- if (!nodeid) {
37904
- nodeid = getNodeUniqueId();
37905
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(item, valueField, nodeid);
38188
+ lastScrollLeft,
38189
+ lastScrollTop
38190
+ } = internalData;
38191
+ return clearScroll().then(() => {
38192
+ if (lastScrollLeft || lastScrollTop) {
38193
+ internalData.lastScrollLeft = 0;
38194
+ internalData.lastScrollTop = 0;
38195
+ return scrollTo(lastScrollLeft, lastScrollTop);
37906
38196
  }
37907
- keyMaps[nodeid] = {
37908
- item,
37909
- itemIndex,
37910
- items,
37911
- parent,
37912
- nodes,
37913
- level: nodes.length,
37914
- lineCount: 0,
37915
- treeLoaded: false
37916
- };
37917
- }, {
37918
- children: transform ? mapChildrenField : childrenField
37919
38197
  });
37920
- internalData.nodeMaps = keyMaps;
37921
38198
  };
37922
- const loadTreeData = list => {
37923
- const {
37924
- expandAll,
37925
- transform
37926
- } = props;
38199
+ /**
38200
+ * 重新计算列表
38201
+ */
38202
+ const recalculate = () => {
37927
38203
  const {
37928
- initialized
38204
+ scrollYStore
37929
38205
  } = internalData;
37930
- const keyField = computeKeyField.value;
37931
- const parentField = computeParentField.value;
37932
- const mapChildrenField = computeMapChildrenField.value;
37933
- if (transform) {
37934
- reactData.treeList = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toArrayTree(list, {
37935
- key: keyField,
37936
- parentKey: parentField,
37937
- mapChildren: mapChildrenField
37938
- });
37939
- } else {
37940
- reactData.treeList = list ? list.slice(0) : [];
37941
- }
37942
- cacheNodeMap();
37943
- if (!initialized) {
37944
- if (list && list.length) {
37945
- internalData.initialized = true;
37946
- if (expandAll) {
37947
- $xeTree.setAllExpandNode(true);
37948
- }
37949
- $xeTree.setCheckboxByNodeId(props.checkNodeKeys || [], true);
37950
- }
37951
- }
37952
- };
37953
- const handleCountLine = (item, isRoot, nodeItem) => {
37954
38206
  const {
37955
- treeExpandedMaps
37956
- } = internalData;
37957
- const childrenField = computeChildrenField.value;
37958
- const nodeid = getNodeId(item);
37959
- nodeItem.lineCount++;
37960
- if (treeExpandedMaps[nodeid]) {
37961
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().arrayEach(item[childrenField], (childItem, childIndex, childList) => {
37962
- if (!isRoot || childIndex < childList.length - 1) {
37963
- handleCountLine(childItem, false, nodeItem);
37964
- }
38207
+ rowHeight
38208
+ } = scrollYStore;
38209
+ const el = refElem.value;
38210
+ if (el && el.clientWidth && el.clientHeight) {
38211
+ const parentEl = getParentElem();
38212
+ const headerWrapperEl = refHeaderWrapperElem.value;
38213
+ const footerWrapperEl = refFooterWrapperElem.value;
38214
+ const headHeight = headerWrapperEl ? headerWrapperEl.clientHeight : 0;
38215
+ const footHeight = footerWrapperEl ? footerWrapperEl.clientHeight : 0;
38216
+ if (parentEl) {
38217
+ const parentPaddingSize = getPaddingTopBottomSize(parentEl);
38218
+ reactData.parentHeight = Math.max(headHeight + footHeight + rowHeight, parentEl.clientHeight - parentPaddingSize - headHeight - footHeight);
38219
+ }
38220
+ updateHeight();
38221
+ return computeScrollLoad().then(() => {
38222
+ updateHeight();
38223
+ updateYSpace();
37965
38224
  });
37966
38225
  }
38226
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
37967
38227
  };
37968
- const updateNodeLine = node => {
38228
+ const loadYData = evnt => {
37969
38229
  const {
37970
- nodeMaps
38230
+ scrollYStore
37971
38231
  } = internalData;
37972
- if (node) {
37973
- const nodeid = getNodeId(node);
37974
- const nodeItem = nodeMaps[nodeid];
37975
- if (nodeItem) {
37976
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().lastArrayEach(nodeItem.nodes, childItem => {
37977
- const nodeid = getNodeId(childItem);
37978
- const nodeItem = nodeMaps[nodeid];
37979
- if (nodeItem) {
37980
- nodeItem.lineCount = 0;
37981
- handleCountLine(childItem, true, nodeItem);
37982
- }
37983
- });
38232
+ const {
38233
+ startIndex,
38234
+ endIndex,
38235
+ visibleSize,
38236
+ offsetSize,
38237
+ rowHeight
38238
+ } = scrollYStore;
38239
+ const scrollBodyElem = evnt.target;
38240
+ const scrollTop = scrollBodyElem.scrollTop;
38241
+ const toVisibleIndex = Math.floor(scrollTop / rowHeight);
38242
+ const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
38243
+ const offsetEndIndex = toVisibleIndex + visibleSize + offsetSize;
38244
+ if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
38245
+ if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
38246
+ scrollYStore.startIndex = offsetStartIndex;
38247
+ scrollYStore.endIndex = offsetEndIndex;
38248
+ updateYData();
37984
38249
  }
37985
38250
  }
37986
38251
  };
38252
+ const scrollEvent = evnt => {
38253
+ const scrollBodyElem = evnt.target;
38254
+ const scrollTop = scrollBodyElem.scrollTop;
38255
+ const scrollLeft = scrollBodyElem.scrollLeft;
38256
+ const isX = scrollLeft !== internalData.lastScrollLeft;
38257
+ const isY = scrollTop !== internalData.lastScrollTop;
38258
+ internalData.lastScrollTop = scrollTop;
38259
+ internalData.lastScrollLeft = scrollLeft;
38260
+ if (reactData.scrollYLoad) {
38261
+ loadYData(evnt);
38262
+ }
38263
+ internalData.lastScrollTime = Date.now();
38264
+ dispatchEvent('scroll', {
38265
+ scrollLeft,
38266
+ scrollTop,
38267
+ isX,
38268
+ isY
38269
+ }, evnt);
38270
+ };
38271
+ const clearScroll = () => {
38272
+ const scrollBodyElem = refVirtualWrapper.value;
38273
+ if (scrollBodyElem) {
38274
+ scrollBodyElem.scrollTop = 0;
38275
+ scrollBodyElem.scrollLeft = 0;
38276
+ }
38277
+ internalData.lastScrollTop = 0;
38278
+ internalData.lastScrollLeft = 0;
38279
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
38280
+ };
37987
38281
  const handleNodeClickEvent = (evnt, node) => {
37988
38282
  const {
37989
38283
  showRadio,
@@ -38071,7 +38365,6 @@ function getNodeUniqueId() {
38071
38365
  if (!checkStrictly && $xeTree.isCheckedByCheckboxNodeId(nodeid)) {
38072
38366
  handleCheckedCheckboxNode(childRows, true);
38073
38367
  }
38074
- updateNodeLine(node);
38075
38368
  dispatchEvent('load-success', {
38076
38369
  node,
38077
38370
  data: childRecords
@@ -38079,7 +38372,6 @@ function getNodeUniqueId() {
38079
38372
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
38080
38373
  });
38081
38374
  } else {
38082
- updateNodeLine(node);
38083
38375
  dispatchEvent('load-success', {
38084
38376
  node,
38085
38377
  data: childRecords
@@ -38093,13 +38385,14 @@ function getNodeUniqueId() {
38093
38385
  if (treeExpandLazyLoadedMaps[nodeid]) {
38094
38386
  treeExpandLazyLoadedMaps[nodeid] = false;
38095
38387
  }
38096
- updateNodeLine(node);
38097
38388
  dispatchEvent('load-error', {
38098
38389
  node,
38099
38390
  data: e
38100
38391
  }, new Event('load-error'));
38101
38392
  }).finally(() => {
38102
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
38393
+ handleTreeToList();
38394
+ handleData();
38395
+ return recalculate();
38103
38396
  });
38104
38397
  } else {
38105
38398
  resolve();
@@ -38175,8 +38468,9 @@ function getNodeUniqueId() {
38175
38468
  });
38176
38469
  }
38177
38470
  reactData.updateExpandedFlag++;
38178
- expandNodes.forEach(updateNodeLine);
38179
- return Promise.all(result);
38471
+ handleTreeToList();
38472
+ handleData();
38473
+ return Promise.all(result).then(() => recalculate());
38180
38474
  };
38181
38475
  const toggleExpandEvent = (evnt, node) => {
38182
38476
  const {
@@ -38197,12 +38491,10 @@ function getNodeUniqueId() {
38197
38491
  const {
38198
38492
  transform
38199
38493
  } = props;
38200
- const {
38201
- treeList
38202
- } = reactData;
38203
38494
  const {
38204
38495
  selectCheckboxMaps,
38205
- indeterminateRowMaps
38496
+ indeterminateRowMaps,
38497
+ afterTreeList
38206
38498
  } = internalData;
38207
38499
  const childrenField = computeChildrenField.value;
38208
38500
  const mapChildrenField = computeMapChildrenField.value;
@@ -38214,7 +38506,7 @@ function getNodeUniqueId() {
38214
38506
  if (!checkStrictly) {
38215
38507
  const childRowMaps = {};
38216
38508
  const childRowList = [];
38217
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(treeList, node => {
38509
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(afterTreeList, node => {
38218
38510
  const nodeid = getNodeId(node);
38219
38511
  const childList = node[childrenField];
38220
38512
  if (childList && childList.length && !childRowMaps[nodeid]) {
@@ -38230,11 +38522,13 @@ function getNodeUniqueId() {
38230
38522
  const childList = vals[2];
38231
38523
  let sLen = 0; // 已选
38232
38524
  let hLen = 0; // 半选
38233
- let vLen = 0; // 有效行
38525
+ let vLen = 0; // 有效子行
38526
+ const cLen = childList.length; // 子行
38234
38527
  childList.forEach(checkMethod ? item => {
38235
38528
  const childNodeid = getNodeId(item);
38236
38529
  const isSelect = selectCheckboxMaps[childNodeid];
38237
38530
  if (checkMethod({
38531
+ $tree: $xeTree,
38238
38532
  node: item
38239
38533
  })) {
38240
38534
  if (isSelect) {
@@ -38260,8 +38554,25 @@ function getNodeUniqueId() {
38260
38554
  }
38261
38555
  vLen++;
38262
38556
  });
38263
- const isSelected = sLen >= vLen;
38264
- const halfSelect = !isSelected && (sLen >= 1 || hLen >= 1);
38557
+ let isSelected = false;
38558
+ if (cLen > 0) {
38559
+ if (vLen > 0) {
38560
+ isSelected = (sLen > 0 || hLen > 0) && sLen >= vLen;
38561
+ } else {
38562
+ // 如果存在子项禁用
38563
+ if (sLen > 0 && sLen >= vLen) {
38564
+ isSelected = true;
38565
+ } else if (selectCheckboxMaps[nodeid]) {
38566
+ isSelected = true;
38567
+ } else {
38568
+ isSelected = false;
38569
+ }
38570
+ }
38571
+ } else {
38572
+ // 如果无子项
38573
+ isSelected = selectCheckboxMaps[nodeid];
38574
+ }
38575
+ const halfSelect = !isSelected && (sLen > 0 || hLen > 0);
38265
38576
  if (isSelected) {
38266
38577
  selectCheckboxMaps[nodeid] = node;
38267
38578
  if (indeterminateRowMaps[nodeid]) {
@@ -38302,6 +38613,7 @@ function getNodeUniqueId() {
38302
38613
  let isDisabled = !!checkMethod;
38303
38614
  if (checkMethod) {
38304
38615
  isDisabled = !checkMethod({
38616
+ $tree: $xeTree,
38305
38617
  node
38306
38618
  });
38307
38619
  }
@@ -38317,7 +38629,7 @@ function getNodeUniqueId() {
38317
38629
  selectCheckboxMaps[nodeid] = node;
38318
38630
  }
38319
38631
  if (!checkStrictly) {
38320
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(node, childrenField), childNode => {
38632
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(node, transform ? mapChildrenField : childrenField), childNode => {
38321
38633
  const childNodeid = getNodeId(childNode);
38322
38634
  if (isChecked) {
38323
38635
  if (!selectCheckboxMaps[childNodeid]) {
@@ -38387,6 +38699,7 @@ function getNodeUniqueId() {
38387
38699
  let isDisabled = !!checkMethod;
38388
38700
  if (checkMethod) {
38389
38701
  isDisabled = !checkMethod({
38702
+ $tree: $xeTree,
38390
38703
  node
38391
38704
  });
38392
38705
  }
@@ -38403,6 +38716,376 @@ function getNodeUniqueId() {
38403
38716
  checked: isChecked
38404
38717
  }, evnt);
38405
38718
  };
38719
+ const handleGlobalResizeEvent = () => {
38720
+ const el = refElem.value;
38721
+ if (!el || !el.clientWidth) {
38722
+ return;
38723
+ }
38724
+ recalculate();
38725
+ };
38726
+ const treeMethods = {
38727
+ dispatchEvent,
38728
+ getNodeId,
38729
+ loadData(data) {
38730
+ return loadData(data || []);
38731
+ },
38732
+ reloadData(data) {
38733
+ return loadData(data || []);
38734
+ },
38735
+ clearCurrentNode() {
38736
+ reactData.currentNode = null;
38737
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
38738
+ },
38739
+ getCurrentNodeId() {
38740
+ const {
38741
+ currentNode
38742
+ } = reactData;
38743
+ if (currentNode) {
38744
+ return getNodeId(currentNode);
38745
+ }
38746
+ return null;
38747
+ },
38748
+ getCurrentNode() {
38749
+ const {
38750
+ currentNode
38751
+ } = reactData;
38752
+ const {
38753
+ nodeMaps
38754
+ } = internalData;
38755
+ if (currentNode) {
38756
+ const nodeItem = nodeMaps[getNodeId(currentNode)];
38757
+ if (nodeItem) {
38758
+ return nodeItem.item;
38759
+ }
38760
+ }
38761
+ return null;
38762
+ },
38763
+ setCurrentNodeId(nodeKey) {
38764
+ const {
38765
+ nodeMaps
38766
+ } = internalData;
38767
+ const nodeItem = nodeMaps[nodeKey];
38768
+ reactData.currentNode = nodeItem ? nodeItem.item : null;
38769
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
38770
+ },
38771
+ setCurrentNode(node) {
38772
+ reactData.currentNode = node;
38773
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
38774
+ },
38775
+ clearRadioNode() {
38776
+ reactData.selectRadioKey = null;
38777
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
38778
+ },
38779
+ getRadioNodeId() {
38780
+ return reactData.selectRadioKey || null;
38781
+ },
38782
+ getRadioNode() {
38783
+ const {
38784
+ selectRadioKey
38785
+ } = reactData;
38786
+ const {
38787
+ nodeMaps
38788
+ } = internalData;
38789
+ if (selectRadioKey) {
38790
+ const nodeItem = nodeMaps[selectRadioKey];
38791
+ if (nodeItem) {
38792
+ return nodeItem.item;
38793
+ }
38794
+ }
38795
+ return null;
38796
+ },
38797
+ setRadioNodeId(nodeKey) {
38798
+ reactData.selectRadioKey = nodeKey;
38799
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
38800
+ },
38801
+ setRadioNode,
38802
+ setCheckboxNode,
38803
+ setCheckboxByNodeId,
38804
+ getCheckboxNodeIds() {
38805
+ const {
38806
+ selectCheckboxMaps
38807
+ } = internalData;
38808
+ return Object.keys(selectCheckboxMaps);
38809
+ },
38810
+ getCheckboxNodes() {
38811
+ const {
38812
+ nodeMaps,
38813
+ selectCheckboxMaps
38814
+ } = internalData;
38815
+ const list = [];
38816
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(selectCheckboxMaps, (item, nodeid) => {
38817
+ const nodeItem = nodeMaps[nodeid];
38818
+ if (nodeItem) {
38819
+ list.push(nodeItem.item);
38820
+ }
38821
+ });
38822
+ return list;
38823
+ },
38824
+ clearCheckboxNode() {
38825
+ internalData.selectCheckboxMaps = {};
38826
+ reactData.updateCheckboxFlag++;
38827
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)().then(() => {
38828
+ return {
38829
+ checkNodeKeys: []
38830
+ };
38831
+ });
38832
+ },
38833
+ setAllCheckboxNode(checked) {
38834
+ const {
38835
+ transform
38836
+ } = props;
38837
+ const selectMaps = {};
38838
+ const childrenField = computeChildrenField.value;
38839
+ const mapChildrenField = computeMapChildrenField.value;
38840
+ const checkKeys = [];
38841
+ if (checked) {
38842
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(internalData.afterTreeList, node => {
38843
+ const nodeid = getNodeId(node);
38844
+ checkKeys.push(nodeid);
38845
+ selectMaps[nodeid] = true;
38846
+ }, {
38847
+ children: transform ? mapChildrenField : childrenField
38848
+ });
38849
+ }
38850
+ internalData.selectCheckboxMaps = selectMaps;
38851
+ reactData.updateCheckboxFlag++;
38852
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)().then(() => {
38853
+ return {
38854
+ checkNodeKeys: checkKeys
38855
+ };
38856
+ });
38857
+ },
38858
+ clearExpandNode() {
38859
+ return treeMethods.clearAllExpandNode();
38860
+ },
38861
+ clearAllExpandNode() {
38862
+ const {
38863
+ nodeMaps,
38864
+ scrollYStore
38865
+ } = internalData;
38866
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(nodeMaps, nodeItem => {
38867
+ nodeItem.treeLoaded = false;
38868
+ });
38869
+ internalData.treeExpandedMaps = {};
38870
+ reactData.updateExpandedFlag++;
38871
+ reactData.topSpaceHeight = 0;
38872
+ scrollYStore.startIndex = 0;
38873
+ scrollYStore.endIndex = 1;
38874
+ handleTreeToList();
38875
+ handleData();
38876
+ return recalculate();
38877
+ },
38878
+ setExpandByNodeId(nodeids, expanded) {
38879
+ const {
38880
+ treeExpandedMaps
38881
+ } = internalData;
38882
+ if (nodeids) {
38883
+ if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(nodeids)) {
38884
+ nodeids = [nodeids];
38885
+ }
38886
+ nodeids.forEach(nodeid => {
38887
+ handleSetExpand(nodeid, expanded, treeExpandedMaps);
38888
+ });
38889
+ reactData.updateExpandedFlag++;
38890
+ }
38891
+ handleTreeToList();
38892
+ handleData();
38893
+ return recalculate();
38894
+ },
38895
+ getExpandNodeIds() {
38896
+ const {
38897
+ treeExpandedMaps
38898
+ } = internalData;
38899
+ return external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().keys(treeExpandedMaps);
38900
+ },
38901
+ getExpandNodes() {
38902
+ const {
38903
+ nodeMaps,
38904
+ treeExpandedMaps
38905
+ } = internalData;
38906
+ const list = [];
38907
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(treeExpandedMaps, (item, nodeid) => {
38908
+ const nodeItem = nodeMaps[nodeid];
38909
+ if (nodeItem) {
38910
+ list.push(nodeItem.item);
38911
+ }
38912
+ });
38913
+ return list;
38914
+ },
38915
+ setExpandNode(nodes, expanded) {
38916
+ const {
38917
+ treeExpandedMaps
38918
+ } = internalData;
38919
+ if (nodes) {
38920
+ if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(nodes)) {
38921
+ nodes = [nodes];
38922
+ }
38923
+ nodes.forEach(node => {
38924
+ const nodeid = getNodeId(node);
38925
+ handleSetExpand(nodeid, expanded, treeExpandedMaps);
38926
+ });
38927
+ reactData.updateExpandedFlag++;
38928
+ }
38929
+ handleTreeToList();
38930
+ handleData();
38931
+ return recalculate();
38932
+ },
38933
+ toggleExpandByNodeId(nodeids) {
38934
+ const {
38935
+ treeExpandedMaps
38936
+ } = internalData;
38937
+ if (nodeids) {
38938
+ if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(nodeids)) {
38939
+ nodeids = [nodeids];
38940
+ }
38941
+ nodeids.forEach(nodeid => {
38942
+ handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
38943
+ });
38944
+ reactData.updateExpandedFlag++;
38945
+ }
38946
+ handleTreeToList();
38947
+ handleData();
38948
+ return recalculate();
38949
+ },
38950
+ toggleExpandNode(nodes) {
38951
+ const {
38952
+ treeExpandedMaps
38953
+ } = internalData;
38954
+ if (nodes) {
38955
+ if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(nodes)) {
38956
+ nodes = [nodes];
38957
+ }
38958
+ nodes.forEach(node => {
38959
+ const nodeid = getNodeId(node);
38960
+ handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
38961
+ });
38962
+ reactData.updateExpandedFlag++;
38963
+ }
38964
+ handleTreeToList();
38965
+ handleData();
38966
+ return recalculate();
38967
+ },
38968
+ setAllExpandNode(expanded) {
38969
+ const {
38970
+ transform
38971
+ } = props;
38972
+ const {
38973
+ treeExpandedMaps
38974
+ } = internalData;
38975
+ const childrenField = computeChildrenField.value;
38976
+ const mapChildrenField = computeMapChildrenField.value;
38977
+ if (expanded) {
38978
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(internalData.afterTreeList, node => {
38979
+ const childList = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(node, childrenField);
38980
+ const hasChild = childList && childList.length;
38981
+ if (hasChild) {
38982
+ const nodeid = getNodeId(node);
38983
+ treeExpandedMaps[nodeid] = true;
38984
+ }
38985
+ }, {
38986
+ children: transform ? mapChildrenField : childrenField
38987
+ });
38988
+ } else {
38989
+ internalData.treeExpandedMaps = {};
38990
+ }
38991
+ reactData.updateExpandedFlag++;
38992
+ handleTreeToList();
38993
+ handleData();
38994
+ return recalculate();
38995
+ },
38996
+ reloadExpandNode(node) {
38997
+ const {
38998
+ lazy
38999
+ } = props;
39000
+ if (lazy) {
39001
+ treeMethods.clearExpandLoaded(node);
39002
+ return handleAsyncTreeExpandChilds(node);
39003
+ }
39004
+ return recalculate();
39005
+ },
39006
+ clearExpandLoaded(node) {
39007
+ const {
39008
+ lazy
39009
+ } = props;
39010
+ const {
39011
+ nodeMaps
39012
+ } = internalData;
39013
+ if (lazy) {
39014
+ const nodeItem = nodeMaps[getNodeId(node)];
39015
+ if (nodeItem) {
39016
+ nodeItem.treeLoaded = false;
39017
+ }
39018
+ }
39019
+ return recalculate();
39020
+ },
39021
+ /**
39022
+ * 用于树结构,给行数据加载子节点
39023
+ */
39024
+ loadChildrenNode(node, childRecords) {
39025
+ const {
39026
+ lazy,
39027
+ transform
39028
+ } = props;
39029
+ const {
39030
+ nodeMaps
39031
+ } = internalData;
39032
+ if (!lazy) {
39033
+ return Promise.resolve([]);
39034
+ }
39035
+ const childrenField = computeChildrenField.value;
39036
+ const mapChildrenField = computeMapChildrenField.value;
39037
+ const parentNodeItem = nodeMaps[getNodeId(node)];
39038
+ const parentLevel = parentNodeItem ? parentNodeItem.level : 0;
39039
+ const parentNodes = parentNodeItem ? parentNodeItem.nodes : [];
39040
+ return createNode(childRecords).then(nodeList => {
39041
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(nodeList, (childRow, index, items, path, parent, nodes) => {
39042
+ const itemNodeId = getNodeId(childRow);
39043
+ nodeMaps[itemNodeId] = {
39044
+ item: node,
39045
+ index: -1,
39046
+ items,
39047
+ parent: parent || parentNodeItem.item,
39048
+ nodes: parentNodes.concat(nodes),
39049
+ level: parentLevel + nodes.length,
39050
+ treeIndex: -1,
39051
+ lineCount: 0,
39052
+ treeLoaded: false
39053
+ };
39054
+ }, {
39055
+ children: childrenField
39056
+ });
39057
+ node[childrenField] = nodeList;
39058
+ if (transform) {
39059
+ node[mapChildrenField] = nodeList;
39060
+ }
39061
+ updateAfterDataIndex();
39062
+ return nodeList;
39063
+ });
39064
+ },
39065
+ isExpandByNode,
39066
+ isCheckedByRadioNodeId,
39067
+ isCheckedByRadioNode,
39068
+ isCheckedByCheckboxNodeId,
39069
+ isIndeterminateByCheckboxNode,
39070
+ isCheckedByCheckboxNode,
39071
+ getCheckboxIndeterminateNodes() {
39072
+ const {
39073
+ nodeMaps,
39074
+ indeterminateRowMaps
39075
+ } = internalData;
39076
+ const list = [];
39077
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(indeterminateRowMaps, (item, nodeid) => {
39078
+ const nodeItem = nodeMaps[nodeid];
39079
+ if (nodeItem) {
39080
+ list.push(nodeItem.item);
39081
+ }
39082
+ });
39083
+ return list;
39084
+ },
39085
+ recalculate,
39086
+ scrollTo,
39087
+ clearScroll
39088
+ };
38406
39089
  const treePrivateMethods = {};
38407
39090
  Object.assign($xeTree, treeMethods, treePrivateMethods);
38408
39091
  const renderRadio = (node, nodeid, isChecked) => {
@@ -38416,12 +39099,14 @@ function getNodeUniqueId() {
38416
39099
  visibleMethod
38417
39100
  } = radioOpts;
38418
39101
  const isVisible = !visibleMethod || visibleMethod({
39102
+ $tree: $xeTree,
38419
39103
  node
38420
39104
  });
38421
39105
  let isDisabled = !!checkMethod;
38422
39106
  if (showRadio && showIcon && isVisible) {
38423
39107
  if (checkMethod) {
38424
39108
  isDisabled = !checkMethod({
39109
+ $tree: $xeTree,
38425
39110
  node
38426
39111
  });
38427
39112
  }
@@ -38453,12 +39138,14 @@ function getNodeUniqueId() {
38453
39138
  } = checkboxOpts;
38454
39139
  const isIndeterminate = isIndeterminateByCheckboxNodeid(nodeid);
38455
39140
  const isVisible = !visibleMethod || visibleMethod({
39141
+ $tree: $xeTree,
38456
39142
  node
38457
39143
  });
38458
39144
  let isDisabled = !!checkMethod;
38459
39145
  if (showCheckbox && showIcon && isVisible) {
38460
39146
  if (checkMethod) {
38461
39147
  isDisabled = !checkMethod({
39148
+ $tree: $xeTree,
38462
39149
  node
38463
39150
  });
38464
39151
  }
@@ -38479,7 +39166,7 @@ function getNodeUniqueId() {
38479
39166
  }
38480
39167
  return renderEmptyElement($xeTree);
38481
39168
  };
38482
- const renderNode = node => {
39169
+ const renderNode = (node, nodeid) => {
38483
39170
  const {
38484
39171
  lazy,
38485
39172
  showRadio,
@@ -38497,6 +39184,7 @@ function getNodeUniqueId() {
38497
39184
  updateExpandedFlag
38498
39185
  } = reactData;
38499
39186
  const {
39187
+ afterTreeList,
38500
39188
  nodeMaps,
38501
39189
  treeExpandedMaps,
38502
39190
  treeExpandLazyLoadedMaps
@@ -38509,30 +39197,13 @@ function getNodeUniqueId() {
38509
39197
  const iconSlot = slots.icon;
38510
39198
  const titleSlot = slots.title;
38511
39199
  const extraSlot = slots.extra;
38512
- const nodeid = getNodeId(node);
38513
39200
  const isExpand = updateExpandedFlag && treeExpandedMaps[nodeid];
38514
39201
  const nodeItem = nodeMaps[nodeid];
38515
39202
  const nodeValue = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(node, titleField);
38516
- const childVns = [];
38517
- if (hasChild && treeExpandedMaps[nodeid]) {
38518
- if (showLine) {
38519
- childVns.push((0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38520
- key: 'line',
38521
- class: 'vxe-tree--node-child-line',
38522
- style: {
38523
- height: `calc(${nodeItem.lineCount} * var(--vxe-ui-tree-node-height) - var(--vxe-ui-tree-node-height) / 2)`,
38524
- left: `${(nodeItem.level + 1) * (indent || 1)}px`
38525
- }
38526
- }));
38527
- }
38528
- childList.forEach(childItem => {
38529
- childVns.push(renderNode(childItem));
38530
- });
38531
- }
39203
+ const nLevel = nodeItem.level;
38532
39204
  let isRadioChecked = false;
38533
39205
  if (showRadio) {
38534
- // eslint-disable-next-line eqeqeq
38535
- isRadioChecked = nodeid == selectRadioKey;
39206
+ isRadioChecked = nodeid === String(selectRadioKey);
38536
39207
  }
38537
39208
  let isCheckboxChecked = false;
38538
39209
  if (showCheckbox) {
@@ -38546,8 +39217,14 @@ function getNodeUniqueId() {
38546
39217
  hasLazyChilds = node[hasChildField];
38547
39218
  isLazyLoaded = !!nodeItem.treeLoaded;
38548
39219
  }
39220
+ const prevNode = nodeItem.items[nodeItem.treeIndex - 1];
39221
+ const nParams = {
39222
+ node,
39223
+ isExpand
39224
+ };
38549
39225
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38550
- class: ['vxe-tree--node-wrapper', `node--level-${nodeItem.level}`],
39226
+ key: nodeid,
39227
+ class: ['vxe-tree--node-wrapper', `node--level-${nLevel}`],
38551
39228
  nodeid
38552
39229
  }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38553
39230
  class: ['vxe-tree--node-item', {
@@ -38556,7 +39233,7 @@ function getNodeUniqueId() {
38556
39233
  'is-checkbox--checked': isCheckboxChecked
38557
39234
  }],
38558
39235
  style: {
38559
- paddingLeft: `${(nodeItem.level - 1) * (indent || 1)}px`
39236
+ paddingLeft: `${(nLevel - 1) * (indent || 1)}px`
38560
39237
  },
38561
39238
  onClick(evnt) {
38562
39239
  handleNodeClickEvent(evnt, node);
@@ -38564,41 +39241,57 @@ function getNodeUniqueId() {
38564
39241
  onDblclick(evnt) {
38565
39242
  handleNodeDblclickEvent(evnt, node);
38566
39243
  }
38567
- }, [showIcon || showLine ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39244
+ }, [showLine ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39245
+ class: 'vxe-tree--node-line-wrapper'
39246
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39247
+ class: 'vxe-tree--node-line',
39248
+ style: {
39249
+ height: `${getNodeId(afterTreeList[0]) === nodeid ? 1 : calcTreeLine($xeTree, node, prevNode)}px`
39250
+ }
39251
+ })]) : renderEmptyElement($xeTree), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38568
39252
  class: 'vxe-tree--node-item-switcher'
38569
39253
  }, showIcon && (lazy ? isLazyLoaded ? hasChild : hasLazyChilds : hasChild) ? [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38570
39254
  class: 'vxe-tree--node-item-icon',
38571
39255
  onClick(evnt) {
38572
39256
  toggleExpandEvent(evnt, node);
38573
39257
  }
38574
- }, iconSlot ? iconSlot({
38575
- node,
38576
- isExpand
38577
- }) : [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('i', {
39258
+ }, iconSlot ? getSlotVNs(iconSlot(nParams)) : [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('i', {
38578
39259
  class: isLazyLoading ? iconLoaded || getIcon().TREE_NODE_LOADED : isExpand ? iconOpen || getIcon().TREE_NODE_OPEN : iconClose || getIcon().TREE_NODE_CLOSE
38579
- })])] : []) : renderEmptyElement($xeTree), renderRadio(node, nodeid, isRadioChecked), renderCheckbox(node, nodeid, isCheckboxChecked), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39260
+ })])] : []), renderRadio(node, nodeid, isRadioChecked), renderCheckbox(node, nodeid, isCheckboxChecked), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38580
39261
  class: 'vxe-tree--node-item-inner'
38581
39262
  }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38582
39263
  class: 'vxe-tree--node-item-title'
38583
- }, titleSlot ? getSlotVNs(titleSlot({
38584
- node,
38585
- isExpand
38586
- })) : `${nodeValue}`), extraSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39264
+ }, titleSlot ? getSlotVNs(titleSlot(nParams)) : `${nodeValue}`), extraSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38587
39265
  class: 'vxe-tree--node-item-extra'
38588
- }, getSlotVNs(extraSlot({
38589
- node,
38590
- isExpand
38591
- }))) : renderEmptyElement($xeTree)])]), hasChild && treeExpandedMaps[nodeid] ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38592
- class: 'vxe-tree--node-child-wrapper'
38593
- }, childVns) : renderEmptyElement($xeTree)]);
39266
+ }, getSlotVNs(extraSlot(nParams))) : renderEmptyElement($xeTree)])])]);
38594
39267
  };
38595
- const renderNodeList = () => {
39268
+ const renderList = treeList => {
38596
39269
  const {
38597
- treeList
38598
- } = reactData;
38599
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38600
- class: 'vxe-tree--node-list-wrapper'
38601
- }, treeList.map(node => renderNode(node)));
39270
+ transform
39271
+ } = props;
39272
+ const {
39273
+ treeExpandedMaps
39274
+ } = internalData;
39275
+ const childrenField = computeChildrenField.value;
39276
+ if (!treeList.length) {
39277
+ return [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39278
+ class: 'vxe-tree--empty-placeholder'
39279
+ }, getI18n('vxe.tree.searchEmpty'))];
39280
+ }
39281
+ const nodeVNs = [];
39282
+ treeList.forEach(transform ? node => {
39283
+ const nodeid = getNodeId(node);
39284
+ nodeVNs.push(renderNode(node, nodeid));
39285
+ } : node => {
39286
+ const nodeid = getNodeId(node);
39287
+ nodeVNs.push(renderNode(node, nodeid));
39288
+ const childList = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(node, childrenField);
39289
+ const hasChild = childList && childList.length;
39290
+ if (hasChild && treeExpandedMaps[nodeid]) {
39291
+ nodeVNs.push(...renderList(childList));
39292
+ }
39293
+ });
39294
+ return nodeVNs;
38602
39295
  };
38603
39296
  const renderVN = () => {
38604
39297
  const {
@@ -38606,13 +39299,20 @@ function getNodeUniqueId() {
38606
39299
  trigger,
38607
39300
  showLine
38608
39301
  } = props;
39302
+ const {
39303
+ bodyHeight,
39304
+ topSpaceHeight,
39305
+ treeList
39306
+ } = reactData;
38609
39307
  const vSize = computeSize.value;
38610
39308
  const radioOpts = computeRadioOpts.value;
38611
39309
  const checkboxOpts = computeCheckboxOpts.value;
38612
- const treeStyle = computeTreeStyle.value;
38613
39310
  const loadingOpts = computeLoadingOpts.value;
38614
39311
  const isRowHover = computeIsRowHover.value;
39312
+ const treeStyle = computeTreeStyle.value;
38615
39313
  const loadingSlot = slots.loading;
39314
+ const headerSlot = slots.header;
39315
+ const footerSlot = slots.footer;
38616
39316
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
38617
39317
  ref: refElem,
38618
39318
  class: ['vxe-tree', {
@@ -38623,9 +39323,34 @@ function getNodeUniqueId() {
38623
39323
  'node--hover': isRowHover,
38624
39324
  'node--trigger': trigger === 'node',
38625
39325
  'is--loading': loading
38626
- }],
38627
- style: treeStyle
38628
- }, [renderNodeList(),
39326
+ }]
39327
+ }, [headerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39328
+ ref: refHeaderWrapperElem,
39329
+ class: 'vxe-tree--header-wrapper'
39330
+ }, headerSlot({
39331
+ $tree: $xeTree
39332
+ })) : renderEmptyElement($xeTree), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39333
+ ref: refVirtualWrapper,
39334
+ class: 'vxe-tree--node-list-wrapper',
39335
+ style: treeStyle,
39336
+ onScroll: scrollEvent
39337
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39338
+ class: 'vxe-tree--y-space',
39339
+ style: {
39340
+ height: bodyHeight ? `${bodyHeight}px` : ''
39341
+ }
39342
+ }), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39343
+ ref: refVirtualBody,
39344
+ class: 'vxe-tree--node-list-body',
39345
+ style: {
39346
+ transform: `translateY(${topSpaceHeight}px)`
39347
+ }
39348
+ }, renderList(treeList))]), footerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39349
+ ref: refFooterWrapperElem,
39350
+ class: 'vxe-tree--footer-wrapper'
39351
+ }, footerSlot({
39352
+ $tree: $xeTree
39353
+ })) : renderEmptyElement($xeTree),
38629
39354
  /**
38630
39355
  * 加载中
38631
39356
  */
@@ -38648,7 +39373,7 @@ function getNodeUniqueId() {
38648
39373
  dataFlag.value++;
38649
39374
  });
38650
39375
  (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(dataFlag, () => {
38651
- loadTreeData(props.data || []);
39376
+ loadData(props.data || []);
38652
39377
  });
38653
39378
  (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(() => props.checkNodeKey, val => {
38654
39379
  reactData.selectRadioKey = val;
@@ -38663,13 +39388,54 @@ function getNodeUniqueId() {
38663
39388
  (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(checkboxFlag, () => {
38664
39389
  updateCheckboxChecked(props.checkNodeKeys || []);
38665
39390
  });
39391
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(() => props.filterValue, () => {
39392
+ triggerSearchEvent(new Event('filter'));
39393
+ });
39394
+ const hFlag = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)(0);
39395
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(() => props.height, () => {
39396
+ hFlag.value++;
39397
+ });
39398
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(() => props.minHeight, () => {
39399
+ hFlag.value++;
39400
+ });
39401
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(() => props.maxHeight, () => {
39402
+ hFlag.value++;
39403
+ });
39404
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.watch)(hFlag, () => {
39405
+ recalculate();
39406
+ });
39407
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.onMounted)(() => {
39408
+ if (props.autoResize) {
39409
+ const el = refElem.value;
39410
+ const parentEl = getParentElem();
39411
+ const resizeObserver = globalResize.create(() => {
39412
+ if (props.autoResize) {
39413
+ recalculate();
39414
+ }
39415
+ });
39416
+ if (el) {
39417
+ resizeObserver.observe(el);
39418
+ }
39419
+ if (parentEl) {
39420
+ resizeObserver.observe(parentEl);
39421
+ }
39422
+ internalData.resizeObserver = resizeObserver;
39423
+ }
39424
+ globalEvents.on($xeTree, 'resize', handleGlobalResizeEvent);
39425
+ });
38666
39426
  (0,external_commonjs_vue_commonjs2_vue_root_Vue_.onUnmounted)(() => {
38667
- reactData.treeList = [];
39427
+ const {
39428
+ resizeObserver
39429
+ } = internalData;
39430
+ if (resizeObserver) {
39431
+ resizeObserver.disconnect();
39432
+ }
38668
39433
  internalData.treeExpandedMaps = {};
38669
39434
  internalData.indeterminateRowMaps = {};
38670
39435
  internalData.nodeMaps = {};
39436
+ globalEvents.off($xeTree, 'resize');
38671
39437
  });
38672
- loadTreeData(props.data || []);
39438
+ loadData(props.data || []);
38673
39439
  $xeTree.renderVN = renderVN;
38674
39440
  return $xeTree;
38675
39441
  },
@@ -38700,6 +39466,7 @@ const Tree = VxeTree;
38700
39466
 
38701
39467
 
38702
39468
 
39469
+
38703
39470
  function tree_select_getOptUniqueId() {
38704
39471
  return external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().uniqueId('node_');
38705
39472
  }
@@ -38721,6 +39488,8 @@ function tree_select_getOptUniqueId() {
38721
39488
  type: Boolean,
38722
39489
  default: null
38723
39490
  },
39491
+ filterable: Boolean,
39492
+ filterConfig: Object,
38724
39493
  multiple: Boolean,
38725
39494
  className: [String, Function],
38726
39495
  popupClassName: [String, Function],
@@ -38730,18 +39499,44 @@ function tree_select_getOptUniqueId() {
38730
39499
  optionProps: Object,
38731
39500
  size: {
38732
39501
  type: String,
38733
- default: () => getConfig().select.size || getConfig().size
39502
+ default: () => getConfig().treeSelect.size || getConfig().size
38734
39503
  },
38735
39504
  remote: Boolean,
38736
- remoteMethod: Function,
39505
+ remoteConfig: Function,
38737
39506
  popupConfig: Object,
38738
39507
  treeConfig: Object,
39508
+ virtualYConfig: Object,
39509
+ autoClose: {
39510
+ type: Boolean,
39511
+ default: () => getConfig().treeSelect.autoClose
39512
+ },
39513
+ showTotalButoon: {
39514
+ type: Boolean,
39515
+ default: () => getConfig().treeSelect.showTotalButoon
39516
+ },
39517
+ showCheckedButoon: {
39518
+ type: Boolean,
39519
+ default: () => getConfig().treeSelect.showCheckedButoon
39520
+ },
39521
+ showClearButton: {
39522
+ type: Boolean,
39523
+ default: () => getConfig().treeSelect.showClearButton
39524
+ },
39525
+ showExpandButton: {
39526
+ type: Boolean,
39527
+ default: () => getConfig().treeSelect.showExpandButton
39528
+ },
38739
39529
  transfer: {
38740
39530
  type: Boolean,
38741
39531
  default: null
38742
- }
39532
+ },
39533
+ /**
39534
+ * 已废弃,被 remote-config.queryMethod 替换
39535
+ * @deprecated
39536
+ */
39537
+ remoteMethod: Function
38743
39538
  },
38744
- emits: ['update:modelValue', 'change', 'clear', 'blur', 'focus', 'click', 'node-click'],
39539
+ emits: ['update:modelValue', 'change', 'all-change', 'clear', 'blur', 'focus', 'click', 'node-click'],
38745
39540
  setup(props, context) {
38746
39541
  const {
38747
39542
  emit,
@@ -38758,12 +39553,14 @@ function tree_select_getOptUniqueId() {
38758
39553
  } = useSize(props);
38759
39554
  const refElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
38760
39555
  const refInput = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
39556
+ const refInpSearch = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
38761
39557
  const refTreeWrapper = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
38762
39558
  const refOptionPanel = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
39559
+ const refTree = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
38763
39560
  const reactData = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.reactive)({
38764
39561
  initialized: false,
38765
- fullOptionList: [],
38766
- fullNodeMaps: {},
39562
+ searchValue: '',
39563
+ searchLoading: false,
38767
39564
  panelIndex: 0,
38768
39565
  panelStyle: {},
38769
39566
  panelPlacement: null,
@@ -38773,7 +39570,9 @@ function tree_select_getOptUniqueId() {
38773
39570
  isActivated: false
38774
39571
  });
38775
39572
  const internalData = {
38776
- hpTimeout: undefined
39573
+ // hpTimeout: undefined,
39574
+ fullOptionList: [],
39575
+ fullNodeMaps: {}
38777
39576
  };
38778
39577
  const refMaps = {
38779
39578
  refElem
@@ -38874,15 +39673,26 @@ function tree_select_getOptUniqueId() {
38874
39673
  const propsOpts = computePropsOpts.value;
38875
39674
  return propsOpts.hasChild || 'hasChild';
38876
39675
  });
39676
+ const computeVirtualYOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
39677
+ return Object.assign({}, getConfig().treeSelect.virtualYConfig, props.virtualYConfig);
39678
+ });
39679
+ const computeRemoteOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
39680
+ return Object.assign({}, getConfig().treeSelect.remoteConfig, props.remoteConfig);
39681
+ });
39682
+ const computeFilterOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
39683
+ const treeOpts = computeTreeOpts.value;
39684
+ return Object.assign({}, treeOpts.filterConfig, props.filterConfig);
39685
+ });
38877
39686
  const computeSelectLabel = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
38878
39687
  const {
38879
39688
  modelValue
38880
39689
  } = props;
38881
39690
  const {
38882
39691
  fullNodeMaps
38883
- } = reactData;
39692
+ } = internalData;
38884
39693
  const labelField = computeLabelField.value;
38885
- return (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(modelValue) ? modelValue : [modelValue]).map(val => {
39694
+ const selectVals = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(modelValue) ? [] : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(modelValue) ? modelValue : [modelValue];
39695
+ return selectVals.map(val => {
38886
39696
  const cacheItem = fullNodeMaps[val];
38887
39697
  return cacheItem ? cacheItem.item[labelField] : val;
38888
39698
  }).join(', ');
@@ -38933,12 +39743,16 @@ function tree_select_getOptUniqueId() {
38933
39743
  const {
38934
39744
  options
38935
39745
  } = props;
39746
+ const treeOpts = computeTreeOpts.value;
38936
39747
  const nodeKeyField = computeNodeKeyField.value;
38937
39748
  const childrenField = computeChildrenField.value;
38938
39749
  const valueField = computeValueField.value;
39750
+ const {
39751
+ transform
39752
+ } = treeOpts;
38939
39753
  const nodeMaps = {};
38940
39754
  const keyMaps = {};
38941
- external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(options, (item, index, items, path, parent, nodes) => {
39755
+ const handleOptNode = (item, index, items, path, parent, nodes) => {
38942
39756
  let nodeid = getNodeid(item);
38943
39757
  if (!nodeid) {
38944
39758
  nodeid = tree_select_getOptUniqueId();
@@ -38958,11 +39772,20 @@ function tree_select_getOptUniqueId() {
38958
39772
  parent,
38959
39773
  nodes
38960
39774
  };
38961
- }, {
38962
- children: childrenField
38963
- });
38964
- reactData.fullOptionList = options || [];
38965
- reactData.fullNodeMaps = nodeMaps;
39775
+ };
39776
+ if (options) {
39777
+ if (transform) {
39778
+ options.forEach((item, index, items) => {
39779
+ handleOptNode(item, index, items, [], null, []);
39780
+ });
39781
+ } else {
39782
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(options, handleOptNode, {
39783
+ children: childrenField
39784
+ });
39785
+ }
39786
+ }
39787
+ internalData.fullOptionList = options || [];
39788
+ internalData.fullNodeMaps = nodeMaps;
38966
39789
  };
38967
39790
  const updateZindex = () => {
38968
39791
  if (reactData.panelIndex < getLastZIndex()) {
@@ -38995,9 +39818,15 @@ function tree_select_getOptUniqueId() {
38995
39818
  };
38996
39819
  const showOptionPanel = () => {
38997
39820
  const {
38998
- loading
39821
+ loading,
39822
+ remote,
39823
+ filterable
38999
39824
  } = props;
39825
+ const {
39826
+ fullOptionList
39827
+ } = internalData;
39000
39828
  const isDisabled = computeIsDisabled.value;
39829
+ const remoteOpts = computeRemoteOpts.value;
39001
39830
  if (!loading && !isDisabled) {
39002
39831
  clearTimeout(internalData.hpTimeout);
39003
39832
  if (!reactData.initialized) {
@@ -39005,8 +39834,14 @@ function tree_select_getOptUniqueId() {
39005
39834
  }
39006
39835
  reactData.isActivated = true;
39007
39836
  reactData.isAniVisible = true;
39837
+ if (filterable) {
39838
+ if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !fullOptionList.length) {
39839
+ handleSearchEvent();
39840
+ }
39841
+ }
39008
39842
  setTimeout(() => {
39009
39843
  reactData.visiblePanel = true;
39844
+ handleFocusSearch();
39010
39845
  }, 10);
39011
39846
  updateZindex();
39012
39847
  updatePlacement();
@@ -39021,7 +39856,7 @@ function tree_select_getOptUniqueId() {
39021
39856
  const changeEvent = (evnt, selectValue) => {
39022
39857
  const {
39023
39858
  fullNodeMaps
39024
- } = reactData;
39859
+ } = internalData;
39025
39860
  emitModel(selectValue);
39026
39861
  if (selectValue !== props.modelValue) {
39027
39862
  const cacheItem = fullNodeMaps[selectValue];
@@ -39045,6 +39880,65 @@ function tree_select_getOptUniqueId() {
39045
39880
  clearValueEvent(evnt, null);
39046
39881
  hideOptionPanel();
39047
39882
  };
39883
+ const allCheckedPanelEvent = params => {
39884
+ const {
39885
+ $event
39886
+ } = params;
39887
+ const {
39888
+ multiple,
39889
+ autoClose
39890
+ } = props;
39891
+ const $tree = refTree.value;
39892
+ if (multiple) {
39893
+ if ($tree) {
39894
+ $tree.setAllCheckboxNode(true).then(({
39895
+ checkNodeKeys
39896
+ }) => {
39897
+ changeEvent($event, checkNodeKeys);
39898
+ dispatchEvent('all-change', {
39899
+ value: checkNodeKeys
39900
+ }, $event);
39901
+ if (autoClose) {
39902
+ hideOptionPanel();
39903
+ }
39904
+ });
39905
+ }
39906
+ }
39907
+ };
39908
+ const clearCheckedPanelEvent = params => {
39909
+ const {
39910
+ $event
39911
+ } = params;
39912
+ const {
39913
+ multiple,
39914
+ autoClose
39915
+ } = props;
39916
+ const $tree = refTree.value;
39917
+ if ($tree) {
39918
+ const value = multiple ? [] : null;
39919
+ $tree.clearCheckboxNode().then(() => {
39920
+ if (autoClose) {
39921
+ hideOptionPanel();
39922
+ }
39923
+ });
39924
+ changeEvent($event, value);
39925
+ dispatchEvent('clear', {
39926
+ value
39927
+ }, $event);
39928
+ }
39929
+ };
39930
+ const allExpandPanelEvent = () => {
39931
+ const $tree = refTree.value;
39932
+ if ($tree) {
39933
+ $tree.setAllExpandNode(true);
39934
+ }
39935
+ };
39936
+ const clearExpandPanelEvent = () => {
39937
+ const $tree = refTree.value;
39938
+ if ($tree) {
39939
+ $tree.clearAllExpandNode();
39940
+ }
39941
+ };
39048
39942
  const handleGlobalMousewheelEvent = evnt => {
39049
39943
  const {
39050
39944
  visiblePanel
@@ -39086,6 +39980,16 @@ function tree_select_getOptUniqueId() {
39086
39980
  updatePlacement();
39087
39981
  }
39088
39982
  };
39983
+ const handleFocusSearch = () => {
39984
+ if (props.filterable) {
39985
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)(() => {
39986
+ const inpSearch = refInpSearch.value;
39987
+ if (inpSearch) {
39988
+ inpSearch.focus();
39989
+ }
39990
+ });
39991
+ }
39992
+ };
39089
39993
  const focusEvent = evnt => {
39090
39994
  const isDisabled = computeIsDisabled.value;
39091
39995
  if (!isDisabled) {
@@ -39107,6 +40011,31 @@ function tree_select_getOptUniqueId() {
39107
40011
  reactData.isActivated = false;
39108
40012
  dispatchEvent('blur', {}, evnt);
39109
40013
  };
40014
+ const modelSearchEvent = value => {
40015
+ reactData.searchValue = value;
40016
+ };
40017
+ const handleSearchEvent = () => {
40018
+ const {
40019
+ modelValue,
40020
+ remote,
40021
+ remoteMethod
40022
+ } = props;
40023
+ const {
40024
+ searchValue
40025
+ } = reactData;
40026
+ const remoteOpts = computeRemoteOpts.value;
40027
+ const queryMethod = remoteOpts.queryMethod || remoteMethod;
40028
+ if (remote && queryMethod && remoteOpts.enabled) {
40029
+ reactData.searchLoading = true;
40030
+ Promise.resolve(queryMethod({
40031
+ $treeSelect: $xeTreeSelect,
40032
+ searchValue,
40033
+ value: modelValue
40034
+ })).then(() => (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)()).catch(() => (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)()).finally(() => {
40035
+ reactData.searchLoading = false;
40036
+ });
40037
+ }
40038
+ };
39110
40039
  const togglePanelEvent = params => {
39111
40040
  const {
39112
40041
  $event
@@ -39154,13 +40083,19 @@ function tree_select_getOptUniqueId() {
39154
40083
  modelValue,
39155
40084
  multiple,
39156
40085
  options,
39157
- loading
40086
+ loading,
40087
+ filterable,
40088
+ showTotalButoon,
40089
+ showCheckedButoon,
40090
+ showClearButton,
40091
+ showExpandButton
39158
40092
  } = props;
39159
40093
  const {
39160
40094
  initialized,
39161
40095
  isActivated,
39162
40096
  isAniVisible,
39163
- visiblePanel
40097
+ visiblePanel,
40098
+ searchValue
39164
40099
  } = reactData;
39165
40100
  const vSize = computeSize.value;
39166
40101
  const isDisabled = computeIsDisabled.value;
@@ -39183,6 +40118,8 @@ function tree_select_getOptUniqueId() {
39183
40118
  const childrenField = computeChildrenField.value;
39184
40119
  const parentField = computeParentField.value;
39185
40120
  const hasChildField = computeHasChildField.value;
40121
+ const virtualYOpts = computeVirtualYOpts.value;
40122
+ const filterOpts = computeFilterOpts.value;
39186
40123
  if (formReadonly) {
39187
40124
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39188
40125
  ref: refElem,
@@ -39191,12 +40128,14 @@ function tree_select_getOptUniqueId() {
39191
40128
  class: 'vxe-tree-select-label'
39192
40129
  }, selectLabel)]);
39193
40130
  }
40131
+ const selectVals = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(modelValue) ? [] : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(modelValue) ? modelValue : [modelValue];
39194
40132
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39195
40133
  ref: refElem,
39196
40134
  class: ['vxe-tree-select', className ? external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(className) ? className({
39197
40135
  $treeSelect: $xeTreeSelect
39198
40136
  }) : className : '', {
39199
40137
  [`size--${vSize}`]: vSize,
40138
+ 'is--filterable': filterable,
39200
40139
  'is--visible': visiblePanel,
39201
40140
  'is--disabled': isDisabled,
39202
40141
  'is--loading': loading,
@@ -39212,6 +40151,7 @@ function tree_select_getOptUniqueId() {
39212
40151
  prefixIcon: props.prefixIcon,
39213
40152
  suffixIcon: loading ? getIcon().TREE_SELECT_LOADED : visiblePanel ? getIcon().TREE_SELECT_OPEN : getIcon().TREE_SELECT_CLOSE,
39214
40153
  modelValue: loading ? '' : selectLabel,
40154
+ title: selectLabel,
39215
40155
  onClear: clearEvent,
39216
40156
  onClick: clickEvent,
39217
40157
  onFocus: focusEvent,
@@ -39236,16 +40176,55 @@ function tree_select_getOptUniqueId() {
39236
40176
  style: reactData.panelStyle
39237
40177
  }, initialized ? [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39238
40178
  class: 'vxe-tree-select--panel-wrapper'
39239
- }, [headerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
40179
+ }, [filterable ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
40180
+ class: 'vxe-tree-select--panel-search'
40181
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(input, {
40182
+ ref: refInpSearch,
40183
+ class: 'vxe-tree-select-search--input',
40184
+ modelValue: searchValue,
40185
+ clearable: true,
40186
+ disabled: false,
40187
+ readonly: false,
40188
+ placeholder: getI18n('vxe.treeSelect.search'),
40189
+ prefixIcon: getIcon().INPUT_SEARCH,
40190
+ 'onUpdate:modelValue': modelSearchEvent
40191
+ })]) : renderEmptyElement($xeTreeSelect), showTotalButoon || showCheckedButoon && multiple || showClearButton || showExpandButton || headerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39240
40192
  class: 'vxe-tree-select--panel-header'
39241
- }, headerSlot({})) : renderEmptyElement($xeTreeSelect), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
40193
+ }, headerSlot ? headerSlot({}) : [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
40194
+ class: 'vxe-tree-select--header-button'
40195
+ }, [showTotalButoon ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
40196
+ class: 'vxe-tree-select--header-total'
40197
+ }, getI18n('vxe.treeSelect.total', [selectVals.length])) : renderEmptyElement($xeTreeSelect), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
40198
+ class: 'vxe-tree-select--header-btns'
40199
+ }, [showCheckedButoon && multiple ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(src_button, {
40200
+ content: getI18n('vxe.treeSelect.allChecked'),
40201
+ mode: 'text',
40202
+ onClick: allCheckedPanelEvent
40203
+ }) : renderEmptyElement($xeTreeSelect), showClearButton ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(src_button, {
40204
+ content: getI18n('vxe.treeSelect.clearChecked'),
40205
+ mode: 'text',
40206
+ onClick: clearCheckedPanelEvent
40207
+ }) : renderEmptyElement($xeTreeSelect), showExpandButton ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(src_button, {
40208
+ content: getI18n('vxe.treeSelect.allExpand'),
40209
+ mode: 'text',
40210
+ onClick: allExpandPanelEvent
40211
+ }) : renderEmptyElement($xeTreeSelect), showExpandButton ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(src_button, {
40212
+ content: getI18n('vxe.treeSelect.clearExpand'),
40213
+ mode: 'text',
40214
+ onClick: clearExpandPanelEvent
40215
+ }) : renderEmptyElement($xeTreeSelect)])])]) : renderEmptyElement($xeTreeSelect), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39242
40216
  class: 'vxe-tree-select--panel-body'
39243
40217
  }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
39244
40218
  ref: refTreeWrapper,
39245
40219
  class: 'vxe-tree-select-tree--wrapper',
39246
40220
  style: popupWrapperStyle
39247
40221
  }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(tree, {
40222
+ ref: refTree,
39248
40223
  class: 'vxe-tree-select--tree',
40224
+ height: popupOpts.height ? '100%' : treeOpts.height,
40225
+ minHeight: treeOpts.minHeight,
40226
+ maxHeight: popupOpts.height ? '' : treeOpts.maxHeight,
40227
+ autoResize: true,
39249
40228
  data: options,
39250
40229
  indent: treeOpts.indent,
39251
40230
  showRadio: !multiple,
@@ -39273,6 +40252,9 @@ function tree_select_getOptUniqueId() {
39273
40252
  iconOpen: treeOpts.iconOpen,
39274
40253
  iconLoaded: treeOpts.iconLoaded,
39275
40254
  iconClose: treeOpts.iconClose,
40255
+ filterValue: searchValue,
40256
+ filterConfig: filterOpts,
40257
+ virtualYConfig: virtualYOpts,
39276
40258
  onNodeClick: nodeClickEvent,
39277
40259
  onRadioChange: radioChangeEvent,
39278
40260
  onCheckboxChange: checkboxChangeEvent,