vxe-pc-ui 4.19.7 → 4.20.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/dist/all.esm.js +2206 -1851
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/card/src/card.js +35 -12
- package/es/card/style.css +42 -44
- package/es/card/style.min.css +1 -1
- package/es/icon/style.css +1 -1
- package/es/list/src/list.js +323 -19
- package/es/list/style.css +26 -0
- package/es/list/style.min.css +1 -1
- package/es/scrollbar/src/scrollbar.js +9 -1
- package/es/scrollbar/style.css +6 -5
- package/es/scrollbar/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tabs/src/tabs.js +27 -8
- package/es/tabs/style.css +4 -2
- package/es/tabs/style.min.css +1 -1
- package/es/tree/src/tree.js +6 -2
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/es/ui/src/utils.js +9 -0
- package/es/vxe-card/style.css +42 -44
- package/es/vxe-card/style.min.css +1 -1
- package/es/vxe-list/style.css +26 -0
- package/es/vxe-list/style.min.css +1 -1
- package/es/vxe-scrollbar/style.css +6 -5
- package/es/vxe-scrollbar/style.min.css +1 -1
- package/es/vxe-tabs/style.css +4 -2
- package/es/vxe-tabs/style.min.css +1 -1
- package/lib/card/src/card.js +42 -6
- package/lib/card/src/card.min.js +1 -1
- package/lib/card/style/style.css +42 -44
- package/lib/card/style/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 +2785 -2383
- package/lib/index.umd.min.js +1 -1
- package/lib/list/src/list.js +333 -20
- package/lib/list/src/list.min.js +1 -1
- package/lib/list/style/style.css +26 -0
- package/lib/list/style/style.min.css +1 -1
- package/lib/scrollbar/src/scrollbar.js +9 -1
- package/lib/scrollbar/src/scrollbar.min.js +1 -1
- package/lib/scrollbar/style/style.css +6 -5
- package/lib/scrollbar/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tabs/src/tabs.js +40 -8
- package/lib/tabs/src/tabs.min.js +1 -1
- package/lib/tabs/style/style.css +4 -2
- package/lib/tabs/style/style.min.css +1 -1
- package/lib/tree/src/tree.js +5 -1
- package/lib/tree/src/tree.min.js +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 +10 -0
- package/lib/ui/src/utils.min.js +1 -1
- package/lib/vxe-card/style/style.css +42 -44
- package/lib/vxe-card/style/style.min.css +1 -1
- package/lib/vxe-list/style/style.css +26 -0
- package/lib/vxe-list/style/style.min.css +1 -1
- package/lib/vxe-scrollbar/style/style.css +6 -5
- package/lib/vxe-scrollbar/style/style.min.css +1 -1
- package/lib/vxe-tabs/style/style.css +4 -2
- package/lib/vxe-tabs/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/card/src/card.ts +55 -12
- package/packages/list/src/list.ts +351 -19
- package/packages/scrollbar/src/scrollbar.ts +10 -1
- package/packages/tabs/src/tabs.ts +34 -8
- package/packages/tree/src/tree.ts +6 -2
- package/packages/ui/src/utils.ts +10 -0
- package/styles/components/card.scss +44 -58
- package/styles/components/list.scss +51 -0
- package/styles/components/scrollbar.scss +18 -11
- package/styles/components/tabs.scss +2 -1
- package/types/components/card.d.ts +11 -0
- package/types/components/grid.d.ts +37 -0
- package/types/components/layout-aside.d.ts +7 -1
- package/types/components/layout-body.d.ts +7 -1
- package/types/components/list.d.ts +24 -2
- package/types/components/menu.d.ts +6 -0
- package/types/components/table-plugins/extend-cell-area.d.ts +1 -1
- package/types/components/table.d.ts +25 -2
- package/types/components/tabs.d.ts +11 -0
- /package/es/icon/{iconfont.1791794447472.ttf → iconfont.1791880413927.ttf} +0 -0
- /package/es/icon/{iconfont.1791794447472.woff → iconfont.1791880413927.woff} +0 -0
- /package/es/icon/{iconfont.1791794447472.woff2 → iconfont.1791880413927.woff2} +0 -0
- /package/es/{iconfont.1791794447472.ttf → iconfont.1791880413927.ttf} +0 -0
- /package/es/{iconfont.1791794447472.woff → iconfont.1791880413927.woff} +0 -0
- /package/es/{iconfont.1791794447472.woff2 → iconfont.1791880413927.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1791794447472.ttf → iconfont.1791880413927.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1791794447472.woff → iconfont.1791880413927.woff} +0 -0
- /package/lib/icon/style/{iconfont.1791794447472.woff2 → iconfont.1791880413927.woff2} +0 -0
- /package/lib/{iconfont.1791794447472.ttf → iconfont.1791880413927.ttf} +0 -0
- /package/lib/{iconfont.1791794447472.woff → iconfont.1791880413927.woff} +0 -0
- /package/lib/{iconfont.1791794447472.woff2 → iconfont.1791880413927.woff2} +0 -0
package/lib/list/src/list.js
CHANGED
|
@@ -13,7 +13,8 @@ var _dom = require("../../ui/src/dom");
|
|
|
13
13
|
var _utils = require("../../ui/src/utils");
|
|
14
14
|
var _log = require("../../ui/src/log");
|
|
15
15
|
var _anime = require("../../ui/src/anime");
|
|
16
|
-
var _util = require("
|
|
16
|
+
var _util = require("../../scrollbar/src/util");
|
|
17
|
+
var _util2 = require("./util");
|
|
17
18
|
var _loading = _interopRequireDefault(require("../../loading"));
|
|
18
19
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
20
|
const {
|
|
@@ -46,6 +47,9 @@ function createReactData() {
|
|
|
46
47
|
updateCheckboxFlag: 1,
|
|
47
48
|
isAllChecked: false,
|
|
48
49
|
isAllIndeterminate: false,
|
|
50
|
+
// 滚动条
|
|
51
|
+
yThumbHeight: 0,
|
|
52
|
+
xThumbWidth: 0,
|
|
49
53
|
insertRowFlag: 1,
|
|
50
54
|
removeRowFlag: 1,
|
|
51
55
|
dragRow: null,
|
|
@@ -55,13 +59,18 @@ function createReactData() {
|
|
|
55
59
|
}
|
|
56
60
|
function createInternalData() {
|
|
57
61
|
return {
|
|
58
|
-
resizeObserver: undefined,
|
|
59
62
|
fullData: [],
|
|
60
63
|
afterList: [],
|
|
61
64
|
fullKeyMaps: {},
|
|
62
65
|
rowMaps: {},
|
|
63
|
-
|
|
66
|
+
// 滚动条
|
|
67
|
+
// resizeObserver: undefined,
|
|
68
|
+
// isThumbDrag: false,
|
|
69
|
+
thumbDragOffset: 0,
|
|
70
|
+
yThumbTop: 0,
|
|
71
|
+
xThumbLeft: 0,
|
|
64
72
|
lastScrollTop: 0,
|
|
73
|
+
lastScrollLeft: 0,
|
|
65
74
|
scrollYStore: {
|
|
66
75
|
startIndex: 0,
|
|
67
76
|
endIndex: 0,
|
|
@@ -115,7 +124,12 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
115
124
|
dragConfig: Object,
|
|
116
125
|
menuConfig: Object,
|
|
117
126
|
virtualYConfig: Object,
|
|
118
|
-
scrollY: Object
|
|
127
|
+
scrollY: Object,
|
|
128
|
+
useScrollbar: {
|
|
129
|
+
type: Boolean,
|
|
130
|
+
default: () => (0, _ui.getConfig)().list.useScrollbar
|
|
131
|
+
},
|
|
132
|
+
scrollbarConfig: Object
|
|
119
133
|
},
|
|
120
134
|
emits: ['update:checkRowKey', 'update:checkRowKeys', 'row-click', 'row-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'checkbox-all', 'scroll', 'row-dragstart', 'row-dragover', 'row-dragend', 'row-remove-dragend', 'row-insert-dragend', 'row-menu', 'menu-click'],
|
|
121
135
|
setup(props, context) {
|
|
@@ -136,6 +150,11 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
136
150
|
const refFooterElem = (0, _vue.ref)();
|
|
137
151
|
const refVirtualWrapper = (0, _vue.ref)();
|
|
138
152
|
const refVirtualBody = (0, _vue.ref)();
|
|
153
|
+
const refViewInnerElem = (0, _vue.ref)();
|
|
154
|
+
const refTrackXElem = (0, _vue.ref)();
|
|
155
|
+
const refTrackYElem = (0, _vue.ref)();
|
|
156
|
+
const refThumbXElem = (0, _vue.ref)();
|
|
157
|
+
const refThumbYElem = (0, _vue.ref)();
|
|
139
158
|
const refDragRowLineElem = (0, _vue.ref)();
|
|
140
159
|
const refDragTipElem = (0, _vue.ref)();
|
|
141
160
|
const refMaps = {
|
|
@@ -194,11 +213,19 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
194
213
|
});
|
|
195
214
|
const computeWrapperStyles = (0, _vue.computed)(() => {
|
|
196
215
|
const rowHeight = computeRowHeight.value;
|
|
197
|
-
const
|
|
216
|
+
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
217
|
+
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
218
|
+
const stys = {};
|
|
198
219
|
if (rowHeight) {
|
|
199
|
-
|
|
220
|
+
stys['--vxe-ui-list-row-height'] = (0, _dom.toCssUnit)(rowHeight);
|
|
200
221
|
}
|
|
201
|
-
|
|
222
|
+
if (scrollbarYOpts.width) {
|
|
223
|
+
stys['--vxe-ui-scrollbar-y-width'] = (0, _dom.toCssUnit)(scrollbarYOpts.width);
|
|
224
|
+
}
|
|
225
|
+
if (scrollbarXOpts.height) {
|
|
226
|
+
stys['--vxe-ui-scrollbar-x-height'] = (0, _dom.toCssUnit)(scrollbarXOpts.height);
|
|
227
|
+
}
|
|
228
|
+
return stys;
|
|
202
229
|
});
|
|
203
230
|
const computeVirtualStyles = (0, _vue.computed)(() => {
|
|
204
231
|
const {
|
|
@@ -220,6 +247,46 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
220
247
|
}
|
|
221
248
|
return style;
|
|
222
249
|
});
|
|
250
|
+
const computeScrollbarOpts = (0, _vue.computed)(() => {
|
|
251
|
+
return Object.assign({}, (0, _ui.getConfig)().list.scrollbarConfig, props.scrollbarConfig);
|
|
252
|
+
});
|
|
253
|
+
const computeScrollbarXOpts = (0, _vue.computed)(() => {
|
|
254
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
255
|
+
return Object.assign({}, (0, _ui.getConfig)().scrollbar.xConfig, scrollbarOpts.xConfig);
|
|
256
|
+
});
|
|
257
|
+
const computeScrollbarYOpts = (0, _vue.computed)(() => {
|
|
258
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
259
|
+
return Object.assign({}, (0, _ui.getConfig)().scrollbar.yConfig, scrollbarOpts.yConfig);
|
|
260
|
+
});
|
|
261
|
+
const computeScrollbarWrapperClss = (0, _vue.computed)(() => {
|
|
262
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
263
|
+
const {
|
|
264
|
+
padding
|
|
265
|
+
} = scrollbarOpts;
|
|
266
|
+
const {
|
|
267
|
+
yThumbHeight,
|
|
268
|
+
xThumbWidth
|
|
269
|
+
} = reactData;
|
|
270
|
+
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
271
|
+
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
272
|
+
const scrollbarXToTop = computeScrollbarXToTop.value;
|
|
273
|
+
const scrollbarYToLeft = computeScrollbarYToLeft.value;
|
|
274
|
+
return _ui.domUtils.buildClass(['vxe-scrollbar is--virtual', `ov-x--${scrollbarXOpts.visible || 'visible'}`, `ov-y--${scrollbarYOpts.visible || 'visible'}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`], {
|
|
275
|
+
'is--padding': padding,
|
|
276
|
+
'ov-x--auto-hide': scrollbarXOpts.autoHide,
|
|
277
|
+
'ov-y--auto-hide': scrollbarYOpts.autoHide,
|
|
278
|
+
'overflow-y': yThumbHeight,
|
|
279
|
+
'overflow-x': xThumbWidth
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
const computeScrollbarXToTop = (0, _vue.computed)(() => {
|
|
283
|
+
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
284
|
+
return scrollbarXOpts.position === 'top';
|
|
285
|
+
});
|
|
286
|
+
const computeScrollbarYToLeft = (0, _vue.computed)(() => {
|
|
287
|
+
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
288
|
+
return scrollbarYOpts.position === 'left';
|
|
289
|
+
});
|
|
223
290
|
const dispatchEvent = (type, params, evnt) => {
|
|
224
291
|
emit(type, (0, _ui.createEvent)(evnt, {
|
|
225
292
|
$list: $xeList
|
|
@@ -397,6 +464,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
397
464
|
lastScrollLeft,
|
|
398
465
|
lastScrollTop
|
|
399
466
|
} = internalData;
|
|
467
|
+
updateScrollbar();
|
|
400
468
|
return clearScroll().then(() => {
|
|
401
469
|
if (lastScrollLeft || lastScrollTop) {
|
|
402
470
|
internalData.lastScrollLeft = 0;
|
|
@@ -405,19 +473,28 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
405
473
|
}
|
|
406
474
|
});
|
|
407
475
|
};
|
|
476
|
+
const updateScrollbar = () => {
|
|
477
|
+
updateThumbSize();
|
|
478
|
+
updateThumbOffset();
|
|
479
|
+
};
|
|
408
480
|
/**
|
|
409
481
|
* 重新计算列表
|
|
410
482
|
*/
|
|
411
483
|
const recalculate = () => {
|
|
412
484
|
const el = refElem.value;
|
|
413
485
|
if (el) {
|
|
414
|
-
|
|
486
|
+
let parentEl = el.parentElement;
|
|
415
487
|
let parentHeight = 0;
|
|
488
|
+
// 如果是虚拟滚动条
|
|
489
|
+
if (parentEl && (0, _dom.hasClass)(parentEl, 'vxe-scrollbar--view-inner')) {
|
|
490
|
+
parentEl = parentEl.parentElement;
|
|
491
|
+
}
|
|
416
492
|
if (parentEl) {
|
|
417
493
|
const parentStyle = getComputedStyle(parentEl);
|
|
418
494
|
parentHeight = parentEl.clientHeight - Math.ceil(_xeUtils.default.toNumber(parentStyle.paddingLeft) + _xeUtils.default.toNumber(parentStyle.paddingRight));
|
|
419
495
|
}
|
|
420
496
|
reactData.parentHeight = parentHeight;
|
|
497
|
+
updateScrollbar();
|
|
421
498
|
updateHeight();
|
|
422
499
|
if (el.clientWidth && el.clientHeight) {
|
|
423
500
|
return computeScrollLoad();
|
|
@@ -455,6 +532,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
455
532
|
const scrollLeft = scrollBodyElem.scrollLeft;
|
|
456
533
|
const isX = scrollLeft !== internalData.lastScrollLeft;
|
|
457
534
|
const isY = scrollTop !== internalData.lastScrollTop;
|
|
535
|
+
updateThumbOffset();
|
|
458
536
|
internalData.lastScrollTop = scrollTop;
|
|
459
537
|
internalData.lastScrollLeft = scrollLeft;
|
|
460
538
|
if (reactData.scrollYLoad) {
|
|
@@ -1442,7 +1520,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1442
1520
|
const funcName = isAppend ? 'push' : 'unshift';
|
|
1443
1521
|
newRecords.forEach(item => {
|
|
1444
1522
|
const rowid = getRowIdByField(item, keyField);
|
|
1445
|
-
const rowRest = (0,
|
|
1523
|
+
const rowRest = (0, _util2.getItemCacheObj)(item);
|
|
1446
1524
|
fullData[funcName](item);
|
|
1447
1525
|
rowMaps[rowid] = rowRest;
|
|
1448
1526
|
});
|
|
@@ -1489,7 +1567,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1489
1567
|
if (rowIndex > -1) {
|
|
1490
1568
|
newRecords.forEach(item => {
|
|
1491
1569
|
const rowid = getRowIdByField(item, keyField);
|
|
1492
|
-
const rowRest = (0,
|
|
1570
|
+
const rowRest = (0, _util2.getItemCacheObj)(item);
|
|
1493
1571
|
rowMaps[rowid] = rowRest;
|
|
1494
1572
|
});
|
|
1495
1573
|
let targetIndex = rowIndex;
|
|
@@ -1961,6 +2039,183 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1961
2039
|
hideDropTip();
|
|
1962
2040
|
}
|
|
1963
2041
|
};
|
|
2042
|
+
const updateThumbSize = () => {
|
|
2043
|
+
const viewEl = refVirtualWrapper.value;
|
|
2044
|
+
if (!viewEl) {
|
|
2045
|
+
return;
|
|
2046
|
+
}
|
|
2047
|
+
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
2048
|
+
return;
|
|
2049
|
+
}
|
|
2050
|
+
const trackXEl = refTrackXElem.value;
|
|
2051
|
+
const xThumbWidth = trackXEl ? (0, _util.getThumbSize)(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
|
|
2052
|
+
const thumbXElem = refThumbXElem.value;
|
|
2053
|
+
if (thumbXElem) {
|
|
2054
|
+
thumbXElem.style.width = xThumbWidth + 'px';
|
|
2055
|
+
}
|
|
2056
|
+
reactData.xThumbWidth = xThumbWidth;
|
|
2057
|
+
const trackYEl = refTrackYElem.value;
|
|
2058
|
+
const yThumbHeight = trackYEl ? (0, _util.getThumbSize)(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
|
|
2059
|
+
const thumbYElem = refThumbYElem.value;
|
|
2060
|
+
if (thumbYElem) {
|
|
2061
|
+
thumbYElem.style.height = yThumbHeight + 'px';
|
|
2062
|
+
}
|
|
2063
|
+
reactData.yThumbHeight = yThumbHeight;
|
|
2064
|
+
};
|
|
2065
|
+
const updateThumbOffset = () => {
|
|
2066
|
+
const viewEl = refVirtualWrapper.value;
|
|
2067
|
+
if (!viewEl) {
|
|
2068
|
+
return;
|
|
2069
|
+
}
|
|
2070
|
+
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
2071
|
+
return;
|
|
2072
|
+
}
|
|
2073
|
+
const {
|
|
2074
|
+
xThumbWidth,
|
|
2075
|
+
yThumbHeight
|
|
2076
|
+
} = reactData;
|
|
2077
|
+
const trackXEl = refTrackXElem.value;
|
|
2078
|
+
const thumbXElem = refThumbXElem.value;
|
|
2079
|
+
const xThumbLeft = trackXEl && xThumbWidth ? (0, _util.getThumbOffsetSize)(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
|
|
2080
|
+
internalData.xThumbLeft = xThumbLeft;
|
|
2081
|
+
if (thumbXElem && xThumbWidth) {
|
|
2082
|
+
thumbXElem.style.width = xThumbWidth + 'px';
|
|
2083
|
+
thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
|
|
2084
|
+
}
|
|
2085
|
+
const trackYEl = refTrackYElem.value;
|
|
2086
|
+
const thumbYElem = refThumbYElem.value;
|
|
2087
|
+
const yThumbTop = trackYEl && yThumbHeight ? (0, _util.getThumbOffsetSize)(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
|
|
2088
|
+
internalData.yThumbTop = yThumbTop;
|
|
2089
|
+
if (thumbYElem && yThumbHeight) {
|
|
2090
|
+
thumbYElem.style.height = yThumbHeight + 'px';
|
|
2091
|
+
thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
|
|
2092
|
+
}
|
|
2093
|
+
};
|
|
2094
|
+
const clickTrackXEvent = evnt => {
|
|
2095
|
+
const trackEl = evnt.currentTarget;
|
|
2096
|
+
if (trackEl !== evnt.target) {
|
|
2097
|
+
return;
|
|
2098
|
+
}
|
|
2099
|
+
const viewEl = refVirtualWrapper.value;
|
|
2100
|
+
if (!viewEl) {
|
|
2101
|
+
return;
|
|
2102
|
+
}
|
|
2103
|
+
const {
|
|
2104
|
+
xThumbWidth
|
|
2105
|
+
} = reactData;
|
|
2106
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
2107
|
+
viewEl.scrollTo({
|
|
2108
|
+
left: (0, _util.getScrollFromClick)(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
|
|
2109
|
+
behavior: 'auto'
|
|
2110
|
+
});
|
|
2111
|
+
};
|
|
2112
|
+
const clickTrackYEvent = evnt => {
|
|
2113
|
+
const trackEl = evnt.currentTarget;
|
|
2114
|
+
if (trackEl !== evnt.target) {
|
|
2115
|
+
return;
|
|
2116
|
+
}
|
|
2117
|
+
const viewEl = refVirtualWrapper.value;
|
|
2118
|
+
if (!viewEl) {
|
|
2119
|
+
return;
|
|
2120
|
+
}
|
|
2121
|
+
const {
|
|
2122
|
+
yThumbHeight
|
|
2123
|
+
} = reactData;
|
|
2124
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
2125
|
+
viewEl.scrollTo({
|
|
2126
|
+
top: (0, _util.getScrollFromClick)(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
|
|
2127
|
+
behavior: 'auto'
|
|
2128
|
+
});
|
|
2129
|
+
};
|
|
2130
|
+
const pointerdownThumbXEvent = evnt => {
|
|
2131
|
+
const thumbEl = evnt.currentTarget;
|
|
2132
|
+
internalData.isThumbDrag = true;
|
|
2133
|
+
thumbEl.setPointerCapture(evnt.pointerId);
|
|
2134
|
+
const viewEl = refVirtualWrapper.value;
|
|
2135
|
+
if (!viewEl) {
|
|
2136
|
+
return;
|
|
2137
|
+
}
|
|
2138
|
+
const {
|
|
2139
|
+
xThumbWidth
|
|
2140
|
+
} = reactData;
|
|
2141
|
+
const trackEl = thumbEl.parentElement;
|
|
2142
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
2143
|
+
const pointerPosition = evnt.clientX - trackRect.left;
|
|
2144
|
+
// 记录 thumb 的偏移
|
|
2145
|
+
const thumbOffset = (0, _util.getThumbOffsetSize)(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
|
|
2146
|
+
internalData.thumbDragOffset = pointerPosition - thumbOffset;
|
|
2147
|
+
};
|
|
2148
|
+
const pointermoveThumbXEvent = evnt => {
|
|
2149
|
+
const thumbEl = evnt.currentTarget;
|
|
2150
|
+
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
2151
|
+
return;
|
|
2152
|
+
}
|
|
2153
|
+
const {
|
|
2154
|
+
isThumbDrag,
|
|
2155
|
+
thumbDragOffset
|
|
2156
|
+
} = internalData;
|
|
2157
|
+
if (isThumbDrag) {
|
|
2158
|
+
const viewEl = refVirtualWrapper.value;
|
|
2159
|
+
if (!viewEl) {
|
|
2160
|
+
return;
|
|
2161
|
+
}
|
|
2162
|
+
const {
|
|
2163
|
+
xThumbWidth
|
|
2164
|
+
} = reactData;
|
|
2165
|
+
const thumbEl = evnt.currentTarget;
|
|
2166
|
+
const trackEl = thumbEl.parentElement;
|
|
2167
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
2168
|
+
// 更新偏移
|
|
2169
|
+
viewEl.scrollLeft = (0, _util.getScrollFromDrag)(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
|
|
2170
|
+
}
|
|
2171
|
+
};
|
|
2172
|
+
const cleatPointerThumbEvent = evnt => {
|
|
2173
|
+
const thumbEl = evnt.currentTarget;
|
|
2174
|
+
thumbEl.releasePointerCapture(evnt.pointerId);
|
|
2175
|
+
internalData.isThumbDrag = false;
|
|
2176
|
+
};
|
|
2177
|
+
const pointerdownThumbYEvent = evnt => {
|
|
2178
|
+
const thumbEl = evnt.currentTarget;
|
|
2179
|
+
internalData.isThumbDrag = true;
|
|
2180
|
+
thumbEl.setPointerCapture(evnt.pointerId);
|
|
2181
|
+
const viewEl = refVirtualWrapper.value;
|
|
2182
|
+
if (!viewEl) {
|
|
2183
|
+
return;
|
|
2184
|
+
}
|
|
2185
|
+
const {
|
|
2186
|
+
yThumbHeight
|
|
2187
|
+
} = reactData;
|
|
2188
|
+
const trackEl = thumbEl.parentElement;
|
|
2189
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
2190
|
+
const pointerPosition = evnt.clientY - trackRect.top;
|
|
2191
|
+
// 记录 thumb 的偏移
|
|
2192
|
+
const thumbOffset = (0, _util.getThumbOffsetSize)(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
|
|
2193
|
+
internalData.thumbDragOffset = pointerPosition - thumbOffset;
|
|
2194
|
+
};
|
|
2195
|
+
const pointermoveThumbYEvent = evnt => {
|
|
2196
|
+
const thumbEl = evnt.currentTarget;
|
|
2197
|
+
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
2198
|
+
return;
|
|
2199
|
+
}
|
|
2200
|
+
const {
|
|
2201
|
+
isThumbDrag,
|
|
2202
|
+
thumbDragOffset
|
|
2203
|
+
} = internalData;
|
|
2204
|
+
if (isThumbDrag) {
|
|
2205
|
+
const viewEl = refVirtualWrapper.value;
|
|
2206
|
+
if (!viewEl) {
|
|
2207
|
+
return;
|
|
2208
|
+
}
|
|
2209
|
+
const {
|
|
2210
|
+
yThumbHeight
|
|
2211
|
+
} = reactData;
|
|
2212
|
+
const thumbEl = evnt.currentTarget;
|
|
2213
|
+
const trackEl = thumbEl.parentElement;
|
|
2214
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
2215
|
+
// 更新偏移
|
|
2216
|
+
viewEl.scrollTop = (0, _util.getScrollFromDrag)(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
|
|
2217
|
+
}
|
|
2218
|
+
};
|
|
1964
2219
|
Object.assign($xeList, listMethods, listPrivateMethods);
|
|
1965
2220
|
const renderDragTip = () => {
|
|
1966
2221
|
const {
|
|
@@ -2193,7 +2448,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
2193
2448
|
const {
|
|
2194
2449
|
showCheckbox,
|
|
2195
2450
|
className,
|
|
2196
|
-
loading
|
|
2451
|
+
loading,
|
|
2452
|
+
useScrollbar
|
|
2197
2453
|
} = props;
|
|
2198
2454
|
const {
|
|
2199
2455
|
bodyHeight,
|
|
@@ -2225,6 +2481,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
2225
2481
|
padding
|
|
2226
2482
|
} = rowOpts;
|
|
2227
2483
|
const isDrag = computeIsDrag.value;
|
|
2484
|
+
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
2485
|
+
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
2486
|
+
const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
|
|
2228
2487
|
const showDefChekboxHead = showCheckbox && showHeader !== false;
|
|
2229
2488
|
const leOns = {};
|
|
2230
2489
|
if (isCrossListDrag && !rowList.length) {
|
|
@@ -2236,6 +2495,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
2236
2495
|
$list: $xeList
|
|
2237
2496
|
}) : className : '', {
|
|
2238
2497
|
[`size--${vSize}`]: vSize,
|
|
2498
|
+
'is--virtual-scrollbar': useScrollbar,
|
|
2499
|
+
'ov-x--auto-hide': useScrollbar && scrollbarXOpts.autoHide,
|
|
2500
|
+
'ov-y--auto-hide': useScrollbar && scrollbarYOpts.autoHide,
|
|
2239
2501
|
'is--drag': isDrag,
|
|
2240
2502
|
'is--loading': loading
|
|
2241
2503
|
}],
|
|
@@ -2282,16 +2544,53 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
2282
2544
|
style: {
|
|
2283
2545
|
marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
|
|
2284
2546
|
}
|
|
2547
|
+
}, useScrollbar ? defaultSlot ? defaultSlot({
|
|
2548
|
+
items: rowList,
|
|
2549
|
+
$list: $xeList
|
|
2550
|
+
}) : rowList.map((row, i) => renderRow(row, i)) : [(0, _vue.h)('div', {
|
|
2551
|
+
key: 'vi',
|
|
2552
|
+
ref: refViewInnerElem,
|
|
2553
|
+
class: 'vxe-scrollbar--view-inner'
|
|
2285
2554
|
}, defaultSlot ? defaultSlot({
|
|
2286
2555
|
items: rowList,
|
|
2287
2556
|
$list: $xeList
|
|
2288
|
-
}) : rowList.map((row, i) => renderRow(row, i)))]), footerSlot ? (0, _vue.h)('div', {
|
|
2557
|
+
}) : rowList.map((row, i) => renderRow(row, i)))])]), footerSlot ? (0, _vue.h)('div', {
|
|
2289
2558
|
ref: refFooterElem,
|
|
2290
2559
|
class: 'vxe-list--footer-wrapper'
|
|
2291
2560
|
}, footerSlot({
|
|
2292
2561
|
items: rowList,
|
|
2293
2562
|
$list: $xeList
|
|
2294
2563
|
})) : (0, _ui.renderEmptyElement)($xeList),
|
|
2564
|
+
/**
|
|
2565
|
+
* 滚动条
|
|
2566
|
+
*/
|
|
2567
|
+
useScrollbar ? (0, _vue.h)('div', {
|
|
2568
|
+
class: scrollbarWrapperClss
|
|
2569
|
+
}, [scrollbarXOpts.visible === 'hidden' ? (0, _ui.renderEmptyElement)($xeList) : (0, _vue.h)('div', {
|
|
2570
|
+
ref: refTrackXElem,
|
|
2571
|
+
class: 'vxe-scrollbar--track-x',
|
|
2572
|
+
onClick: clickTrackXEvent
|
|
2573
|
+
}, [(0, _vue.h)('div', {
|
|
2574
|
+
ref: refThumbXElem,
|
|
2575
|
+
class: 'vxe-scrollbar--thumb-x',
|
|
2576
|
+
onPointerdown: pointerdownThumbXEvent,
|
|
2577
|
+
onPointermove: pointermoveThumbXEvent,
|
|
2578
|
+
onPointerup: cleatPointerThumbEvent,
|
|
2579
|
+
onPointercancel: cleatPointerThumbEvent,
|
|
2580
|
+
onLostpointercapture: cleatPointerThumbEvent
|
|
2581
|
+
})]), scrollbarYOpts.visible === 'hidden' ? (0, _ui.renderEmptyElement)($xeList) : (0, _vue.h)('div', {
|
|
2582
|
+
ref: refTrackYElem,
|
|
2583
|
+
class: 'vxe-scrollbar--track-y',
|
|
2584
|
+
onClick: clickTrackYEvent
|
|
2585
|
+
}, [(0, _vue.h)('div', {
|
|
2586
|
+
ref: refThumbYElem,
|
|
2587
|
+
class: 'vxe-scrollbar--thumb-y',
|
|
2588
|
+
onPointerdown: pointerdownThumbYEvent,
|
|
2589
|
+
onPointermove: pointermoveThumbYEvent,
|
|
2590
|
+
onPointerup: cleatPointerThumbEvent,
|
|
2591
|
+
onPointercancel: cleatPointerThumbEvent,
|
|
2592
|
+
onLostpointercapture: cleatPointerThumbEvent
|
|
2593
|
+
})])]) : (0, _ui.renderEmptyElement)($xeList),
|
|
2295
2594
|
/**
|
|
2296
2595
|
* 拖拽提示
|
|
2297
2596
|
*/
|
|
@@ -2346,7 +2645,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
2346
2645
|
updateCheckboxModeValue();
|
|
2347
2646
|
});
|
|
2348
2647
|
(0, _vue.onActivated)(() => {
|
|
2349
|
-
recalculate().then(() =>
|
|
2648
|
+
recalculate().then(() => {
|
|
2649
|
+
refreshScroll();
|
|
2650
|
+
});
|
|
2350
2651
|
});
|
|
2351
2652
|
(0, _vue.nextTick)(() => {
|
|
2352
2653
|
loadData(props.data || []);
|
|
@@ -2355,7 +2656,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
2355
2656
|
const {
|
|
2356
2657
|
showSeq,
|
|
2357
2658
|
showRadio,
|
|
2358
|
-
showCheckbox
|
|
2659
|
+
showCheckbox,
|
|
2660
|
+
autoResize,
|
|
2661
|
+
useScrollbar
|
|
2359
2662
|
} = props;
|
|
2360
2663
|
const rowOpts = computeRowOpts.value;
|
|
2361
2664
|
const {
|
|
@@ -2380,17 +2683,27 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
2380
2683
|
if (useKey && !keyField) {
|
|
2381
2684
|
errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
|
|
2382
2685
|
}
|
|
2383
|
-
if (
|
|
2686
|
+
if (useScrollbar || autoResize) {
|
|
2384
2687
|
const el = refElem.value;
|
|
2385
|
-
const
|
|
2688
|
+
const viewInnerEl = refViewInnerElem.value;
|
|
2689
|
+
const resizeObserver = _ui.globalResize.create(() => {
|
|
2690
|
+
reFlag.value++;
|
|
2691
|
+
});
|
|
2386
2692
|
resizeObserver.observe(el);
|
|
2387
|
-
if (
|
|
2388
|
-
|
|
2693
|
+
if (autoResize) {
|
|
2694
|
+
if (el) {
|
|
2695
|
+
resizeObserver.observe(el.parentElement);
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
if (viewInnerEl) {
|
|
2699
|
+
resizeObserver.observe(viewInnerEl);
|
|
2389
2700
|
}
|
|
2390
2701
|
internalData.resizeObserver = resizeObserver;
|
|
2391
2702
|
}
|
|
2392
|
-
|
|
2393
|
-
_ui.globalEvents.on($xeList, 'resize',
|
|
2703
|
+
reFlag.value++;
|
|
2704
|
+
_ui.globalEvents.on($xeList, 'resize', () => {
|
|
2705
|
+
reFlag.value++;
|
|
2706
|
+
});
|
|
2394
2707
|
});
|
|
2395
2708
|
(0, _vue.onBeforeUnmount)(() => {
|
|
2396
2709
|
const {
|