From 6cc2d85787171281c269f4a6c3290b4a0762bcb6 Mon Sep 17 00:00:00 2001 From: YangYuGang <1378265336@qq.com> Date: 星期三, 05 三月 2025 16:21:43 +0800 Subject: [PATCH] 生产工具 --- src/views/sys/iframe/index.vue | 38 ++++++++++++++++++++++++++++++++++---- 1 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/views/sys/iframe/index.vue b/src/views/sys/iframe/index.vue index ebf9fc4..7ada92e 100644 --- a/src/views/sys/iframe/index.vue +++ b/src/views/sys/iframe/index.vue @@ -12,13 +12,14 @@ </template> <script lang="ts" setup> import type { CSSProperties } from 'vue'; - import { ref, unref, computed } from 'vue'; + import { ref, unref, computed, onMounted, onUnmounted } from 'vue'; import { Spin } from 'ant-design-vue'; import { useWindowSizeFn } from '@vben/hooks'; - import { propTypes } from '/@/utils/propTypes'; - import { useDesign } from '/@/hooks/web/useDesign'; - import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight'; + import { propTypes } from '@/utils/propTypes'; + import { useDesign } from '@/hooks/web/useDesign'; + import { useLayoutHeight } from '@/layouts/default/content/useContentViewHeight'; + const emit = defineEmits(['message']); defineProps({ frameSrc: propTypes.string.def(''), }); @@ -54,6 +55,34 @@ loading.value = false; calcHeight(); } + + const messageHandler = (e: MessageEvent) => { + emit('message', e.data); + }; + + const postMessage = (message: any, tragetOrigin: string, transfer?: Transferable[]) => { + const iframe = unref(frameRef); + if (!iframe) return; + iframe.contentWindow?.postMessage(message, tragetOrigin, transfer); + }; + + const reload = () => { + loading.value = true; + const iframe = frameRef.value; + if (!iframe) return; + iframe.contentWindow?.location.reload(); + loading.value = false; + }; + + onMounted(() => { + window.addEventListener('message', messageHandler); + }); + + onUnmounted(() => { + window.removeEventListener('message', messageHandler); + }); + + defineExpose({ postMessage, reload }); </script> <style lang="less" scoped> @prefix-cls: ~'@{namespace}-iframe-page'; @@ -79,6 +108,7 @@ } &__main { + display: block; box-sizing: border-box; width: 100%; height: 100%; -- Gitblit v1.9.3