vxe-pc-ui 4.10.49 → 4.11.0

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 (175) hide show
  1. package/es/icon/style.css +1 -1
  2. package/es/language/ar-EG.js +2 -1
  3. package/es/language/de-DE.js +2 -1
  4. package/es/language/en-US.js +2 -1
  5. package/es/language/es-ES.js +2 -1
  6. package/es/language/fr-FR.js +2 -1
  7. package/es/language/hu-HU.js +2 -1
  8. package/es/language/hy-AM.js +2 -1
  9. package/es/language/id-ID.js +2 -1
  10. package/es/language/it-IT.js +2 -1
  11. package/es/language/ja-JP.js +2 -1
  12. package/es/language/ko-KR.js +2 -1
  13. package/es/language/ms-MY.js +2 -1
  14. package/es/language/nb-NO.js +2 -1
  15. package/es/language/pt-BR.js +2 -1
  16. package/es/language/ru-RU.js +2 -1
  17. package/es/language/th-TH.js +2 -1
  18. package/es/language/ug-CN.js +2 -1
  19. package/es/language/uk-UA.js +2 -1
  20. package/es/language/uz-UZ.js +2 -1
  21. package/es/language/vi-VN.js +2 -1
  22. package/es/language/zh-CHT.js +2 -1
  23. package/es/language/zh-CN.js +2 -1
  24. package/es/select/src/select.js +23 -2
  25. package/es/select/style.css +13 -4
  26. package/es/select/style.min.css +1 -1
  27. package/es/style.css +1 -1
  28. package/es/style.min.css +1 -1
  29. package/es/tree/src/tree.js +640 -25
  30. package/es/tree/style.css +119 -0
  31. package/es/tree/style.min.css +1 -1
  32. package/es/ui/index.js +11 -1
  33. package/es/ui/src/anime.js +46 -0
  34. package/es/ui/src/log.js +1 -1
  35. package/es/vxe-select/style.css +13 -4
  36. package/es/vxe-select/style.min.css +1 -1
  37. package/es/vxe-tree/style.css +119 -0
  38. package/es/vxe-tree/style.min.css +1 -1
  39. package/lib/icon/style/style.css +1 -1
  40. package/lib/icon/style/style.min.css +1 -1
  41. package/lib/index.umd.js +807 -37
  42. package/lib/index.umd.min.js +1 -1
  43. package/lib/language/ar-EG.js +2 -1
  44. package/lib/language/ar-EG.min.js +1 -1
  45. package/lib/language/ar-EG.umd.js +2 -1
  46. package/lib/language/de-DE.js +2 -1
  47. package/lib/language/de-DE.min.js +1 -1
  48. package/lib/language/de-DE.umd.js +2 -1
  49. package/lib/language/en-US.js +2 -1
  50. package/lib/language/en-US.min.js +1 -1
  51. package/lib/language/en-US.umd.js +2 -1
  52. package/lib/language/es-ES.js +2 -1
  53. package/lib/language/es-ES.min.js +1 -1
  54. package/lib/language/es-ES.umd.js +2 -1
  55. package/lib/language/fr-FR.js +2 -1
  56. package/lib/language/fr-FR.min.js +1 -1
  57. package/lib/language/fr-FR.umd.js +2 -1
  58. package/lib/language/hu-HU.js +2 -1
  59. package/lib/language/hu-HU.min.js +1 -1
  60. package/lib/language/hu-HU.umd.js +2 -1
  61. package/lib/language/hy-AM.js +2 -1
  62. package/lib/language/hy-AM.min.js +1 -1
  63. package/lib/language/hy-AM.umd.js +2 -1
  64. package/lib/language/id-ID.js +2 -1
  65. package/lib/language/id-ID.min.js +1 -1
  66. package/lib/language/id-ID.umd.js +2 -1
  67. package/lib/language/it-IT.js +2 -1
  68. package/lib/language/it-IT.min.js +1 -1
  69. package/lib/language/it-IT.umd.js +2 -1
  70. package/lib/language/ja-JP.js +2 -1
  71. package/lib/language/ja-JP.min.js +1 -1
  72. package/lib/language/ja-JP.umd.js +2 -1
  73. package/lib/language/ko-KR.js +2 -1
  74. package/lib/language/ko-KR.min.js +1 -1
  75. package/lib/language/ko-KR.umd.js +2 -1
  76. package/lib/language/ms-MY.js +2 -1
  77. package/lib/language/ms-MY.min.js +1 -1
  78. package/lib/language/ms-MY.umd.js +2 -1
  79. package/lib/language/nb-NO.js +2 -1
  80. package/lib/language/nb-NO.min.js +1 -1
  81. package/lib/language/nb-NO.umd.js +2 -1
  82. package/lib/language/pt-BR.js +2 -1
  83. package/lib/language/pt-BR.min.js +1 -1
  84. package/lib/language/pt-BR.umd.js +2 -1
  85. package/lib/language/ru-RU.js +2 -1
  86. package/lib/language/ru-RU.min.js +1 -1
  87. package/lib/language/ru-RU.umd.js +2 -1
  88. package/lib/language/th-TH.js +2 -1
  89. package/lib/language/th-TH.min.js +1 -1
  90. package/lib/language/th-TH.umd.js +2 -1
  91. package/lib/language/ug-CN.js +2 -1
  92. package/lib/language/ug-CN.min.js +1 -1
  93. package/lib/language/ug-CN.umd.js +2 -1
  94. package/lib/language/uk-UA.js +2 -1
  95. package/lib/language/uk-UA.min.js +1 -1
  96. package/lib/language/uk-UA.umd.js +2 -1
  97. package/lib/language/uz-UZ.js +2 -1
  98. package/lib/language/uz-UZ.min.js +1 -1
  99. package/lib/language/uz-UZ.umd.js +2 -1
  100. package/lib/language/vi-VN.js +2 -1
  101. package/lib/language/vi-VN.min.js +1 -1
  102. package/lib/language/vi-VN.umd.js +2 -1
  103. package/lib/language/zh-CHT.js +2 -1
  104. package/lib/language/zh-CHT.min.js +1 -1
  105. package/lib/language/zh-CHT.umd.js +2 -1
  106. package/lib/language/zh-CN.js +2 -1
  107. package/lib/language/zh-CN.min.js +1 -1
  108. package/lib/language/zh-CN.umd.js +2 -1
  109. package/lib/select/src/select.js +25 -2
  110. package/lib/select/src/select.min.js +1 -1
  111. package/lib/select/style/style.css +13 -4
  112. package/lib/select/style/style.min.css +1 -1
  113. package/lib/style.css +1 -1
  114. package/lib/style.min.css +1 -1
  115. package/lib/tree/src/tree.js +704 -20
  116. package/lib/tree/src/tree.min.js +1 -1
  117. package/lib/tree/style/style.css +119 -0
  118. package/lib/tree/style/style.min.css +1 -1
  119. package/lib/ui/index.js +11 -1
  120. package/lib/ui/index.min.js +1 -1
  121. package/lib/ui/src/anime.js +56 -0
  122. package/lib/ui/src/anime.min.js +1 -0
  123. package/lib/ui/src/log.js +1 -1
  124. package/lib/ui/src/log.min.js +1 -1
  125. package/lib/vxe-select/style/style.css +13 -4
  126. package/lib/vxe-select/style/style.min.css +1 -1
  127. package/lib/vxe-tree/style/style.css +119 -0
  128. package/lib/vxe-tree/style/style.min.css +1 -1
  129. package/package.json +1 -1
  130. package/packages/language/ar-EG.ts +2 -1
  131. package/packages/language/de-DE.ts +2 -1
  132. package/packages/language/en-US.ts +2 -1
  133. package/packages/language/es-ES.ts +2 -1
  134. package/packages/language/fr-FR.ts +2 -1
  135. package/packages/language/hu-HU.ts +2 -1
  136. package/packages/language/hy-AM.ts +2 -1
  137. package/packages/language/id-ID.ts +2 -1
  138. package/packages/language/it-IT.ts +2 -1
  139. package/packages/language/ja-JP.ts +2 -1
  140. package/packages/language/ko-KR.ts +2 -1
  141. package/packages/language/ms-MY.ts +2 -1
  142. package/packages/language/nb-NO.ts +2 -1
  143. package/packages/language/pt-BR.ts +2 -1
  144. package/packages/language/ru-RU.ts +2 -1
  145. package/packages/language/th-TH.ts +2 -1
  146. package/packages/language/ug-CN.ts +2 -1
  147. package/packages/language/uk-UA.ts +2 -1
  148. package/packages/language/uz-UZ.ts +2 -1
  149. package/packages/language/vi-VN.ts +2 -1
  150. package/packages/language/zh-CHT.ts +2 -1
  151. package/packages/language/zh-CN.ts +2 -1
  152. package/packages/select/src/select.ts +26 -3
  153. package/packages/tree/src/tree.ts +683 -20
  154. package/packages/ui/index.ts +10 -0
  155. package/packages/ui/src/anime.ts +52 -0
  156. package/styles/components/select.scss +13 -3
  157. package/styles/components/tree.scss +116 -0
  158. package/styles/theme/dark.scss +1 -0
  159. package/styles/theme/light.scss +1 -0
  160. package/styles/variable.scss +1 -0
  161. package/types/components/select.d.ts +6 -0
  162. package/types/components/tree.d.ts +173 -10
  163. package/types/ui/global-icon.d.ts +4 -0
  164. /package/es/icon/{iconfont.1765265204333.ttf → iconfont.1765418463677.ttf} +0 -0
  165. /package/es/icon/{iconfont.1765265204333.woff → iconfont.1765418463677.woff} +0 -0
  166. /package/es/icon/{iconfont.1765265204333.woff2 → iconfont.1765418463677.woff2} +0 -0
  167. /package/es/{iconfont.1765265204333.ttf → iconfont.1765418463677.ttf} +0 -0
  168. /package/es/{iconfont.1765265204333.woff → iconfont.1765418463677.woff} +0 -0
  169. /package/es/{iconfont.1765265204333.woff2 → iconfont.1765418463677.woff2} +0 -0
  170. /package/lib/icon/style/{iconfont.1765265204333.ttf → iconfont.1765418463677.ttf} +0 -0
  171. /package/lib/icon/style/{iconfont.1765265204333.woff → iconfont.1765418463677.woff} +0 -0
  172. /package/lib/icon/style/{iconfont.1765265204333.woff2 → iconfont.1765418463677.woff2} +0 -0
  173. /package/lib/{iconfont.1765265204333.ttf → iconfont.1765418463677.ttf} +0 -0
  174. /package/lib/{iconfont.1765265204333.woff → iconfont.1765418463677.woff} +0 -0
  175. /package/lib/{iconfont.1765265204333.woff2 → iconfont.1765418463677.woff2} +0 -0
@@ -12,6 +12,7 @@ var _log = require("../../ui/src/log");
12
12
  var _xeUtils = _interopRequireDefault(require("xe-utils"));
13
13
  var _vn = require("../../ui/src/vn");
14
14
  var _dom = require("../../ui/src/dom");
15
+ var _anime = require("../../ui/src/anime");
15
16
  var _loading = _interopRequireDefault(require("../../loading/src/loading"));
16
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
18
  /**
@@ -41,6 +42,9 @@ function createInternalData() {
41
42
  offsetSize: 0,
42
43
  rowHeight: 0
43
44
  },
45
+ // prevDragNode: null,
46
+ // prevDragToChild: false,
47
+ // prevDragPos: ''
44
48
  lastScrollTime: 0
45
49
  // hpTimeout: undefined
46
50
  };
@@ -134,6 +138,11 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
134
138
  lazy: Boolean,
135
139
  toggleMethod: Function,
136
140
  loadMethod: Function,
141
+ drag: {
142
+ type: Boolean,
143
+ default: () => (0, _ui.getConfig)().tree.drag
144
+ },
145
+ dragConfig: Object,
137
146
  showIcon: {
138
147
  type: Boolean,
139
148
  default: true
@@ -158,7 +167,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
158
167
  },
159
168
  virtualYConfig: Object
160
169
  },
161
- emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error', 'scroll'],
170
+ emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error', 'scroll', 'node-dragstart', 'node-dragover', 'node-dragend'],
162
171
  setup(props, context) {
163
172
  const {
164
173
  emit,
@@ -173,6 +182,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
173
182
  const refFooterWrapperElem = (0, _vue.ref)();
174
183
  const refVirtualWrapper = (0, _vue.ref)();
175
184
  const refVirtualBody = (0, _vue.ref)();
185
+ const refDragNodeLineElem = (0, _vue.ref)();
186
+ const refDragTipElem = (0, _vue.ref)();
176
187
  const reactData = (0, _vue.reactive)({
177
188
  parentHeight: 0,
178
189
  customHeight: 0,
@@ -185,7 +196,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
185
196
  selectRadioKey: (0, _util.enNodeValue)(props.checkNodeKey),
186
197
  treeList: [],
187
198
  updateExpandedFlag: 1,
188
- updateCheckboxFlag: 1
199
+ updateCheckboxFlag: 1,
200
+ dragNode: null,
201
+ dragTipText: ''
189
202
  });
190
203
  const internalData = createInternalData();
191
204
  const refMaps = {
@@ -252,6 +265,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
252
265
  const computeLoadingOpts = (0, _vue.computed)(() => {
253
266
  return Object.assign({}, (0, _ui.getConfig)().tree.loadingConfig, props.loadingConfig);
254
267
  });
268
+ const computeDragOpts = (0, _vue.computed)(() => {
269
+ return Object.assign({}, (0, _ui.getConfig)().tree.dragConfig, props.dragConfig);
270
+ });
255
271
  const computeTreeStyle = (0, _vue.computed)(() => {
256
272
  const {
257
273
  customHeight,
@@ -274,11 +290,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
274
290
  return Object.assign({}, (0, _ui.getConfig)().tree.filterConfig, props.filterConfig);
275
291
  });
276
292
  const computeMaps = {
293
+ computeKeyField,
294
+ computeParentField,
277
295
  computeChildrenField,
278
296
  computeMapChildrenField,
279
297
  computeRadioOpts,
280
298
  computeCheckboxOpts,
281
- computeNodeOpts
299
+ computeNodeOpts,
300
+ computeDragOpts
282
301
  };
283
302
  const $xeTree = {
284
303
  xID,
@@ -422,7 +441,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
422
441
  const el = refElem.value;
423
442
  return el ? el.parentElement : null;
424
443
  };
425
- const calcTableHeight = key => {
444
+ const calcTreeHeight = key => {
426
445
  const {
427
446
  parentHeight
428
447
  } = reactData;
@@ -443,9 +462,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
443
462
  return num;
444
463
  };
445
464
  const updateHeight = () => {
446
- reactData.customHeight = calcTableHeight('height');
447
- reactData.customMinHeight = calcTableHeight('minHeight');
448
- reactData.customMaxHeight = calcTableHeight('maxHeight');
465
+ reactData.customHeight = calcTreeHeight('height');
466
+ reactData.customMinHeight = calcTreeHeight('minHeight');
467
+ reactData.customMaxHeight = calcTreeHeight('maxHeight');
449
468
  // 如果启用虚拟滚动,默认高度
450
469
  if (reactData.scrollYLoad && !(reactData.customHeight || reactData.customMinHeight)) {
451
470
  reactData.customHeight = 300;
@@ -479,10 +498,12 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
479
498
  keyMaps[nodeid] = {
480
499
  item,
481
500
  index,
501
+ $index: -1,
502
+ _index: -1,
482
503
  items,
483
504
  parent,
484
505
  nodes,
485
- level: nodes.length,
506
+ level: nodes.length - 1,
486
507
  treeIndex: index,
487
508
  lineCount: 0,
488
509
  treeLoaded: false
@@ -502,16 +523,20 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
502
523
  } = internalData;
503
524
  const childrenField = computeChildrenField.value;
504
525
  const mapChildrenField = computeMapChildrenField.value;
526
+ let vtIndex = 0;
505
527
  _xeUtils.default.eachTree(afterTreeList, (item, index, items) => {
506
528
  const nodeid = getNodeId(item);
507
529
  const nodeItem = nodeMaps[nodeid];
508
530
  if (nodeItem) {
509
531
  nodeItem.items = items;
510
532
  nodeItem.treeIndex = index;
533
+ nodeItem._index = vtIndex;
511
534
  } else {
512
535
  const rest = {
513
536
  item,
514
537
  index,
538
+ $index: -1,
539
+ _index: vtIndex,
515
540
  items,
516
541
  parent,
517
542
  nodes: [],
@@ -522,6 +547,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
522
547
  };
523
548
  nodeMaps[nodeid] = rest;
524
549
  }
550
+ vtIndex++;
525
551
  }, {
526
552
  children: transform ? mapChildrenField : childrenField
527
553
  });
@@ -667,7 +693,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
667
693
  scrollYLoad
668
694
  } = reactData;
669
695
  const {
670
- scrollYStore
696
+ scrollYStore,
697
+ nodeMaps
671
698
  } = internalData;
672
699
  let fullList = internalData.afterVisibleList;
673
700
  if (force) {
@@ -677,6 +704,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
677
704
  fullList = handleTreeToList();
678
705
  }
679
706
  const treeList = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
707
+ treeList.forEach((item, $index) => {
708
+ const nodeid = getNodeId(item);
709
+ const itemRest = nodeMaps[nodeid];
710
+ if (itemRest) {
711
+ itemRest.$index = $index;
712
+ }
713
+ });
680
714
  reactData.treeList = treeList;
681
715
  };
682
716
  const triggerSearchEvent = _xeUtils.default.debounce(() => handleData(true), 350, {
@@ -923,6 +957,40 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
923
957
  internalData.lastScrollLeft = 0;
924
958
  return (0, _vue.nextTick)();
925
959
  };
960
+ const handleNodeMousedownEvent = (evnt, node) => {
961
+ const {
962
+ drag
963
+ } = props;
964
+ const {
965
+ nodeMaps
966
+ } = internalData;
967
+ const targetEl = evnt.currentTarget;
968
+ const dragConfig = computeDragOpts.value;
969
+ const {
970
+ trigger,
971
+ isCrossDrag,
972
+ isPeerDrag,
973
+ disabledMethod
974
+ } = dragConfig;
975
+ const nodeid = getNodeId(node);
976
+ const triggerTreeNode = (0, _dom.getEventTargetNode)(evnt, targetEl, 'vxe-tree--node-item-switcher').flag;
977
+ let isNodeDrag = false;
978
+ if (drag) {
979
+ isNodeDrag = trigger === 'node';
980
+ }
981
+ if (!triggerTreeNode) {
982
+ const params = {
983
+ node,
984
+ $tree: $xeTree
985
+ };
986
+ const itemRest = nodeMaps[nodeid];
987
+ if (isNodeDrag && (isCrossDrag || isPeerDrag || itemRest && !itemRest.level) && !(disabledMethod && disabledMethod(params))) {
988
+ handleNodeDragMousedownEvent(evnt, {
989
+ node
990
+ });
991
+ }
992
+ }
993
+ };
926
994
  const handleNodeClickEvent = (evnt, node) => {
927
995
  const {
928
996
  showRadio,
@@ -1757,6 +1825,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1757
1825
  nodeMaps[itemNodeId] = {
1758
1826
  item: childRow,
1759
1827
  index: -1,
1828
+ $index: -1,
1829
+ _index: -1,
1760
1830
  items,
1761
1831
  parent: parent || parentNodeItem.item,
1762
1832
  nodes: parentNodes.concat(nodes),
@@ -1797,6 +1867,12 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1797
1867
  return list;
1798
1868
  },
1799
1869
  recalculate,
1870
+ getFullData() {
1871
+ const {
1872
+ treeFullData
1873
+ } = internalData;
1874
+ return treeFullData.slice(0);
1875
+ },
1800
1876
  scrollTo: handleScrollTo,
1801
1877
  scrollToNode(node) {
1802
1878
  return $xeTree.scrollToNodeId(getNodeId(node));
@@ -1837,8 +1913,561 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1837
1913
  },
1838
1914
  clearScroll
1839
1915
  };
1840
- const treePrivateMethods = {};
1916
+ const clearNodeDropOrigin = () => {
1917
+ const el = refElem.value;
1918
+ if (el) {
1919
+ const clss = 'node--drag-origin';
1920
+ _xeUtils.default.arrayEach(el.querySelectorAll(`.${clss}`), elem => {
1921
+ elem.draggable = false;
1922
+ (0, _dom.removeClass)(elem, clss);
1923
+ });
1924
+ }
1925
+ };
1926
+ const updateNodeDropOrigin = node => {
1927
+ const el = refElem.value;
1928
+ if (el) {
1929
+ const clss = 'node--drag-origin';
1930
+ const nodeid = getNodeId(node);
1931
+ _xeUtils.default.arrayEach(el.querySelectorAll(`.vxe-tree--node-wrapper[nodeid="${nodeid}"]`), elem => {
1932
+ (0, _dom.addClass)(elem, clss);
1933
+ });
1934
+ }
1935
+ };
1936
+ const updateRowDropTipContent = itemEl => {
1937
+ const {
1938
+ dragNode
1939
+ } = reactData;
1940
+ const dragOpts = computeDragOpts.value;
1941
+ const {
1942
+ tooltipMethod
1943
+ } = dragOpts;
1944
+ const rTooltipMethod = tooltipMethod;
1945
+ let tipContent = '';
1946
+ if (rTooltipMethod) {
1947
+ const rtParams = {
1948
+ $tree: $xeTree,
1949
+ node: dragNode
1950
+ };
1951
+ tipContent = `${rTooltipMethod(rtParams) || ''}`;
1952
+ } else {
1953
+ tipContent = (0, _ui.getI18n)('vxe.tree.dragTip', [itemEl.textContent || '']);
1954
+ }
1955
+ reactData.dragTipText = tipContent;
1956
+ };
1957
+ const hideDropTip = () => {
1958
+ const rdTipEl = refDragTipElem.value;
1959
+ const rdLineEl = refDragNodeLineElem.value;
1960
+ if (rdTipEl) {
1961
+ rdTipEl.style.display = '';
1962
+ }
1963
+ if (rdLineEl) {
1964
+ rdLineEl.style.display = '';
1965
+ }
1966
+ };
1967
+ const clearDragStatus = () => {
1968
+ const {
1969
+ dragNode
1970
+ } = reactData;
1971
+ if (dragNode) {
1972
+ clearNodeDropOrigin();
1973
+ hideDropTip();
1974
+ reactData.dragNode = null;
1975
+ }
1976
+ };
1977
+ const handleNodeDragMousedownEvent = (evnt, params) => {
1978
+ evnt.stopPropagation();
1979
+ const {
1980
+ node
1981
+ } = params;
1982
+ const dragConfig = computeDragOpts.value;
1983
+ const {
1984
+ trigger,
1985
+ dragStartMethod
1986
+ } = dragConfig;
1987
+ const dragEl = evnt.currentTarget;
1988
+ const itemEl = trigger === 'node' ? dragEl : dragEl.parentElement.parentElement;
1989
+ clearNodeDropOrigin();
1990
+ if (dragStartMethod && !dragStartMethod(params)) {
1991
+ itemEl.draggable = false;
1992
+ reactData.dragNode = null;
1993
+ hideDropTip();
1994
+ return;
1995
+ }
1996
+ reactData.dragNode = node;
1997
+ itemEl.draggable = true;
1998
+ updateNodeDropOrigin(node);
1999
+ updateRowDropTipContent(itemEl);
2000
+ dispatchEvent('node-dragstart', params, evnt);
2001
+ };
2002
+ const handleNodeDragMouseupEvent = () => {
2003
+ clearDragStatus();
2004
+ };
2005
+ const showDropTip = (evnt, itemEl, showLine, dragPos) => {
2006
+ const wrapperEl = refElem.value;
2007
+ if (!wrapperEl) {
2008
+ return;
2009
+ }
2010
+ const {
2011
+ prevDragToChild
2012
+ } = internalData;
2013
+ const wrapperRect = wrapperEl.getBoundingClientRect();
2014
+ const wrapperHeight = wrapperEl.clientHeight;
2015
+ if (itemEl) {
2016
+ const rdLineEl = refDragNodeLineElem.value;
2017
+ if (rdLineEl) {
2018
+ if (showLine) {
2019
+ const trRect = itemEl.getBoundingClientRect();
2020
+ let itemHeight = itemEl.clientHeight;
2021
+ const offsetTop = Math.max(1, trRect.y - wrapperRect.y);
2022
+ if (offsetTop + itemHeight > wrapperHeight) {
2023
+ itemHeight = wrapperHeight - offsetTop;
2024
+ }
2025
+ rdLineEl.style.display = 'block';
2026
+ rdLineEl.style.top = `${offsetTop}px`;
2027
+ rdLineEl.style.height = `${itemHeight}px`;
2028
+ rdLineEl.setAttribute('drag-pos', dragPos);
2029
+ rdLineEl.setAttribute('drag-to-child', prevDragToChild ? 'y' : 'n');
2030
+ } else {
2031
+ rdLineEl.style.display = '';
2032
+ }
2033
+ }
2034
+ }
2035
+ const rdTipEl = refDragTipElem.value;
2036
+ if (rdTipEl) {
2037
+ rdTipEl.style.display = 'block';
2038
+ rdTipEl.style.top = `${Math.min(wrapperEl.clientHeight - wrapperEl.scrollTop - rdTipEl.clientHeight, evnt.clientY - wrapperRect.y)}px`;
2039
+ rdTipEl.style.left = `${Math.min(wrapperEl.clientWidth - wrapperEl.scrollLeft - rdTipEl.clientWidth - 1, evnt.clientX - wrapperRect.x)}px`;
2040
+ rdTipEl.setAttribute('drag-status', showLine ? prevDragToChild ? 'sub' : 'normal' : 'disabled');
2041
+ }
2042
+ };
2043
+ const clearNodeDragData = () => {
2044
+ const wrapperEl = refElem.value;
2045
+ const dtClss = ['.vxe-tree--node-wrapper'];
2046
+ hideDropTip();
2047
+ clearNodeDropOrigin();
2048
+ (0, _anime.clearRowAnimate)(wrapperEl, dtClss);
2049
+ internalData.prevDragToChild = false;
2050
+ reactData.dragNode = null;
2051
+ };
2052
+ const handleNodeDragSwapEvent = (evnt, dragNode, prevDragNode, prevDragPos, prevDragToChild) => {
2053
+ const {
2054
+ transform
2055
+ } = props;
2056
+ const {
2057
+ nodeMaps,
2058
+ treeFullData,
2059
+ afterVisibleList
2060
+ } = internalData;
2061
+ const dragConfig = computeDragOpts.value;
2062
+ const {
2063
+ animation,
2064
+ isCrossDrag,
2065
+ isPeerDrag,
2066
+ isSelfToChildDrag,
2067
+ dragEndMethod,
2068
+ dragToChildMethod
2069
+ } = dragConfig;
2070
+ const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
2071
+ const keyField = computeKeyField.value;
2072
+ const parentField = computeParentField.value;
2073
+ const childrenField = computeChildrenField.value;
2074
+ const mapChildrenField = computeMapChildrenField.value;
2075
+ const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
2076
+ const el = refElem.value;
2077
+ const errRest = {
2078
+ status: false
2079
+ };
2080
+ if (!(el && prevDragNode && dragNode)) {
2081
+ return Promise.resolve(errRest);
2082
+ }
2083
+ // 判断是否有拖动
2084
+ if (prevDragNode !== dragNode) {
2085
+ const dragParams = {
2086
+ oldNode: dragNode,
2087
+ newNode: prevDragNode,
2088
+ dragNode,
2089
+ dragPos: prevDragPos,
2090
+ dragToChild: !!prevDragToChild,
2091
+ offsetIndex: dragOffsetIndex
2092
+ };
2093
+ const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
2094
+ return Promise.resolve(dEndMethod ? dEndMethod(dragParams) : true).then(status => {
2095
+ if (!status) {
2096
+ return errRest;
2097
+ }
2098
+ const dragNodeid = getNodeId(dragNode);
2099
+ const dragNodeRest = nodeMaps[dragNodeid] || {};
2100
+ const _dragNodeIndex = dragNodeRest._index;
2101
+ let dragNodeHeight = 0;
2102
+ let dragOffsetTop = -1;
2103
+ if (animation) {
2104
+ const prevItemEl = el.querySelector(`.vxe-tree--node-wrapper[nodeid="${prevDragNode}"]`);
2105
+ const oldItemEl = el.querySelector(`.vxe-tree--node-wrapper[nodeid="${dragNodeid}"]`);
2106
+ const targetItemEl = prevItemEl || oldItemEl;
2107
+ if (targetItemEl) {
2108
+ dragNodeHeight = targetItemEl.offsetHeight;
2109
+ }
2110
+ if (oldItemEl) {
2111
+ dragOffsetTop = oldItemEl.offsetTop;
2112
+ }
2113
+ }
2114
+ let oafIndex = -1;
2115
+ let nafIndex = -1;
2116
+ if (transform) {
2117
+ // 移出源位置
2118
+ const oldRest = dragNodeRest;
2119
+ const newNodeid = getNodeId(prevDragNode);
2120
+ const newRest = nodeMaps[newNodeid];
2121
+ if (oldRest && newRest) {
2122
+ const {
2123
+ level: oldLevel
2124
+ } = oldRest;
2125
+ const {
2126
+ level: newLevel
2127
+ } = newRest;
2128
+ const oldAllMaps = {};
2129
+ _xeUtils.default.eachTree([dragNode], item => {
2130
+ oldAllMaps[getNodeId(item)] = item;
2131
+ }, {
2132
+ children: mapChildrenField
2133
+ });
2134
+ let isSelfToChildStatus = false;
2135
+ if (oldLevel && newLevel) {
2136
+ // 子到子
2137
+ if (isPeerDrag && !isCrossDrag) {
2138
+ if (oldRest.item[parentField] !== newRest.item[parentField]) {
2139
+ // 非同级
2140
+ return errRest;
2141
+ }
2142
+ } else {
2143
+ if (!isCrossDrag) {
2144
+ return errRest;
2145
+ }
2146
+ if (oldAllMaps[newNodeid]) {
2147
+ isSelfToChildStatus = true;
2148
+ if (!(isCrossDrag && isSelfToChildDrag)) {
2149
+ if (_ui.VxeUI.modal) {
2150
+ _ui.VxeUI.modal.message({
2151
+ status: 'error',
2152
+ content: (0, _ui.getI18n)('vxe.error.treeDragChild')
2153
+ });
2154
+ }
2155
+ return errRest;
2156
+ }
2157
+ }
2158
+ }
2159
+ } else if (oldLevel) {
2160
+ // 子到根
2161
+ if (!isCrossDrag) {
2162
+ return errRest;
2163
+ }
2164
+ } else if (newLevel) {
2165
+ // 根到子
2166
+ if (!isCrossDrag) {
2167
+ return errRest;
2168
+ }
2169
+ if (oldAllMaps[newNodeid]) {
2170
+ isSelfToChildStatus = true;
2171
+ if (!(isCrossDrag && isSelfToChildDrag)) {
2172
+ if (_ui.VxeUI.modal) {
2173
+ _ui.VxeUI.modal.message({
2174
+ status: 'error',
2175
+ content: (0, _ui.getI18n)('vxe.error.treeDragChild')
2176
+ });
2177
+ }
2178
+ return errRest;
2179
+ }
2180
+ }
2181
+ } else {
2182
+ // 根到根
2183
+ }
2184
+ const fullList = _xeUtils.default.toTreeArray(internalData.afterTreeList, {
2185
+ key: keyField,
2186
+ parentKey: parentField,
2187
+ children: mapChildrenField
2188
+ });
2189
+ // 移出
2190
+ const otfIndex = $xeTree.findNodeIndexOf(fullList, dragNode);
2191
+ fullList.splice(otfIndex, 1);
2192
+ // 插入
2193
+ const ptfIndex = $xeTree.findNodeIndexOf(fullList, prevDragNode);
2194
+ const ntfIndex = ptfIndex + dragOffsetIndex;
2195
+ fullList.splice(ntfIndex, 0, dragNode);
2196
+ // 改变层级
2197
+ if (isSelfToChildStatus && isCrossDrag && isSelfToChildDrag) {
2198
+ _xeUtils.default.each(dragNode[childrenField], childNode => {
2199
+ childNode[parentField] = dragNode[parentField];
2200
+ });
2201
+ }
2202
+ dragNode[parentField] = isDragToChildFlag ? prevDragNode[keyField] : prevDragNode[parentField];
2203
+ internalData.treeFullData = _xeUtils.default.toArrayTree(fullList, {
2204
+ key: keyField,
2205
+ parentKey: parentField,
2206
+ children: childrenField,
2207
+ mapChildren: mapChildrenField
2208
+ });
2209
+ }
2210
+ } else {
2211
+ // 移出
2212
+ oafIndex = $xeTree.findNodeIndexOf(afterVisibleList, dragNode);
2213
+ const otfIndex = $xeTree.findNodeIndexOf(treeFullData, dragNode);
2214
+ afterVisibleList.splice(oafIndex, 1);
2215
+ treeFullData.splice(otfIndex, 1);
2216
+ // 插入
2217
+ const pafIndex = $xeTree.findNodeIndexOf(afterVisibleList, prevDragNode);
2218
+ const ptfIndex = $xeTree.findNodeIndexOf(treeFullData, prevDragNode);
2219
+ nafIndex = pafIndex + dragOffsetIndex;
2220
+ const ntfIndex = ptfIndex + dragOffsetIndex;
2221
+ afterVisibleList.splice(nafIndex, 0, dragNode);
2222
+ treeFullData.splice(ntfIndex, 0, dragNode);
2223
+ }
2224
+ cacheNodeMap();
2225
+ handleData(transform);
2226
+ if (!transform) {
2227
+ updateAfterDataIndex();
2228
+ }
2229
+ updateCheckboxStatus();
2230
+ if (reactData.scrollYLoad) {
2231
+ updateYSpace();
2232
+ }
2233
+ if (evnt) {
2234
+ dispatchEvent('node-dragend', {
2235
+ oldNode: dragNode,
2236
+ newNode: prevDragNode,
2237
+ dragNode,
2238
+ dragPos: prevDragPos,
2239
+ dragToChild: isDragToChildFlag,
2240
+ offsetIndex: dragOffsetIndex,
2241
+ _index: {
2242
+ newIndex: nafIndex,
2243
+ oldIndex: oafIndex
2244
+ }
2245
+ }, evnt);
2246
+ }
2247
+ return (0, _vue.nextTick)().then(() => {
2248
+ if (animation) {
2249
+ const {
2250
+ treeList
2251
+ } = reactData;
2252
+ const {
2253
+ nodeMaps
2254
+ } = internalData;
2255
+ const dragNodeRest = nodeMaps[dragNodeid];
2256
+ const _newNodeIndex = dragNodeRest._index;
2257
+ const firstNode = treeList[0];
2258
+ const firstNodeRest = nodeMaps[getNodeId(firstNode)];
2259
+ const wrapperEl = el;
2260
+ if (firstNodeRest) {
2261
+ const _firstNodeIndex = firstNodeRest._index;
2262
+ const _lastNodeIndex = _firstNodeIndex + treeList.length;
2263
+ let rsIndex = -1;
2264
+ let reIndex = -1;
2265
+ let offsetRate = 1;
2266
+ if (_dragNodeIndex < _firstNodeIndex) {
2267
+ // 从上往下虚拟拖拽
2268
+ rsIndex = 0;
2269
+ reIndex = _newNodeIndex - _firstNodeIndex;
2270
+ } else if (_dragNodeIndex > _lastNodeIndex) {
2271
+ // 从下往上虚拟拖拽
2272
+ const $newNodeIndex = dragNodeRest.$index;
2273
+ rsIndex = $newNodeIndex + 1;
2274
+ reIndex = treeList.length;
2275
+ offsetRate = -1;
2276
+ } else {
2277
+ if (_newNodeIndex > _dragNodeIndex) {
2278
+ // 从上往下拖拽
2279
+ rsIndex = _dragNodeIndex - _firstNodeIndex;
2280
+ reIndex = rsIndex + _newNodeIndex - _dragNodeIndex;
2281
+ } else {
2282
+ // 从下往上拖拽
2283
+ rsIndex = _newNodeIndex - _firstNodeIndex;
2284
+ reIndex = rsIndex + _dragNodeIndex - _newNodeIndex + 1;
2285
+ offsetRate = -1;
2286
+ }
2287
+ }
2288
+ const dragRangeList = treeList.slice(rsIndex, reIndex);
2289
+ if (dragRangeList.length) {
2290
+ const dtClss = [];
2291
+ dragRangeList.forEach(item => {
2292
+ const nodeid = getNodeId(item);
2293
+ dtClss.push(`.vxe-tree--node-wrapper[nodeid="${nodeid}"]`);
2294
+ });
2295
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
2296
+ (0, _anime.moveRowAnimateToTb)(dtTrList, offsetRate * dragNodeHeight);
2297
+ }
2298
+ }
2299
+ const drClss = [`.vxe-tree--node-wrapper[nodeid="${dragNodeid}"]`];
2300
+ const newDtTrList = wrapperEl.querySelectorAll(drClss.join(','));
2301
+ const newTrEl = newDtTrList[0];
2302
+ if (dragOffsetTop > -1 && newTrEl) {
2303
+ (0, _anime.moveRowAnimateToTb)(newDtTrList, dragOffsetTop - newTrEl.offsetTop);
2304
+ }
2305
+ }
2306
+ recalculate();
2307
+ }).then(() => {
2308
+ return {
2309
+ status: true
2310
+ };
2311
+ });
2312
+ }).catch(() => {
2313
+ return errRest;
2314
+ }).then(rest => {
2315
+ clearNodeDragData();
2316
+ return rest;
2317
+ });
2318
+ }
2319
+ clearNodeDragData();
2320
+ return Promise.resolve(errRest);
2321
+ };
2322
+ const handleNodeDragDragstartEvent = evnt => {
2323
+ if (evnt.dataTransfer) {
2324
+ evnt.dataTransfer.setDragImage((0, _dom.getTpImg)(), 0, 0);
2325
+ }
2326
+ };
2327
+ const handleNodeDragDragendEvent = evnt => {
2328
+ const {
2329
+ lazy
2330
+ } = props;
2331
+ const {
2332
+ dragNode
2333
+ } = reactData;
2334
+ const {
2335
+ nodeMaps,
2336
+ prevDragNode,
2337
+ prevDragPos,
2338
+ prevDragToChild
2339
+ } = internalData;
2340
+ const hasChildField = computeHasChildField.value;
2341
+ if (lazy && prevDragToChild) {
2342
+ // 懒加载
2343
+ const newNodeid = getNodeId(prevDragNode);
2344
+ const nodeRest = nodeMaps[newNodeid];
2345
+ if (prevDragNode[hasChildField]) {
2346
+ if (nodeRest && nodeRest.treeLoaded) {
2347
+ handleNodeDragSwapEvent(evnt, dragNode, prevDragNode, prevDragPos, prevDragToChild);
2348
+ }
2349
+ } else {
2350
+ handleNodeDragSwapEvent(evnt, dragNode, prevDragNode, prevDragPos, prevDragToChild);
2351
+ }
2352
+ } else {
2353
+ handleNodeDragSwapEvent(evnt, dragNode, prevDragNode, prevDragPos, prevDragToChild);
2354
+ }
2355
+ };
2356
+ const handleNodeDragDragoverEvent = evnt => {
2357
+ const {
2358
+ lazy,
2359
+ transform
2360
+ } = props;
2361
+ const {
2362
+ dragNode
2363
+ } = reactData;
2364
+ const {
2365
+ nodeMaps
2366
+ } = internalData;
2367
+ const dragConfig = computeDragOpts.value;
2368
+ const parentField = computeParentField.value;
2369
+ const hasChildField = computeHasChildField.value;
2370
+ const {
2371
+ isCrossDrag,
2372
+ isPeerDrag,
2373
+ isToChildDrag
2374
+ } = dragConfig;
2375
+ if (!dragNode && !isCrossDrag) {
2376
+ evnt.preventDefault();
2377
+ }
2378
+ const isControlKey = (0, _dom.hasControlKey)(evnt);
2379
+ const itemEl = evnt.currentTarget;
2380
+ const nodeid = itemEl.getAttribute('nodeid') || '';
2381
+ const nodeItem = nodeMaps[nodeid];
2382
+ if (nodeItem) {
2383
+ evnt.preventDefault();
2384
+ const node = nodeItem.item;
2385
+ const offsetY = evnt.clientY - itemEl.getBoundingClientRect().y;
2386
+ const dragPos = offsetY < itemEl.clientHeight / 2 ? 'top' : 'bottom';
2387
+ internalData.prevDragToChild = !!(transform && isCrossDrag && isToChildDrag && isControlKey);
2388
+ internalData.prevDragNode = node;
2389
+ internalData.prevDragPos = dragPos;
2390
+ if (dragNode && getNodeId(dragNode) === nodeid || isControlKey && lazy && node[hasChildField] && nodeItem && !nodeItem.treeLoaded || !isCrossDrag && transform && (isPeerDrag ? dragNode[parentField] !== node[parentField] : nodeItem.level)) {
2391
+ showDropTip(evnt, itemEl, false, dragPos);
2392
+ return;
2393
+ }
2394
+ showDropTip(evnt, itemEl, true, dragPos);
2395
+ dispatchEvent('node-dragover', {
2396
+ oldRNode: dragNode,
2397
+ targetNode: node,
2398
+ dragPos
2399
+ }, evnt);
2400
+ }
2401
+ };
2402
+ const treePrivateMethods = {
2403
+ handleData,
2404
+ cacheNodeMap,
2405
+ updateAfterDataIndex,
2406
+ updateCheckboxStatus,
2407
+ updateYSpace,
2408
+ findNodeIndexOf(list, node) {
2409
+ return node ? _xeUtils.default.findIndexOf(list, item => $xeTree.eqNode(item, node)) : -1;
2410
+ },
2411
+ eqNode(node1, node2) {
2412
+ if (node1 && node2) {
2413
+ if (node1 === node2) {
2414
+ return true;
2415
+ }
2416
+ return getNodeId(node1) === getNodeId(node2);
2417
+ }
2418
+ return false;
2419
+ }
2420
+ };
1841
2421
  Object.assign($xeTree, treeMethods, treePrivateMethods);
2422
+ const renderDragIcon = (node, nodeid) => {
2423
+ const {
2424
+ drag,
2425
+ transform
2426
+ } = props;
2427
+ const {
2428
+ nodeMaps
2429
+ } = internalData;
2430
+ const dragOpts = computeDragOpts.value;
2431
+ const {
2432
+ showIcon,
2433
+ isPeerDrag,
2434
+ isCrossDrag,
2435
+ visibleMethod
2436
+ } = dragOpts;
2437
+ const params = {
2438
+ node,
2439
+ $tree: $xeTree
2440
+ };
2441
+ if (drag && showIcon && transform && (!visibleMethod || visibleMethod(params))) {
2442
+ const nodeItem = nodeMaps[nodeid];
2443
+ if (nodeItem && (isPeerDrag || isCrossDrag || !nodeItem.level)) {
2444
+ const dragConfig = computeDragOpts.value;
2445
+ const {
2446
+ icon,
2447
+ trigger,
2448
+ disabledMethod
2449
+ } = dragConfig;
2450
+ const isDisabled = disabledMethod && disabledMethod(params);
2451
+ const ons = {};
2452
+ if (trigger !== 'node') {
2453
+ ons.onMousedown = evnt => {
2454
+ if (!isDisabled) {
2455
+ handleNodeDragMousedownEvent(evnt, params);
2456
+ }
2457
+ };
2458
+ ons.onMouseup = handleNodeDragMouseupEvent;
2459
+ }
2460
+ return (0, _vue.h)('div', Object.assign({
2461
+ class: ['vxe-tree--drag-handle', {
2462
+ 'is--disabled': isDisabled
2463
+ }]
2464
+ }, ons), [(0, _vue.h)('i', {
2465
+ class: icon || (0, _ui.getIcon)().TREE_DRAG
2466
+ })]);
2467
+ }
2468
+ }
2469
+ return (0, _ui.renderEmptyElement)($xeTree);
2470
+ };
1842
2471
  const renderRadio = (node, nodeid, isChecked) => {
1843
2472
  const {
1844
2473
  showRadio
@@ -1920,6 +2549,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1920
2549
  const renderNode = (node, nodeid) => {
1921
2550
  const {
1922
2551
  lazy,
2552
+ drag,
2553
+ transform,
1923
2554
  showRadio,
1924
2555
  showCheckbox,
1925
2556
  showLine,
@@ -1973,24 +2604,36 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1973
2604
  node,
1974
2605
  isExpand
1975
2606
  };
1976
- return (0, _vue.h)('div', {
2607
+ const itemOn = {
2608
+ onMousedown(evnt) {
2609
+ handleNodeMousedownEvent(evnt, node);
2610
+ },
2611
+ onMouseup: handleNodeDragMouseupEvent,
2612
+ onClick(evnt) {
2613
+ handleNodeClickEvent(evnt, node);
2614
+ },
2615
+ onDblclick(evnt) {
2616
+ handleNodeDblclickEvent(evnt, node);
2617
+ }
2618
+ };
2619
+ // 拖拽行事件
2620
+ if (drag && transform) {
2621
+ itemOn.onDragstart = handleNodeDragDragstartEvent;
2622
+ itemOn.onDragend = handleNodeDragDragendEvent;
2623
+ itemOn.onDragover = handleNodeDragDragoverEvent;
2624
+ }
2625
+ return (0, _vue.h)('div', Object.assign({
1977
2626
  key: nodeid,
1978
2627
  class: ['vxe-tree--node-wrapper', `node--level-${nLevel}`],
1979
2628
  nodeid
1980
- }, [(0, _vue.h)('div', {
2629
+ }, itemOn), [(0, _vue.h)('div', {
1981
2630
  class: ['vxe-tree--node-item', {
1982
2631
  'is--current': currentNode && nodeid === getNodeId(currentNode),
1983
2632
  'is-radio--checked': isRadioChecked,
1984
2633
  'is-checkbox--checked': isCheckboxChecked
1985
2634
  }],
1986
2635
  style: {
1987
- paddingLeft: `${(nLevel - 1) * (indent || 1)}px`
1988
- },
1989
- onClick(evnt) {
1990
- handleNodeClickEvent(evnt, node);
1991
- },
1992
- onDblclick(evnt) {
1993
- handleNodeDblclickEvent(evnt, node);
2636
+ paddingLeft: `${nLevel * (indent || 1)}px`
1994
2637
  }
1995
2638
  }, [showLine ? (0, _vue.h)('div', {
1996
2639
  class: 'vxe-tree--node-line-wrapper'
@@ -2008,7 +2651,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2008
2651
  }
2009
2652
  }, iconSlot ? (0, _vn.getSlotVNs)(iconSlot(nParams)) : [(0, _vue.h)('i', {
2010
2653
  class: isLazyLoading ? iconLoaded || (0, _ui.getIcon)().TREE_NODE_LOADED : isExpand ? iconOpen || (0, _ui.getIcon)().TREE_NODE_OPEN : iconClose || (0, _ui.getIcon)().TREE_NODE_CLOSE
2011
- })])] : []), renderRadio(node, nodeid, isRadioChecked), renderCheckbox(node, nodeid, isCheckboxChecked), (0, _vue.h)('div', {
2654
+ })])] : []), renderDragIcon(node, nodeid), renderRadio(node, nodeid, isRadioChecked), renderCheckbox(node, nodeid, isCheckboxChecked), (0, _vue.h)('div', {
2012
2655
  class: 'vxe-tree--node-item-inner'
2013
2656
  }, [(0, _vue.h)('div', {
2014
2657
  class: 'vxe-tree--node-item-title'
@@ -2044,6 +2687,43 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2044
2687
  });
2045
2688
  return nodeVNs;
2046
2689
  };
2690
+ const renderDragTip = () => {
2691
+ const {
2692
+ drag
2693
+ } = props;
2694
+ const {
2695
+ dragNode,
2696
+ dragTipText
2697
+ } = reactData;
2698
+ const dragOpts = computeDragOpts.value;
2699
+ const dNode = dragNode;
2700
+ if (drag) {
2701
+ return (0, _vue.h)('div', {
2702
+ class: 'vxe-tree--drag-wrapper'
2703
+ }, [(0, _vue.h)('div', {
2704
+ ref: refDragNodeLineElem,
2705
+ class: ['vxe-tree--drag-node-line', {
2706
+ 'is--guides': dragOpts.showGuidesStatus
2707
+ }]
2708
+ }), dNode && dragOpts.showDragTip ? (0, _vue.h)('div', {
2709
+ ref: refDragTipElem,
2710
+ class: 'vxe-tree--drag-sort-tip'
2711
+ }, [(0, _vue.h)('div', {
2712
+ class: 'vxe-tree--drag-sort-tip-wrapper'
2713
+ }, [(0, _vue.h)('div', {
2714
+ class: 'vxe-tree--drag-sort-tip-status'
2715
+ }, [(0, _vue.h)('span', {
2716
+ class: ['vxe-tree--drag-sort-tip-normal-status', (0, _ui.getIcon)().TREE_DRAG_STATUS_NODE]
2717
+ }), (0, _vue.h)('span', {
2718
+ class: ['vxe-tree--drag-sort-tip-sub-status', (0, _ui.getIcon)().TREE_DRAG_STATUS_SUB_NODE]
2719
+ }), (0, _vue.h)('span', {
2720
+ class: ['vxe-tree--drag-sort-tip-disabled-status', (0, _ui.getIcon)().TREE_DRAG_DISABLED]
2721
+ })]), (0, _vue.h)('div', {
2722
+ class: 'vxe-tree--drag-sort-tip-content'
2723
+ }, dragTipText)])]) : (0, _ui.renderEmptyElement)($xeTree)]);
2724
+ }
2725
+ return (0, _ui.renderEmptyElement)($xeTree);
2726
+ };
2047
2727
  const renderVN = () => {
2048
2728
  const {
2049
2729
  loading,
@@ -2102,6 +2782,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2102
2782
  }, footerSlot({
2103
2783
  $tree: $xeTree
2104
2784
  })) : (0, _ui.renderEmptyElement)($xeTree),
2785
+ /**
2786
+ * 拖拽提示
2787
+ */
2788
+ renderDragTip(),
2105
2789
  /**
2106
2790
  * 加载中
2107
2791
  */