yanzhuang
2021-08-01 d76cfd7f809ba48880c950a64cb43a5c9c44176c
fix: fix iframe heigth error (#1012)

1个文件已修改
44 ■■■■■ 已修改文件
src/views/sys/iframe/index.vue 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sys/iframe/index.vue
@@ -1,21 +1,25 @@
<template>
  <div :class="prefixCls" :style="getWrapStyle">
    <Spin :spinning="loading" size="large" :style="getWrapStyle">
      <iframe :src="frameSrc" :class="`${prefixCls}__main`" ref="frameRef"></iframe>
      <iframe
        :src="frameSrc"
        :class="`${prefixCls}__main`"
        ref="frameRef"
        @load="hideLoading"
      ></iframe>
    </Spin>
  </div>
</template>
<script lang="ts">
  import type { CSSProperties } from 'vue';
  import { defineComponent, ref, unref, onMounted, nextTick, computed } from 'vue';
  import { defineComponent, ref, unref, computed } from 'vue';
  import { Spin } from 'ant-design-vue';
  import { getViewportOffset } from '/@/utils/domUtils';
  import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
  import { propTypes } from '/@/utils/propTypes';
  import { useDesign } from '/@/hooks/web/useDesign';
  import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight';
  export default defineComponent({
    name: 'IFrame',
@@ -24,10 +28,11 @@
      frameSrc: propTypes.string.def(''),
    },
    setup() {
      const loading = ref(false);
      const loading = ref(true);
      const topRef = ref(50);
      const heightRef = ref(window.innerHeight);
      const frameRef = ref<HTMLFrameElement | null>(null);
      const frameRef = ref<HTMLFrameElement>();
      const { headerHeightRef } = useLayoutHeight();
      const { prefixCls } = useDesign('iframe-page');
      useWindowSizeFn(calcHeight, 150, { immediate: true });
@@ -43,8 +48,7 @@
        if (!iframe) {
          return;
        }
        let { top } = getViewportOffset(iframe);
        top += 20;
        const top = headerHeightRef.value;
        topRef.value = top;
        heightRef.value = window.innerHeight - top;
        const clientHeight = document.documentElement.clientHeight - top;
@@ -56,33 +60,13 @@
        calcHeight();
      }
      function init() {
        nextTick(() => {
          const iframe = unref(frameRef);
          if (!iframe) return;
          const _frame = iframe as any;
          if (_frame.attachEvent) {
            _frame.attachEvent('onload', () => {
              hideLoading();
            });
          } else {
            iframe.onload = () => {
              hideLoading();
            };
          }
        });
      }
      onMounted(() => {
        loading.value = true;
        init();
      });
      return {
        getWrapStyle,
        loading,
        frameRef,
        prefixCls,
        hideLoading,
      };
    },
  });