Ben Lin
2024-06-25 f73947395184fd635df3d74c1c4b2701d0c708c1
src/hooks/web/useContentHeight.ts
@@ -1,8 +1,8 @@
import { ComputedRef, isRef, nextTick, Ref, ref, unref, watch } from 'vue';
import { useLayoutHeight } from '@/layouts/default/content/useContentViewHeight';
import { getViewportOffset } from '@/utils/domUtils';
import { isNumber, isString } from '@/utils/is';
import { onMountedOrActivated, useWindowSizeFn } from '@vben/hooks';
import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight';
import { getViewportOffset } from '/@/utils/domUtils';
import { isNumber, isString } from '/@/utils/is';
import { ComputedRef, isRef, nextTick, Ref, ref, unref, watch } from 'vue';
export interface CompensationHeight {
  // 使用 layout Footer 高度作为判断补偿高度的条件
@@ -20,7 +20,7 @@
 * @param flag 用于开启计算的响应式标识
 * @param anchorRef 锚点组件 Ref<ElRef | ComponentRef>
 * @param subtractHeightRefs 待减去高度的组件列表 Ref<ElRef | ComponentRef>
 * @param substractSpaceRefs 待减去空闲空间(margins/paddings)的组件列表 Ref<ElRef | ComponentRef>
 * @param subtractSpaceRefs 待减去空闲空间(margins/paddings)的组件列表 Ref<ElRef | ComponentRef>
 * @param offsetHeightRef 计算偏移的响应式高度,计算高度时将直接减去此值
 * @param upwardSpace 向上递归减去空闲空间的 层级 或 直到指定class为止 数值为2代表向上递归两次|数值为ant-layout表示向上递归直到碰见.ant-layout为止
 * @returns 响应式高度
@@ -29,7 +29,7 @@
  flag: ComputedRef<Boolean>,
  anchorRef: Ref,
  subtractHeightRefs: Ref[],
  substractSpaceRefs: Ref[],
  subtractSpaceRefs: Ref[],
  upwardSpace: Ref<Upward> | ComputedRef<Upward> | Upward = 0,
  offsetHeightRef: Ref<number> = ref(0),
) {
@@ -100,16 +100,16 @@
    }
    const { bottomIncludeBody } = getViewportOffset(anchorEl);
    // substract elements height
    let substractHeight = 0;
    // subtract elements height
    let subtractHeight = 0;
    subtractHeightRefs.forEach((item) => {
      substractHeight += getEl(unref(item))?.offsetHeight ?? 0;
      subtractHeight += getEl(unref(item))?.offsetHeight ?? 0;
    });
    // subtract margins / paddings
    let substractSpaceHeight = calcSubtractSpace(anchorEl) ?? 0;
    substractSpaceRefs.forEach((item) => {
      substractSpaceHeight += calcSubtractSpace(getEl(unref(item)));
    let subtractSpaceHeight = calcSubtractSpace(anchorEl) ?? 0;
    subtractSpaceRefs.forEach((item) => {
      subtractSpaceHeight += calcSubtractSpace(getEl(unref(item)));
    });
    // upwardSpace
@@ -144,8 +144,8 @@
      bottomIncludeBody -
      unref(layoutFooterHeightRef) -
      unref(offsetHeightRef) -
      substractHeight -
      substractSpaceHeight -
      subtractHeight -
      subtractSpaceHeight -
      upwardSpaceHeight;
    // compensation height