import { PropType, defineComponent, onMounted, onUnmounted, ref, toRefs, watch } from 'vue'; import styles from './index.module.less'; import { NModal } from 'naive-ui'; import AttendClass from '../attend-class'; export default defineComponent({ name: 'preview-window', props: { show: { type: Boolean, default: false }, type: { type: String, default: '' }, params: { type: Object as PropType, default: () => ({}) } }, emit: ['update:show'], setup(props, { emit }) { const { show, type, params } = toRefs(props); watch( () => props.show, () => { show.value = props.show; } ); watch( () => props.type, () => { type.value = props.type; } ); watch( () => props.params, () => { params.value = props.params; } ); const handleOpen = (e: MessageEvent) => { if (e.data.api === 'iframe_exit') { emit('update:show', false); } }; onMounted(() => { window.addEventListener('message', handleOpen); }); onUnmounted(() => { window.removeEventListener('message', handleOpen); }); return () => ( <> { emit('update:show', show.value); }} class={styles.previewWindow} showIcon={false} displayDirective="show"> <> {show.value ? ( type.value == 'attend' ? ( emit('update:show', false)} /> ) : type.value == 'notation' ? ( ) : type.value == 'music' ? ( ) : ( '' ) ) : ( '' )} ); } });