vxe-pc-ui 3.7.4 → 3.7.6

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 (198) 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 +138 -41
  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 +1160 -601
  31. package/es/tree/src/util.js +31 -0
  32. package/es/tree/style.css +23 -26
  33. package/es/tree/style.min.css +1 -1
  34. package/es/tree-select/src/tree-select.js +258 -24
  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 +20 -4
  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 +23 -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 +1541 -532
  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 +145 -45
  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 +1223 -626
  125. package/lib/tree/src/tree.min.js +1 -1
  126. package/lib/tree/src/util.js +37 -0
  127. package/lib/tree/src/util.min.js +1 -0
  128. package/lib/tree/style/style.css +23 -26
  129. package/lib/tree/style/style.min.css +1 -1
  130. package/lib/tree-select/src/tree-select.js +265 -26
  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 +20 -4
  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 +23 -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 +144 -44
  171. package/packages/tree/src/tree.ts +1206 -626
  172. package/packages/tree/src/util.ts +34 -0
  173. package/packages/tree-select/src/tree-select.ts +272 -26
  174. package/packages/ui/index.ts +19 -3
  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 +28 -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 +29 -40
  184. package/types/components/table.d.ts +2 -4
  185. package/types/components/tree-select.d.ts +72 -12
  186. package/types/components/tree.d.ts +129 -8
  187. /package/es/icon/{iconfont.1752133985860.ttf → iconfont.1752416451473.ttf} +0 -0
  188. /package/es/icon/{iconfont.1752133985860.woff → iconfont.1752416451473.woff} +0 -0
  189. /package/es/icon/{iconfont.1752133985860.woff2 → iconfont.1752416451473.woff2} +0 -0
  190. /package/es/{iconfont.1752133985860.ttf → iconfont.1752416451473.ttf} +0 -0
  191. /package/es/{iconfont.1752133985860.woff → iconfont.1752416451473.woff} +0 -0
  192. /package/es/{iconfont.1752133985860.woff2 → iconfont.1752416451473.woff2} +0 -0
  193. /package/lib/icon/style/{iconfont.1752133985860.ttf → iconfont.1752416451473.ttf} +0 -0
  194. /package/lib/icon/style/{iconfont.1752133985860.woff → iconfont.1752416451473.woff} +0 -0
  195. /package/lib/icon/style/{iconfont.1752133985860.woff2 → iconfont.1752416451473.woff2} +0 -0
  196. /package/lib/{iconfont.1752133985860.ttf → iconfont.1752416451473.ttf} +0 -0
  197. /package/lib/{iconfont.1752133985860.woff → iconfont.1752416451473.woff} +0 -0
  198. /package/lib/{iconfont.1752133985860.woff2 → iconfont.1752416451473.woff2} +0 -0
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -7,14 +8,21 @@ exports.default = void 0;
7
8
  var _comp = require("../../ui/src/comp");
8
9
  var _xeUtils = _interopRequireDefault(require("xe-utils"));
9
10
  var _ui = require("../../ui");
11
+ var _util = require("./util");
12
+ var _log = require("../../ui/src/log");
10
13
  var _vn = require("../../ui/src/vn");
11
14
  var _dom = require("../../ui/src/dom");
12
15
  var _loading = _interopRequireDefault(require("../../loading/src/loading"));
13
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
15
17
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
16
18
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
17
19
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
21
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
22
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
23
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
24
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
25
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
18
26
  /**
19
27
  * 生成节点的唯一主键
20
28
  */
@@ -37,7 +45,19 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
37
45
  mixins: [_ui.globalMixins.sizeMixin],
38
46
  props: {
39
47
  data: Array,
48
+ autoResize: {
49
+ type: Boolean,
50
+ default: function _default() {
51
+ return (0, _ui.getConfig)().tree.autoResize;
52
+ }
53
+ },
40
54
  height: [String, Number],
55
+ maxHeight: {
56
+ type: [String, Number],
57
+ default: function _default() {
58
+ return (0, _ui.getConfig)().tree.maxHeight;
59
+ }
60
+ },
41
61
  minHeight: {
42
62
  type: [String, Number],
43
63
  default: function _default() {
@@ -165,17 +185,27 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
165
185
  return (0, _ui.getConfig)().tree.iconLoaded;
166
186
  }
167
187
  },
188
+ filterValue: [String, Number],
189
+ filterConfig: Object,
168
190
  size: {
169
191
  type: String,
170
192
  default: function _default() {
171
193
  return (0, _ui.getConfig)().tree.size || (0, _ui.getConfig)().size;
172
194
  }
173
- }
195
+ },
196
+ virtualYConfig: Object
174
197
  },
175
198
  data: function data() {
176
199
  var xID = _xeUtils.default.uniqueId();
177
200
  var reactData = {
201
+ parentHeight: 0,
202
+ customHeight: 0,
203
+ customMinHeight: 0,
204
+ customMaxHeight: 0,
178
205
  currentNode: null,
206
+ scrollYLoad: false,
207
+ bodyHeight: 0,
208
+ topSpaceHeight: 0,
179
209
  selectRadioKey: null,
180
210
  treeList: [],
181
211
  updateExpandedFlag: 1,
@@ -183,11 +213,26 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
183
213
  };
184
214
  var internalData = {
185
215
  // initialized: false,
216
+ // lastFilterValue: '',
217
+ treeFullData: [],
218
+ afterTreeList: [],
219
+ afterVisibleList: [],
186
220
  nodeMaps: {},
187
221
  selectCheckboxMaps: {},
188
222
  indeterminateRowMaps: {},
189
223
  treeExpandedMaps: {},
190
- treeExpandLazyLoadedMaps: {}
224
+ treeExpandLazyLoadedMaps: {},
225
+ lastScrollLeft: 0,
226
+ lastScrollTop: 0,
227
+ scrollYStore: {
228
+ startIndex: 0,
229
+ endIndex: 0,
230
+ visibleSize: 0,
231
+ offsetSize: 0,
232
+ rowHeight: 0
233
+ },
234
+ lastScrollTime: 0
235
+ // hpTimeout: undefined
191
236
  };
192
237
  return {
193
238
  xID: xID,
@@ -232,6 +277,11 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
232
277
  var props = $xeTree;
233
278
  return props.hasChildField || 'hasChild';
234
279
  },
280
+ computeVirtualYOpts: function computeVirtualYOpts() {
281
+ var $xeTree = this;
282
+ var props = $xeTree;
283
+ return Object.assign({}, (0, _ui.getConfig)().tree.virtualYConfig, props.virtualYConfig);
284
+ },
235
285
  computeIsRowCurrent: function computeIsRowCurrent() {
236
286
  var $xeTree = this;
237
287
  var props = $xeTree;
@@ -278,17 +328,26 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
278
328
  },
279
329
  computeTreeStyle: function computeTreeStyle() {
280
330
  var $xeTree = this;
281
- var props = $xeTree;
282
- var height = props.height,
283
- minHeight = props.minHeight;
331
+ var reactData = $xeTree.reactData;
332
+ var customHeight = reactData.customHeight,
333
+ customMinHeight = reactData.customMinHeight,
334
+ customMaxHeight = reactData.customMaxHeight;
284
335
  var stys = {};
285
- if (height) {
286
- stys.height = (0, _dom.toCssUnit)(height);
336
+ if (customHeight) {
337
+ stys.height = (0, _dom.toCssUnit)(customHeight);
338
+ }
339
+ if (customMinHeight) {
340
+ stys.minHeight = (0, _dom.toCssUnit)(customMinHeight);
287
341
  }
288
- if (minHeight) {
289
- stys.minHeight = (0, _dom.toCssUnit)(minHeight);
342
+ if (customMaxHeight) {
343
+ stys.maxHeight = (0, _dom.toCssUnit)(customMaxHeight);
290
344
  }
291
345
  return stys;
346
+ },
347
+ computeFilterOpts: function computeFilterOpts() {
348
+ var $xeTree = this;
349
+ var props = $xeTree;
350
+ return Object.assign({}, (0, _ui.getConfig)().tree.filterConfig, props.filterConfig);
292
351
  }
293
352
  }),
294
353
  methods: {
@@ -301,578 +360,646 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
301
360
  $tree: $xeTree
302
361
  }, params));
303
362
  },
304
- clearCurrentNode: function clearCurrentNode() {
305
- var $xeTree = this;
306
- var reactData = $xeTree.reactData;
307
- reactData.currentNode = null;
308
- return $xeTree.$nextTick();
309
- },
310
- getCurrentNodeId: function getCurrentNodeId() {
363
+ getNodeId: function getNodeId(node) {
311
364
  var $xeTree = this;
312
- var reactData = $xeTree.reactData;
313
- var currentNode = reactData.currentNode;
314
- if (currentNode) {
315
- return $xeTree.getNodeId(currentNode);
316
- }
317
- return null;
365
+ var valueField = $xeTree.computeValueField;
366
+ var nodeid = _xeUtils.default.get(node, valueField);
367
+ return _xeUtils.default.eqNull(nodeid) ? '' : encodeURIComponent(nodeid);
318
368
  },
319
- getCurrentNode: function getCurrentNode() {
369
+ isExpandByNode: function isExpandByNode(node) {
320
370
  var $xeTree = this;
321
371
  var reactData = $xeTree.reactData;
322
372
  var internalData = $xeTree.internalData;
323
- var currentNode = reactData.currentNode;
324
- var nodeMaps = internalData.nodeMaps;
325
- if (currentNode) {
326
- var nodeItem = nodeMaps[$xeTree.getNodeId(currentNode)];
327
- if (nodeItem) {
328
- return nodeItem.item;
329
- }
330
- }
331
- return null;
373
+ var updateExpandedFlag = reactData.updateExpandedFlag;
374
+ var treeExpandedMaps = internalData.treeExpandedMaps;
375
+ var nodeid = $xeTree.getNodeId(node);
376
+ return !!(updateExpandedFlag && treeExpandedMaps[nodeid]);
332
377
  },
333
- setCurrentNodeId: function setCurrentNodeId(nodeKey) {
378
+ isCheckedByRadioNodeId: function isCheckedByRadioNodeId(nodeid) {
334
379
  var $xeTree = this;
335
380
  var reactData = $xeTree.reactData;
336
- var internalData = $xeTree.internalData;
337
- var nodeMaps = internalData.nodeMaps;
338
- var nodeItem = nodeMaps[nodeKey];
339
- reactData.currentNode = nodeItem ? nodeItem.item : null;
340
- return $xeTree.$nextTick();
381
+ var selectRadioKey = reactData.selectRadioKey;
382
+ return selectRadioKey === nodeid;
341
383
  },
342
- setCurrentNode: function setCurrentNode(node) {
384
+ isCheckedByRadioNode: function isCheckedByRadioNode(node) {
343
385
  var $xeTree = this;
344
- var reactData = $xeTree.reactData;
345
- reactData.currentNode = node;
346
- return $xeTree.$nextTick();
386
+ return $xeTree.isCheckedByRadioNodeId($xeTree.getNodeId(node));
347
387
  },
348
- clearRadioNode: function clearRadioNode() {
388
+ isCheckedByCheckboxNodeId: function isCheckedByCheckboxNodeId(nodeid) {
349
389
  var $xeTree = this;
350
390
  var reactData = $xeTree.reactData;
351
- reactData.selectRadioKey = null;
352
- return $xeTree.$nextTick();
353
- },
354
- getCheckboxNodeIds: function getCheckboxNodeIds() {
355
- var $xeTree = this;
356
391
  var internalData = $xeTree.internalData;
392
+ var updateCheckboxFlag = reactData.updateCheckboxFlag;
357
393
  var selectCheckboxMaps = internalData.selectCheckboxMaps;
358
- return Object.keys(selectCheckboxMaps);
394
+ return !!(updateCheckboxFlag && selectCheckboxMaps[nodeid]);
359
395
  },
360
- getCheckboxNodes: function getCheckboxNodes() {
396
+ isCheckedByCheckboxNode: function isCheckedByCheckboxNode(node) {
361
397
  var $xeTree = this;
362
- var internalData = $xeTree.internalData;
363
- var nodeMaps = internalData.nodeMaps,
364
- selectCheckboxMaps = internalData.selectCheckboxMaps;
365
- var list = [];
366
- _xeUtils.default.each(selectCheckboxMaps, function (item, nodeid) {
367
- var nodeItem = nodeMaps[nodeid];
368
- if (nodeItem) {
369
- list.push(nodeItem.item);
370
- }
371
- });
372
- return list;
398
+ return $xeTree.isCheckedByCheckboxNodeId($xeTree.getNodeId(node));
373
399
  },
374
- clearCheckboxNode: function clearCheckboxNode() {
400
+ isIndeterminateByCheckboxNodeid: function isIndeterminateByCheckboxNodeid(nodeid) {
375
401
  var $xeTree = this;
376
402
  var reactData = $xeTree.reactData;
377
403
  var internalData = $xeTree.internalData;
378
- internalData.selectCheckboxMaps = {};
379
- reactData.updateCheckboxFlag++;
380
- return $xeTree.$nextTick();
404
+ var updateCheckboxFlag = reactData.updateCheckboxFlag;
405
+ var indeterminateRowMaps = internalData.indeterminateRowMaps;
406
+ return !!(updateCheckboxFlag && indeterminateRowMaps[nodeid]);
381
407
  },
382
- setAllCheckboxNode: function setAllCheckboxNode(checked) {
408
+ isIndeterminateByCheckboxNode: function isIndeterminateByCheckboxNode(node) {
383
409
  var $xeTree = this;
384
- var props = $xeTree;
385
- var reactData = $xeTree.reactData;
386
- var internalData = $xeTree.internalData;
387
- var transform = props.transform;
388
- var selectMaps = {};
389
- var childrenField = $xeTree.computeChildrenField;
390
- var mapChildrenField = $xeTree.computeMapChildrenField;
391
- if (checked) {
392
- _xeUtils.default.eachTree(reactData.treeList, function (node) {
393
- var nodeid = $xeTree.getNodeId(node);
394
- selectMaps[nodeid] = true;
395
- }, {
396
- children: transform ? mapChildrenField : childrenField
397
- });
398
- }
399
- internalData.selectCheckboxMaps = selectMaps;
400
- reactData.updateCheckboxFlag++;
401
- return $xeTree.$nextTick();
410
+ return $xeTree.isIndeterminateByCheckboxNodeid($xeTree.getNodeId(node));
402
411
  },
403
- clearExpandNode: function clearExpandNode() {
412
+ emitCheckboxMode: function emitCheckboxMode(value) {
404
413
  var $xeTree = this;
405
- return $xeTree.clearAllExpandNode();
414
+ $xeTree.$emit('update:checkNodeKeys', value);
406
415
  },
407
- clearAllExpandNode: function clearAllExpandNode() {
416
+ emitRadioMode: function emitRadioMode(value) {
408
417
  var $xeTree = this;
409
- var reactData = $xeTree.reactData;
410
- var internalData = $xeTree.internalData;
411
- var nodeMaps = internalData.nodeMaps;
412
- _xeUtils.default.each(nodeMaps, function (nodeItem) {
413
- nodeItem.treeLoaded = false;
414
- });
415
- internalData.treeExpandedMaps = {};
416
- reactData.updateExpandedFlag++;
417
- return $xeTree.$nextTick();
418
+ $xeTree.$emit('update:checkNodeKey', value);
418
419
  },
419
- setExpandByNodeId: function setExpandByNodeId(nodeids, expanded) {
420
+ setRadioNode: function setRadioNode(node) {
420
421
  var $xeTree = this;
421
422
  var reactData = $xeTree.reactData;
422
- var internalData = $xeTree.internalData;
423
- var treeExpandedMaps = internalData.treeExpandedMaps;
424
- if (nodeids) {
425
- if (!_xeUtils.default.isArray(nodeids)) {
426
- nodeids = [nodeids];
427
- }
428
- nodeids.forEach(function (nodeid) {
429
- handleSetExpand(nodeid, expanded, treeExpandedMaps);
430
- });
431
- reactData.updateExpandedFlag++;
423
+ if (node) {
424
+ reactData.selectRadioKey = $xeTree.getNodeId(node);
432
425
  }
433
426
  return $xeTree.$nextTick();
434
427
  },
435
- getExpandNodeIds: function getExpandNodeIds() {
436
- var $xeTree = this;
437
- var internalData = $xeTree.internalData;
438
- var treeExpandedMaps = internalData.treeExpandedMaps;
439
- return _xeUtils.default.keys(treeExpandedMaps);
440
- },
441
- getExpandNodes: function getExpandNodes() {
428
+ setCheckboxNode: function setCheckboxNode(nodeList, checked) {
442
429
  var $xeTree = this;
443
- var internalData = $xeTree.internalData;
444
- var nodeMaps = internalData.nodeMaps,
445
- treeExpandedMaps = internalData.treeExpandedMaps;
446
- var list = [];
447
- _xeUtils.default.each(treeExpandedMaps, function (item, nodeid) {
448
- var nodeItem = nodeMaps[nodeid];
449
- if (nodeItem) {
450
- list.push(nodeItem.item);
430
+ if (nodeList) {
431
+ if (!_xeUtils.default.isArray(nodeList)) {
432
+ nodeList = [nodeList];
451
433
  }
452
- });
453
- return list;
434
+ $xeTree.handleCheckedCheckboxNode(nodeList, checked);
435
+ }
436
+ return $xeTree.$nextTick();
454
437
  },
455
- setExpandNode: function setExpandNode(nodes, expanded) {
438
+ setCheckboxByNodeId: function setCheckboxByNodeId(nodeIds, checked) {
456
439
  var $xeTree = this;
457
- var reactData = $xeTree.reactData;
458
440
  var internalData = $xeTree.internalData;
459
- var treeExpandedMaps = internalData.treeExpandedMaps;
460
- if (nodes) {
461
- if (!_xeUtils.default.isArray(nodes)) {
462
- nodes = [nodes];
441
+ var nodeMaps = internalData.nodeMaps;
442
+ if (nodeIds) {
443
+ if (!_xeUtils.default.isArray(nodeIds)) {
444
+ nodeIds = [nodeIds];
463
445
  }
464
- nodes.forEach(function (node) {
465
- var nodeid = $xeTree.getNodeId(node);
466
- handleSetExpand(nodeid, expanded, treeExpandedMaps);
446
+ var nodeList = [];
447
+ nodeIds.forEach(function (nodeid) {
448
+ var nodeItem = nodeMaps[nodeid];
449
+ if (nodeItem) {
450
+ nodeList.push(nodeItem.item);
451
+ }
467
452
  });
468
- reactData.updateExpandedFlag++;
453
+ $xeTree.handleCheckedCheckboxNode(nodeList, checked);
469
454
  }
470
455
  return $xeTree.$nextTick();
471
456
  },
472
- toggleExpandByNodeId: function toggleExpandByNodeId(nodeids) {
457
+ handleCheckedCheckboxNode: function handleCheckedCheckboxNode(nodeList, checked) {
473
458
  var $xeTree = this;
459
+ var props = $xeTree;
474
460
  var reactData = $xeTree.reactData;
475
461
  var internalData = $xeTree.internalData;
476
- var treeExpandedMaps = internalData.treeExpandedMaps;
477
- if (nodeids) {
478
- if (!_xeUtils.default.isArray(nodeids)) {
479
- nodeids = [nodeids];
462
+ var transform = props.transform;
463
+ var selectCheckboxMaps = internalData.selectCheckboxMaps;
464
+ var mapChildrenField = $xeTree.computeMapChildrenField;
465
+ var childrenField = $xeTree.computeChildrenField;
466
+ var checkboxOpts = $xeTree.computeCheckboxOpts;
467
+ var checkStrictly = checkboxOpts.checkStrictly;
468
+ var handleSelect = function handleSelect(node) {
469
+ var nodeid = $xeTree.getNodeId(node);
470
+ if (checked) {
471
+ if (!selectCheckboxMaps[nodeid]) {
472
+ selectCheckboxMaps[nodeid] = node;
473
+ }
474
+ } else {
475
+ if (selectCheckboxMaps[nodeid]) {
476
+ delete selectCheckboxMaps[nodeid];
477
+ }
480
478
  }
481
- nodeids.forEach(function (nodeid) {
482
- handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
479
+ };
480
+ if (checkStrictly) {
481
+ nodeList.forEach(handleSelect);
482
+ } else {
483
+ _xeUtils.default.eachTree(nodeList, handleSelect, {
484
+ children: transform ? mapChildrenField : childrenField
483
485
  });
484
- reactData.updateExpandedFlag++;
485
486
  }
486
- return $xeTree.$nextTick();
487
+ reactData.updateCheckboxFlag++;
488
+ $xeTree.updateCheckboxStatus();
487
489
  },
488
- toggleExpandNode: function toggleExpandNode(nodes) {
490
+ updateCheckboxChecked: function updateCheckboxChecked(nodeIds) {
489
491
  var $xeTree = this;
490
- var reactData = $xeTree.reactData;
491
- var internalData = $xeTree.internalData;
492
- var treeExpandedMaps = internalData.treeExpandedMaps;
493
- if (nodes) {
494
- if (!_xeUtils.default.isArray(nodes)) {
495
- nodes = [nodes];
492
+ $xeTree.setCheckboxByNodeId(nodeIds, true);
493
+ },
494
+ handleSetExpand: function handleSetExpand(nodeid, expanded, expandedMaps) {
495
+ if (expanded) {
496
+ if (!expandedMaps[nodeid]) {
497
+ expandedMaps[nodeid] = true;
498
+ }
499
+ } else {
500
+ if (expandedMaps[nodeid]) {
501
+ delete expandedMaps[nodeid];
496
502
  }
497
- nodes.forEach(function (node) {
498
- var nodeid = $xeTree.getNodeId(node);
499
- handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
500
- });
501
- reactData.updateExpandedFlag++;
502
503
  }
503
- return $xeTree.$nextTick();
504
504
  },
505
- setAllExpandNode: function setAllExpandNode(expanded) {
505
+ getParentElem: function getParentElem() {
506
+ var $xeTree = this;
507
+ var el = $xeTree.$refs.refElem;
508
+ return el ? el.parentElement : null;
509
+ },
510
+ calcTableHeight: function calcTableHeight(key) {
506
511
  var $xeTree = this;
507
512
  var props = $xeTree;
508
513
  var reactData = $xeTree.reactData;
509
- var internalData = $xeTree.internalData;
510
- var transform = props.transform;
511
- var treeExpandedMaps = internalData.treeExpandedMaps;
512
- var childrenField = $xeTree.computeChildrenField;
513
- var mapChildrenField = $xeTree.computeMapChildrenField;
514
- if (expanded) {
515
- _xeUtils.default.eachTree(reactData.treeList, function (node) {
516
- var childList = _xeUtils.default.get(node, childrenField);
517
- var hasChild = childList && childList.length;
518
- if (hasChild) {
519
- var nodeid = $xeTree.getNodeId(node);
520
- treeExpandedMaps[nodeid] = true;
514
+ var parentHeight = reactData.parentHeight;
515
+ var val = props[key];
516
+ var num = 0;
517
+ if (val) {
518
+ if (val === '100%' || val === 'auto') {
519
+ num = parentHeight;
520
+ } else {
521
+ if ((0, _dom.isScale)(val)) {
522
+ num = Math.floor((_xeUtils.default.toInteger(val) || 1) / 100 * parentHeight);
523
+ } else {
524
+ num = _xeUtils.default.toNumber(val);
521
525
  }
522
- }, {
523
- children: transform ? mapChildrenField : childrenField
524
- });
525
- } else {
526
- internalData.treeExpandedMaps = {};
526
+ num = Math.max(40, num);
527
+ }
527
528
  }
528
- reactData.updateExpandedFlag++;
529
- return $xeTree.$nextTick();
529
+ return num;
530
530
  },
531
- reloadExpandNode: function reloadExpandNode(node) {
531
+ updateHeight: function updateHeight() {
532
532
  var $xeTree = this;
533
- var props = $xeTree;
534
- var lazy = props.lazy;
535
- if (lazy) {
536
- $xeTree.clearExpandLoaded(node);
537
- return $xeTree.handleAsyncTreeExpandChilds(node);
533
+ var reactData = $xeTree.reactData;
534
+ reactData.customHeight = $xeTree.calcTableHeight('height');
535
+ reactData.customMinHeight = $xeTree.calcTableHeight('minHeight');
536
+ reactData.customMaxHeight = $xeTree.calcTableHeight('maxHeight');
537
+ // 如果启用虚拟滚动,默认高度
538
+ if (reactData.scrollYLoad && !(reactData.customHeight || reactData.customMinHeight)) {
539
+ reactData.customHeight = 300;
538
540
  }
539
- return $xeTree.$nextTick();
540
541
  },
541
- clearExpandLoaded: function clearExpandLoaded(node) {
542
+ createNode: function createNode(records) {
543
+ var $xeTree = this;
544
+ var valueField = $xeTree.computeValueField;
545
+ return Promise.resolve(records.map(function (obj) {
546
+ var item = Object.assign({}, obj);
547
+ var nodeid = $xeTree.getNodeId(item);
548
+ if (!nodeid) {
549
+ nodeid = getNodeUniqueId();
550
+ _xeUtils.default.set(item, valueField, nodeid);
551
+ }
552
+ return item;
553
+ }));
554
+ },
555
+ cacheNodeMap: function cacheNodeMap() {
542
556
  var $xeTree = this;
543
- var props = $xeTree;
544
557
  var internalData = $xeTree.internalData;
545
- var lazy = props.lazy;
546
- var nodeMaps = internalData.nodeMaps;
547
- if (lazy) {
548
- var nodeItem = nodeMaps[$xeTree.getNodeId(node)];
549
- if (nodeItem) {
550
- nodeItem.treeLoaded = false;
558
+ var treeFullData = internalData.treeFullData;
559
+ var valueField = $xeTree.computeValueField;
560
+ var childrenField = $xeTree.computeChildrenField;
561
+ var keyMaps = {};
562
+ _xeUtils.default.eachTree(treeFullData, function (item, index, items, path, parent, nodes) {
563
+ var nodeid = $xeTree.getNodeId(item);
564
+ if (!nodeid) {
565
+ nodeid = getNodeUniqueId();
566
+ _xeUtils.default.set(item, valueField, nodeid);
551
567
  }
552
- }
553
- return $xeTree.$nextTick();
568
+ keyMaps[nodeid] = {
569
+ item: item,
570
+ index: index,
571
+ items: items,
572
+ parent: parent,
573
+ nodes: nodes,
574
+ level: nodes.length,
575
+ treeIndex: index,
576
+ lineCount: 0,
577
+ treeLoaded: false
578
+ };
579
+ }, {
580
+ children: childrenField
581
+ });
582
+ internalData.nodeMaps = keyMaps;
554
583
  },
555
- /**
556
- * 用于树结构,给行数据加载子节点
557
- */
558
- loadChildrenNode: function loadChildrenNode(node, childRecords) {
584
+ updateAfterDataIndex: function updateAfterDataIndex() {
559
585
  var $xeTree = this;
560
586
  var props = $xeTree;
561
587
  var internalData = $xeTree.internalData;
562
- var lazy = props.lazy,
563
- transform = props.transform;
564
- var nodeMaps = internalData.nodeMaps;
565
- if (!lazy) {
566
- return Promise.resolve([]);
567
- }
588
+ var transform = props.transform;
589
+ var afterTreeList = internalData.afterTreeList,
590
+ nodeMaps = internalData.nodeMaps;
568
591
  var childrenField = $xeTree.computeChildrenField;
569
- var parentNodeItem = nodeMaps[$xeTree.getNodeId(node)];
570
- var parentLevel = parentNodeItem ? parentNodeItem.level : 0;
571
- var parentNodes = parentNodeItem ? parentNodeItem.nodes : [];
572
- return $xeTree.createNode(childRecords).then(function (nodeList) {
573
- _xeUtils.default.eachTree(nodeList, function (childRow, index, items, path, parent, nodes) {
574
- var itemNodeId = $xeTree.getNodeId(childRow);
575
- nodeMaps[itemNodeId] = {
576
- item: node,
577
- itemIndex: -1,
592
+ var mapChildrenField = $xeTree.computeMapChildrenField;
593
+ _xeUtils.default.eachTree(afterTreeList, function (item, index, items) {
594
+ var nodeid = $xeTree.getNodeId(item);
595
+ var nodeItem = nodeMaps[nodeid];
596
+ if (nodeItem) {
597
+ nodeItem.items = items;
598
+ nodeItem.treeIndex = index;
599
+ } else {
600
+ var rest = {
601
+ item: item,
602
+ index: index,
578
603
  items: items,
579
- parent: parent || parentNodeItem.item,
580
- nodes: parentNodes.concat(nodes),
581
- level: parentLevel + nodes.length,
604
+ parent: parent,
605
+ nodes: [],
606
+ level: 0,
607
+ treeIndex: index,
582
608
  lineCount: 0,
583
609
  treeLoaded: false
584
610
  };
585
- }, {
586
- children: childrenField
587
- });
588
- node[childrenField] = nodeList;
589
- if (transform) {
590
- node[childrenField] = nodeList;
611
+ nodeMaps[nodeid] = rest;
591
612
  }
592
- $xeTree.updateNodeLine(node);
593
- return nodeList;
613
+ }, {
614
+ children: transform ? mapChildrenField : childrenField
594
615
  });
595
616
  },
596
- getNodeId: function getNodeId(node) {
617
+ updateAfterFullData: function updateAfterFullData() {
597
618
  var $xeTree = this;
598
- var valueField = $xeTree.computeValueField;
599
- var nodeid = _xeUtils.default.get(node, valueField);
600
- return _xeUtils.default.eqNull(nodeid) ? '' : encodeURIComponent(nodeid);
619
+ var props = $xeTree;
620
+ var internalData = $xeTree.internalData;
621
+ var transform = props.transform,
622
+ filterValue = props.filterValue;
623
+ var treeFullData = internalData.treeFullData,
624
+ lastFilterValue = internalData.lastFilterValue;
625
+ var titleField = $xeTree.computeTitleField;
626
+ var childrenField = $xeTree.computeChildrenField;
627
+ var mapChildrenField = $xeTree.computeMapChildrenField;
628
+ var filterOpts = $xeTree.computeFilterOpts;
629
+ var autoExpandAll = filterOpts.autoExpandAll,
630
+ beforeFilterMethod = filterOpts.beforeFilterMethod,
631
+ filterMethod = filterOpts.filterMethod,
632
+ afterFilterMethod = filterOpts.afterFilterMethod;
633
+ var fullList = treeFullData;
634
+ var treeList = fullList;
635
+ var filterStr = '';
636
+ if (filterValue || filterValue === 0) {
637
+ filterStr = "".concat(filterValue);
638
+ var handleSearch = filterMethod ? function (item) {
639
+ return filterMethod({
640
+ $tree: $xeTree,
641
+ node: item,
642
+ filterValue: filterStr
643
+ });
644
+ } : function (item) {
645
+ return String(item[titleField]).toLowerCase().indexOf(filterStr) > -1;
646
+ };
647
+ var bafParams = {
648
+ $tree: $xeTree,
649
+ filterValue: filterStr
650
+ };
651
+ if (beforeFilterMethod) {
652
+ beforeFilterMethod(bafParams);
653
+ }
654
+ if (transform) {
655
+ treeList = _xeUtils.default.searchTree(treeFullData, handleSearch, {
656
+ children: childrenField,
657
+ mapChildren: mapChildrenField,
658
+ isEvery: true
659
+ });
660
+ fullList = treeList;
661
+ } else {
662
+ fullList = treeFullData.filter(handleSearch);
663
+ }
664
+ internalData.lastFilterValue = filterStr;
665
+ $xeTree.$nextTick(function () {
666
+ // 筛选时自动展开
667
+ if (autoExpandAll) {
668
+ $xeTree.setAllExpandNode(true).then(function () {
669
+ if (afterFilterMethod) {
670
+ afterFilterMethod(bafParams);
671
+ }
672
+ });
673
+ } else {
674
+ if (afterFilterMethod) {
675
+ afterFilterMethod(bafParams);
676
+ }
677
+ }
678
+ });
679
+ } else {
680
+ if (transform) {
681
+ treeList = _xeUtils.default.searchTree(treeFullData, function () {
682
+ return true;
683
+ }, {
684
+ children: childrenField,
685
+ mapChildren: mapChildrenField,
686
+ isEvery: true
687
+ });
688
+ fullList = treeList;
689
+ if (lastFilterValue) {
690
+ var _bafParams = {
691
+ $tree: $xeTree,
692
+ filterValue: filterStr
693
+ };
694
+ if (beforeFilterMethod) {
695
+ beforeFilterMethod(_bafParams);
696
+ }
697
+ // 取消筛选时自动收起
698
+ $xeTree.$nextTick(function () {
699
+ if (autoExpandAll) {
700
+ $xeTree.clearAllExpandNode().then(function () {
701
+ if (afterFilterMethod) {
702
+ afterFilterMethod(_bafParams);
703
+ }
704
+ });
705
+ } else {
706
+ if (afterFilterMethod) {
707
+ afterFilterMethod(_bafParams);
708
+ }
709
+ }
710
+ });
711
+ }
712
+ }
713
+ internalData.lastFilterValue = '';
714
+ }
715
+ internalData.afterVisibleList = fullList;
716
+ internalData.afterTreeList = treeList;
717
+ $xeTree.updateAfterDataIndex();
601
718
  },
602
- isExpandByNode: function isExpandByNode(node) {
719
+ /**
720
+ * 如果为虚拟树、则将树结构拍平
721
+ */
722
+ handleTreeToList: function handleTreeToList() {
603
723
  var $xeTree = this;
604
- var reactData = $xeTree.reactData;
724
+ var props = $xeTree;
605
725
  var internalData = $xeTree.internalData;
606
- var updateExpandedFlag = reactData.updateExpandedFlag;
607
- var treeExpandedMaps = internalData.treeExpandedMaps;
608
- var nodeid = $xeTree.getNodeId(node);
609
- return !!(updateExpandedFlag && treeExpandedMaps[nodeid]);
726
+ var transform = props.transform;
727
+ var afterTreeList = internalData.afterTreeList,
728
+ treeExpandedMaps = internalData.treeExpandedMaps;
729
+ var mapChildrenField = $xeTree.computeMapChildrenField;
730
+ var expandMaps = {};
731
+ if (transform) {
732
+ var fullData = [];
733
+ _xeUtils.default.eachTree(afterTreeList, function (item, index, items, path, parentRow) {
734
+ var nodeid = $xeTree.getNodeId(item);
735
+ var parentNodeid = $xeTree.getNodeId(parentRow);
736
+ if (!parentRow || expandMaps[parentNodeid] && treeExpandedMaps[parentNodeid]) {
737
+ expandMaps[nodeid] = 1;
738
+ fullData.push(item);
739
+ }
740
+ }, {
741
+ children: mapChildrenField
742
+ });
743
+ $xeTree.updateScrollYStatus(fullData);
744
+ internalData.afterVisibleList = fullData;
745
+ return fullData;
746
+ }
747
+ return internalData.afterVisibleList;
610
748
  },
611
- isCheckedByRadioNodeId: function isCheckedByRadioNodeId(nodeid) {
749
+ handleData: function handleData(force) {
612
750
  var $xeTree = this;
613
751
  var reactData = $xeTree.reactData;
614
- var selectRadioKey = reactData.selectRadioKey;
615
- return selectRadioKey === nodeid;
616
- },
617
- isCheckedByRadioNode: function isCheckedByRadioNode(node) {
752
+ var internalData = $xeTree.internalData;
753
+ var scrollYLoad = reactData.scrollYLoad;
754
+ var scrollYStore = internalData.scrollYStore;
755
+ var fullList = internalData.afterVisibleList;
756
+ if (force) {
757
+ // 更新数据,处理筛选和排序
758
+ $xeTree.updateAfterFullData();
759
+ // 如果为虚拟树,将树结构拍平
760
+ fullList = $xeTree.handleTreeToList();
761
+ }
762
+ var treeList = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
763
+ reactData.treeList = treeList;
764
+ },
765
+ triggerSearchEvent: _xeUtils.default.debounce(function () {
766
+ var $xeSelect = this;
767
+ $xeSelect.handleData(true);
768
+ }, 350, {
769
+ trailing: true
770
+ }),
771
+ loadData: function loadData(list) {
618
772
  var $xeTree = this;
619
- return $xeTree.isCheckedByRadioNodeId($xeTree.getNodeId(node));
773
+ var props = $xeTree;
774
+ var internalData = $xeTree.internalData;
775
+ var expandAll = props.expandAll,
776
+ transform = props.transform;
777
+ var initialized = internalData.initialized,
778
+ scrollYStore = internalData.scrollYStore;
779
+ var keyField = $xeTree.computeKeyField;
780
+ var parentField = $xeTree.computeParentField;
781
+ var childrenField = $xeTree.computeChildrenField;
782
+ var fullData = transform ? _xeUtils.default.toArrayTree(list, {
783
+ key: keyField,
784
+ parentKey: parentField,
785
+ mapChildren: childrenField
786
+ }) : list ? list.slice(0) : [];
787
+ internalData.treeFullData = fullData;
788
+ Object.assign(scrollYStore, {
789
+ startIndex: 0,
790
+ endIndex: 1,
791
+ visibleSize: 0
792
+ });
793
+ var sYLoad = $xeTree.updateScrollYStatus(fullData);
794
+ $xeTree.cacheNodeMap();
795
+ $xeTree.handleData(true);
796
+ if (sYLoad) {
797
+ if (!(props.height || props.maxHeight)) {
798
+ (0, _log.errLog)('vxe.error.reqProp', ['height | max-height | virtual-y-config.enabled=false']);
799
+ }
800
+ }
801
+ return $xeTree.computeScrollLoad().then(function () {
802
+ if (!initialized) {
803
+ if (list && list.length) {
804
+ internalData.initialized = true;
805
+ if (expandAll) {
806
+ $xeTree.setAllExpandNode(true);
807
+ }
808
+ $xeTree.setCheckboxByNodeId(props.checkNodeKeys || [], true);
809
+ }
810
+ }
811
+ $xeTree.updateHeight();
812
+ $xeTree.refreshScroll();
813
+ });
620
814
  },
621
- isCheckedByCheckboxNodeId: function isCheckedByCheckboxNodeId(nodeid) {
815
+ updateScrollYStatus: function updateScrollYStatus(fullData) {
622
816
  var $xeTree = this;
817
+ var props = $xeTree;
623
818
  var reactData = $xeTree.reactData;
624
819
  var internalData = $xeTree.internalData;
625
- var updateCheckboxFlag = reactData.updateCheckboxFlag;
626
- var selectCheckboxMaps = internalData.selectCheckboxMaps;
627
- return !!(updateCheckboxFlag && selectCheckboxMaps[nodeid]);
628
- },
629
- isCheckedByCheckboxNode: function isCheckedByCheckboxNode(node) {
630
- var $xeTree = this;
631
- return $xeTree.isCheckedByCheckboxNodeId($xeTree.getNodeId(node));
820
+ var transform = props.transform;
821
+ var virtualYOpts = $xeTree.computeVirtualYOpts;
822
+ var allList = fullData || internalData.treeFullData;
823
+ // 如果gt为0,则总是启用
824
+ var scrollYLoad = !!transform && !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt < allList.length);
825
+ reactData.scrollYLoad = scrollYLoad;
826
+ return scrollYLoad;
632
827
  },
633
- isIndeterminateByCheckboxNodeid: function isIndeterminateByCheckboxNodeid(nodeid) {
828
+ updateYSpace: function updateYSpace() {
634
829
  var $xeTree = this;
635
830
  var reactData = $xeTree.reactData;
636
831
  var internalData = $xeTree.internalData;
637
- var updateCheckboxFlag = reactData.updateCheckboxFlag;
638
- var indeterminateRowMaps = internalData.indeterminateRowMaps;
639
- return !!(updateCheckboxFlag && indeterminateRowMaps[nodeid]);
832
+ var scrollYLoad = reactData.scrollYLoad;
833
+ var scrollYStore = internalData.scrollYStore,
834
+ afterVisibleList = internalData.afterVisibleList;
835
+ reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0;
836
+ reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0;
640
837
  },
641
- isIndeterminateByCheckboxNode: function isIndeterminateByCheckboxNode(node) {
838
+ updateYData: function updateYData() {
642
839
  var $xeTree = this;
643
- return $xeTree.isIndeterminateByCheckboxNodeid($xeTree.getNodeId(node));
840
+ $xeTree.handleData();
841
+ $xeTree.updateYSpace();
644
842
  },
645
- getCheckboxIndeterminateNodes: function getCheckboxIndeterminateNodes() {
843
+ computeScrollLoad: function computeScrollLoad() {
646
844
  var $xeTree = this;
845
+ var reactData = $xeTree.reactData;
647
846
  var internalData = $xeTree.internalData;
648
- var nodeMaps = internalData.nodeMaps,
649
- indeterminateRowMaps = internalData.indeterminateRowMaps;
650
- var list = [];
651
- _xeUtils.default.each(indeterminateRowMaps, function (item, nodeid) {
652
- var nodeItem = nodeMaps[nodeid];
653
- if (nodeItem) {
654
- list.push(nodeItem.item);
847
+ return $xeTree.$nextTick().then(function () {
848
+ var scrollYLoad = reactData.scrollYLoad;
849
+ var scrollYStore = internalData.scrollYStore;
850
+ var virtualBodyElem = $xeTree.$refs.refVirtualBody;
851
+ var virtualYOpts = $xeTree.computeVirtualYOpts;
852
+ var rowHeight = 0;
853
+ var firstItemElem;
854
+ if (virtualBodyElem) {
855
+ if (!firstItemElem) {
856
+ firstItemElem = virtualBodyElem.children[0];
857
+ }
858
+ }
859
+ if (firstItemElem) {
860
+ rowHeight = firstItemElem.offsetHeight;
861
+ }
862
+ rowHeight = Math.max(20, rowHeight);
863
+ scrollYStore.rowHeight = rowHeight;
864
+ // 计算 Y 逻辑
865
+ if (scrollYLoad) {
866
+ var scrollBodyElem = $xeTree.$refs.refVirtualWrapper;
867
+ var visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0);
868
+ var offsetYSize = Math.max(0, Math.min(2, _xeUtils.default.toNumber(virtualYOpts.oSize)));
869
+ scrollYStore.offsetSize = offsetYSize;
870
+ scrollYStore.visibleSize = visibleYSize;
871
+ scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex);
872
+ $xeTree.updateYData();
873
+ } else {
874
+ $xeTree.updateYSpace();
655
875
  }
656
876
  });
657
- return list;
658
877
  },
659
- emitCheckboxMode: function emitCheckboxMode(value) {
660
- var $xeTree = this;
661
- $xeTree.$emit('update:checkNodeKeys', value);
662
- },
663
- emitRadioMode: function emitRadioMode(value) {
878
+ /**
879
+ * 如果有滚动条,则滚动到对应的位置
880
+ * @param {Number} scrollLeft 左距离
881
+ * @param {Number} scrollTop 上距离
882
+ */
883
+ scrollTo: function scrollTo(scrollLeft, scrollTop) {
664
884
  var $xeTree = this;
665
- $xeTree.$emit('update:checkNodeKey', value);
885
+ var reactData = $xeTree.reactData;
886
+ var scrollBodyElem = $xeTree.$refs.refVirtualWrapper;
887
+ if (scrollBodyElem) {
888
+ if (_xeUtils.default.isNumber(scrollLeft)) {
889
+ scrollBodyElem.scrollLeft = scrollLeft;
890
+ }
891
+ if (_xeUtils.default.isNumber(scrollTop)) {
892
+ scrollBodyElem.scrollTop = scrollTop;
893
+ }
894
+ }
895
+ if (reactData.scrollYLoad) {
896
+ return new Promise(function (resolve) {
897
+ setTimeout(function () {
898
+ $xeTree.$nextTick(function () {
899
+ resolve();
900
+ });
901
+ }, 50);
902
+ });
903
+ }
904
+ return $xeTree.$nextTick();
666
905
  },
667
- getRadioNodeId: function getRadioNodeId() {
906
+ /**
907
+ * 刷新滚动条
908
+ */
909
+ refreshScroll: function refreshScroll() {
668
910
  var $xeTree = this;
669
- var reactData = $xeTree.reactData;
670
- return reactData.selectRadioKey || null;
911
+ var internalData = $xeTree.internalData;
912
+ var lastScrollLeft = internalData.lastScrollLeft,
913
+ lastScrollTop = internalData.lastScrollTop;
914
+ return $xeTree.clearScroll().then(function () {
915
+ if (lastScrollLeft || lastScrollTop) {
916
+ internalData.lastScrollLeft = 0;
917
+ internalData.lastScrollTop = 0;
918
+ return scrollTo(lastScrollLeft, lastScrollTop);
919
+ }
920
+ });
671
921
  },
672
- setRadioNodeId: function setRadioNodeId(nodeKey) {
922
+ /**
923
+ * 重新计算列表
924
+ */
925
+ recalculate: function recalculate() {
673
926
  var $xeTree = this;
674
927
  var reactData = $xeTree.reactData;
675
- reactData.selectRadioKey = nodeKey;
928
+ var internalData = $xeTree.internalData;
929
+ var scrollYStore = internalData.scrollYStore;
930
+ var rowHeight = scrollYStore.rowHeight;
931
+ var el = $xeTree.$refs.refElem;
932
+ if (el && el.clientWidth && el.clientHeight) {
933
+ var parentEl = $xeTree.getParentElem();
934
+ var headerWrapperEl = $xeTree.$refs.refHeaderWrapperElem;
935
+ var footerWrapperEl = $xeTree.$refs.refFooterWrapperElem;
936
+ var headHeight = headerWrapperEl ? headerWrapperEl.clientHeight : 0;
937
+ var footHeight = footerWrapperEl ? footerWrapperEl.clientHeight : 0;
938
+ if (parentEl) {
939
+ var parentPaddingSize = (0, _dom.getPaddingTopBottomSize)(parentEl);
940
+ reactData.parentHeight = Math.max(headHeight + footHeight + rowHeight, parentEl.clientHeight - parentPaddingSize - headHeight - footHeight);
941
+ }
942
+ $xeTree.updateHeight();
943
+ return $xeTree.computeScrollLoad();
944
+ }
676
945
  return $xeTree.$nextTick();
677
946
  },
678
- getRadioNode: function getRadioNode() {
947
+ loadYData: function loadYData(evnt) {
679
948
  var $xeTree = this;
680
- var reactData = $xeTree.reactData;
681
949
  var internalData = $xeTree.internalData;
682
- var selectRadioKey = reactData.selectRadioKey;
683
- var nodeMaps = internalData.nodeMaps;
684
- if (selectRadioKey) {
685
- var nodeItem = nodeMaps[selectRadioKey];
686
- if (nodeItem) {
687
- return nodeItem.item;
950
+ var scrollYStore = internalData.scrollYStore;
951
+ var startIndex = scrollYStore.startIndex,
952
+ endIndex = scrollYStore.endIndex,
953
+ visibleSize = scrollYStore.visibleSize,
954
+ offsetSize = scrollYStore.offsetSize,
955
+ rowHeight = scrollYStore.rowHeight;
956
+ var scrollBodyElem = evnt.target;
957
+ var scrollTop = scrollBodyElem.scrollTop;
958
+ var toVisibleIndex = Math.floor(scrollTop / rowHeight);
959
+ var offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
960
+ var offsetEndIndex = toVisibleIndex + visibleSize + offsetSize;
961
+ if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
962
+ if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
963
+ scrollYStore.startIndex = offsetStartIndex;
964
+ scrollYStore.endIndex = offsetEndIndex;
965
+ $xeTree.updateYData();
688
966
  }
689
967
  }
690
- return null;
691
968
  },
692
- setRadioNode: function setRadioNode(node) {
969
+ scrollEvent: function scrollEvent(evnt) {
693
970
  var $xeTree = this;
694
971
  var reactData = $xeTree.reactData;
695
- if (node) {
696
- reactData.selectRadioKey = $xeTree.getNodeId(node);
972
+ var internalData = $xeTree.internalData;
973
+ var scrollBodyElem = evnt.target;
974
+ var scrollTop = scrollBodyElem.scrollTop;
975
+ var scrollLeft = scrollBodyElem.scrollLeft;
976
+ var isX = scrollLeft !== internalData.lastScrollLeft;
977
+ var isY = scrollTop !== internalData.lastScrollTop;
978
+ internalData.lastScrollTop = scrollTop;
979
+ internalData.lastScrollLeft = scrollLeft;
980
+ if (reactData.scrollYLoad) {
981
+ $xeTree.loadYData(evnt);
982
+ }
983
+ internalData.lastScrollTime = Date.now();
984
+ $xeTree.dispatchEvent('scroll', {
985
+ scrollLeft: scrollLeft,
986
+ scrollTop: scrollTop,
987
+ isX: isX,
988
+ isY: isY
989
+ }, evnt);
990
+ },
991
+ clearScroll: function clearScroll() {
992
+ var $xeTree = this;
993
+ var internalData = $xeTree.internalData;
994
+ var scrollBodyElem = $xeTree.$refs.refVirtualWrapper;
995
+ if (scrollBodyElem) {
996
+ scrollBodyElem.scrollTop = 0;
997
+ scrollBodyElem.scrollLeft = 0;
697
998
  }
999
+ internalData.lastScrollTop = 0;
1000
+ internalData.lastScrollLeft = 0;
698
1001
  return $xeTree.$nextTick();
699
1002
  },
700
- setCheckboxNode: function setCheckboxNode(nodeList, checked) {
701
- var $xeTree = this;
702
- if (nodeList) {
703
- if (!_xeUtils.default.isArray(nodeList)) {
704
- nodeList = [nodeList];
705
- }
706
- $xeTree.handleCheckedCheckboxNode(nodeList, checked);
707
- }
708
- return $xeTree.$nextTick();
709
- },
710
- setCheckboxByNodeId: function setCheckboxByNodeId(nodeIds, checked) {
711
- var $xeTree = this;
712
- var internalData = $xeTree.internalData;
713
- var nodeMaps = internalData.nodeMaps;
714
- if (nodeIds) {
715
- if (!_xeUtils.default.isArray(nodeIds)) {
716
- nodeIds = [nodeIds];
717
- }
718
- var nodeList = [];
719
- nodeIds.forEach(function (nodeid) {
720
- var nodeItem = nodeMaps[nodeid];
721
- if (nodeItem) {
722
- nodeList.push(nodeItem.item);
723
- }
724
- });
725
- $xeTree.handleCheckedCheckboxNode(nodeList, checked);
726
- }
727
- return $xeTree.$nextTick();
728
- },
729
- handleCheckedCheckboxNode: function handleCheckedCheckboxNode(nodeList, checked) {
730
- var $xeTree = this;
731
- var props = $xeTree;
732
- var reactData = $xeTree.reactData;
733
- var internalData = $xeTree.internalData;
734
- var transform = props.transform;
735
- var selectCheckboxMaps = internalData.selectCheckboxMaps;
736
- var mapChildrenField = $xeTree.computeMapChildrenField;
737
- var childrenField = $xeTree.computeChildrenField;
738
- var checkboxOpts = $xeTree.computeCheckboxOpts;
739
- var checkStrictly = checkboxOpts.checkStrictly;
740
- var handleSelect = function handleSelect(node) {
741
- var nodeid = $xeTree.getNodeId(node);
742
- if (checked) {
743
- if (!selectCheckboxMaps[nodeid]) {
744
- selectCheckboxMaps[nodeid] = node;
745
- }
746
- } else {
747
- if (selectCheckboxMaps[nodeid]) {
748
- delete selectCheckboxMaps[nodeid];
749
- }
750
- }
751
- };
752
- if (checkStrictly) {
753
- nodeList.forEach(handleSelect);
754
- } else {
755
- _xeUtils.default.eachTree(nodeList, handleSelect, {
756
- children: transform ? mapChildrenField : childrenField
757
- });
758
- }
759
- reactData.updateCheckboxFlag++;
760
- $xeTree.updateCheckboxStatus();
761
- },
762
- updateCheckboxChecked: function updateCheckboxChecked(nodeIds) {
763
- var $xeTree = this;
764
- $xeTree.setCheckboxByNodeId(nodeIds, true);
765
- },
766
- createNode: function createNode(records) {
767
- var $xeTree = this;
768
- var valueField = $xeTree.computeValueField;
769
- return Promise.resolve(records.map(function (obj) {
770
- var item = Object.assign({}, obj);
771
- var nodeid = $xeTree.getNodeId(item);
772
- if (!nodeid) {
773
- nodeid = getNodeUniqueId();
774
- _xeUtils.default.set(item, valueField, nodeid);
775
- }
776
- return item;
777
- }));
778
- },
779
- cacheNodeMap: function cacheNodeMap() {
780
- var $xeTree = this;
781
- var props = $xeTree;
782
- var reactData = $xeTree.reactData;
783
- var internalData = $xeTree.internalData;
784
- var transform = props.transform;
785
- var treeList = reactData.treeList;
786
- var valueField = $xeTree.computeValueField;
787
- var childrenField = $xeTree.computeChildrenField;
788
- var mapChildrenField = $xeTree.computeMapChildrenField;
789
- var keyMaps = {};
790
- _xeUtils.default.eachTree(treeList, function (item, itemIndex, items, path, parent, nodes) {
791
- var nodeid = $xeTree.getNodeId(item);
792
- if (!nodeid) {
793
- nodeid = getNodeUniqueId();
794
- _xeUtils.default.set(item, valueField, nodeid);
795
- }
796
- keyMaps[nodeid] = {
797
- item: item,
798
- itemIndex: itemIndex,
799
- items: items,
800
- parent: parent,
801
- nodes: nodes,
802
- level: nodes.length,
803
- lineCount: 0,
804
- treeLoaded: false
805
- };
806
- }, {
807
- children: transform ? mapChildrenField : childrenField
808
- });
809
- internalData.nodeMaps = keyMaps;
810
- },
811
- loadTreeData: function loadTreeData(list) {
812
- var $xeTree = this;
813
- var props = $xeTree;
814
- var reactData = $xeTree.reactData;
815
- var internalData = $xeTree.internalData;
816
- var expandAll = props.expandAll,
817
- transform = props.transform;
818
- var initialized = internalData.initialized;
819
- var keyField = $xeTree.computeKeyField;
820
- var parentField = $xeTree.computeParentField;
821
- var mapChildrenField = $xeTree.computeMapChildrenField;
822
- if (transform) {
823
- reactData.treeList = _xeUtils.default.toArrayTree(list, {
824
- key: keyField,
825
- parentKey: parentField,
826
- mapChildren: mapChildrenField
827
- });
828
- } else {
829
- reactData.treeList = list ? list.slice(0) : [];
830
- }
831
- $xeTree.cacheNodeMap();
832
- if (!initialized) {
833
- if (list && list.length) {
834
- internalData.initialized = true;
835
- if (expandAll) {
836
- $xeTree.setAllExpandNode(true);
837
- }
838
- $xeTree.setCheckboxByNodeId(props.checkNodeKeys || [], true);
839
- }
840
- }
841
- },
842
- handleCountLine: function handleCountLine(item, isRoot, nodeItem) {
843
- var $xeTree = this;
844
- var internalData = $xeTree.internalData;
845
- var treeExpandedMaps = internalData.treeExpandedMaps;
846
- var childrenField = $xeTree.computeChildrenField;
847
- var nodeid = $xeTree.getNodeId(item);
848
- nodeItem.lineCount++;
849
- if (treeExpandedMaps[nodeid]) {
850
- _xeUtils.default.arrayEach(item[childrenField], function (childItem, childIndex, childList) {
851
- if (!isRoot || childIndex < childList.length - 1) {
852
- $xeTree.handleCountLine(childItem, false, nodeItem);
853
- }
854
- });
855
- }
856
- },
857
- updateNodeLine: function updateNodeLine(node) {
858
- var $xeTree = this;
859
- var internalData = $xeTree.internalData;
860
- var nodeMaps = internalData.nodeMaps;
861
- if (node) {
862
- var nodeid = $xeTree.getNodeId(node);
863
- var nodeItem = nodeMaps[nodeid];
864
- if (nodeItem) {
865
- _xeUtils.default.lastArrayEach(nodeItem.nodes, function (childItem) {
866
- var nodeid = $xeTree.getNodeId(childItem);
867
- var nodeItem = nodeMaps[nodeid];
868
- if (nodeItem) {
869
- nodeItem.lineCount = 0;
870
- $xeTree.handleCountLine(childItem, true, nodeItem);
871
- }
872
- });
873
- }
874
- }
875
- },
876
1003
  handleNodeClickEvent: function handleNodeClickEvent(evnt, node) {
877
1004
  var $xeTree = this;
878
1005
  var props = $xeTree;
@@ -956,7 +1083,6 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
956
1083
  if (!checkStrictly && $xeTree.isCheckedByCheckboxNodeId(nodeid)) {
957
1084
  $xeTree.handleCheckedCheckboxNode(childRows, true);
958
1085
  }
959
- $xeTree.updateNodeLine(node);
960
1086
  $xeTree.dispatchEvent('load-success', {
961
1087
  node: node,
962
1088
  data: childRecords
@@ -964,7 +1090,6 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
964
1090
  return $xeTree.$nextTick();
965
1091
  });
966
1092
  } else {
967
- $xeTree.updateNodeLine(node);
968
1093
  $xeTree.dispatchEvent('load-success', {
969
1094
  node: node,
970
1095
  data: childRecords
@@ -976,13 +1101,14 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
976
1101
  if (treeExpandLazyLoadedMaps[nodeid]) {
977
1102
  treeExpandLazyLoadedMaps[nodeid] = false;
978
1103
  }
979
- $xeTree.updateNodeLine(node);
980
1104
  $xeTree.dispatchEvent('load-error', {
981
1105
  node: node,
982
1106
  data: e
983
1107
  }, new Event('load-error'));
984
1108
  }).finally(function () {
985
- return $xeTree.$nextTick();
1109
+ $xeTree.handleTreeToList();
1110
+ $xeTree.handleData();
1111
+ return $xeTree.recalculate();
986
1112
  });
987
1113
  } else {
988
1114
  resolve();
@@ -1058,8 +1184,11 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1058
1184
  });
1059
1185
  }
1060
1186
  reactData.updateExpandedFlag++;
1061
- expandNodes.forEach($xeTree.updateNodeLine);
1062
- return Promise.all(result);
1187
+ $xeTree.handleTreeToList();
1188
+ $xeTree.handleData();
1189
+ return Promise.all(result).then(function () {
1190
+ return $xeTree.recalculate();
1191
+ });
1063
1192
  },
1064
1193
  toggleExpandEvent: function toggleExpandEvent(evnt, node) {
1065
1194
  var $xeTree = this;
@@ -1081,9 +1210,9 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1081
1210
  var reactData = $xeTree.reactData;
1082
1211
  var internalData = $xeTree.internalData;
1083
1212
  var transform = props.transform;
1084
- var treeList = reactData.treeList;
1085
1213
  var selectCheckboxMaps = internalData.selectCheckboxMaps,
1086
- indeterminateRowMaps = internalData.indeterminateRowMaps;
1214
+ indeterminateRowMaps = internalData.indeterminateRowMaps,
1215
+ afterTreeList = internalData.afterTreeList;
1087
1216
  var childrenField = $xeTree.computeChildrenField;
1088
1217
  var mapChildrenField = $xeTree.computeMapChildrenField;
1089
1218
  var checkboxOpts = $xeTree.computeCheckboxOpts;
@@ -1092,7 +1221,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1092
1221
  if (!checkStrictly) {
1093
1222
  var childRowMaps = {};
1094
1223
  var childRowList = [];
1095
- _xeUtils.default.eachTree(treeList, function (node) {
1224
+ _xeUtils.default.eachTree(afterTreeList, function (node) {
1096
1225
  var nodeid = $xeTree.getNodeId(node);
1097
1226
  var childList = node[childrenField];
1098
1227
  if (childList && childList.length && !childRowMaps[nodeid]) {
@@ -1108,11 +1237,13 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1108
1237
  var childList = vals[2];
1109
1238
  var sLen = 0; // 已选
1110
1239
  var hLen = 0; // 半选
1111
- var vLen = 0; // 有效行
1240
+ var vLen = 0; // 有效子行
1241
+ var cLen = childList.length; // 子行
1112
1242
  childList.forEach(checkMethod ? function (item) {
1113
1243
  var childNodeid = $xeTree.getNodeId(item);
1114
1244
  var isSelect = selectCheckboxMaps[childNodeid];
1115
1245
  if (checkMethod({
1246
+ $tree: $xeTree,
1116
1247
  node: item
1117
1248
  })) {
1118
1249
  if (isSelect) {
@@ -1138,8 +1269,25 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1138
1269
  }
1139
1270
  vLen++;
1140
1271
  });
1141
- var isSelected = sLen >= vLen;
1142
- var halfSelect = !isSelected && (sLen >= 1 || hLen >= 1);
1272
+ var isSelected = false;
1273
+ if (cLen > 0) {
1274
+ if (vLen > 0) {
1275
+ isSelected = (sLen > 0 || hLen > 0) && sLen >= vLen;
1276
+ } else {
1277
+ // 如果存在子项禁用
1278
+ if (sLen > 0 && sLen >= vLen) {
1279
+ isSelected = true;
1280
+ } else if (selectCheckboxMaps[nodeid]) {
1281
+ isSelected = true;
1282
+ } else {
1283
+ isSelected = false;
1284
+ }
1285
+ }
1286
+ } else {
1287
+ // 如果无子项
1288
+ isSelected = selectCheckboxMaps[nodeid];
1289
+ }
1290
+ var halfSelect = !isSelected && (sLen > 0 || hLen > 0);
1143
1291
  if (isSelected) {
1144
1292
  selectCheckboxMaps[nodeid] = node;
1145
1293
  if (indeterminateRowMaps[nodeid]) {
@@ -1158,126 +1306,495 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1158
1306
  }
1159
1307
  }
1160
1308
  });
1161
- reactData.updateCheckboxFlag++;
1309
+ reactData.updateCheckboxFlag++;
1310
+ }
1311
+ },
1312
+ changeCheckboxEvent: function changeCheckboxEvent(evnt, node) {
1313
+ var $xeTree = this;
1314
+ var props = $xeTree;
1315
+ var reactData = $xeTree.reactData;
1316
+ var internalData = $xeTree.internalData;
1317
+ evnt.preventDefault();
1318
+ evnt.stopPropagation();
1319
+ var transform = props.transform;
1320
+ var selectCheckboxMaps = internalData.selectCheckboxMaps;
1321
+ var childrenField = $xeTree.computeChildrenField;
1322
+ var mapChildrenField = $xeTree.computeMapChildrenField;
1323
+ var checkboxOpts = $xeTree.computeCheckboxOpts;
1324
+ var checkStrictly = checkboxOpts.checkStrictly,
1325
+ checkMethod = checkboxOpts.checkMethod;
1326
+ var isDisabled = !!checkMethod;
1327
+ if (checkMethod) {
1328
+ isDisabled = !checkMethod({
1329
+ $tree: $xeTree,
1330
+ node: node
1331
+ });
1332
+ }
1333
+ if (isDisabled) {
1334
+ return;
1335
+ }
1336
+ var nodeid = $xeTree.getNodeId(node);
1337
+ var isChecked = false;
1338
+ if (selectCheckboxMaps[nodeid]) {
1339
+ delete selectCheckboxMaps[nodeid];
1340
+ } else {
1341
+ isChecked = true;
1342
+ selectCheckboxMaps[nodeid] = node;
1343
+ }
1344
+ if (!checkStrictly) {
1345
+ _xeUtils.default.eachTree(_xeUtils.default.get(node, transform ? mapChildrenField : childrenField), function (childNode) {
1346
+ var childNodeid = $xeTree.getNodeId(childNode);
1347
+ if (isChecked) {
1348
+ if (!selectCheckboxMaps[childNodeid]) {
1349
+ selectCheckboxMaps[childNodeid] = true;
1350
+ }
1351
+ } else {
1352
+ if (selectCheckboxMaps[childNodeid]) {
1353
+ delete selectCheckboxMaps[childNodeid];
1354
+ }
1355
+ }
1356
+ }, {
1357
+ children: transform ? mapChildrenField : childrenField
1358
+ });
1359
+ }
1360
+ reactData.updateCheckboxFlag++;
1361
+ $xeTree.updateCheckboxStatus();
1362
+ var value = _xeUtils.default.keys(selectCheckboxMaps);
1363
+ $xeTree.emitCheckboxMode(value);
1364
+ $xeTree.dispatchEvent('checkbox-change', {
1365
+ node: node,
1366
+ value: value,
1367
+ checked: isChecked
1368
+ }, evnt);
1369
+ },
1370
+ changeCurrentEvent: function changeCurrentEvent(evnt, node) {
1371
+ var $xeTree = this;
1372
+ var reactData = $xeTree.reactData;
1373
+ evnt.preventDefault();
1374
+ var nodeOpts = $xeTree.computeNodeOpts;
1375
+ var currentMethod = nodeOpts.currentMethod,
1376
+ trigger = nodeOpts.trigger;
1377
+ var childrenField = $xeTree.computeChildrenField;
1378
+ var childList = _xeUtils.default.get(node, childrenField);
1379
+ var hasChild = childList && childList.length;
1380
+ var isDisabled = !!currentMethod;
1381
+ if (trigger === 'child') {
1382
+ if (hasChild) {
1383
+ return;
1384
+ }
1385
+ } else if (trigger === 'parent') {
1386
+ if (!hasChild) {
1387
+ return;
1388
+ }
1389
+ }
1390
+ if (currentMethod) {
1391
+ isDisabled = !currentMethod({
1392
+ node: node
1393
+ });
1394
+ }
1395
+ if (isDisabled) {
1396
+ return;
1397
+ }
1398
+ var isChecked = true;
1399
+ reactData.currentNode = node;
1400
+ $xeTree.dispatchEvent('current-change', {
1401
+ node: node,
1402
+ checked: isChecked
1403
+ }, evnt);
1404
+ },
1405
+ changeRadioEvent: function changeRadioEvent(evnt, node) {
1406
+ var $xeTree = this;
1407
+ var reactData = $xeTree.reactData;
1408
+ evnt.preventDefault();
1409
+ evnt.stopPropagation();
1410
+ var radioOpts = $xeTree.computeRadioOpts;
1411
+ var checkMethod = radioOpts.checkMethod;
1412
+ var isDisabled = !!checkMethod;
1413
+ if (checkMethod) {
1414
+ isDisabled = !checkMethod({
1415
+ $tree: $xeTree,
1416
+ node: node
1417
+ });
1418
+ }
1419
+ if (isDisabled) {
1420
+ return;
1421
+ }
1422
+ var isChecked = true;
1423
+ var value = $xeTree.getNodeId(node);
1424
+ reactData.selectRadioKey = value;
1425
+ $xeTree.emitRadioMode(value);
1426
+ $xeTree.dispatchEvent('radio-change', {
1427
+ node: node,
1428
+ value: value,
1429
+ checked: isChecked
1430
+ }, evnt);
1431
+ },
1432
+ handleGlobalResizeEvent: function handleGlobalResizeEvent() {
1433
+ var $xeTree = this;
1434
+ var el = $xeTree.$refs.refElem;
1435
+ if (!el || !el.clientWidth) {
1436
+ return;
1437
+ }
1438
+ $xeTree.recalculate();
1439
+ },
1440
+ reloadData: function reloadData(data) {
1441
+ var $xeTree = this;
1442
+ return $xeTree.loadData(data || []);
1443
+ },
1444
+ clearCurrentNode: function clearCurrentNode() {
1445
+ var $xeTree = this;
1446
+ var reactData = $xeTree.reactData;
1447
+ reactData.currentNode = null;
1448
+ return $xeTree.$nextTick();
1449
+ },
1450
+ getCurrentNodeId: function getCurrentNodeId() {
1451
+ var $xeTree = this;
1452
+ var reactData = $xeTree.reactData;
1453
+ var currentNode = reactData.currentNode;
1454
+ if (currentNode) {
1455
+ return $xeTree.getNodeId(currentNode);
1456
+ }
1457
+ return null;
1458
+ },
1459
+ getCurrentNode: function getCurrentNode() {
1460
+ var $xeTree = this;
1461
+ var reactData = $xeTree.reactData;
1462
+ var internalData = $xeTree.internalData;
1463
+ var currentNode = reactData.currentNode;
1464
+ var nodeMaps = internalData.nodeMaps;
1465
+ if (currentNode) {
1466
+ var nodeItem = nodeMaps[$xeTree.getNodeId(currentNode)];
1467
+ if (nodeItem) {
1468
+ return nodeItem.item;
1469
+ }
1470
+ }
1471
+ return null;
1472
+ },
1473
+ setCurrentNodeId: function setCurrentNodeId(nodeKey) {
1474
+ var $xeTree = this;
1475
+ var reactData = $xeTree.reactData;
1476
+ var internalData = $xeTree.internalData;
1477
+ var nodeMaps = internalData.nodeMaps;
1478
+ var nodeItem = nodeMaps[nodeKey];
1479
+ reactData.currentNode = nodeItem ? nodeItem.item : null;
1480
+ return $xeTree.$nextTick();
1481
+ },
1482
+ setCurrentNode: function setCurrentNode(node) {
1483
+ var $xeTree = this;
1484
+ var reactData = $xeTree.reactData;
1485
+ reactData.currentNode = node;
1486
+ return $xeTree.$nextTick();
1487
+ },
1488
+ clearRadioNode: function clearRadioNode() {
1489
+ var $xeTree = this;
1490
+ var reactData = $xeTree.reactData;
1491
+ reactData.selectRadioKey = null;
1492
+ return $xeTree.$nextTick();
1493
+ },
1494
+ getRadioNodeId: function getRadioNodeId() {
1495
+ var $xeTree = this;
1496
+ var reactData = $xeTree.reactData;
1497
+ return reactData.selectRadioKey || null;
1498
+ },
1499
+ getRadioNode: function getRadioNode() {
1500
+ var $xeTree = this;
1501
+ var reactData = $xeTree.reactData;
1502
+ var internalData = $xeTree.internalData;
1503
+ var selectRadioKey = reactData.selectRadioKey;
1504
+ var nodeMaps = internalData.nodeMaps;
1505
+ if (selectRadioKey) {
1506
+ var nodeItem = nodeMaps[selectRadioKey];
1507
+ if (nodeItem) {
1508
+ return nodeItem.item;
1509
+ }
1510
+ }
1511
+ return null;
1512
+ },
1513
+ setRadioNodeId: function setRadioNodeId(nodeKey) {
1514
+ var $xeTree = this;
1515
+ var reactData = $xeTree.reactData;
1516
+ reactData.selectRadioKey = nodeKey;
1517
+ return $xeTree.$nextTick();
1518
+ },
1519
+ getCheckboxNodeIds: function getCheckboxNodeIds() {
1520
+ var $xeTree = this;
1521
+ var internalData = $xeTree.internalData;
1522
+ var selectCheckboxMaps = internalData.selectCheckboxMaps;
1523
+ return Object.keys(selectCheckboxMaps);
1524
+ },
1525
+ getCheckboxNodes: function getCheckboxNodes() {
1526
+ var $xeTree = this;
1527
+ var internalData = $xeTree.internalData;
1528
+ var nodeMaps = internalData.nodeMaps,
1529
+ selectCheckboxMaps = internalData.selectCheckboxMaps;
1530
+ var list = [];
1531
+ _xeUtils.default.each(selectCheckboxMaps, function (item, nodeid) {
1532
+ var nodeItem = nodeMaps[nodeid];
1533
+ if (nodeItem) {
1534
+ list.push(nodeItem.item);
1535
+ }
1536
+ });
1537
+ return list;
1538
+ },
1539
+ clearCheckboxNode: function clearCheckboxNode() {
1540
+ var $xeTree = this;
1541
+ var reactData = $xeTree.reactData;
1542
+ var internalData = $xeTree.internalData;
1543
+ internalData.selectCheckboxMaps = {};
1544
+ reactData.updateCheckboxFlag++;
1545
+ return $xeTree.$nextTick().then(function () {
1546
+ return {
1547
+ checkNodeKeys: []
1548
+ };
1549
+ });
1550
+ },
1551
+ setAllCheckboxNode: function setAllCheckboxNode(checked) {
1552
+ var $xeTree = this;
1553
+ var props = $xeTree;
1554
+ var reactData = $xeTree.reactData;
1555
+ var internalData = $xeTree.internalData;
1556
+ var transform = props.transform;
1557
+ var selectMaps = {};
1558
+ var childrenField = $xeTree.computeChildrenField;
1559
+ var mapChildrenField = $xeTree.computeMapChildrenField;
1560
+ var checkKeys = [];
1561
+ if (checked) {
1562
+ _xeUtils.default.eachTree(internalData.afterTreeList, function (node) {
1563
+ var nodeid = $xeTree.getNodeId(node);
1564
+ checkKeys.push(nodeid);
1565
+ selectMaps[nodeid] = true;
1566
+ }, {
1567
+ children: transform ? mapChildrenField : childrenField
1568
+ });
1569
+ }
1570
+ internalData.selectCheckboxMaps = selectMaps;
1571
+ reactData.updateCheckboxFlag++;
1572
+ return $xeTree.$nextTick().then(function () {
1573
+ return {
1574
+ checkNodeKeys: checkKeys
1575
+ };
1576
+ });
1577
+ },
1578
+ clearExpandNode: function clearExpandNode() {
1579
+ var $xeTree = this;
1580
+ return $xeTree.clearAllExpandNode();
1581
+ },
1582
+ clearAllExpandNode: function clearAllExpandNode() {
1583
+ var $xeTree = this;
1584
+ var reactData = $xeTree.reactData;
1585
+ var internalData = $xeTree.internalData;
1586
+ var nodeMaps = internalData.nodeMaps;
1587
+ _xeUtils.default.each(nodeMaps, function (nodeItem) {
1588
+ nodeItem.treeLoaded = false;
1589
+ });
1590
+ internalData.treeExpandedMaps = {};
1591
+ reactData.updateExpandedFlag++;
1592
+ $xeTree.handleTreeToList();
1593
+ $xeTree.handleData();
1594
+ return $xeTree.recalculate();
1595
+ },
1596
+ setExpandByNodeId: function setExpandByNodeId(nodeids, expanded) {
1597
+ var $xeTree = this;
1598
+ var reactData = $xeTree.reactData;
1599
+ var internalData = $xeTree.internalData;
1600
+ var treeExpandedMaps = internalData.treeExpandedMaps;
1601
+ if (nodeids) {
1602
+ if (!_xeUtils.default.isArray(nodeids)) {
1603
+ nodeids = [nodeids];
1604
+ }
1605
+ nodeids.forEach(function (nodeid) {
1606
+ handleSetExpand(nodeid, expanded, treeExpandedMaps);
1607
+ });
1608
+ reactData.updateExpandedFlag++;
1609
+ }
1610
+ $xeTree.handleTreeToList();
1611
+ $xeTree.handleData();
1612
+ return $xeTree.recalculate();
1613
+ },
1614
+ getExpandNodeIds: function getExpandNodeIds() {
1615
+ var $xeTree = this;
1616
+ var internalData = $xeTree.internalData;
1617
+ var treeExpandedMaps = internalData.treeExpandedMaps;
1618
+ return _xeUtils.default.keys(treeExpandedMaps);
1619
+ },
1620
+ getExpandNodes: function getExpandNodes() {
1621
+ var $xeTree = this;
1622
+ var internalData = $xeTree.internalData;
1623
+ var nodeMaps = internalData.nodeMaps,
1624
+ treeExpandedMaps = internalData.treeExpandedMaps;
1625
+ var list = [];
1626
+ _xeUtils.default.each(treeExpandedMaps, function (item, nodeid) {
1627
+ var nodeItem = nodeMaps[nodeid];
1628
+ if (nodeItem) {
1629
+ list.push(nodeItem.item);
1630
+ }
1631
+ });
1632
+ return list;
1633
+ },
1634
+ setExpandNode: function setExpandNode(nodes, expanded) {
1635
+ var $xeTree = this;
1636
+ var reactData = $xeTree.reactData;
1637
+ var internalData = $xeTree.internalData;
1638
+ var treeExpandedMaps = internalData.treeExpandedMaps;
1639
+ if (nodes) {
1640
+ if (!_xeUtils.default.isArray(nodes)) {
1641
+ nodes = [nodes];
1642
+ }
1643
+ nodes.forEach(function (node) {
1644
+ var nodeid = $xeTree.getNodeId(node);
1645
+ handleSetExpand(nodeid, expanded, treeExpandedMaps);
1646
+ });
1647
+ reactData.updateExpandedFlag++;
1648
+ }
1649
+ $xeTree.handleTreeToList();
1650
+ $xeTree.handleData();
1651
+ return $xeTree.recalculate();
1652
+ },
1653
+ toggleExpandByNodeId: function toggleExpandByNodeId(nodeids) {
1654
+ var $xeTree = this;
1655
+ var reactData = $xeTree.reactData;
1656
+ var internalData = $xeTree.internalData;
1657
+ var treeExpandedMaps = internalData.treeExpandedMaps;
1658
+ if (nodeids) {
1659
+ if (!_xeUtils.default.isArray(nodeids)) {
1660
+ nodeids = [nodeids];
1661
+ }
1662
+ nodeids.forEach(function (nodeid) {
1663
+ handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
1664
+ });
1665
+ reactData.updateExpandedFlag++;
1666
+ }
1667
+ $xeTree.handleTreeToList();
1668
+ $xeTree.handleData();
1669
+ return $xeTree.recalculate();
1670
+ },
1671
+ toggleExpandNode: function toggleExpandNode(nodes) {
1672
+ var $xeTree = this;
1673
+ var reactData = $xeTree.reactData;
1674
+ var internalData = $xeTree.internalData;
1675
+ var treeExpandedMaps = internalData.treeExpandedMaps;
1676
+ if (nodes) {
1677
+ if (!_xeUtils.default.isArray(nodes)) {
1678
+ nodes = [nodes];
1679
+ }
1680
+ nodes.forEach(function (node) {
1681
+ var nodeid = $xeTree.getNodeId(node);
1682
+ handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
1683
+ });
1684
+ reactData.updateExpandedFlag++;
1162
1685
  }
1686
+ $xeTree.handleTreeToList();
1687
+ $xeTree.handleData();
1688
+ return $xeTree.recalculate();
1163
1689
  },
1164
- changeCheckboxEvent: function changeCheckboxEvent(evnt, node) {
1690
+ setAllExpandNode: function setAllExpandNode(expanded) {
1165
1691
  var $xeTree = this;
1166
1692
  var props = $xeTree;
1167
1693
  var reactData = $xeTree.reactData;
1168
1694
  var internalData = $xeTree.internalData;
1169
- evnt.preventDefault();
1170
- evnt.stopPropagation();
1171
1695
  var transform = props.transform;
1172
- var selectCheckboxMaps = internalData.selectCheckboxMaps;
1696
+ var treeExpandedMaps = internalData.treeExpandedMaps;
1173
1697
  var childrenField = $xeTree.computeChildrenField;
1174
1698
  var mapChildrenField = $xeTree.computeMapChildrenField;
1175
- var checkboxOpts = $xeTree.computeCheckboxOpts;
1176
- var checkStrictly = checkboxOpts.checkStrictly,
1177
- checkMethod = checkboxOpts.checkMethod;
1178
- var isDisabled = !!checkMethod;
1179
- if (checkMethod) {
1180
- isDisabled = !checkMethod({
1181
- node: node
1182
- });
1183
- }
1184
- if (isDisabled) {
1185
- return;
1186
- }
1187
- var nodeid = $xeTree.getNodeId(node);
1188
- var isChecked = false;
1189
- if (selectCheckboxMaps[nodeid]) {
1190
- delete selectCheckboxMaps[nodeid];
1191
- } else {
1192
- isChecked = true;
1193
- selectCheckboxMaps[nodeid] = node;
1194
- }
1195
- if (!checkStrictly) {
1196
- _xeUtils.default.eachTree(_xeUtils.default.get(node, childrenField), function (childNode) {
1197
- var childNodeid = $xeTree.getNodeId(childNode);
1198
- if (isChecked) {
1199
- if (!selectCheckboxMaps[childNodeid]) {
1200
- selectCheckboxMaps[childNodeid] = true;
1201
- }
1202
- } else {
1203
- if (selectCheckboxMaps[childNodeid]) {
1204
- delete selectCheckboxMaps[childNodeid];
1205
- }
1699
+ if (expanded) {
1700
+ _xeUtils.default.eachTree(internalData.afterTreeList, function (node) {
1701
+ var childList = _xeUtils.default.get(node, childrenField);
1702
+ var hasChild = childList && childList.length;
1703
+ if (hasChild) {
1704
+ var nodeid = $xeTree.getNodeId(node);
1705
+ treeExpandedMaps[nodeid] = true;
1206
1706
  }
1207
1707
  }, {
1208
1708
  children: transform ? mapChildrenField : childrenField
1209
1709
  });
1710
+ } else {
1711
+ internalData.treeExpandedMaps = {};
1210
1712
  }
1211
- reactData.updateCheckboxFlag++;
1212
- $xeTree.updateCheckboxStatus();
1213
- var value = _xeUtils.default.keys(selectCheckboxMaps);
1214
- $xeTree.emitCheckboxMode(value);
1215
- $xeTree.dispatchEvent('checkbox-change', {
1216
- node: node,
1217
- value: value,
1218
- checked: isChecked
1219
- }, evnt);
1713
+ reactData.updateExpandedFlag++;
1714
+ $xeTree.handleTreeToList();
1715
+ $xeTree.handleData();
1716
+ return $xeTree.recalculate();
1220
1717
  },
1221
- changeCurrentEvent: function changeCurrentEvent(evnt, node) {
1718
+ reloadExpandNode: function reloadExpandNode(node) {
1222
1719
  var $xeTree = this;
1223
- var reactData = $xeTree.reactData;
1224
- evnt.preventDefault();
1225
- var nodeOpts = $xeTree.computeNodeOpts;
1226
- var currentMethod = nodeOpts.currentMethod,
1227
- trigger = nodeOpts.trigger;
1228
- var childrenField = $xeTree.computeChildrenField;
1229
- var childList = _xeUtils.default.get(node, childrenField);
1230
- var hasChild = childList && childList.length;
1231
- var isDisabled = !!currentMethod;
1232
- if (trigger === 'child') {
1233
- if (hasChild) {
1234
- return;
1235
- }
1236
- } else if (trigger === 'parent') {
1237
- if (!hasChild) {
1238
- return;
1239
- }
1240
- }
1241
- if (currentMethod) {
1242
- isDisabled = !currentMethod({
1243
- node: node
1244
- });
1245
- }
1246
- if (isDisabled) {
1247
- return;
1720
+ var props = $xeTree;
1721
+ var lazy = props.lazy;
1722
+ if (lazy) {
1723
+ $xeTree.clearExpandLoaded(node);
1724
+ return $xeTree.handleAsyncTreeExpandChilds(node);
1248
1725
  }
1249
- var isChecked = true;
1250
- reactData.currentNode = node;
1251
- $xeTree.dispatchEvent('current-change', {
1252
- node: node,
1253
- checked: isChecked
1254
- }, evnt);
1726
+ return $xeTree.recalculate();
1255
1727
  },
1256
- changeRadioEvent: function changeRadioEvent(evnt, node) {
1728
+ clearExpandLoaded: function clearExpandLoaded(node) {
1257
1729
  var $xeTree = this;
1258
- var reactData = $xeTree.reactData;
1259
- evnt.preventDefault();
1260
- evnt.stopPropagation();
1261
- var radioOpts = $xeTree.computeRadioOpts;
1262
- var checkMethod = radioOpts.checkMethod;
1263
- var isDisabled = !!checkMethod;
1264
- if (checkMethod) {
1265
- isDisabled = !checkMethod({
1266
- node: node
1267
- });
1730
+ var props = $xeTree;
1731
+ var internalData = $xeTree.internalData;
1732
+ var lazy = props.lazy;
1733
+ var nodeMaps = internalData.nodeMaps;
1734
+ if (lazy) {
1735
+ var nodeItem = nodeMaps[$xeTree.getNodeId(node)];
1736
+ if (nodeItem) {
1737
+ nodeItem.treeLoaded = false;
1738
+ }
1268
1739
  }
1269
- if (isDisabled) {
1270
- return;
1740
+ return $xeTree.recalculate();
1741
+ },
1742
+ /**
1743
+ * 用于树结构,给行数据加载子节点
1744
+ */
1745
+ loadChildrenNode: function loadChildrenNode(node, childRecords) {
1746
+ var $xeTree = this;
1747
+ var props = $xeTree;
1748
+ var internalData = $xeTree.internalData;
1749
+ var lazy = props.lazy,
1750
+ transform = props.transform;
1751
+ var nodeMaps = internalData.nodeMaps;
1752
+ if (!lazy) {
1753
+ return Promise.resolve([]);
1271
1754
  }
1272
- var isChecked = true;
1273
- var value = $xeTree.getNodeId(node);
1274
- reactData.selectRadioKey = value;
1275
- $xeTree.emitRadioMode(value);
1276
- $xeTree.dispatchEvent('radio-change', {
1277
- node: node,
1278
- value: value,
1279
- checked: isChecked
1280
- }, evnt);
1755
+ var childrenField = $xeTree.computeChildrenField;
1756
+ var mapChildrenField = $xeTree.computeMapChildrenField;
1757
+ var parentNodeItem = nodeMaps[$xeTree.getNodeId(node)];
1758
+ var parentLevel = parentNodeItem ? parentNodeItem.level : 0;
1759
+ var parentNodes = parentNodeItem ? parentNodeItem.nodes : [];
1760
+ return $xeTree.createNode(childRecords).then(function (nodeList) {
1761
+ _xeUtils.default.eachTree(nodeList, function (childRow, index, items, path, parent, nodes) {
1762
+ var itemNodeId = $xeTree.getNodeId(childRow);
1763
+ nodeMaps[itemNodeId] = {
1764
+ item: node,
1765
+ index: -1,
1766
+ items: items,
1767
+ parent: parent || parentNodeItem.item,
1768
+ nodes: parentNodes.concat(nodes),
1769
+ level: parentLevel + nodes.length,
1770
+ treeIndex: -1,
1771
+ lineCount: 0,
1772
+ treeLoaded: false
1773
+ };
1774
+ }, {
1775
+ children: childrenField
1776
+ });
1777
+ node[childrenField] = nodeList;
1778
+ if (transform) {
1779
+ node[mapChildrenField] = nodeList;
1780
+ }
1781
+ $xeTree.updateAfterDataIndex();
1782
+ return nodeList;
1783
+ });
1784
+ },
1785
+ getCheckboxIndeterminateNodes: function getCheckboxIndeterminateNodes() {
1786
+ var $xeTree = this;
1787
+ var internalData = $xeTree.internalData;
1788
+ var nodeMaps = internalData.nodeMaps,
1789
+ indeterminateRowMaps = internalData.indeterminateRowMaps;
1790
+ var list = [];
1791
+ _xeUtils.default.each(indeterminateRowMaps, function (item, nodeid) {
1792
+ var nodeItem = nodeMaps[nodeid];
1793
+ if (nodeItem) {
1794
+ list.push(nodeItem.item);
1795
+ }
1796
+ });
1797
+ return list;
1281
1798
  },
1282
1799
  //
1283
1800
  // Render
@@ -1291,12 +1808,14 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1291
1808
  checkMethod = radioOpts.checkMethod,
1292
1809
  visibleMethod = radioOpts.visibleMethod;
1293
1810
  var isVisible = !visibleMethod || visibleMethod({
1811
+ $tree: $xeTree,
1294
1812
  node: node
1295
1813
  });
1296
1814
  var isDisabled = !!checkMethod;
1297
1815
  if (showRadio && showIcon && isVisible) {
1298
1816
  if (checkMethod) {
1299
1817
  isDisabled = !checkMethod({
1818
+ $tree: $xeTree,
1300
1819
  node: node
1301
1820
  });
1302
1821
  }
@@ -1328,12 +1847,14 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1328
1847
  visibleMethod = checkboxOpts.visibleMethod;
1329
1848
  var isIndeterminate = $xeTree.isIndeterminateByCheckboxNodeid(nodeid);
1330
1849
  var isVisible = !visibleMethod || visibleMethod({
1850
+ $tree: $xeTree,
1331
1851
  node: node
1332
1852
  });
1333
1853
  var isDisabled = !!checkMethod;
1334
1854
  if (showCheckbox && showIcon && isVisible) {
1335
1855
  if (checkMethod) {
1336
1856
  isDisabled = !checkMethod({
1857
+ $tree: $xeTree,
1337
1858
  node: node
1338
1859
  });
1339
1860
  }
@@ -1356,7 +1877,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1356
1877
  }
1357
1878
  return (0, _ui.renderEmptyElement)($xeTree);
1358
1879
  },
1359
- renderNode: function renderNode(h, node) {
1880
+ renderNode: function renderNode(h, node, nodeid) {
1360
1881
  var $xeTree = this;
1361
1882
  var props = $xeTree;
1362
1883
  var slots = $xeTree.$scopedSlots;
@@ -1374,7 +1895,8 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1374
1895
  var currentNode = reactData.currentNode,
1375
1896
  selectRadioKey = reactData.selectRadioKey,
1376
1897
  updateExpandedFlag = reactData.updateExpandedFlag;
1377
- var nodeMaps = internalData.nodeMaps,
1898
+ var afterTreeList = internalData.afterTreeList,
1899
+ nodeMaps = internalData.nodeMaps,
1378
1900
  treeExpandedMaps = internalData.treeExpandedMaps,
1379
1901
  treeExpandLazyLoadedMaps = internalData.treeExpandLazyLoadedMaps;
1380
1902
  var childrenField = $xeTree.computeChildrenField;
@@ -1385,14 +1907,12 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1385
1907
  var iconSlot = slots.icon;
1386
1908
  var titleSlot = slots.title;
1387
1909
  var extraSlot = slots.extra;
1388
- var nodeid = $xeTree.getNodeId(node);
1389
1910
  var isExpand = updateExpandedFlag && treeExpandedMaps[nodeid];
1390
1911
  var nodeItem = nodeMaps[nodeid];
1391
1912
  var nodeValue = _xeUtils.default.get(node, titleField);
1392
1913
  var isRadioChecked = false;
1393
1914
  if (showRadio) {
1394
- // eslint-disable-next-line eqeqeq
1395
- isRadioChecked = nodeid == selectRadioKey;
1915
+ isRadioChecked = nodeid === String(selectRadioKey);
1396
1916
  }
1397
1917
  var isCheckboxChecked = false;
1398
1918
  if (showCheckbox) {
@@ -1406,23 +1926,13 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1406
1926
  hasLazyChilds = node[hasChildField];
1407
1927
  isLazyLoaded = !!nodeItem.treeLoaded;
1408
1928
  }
1409
- var childVns = [];
1410
- if (hasChild && treeExpandedMaps[nodeid]) {
1411
- if (showLine) {
1412
- childVns.push(h('div', {
1413
- key: 'line',
1414
- class: 'vxe-tree--node-child-line',
1415
- style: {
1416
- height: "calc(".concat(nodeItem.lineCount, " * var(--vxe-ui-tree-node-height) - var(--vxe-ui-tree-node-height) / 2)"),
1417
- left: "".concat((nodeItem.level + 1) * (indent || 1), "px")
1418
- }
1419
- }));
1420
- }
1421
- childList.forEach(function (childItem) {
1422
- childVns.push($xeTree.renderNode(h, childItem));
1423
- });
1424
- }
1929
+ var prevNode = nodeItem.items[nodeItem.treeIndex - 1];
1930
+ var nParams = {
1931
+ node: node,
1932
+ isExpand: isExpand
1933
+ };
1425
1934
  return h('div', {
1935
+ key: nodeid,
1426
1936
  class: ['vxe-tree--node-wrapper', "node--level-".concat(nodeItem.level)],
1427
1937
  attrs: {
1428
1938
  nodeid: nodeid
@@ -1444,7 +1954,14 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1444
1954
  $xeTree.handleNodeDblclickEvent(evnt, node);
1445
1955
  }
1446
1956
  }
1447
- }, [showIcon || showLine ? h('div', {
1957
+ }, [showLine ? h('div', {
1958
+ class: 'vxe-tree--node-line-wrapper'
1959
+ }, [h('div', {
1960
+ class: 'vxe-tree--node-line',
1961
+ style: {
1962
+ height: "".concat($xeTree.getNodeId(afterTreeList[0]) === nodeid ? 1 : (0, _util.calcTreeLine)($xeTree, node, prevNode), "px")
1963
+ }
1964
+ })]) : (0, _ui.renderEmptyElement)($xeTree), h('div', {
1448
1965
  class: 'vxe-tree--node-item-switcher'
1449
1966
  }, showIcon && (lazy ? isLazyLoaded ? hasChild : hasLazyChilds : hasChild) ? [h('div', {
1450
1967
  class: 'vxe-tree--node-item-icon',
@@ -1453,56 +1970,95 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1453
1970
  $xeTree.toggleExpandEvent(evnt, node);
1454
1971
  }
1455
1972
  }
1456
- }, iconSlot ? iconSlot({
1457
- node: node,
1458
- isExpand: isExpand
1459
- }) : [h('i', {
1973
+ }, iconSlot ? (0, _vn.getSlotVNs)(iconSlot(nParams)) : [h('i', {
1460
1974
  class: isLazyLoading ? iconLoaded || (0, _ui.getIcon)().TREE_NODE_LOADED : isExpand ? iconOpen || (0, _ui.getIcon)().TREE_NODE_OPEN : iconClose || (0, _ui.getIcon)().TREE_NODE_CLOSE
1461
- })])] : []) : (0, _ui.renderEmptyElement)($xeTree), $xeTree.renderRadio(h, node, nodeid, isRadioChecked), $xeTree.renderCheckbox(h, node, nodeid, isCheckboxChecked), h('div', {
1975
+ })])] : []), $xeTree.renderRadio(h, node, nodeid, isRadioChecked), $xeTree.renderCheckbox(h, node, nodeid, isCheckboxChecked), h('div', {
1462
1976
  class: 'vxe-tree--node-item-inner'
1463
1977
  }, [h('div', {
1464
1978
  class: 'vxe-tree--node-item-title'
1465
- }, titleSlot ? (0, _vn.getSlotVNs)(titleSlot({
1466
- node: node,
1467
- isExpand: isExpand
1468
- })) : "".concat(nodeValue)), extraSlot ? h('div', {
1979
+ }, titleSlot ? (0, _vn.getSlotVNs)(titleSlot(nParams)) : "".concat(nodeValue)), extraSlot ? h('div', {
1469
1980
  class: 'vxe-tree--node-item-extra'
1470
- }, (0, _vn.getSlotVNs)(extraSlot({
1471
- node: node,
1472
- isExpand: isExpand
1473
- }))) : (0, _ui.renderEmptyElement)($xeTree)])]), hasChild && treeExpandedMaps[nodeid] ? h('div', {
1474
- class: 'vxe-tree--node-child-wrapper'
1475
- }, childVns) : (0, _ui.renderEmptyElement)($xeTree)]);
1981
+ }, (0, _vn.getSlotVNs)(extraSlot(nParams))) : (0, _ui.renderEmptyElement)($xeTree)])])]);
1476
1982
  },
1477
- renderNodeList: function renderNodeList(h) {
1983
+ renderList: function renderList(h, treeList) {
1478
1984
  var $xeTree = this;
1479
- var reactData = $xeTree.reactData;
1480
- var treeList = reactData.treeList;
1481
- return h('div', {
1482
- class: 'vxe-tree--node-list-wrapper'
1483
- }, treeList.map(function (node) {
1484
- return $xeTree.renderNode(h, node);
1485
- }));
1985
+ var props = $xeTree;
1986
+ var internalData = $xeTree.internalData;
1987
+ var transform = props.transform;
1988
+ var treeExpandedMaps = internalData.treeExpandedMaps;
1989
+ var childrenField = $xeTree.computeChildrenField;
1990
+ if (!treeList.length) {
1991
+ return [h('div', {
1992
+ class: 'vxe-tree--empty-placeholder'
1993
+ }, (0, _ui.getI18n)('vxe.tree.searchEmpty'))];
1994
+ }
1995
+ var nodeVNs = [];
1996
+ treeList.forEach(transform ? function (node) {
1997
+ var nodeid = $xeTree.getNodeId(node);
1998
+ nodeVNs.push($xeTree.renderNode(h, node, nodeid));
1999
+ } : function (node) {
2000
+ var nodeid = $xeTree.getNodeId(node);
2001
+ nodeVNs.push($xeTree.renderNode(h, node, nodeid));
2002
+ var childList = _xeUtils.default.get(node, childrenField);
2003
+ var hasChild = childList && childList.length;
2004
+ if (hasChild && treeExpandedMaps[nodeid]) {
2005
+ nodeVNs.push.apply(nodeVNs, _toConsumableArray($xeTree.renderList(h, childList)));
2006
+ }
2007
+ });
2008
+ return nodeVNs;
1486
2009
  },
1487
2010
  renderVN: function renderVN(h) {
1488
2011
  var $xeTree = this;
1489
2012
  var props = $xeTree;
1490
2013
  var slots = $xeTree.$scopedSlots;
2014
+ var reactData = $xeTree.reactData;
1491
2015
  var loading = props.loading,
1492
2016
  trigger = props.trigger,
1493
2017
  showLine = props.showLine;
2018
+ var bodyHeight = reactData.bodyHeight,
2019
+ topSpaceHeight = reactData.topSpaceHeight,
2020
+ treeList = reactData.treeList;
1494
2021
  var vSize = $xeTree.computeSize;
1495
2022
  var radioOpts = $xeTree.computeRadioOpts;
1496
2023
  var checkboxOpts = $xeTree.computeCheckboxOpts;
1497
- var treeStyle = $xeTree.computeTreeStyle;
1498
2024
  var loadingOpts = $xeTree.computeLoadingOpts;
1499
2025
  var isRowHover = $xeTree.computeIsRowHover;
2026
+ var treeStyle = $xeTree.computeTreeStyle;
1500
2027
  var loadingSlot = slots.loading;
2028
+ var headerSlot = slots.header;
2029
+ var footerSlot = slots.footer;
1501
2030
  return h('div', {
1502
2031
  ref: 'refElem',
1503
- class: ['vxe-tree', _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "size--".concat(vSize), vSize), 'show--line', showLine), 'checkbox--highlight', checkboxOpts.highlight), 'radio--highlight', radioOpts.highlight), 'node--hover', isRowHover), 'node--trigger', trigger === 'node'), 'is--loading', loading)],
1504
- style: treeStyle
1505
- }, [$xeTree.renderNodeList(h),
2032
+ class: ['vxe-tree', _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "size--".concat(vSize), vSize), 'show--line', showLine), 'checkbox--highlight', checkboxOpts.highlight), 'radio--highlight', radioOpts.highlight), 'node--hover', isRowHover), 'node--trigger', trigger === 'node'), 'is--loading', loading)]
2033
+ }, [headerSlot ? h('div', {
2034
+ ref: 'refHeaderWrapperElem',
2035
+ class: 'vxe-tree--header-wrapper'
2036
+ }, headerSlot({
2037
+ $tree: $xeTree
2038
+ })) : (0, _ui.renderEmptyElement)($xeTree), h('div', {
2039
+ ref: 'refVirtualWrapper',
2040
+ class: 'vxe-tree--node-list-wrapper',
2041
+ style: treeStyle,
2042
+ on: {
2043
+ scroll: $xeTree.scrollEvent
2044
+ }
2045
+ }, [h('div', {
2046
+ class: 'vxe-select--y-space',
2047
+ style: {
2048
+ height: bodyHeight ? "".concat(bodyHeight, "px") : ''
2049
+ }
2050
+ }), h('div', {
2051
+ ref: 'refVirtualBody',
2052
+ class: 'vxe-tree--node-list-body',
2053
+ style: {
2054
+ transform: "translateY(".concat(topSpaceHeight, "px)")
2055
+ }
2056
+ }, $xeTree.renderList(h, treeList))]), footerSlot ? h('div', {
2057
+ ref: 'refFooterWrapperElem',
2058
+ class: 'vxe-tree--footer-wrapper'
2059
+ }, footerSlot({
2060
+ $tree: $xeTree
2061
+ })) : (0, _ui.renderEmptyElement)($xeTree),
1506
2062
  /**
1507
2063
  * 加载中
1508
2064
  */
@@ -1526,7 +2082,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1526
2082
  watch: {
1527
2083
  data: function data(val) {
1528
2084
  var $xeTree = this;
1529
- $xeTree.loadTreeData(val || []);
2085
+ $xeTree.loadData(val || []);
1530
2086
  },
1531
2087
  checkNodeKey: function checkNodeKey(val) {
1532
2088
  var $xeTree = this;
@@ -1537,6 +2093,22 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1537
2093
  var $xeTree = this;
1538
2094
  var props = $xeTree;
1539
2095
  $xeTree.updateCheckboxChecked(props.checkNodeKeys || []);
2096
+ },
2097
+ filterValue: function filterValue() {
2098
+ var $xeTree = this;
2099
+ $xeTree.triggerSearchEvent(new Event('filter'));
2100
+ },
2101
+ height: function height() {
2102
+ var $xeTree = this;
2103
+ $xeTree.recalculate();
2104
+ },
2105
+ minHeight: function minHeight() {
2106
+ var $xeTree = this;
2107
+ $xeTree.recalculate();
2108
+ },
2109
+ maxHeight: function maxHeight() {
2110
+ var $xeTree = this;
2111
+ $xeTree.recalculate();
1540
2112
  }
1541
2113
  },
1542
2114
  created: function created() {
@@ -1544,16 +2116,41 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1544
2116
  var props = $xeTree;
1545
2117
  var reactData = $xeTree.reactData;
1546
2118
  reactData.selectRadioKey = props.checkNodeKey || null;
1547
- $xeTree.loadTreeData(props.data || []);
2119
+ $xeTree.loadData(props.data || []);
2120
+ },
2121
+ mounted: function mounted() {
2122
+ var $xeTree = this;
2123
+ var props = $xeTree;
2124
+ var internalData = $xeTree.internalData;
2125
+ if (props.autoResize) {
2126
+ var el = $xeTree.$refs.refElem;
2127
+ var parentEl = $xeTree.getParentElem();
2128
+ var resizeObserver = _ui.globalResize.create(function () {
2129
+ if (props.autoResize) {
2130
+ $xeTree.recalculate();
2131
+ }
2132
+ });
2133
+ if (el) {
2134
+ resizeObserver.observe(el);
2135
+ }
2136
+ if (parentEl) {
2137
+ resizeObserver.observe(parentEl);
2138
+ }
2139
+ internalData.resizeObserver = resizeObserver;
2140
+ }
2141
+ _ui.globalEvents.on($xeTree, 'resize', $xeTree.handleGlobalResizeEvent);
1548
2142
  },
1549
2143
  beforeDestroy: function beforeDestroy() {
1550
2144
  var $xeTree = this;
1551
- var reactData = $xeTree.reactData;
1552
2145
  var internalData = $xeTree.internalData;
1553
- reactData.treeList = [];
2146
+ var resizeObserver = internalData.resizeObserver;
2147
+ if (resizeObserver) {
2148
+ resizeObserver.disconnect();
2149
+ }
1554
2150
  internalData.treeExpandedMaps = {};
1555
2151
  internalData.indeterminateRowMaps = {};
1556
2152
  internalData.nodeMaps = {};
2153
+ _ui.globalEvents.off($xeTree, 'resize');
1557
2154
  },
1558
2155
  render: function render(h) {
1559
2156
  return this.renderVN(h);