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.
- package/es/icon/style.css +1 -1
- package/es/language/ar-EG.js +2 -1
- package/es/language/de-DE.js +2 -1
- package/es/language/en-US.js +2 -1
- package/es/language/es-ES.js +2 -1
- package/es/language/fr-FR.js +2 -1
- package/es/language/hu-HU.js +2 -1
- package/es/language/hy-AM.js +2 -1
- package/es/language/id-ID.js +2 -1
- package/es/language/it-IT.js +2 -1
- package/es/language/ja-JP.js +2 -1
- package/es/language/ko-KR.js +2 -1
- package/es/language/ms-MY.js +2 -1
- package/es/language/nb-NO.js +2 -1
- package/es/language/pt-BR.js +2 -1
- package/es/language/ru-RU.js +2 -1
- package/es/language/th-TH.js +2 -1
- package/es/language/ug-CN.js +2 -1
- package/es/language/uk-UA.js +2 -1
- package/es/language/uz-UZ.js +2 -1
- package/es/language/vi-VN.js +2 -1
- package/es/language/zh-CHT.js +2 -1
- package/es/language/zh-CN.js +2 -1
- package/es/select/src/select.js +23 -2
- package/es/select/style.css +13 -4
- package/es/select/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tree/src/tree.js +640 -25
- package/es/tree/style.css +119 -0
- package/es/tree/style.min.css +1 -1
- package/es/ui/index.js +11 -1
- package/es/ui/src/anime.js +46 -0
- package/es/ui/src/log.js +1 -1
- package/es/vxe-select/style.css +13 -4
- package/es/vxe-select/style.min.css +1 -1
- package/es/vxe-tree/style.css +119 -0
- package/es/vxe-tree/style.min.css +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +807 -37
- package/lib/index.umd.min.js +1 -1
- package/lib/language/ar-EG.js +2 -1
- package/lib/language/ar-EG.min.js +1 -1
- package/lib/language/ar-EG.umd.js +2 -1
- package/lib/language/de-DE.js +2 -1
- package/lib/language/de-DE.min.js +1 -1
- package/lib/language/de-DE.umd.js +2 -1
- package/lib/language/en-US.js +2 -1
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +2 -1
- package/lib/language/es-ES.js +2 -1
- package/lib/language/es-ES.min.js +1 -1
- package/lib/language/es-ES.umd.js +2 -1
- package/lib/language/fr-FR.js +2 -1
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.umd.js +2 -1
- package/lib/language/hu-HU.js +2 -1
- package/lib/language/hu-HU.min.js +1 -1
- package/lib/language/hu-HU.umd.js +2 -1
- package/lib/language/hy-AM.js +2 -1
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +2 -1
- package/lib/language/id-ID.js +2 -1
- package/lib/language/id-ID.min.js +1 -1
- package/lib/language/id-ID.umd.js +2 -1
- package/lib/language/it-IT.js +2 -1
- package/lib/language/it-IT.min.js +1 -1
- package/lib/language/it-IT.umd.js +2 -1
- package/lib/language/ja-JP.js +2 -1
- package/lib/language/ja-JP.min.js +1 -1
- package/lib/language/ja-JP.umd.js +2 -1
- package/lib/language/ko-KR.js +2 -1
- package/lib/language/ko-KR.min.js +1 -1
- package/lib/language/ko-KR.umd.js +2 -1
- package/lib/language/ms-MY.js +2 -1
- package/lib/language/ms-MY.min.js +1 -1
- package/lib/language/ms-MY.umd.js +2 -1
- package/lib/language/nb-NO.js +2 -1
- package/lib/language/nb-NO.min.js +1 -1
- package/lib/language/nb-NO.umd.js +2 -1
- package/lib/language/pt-BR.js +2 -1
- package/lib/language/pt-BR.min.js +1 -1
- package/lib/language/pt-BR.umd.js +2 -1
- package/lib/language/ru-RU.js +2 -1
- package/lib/language/ru-RU.min.js +1 -1
- package/lib/language/ru-RU.umd.js +2 -1
- package/lib/language/th-TH.js +2 -1
- package/lib/language/th-TH.min.js +1 -1
- package/lib/language/th-TH.umd.js +2 -1
- package/lib/language/ug-CN.js +2 -1
- package/lib/language/ug-CN.min.js +1 -1
- package/lib/language/ug-CN.umd.js +2 -1
- package/lib/language/uk-UA.js +2 -1
- package/lib/language/uk-UA.min.js +1 -1
- package/lib/language/uk-UA.umd.js +2 -1
- package/lib/language/uz-UZ.js +2 -1
- package/lib/language/uz-UZ.min.js +1 -1
- package/lib/language/uz-UZ.umd.js +2 -1
- package/lib/language/vi-VN.js +2 -1
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/vi-VN.umd.js +2 -1
- package/lib/language/zh-CHT.js +2 -1
- package/lib/language/zh-CHT.min.js +1 -1
- package/lib/language/zh-CHT.umd.js +2 -1
- package/lib/language/zh-CN.js +2 -1
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +2 -1
- package/lib/select/src/select.js +25 -2
- package/lib/select/src/select.min.js +1 -1
- package/lib/select/style/style.css +13 -4
- package/lib/select/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tree/src/tree.js +704 -20
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/tree/style/style.css +119 -0
- package/lib/tree/style/style.min.css +1 -1
- package/lib/ui/index.js +11 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/anime.js +56 -0
- package/lib/ui/src/anime.min.js +1 -0
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-select/style/style.css +13 -4
- package/lib/vxe-select/style/style.min.css +1 -1
- package/lib/vxe-tree/style/style.css +119 -0
- package/lib/vxe-tree/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/language/ar-EG.ts +2 -1
- package/packages/language/de-DE.ts +2 -1
- package/packages/language/en-US.ts +2 -1
- package/packages/language/es-ES.ts +2 -1
- package/packages/language/fr-FR.ts +2 -1
- package/packages/language/hu-HU.ts +2 -1
- package/packages/language/hy-AM.ts +2 -1
- package/packages/language/id-ID.ts +2 -1
- package/packages/language/it-IT.ts +2 -1
- package/packages/language/ja-JP.ts +2 -1
- package/packages/language/ko-KR.ts +2 -1
- package/packages/language/ms-MY.ts +2 -1
- package/packages/language/nb-NO.ts +2 -1
- package/packages/language/pt-BR.ts +2 -1
- package/packages/language/ru-RU.ts +2 -1
- package/packages/language/th-TH.ts +2 -1
- package/packages/language/ug-CN.ts +2 -1
- package/packages/language/uk-UA.ts +2 -1
- package/packages/language/uz-UZ.ts +2 -1
- package/packages/language/vi-VN.ts +2 -1
- package/packages/language/zh-CHT.ts +2 -1
- package/packages/language/zh-CN.ts +2 -1
- package/packages/select/src/select.ts +26 -3
- package/packages/tree/src/tree.ts +683 -20
- package/packages/ui/index.ts +10 -0
- package/packages/ui/src/anime.ts +52 -0
- package/styles/components/select.scss +13 -3
- package/styles/components/tree.scss +116 -0
- package/styles/theme/dark.scss +1 -0
- package/styles/theme/light.scss +1 -0
- package/styles/variable.scss +1 -0
- package/types/components/select.d.ts +6 -0
- package/types/components/tree.d.ts +173 -10
- package/types/ui/global-icon.d.ts +4 -0
- /package/es/icon/{iconfont.1765265204333.ttf → iconfont.1765418463677.ttf} +0 -0
- /package/es/icon/{iconfont.1765265204333.woff → iconfont.1765418463677.woff} +0 -0
- /package/es/icon/{iconfont.1765265204333.woff2 → iconfont.1765418463677.woff2} +0 -0
- /package/es/{iconfont.1765265204333.ttf → iconfont.1765418463677.ttf} +0 -0
- /package/es/{iconfont.1765265204333.woff → iconfont.1765418463677.woff} +0 -0
- /package/es/{iconfont.1765265204333.woff2 → iconfont.1765418463677.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1765265204333.ttf → iconfont.1765418463677.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1765265204333.woff → iconfont.1765418463677.woff} +0 -0
- /package/lib/icon/style/{iconfont.1765265204333.woff2 → iconfont.1765418463677.woff2} +0 -0
- /package/lib/{iconfont.1765265204333.ttf → iconfont.1765418463677.ttf} +0 -0
- /package/lib/{iconfont.1765265204333.woff → iconfont.1765418463677.woff} +0 -0
- /package/lib/{iconfont.1765265204333.woff2 → iconfont.1765418463677.woff2} +0 -0
package/lib/tree/src/tree.js
CHANGED
|
@@ -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
|
|
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 =
|
|
447
|
-
reactData.customMinHeight =
|
|
448
|
-
reactData.customMaxHeight =
|
|
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
|
|
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
|
-
|
|
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: `${
|
|
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
|
*/
|