|
|
|
@ -53,22 +53,7 @@ export function useTableScroll( |
|
|
|
let footerEl: HTMLElement | null; |
|
|
|
let bodyEl: HTMLElement | null; |
|
|
|
|
|
|
|
async function calcTableHeight() { |
|
|
|
const { resizeHeightOffset, pagination, maxHeight, isCanResizeParent, useSearchForm } = |
|
|
|
unref(propsRef); |
|
|
|
const tableData = unref(getDataSourceRef); |
|
|
|
|
|
|
|
const table = unref(tableElRef); |
|
|
|
if (!table) return; |
|
|
|
|
|
|
|
const tableEl: Element = table.$el; |
|
|
|
if (!tableEl) return; |
|
|
|
|
|
|
|
if (!bodyEl) { |
|
|
|
bodyEl = tableEl.querySelector('.ant-table-body'); |
|
|
|
if (!bodyEl) return; |
|
|
|
} |
|
|
|
|
|
|
|
function handleScrollBar(bodyEl: HTMLElement, tableEl: Element) { |
|
|
|
const hasScrollBarY = bodyEl.scrollHeight > bodyEl.clientHeight; |
|
|
|
const hasScrollBarX = bodyEl.scrollWidth > bodyEl.clientWidth; |
|
|
|
|
|
|
|
@ -85,20 +70,10 @@ export function useTableScroll( |
|
|
|
} else { |
|
|
|
!tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.add('hide-scrollbar-x'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
bodyEl!.style.height = 'unset'; |
|
|
|
|
|
|
|
if (!unref(getCanResize) || !unref(tableData) || tableData.length === 0) return; |
|
|
|
|
|
|
|
await nextTick(); |
|
|
|
// Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight
|
|
|
|
|
|
|
|
const headEl = tableEl.querySelector('.ant-table-thead '); |
|
|
|
|
|
|
|
if (!headEl) return; |
|
|
|
|
|
|
|
// Table height from bottom height-custom offset
|
|
|
|
let paddingHeight = 32; |
|
|
|
function caclPaginationHeight(tableEl: Element): number { |
|
|
|
const { pagination } = unref(propsRef); |
|
|
|
// Pager height
|
|
|
|
let paginationHeight = 2; |
|
|
|
if (!isBoolean(pagination)) { |
|
|
|
@ -113,8 +88,12 @@ export function useTableScroll( |
|
|
|
} else { |
|
|
|
paginationHeight = -8; |
|
|
|
} |
|
|
|
return paginationHeight; |
|
|
|
} |
|
|
|
|
|
|
|
let footerHeight = 0; |
|
|
|
function caclFooterHeight(tableEl: Element): number { |
|
|
|
const { pagination } = unref(propsRef); |
|
|
|
let footerHeight = 0; |
|
|
|
if (!isBoolean(pagination)) { |
|
|
|
if (!footerEl) { |
|
|
|
footerEl = tableEl.querySelector('.ant-table-footer') as HTMLElement; |
|
|
|
@ -123,12 +102,21 @@ export function useTableScroll( |
|
|
|
footerHeight += offsetHeight || 0; |
|
|
|
} |
|
|
|
} |
|
|
|
return footerHeight; |
|
|
|
} |
|
|
|
|
|
|
|
function calcHeaderHeight(headEl: Element): number { |
|
|
|
let headerHeight = 0; |
|
|
|
if (headEl) { |
|
|
|
headerHeight = (headEl as HTMLElement).offsetHeight; |
|
|
|
} |
|
|
|
return headerHeight; |
|
|
|
} |
|
|
|
|
|
|
|
function calcBottomAndPaddingHeight(tableEl: Element, headEl: Element) { |
|
|
|
const { pagination, isCanResizeParent, useSearchForm } = unref(propsRef); |
|
|
|
// Table height from bottom height-custom offset
|
|
|
|
let paddingHeight = 30; |
|
|
|
let bottomIncludeBody = 0; |
|
|
|
if (unref(wrapRef) && isCanResizeParent) { |
|
|
|
const tablePadding = 12; |
|
|
|
@ -157,7 +145,46 @@ export function useTableScroll( |
|
|
|
// Table height from bottom
|
|
|
|
bottomIncludeBody = getViewportOffset(headEl).bottomIncludeBody; |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
paddingHeight, |
|
|
|
bottomIncludeBody, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
async function calcTableHeight() { |
|
|
|
const { resizeHeightOffset, maxHeight } = unref(propsRef); |
|
|
|
const tableData = unref(getDataSourceRef); |
|
|
|
|
|
|
|
const table = unref(tableElRef); |
|
|
|
if (!table) return; |
|
|
|
|
|
|
|
const tableEl: Element = table.$el; |
|
|
|
if (!tableEl) return; |
|
|
|
|
|
|
|
if (!bodyEl) { |
|
|
|
bodyEl = tableEl.querySelector('.ant-table-body'); |
|
|
|
if (!bodyEl) return; |
|
|
|
} |
|
|
|
|
|
|
|
handleScrollBar(bodyEl, tableEl); |
|
|
|
|
|
|
|
bodyEl!.style.height = 'unset'; |
|
|
|
|
|
|
|
if (!unref(getCanResize) || !unref(tableData) || tableData.length === 0) return; |
|
|
|
|
|
|
|
await nextTick(); |
|
|
|
// Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight
|
|
|
|
|
|
|
|
const headEl = tableEl.querySelector('.ant-table-thead '); |
|
|
|
|
|
|
|
if (!headEl) return; |
|
|
|
|
|
|
|
const paginationHeight = caclPaginationHeight(tableEl); |
|
|
|
const footerHeight = caclFooterHeight(tableEl); |
|
|
|
const headerHeight = calcHeaderHeight(headEl); |
|
|
|
const { paddingHeight, bottomIncludeBody } = calcBottomAndPaddingHeight(tableEl, headEl); |
|
|
|
|
|
|
|
let height = |
|
|
|
bottomIncludeBody - |
|
|
|
(resizeHeightOffset || 0) - |
|
|
|
@ -215,4 +242,4 @@ export function useTableScroll( |
|
|
|
}); |
|
|
|
|
|
|
|
return { getScrollRef, redoHeight }; |
|
|
|
} |
|
|
|
} |