44 clsName ,
55 getNotFixedTotalWidthByColumnKey ,
66} from "./util" ;
7- import { getValByUnit , isFunction } from "../../src/utils/index.js" ;
7+ import { getValByUnit , isFunction , isNumber } from "../../src/utils/index.js" ;
88import emitter from "../../src/mixins/emitter" ;
99import { COMPS_NAME , EMIT_EVENTS , COMPS_CUSTOM_ATTRS } from "./util/constant" ;
1010import Colgroup from "./colgroup" ;
@@ -216,6 +216,8 @@ export default {
216216 rowKey : "" ,
217217 columnKey : "" ,
218218 } ,
219+ // table offest height
220+ tableOffestHeight : 0 ,
219221 } ;
220222 } ,
221223
@@ -242,14 +244,16 @@ export default {
242244 isVirtualScroll,
243245 virtualScrollOption,
244246 defaultVirtualScrollMinRowHeight,
247+ tableOffestHeight,
245248 } = this ;
246249
247- if ( isVirtualScroll && this . maxHeight ) {
248- const minRowHeight =
249- typeof virtualScrollOption . minRowHeight === "number"
250- ? virtualScrollOption . minRowHeight
251- : defaultVirtualScrollMinRowHeight ;
252- result = Math . ceil ( this . maxHeight / minRowHeight ) ;
250+ if ( isVirtualScroll && tableOffestHeight ) {
251+ const minRowHeight = isNumber ( virtualScrollOption . minRowHeight )
252+ ? virtualScrollOption . minRowHeight
253+ : defaultVirtualScrollMinRowHeight ;
254+
255+ // 修复当动态高度 max-height="calc(100vh - 210px)" 时无法计算的问题
256+ result = Math . ceil ( tableOffestHeight / minRowHeight ) ;
253257 }
254258 return result ;
255259 } ,
@@ -264,10 +268,9 @@ export default {
264268 defaultVirtualScrollBufferScale,
265269 } = this ;
266270 if ( isVirtualScroll ) {
267- const bufferScale =
268- typeof virtualScrollOption . bufferScale === "number"
269- ? virtualScrollOption . bufferScale
270- : defaultVirtualScrollBufferScale ;
271+ const bufferScale = isNumber ( virtualScrollOption . bufferScale )
272+ ? virtualScrollOption . bufferScale
273+ : defaultVirtualScrollBufferScale ;
271274
272275 result = Math . min (
273276 virtualScrollStartIndex ,
@@ -289,10 +292,9 @@ export default {
289292 defaultVirtualScrollBufferScale,
290293 } = this ;
291294 if ( isVirtualScroll ) {
292- const bufferScale =
293- typeof virtualScrollOption . bufferScale === "number"
294- ? virtualScrollOption . bufferScale
295- : defaultVirtualScrollBufferScale ;
295+ const bufferScale = isNumber ( virtualScrollOption . bufferScale )
296+ ? virtualScrollOption . bufferScale
297+ : defaultVirtualScrollBufferScale ;
296298
297299 result = Math . min (
298300 cloneTableData . length - virtualScrollEndIndex ,
@@ -810,10 +812,9 @@ export default {
810812 defaultVirtualScrollMinRowHeight,
811813 } = this ;
812814
813- const minRowHeight =
814- typeof virtualScrollOption . minRowHeight === "number"
815- ? virtualScrollOption . minRowHeight
816- : defaultVirtualScrollMinRowHeight ;
815+ const minRowHeight = isNumber ( virtualScrollOption . minRowHeight )
816+ ? virtualScrollOption . minRowHeight
817+ : defaultVirtualScrollMinRowHeight ;
817818
818819 this . virtualScrollPositions = cloneTableData . map (
819820 ( item , index ) => ( {
@@ -1144,8 +1145,21 @@ export default {
11441145 ] ,
11451146 } ;
11461147
1148+ // wrapper container props
1149+ const wrapperContainerProps = {
1150+ class : "ve-table" ,
1151+ props : {
1152+ tagName : "div" ,
1153+ } ,
1154+ on : {
1155+ "on-dom-resize-change" : ( { height } ) => {
1156+ this . tableOffestHeight = height ;
1157+ } ,
1158+ } ,
1159+ } ;
1160+
11471161 return (
1148- < div class = "ve-table" >
1162+ < VueDomResizeObserver { ... wrapperContainerProps } >
11491163 < div { ...containerProps } >
11501164 { /* virtual view phantom */ }
11511165 { this . getVirtualViewPhantom ( ) }
@@ -1164,7 +1178,7 @@ export default {
11641178 < Footer { ...footerProps } />
11651179 </ table >
11661180 </ div >
1167- </ div >
1181+ </ VueDomResizeObserver >
11681182 ) ;
11691183 } ,
11701184} ;
0 commit comments