vxe-table 4.23.0-beta.3 → 4.23.0-beta.4
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 +114 -101
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/grid/src/grid.js +3 -0
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/filter/hook.js +4 -7
- package/es/table/module/filter/panel.js +42 -46
- package/es/table/src/table.js +63 -45
- package/es/table/src/util.js +1 -2
- package/es/table/style.css +31 -12
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +2 -2
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +31 -12
- package/es/vxe-table/style.min.css +1 -1
- package/lib/grid/src/grid.js +5 -0
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +61 -58
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/filter/hook.js +5 -7
- package/lib/table/module/filter/hook.min.js +1 -1
- package/lib/table/module/filter/panel.js +34 -33
- package/lib/table/module/filter/panel.min.js +1 -1
- package/lib/table/src/table.js +13 -13
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +1 -2
- package/lib/table/src/util.min.js +1 -1
- package/lib/table/style/style.css +31 -12
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +2 -2
- 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/vxe-table/style/style.css +31 -12
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/grid/src/grid.ts +3 -0
- package/packages/table/module/filter/hook.ts +4 -7
- package/packages/table/module/filter/panel.ts +45 -46
- package/packages/table/src/table.ts +64 -45
- package/packages/table/src/util.ts +1 -2
- package/packages/ui/index.ts +1 -1
- package/styles/components/table-module/filter.scss +25 -14
- /package/es/{iconfont.1792117711657.ttf → iconfont.1792139865095.ttf} +0 -0
- /package/es/{iconfont.1792117711657.woff → iconfont.1792139865095.woff} +0 -0
- /package/es/{iconfont.1792117711657.woff2 → iconfont.1792139865095.woff2} +0 -0
- /package/lib/{iconfont.1792117711657.ttf → iconfont.1792139865095.ttf} +0 -0
- /package/lib/{iconfont.1792117711657.woff → iconfont.1792139865095.woff} +0 -0
- /package/lib/{iconfont.1792117711657.woff2 → iconfont.1792139865095.woff2} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vxe-table",
|
|
3
|
-
"version": "4.23.0-beta.
|
|
3
|
+
"version": "4.23.0-beta.4",
|
|
4
4
|
"description": "A PC-end table component based on Vxe UI, supporting copy-paste, data pivot table, and high-performance virtual list table solution.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"update": "npm install --legacy-peer-deps",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"typescript": "~5.9.3",
|
|
67
67
|
"vue": "3.4.27",
|
|
68
68
|
"vue-router": "~4.5.1",
|
|
69
|
-
"vxe-pc-ui": "4.20.
|
|
69
|
+
"vxe-pc-ui": "4.20.9"
|
|
70
70
|
},
|
|
71
71
|
"vetur": {
|
|
72
72
|
"tags": "helper/vetur/tags.json",
|
|
@@ -64,6 +64,7 @@ export default defineVxeComponent({
|
|
|
64
64
|
const defaultLayouts: VxeGridPropTypes.Layouts = [['Form'], ['Toolbar', 'Top', 'Table', 'Bottom', 'Pager']]
|
|
65
65
|
|
|
66
66
|
const { computeSize } = useFns.useSize(props)
|
|
67
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
67
68
|
|
|
68
69
|
const reactData = reactive(createReactData())
|
|
69
70
|
|
|
@@ -268,6 +269,8 @@ export default defineVxeComponent({
|
|
|
268
269
|
}
|
|
269
270
|
|
|
270
271
|
const computeMaps: VxeGridPrivateComputed = {
|
|
272
|
+
computeSize,
|
|
273
|
+
computeIsVScrollbar,
|
|
271
274
|
computeProxyOpts,
|
|
272
275
|
computePagerOpts,
|
|
273
276
|
computeFormOpts,
|
|
@@ -24,7 +24,7 @@ hooks.add('tableFilterModule', {
|
|
|
24
24
|
const { computeFilterOpts, computeMouseOpts, computeRendererOpts } = $xeTable.getComputeMaps()
|
|
25
25
|
|
|
26
26
|
const updatePopupStyle = () => {
|
|
27
|
-
const { filterStore } = reactData
|
|
27
|
+
const { filterStore, scrollbarHeight } = reactData
|
|
28
28
|
const { elemStore } = internalData
|
|
29
29
|
const { column, targetEl } = filterStore
|
|
30
30
|
if (!column) {
|
|
@@ -46,8 +46,6 @@ hooks.add('tableFilterModule', {
|
|
|
46
46
|
if (!filterWrapperElem) {
|
|
47
47
|
return nextTick()
|
|
48
48
|
}
|
|
49
|
-
const filterHeadElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-header')
|
|
50
|
-
const filterFootElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-footer')
|
|
51
49
|
|
|
52
50
|
/**
|
|
53
51
|
* 是否显示筛选按钮图标
|
|
@@ -85,7 +83,7 @@ hooks.add('tableFilterModule', {
|
|
|
85
83
|
const centerWidth = targetEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2)
|
|
86
84
|
left = btnRect.left - tableRect.left - centerWidth
|
|
87
85
|
top = btnRect.top - tableRect.top + currEl.clientHeight
|
|
88
|
-
maxHeight = Math.max(40, tableEl.clientHeight - top -
|
|
86
|
+
maxHeight = Math.max(40, tableEl.clientHeight - top - scrollbarHeight)
|
|
89
87
|
if (left < 1) {
|
|
90
88
|
left = 1
|
|
91
89
|
} else if (left > (tableEl.clientWidth - filterWidth - 1)) {
|
|
@@ -106,7 +104,6 @@ hooks.add('tableFilterModule', {
|
|
|
106
104
|
if (zIndex) {
|
|
107
105
|
panelStyle.zIndex = zIndex
|
|
108
106
|
}
|
|
109
|
-
filterStore.style = panelStyle
|
|
110
107
|
// 筛选面板是自适应表格高度
|
|
111
108
|
if (compConf ? !compConf.tableFilterAutoHeight : false) {
|
|
112
109
|
maxHeight = 0
|
|
@@ -115,8 +112,8 @@ hooks.add('tableFilterModule', {
|
|
|
115
112
|
maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight
|
|
116
113
|
}
|
|
117
114
|
}
|
|
118
|
-
|
|
119
|
-
filterStore.
|
|
115
|
+
panelStyle['--vxe-ui-vxe-table-filter-default-max-height'] = maxHeight ? toCssUnit(maxHeight) : 'none'
|
|
116
|
+
filterStore.style = panelStyle
|
|
120
117
|
}
|
|
121
118
|
handleStyle()
|
|
122
119
|
return nextTick().then(() => {
|
|
@@ -2,7 +2,7 @@ import { h, ref, computed, inject, Teleport, PropType } from 'vue'
|
|
|
2
2
|
import { defineVxeComponent } from '../../../ui/src/comp'
|
|
3
3
|
import { VxeUI } from '../../../ui'
|
|
4
4
|
import { formatText, isEnableConf } from '../../../ui/src/utils'
|
|
5
|
-
import { getPropClass
|
|
5
|
+
import { getPropClass } from '../../../ui/src/dom'
|
|
6
6
|
import { getSlotVNs } from '../../../ui/src/vn'
|
|
7
7
|
import { createComponentLog } from '../../../ui/src/log'
|
|
8
8
|
import XEUtils from 'xe-utils'
|
|
@@ -25,6 +25,8 @@ export default defineVxeComponent({
|
|
|
25
25
|
setup (props, context) {
|
|
26
26
|
const xID = XEUtils.uniqueId()
|
|
27
27
|
|
|
28
|
+
const VxeUIScrollbarComponent = VxeUI.getComponent('VxeScrollbar')
|
|
29
|
+
|
|
28
30
|
const $xeTable = inject('$xeTable', {} as VxeTableConstructor & VxeTableMethods & VxeTablePrivateMethods)
|
|
29
31
|
const { reactData: tableReactData, internalData: tableInternalData, getComputeMaps } = $xeTable
|
|
30
32
|
const { computeFilterOpts, computeRendererOpts } = getComputeMaps()
|
|
@@ -124,10 +126,12 @@ export default defineVxeComponent({
|
|
|
124
126
|
|
|
125
127
|
const renderOptions = (filterRender: VxeColumnPropTypes.FilterRender | null, compConf: VxeGlobalRendererOptions | null) => {
|
|
126
128
|
const { filterStore } = props
|
|
127
|
-
const { column
|
|
129
|
+
const { column } = filterStore
|
|
128
130
|
if (!column) {
|
|
129
131
|
return []
|
|
130
132
|
}
|
|
133
|
+
const filterOpts = computeFilterOpts.value
|
|
134
|
+
const { useScrollbar } = filterOpts
|
|
131
135
|
const { filterMultiple, filters, slots } = column
|
|
132
136
|
const filterOptions = (filters || []) as VxeTableDefines.FilterOption[]
|
|
133
137
|
const filterSlot = slots ? slots.filter : null
|
|
@@ -136,33 +140,48 @@ export default defineVxeComponent({
|
|
|
136
140
|
if (filterSlot) {
|
|
137
141
|
return [
|
|
138
142
|
h('div', {
|
|
139
|
-
class: 'vxe-table--filter-template'
|
|
140
|
-
style: maxHeight
|
|
141
|
-
? {
|
|
142
|
-
maxHeight: toCssUnit(maxHeight)
|
|
143
|
-
}
|
|
144
|
-
: {}
|
|
143
|
+
class: 'vxe-table--filter-template'
|
|
145
144
|
}, $xeTable.callSlot(filterSlot, params))
|
|
146
145
|
]
|
|
147
146
|
} else if (filterRender && rtFilter) {
|
|
148
147
|
return [
|
|
149
148
|
h('div', {
|
|
150
|
-
class: 'vxe-table--filter-template'
|
|
151
|
-
style: maxHeight
|
|
152
|
-
? {
|
|
153
|
-
maxHeight: toCssUnit(maxHeight)
|
|
154
|
-
}
|
|
155
|
-
: {}
|
|
149
|
+
class: 'vxe-table--filter-template'
|
|
156
150
|
}, getSlotVNs(rtFilter(filterRender, params)))
|
|
157
151
|
]
|
|
158
152
|
}
|
|
159
153
|
const isAllChecked = filterMultiple ? filterStore.isAllSelected : !filterOptions.some((item) => item._checked)
|
|
160
154
|
const isAllIndeterminate = filterMultiple && filterStore.isIndeterminate
|
|
155
|
+
|
|
156
|
+
const optVNs = filterOptions.map((item: any) => {
|
|
157
|
+
const isChecked = item._checked
|
|
158
|
+
const isIndeterminate = false
|
|
159
|
+
return h('div', {
|
|
160
|
+
class: ['vxe-table--filter-option', {
|
|
161
|
+
'is--checked': item._checked
|
|
162
|
+
}],
|
|
163
|
+
title: item.label,
|
|
164
|
+
onClick: (evnt: MouseEvent) => {
|
|
165
|
+
changeOption(evnt, !item._checked, item)
|
|
166
|
+
}
|
|
167
|
+
}, (filterMultiple
|
|
168
|
+
? [
|
|
169
|
+
h('span', {
|
|
170
|
+
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
|
|
171
|
+
})
|
|
172
|
+
]
|
|
173
|
+
: []).concat([
|
|
174
|
+
h('span', {
|
|
175
|
+
class: 'vxe-checkbox--label'
|
|
176
|
+
}, formatText(item.label, 1))
|
|
177
|
+
]))
|
|
178
|
+
})
|
|
179
|
+
|
|
161
180
|
return [
|
|
162
|
-
h('
|
|
181
|
+
h('div', {
|
|
163
182
|
class: 'vxe-table--filter-header'
|
|
164
183
|
}, [
|
|
165
|
-
h('
|
|
184
|
+
h('div', {
|
|
166
185
|
class: ['vxe-table--filter-option', {
|
|
167
186
|
'is--checked': isAllChecked,
|
|
168
187
|
'is--indeterminate': isAllIndeterminate
|
|
@@ -183,36 +202,16 @@ export default defineVxeComponent({
|
|
|
183
202
|
}, getI18n('vxe.table.allFilter'))
|
|
184
203
|
]))
|
|
185
204
|
]),
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
return h('li', {
|
|
197
|
-
class: ['vxe-table--filter-option', {
|
|
198
|
-
'is--checked': item._checked
|
|
199
|
-
}],
|
|
200
|
-
title: item.label,
|
|
201
|
-
onClick: (evnt: MouseEvent) => {
|
|
202
|
-
changeOption(evnt, !item._checked, item)
|
|
203
|
-
}
|
|
204
|
-
}, (filterMultiple
|
|
205
|
-
? [
|
|
206
|
-
h('span', {
|
|
207
|
-
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
|
|
208
|
-
})
|
|
209
|
-
]
|
|
210
|
-
: []).concat([
|
|
211
|
-
h('span', {
|
|
212
|
-
class: 'vxe-checkbox--label'
|
|
213
|
-
}, formatText(item.label, 1))
|
|
214
|
-
]))
|
|
215
|
-
}))
|
|
205
|
+
useScrollbar
|
|
206
|
+
? h(VxeUIScrollbarComponent, {
|
|
207
|
+
class: 'vxe-table--scrollbar-filter-body',
|
|
208
|
+
viewClassName: 'vxe-table--scrollbar-filter-body-view'
|
|
209
|
+
}, {
|
|
210
|
+
default: () => optVNs
|
|
211
|
+
})
|
|
212
|
+
: h('div', {
|
|
213
|
+
class: 'vxe-table--filter-body'
|
|
214
|
+
}, optVNs)
|
|
216
215
|
]
|
|
217
216
|
}
|
|
218
217
|
|
|
@@ -77,6 +77,7 @@ export default defineVxeComponent({
|
|
|
77
77
|
const $xeGGWrapper = $xeGrid || $xeGantt
|
|
78
78
|
|
|
79
79
|
const { computeSize } = useFns.useSize(props)
|
|
80
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
80
81
|
|
|
81
82
|
const crossTableDragRowInfo = getCrossTableDragRowInfo()
|
|
82
83
|
|
|
@@ -426,8 +427,8 @@ export default defineVxeComponent({
|
|
|
426
427
|
})
|
|
427
428
|
|
|
428
429
|
const computeTooltipOpts = computed(() => {
|
|
429
|
-
const
|
|
430
|
-
return Object.assign({ useScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig)
|
|
430
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
431
|
+
return Object.assign({ useScrollbar: isVScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig)
|
|
431
432
|
})
|
|
432
433
|
|
|
433
434
|
const computeHeaderTooltipOpts = computed(() => {
|
|
@@ -470,7 +471,8 @@ export default defineVxeComponent({
|
|
|
470
471
|
})
|
|
471
472
|
|
|
472
473
|
const computeFilterOpts = computed(() => {
|
|
473
|
-
|
|
474
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
475
|
+
return Object.assign({ useScrollbar: isVScrollbar }, getConfig().table.filterConfig, props.filterConfig) as VxeTablePropTypes.FilterOpts
|
|
474
476
|
})
|
|
475
477
|
|
|
476
478
|
const computeFloatingFilterOpts = computed(() => {
|
|
@@ -915,6 +917,7 @@ export default defineVxeComponent({
|
|
|
915
917
|
|
|
916
918
|
const computeMaps: VxeTablePrivateComputed = {
|
|
917
919
|
computeSize,
|
|
920
|
+
computeIsVScrollbar,
|
|
918
921
|
computeTableId,
|
|
919
922
|
computeValidOpts,
|
|
920
923
|
computeRowField,
|
|
@@ -3618,6 +3621,7 @@ export default defineVxeComponent({
|
|
|
3618
3621
|
if (reFull) {
|
|
3619
3622
|
updateTreeLineStyle()
|
|
3620
3623
|
}
|
|
3624
|
+
updateScrollbar()
|
|
3621
3625
|
internalData.rceRunTime = Date.now()
|
|
3622
3626
|
if (reFull) {
|
|
3623
3627
|
return computeScrollLoad()
|
|
@@ -3626,8 +3630,14 @@ export default defineVxeComponent({
|
|
|
3626
3630
|
}
|
|
3627
3631
|
|
|
3628
3632
|
const updateScrollbar = () => {
|
|
3629
|
-
|
|
3630
|
-
|
|
3633
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
3634
|
+
if (isVScrollbar) {
|
|
3635
|
+
return nextTick().then(() => {
|
|
3636
|
+
updateThumbSize()
|
|
3637
|
+
updateThumbOffset()
|
|
3638
|
+
})
|
|
3639
|
+
}
|
|
3640
|
+
return Promise.resolve()
|
|
3631
3641
|
}
|
|
3632
3642
|
|
|
3633
3643
|
const defaultMinRunDelay = 50
|
|
@@ -12957,8 +12967,8 @@ export default defineVxeComponent({
|
|
|
12957
12967
|
}
|
|
12958
12968
|
},
|
|
12959
12969
|
triggerBodyScrollEvent (evnt, fixedType) {
|
|
12960
|
-
const { useScrollbar } = props
|
|
12961
12970
|
const { scrollYLoad, scrollXLoad } = reactData
|
|
12971
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
12962
12972
|
const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData
|
|
12963
12973
|
if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
|
|
12964
12974
|
return
|
|
@@ -12977,7 +12987,7 @@ export default defineVxeComponent({
|
|
|
12977
12987
|
if (!bodyScrollElem) {
|
|
12978
12988
|
return
|
|
12979
12989
|
}
|
|
12980
|
-
if (!
|
|
12990
|
+
if (!isVScrollbar) {
|
|
12981
12991
|
if (!xHandleEl) {
|
|
12982
12992
|
return
|
|
12983
12993
|
}
|
|
@@ -13739,6 +13749,25 @@ export default defineVxeComponent({
|
|
|
13739
13749
|
}
|
|
13740
13750
|
}
|
|
13741
13751
|
|
|
13752
|
+
const bindScrollbarResize = () => {
|
|
13753
|
+
const { elemStore } = internalData
|
|
13754
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
13755
|
+
if (isVScrollbar) {
|
|
13756
|
+
const el = refElem.value
|
|
13757
|
+
const viewInnerEl = getRefElem(elemStore['main-body-table'])
|
|
13758
|
+
const scrollObserver = globalResize.create(() => {
|
|
13759
|
+
reScrollFlag.value++
|
|
13760
|
+
})
|
|
13761
|
+
if (el) {
|
|
13762
|
+
scrollObserver.observe(el)
|
|
13763
|
+
}
|
|
13764
|
+
if (viewInnerEl) {
|
|
13765
|
+
scrollObserver.observe(viewInnerEl)
|
|
13766
|
+
}
|
|
13767
|
+
internalData.scrollObserver = scrollObserver
|
|
13768
|
+
}
|
|
13769
|
+
}
|
|
13770
|
+
|
|
13742
13771
|
const updateThumbSize = () => {
|
|
13743
13772
|
const { elemStore } = internalData
|
|
13744
13773
|
|
|
@@ -14354,8 +14383,8 @@ export default defineVxeComponent({
|
|
|
14354
14383
|
const renderVirtualBody = () => {
|
|
14355
14384
|
const $xeGanttView = internalData.xeGanttView
|
|
14356
14385
|
|
|
14357
|
-
const { useScrollbar } = props
|
|
14358
14386
|
const { xThumbWidth, yThumbHeight } = reactData
|
|
14387
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
14359
14388
|
const scrollbarOpts = computeScrollbarOpts.value
|
|
14360
14389
|
const scrollXAutoHide = computeScrollXAutoHide.value
|
|
14361
14390
|
const scrollYAutoHide = computeScrollYAutoHide.value
|
|
@@ -14370,10 +14399,10 @@ export default defineVxeComponent({
|
|
|
14370
14399
|
return h('div', {
|
|
14371
14400
|
key: 'lvb',
|
|
14372
14401
|
class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
14373
|
-
'is--virtual-scrollbar':
|
|
14374
|
-
'ov-padding':
|
|
14375
|
-
'ov-x--auto-hide':
|
|
14376
|
-
'ov-y--auto-hide':
|
|
14402
|
+
'is--virtual-scrollbar': isVScrollbar,
|
|
14403
|
+
'ov-padding': isVScrollbar && scrollbarOpts.padding,
|
|
14404
|
+
'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
|
|
14405
|
+
'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
|
|
14377
14406
|
'overflow-y': yThumbHeight,
|
|
14378
14407
|
'overflow-x': xThumbWidth
|
|
14379
14408
|
}]
|
|
@@ -14421,10 +14450,11 @@ export default defineVxeComponent({
|
|
|
14421
14450
|
}
|
|
14422
14451
|
|
|
14423
14452
|
const renderVN = () => {
|
|
14424
|
-
const { loading, stripe,
|
|
14453
|
+
const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props
|
|
14425
14454
|
const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData
|
|
14426
14455
|
const { teleportToWrapperElem, popupToWrapperElem, customPopupToElem } = internalData
|
|
14427
14456
|
const { leftList, rightList } = columnStore
|
|
14457
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
14428
14458
|
const loadingSlot = slots.loading
|
|
14429
14459
|
const tipSlots = {
|
|
14430
14460
|
header: slots.headerTooltip || slots['header-tooltip'],
|
|
@@ -14470,7 +14500,7 @@ export default defineVxeComponent({
|
|
|
14470
14500
|
}
|
|
14471
14501
|
return h('div', {
|
|
14472
14502
|
ref: refElem,
|
|
14473
|
-
class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`,
|
|
14503
|
+
class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, isVScrollbar ? 'is--virtual-scrollbar' : 'is--native-scrollbar', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
14474
14504
|
[`size--${vSize}`]: vSize,
|
|
14475
14505
|
[`valid-msg--${validOpts.msgMode}`]: !!editRules,
|
|
14476
14506
|
'vxe-editable': !!editConfig,
|
|
@@ -14535,7 +14565,7 @@ export default defineVxeComponent({
|
|
|
14535
14565
|
h('div', {
|
|
14536
14566
|
key: 'tw',
|
|
14537
14567
|
class: 'vxe-table--render-wrapper'
|
|
14538
|
-
},
|
|
14568
|
+
}, isVScrollbar
|
|
14539
14569
|
? [renderVirtualBody()]
|
|
14540
14570
|
: (scrollbarXToTop
|
|
14541
14571
|
? [
|
|
@@ -14722,7 +14752,7 @@ export default defineVxeComponent({
|
|
|
14722
14752
|
ref: refCommTooltip,
|
|
14723
14753
|
isArrow: false,
|
|
14724
14754
|
enterable: false,
|
|
14725
|
-
useScrollbar
|
|
14755
|
+
useScrollbar: isVScrollbar
|
|
14726
14756
|
}),
|
|
14727
14757
|
/**
|
|
14728
14758
|
* 工具提示
|
|
@@ -14786,7 +14816,7 @@ export default defineVxeComponent({
|
|
|
14786
14816
|
enterable: validTipConfig.enterable,
|
|
14787
14817
|
enterDelay: validTipConfig.enterDelay,
|
|
14788
14818
|
leaveDelay: validTipConfig.leaveDelay,
|
|
14789
|
-
useScrollbar
|
|
14819
|
+
useScrollbar: validTipConfig.useScrollbar
|
|
14790
14820
|
})
|
|
14791
14821
|
: renderEmptyElement($xeTable)
|
|
14792
14822
|
])
|
|
@@ -14897,43 +14927,44 @@ export default defineVxeComponent({
|
|
|
14897
14927
|
watch(() => VxeUI.getLanguage(), () => {
|
|
14898
14928
|
reLayoutFlag.value++
|
|
14899
14929
|
})
|
|
14930
|
+
watch(computeIsVScrollbar, () => {
|
|
14931
|
+
nextTick(() => {
|
|
14932
|
+
bindScrollbarResize()
|
|
14933
|
+
nextTick(() => {
|
|
14934
|
+
reLayoutFlag.value++
|
|
14935
|
+
})
|
|
14936
|
+
})
|
|
14937
|
+
})
|
|
14900
14938
|
watch(computeScrollbarXToTop, () => {
|
|
14901
|
-
reScrollFlag.value++
|
|
14902
14939
|
reLayoutFlag.value++
|
|
14903
14940
|
})
|
|
14904
14941
|
watch(computeScrollbarYToLeft, () => {
|
|
14905
|
-
reScrollFlag.value++
|
|
14906
14942
|
reLayoutFlag.value++
|
|
14907
14943
|
})
|
|
14908
14944
|
watch(computeScrollXVisible, () => {
|
|
14909
|
-
reScrollFlag.value++
|
|
14910
14945
|
reLayoutFlag.value++
|
|
14911
14946
|
})
|
|
14912
14947
|
watch(computeScrollYVisible, () => {
|
|
14913
|
-
reScrollFlag.value++
|
|
14914
14948
|
reLayoutFlag.value++
|
|
14915
14949
|
})
|
|
14916
14950
|
watch(computeScrollXHeight, () => {
|
|
14917
|
-
reScrollFlag.value++
|
|
14918
14951
|
reLayoutFlag.value++
|
|
14919
14952
|
})
|
|
14920
14953
|
watch(computeScrollYWidth, () => {
|
|
14921
|
-
reScrollFlag.value++
|
|
14922
14954
|
reLayoutFlag.value++
|
|
14923
14955
|
})
|
|
14924
14956
|
watch(computeCellHeitht, () => {
|
|
14925
14957
|
reLayoutFlag.value++
|
|
14926
14958
|
})
|
|
14927
14959
|
watch(reLayoutFlag, () => {
|
|
14928
|
-
|
|
14960
|
+
nextTick().then(() => {
|
|
14961
|
+
$xeTable.recalculate(true)
|
|
14962
|
+
})
|
|
14929
14963
|
})
|
|
14930
14964
|
|
|
14931
14965
|
watch(reScrollFlag, () => {
|
|
14932
|
-
|
|
14933
|
-
|
|
14934
|
-
nextTick(() => {
|
|
14935
|
-
$xeTable.updateScrollbar()
|
|
14936
|
-
})
|
|
14966
|
+
updateScrollbar().then(() => {
|
|
14967
|
+
updateScrollbar()
|
|
14937
14968
|
})
|
|
14938
14969
|
})
|
|
14939
14970
|
|
|
@@ -15082,7 +15113,7 @@ export default defineVxeComponent({
|
|
|
15082
15113
|
|
|
15083
15114
|
onMounted(() => {
|
|
15084
15115
|
const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props
|
|
15085
|
-
const {
|
|
15116
|
+
const { scrollXStore, scrollYStore } = internalData
|
|
15086
15117
|
const columnOpts = computeColumnOpts.value
|
|
15087
15118
|
const columnDragOpts = computeColumnDragOpts.value
|
|
15088
15119
|
const aggregateOpts = computeAggregateOpts.value
|
|
@@ -15369,22 +15400,9 @@ export default defineVxeComponent({
|
|
|
15369
15400
|
initData()
|
|
15370
15401
|
|
|
15371
15402
|
nextTick(() => {
|
|
15372
|
-
const {
|
|
15373
|
-
const el = refElem.value
|
|
15374
|
-
if (useScrollbar) {
|
|
15375
|
-
const viewInnerEl = getRefElem(elemStore['main-body-table'])
|
|
15376
|
-
const scrollObserver = globalResize.create(() => {
|
|
15377
|
-
reScrollFlag.value++
|
|
15378
|
-
})
|
|
15379
|
-
if (el) {
|
|
15380
|
-
scrollObserver.observe(el)
|
|
15381
|
-
}
|
|
15382
|
-
if (viewInnerEl) {
|
|
15383
|
-
scrollObserver.observe(viewInnerEl)
|
|
15384
|
-
}
|
|
15385
|
-
internalData.scrollObserver = scrollObserver
|
|
15386
|
-
}
|
|
15403
|
+
const { autoResize } = props
|
|
15387
15404
|
if (autoResize) {
|
|
15405
|
+
const el = refElem.value
|
|
15388
15406
|
const parentEl = $xeTable.getParentElem()
|
|
15389
15407
|
const resizeObserver = globalResize.create(() => {
|
|
15390
15408
|
if (props.autoResize) {
|
|
@@ -15399,6 +15417,7 @@ export default defineVxeComponent({
|
|
|
15399
15417
|
}
|
|
15400
15418
|
internalData.resizeObserver = resizeObserver
|
|
15401
15419
|
}
|
|
15420
|
+
bindScrollbarResize()
|
|
15402
15421
|
})
|
|
15403
15422
|
|
|
15404
15423
|
if (virtualYOpts.mode !== 'scroll') {
|
package/packages/ui/index.ts
CHANGED
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
.vxe-table--filter-wrapper {
|
|
32
32
|
display: none;
|
|
33
33
|
position: absolute;
|
|
34
|
+
flex-direction: column;
|
|
34
35
|
top: 0;
|
|
35
36
|
min-width: 100px;
|
|
36
37
|
font-size: var(--vxe-ui-font-size-default);
|
|
@@ -40,6 +41,7 @@
|
|
|
40
41
|
color: var(--vxe-ui-font-color);
|
|
41
42
|
box-shadow: var(--vxe-ui-base-popup-box-shadow);
|
|
42
43
|
z-index: 15;
|
|
44
|
+
max-height: var(--vxe-ui-vxe-table-filter-default-max-height);
|
|
43
45
|
&:not(.is--multiple) {
|
|
44
46
|
.vxe-table--filter-header,
|
|
45
47
|
.vxe-table--filter-body {
|
|
@@ -47,11 +49,24 @@
|
|
|
47
49
|
}
|
|
48
50
|
}
|
|
49
51
|
&.is--active {
|
|
50
|
-
display:
|
|
52
|
+
display: flex;
|
|
53
|
+
}
|
|
54
|
+
.vxe-table--filter-body,
|
|
55
|
+
.vxe-table--scrollbar-filter-body {
|
|
56
|
+
overflow: auto;
|
|
57
|
+
flex-grow: 1;
|
|
58
|
+
}
|
|
59
|
+
.vxe-table--scrollbar-filter-body {
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
.vxe-table--scrollbar-filter-body-view {
|
|
63
|
+
flex-grow: 1;
|
|
64
|
+
}
|
|
51
65
|
}
|
|
52
66
|
.vxe-table--filter-header,
|
|
53
|
-
.vxe-table--filter-body
|
|
54
|
-
|
|
67
|
+
.vxe-table--filter-body,
|
|
68
|
+
.vxe-table--scrollbar-filter-body {
|
|
69
|
+
.vxe-table--filter-option {
|
|
55
70
|
overflow: hidden;
|
|
56
71
|
text-overflow: ellipsis;
|
|
57
72
|
white-space: nowrap;
|
|
@@ -69,11 +84,12 @@
|
|
|
69
84
|
.vxe-table--filter-header {
|
|
70
85
|
padding-top: 0.2em;
|
|
71
86
|
}
|
|
72
|
-
.vxe-table--filter-body
|
|
73
|
-
|
|
87
|
+
.vxe-table--filter-body,
|
|
88
|
+
.vxe-table--scrollbar-filter-body {
|
|
74
89
|
padding-bottom: 0.2em;
|
|
75
90
|
}
|
|
76
|
-
|
|
91
|
+
.vxe-table--filter-header,
|
|
92
|
+
.vxe-table--filter-body {
|
|
77
93
|
list-style-type: none;
|
|
78
94
|
padding: 0;
|
|
79
95
|
margin: 0;
|
|
@@ -81,12 +97,9 @@
|
|
|
81
97
|
overflow: auto;
|
|
82
98
|
user-select: none;
|
|
83
99
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
padding: 0.25em 0.8em 0.25em 1em;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
100
|
+
.vxe-table--filter-header,
|
|
101
|
+
.vxe-table--filter-footer {
|
|
102
|
+
flex-shrink: 0;
|
|
90
103
|
}
|
|
91
104
|
.vxe-table--filter-footer {
|
|
92
105
|
border-top: 1px solid var(--vxe-ui-base-popup-border-color);
|
|
@@ -116,8 +129,6 @@
|
|
|
116
129
|
@include baseMixin.createCheckboxIcon();
|
|
117
130
|
}
|
|
118
131
|
|
|
119
|
-
|
|
120
|
-
|
|
121
132
|
.vxe-table--filter-wrapper {
|
|
122
133
|
&.size--medium {
|
|
123
134
|
font-size: var(--vxe-ui-font-size-medium);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|