vxe-table 4.12.0 → 4.12.2
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/style.css +1 -1
- package/es/table/module/edit/hook.js +22 -24
- package/es/table/module/keyboard/hook.js +3 -2
- package/es/table/module/validator/hook.js +2 -4
- package/es/table/src/body.js +7 -8
- package/es/table/src/table.js +79 -100
- package/es/ui/index.js +3 -3
- package/es/ui/src/dom.js +0 -1
- package/es/ui/src/log.js +1 -1
- package/lib/index.umd.js +12266 -1059
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/table/module/edit/hook.js +26 -34
- package/lib/table/module/edit/hook.min.js +1 -1
- package/lib/table/module/keyboard/hook.js +2 -1
- package/lib/table/module/keyboard/hook.min.js +1 -1
- package/lib/table/module/validator/hook.js +3 -8
- package/lib/table/module/validator/hook.min.js +1 -1
- package/lib/table/src/body.js +7 -8
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/table.js +83 -115
- package/lib/table/src/table.min.js +1 -1
- package/lib/ui/index.js +3 -3
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +0 -2
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/package.json +2 -2
- package/packages/table/module/edit/hook.ts +23 -24
- package/packages/table/module/keyboard/hook.ts +4 -2
- package/packages/table/module/validator/hook.ts +2 -4
- package/packages/table/src/body.ts +7 -8
- package/packages/table/src/table.ts +86 -108
- package/packages/ui/index.ts +2 -2
- package/packages/ui/src/dom.ts +0 -2
- /package/es/{iconfont.1742955995631.ttf → iconfont.1743125693758.ttf} +0 -0
- /package/es/{iconfont.1742955995631.woff → iconfont.1743125693758.woff} +0 -0
- /package/es/{iconfont.1742955995631.woff2 → iconfont.1743125693758.woff2} +0 -0
- /package/lib/{iconfont.1742955995631.ttf → iconfont.1743125693758.ttf} +0 -0
- /package/lib/{iconfont.1742955995631.woff → iconfont.1743125693758.woff} +0 -0
- /package/lib/{iconfont.1742955995631.woff2 → iconfont.1743125693758.woff2} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, h, ComponentPublicInstance, reactive, ref, Ref, provide, inject, nextTick, onActivated, onDeactivated, onBeforeUnmount, onUnmounted, watch, computed, onMounted } from 'vue'
|
|
2
2
|
import XEUtils from 'xe-utils'
|
|
3
|
-
import {
|
|
3
|
+
import { initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, getOffsetPos, setScrollTop, setScrollLeft, toCssUnit } from '../../ui/src/dom'
|
|
4
4
|
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils'
|
|
5
5
|
import { VxeUI } from '../../ui'
|
|
6
6
|
import Cell from './cell'
|
|
@@ -37,6 +37,8 @@ export default defineComponent({
|
|
|
37
37
|
|
|
38
38
|
const xID = XEUtils.uniqueId()
|
|
39
39
|
|
|
40
|
+
const browseObj = XEUtils.browse()
|
|
41
|
+
|
|
40
42
|
// 使用已安装的组件,如果未安装则不渲染
|
|
41
43
|
const VxeUILoadingComponent = VxeUI.getComponent<VxeLoadingComponent>('VxeLoading')
|
|
42
44
|
const VxeUITooltipComponent = VxeUI.getComponent<VxeTooltipComponent>('VxeTooltip')
|
|
@@ -183,9 +185,7 @@ export default defineComponent({
|
|
|
183
185
|
focused: {
|
|
184
186
|
row: null,
|
|
185
187
|
column: null
|
|
186
|
-
}
|
|
187
|
-
insertMaps: {},
|
|
188
|
-
removeMaps: {}
|
|
188
|
+
}
|
|
189
189
|
},
|
|
190
190
|
// 存放 tooltip 相关信息
|
|
191
191
|
tooltipStore: {
|
|
@@ -248,6 +248,8 @@ export default defineComponent({
|
|
|
248
248
|
treeExpandedFlag: 1,
|
|
249
249
|
updateCheckboxFlag: 1,
|
|
250
250
|
pendingRowFlag: 1,
|
|
251
|
+
insertRowFlag: 1,
|
|
252
|
+
removeRowFlag: 1,
|
|
251
253
|
|
|
252
254
|
rowHeightStore: {
|
|
253
255
|
default: 48,
|
|
@@ -354,7 +356,6 @@ export default defineComponent({
|
|
|
354
356
|
fullDataRowIdData: {},
|
|
355
357
|
fullColumnIdData: {},
|
|
356
358
|
fullColumnFieldData: {},
|
|
357
|
-
// prevDragRow: null,
|
|
358
359
|
|
|
359
360
|
// 已展开的行集合
|
|
360
361
|
rowExpandedMaps: {},
|
|
@@ -368,6 +369,10 @@ export default defineComponent({
|
|
|
368
369
|
selectCheckboxMaps: {},
|
|
369
370
|
// 已标记的对象集
|
|
370
371
|
pendingRowMaps: {},
|
|
372
|
+
// 已新增的临时行
|
|
373
|
+
insertRowMaps: {},
|
|
374
|
+
// 已删除行
|
|
375
|
+
removeRowMaps: {},
|
|
371
376
|
|
|
372
377
|
inited: false,
|
|
373
378
|
tooltipTimeout: null,
|
|
@@ -439,7 +444,7 @@ export default defineComponent({
|
|
|
439
444
|
})
|
|
440
445
|
|
|
441
446
|
const computeValidOpts = computed(() => {
|
|
442
|
-
return Object.assign({}, getConfig().table.validConfig, props.validConfig)
|
|
447
|
+
return Object.assign({}, getConfig().table.validConfig, props.validConfig)
|
|
443
448
|
})
|
|
444
449
|
|
|
445
450
|
/**
|
|
@@ -447,12 +452,12 @@ export default defineComponent({
|
|
|
447
452
|
*/
|
|
448
453
|
const computeSXOpts = computed(() => {
|
|
449
454
|
const virtualXOpts = computeVirtualXOpts.value
|
|
450
|
-
return virtualXOpts
|
|
455
|
+
return virtualXOpts
|
|
451
456
|
})
|
|
452
457
|
|
|
453
458
|
const computeScrollXThreshold = computed(() => {
|
|
454
|
-
const
|
|
455
|
-
const { threshold } =
|
|
459
|
+
const virtualXOpts = computeVirtualXOpts.value
|
|
460
|
+
const { threshold } = virtualXOpts
|
|
456
461
|
if (threshold) {
|
|
457
462
|
return XEUtils.toNumber(threshold)
|
|
458
463
|
}
|
|
@@ -464,15 +469,15 @@ export default defineComponent({
|
|
|
464
469
|
*/
|
|
465
470
|
const computeSYOpts = computed(() => {
|
|
466
471
|
const virtualYOpts = computeVirtualYOpts.value
|
|
467
|
-
return virtualYOpts
|
|
472
|
+
return virtualYOpts
|
|
468
473
|
})
|
|
469
474
|
|
|
470
475
|
const computeVirtualXOpts = computed(() => {
|
|
471
|
-
return Object.assign({}, getConfig().table.scrollX, getConfig().table.virtualXConfig, props.scrollX, props.virtualXConfig) as VxeTablePropTypes.VirtualXConfig
|
|
476
|
+
return Object.assign({}, getConfig().table.scrollX, getConfig().table.virtualXConfig, props.scrollX, props.virtualXConfig) as VxeTablePropTypes.VirtualXConfig & { gt: number }
|
|
472
477
|
})
|
|
473
478
|
|
|
474
479
|
const computeVirtualYOpts = computed(() => {
|
|
475
|
-
return Object.assign({}, getConfig().table.scrollY, getConfig().table.virtualYConfig, props.scrollY, props.virtualYConfig) as VxeTablePropTypes.VirtualYConfig
|
|
480
|
+
return Object.assign({}, getConfig().table.scrollY, getConfig().table.virtualYConfig, props.scrollY, props.virtualYConfig) as VxeTablePropTypes.VirtualYConfig & { gt: number }
|
|
476
481
|
})
|
|
477
482
|
|
|
478
483
|
const computeScrollbarOpts = computed(() => {
|
|
@@ -490,8 +495,8 @@ export default defineComponent({
|
|
|
490
495
|
})
|
|
491
496
|
|
|
492
497
|
const computeScrollYThreshold = computed(() => {
|
|
493
|
-
const
|
|
494
|
-
const { threshold } =
|
|
498
|
+
const virtualYOpts = computeVirtualYOpts.value
|
|
499
|
+
const { threshold } = virtualYOpts
|
|
495
500
|
if (threshold) {
|
|
496
501
|
return XEUtils.toNumber(threshold)
|
|
497
502
|
}
|
|
@@ -509,7 +514,7 @@ export default defineComponent({
|
|
|
509
514
|
})
|
|
510
515
|
|
|
511
516
|
const computeColumnOpts = computed(() => {
|
|
512
|
-
return Object.assign({}, getConfig().table.columnConfig, props.columnConfig)
|
|
517
|
+
return Object.assign({}, getConfig().table.columnConfig, props.columnConfig)
|
|
513
518
|
})
|
|
514
519
|
|
|
515
520
|
const computeCurrentColumnOpts = computed(() => {
|
|
@@ -1124,14 +1129,14 @@ export default defineComponent({
|
|
|
1124
1129
|
|
|
1125
1130
|
const setMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[], mList: VxeTableDefines.MergeItem[], rowList?: any[]) => {
|
|
1126
1131
|
if (merges) {
|
|
1127
|
-
const { treeConfig } = props
|
|
1132
|
+
// const { treeConfig } = props
|
|
1128
1133
|
const { visibleColumn } = internalData
|
|
1129
1134
|
if (!XEUtils.isArray(merges)) {
|
|
1130
1135
|
merges = [merges]
|
|
1131
1136
|
}
|
|
1132
|
-
if (treeConfig && merges.length) {
|
|
1133
|
-
|
|
1134
|
-
}
|
|
1137
|
+
// if (treeConfig && merges.length) {
|
|
1138
|
+
// errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
|
|
1139
|
+
// }
|
|
1135
1140
|
merges.forEach((item) => {
|
|
1136
1141
|
let { row, col, rowspan, colspan } = item
|
|
1137
1142
|
if (rowList && XEUtils.isNumber(row)) {
|
|
@@ -1174,14 +1179,14 @@ export default defineComponent({
|
|
|
1174
1179
|
const removeMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[], mList: VxeTableDefines.MergeItem[], rowList?: any) => {
|
|
1175
1180
|
const rest: VxeTableDefines.MergeItem[] = []
|
|
1176
1181
|
if (merges) {
|
|
1177
|
-
const { treeConfig } = props
|
|
1182
|
+
// const { treeConfig } = props
|
|
1178
1183
|
const { visibleColumn } = internalData
|
|
1179
1184
|
if (!XEUtils.isArray(merges)) {
|
|
1180
1185
|
merges = [merges]
|
|
1181
1186
|
}
|
|
1182
|
-
if (treeConfig && merges.length) {
|
|
1183
|
-
|
|
1184
|
-
}
|
|
1187
|
+
// if (treeConfig && merges.length) {
|
|
1188
|
+
// errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
|
|
1189
|
+
// }
|
|
1185
1190
|
merges.forEach((item) => {
|
|
1186
1191
|
let { row, col } = item
|
|
1187
1192
|
if (rowList && XEUtils.isNumber(row)) {
|
|
@@ -1889,7 +1894,7 @@ export default defineComponent({
|
|
|
1889
1894
|
}
|
|
1890
1895
|
|
|
1891
1896
|
const updateStyle = () => {
|
|
1892
|
-
const {
|
|
1897
|
+
const { showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props
|
|
1893
1898
|
const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData
|
|
1894
1899
|
const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData
|
|
1895
1900
|
const el = refElem.value
|
|
@@ -2050,33 +2055,6 @@ export default defineComponent({
|
|
|
2050
2055
|
if (tableElem) {
|
|
2051
2056
|
tableElem.style.width = tWidth ? `${tWidth}px` : ''
|
|
2052
2057
|
}
|
|
2053
|
-
|
|
2054
|
-
const listElem = getRefElem(elemStore[`${name}-${layout}-list`])
|
|
2055
|
-
if (isGroup && listElem) {
|
|
2056
|
-
XEUtils.arrayEach(listElem.querySelectorAll('.col--group'), (thElem: any) => {
|
|
2057
|
-
const colNode = $xeTable.getColumnNode(thElem)
|
|
2058
|
-
if (colNode) {
|
|
2059
|
-
const column = colNode.item
|
|
2060
|
-
const { showHeaderOverflow } = column
|
|
2061
|
-
const cellOverflow = XEUtils.isBoolean(showHeaderOverflow) ? showHeaderOverflow : allColumnHeaderOverflow
|
|
2062
|
-
const showEllipsis = cellOverflow === 'ellipsis'
|
|
2063
|
-
const showTitle = cellOverflow === 'title'
|
|
2064
|
-
const showTooltip = cellOverflow === true || cellOverflow === 'tooltip'
|
|
2065
|
-
const hasEllipsis = showTitle || showTooltip || showEllipsis
|
|
2066
|
-
let childWidth = 0
|
|
2067
|
-
let countChild = 0
|
|
2068
|
-
if (hasEllipsis) {
|
|
2069
|
-
XEUtils.eachTree(column.children, (item) => {
|
|
2070
|
-
if (!item.children || !column.children.length) {
|
|
2071
|
-
countChild++
|
|
2072
|
-
}
|
|
2073
|
-
childWidth += item.renderWidth
|
|
2074
|
-
}, { children: 'children' })
|
|
2075
|
-
}
|
|
2076
|
-
thElem.style.width = hasEllipsis ? `${childWidth - countChild - (border ? 2 : 0)}px` : ''
|
|
2077
|
-
}
|
|
2078
|
-
})
|
|
2079
|
-
}
|
|
2080
2058
|
} else if (layout === 'body') {
|
|
2081
2059
|
if (currScrollElem) {
|
|
2082
2060
|
currScrollElem.style.maxHeight = customMaxHeight ? `${bodyMaxHeight}px` : ''
|
|
@@ -2129,7 +2107,7 @@ export default defineComponent({
|
|
|
2129
2107
|
if (tableElem) {
|
|
2130
2108
|
tableElem.style.width = tWidth ? `${tWidth}px` : ''
|
|
2131
2109
|
// 兼容性处理
|
|
2132
|
-
tableElem.style.paddingRight = osbWidth && fixedType && (
|
|
2110
|
+
tableElem.style.paddingRight = osbWidth && fixedType && (browseObj['-moz'] || browseObj.safari) ? `${osbWidth}px` : ''
|
|
2133
2111
|
}
|
|
2134
2112
|
const emptyBlockElem = getRefElem(elemStore[`${name}-${layout}-emptyBlock`])
|
|
2135
2113
|
if (emptyBlockElem) {
|
|
@@ -2226,7 +2204,7 @@ export default defineComponent({
|
|
|
2226
2204
|
(sortConfig.multiple ? defaultSort : defaultSort.slice(0, 1)).forEach((item: any, index: number) => {
|
|
2227
2205
|
const { field, order } = item
|
|
2228
2206
|
if (field && order) {
|
|
2229
|
-
const column =
|
|
2207
|
+
const column = $xeTable.getColumnByField(field)
|
|
2230
2208
|
if (column && column.sortable) {
|
|
2231
2209
|
column.order = order
|
|
2232
2210
|
column.sortTime = Date.now() + index
|
|
@@ -2234,7 +2212,7 @@ export default defineComponent({
|
|
|
2234
2212
|
}
|
|
2235
2213
|
})
|
|
2236
2214
|
if (!sortOpts.remote) {
|
|
2237
|
-
|
|
2215
|
+
$xeTable.handleTableData(true).then(updateStyle)
|
|
2238
2216
|
}
|
|
2239
2217
|
}
|
|
2240
2218
|
}
|
|
@@ -2295,7 +2273,7 @@ export default defineComponent({
|
|
|
2295
2273
|
const expandOpts = computeExpandOpts.value
|
|
2296
2274
|
const { expandAll, expandRowKeys } = expandOpts
|
|
2297
2275
|
if (expandAll) {
|
|
2298
|
-
|
|
2276
|
+
$xeTable.setAllRowExpand(true)
|
|
2299
2277
|
} else if (expandRowKeys) {
|
|
2300
2278
|
const defExpandeds: any[] = []
|
|
2301
2279
|
expandRowKeys.forEach((rowid: any) => {
|
|
@@ -2303,7 +2281,7 @@ export default defineComponent({
|
|
|
2303
2281
|
defExpandeds.push(fullDataRowIdData[rowid].row)
|
|
2304
2282
|
}
|
|
2305
2283
|
})
|
|
2306
|
-
|
|
2284
|
+
$xeTable.setRowExpand(defExpandeds, true)
|
|
2307
2285
|
}
|
|
2308
2286
|
}
|
|
2309
2287
|
}
|
|
@@ -2667,14 +2645,14 @@ export default defineComponent({
|
|
|
2667
2645
|
const handleDefaultMergeCells = () => {
|
|
2668
2646
|
const { mergeCells } = props
|
|
2669
2647
|
if (mergeCells) {
|
|
2670
|
-
|
|
2648
|
+
$xeTable.setMergeCells(mergeCells)
|
|
2671
2649
|
}
|
|
2672
2650
|
}
|
|
2673
2651
|
|
|
2674
2652
|
const handleDefaultMergeFooterItems = () => {
|
|
2675
2653
|
const { mergeFooterItems } = props
|
|
2676
2654
|
if (mergeFooterItems) {
|
|
2677
|
-
|
|
2655
|
+
$xeTable.setMergeFooterItems(mergeFooterItems)
|
|
2678
2656
|
}
|
|
2679
2657
|
}
|
|
2680
2658
|
|
|
@@ -2765,7 +2743,7 @@ export default defineComponent({
|
|
|
2765
2743
|
*/
|
|
2766
2744
|
const loadTableData = (datas: any[], isReset: boolean) => {
|
|
2767
2745
|
const { keepSource, treeConfig } = props
|
|
2768
|
-
const {
|
|
2746
|
+
const { scrollYLoad: oldScrollYLoad } = reactData
|
|
2769
2747
|
const { scrollYStore, scrollXStore, lastScrollLeft, lastScrollTop } = internalData
|
|
2770
2748
|
const treeOpts = computeTreeOpts.value
|
|
2771
2749
|
const { transform } = treeOpts
|
|
@@ -2815,8 +2793,8 @@ export default defineComponent({
|
|
|
2815
2793
|
scrollXStore.endIndex = 1
|
|
2816
2794
|
reactData.isRowLoading = true
|
|
2817
2795
|
reactData.scrollVMLoading = false
|
|
2818
|
-
|
|
2819
|
-
|
|
2796
|
+
internalData.insertRowMaps = {}
|
|
2797
|
+
internalData.removeRowMaps = {}
|
|
2820
2798
|
const sYLoad = updateScrollYStatus(fullData)
|
|
2821
2799
|
reactData.isDragColMove = false
|
|
2822
2800
|
reactData.isDragRowMove = false
|
|
@@ -2838,10 +2816,10 @@ export default defineComponent({
|
|
|
2838
2816
|
$xeTable.clearCellAreas()
|
|
2839
2817
|
$xeTable.clearCopyCellArea()
|
|
2840
2818
|
}
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2819
|
+
$xeTable.clearMergeCells()
|
|
2820
|
+
$xeTable.clearMergeFooterItems()
|
|
2821
|
+
$xeTable.handleTableData(true)
|
|
2822
|
+
$xeTable.updateFooter()
|
|
2845
2823
|
return nextTick().then(() => {
|
|
2846
2824
|
updateHeight()
|
|
2847
2825
|
updateStyle()
|
|
@@ -2875,20 +2853,20 @@ export default defineComponent({
|
|
|
2875
2853
|
}
|
|
2876
2854
|
|
|
2877
2855
|
handleReserveStatus()
|
|
2878
|
-
|
|
2856
|
+
$xeTable.checkSelectionStatus()
|
|
2879
2857
|
return new Promise<void>(resolve => {
|
|
2880
2858
|
nextTick()
|
|
2881
|
-
.then(() =>
|
|
2859
|
+
.then(() => $xeTable.recalculate())
|
|
2882
2860
|
.then(() => {
|
|
2883
2861
|
let targetScrollLeft = lastScrollLeft
|
|
2884
2862
|
let targetScrollTop = lastScrollTop
|
|
2885
|
-
const
|
|
2886
|
-
const
|
|
2863
|
+
const virtualXOpts = computeVirtualXOpts.value
|
|
2864
|
+
const virtualYOpts = computeVirtualYOpts.value
|
|
2887
2865
|
// 是否在更新数据之后自动滚动重置滚动条
|
|
2888
|
-
if (
|
|
2866
|
+
if (virtualXOpts.scrollToLeftOnChange) {
|
|
2889
2867
|
targetScrollLeft = 0
|
|
2890
2868
|
}
|
|
2891
|
-
if (
|
|
2869
|
+
if (virtualYOpts.scrollToTopOnChange) {
|
|
2892
2870
|
targetScrollTop = 0
|
|
2893
2871
|
}
|
|
2894
2872
|
reactData.isRowLoading = false
|
|
@@ -2924,7 +2902,7 @@ export default defineComponent({
|
|
|
2924
2902
|
handleDefaultTreeExpand()
|
|
2925
2903
|
handleDefaultMergeCells()
|
|
2926
2904
|
handleDefaultMergeFooterItems()
|
|
2927
|
-
nextTick(() => setTimeout(() =>
|
|
2905
|
+
nextTick(() => setTimeout(() => $xeTable.recalculate()))
|
|
2928
2906
|
}
|
|
2929
2907
|
|
|
2930
2908
|
/**
|
|
@@ -2996,7 +2974,7 @@ export default defineComponent({
|
|
|
2996
2974
|
const centerList: VxeTableDefines.ColumnInfo[] = []
|
|
2997
2975
|
const rightList: VxeTableDefines.ColumnInfo[] = []
|
|
2998
2976
|
const { isGroup, columnStore } = reactData
|
|
2999
|
-
const
|
|
2977
|
+
const virtualXOpts = computeVirtualXOpts.value
|
|
3000
2978
|
const { collectColumn, tableFullColumn, scrollXStore, fullColumnIdData } = internalData
|
|
3001
2979
|
// 如果是分组表头,如果子列全部被隐藏,则根列也隐藏
|
|
3002
2980
|
if (isGroup) {
|
|
@@ -3052,7 +3030,7 @@ export default defineComponent({
|
|
|
3052
3030
|
}
|
|
3053
3031
|
const visibleColumn = leftList.concat(centerList).concat(rightList)
|
|
3054
3032
|
// 如果gt为0,则总是启用
|
|
3055
|
-
const scrollXLoad = !!
|
|
3033
|
+
const scrollXLoad = !!virtualXOpts.enabled && virtualXOpts.gt > -1 && (virtualXOpts.gt === 0 || virtualXOpts.gt < tableFullColumn.length)
|
|
3056
3034
|
reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0
|
|
3057
3035
|
Object.assign(columnStore, { leftList, centerList, rightList })
|
|
3058
3036
|
if (scrollXLoad) {
|
|
@@ -3168,12 +3146,12 @@ export default defineComponent({
|
|
|
3168
3146
|
|
|
3169
3147
|
const updateScrollYStatus = (fullData?: any[]) => {
|
|
3170
3148
|
const { treeConfig } = props
|
|
3171
|
-
const
|
|
3149
|
+
const virtualYOpts = computeVirtualYOpts.value
|
|
3172
3150
|
const treeOpts = computeTreeOpts.value
|
|
3173
3151
|
const { transform } = treeOpts
|
|
3174
3152
|
const allList = fullData || internalData.tableFullData
|
|
3175
3153
|
// 如果gt为0,则总是启用
|
|
3176
|
-
const scrollYLoad = (transform || !treeConfig) && !!
|
|
3154
|
+
const scrollYLoad = (transform || !treeConfig) && !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt < allList.length)
|
|
3177
3155
|
reactData.scrollYLoad = scrollYLoad
|
|
3178
3156
|
return scrollYLoad
|
|
3179
3157
|
}
|
|
@@ -3888,9 +3866,7 @@ export default defineComponent({
|
|
|
3888
3866
|
*/
|
|
3889
3867
|
revertData (rows: any, field) {
|
|
3890
3868
|
const { keepSource, treeConfig } = props
|
|
3891
|
-
const {
|
|
3892
|
-
const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData
|
|
3893
|
-
const removeTempMaps = { ...editStore.removeMaps }
|
|
3869
|
+
const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData, removeRowMaps } = internalData
|
|
3894
3870
|
const treeOpts = computeTreeOpts.value
|
|
3895
3871
|
const { transform } = treeOpts
|
|
3896
3872
|
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
@@ -3924,7 +3900,9 @@ export default defineComponent({
|
|
|
3924
3900
|
XEUtils.destructuring(row, XEUtils.clone(oRow, true))
|
|
3925
3901
|
}
|
|
3926
3902
|
if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
|
|
3927
|
-
|
|
3903
|
+
if (removeRowMaps[rowid]) {
|
|
3904
|
+
delete removeRowMaps[rowid]
|
|
3905
|
+
}
|
|
3928
3906
|
tableFullData.unshift(row)
|
|
3929
3907
|
afterFullData.unshift(row)
|
|
3930
3908
|
reDelFlag = true
|
|
@@ -3936,7 +3914,7 @@ export default defineComponent({
|
|
|
3936
3914
|
}
|
|
3937
3915
|
if (rows) {
|
|
3938
3916
|
if (reDelFlag) {
|
|
3939
|
-
|
|
3917
|
+
reactData.removeRowFlag++
|
|
3940
3918
|
$xeTable.updateFooter()
|
|
3941
3919
|
$xeTable.cacheRowMap(false)
|
|
3942
3920
|
$xeTable.handleTableData(treeConfig && transform)
|
|
@@ -4064,22 +4042,19 @@ export default defineComponent({
|
|
|
4064
4042
|
* @param {Row} row 行对象
|
|
4065
4043
|
*/
|
|
4066
4044
|
isInsertByRow (row) {
|
|
4067
|
-
const { editStore } = reactData
|
|
4068
4045
|
const rowid = getRowid($xeTable, row)
|
|
4069
|
-
return !!
|
|
4046
|
+
return !!reactData.insertRowFlag && !!internalData.insertRowMaps[rowid]
|
|
4070
4047
|
},
|
|
4071
4048
|
isRemoveByRow (row) {
|
|
4072
|
-
const { editStore } = reactData
|
|
4073
4049
|
const rowid = getRowid($xeTable, row)
|
|
4074
|
-
return !!
|
|
4050
|
+
return !!reactData.removeRowFlag && !!internalData.removeRowMaps[rowid]
|
|
4075
4051
|
},
|
|
4076
4052
|
/**
|
|
4077
4053
|
* 删除所有新增的临时数据
|
|
4078
4054
|
* @returns
|
|
4079
4055
|
*/
|
|
4080
4056
|
removeInsertRow () {
|
|
4081
|
-
|
|
4082
|
-
editStore.insertMaps = {}
|
|
4057
|
+
internalData.insertRowMaps = {}
|
|
4083
4058
|
return $xeTable.remove($xeTable.getInsertRecords())
|
|
4084
4059
|
},
|
|
4085
4060
|
/**
|
|
@@ -4118,8 +4093,8 @@ export default defineComponent({
|
|
|
4118
4093
|
* @param {Number} columnIndex 索引
|
|
4119
4094
|
*/
|
|
4120
4095
|
getColumns (columnIndex?: number): any {
|
|
4121
|
-
const
|
|
4122
|
-
return XEUtils.isUndefined(columnIndex) ?
|
|
4096
|
+
const { visibleColumn } = internalData
|
|
4097
|
+
return XEUtils.isUndefined(columnIndex) ? visibleColumn.slice(0) : visibleColumn[columnIndex]
|
|
4123
4098
|
},
|
|
4124
4099
|
/**
|
|
4125
4100
|
* 根据列获取列的唯一主键
|
|
@@ -4133,7 +4108,7 @@ export default defineComponent({
|
|
|
4133
4108
|
* @param {String} colid 列主键
|
|
4134
4109
|
*/
|
|
4135
4110
|
getColumnById (colid) {
|
|
4136
|
-
const fullColumnIdData = internalData
|
|
4111
|
+
const { fullColumnIdData } = internalData
|
|
4137
4112
|
return colid && fullColumnIdData[colid] ? fullColumnIdData[colid].column : null
|
|
4138
4113
|
},
|
|
4139
4114
|
/**
|
|
@@ -4145,7 +4120,7 @@ export default defineComponent({
|
|
|
4145
4120
|
return field && fullColumnFieldData[field] ? fullColumnFieldData[field].column : null
|
|
4146
4121
|
},
|
|
4147
4122
|
getParentColumn (fieldOrColumn) {
|
|
4148
|
-
const fullColumnIdData = internalData
|
|
4123
|
+
const { fullColumnIdData } = internalData
|
|
4149
4124
|
const column = handleFieldOrColumn($xeTable, fieldOrColumn)
|
|
4150
4125
|
return column && column.parentId && fullColumnIdData[column.parentId] ? fullColumnIdData[column.parentId].column : null
|
|
4151
4126
|
},
|
|
@@ -6803,7 +6778,7 @@ export default defineComponent({
|
|
|
6803
6778
|
* @param {Event} evnt 事件
|
|
6804
6779
|
* @param {Row} row 行对象
|
|
6805
6780
|
*/
|
|
6806
|
-
const handleTooltip = (evnt: MouseEvent, tdEl: HTMLTableCellElement, overflowElem: HTMLElement | null, params: any) => {
|
|
6781
|
+
const handleTooltip = (evnt: MouseEvent, tdEl: HTMLTableCellElement, overflowElem: HTMLElement | null, tipElem: HTMLElement | null, params: any) => {
|
|
6807
6782
|
const tipOverEl = overflowElem || tdEl
|
|
6808
6783
|
if (!tipOverEl) {
|
|
6809
6784
|
return nextTick()
|
|
@@ -6816,7 +6791,8 @@ export default defineComponent({
|
|
|
6816
6791
|
const customContent = contentMethod ? contentMethod(params) : null
|
|
6817
6792
|
const useCustom = contentMethod && !XEUtils.eqNull(customContent)
|
|
6818
6793
|
const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim()
|
|
6819
|
-
|
|
6794
|
+
const isOver = tipOverEl.scrollWidth > tipOverEl.clientWidth
|
|
6795
|
+
if (content && (showAll || useCustom || isOver)) {
|
|
6820
6796
|
Object.assign(tooltipStore, {
|
|
6821
6797
|
row,
|
|
6822
6798
|
column,
|
|
@@ -6826,7 +6802,7 @@ export default defineComponent({
|
|
|
6826
6802
|
nextTick(() => {
|
|
6827
6803
|
const $tooltip = refTooltip.value
|
|
6828
6804
|
if ($tooltip && $tooltip.open) {
|
|
6829
|
-
$tooltip.open(tipOverEl, formatText(content))
|
|
6805
|
+
$tooltip.open(isOver ? tipOverEl : tipElem, formatText(content))
|
|
6830
6806
|
}
|
|
6831
6807
|
})
|
|
6832
6808
|
}
|
|
@@ -7787,7 +7763,7 @@ export default defineComponent({
|
|
|
7787
7763
|
return
|
|
7788
7764
|
}
|
|
7789
7765
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
7790
|
-
handleTooltip(evnt, thEl, thEl.querySelector<HTMLElement>('.vxe-cell--title') || cellEl, params)
|
|
7766
|
+
handleTooltip(evnt, thEl, thEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), thEl.querySelector<HTMLElement>('.vxe-cell--title') || cellEl, params)
|
|
7791
7767
|
}
|
|
7792
7768
|
},
|
|
7793
7769
|
/**
|
|
@@ -7814,7 +7790,7 @@ export default defineComponent({
|
|
|
7814
7790
|
}
|
|
7815
7791
|
}
|
|
7816
7792
|
if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
|
|
7817
|
-
handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), params)
|
|
7793
|
+
handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), params)
|
|
7818
7794
|
}
|
|
7819
7795
|
},
|
|
7820
7796
|
/**
|
|
@@ -7826,7 +7802,7 @@ export default defineComponent({
|
|
|
7826
7802
|
const tdEl = evnt.currentTarget as HTMLTableCellElement
|
|
7827
7803
|
handleTargetEnterEvent(tooltipStore.column !== column || !!tooltipStore.row)
|
|
7828
7804
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
7829
|
-
handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper') as HTMLElement, params)
|
|
7805
|
+
handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper') as HTMLElement, params)
|
|
7830
7806
|
}
|
|
7831
7807
|
},
|
|
7832
7808
|
handleTargetLeaveEvent () {
|
|
@@ -9013,8 +8989,8 @@ export default defineComponent({
|
|
|
9013
8989
|
* 横向 X 可视渲染事件处理
|
|
9014
8990
|
*/
|
|
9015
8991
|
triggerScrollXEvent () {
|
|
9016
|
-
const
|
|
9017
|
-
if (
|
|
8992
|
+
const virtualXOpts = computeVirtualXOpts.value
|
|
8993
|
+
if (virtualXOpts.immediate) {
|
|
9018
8994
|
loadScrollXData()
|
|
9019
8995
|
} else {
|
|
9020
8996
|
lazyScrollXData()
|
|
@@ -9024,8 +9000,8 @@ export default defineComponent({
|
|
|
9024
9000
|
* 纵向 Y 可视渲染事件处理
|
|
9025
9001
|
*/
|
|
9026
9002
|
triggerScrollYEvent () {
|
|
9027
|
-
const
|
|
9028
|
-
if (
|
|
9003
|
+
const virtualYOpts = computeVirtualYOpts.value
|
|
9004
|
+
if (virtualYOpts.immediate) {
|
|
9029
9005
|
loadScrollYData()
|
|
9030
9006
|
} else {
|
|
9031
9007
|
lazyScrollYData()
|
|
@@ -9218,10 +9194,9 @@ export default defineComponent({
|
|
|
9218
9194
|
if (!bodyScrollElem) {
|
|
9219
9195
|
return
|
|
9220
9196
|
}
|
|
9221
|
-
|
|
9222
9197
|
const wheelSpeed = getWheelSpeed(reactData.lastScrollTime)
|
|
9223
|
-
const deltaTop =
|
|
9224
|
-
const deltaLeft = Math.ceil((shiftKey ? deltaY : deltaX) * wheelSpeed)
|
|
9198
|
+
const deltaTop = shiftKey ? 0 : Math.ceil(deltaY * wheelSpeed)
|
|
9199
|
+
const deltaLeft = shiftKey ? Math.ceil((shiftKey ? (deltaY || deltaX) : deltaX) * wheelSpeed) : 0
|
|
9225
9200
|
|
|
9226
9201
|
const isTopWheel = deltaTop < 0
|
|
9227
9202
|
const currScrollTop = bodyScrollElem.scrollTop
|
|
@@ -9242,6 +9217,7 @@ export default defineComponent({
|
|
|
9242
9217
|
evnt.preventDefault()
|
|
9243
9218
|
internalData.inWheelScroll = true
|
|
9244
9219
|
wheelScrollLeftTo(scrollLeft, (offsetLeft: number) => {
|
|
9220
|
+
internalData.inWheelScroll = true
|
|
9245
9221
|
const currLeftNum = offsetLeft
|
|
9246
9222
|
setScrollLeft(xHandleEl, currLeftNum)
|
|
9247
9223
|
setScrollLeft(bodyScrollElem, currLeftNum)
|
|
@@ -9258,9 +9234,10 @@ export default defineComponent({
|
|
|
9258
9234
|
}
|
|
9259
9235
|
if (isRollY) {
|
|
9260
9236
|
evnt.preventDefault()
|
|
9237
|
+
internalData.inWheelScroll = true
|
|
9261
9238
|
wheelScrollTopTo(scrollTop - currScrollTop, (offsetTop: number) => {
|
|
9262
|
-
const currTopNum = bodyScrollElem.scrollTop + offsetTop
|
|
9263
9239
|
internalData.inWheelScroll = true
|
|
9240
|
+
const currTopNum = bodyScrollElem.scrollTop + offsetTop
|
|
9264
9241
|
setScrollTop(yHandleEl, currTopNum)
|
|
9265
9242
|
setScrollTop(bodyScrollElem, currTopNum)
|
|
9266
9243
|
setScrollTop(leftScrollElem, currTopNum)
|
|
@@ -10342,6 +10319,9 @@ export default defineComponent({
|
|
|
10342
10319
|
watch(computeScrollbarYToLeft, () => {
|
|
10343
10320
|
reLayoutFlag.value++
|
|
10344
10321
|
})
|
|
10322
|
+
watch(() => VxeUI.getLanguage(), () => {
|
|
10323
|
+
reLayoutFlag.value++
|
|
10324
|
+
})
|
|
10345
10325
|
watch(reLayoutFlag, () => {
|
|
10346
10326
|
nextTick(() => tableMethods.recalculate(true))
|
|
10347
10327
|
})
|
|
@@ -10441,7 +10421,6 @@ export default defineComponent({
|
|
|
10441
10421
|
nextTick(() => {
|
|
10442
10422
|
const { data, exportConfig, importConfig, treeConfig, showOverflow } = props
|
|
10443
10423
|
const { scrollXStore, scrollYStore } = internalData
|
|
10444
|
-
const sYOpts = computeSYOpts.value
|
|
10445
10424
|
const editOpts = computeEditOpts.value
|
|
10446
10425
|
const treeOpts = computeTreeOpts.value
|
|
10447
10426
|
const radioOpts = computeRadioOpts.value
|
|
@@ -10571,8 +10550,7 @@ export default defineComponent({
|
|
|
10571
10550
|
Object.assign(scrollYStore, {
|
|
10572
10551
|
startIndex: 0,
|
|
10573
10552
|
endIndex: 0,
|
|
10574
|
-
visibleSize: 0
|
|
10575
|
-
adaptive: sYOpts.adaptive !== false
|
|
10553
|
+
visibleSize: 0
|
|
10576
10554
|
})
|
|
10577
10555
|
Object.assign(scrollXStore, {
|
|
10578
10556
|
startIndex: 0,
|
package/packages/ui/index.ts
CHANGED
|
@@ -200,13 +200,13 @@ VxeUI.setConfig({
|
|
|
200
200
|
enabled: true,
|
|
201
201
|
gt: 60,
|
|
202
202
|
preSize: 1,
|
|
203
|
-
oSize:
|
|
203
|
+
oSize: 0
|
|
204
204
|
},
|
|
205
205
|
virtualYConfig: {
|
|
206
206
|
enabled: true,
|
|
207
207
|
gt: 100,
|
|
208
208
|
preSize: 1,
|
|
209
|
-
oSize:
|
|
209
|
+
oSize: 0
|
|
210
210
|
},
|
|
211
211
|
scrollbarConfig: {
|
|
212
212
|
// width: 0,
|
package/packages/ui/src/dom.ts
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|