| | |
| | | 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; |
| | | |
| | |
| | | } 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)) { |
| | |
| | | } 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; |
| | |
| | | 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; |
| | |
| | | // 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) - |
| | |
| | | }); |
| | | |
| | | return { getScrollRef, redoHeight }; |
| | | } |
| | | } |