vxe-pc-ui 3.20.0 → 3.20.1
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/card/src/card.js +18 -3
- package/es/icon/style.css +1 -1
- package/es/language/fr-FR.js +29 -29
- package/es/layout-aside/src/layout-aside.js +8 -5
- package/es/layout-body/src/layout-body.js +22 -11
- package/es/list/src/list.js +86 -35
- package/es/list/style.css +25 -8
- package/es/list/style.min.css +1 -1
- package/es/scrollbar/src/scrollbar.js +69 -17
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tabs/src/tabs.js +19 -3
- package/es/tree/src/tree.js +439 -56
- package/es/tree/style.css +43 -0
- package/es/tree/style.min.css +1 -1
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/es/ui/src/utils.js +3 -0
- package/es/vxe-list/style.css +25 -8
- package/es/vxe-list/style.min.css +1 -1
- package/es/vxe-tree/style.css +43 -0
- package/es/vxe-tree/style.min.css +1 -1
- package/lib/card/src/card.js +18 -3
- package/lib/card/src/card.min.js +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +640 -139
- package/lib/index.umd.min.js +1 -1
- package/lib/language/fr-FR.js +29 -29
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.umd.js +29 -29
- package/lib/layout-aside/src/layout-aside.js +8 -8
- package/lib/layout-aside/src/layout-aside.min.js +1 -1
- package/lib/layout-body/src/layout-body.js +26 -19
- package/lib/layout-body/src/layout-body.min.js +1 -1
- package/lib/list/src/list.js +73 -32
- package/lib/list/src/list.min.js +1 -1
- package/lib/list/style/style.css +25 -8
- package/lib/list/style/style.min.css +1 -1
- package/lib/scrollbar/src/scrollbar.js +74 -15
- package/lib/scrollbar/src/scrollbar.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tabs/src/tabs.js +20 -7
- package/lib/tabs/src/tabs.min.js +1 -1
- package/lib/tree/src/tree.js +416 -53
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/tree/style/style.css +43 -0
- package/lib/tree/style/style.min.css +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/ui/src/utils.js +4 -0
- package/lib/ui/src/utils.min.js +1 -1
- package/lib/vxe-list/style/style.css +25 -8
- package/lib/vxe-list/style/style.min.css +1 -1
- package/lib/vxe-tree/style/style.css +43 -0
- package/lib/vxe-tree/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/card/src/card.ts +19 -3
- package/packages/language/fr-FR.ts +903 -903
- package/packages/layout-aside/src/layout-aside.ts +8 -5
- package/packages/layout-body/src/layout-body.ts +26 -14
- package/packages/list/src/list.ts +97 -41
- package/packages/scrollbar/src/scrollbar.ts +79 -17
- package/packages/tabs/src/tabs.ts +20 -7
- package/packages/tree/src/tree.ts +482 -67
- package/packages/ui/src/utils.ts +4 -0
- package/styles/components/list.scss +35 -10
- package/styles/components/tree.scss +76 -0
- package/types/components/card.d.ts +10 -1
- package/types/components/layout-aside.d.ts +10 -1
- package/types/components/layout-body.d.ts +10 -1
- package/types/components/list.d.ts +10 -1
- package/types/components/scrollbar.d.ts +16 -2
- package/types/components/table.d.ts +47 -4
- package/types/components/tabs.d.ts +10 -1
- package/types/components/tree.d.ts +33 -2
- /package/es/icon/{iconfont.1791880407207.ttf → iconfont.1791950618327.ttf} +0 -0
- /package/es/icon/{iconfont.1791880407207.woff → iconfont.1791950618327.woff} +0 -0
- /package/es/icon/{iconfont.1791880407207.woff2 → iconfont.1791950618327.woff2} +0 -0
- /package/es/{iconfont.1791880407207.ttf → iconfont.1791950618327.ttf} +0 -0
- /package/es/{iconfont.1791880407207.woff → iconfont.1791950618327.woff} +0 -0
- /package/es/{iconfont.1791880407207.woff2 → iconfont.1791950618327.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1791880407207.ttf → iconfont.1791950618327.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1791880407207.woff → iconfont.1791950618327.woff} +0 -0
- /package/lib/icon/style/{iconfont.1791880407207.woff2 → iconfont.1791950618327.woff2} +0 -0
- /package/lib/{iconfont.1791880407207.ttf → iconfont.1791950618327.ttf} +0 -0
- /package/lib/{iconfont.1791880407207.woff → iconfont.1791950618327.woff} +0 -0
- /package/lib/{iconfont.1791880407207.woff2 → iconfont.1791950618327.woff2} +0 -0
package/es/tree/src/tree.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { defineVxeComponent } from '../../ui/src/comp';
|
|
2
2
|
import XEUtils from 'xe-utils';
|
|
3
|
-
import { VxeUI, createEvent, globalEvents, globalResize, renderEmptyElement, globalMixins } from '../../ui';
|
|
3
|
+
import { VxeUI, domUtils, createEvent, globalEvents, globalResize, renderEmptyElement, globalMixins } from '../../ui';
|
|
4
4
|
import { calcTreeLine, getItemCacheObj } from './util';
|
|
5
5
|
import { createComponentLog } from '../../ui/src/log';
|
|
6
6
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
7
7
|
import { crossTreeDragNodeGlobal, getCrossTreeDragNodeInfo } from './store';
|
|
8
8
|
import { toCssUnit, isScale, getPaddingTopBottomSize, addClass, removeClass, getTpImg, hasControlKey, getEventTargetNode, hasClass } from '../../ui/src/dom';
|
|
9
|
-
import { isEnableConf, enModelValue, deModelValue, getText } from '../../ui/src/utils';
|
|
9
|
+
import { isEnableConf, enModelValue, deModelValue, getText, getDefaultConfig } from '../../ui/src/utils';
|
|
10
10
|
import { moveRowAnimateToTb, clearRowAnimate } from '../../ui/src/anime';
|
|
11
|
+
import { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } from '../../scrollbar/src/util';
|
|
11
12
|
import VxeLoadingComponent from '../../loading';
|
|
12
13
|
import VxeTooltipComponent from '../../tooltip';
|
|
13
14
|
const { warnLog, errLog } = createComponentLog('tree');
|
|
@@ -498,6 +499,34 @@ function insertTreeNode($xeTree, newRecords, isAppend) {
|
|
|
498
499
|
nodeMaps[nodeid] = itemRest;
|
|
499
500
|
});
|
|
500
501
|
}
|
|
502
|
+
function createReactData() {
|
|
503
|
+
return {
|
|
504
|
+
parentHeight: 0,
|
|
505
|
+
customHeight: 0,
|
|
506
|
+
customMinHeight: 0,
|
|
507
|
+
customMaxHeight: 0,
|
|
508
|
+
currentNode: null,
|
|
509
|
+
scrollYLoad: false,
|
|
510
|
+
bodyHeight: 0,
|
|
511
|
+
topSpaceHeight: 0,
|
|
512
|
+
selectRadioKey: null,
|
|
513
|
+
treeList: [],
|
|
514
|
+
updateExpandedFlag: 1,
|
|
515
|
+
updateCheckboxFlag: 1,
|
|
516
|
+
// 滚动条
|
|
517
|
+
yThumbHeight: 0,
|
|
518
|
+
xThumbWidth: 0,
|
|
519
|
+
insertNodeFlag: 1,
|
|
520
|
+
removeNodeFlag: 1,
|
|
521
|
+
dragNode: null,
|
|
522
|
+
dragTipText: '',
|
|
523
|
+
isCrossDragNode: false,
|
|
524
|
+
tooltipStore: {
|
|
525
|
+
visible: false,
|
|
526
|
+
node: null
|
|
527
|
+
}
|
|
528
|
+
};
|
|
529
|
+
}
|
|
501
530
|
function createInternalData() {
|
|
502
531
|
return {
|
|
503
532
|
// initialized: false,
|
|
@@ -510,8 +539,14 @@ function createInternalData() {
|
|
|
510
539
|
indeterminateNodeMaps: {},
|
|
511
540
|
treeExpandedMaps: {},
|
|
512
541
|
treeExpandLazyLoadedMaps: {},
|
|
513
|
-
|
|
542
|
+
// 滚动条
|
|
543
|
+
// resizeObserver: undefined,
|
|
544
|
+
// isThumbDrag: false,
|
|
545
|
+
thumbDragOffset: 0,
|
|
546
|
+
yThumbTop: 0,
|
|
547
|
+
xThumbLeft: 0,
|
|
514
548
|
lastScrollTop: 0,
|
|
549
|
+
lastScrollLeft: 0,
|
|
515
550
|
scrollYStore: {
|
|
516
551
|
startIndex: 0,
|
|
517
552
|
endIndex: 0,
|
|
@@ -528,31 +563,6 @@ function createInternalData() {
|
|
|
528
563
|
// hpTimeout: undefined
|
|
529
564
|
};
|
|
530
565
|
}
|
|
531
|
-
function createReactData() {
|
|
532
|
-
return {
|
|
533
|
-
parentHeight: 0,
|
|
534
|
-
customHeight: 0,
|
|
535
|
-
customMinHeight: 0,
|
|
536
|
-
customMaxHeight: 0,
|
|
537
|
-
currentNode: null,
|
|
538
|
-
scrollYLoad: false,
|
|
539
|
-
bodyHeight: 0,
|
|
540
|
-
topSpaceHeight: 0,
|
|
541
|
-
selectRadioKey: null,
|
|
542
|
-
treeList: [],
|
|
543
|
-
updateExpandedFlag: 1,
|
|
544
|
-
updateCheckboxFlag: 1,
|
|
545
|
-
insertNodeFlag: 1,
|
|
546
|
-
removeNodeFlag: 1,
|
|
547
|
-
dragNode: null,
|
|
548
|
-
dragTipText: '',
|
|
549
|
-
isCrossDragNode: false,
|
|
550
|
-
tooltipStore: {
|
|
551
|
-
visible: false,
|
|
552
|
-
node: null
|
|
553
|
-
}
|
|
554
|
-
};
|
|
555
|
-
}
|
|
556
566
|
export default {
|
|
557
567
|
name: 'VxeTree',
|
|
558
568
|
mixins: [
|
|
@@ -685,7 +695,12 @@ export default {
|
|
|
685
695
|
type: String,
|
|
686
696
|
default: () => getConfig().tree.size || getConfig().size
|
|
687
697
|
},
|
|
688
|
-
virtualYConfig: Object
|
|
698
|
+
virtualYConfig: Object,
|
|
699
|
+
useScrollbar: {
|
|
700
|
+
type: Boolean,
|
|
701
|
+
default: () => getConfig().tree.useScrollbar
|
|
702
|
+
},
|
|
703
|
+
scrollbarConfig: Object
|
|
689
704
|
},
|
|
690
705
|
provide() {
|
|
691
706
|
const $xeTree = this;
|
|
@@ -697,7 +712,7 @@ export default {
|
|
|
697
712
|
const xID = XEUtils.uniqueId();
|
|
698
713
|
const reactData = createReactData();
|
|
699
714
|
return Object.assign(Object.assign({}, {}), { xID,
|
|
700
|
-
reactData, crossTreeDragNodeInfo: crossTreeDragNodeGlobal,
|
|
715
|
+
reactData, crossTreeDragNodeInfo: crossTreeDragNodeGlobal, reFlag: 0, dataFlag: 0 });
|
|
701
716
|
},
|
|
702
717
|
computed: Object.assign(Object.assign({}, {}), { computeTitleField() {
|
|
703
718
|
const $xeTree = this;
|
|
@@ -795,6 +810,20 @@ export default {
|
|
|
795
810
|
const props = $xeTree;
|
|
796
811
|
return Object.assign({}, getConfig().tree.menuConfig, props.menuConfig);
|
|
797
812
|
},
|
|
813
|
+
computeWrapperStyles() {
|
|
814
|
+
const $xeTree = this;
|
|
815
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
816
|
+
const scrollbarXOpts = $xeTree.computeScrollbarXOpts;
|
|
817
|
+
const scrollbarYOpts = $xeTree.computeScrollbarYOpts;
|
|
818
|
+
const barWidth = getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
|
|
819
|
+
const barHeight = getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
|
|
820
|
+
const stys = {};
|
|
821
|
+
if (barWidth || barHeight) {
|
|
822
|
+
stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
|
|
823
|
+
stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
|
|
824
|
+
}
|
|
825
|
+
return stys;
|
|
826
|
+
},
|
|
798
827
|
computeTreeStyle() {
|
|
799
828
|
const $xeTree = this;
|
|
800
829
|
const props = $xeTree;
|
|
@@ -831,6 +860,83 @@ export default {
|
|
|
831
860
|
const $xeTree = this;
|
|
832
861
|
const props = $xeTree;
|
|
833
862
|
return Object.assign({}, getConfig().tree.filterConfig, props.filterConfig);
|
|
863
|
+
},
|
|
864
|
+
computeScrollbarOpts() {
|
|
865
|
+
const $xeTree = this;
|
|
866
|
+
const props = $xeTree;
|
|
867
|
+
return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
|
|
868
|
+
},
|
|
869
|
+
computeScrollbarXOpts() {
|
|
870
|
+
const $xeTree = this;
|
|
871
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
872
|
+
return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
|
|
873
|
+
visible: false
|
|
874
|
+
});
|
|
875
|
+
},
|
|
876
|
+
computeScrollbarYOpts() {
|
|
877
|
+
const $xeTree = this;
|
|
878
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
879
|
+
return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
|
|
880
|
+
},
|
|
881
|
+
computeScrollXVisible() {
|
|
882
|
+
const $xeTree = this;
|
|
883
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
884
|
+
const scrollbarXOpts = $xeTree.computeScrollbarXOpts;
|
|
885
|
+
return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
|
|
886
|
+
},
|
|
887
|
+
computeScrollYVisible() {
|
|
888
|
+
const $xeTree = this;
|
|
889
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
890
|
+
const scrollbarYOpts = $xeTree.computeScrollbarYOpts;
|
|
891
|
+
return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
|
|
892
|
+
},
|
|
893
|
+
computeScrollXAutoHide() {
|
|
894
|
+
const $xeTree = this;
|
|
895
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
896
|
+
const scrollbarXOpts = $xeTree.computeScrollbarXOpts;
|
|
897
|
+
return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
|
|
898
|
+
},
|
|
899
|
+
computeScrollYAutoHide() {
|
|
900
|
+
const $xeTree = this;
|
|
901
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
902
|
+
const scrollbarYOpts = $xeTree.computeScrollbarYOpts;
|
|
903
|
+
return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
|
|
904
|
+
},
|
|
905
|
+
computeScrollbarWrapperClss() {
|
|
906
|
+
const $xeTree = this;
|
|
907
|
+
const reactData = $xeTree.reactData;
|
|
908
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
909
|
+
const { padding } = scrollbarOpts;
|
|
910
|
+
const { yThumbHeight, xThumbWidth } = reactData;
|
|
911
|
+
const scrollbarXToTop = $xeTree.computeScrollbarXToTop;
|
|
912
|
+
const scrollbarYToLeft = $xeTree.computeScrollbarYToLeft;
|
|
913
|
+
const scrollXVisible = $xeTree.computeScrollXVisible;
|
|
914
|
+
const scrollYVisible = $xeTree.computeScrollYVisible;
|
|
915
|
+
const scrollXAutoHide = $xeTree.computeScrollXAutoHide;
|
|
916
|
+
const scrollYAutoHide = $xeTree.computeScrollYAutoHide;
|
|
917
|
+
return domUtils.buildClass([
|
|
918
|
+
'vxe-scrollbar is--virtual',
|
|
919
|
+
`ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
|
|
920
|
+
`ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
|
|
921
|
+
`sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
|
|
922
|
+
`sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
|
|
923
|
+
], {
|
|
924
|
+
'is--padding': padding,
|
|
925
|
+
'ov-x--auto-hide': scrollXAutoHide,
|
|
926
|
+
'ov-y--auto-hide': scrollYAutoHide,
|
|
927
|
+
'overflow-y': yThumbHeight,
|
|
928
|
+
'overflow-x': xThumbWidth
|
|
929
|
+
});
|
|
930
|
+
},
|
|
931
|
+
computeScrollbarXToTop() {
|
|
932
|
+
const $xeTree = this;
|
|
933
|
+
const scrollbarXOpts = $xeTree.computeScrollbarXOpts;
|
|
934
|
+
return scrollbarXOpts.position === 'top';
|
|
935
|
+
},
|
|
936
|
+
computeScrollbarYToLeft() {
|
|
937
|
+
const $xeTree = this;
|
|
938
|
+
const scrollbarYOpts = $xeTree.computeScrollbarYOpts;
|
|
939
|
+
return scrollbarYOpts.position === 'left';
|
|
834
940
|
} }),
|
|
835
941
|
methods: {
|
|
836
942
|
//
|
|
@@ -1455,6 +1561,11 @@ export default {
|
|
|
1455
1561
|
}
|
|
1456
1562
|
});
|
|
1457
1563
|
},
|
|
1564
|
+
updateScrollbar() {
|
|
1565
|
+
const $xeTree = this;
|
|
1566
|
+
$xeTree.updateThumbSize();
|
|
1567
|
+
$xeTree.updateThumbOffset();
|
|
1568
|
+
},
|
|
1458
1569
|
/**
|
|
1459
1570
|
* 重新计算列表
|
|
1460
1571
|
*/
|
|
@@ -1479,6 +1590,7 @@ export default {
|
|
|
1479
1590
|
const parentPaddingSize = getPaddingTopBottomSize(parentEl);
|
|
1480
1591
|
reactData.parentHeight = Math.max(headHeight + footHeight + rowHeight, parentEl.clientHeight - parentPaddingSize - headHeight - footHeight);
|
|
1481
1592
|
}
|
|
1593
|
+
$xeTree.updateScrollbar();
|
|
1482
1594
|
$xeTree.updateHeight();
|
|
1483
1595
|
return $xeTree.computeScrollLoad().then(() => {
|
|
1484
1596
|
$xeTree.updateHeight();
|
|
@@ -1523,6 +1635,7 @@ export default {
|
|
|
1523
1635
|
const scrollLeft = scrollBodyElem.scrollLeft;
|
|
1524
1636
|
const isX = scrollLeft !== internalData.lastScrollLeft;
|
|
1525
1637
|
const isY = scrollTop !== internalData.lastScrollTop;
|
|
1638
|
+
$xeTree.updateThumbOffset();
|
|
1526
1639
|
internalData.lastScrollTop = scrollTop;
|
|
1527
1640
|
internalData.lastScrollLeft = scrollLeft;
|
|
1528
1641
|
if (reactData.scrollYLoad) {
|
|
@@ -2397,14 +2510,6 @@ export default {
|
|
|
2397
2510
|
$xeTree.emitRadioMode(value);
|
|
2398
2511
|
$xeTree.dispatchEvent('radio-change', { node, value, checked: isChecked }, evnt);
|
|
2399
2512
|
},
|
|
2400
|
-
handleGlobalResizeEvent() {
|
|
2401
|
-
const $xeTree = this;
|
|
2402
|
-
const el = $xeTree.$refs.refElem;
|
|
2403
|
-
if (!el || !el.clientWidth) {
|
|
2404
|
-
return;
|
|
2405
|
-
}
|
|
2406
|
-
$xeTree.recalculate();
|
|
2407
|
-
},
|
|
2408
2513
|
reloadData(data) {
|
|
2409
2514
|
const $xeTree = this;
|
|
2410
2515
|
return $xeTree.loadData(data || []);
|
|
@@ -3165,6 +3270,186 @@ export default {
|
|
|
3165
3270
|
}, evnt);
|
|
3166
3271
|
}
|
|
3167
3272
|
},
|
|
3273
|
+
// 滚动条
|
|
3274
|
+
updateThumbSize() {
|
|
3275
|
+
const $xeTree = this;
|
|
3276
|
+
const reactData = $xeTree.reactData;
|
|
3277
|
+
const viewEl = $xeTree.$refs.refVirtualWrapper;
|
|
3278
|
+
if (!viewEl) {
|
|
3279
|
+
return;
|
|
3280
|
+
}
|
|
3281
|
+
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
3282
|
+
return;
|
|
3283
|
+
}
|
|
3284
|
+
const trackXEl = $xeTree.$refs.refTrackXElem;
|
|
3285
|
+
const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
|
|
3286
|
+
const thumbXElem = $xeTree.$refs.refThumbXElem;
|
|
3287
|
+
if (thumbXElem) {
|
|
3288
|
+
thumbXElem.style.width = xThumbWidth + 'px';
|
|
3289
|
+
}
|
|
3290
|
+
reactData.xThumbWidth = xThumbWidth;
|
|
3291
|
+
const trackYEl = $xeTree.$refs.refTrackYElem;
|
|
3292
|
+
const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
|
|
3293
|
+
const thumbYElem = $xeTree.$refs.refThumbYElem;
|
|
3294
|
+
if (thumbYElem) {
|
|
3295
|
+
thumbYElem.style.height = yThumbHeight + 'px';
|
|
3296
|
+
}
|
|
3297
|
+
reactData.yThumbHeight = yThumbHeight;
|
|
3298
|
+
},
|
|
3299
|
+
updateThumbOffset() {
|
|
3300
|
+
const $xeTree = this;
|
|
3301
|
+
const reactData = $xeTree.reactData;
|
|
3302
|
+
const internalData = $xeTree.internalData;
|
|
3303
|
+
const viewEl = $xeTree.$refs.refVirtualWrapper;
|
|
3304
|
+
if (!viewEl) {
|
|
3305
|
+
return;
|
|
3306
|
+
}
|
|
3307
|
+
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
3308
|
+
return;
|
|
3309
|
+
}
|
|
3310
|
+
const { xThumbWidth, yThumbHeight } = reactData;
|
|
3311
|
+
const trackXEl = $xeTree.$refs.refTrackXElem;
|
|
3312
|
+
const thumbXElem = $xeTree.$refs.refThumbXElem;
|
|
3313
|
+
const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
|
|
3314
|
+
internalData.xThumbLeft = xThumbLeft;
|
|
3315
|
+
if (thumbXElem && xThumbWidth) {
|
|
3316
|
+
thumbXElem.style.width = xThumbWidth + 'px';
|
|
3317
|
+
thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
|
|
3318
|
+
}
|
|
3319
|
+
const trackYEl = $xeTree.$refs.refTrackYElem;
|
|
3320
|
+
const thumbYElem = $xeTree.$refs.refThumbYElem;
|
|
3321
|
+
const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
|
|
3322
|
+
internalData.yThumbTop = yThumbTop;
|
|
3323
|
+
if (thumbYElem && yThumbHeight) {
|
|
3324
|
+
thumbYElem.style.height = yThumbHeight + 'px';
|
|
3325
|
+
thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
|
|
3326
|
+
}
|
|
3327
|
+
},
|
|
3328
|
+
clickTrackXEvent(evnt) {
|
|
3329
|
+
const $xeTree = this;
|
|
3330
|
+
const reactData = $xeTree.reactData;
|
|
3331
|
+
const trackEl = evnt.currentTarget;
|
|
3332
|
+
if (trackEl !== evnt.target) {
|
|
3333
|
+
return;
|
|
3334
|
+
}
|
|
3335
|
+
const viewEl = $xeTree.$refs.refVirtualWrapper;
|
|
3336
|
+
if (!viewEl) {
|
|
3337
|
+
return;
|
|
3338
|
+
}
|
|
3339
|
+
const { xThumbWidth } = reactData;
|
|
3340
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
3341
|
+
viewEl.scrollTo({
|
|
3342
|
+
left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
|
|
3343
|
+
behavior: 'auto'
|
|
3344
|
+
});
|
|
3345
|
+
},
|
|
3346
|
+
clickTrackYEvent(evnt) {
|
|
3347
|
+
const $xeTree = this;
|
|
3348
|
+
const reactData = $xeTree.reactData;
|
|
3349
|
+
const trackEl = evnt.currentTarget;
|
|
3350
|
+
if (trackEl !== evnt.target) {
|
|
3351
|
+
return;
|
|
3352
|
+
}
|
|
3353
|
+
const viewEl = $xeTree.$refs.refVirtualWrapper;
|
|
3354
|
+
if (!viewEl) {
|
|
3355
|
+
return;
|
|
3356
|
+
}
|
|
3357
|
+
const { yThumbHeight } = reactData;
|
|
3358
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
3359
|
+
viewEl.scrollTo({
|
|
3360
|
+
top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
|
|
3361
|
+
behavior: 'auto'
|
|
3362
|
+
});
|
|
3363
|
+
},
|
|
3364
|
+
pointerdownThumbXEvent(evnt) {
|
|
3365
|
+
const $xeTree = this;
|
|
3366
|
+
const reactData = $xeTree.reactData;
|
|
3367
|
+
const internalData = $xeTree.internalData;
|
|
3368
|
+
const thumbEl = evnt.currentTarget;
|
|
3369
|
+
internalData.isThumbDrag = true;
|
|
3370
|
+
thumbEl.setPointerCapture(evnt.pointerId);
|
|
3371
|
+
const viewEl = $xeTree.$refs.refVirtualWrapper;
|
|
3372
|
+
if (!viewEl) {
|
|
3373
|
+
return;
|
|
3374
|
+
}
|
|
3375
|
+
const { xThumbWidth } = reactData;
|
|
3376
|
+
const trackEl = thumbEl.parentElement;
|
|
3377
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
3378
|
+
const pointerPosition = evnt.clientX - trackRect.left;
|
|
3379
|
+
// 记录 thumb 的偏移
|
|
3380
|
+
const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
|
|
3381
|
+
internalData.thumbDragOffset = pointerPosition - thumbOffset;
|
|
3382
|
+
},
|
|
3383
|
+
pointermoveThumbXEvent(evnt) {
|
|
3384
|
+
const $xeTree = this;
|
|
3385
|
+
const reactData = $xeTree.reactData;
|
|
3386
|
+
const internalData = $xeTree.internalData;
|
|
3387
|
+
const thumbEl = evnt.currentTarget;
|
|
3388
|
+
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
3389
|
+
return;
|
|
3390
|
+
}
|
|
3391
|
+
const { isThumbDrag, thumbDragOffset } = internalData;
|
|
3392
|
+
if (isThumbDrag) {
|
|
3393
|
+
const viewEl = $xeTree.$refs.refVirtualWrapper;
|
|
3394
|
+
if (!viewEl) {
|
|
3395
|
+
return;
|
|
3396
|
+
}
|
|
3397
|
+
const { xThumbWidth } = reactData;
|
|
3398
|
+
const thumbEl = evnt.currentTarget;
|
|
3399
|
+
const trackEl = thumbEl.parentElement;
|
|
3400
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
3401
|
+
// 更新偏移
|
|
3402
|
+
viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
|
|
3403
|
+
}
|
|
3404
|
+
},
|
|
3405
|
+
cleatPointerThumbEvent(evnt) {
|
|
3406
|
+
const $xeTree = this;
|
|
3407
|
+
const internalData = $xeTree.internalData;
|
|
3408
|
+
const thumbEl = evnt.currentTarget;
|
|
3409
|
+
thumbEl.releasePointerCapture(evnt.pointerId);
|
|
3410
|
+
internalData.isThumbDrag = false;
|
|
3411
|
+
},
|
|
3412
|
+
pointerdownThumbYEvent(evnt) {
|
|
3413
|
+
const $xeTree = this;
|
|
3414
|
+
const reactData = $xeTree.reactData;
|
|
3415
|
+
const internalData = $xeTree.internalData;
|
|
3416
|
+
const thumbEl = evnt.currentTarget;
|
|
3417
|
+
internalData.isThumbDrag = true;
|
|
3418
|
+
thumbEl.setPointerCapture(evnt.pointerId);
|
|
3419
|
+
const viewEl = $xeTree.$refs.refVirtualWrapper;
|
|
3420
|
+
if (!viewEl) {
|
|
3421
|
+
return;
|
|
3422
|
+
}
|
|
3423
|
+
const { yThumbHeight } = reactData;
|
|
3424
|
+
const trackEl = thumbEl.parentElement;
|
|
3425
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
3426
|
+
const pointerPosition = evnt.clientY - trackRect.top;
|
|
3427
|
+
// 记录 thumb 的偏移
|
|
3428
|
+
const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
|
|
3429
|
+
internalData.thumbDragOffset = pointerPosition - thumbOffset;
|
|
3430
|
+
},
|
|
3431
|
+
pointermoveThumbYEvent(evnt) {
|
|
3432
|
+
const $xeTree = this;
|
|
3433
|
+
const reactData = $xeTree.reactData;
|
|
3434
|
+
const internalData = $xeTree.internalData;
|
|
3435
|
+
const thumbEl = evnt.currentTarget;
|
|
3436
|
+
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
3437
|
+
return;
|
|
3438
|
+
}
|
|
3439
|
+
const { isThumbDrag, thumbDragOffset } = internalData;
|
|
3440
|
+
if (isThumbDrag) {
|
|
3441
|
+
const viewEl = $xeTree.$refs.refVirtualWrapper;
|
|
3442
|
+
if (!viewEl) {
|
|
3443
|
+
return;
|
|
3444
|
+
}
|
|
3445
|
+
const { yThumbHeight } = reactData;
|
|
3446
|
+
const thumbEl = evnt.currentTarget;
|
|
3447
|
+
const trackEl = thumbEl.parentElement;
|
|
3448
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
3449
|
+
// 更新偏移
|
|
3450
|
+
viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
|
|
3451
|
+
}
|
|
3452
|
+
},
|
|
3168
3453
|
//
|
|
3169
3454
|
// Render
|
|
3170
3455
|
//
|
|
@@ -3505,13 +3790,14 @@ export default {
|
|
|
3505
3790
|
const props = $xeTree;
|
|
3506
3791
|
const slots = $xeTree.$scopedSlots;
|
|
3507
3792
|
const reactData = $xeTree.reactData;
|
|
3508
|
-
const { loading, trigger, showLine } = props;
|
|
3509
|
-
const { bodyHeight, topSpaceHeight, treeList, tooltipStore } = reactData;
|
|
3793
|
+
const { loading, trigger, showLine, useScrollbar } = props;
|
|
3794
|
+
const { bodyHeight, topSpaceHeight, treeList, tooltipStore, xThumbWidth, yThumbHeight } = reactData;
|
|
3510
3795
|
const vSize = $xeTree.computeSize;
|
|
3511
3796
|
const radioOpts = $xeTree.computeRadioOpts;
|
|
3512
3797
|
const checkboxOpts = $xeTree.computeCheckboxOpts;
|
|
3513
3798
|
const loadingOpts = $xeTree.computeLoadingOpts;
|
|
3514
3799
|
const isNodeHover = $xeTree.computeIsNodeHover;
|
|
3800
|
+
const wrapperStyles = $xeTree.computeWrapperStyles;
|
|
3515
3801
|
const treeStyle = $xeTree.computeTreeStyle;
|
|
3516
3802
|
const dragOpts = $xeTree.computeDragOpts;
|
|
3517
3803
|
const tooltipOpts = $xeTree.computeTooltipOpts;
|
|
@@ -3519,21 +3805,43 @@ export default {
|
|
|
3519
3805
|
const headerSlot = slots.header;
|
|
3520
3806
|
const footerSlot = slots.footer;
|
|
3521
3807
|
const tooltipSlot = slots.tooltip;
|
|
3808
|
+
const scrollbarOpts = $xeTree.computeScrollbarOpts;
|
|
3809
|
+
const scrollXVisible = $xeTree.computeScrollXVisible;
|
|
3810
|
+
const scrollYVisible = $xeTree.computeScrollYVisible;
|
|
3811
|
+
const scrollbarXToTop = $xeTree.computeScrollbarXToTop;
|
|
3812
|
+
const scrollbarYToLeft = $xeTree.computeScrollbarYToLeft;
|
|
3813
|
+
const scrollXAutoHide = $xeTree.computeScrollXAutoHide;
|
|
3814
|
+
const scrollYAutoHide = $xeTree.computeScrollYAutoHide;
|
|
3815
|
+
const scrollbarWrapperClss = $xeTree.computeScrollbarWrapperClss;
|
|
3522
3816
|
const teOns = {};
|
|
3523
3817
|
if (dragOpts.isCrossTreeDrag && !treeList.length) {
|
|
3524
3818
|
teOns.dragover = $xeTree.handleCrossTreeNodeDragoverEmptyEvent;
|
|
3525
3819
|
}
|
|
3526
3820
|
return h('div', {
|
|
3527
3821
|
ref: 'refElem',
|
|
3528
|
-
class: [
|
|
3822
|
+
class: [
|
|
3823
|
+
'vxe-tree',
|
|
3824
|
+
useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
|
|
3825
|
+
useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
|
|
3826
|
+
useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
|
|
3827
|
+
useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
|
|
3828
|
+
{
|
|
3529
3829
|
[`size--${vSize}`]: vSize,
|
|
3530
3830
|
'show--line': showLine,
|
|
3831
|
+
'is--virtual-scrollbar': useScrollbar,
|
|
3832
|
+
'ov-padding': useScrollbar && scrollbarOpts.padding,
|
|
3833
|
+
'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
|
|
3834
|
+
'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
|
|
3835
|
+
'overflow-y': yThumbHeight,
|
|
3836
|
+
'overflow-x': xThumbWidth,
|
|
3531
3837
|
'checkbox--highlight': checkboxOpts.highlight,
|
|
3532
3838
|
'radio--highlight': radioOpts.highlight,
|
|
3533
3839
|
'node--hover': isNodeHover,
|
|
3534
3840
|
'node--trigger': trigger === 'node',
|
|
3535
3841
|
'is--loading': loading
|
|
3536
|
-
}
|
|
3842
|
+
}
|
|
3843
|
+
],
|
|
3844
|
+
style: wrapperStyles,
|
|
3537
3845
|
on: teOns
|
|
3538
3846
|
}, [
|
|
3539
3847
|
headerSlot
|
|
@@ -3570,6 +3878,57 @@ export default {
|
|
|
3570
3878
|
class: 'vxe-tree--footer-wrapper'
|
|
3571
3879
|
}, footerSlot({ $tree: $xeTree }))
|
|
3572
3880
|
: renderEmptyElement($xeTree),
|
|
3881
|
+
/**
|
|
3882
|
+
* 滚动条
|
|
3883
|
+
*/
|
|
3884
|
+
useScrollbar
|
|
3885
|
+
? h('div', {
|
|
3886
|
+
class: scrollbarWrapperClss
|
|
3887
|
+
}, [
|
|
3888
|
+
scrollXVisible === false
|
|
3889
|
+
? renderEmptyElement($xeTree)
|
|
3890
|
+
: h('div', {
|
|
3891
|
+
ref: 'refTrackXElem',
|
|
3892
|
+
class: 'vxe-scrollbar--track-x',
|
|
3893
|
+
on: {
|
|
3894
|
+
click: $xeTree.clickTrackXEvent
|
|
3895
|
+
}
|
|
3896
|
+
}, [
|
|
3897
|
+
h('div', {
|
|
3898
|
+
ref: 'refThumbXElem',
|
|
3899
|
+
class: 'vxe-scrollbar--thumb-x',
|
|
3900
|
+
on: {
|
|
3901
|
+
pointerdown: $xeTree.pointerdownThumbXEvent,
|
|
3902
|
+
pointermove: $xeTree.pointermoveThumbXEvent,
|
|
3903
|
+
pointerup: $xeTree.cleatPointerThumbEvent,
|
|
3904
|
+
pointercancel: $xeTree.cleatPointerThumbEvent,
|
|
3905
|
+
lostpointercapture: $xeTree.cleatPointerThumbEvent
|
|
3906
|
+
}
|
|
3907
|
+
})
|
|
3908
|
+
]),
|
|
3909
|
+
scrollYVisible === false
|
|
3910
|
+
? renderEmptyElement($xeTree)
|
|
3911
|
+
: h('div', {
|
|
3912
|
+
ref: 'refTrackYElem',
|
|
3913
|
+
class: 'vxe-scrollbar--track-y',
|
|
3914
|
+
on: {
|
|
3915
|
+
click: $xeTree.clickTrackYEvent
|
|
3916
|
+
}
|
|
3917
|
+
}, [
|
|
3918
|
+
h('div', {
|
|
3919
|
+
ref: 'refThumbYElem',
|
|
3920
|
+
class: 'vxe-scrollbar--thumb-y',
|
|
3921
|
+
on: {
|
|
3922
|
+
pointerdown: $xeTree.pointerdownThumbYEvent,
|
|
3923
|
+
pointermove: $xeTree.pointermoveThumbYEvent,
|
|
3924
|
+
pointerup: $xeTree.cleatPointerThumbEvent,
|
|
3925
|
+
pointercancel: $xeTree.cleatPointerThumbEvent,
|
|
3926
|
+
lostpointercapture: $xeTree.cleatPointerThumbEvent
|
|
3927
|
+
}
|
|
3928
|
+
})
|
|
3929
|
+
])
|
|
3930
|
+
])
|
|
3931
|
+
: renderEmptyElement($xeTree),
|
|
3573
3932
|
/**
|
|
3574
3933
|
* 拖拽提示
|
|
3575
3934
|
*/
|
|
@@ -3659,19 +4018,37 @@ export default {
|
|
|
3659
4018
|
},
|
|
3660
4019
|
height() {
|
|
3661
4020
|
const $xeTree = this;
|
|
3662
|
-
$xeTree.
|
|
4021
|
+
$xeTree.reFlag++;
|
|
3663
4022
|
},
|
|
3664
4023
|
minHeight() {
|
|
3665
4024
|
const $xeTree = this;
|
|
3666
|
-
$xeTree.
|
|
4025
|
+
$xeTree.reFlag++;
|
|
3667
4026
|
},
|
|
3668
4027
|
maxHeight() {
|
|
3669
4028
|
const $xeTree = this;
|
|
3670
|
-
$xeTree.
|
|
4029
|
+
$xeTree.reFlag++;
|
|
3671
4030
|
},
|
|
3672
|
-
|
|
4031
|
+
useScrollbar() {
|
|
3673
4032
|
const $xeTree = this;
|
|
3674
|
-
$xeTree.
|
|
4033
|
+
$xeTree.reFlag++;
|
|
4034
|
+
},
|
|
4035
|
+
computeScrollXVisible() {
|
|
4036
|
+
const $xeTree = this;
|
|
4037
|
+
$xeTree.$nextTick(() => {
|
|
4038
|
+
$xeTree.reFlag++;
|
|
4039
|
+
});
|
|
4040
|
+
},
|
|
4041
|
+
computeScrollYVisible() {
|
|
4042
|
+
const $xeTree = this;
|
|
4043
|
+
$xeTree.$nextTick(() => {
|
|
4044
|
+
$xeTree.reFlag++;
|
|
4045
|
+
});
|
|
4046
|
+
},
|
|
4047
|
+
reFlag() {
|
|
4048
|
+
const $xeTree = this;
|
|
4049
|
+
$xeTree.recalculate().then(() => {
|
|
4050
|
+
$xeTree.recalculate();
|
|
4051
|
+
});
|
|
3675
4052
|
}
|
|
3676
4053
|
},
|
|
3677
4054
|
created() {
|
|
@@ -3686,7 +4063,7 @@ export default {
|
|
|
3686
4063
|
const $xeTree = this;
|
|
3687
4064
|
const props = $xeTree;
|
|
3688
4065
|
const internalData = $xeTree.internalData;
|
|
3689
|
-
const { transform, drag, menuConfig, showOverflow, lazy, loadMethod } = props;
|
|
4066
|
+
const { transform, drag, menuConfig, showOverflow, lazy, loadMethod, autoResize, useScrollbar } = props;
|
|
3690
4067
|
const dragOpts = $xeTree.computeDragOpts;
|
|
3691
4068
|
if (!showOverflow) {
|
|
3692
4069
|
errLog('vxe.error.errProp', ['show-overflow=false', 'show-overflow=true']);
|
|
@@ -3707,24 +4084,30 @@ export default {
|
|
|
3707
4084
|
if (menuConfig && !VxeUIContextMenu) {
|
|
3708
4085
|
errLog('vxe.error.reqComp', ['vxe-context-menu']);
|
|
3709
4086
|
}
|
|
3710
|
-
if (
|
|
4087
|
+
if (useScrollbar || autoResize) {
|
|
3711
4088
|
const el = $xeTree.$refs.refElem;
|
|
4089
|
+
const viewInnerEl = $xeTree.$refs.refVirtualBody;
|
|
3712
4090
|
const parentEl = $xeTree.getParentElem();
|
|
3713
4091
|
const resizeObserver = globalResize.create(() => {
|
|
3714
|
-
|
|
3715
|
-
$xeTree.recalculate();
|
|
3716
|
-
}
|
|
4092
|
+
$xeTree.reFlag++;
|
|
3717
4093
|
});
|
|
3718
4094
|
if (el) {
|
|
3719
4095
|
resizeObserver.observe(el);
|
|
4096
|
+
if (autoResize) {
|
|
4097
|
+
if (parentEl) {
|
|
4098
|
+
resizeObserver.observe(parentEl);
|
|
4099
|
+
}
|
|
4100
|
+
}
|
|
3720
4101
|
}
|
|
3721
|
-
if (
|
|
3722
|
-
resizeObserver.observe(
|
|
4102
|
+
if (viewInnerEl) {
|
|
4103
|
+
resizeObserver.observe(viewInnerEl);
|
|
3723
4104
|
}
|
|
3724
4105
|
internalData.resizeObserver = resizeObserver;
|
|
3725
4106
|
}
|
|
3726
|
-
$xeTree.
|
|
3727
|
-
globalEvents.on($xeTree, 'resize',
|
|
4107
|
+
$xeTree.reFlag++;
|
|
4108
|
+
globalEvents.on($xeTree, 'resize', () => {
|
|
4109
|
+
$xeTree.reFlag++;
|
|
4110
|
+
});
|
|
3728
4111
|
},
|
|
3729
4112
|
beforeDestroy() {
|
|
3730
4113
|
const $xeTree = this;
|