index.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import { defineComponent, onMounted, onUnmounted, reactive, ref } from 'vue';
  2. import { useUserStore } from '/src/store/modules/users';
  3. import styles from './index.module.less';
  4. import { state } from '/src/state';
  5. import { NButton, NModal, NSpace, NSpin } from 'naive-ui';
  6. import { exitFullscreen } from '/src/utils';
  7. import { useRouter } from 'vue-router';
  8. export default defineComponent({
  9. name: 'notation-a',
  10. setup() {
  11. const router = useRouter();
  12. const show = ref(false);
  13. const previewModal = ref(false);
  14. const previewParams = ref({} as any);
  15. const removeVisiable = ref(false);
  16. const userStore = useUserStore();
  17. const Authorization = userStore.getToken || '';
  18. const iframeRef = ref();
  19. console.log(Authorization);
  20. const notationOpenCreate = sessionStorage.getItem('notation-open-create');
  21. const openCreateUrl = notationOpenCreate == '1' ? '&addShow=1' : '';
  22. sessionStorage.removeItem('notation-open-create');
  23. const data = reactive({
  24. src: `${
  25. /(192|localhost)/.test(location.origin)
  26. ? // ?
  27. 'https://test.lexiaoya.cn'
  28. : // 'http://localhost:3050'
  29. location.origin
  30. }/notation/#/create?Authorization=${Authorization}${openCreateUrl}`
  31. // src: `http://localhost:3050/#/create?Authorization=${Authorization}`
  32. });
  33. const fscreen = () => {
  34. const el = document.documentElement as any;
  35. //进入全屏
  36. (el.requestFullscreen && el.requestFullscreen()) ||
  37. (el.mozRequestFullScreen && el.mozRequestFullScreen()) ||
  38. (el.webkitRequestFullscreen && el.webkitRequestFullscreen()) ||
  39. (el.msRequestFullscreen && el.msRequestFullscreen());
  40. };
  41. const handleOpen = (e: MessageEvent) => {
  42. console.log(e.data, 'data');
  43. if (e.data.api === 'notation_open') {
  44. if (state.application) {
  45. show.value = true;
  46. previewModal.value = true;
  47. previewParams.value = {
  48. url: e.data.url
  49. };
  50. fscreen();
  51. } else {
  52. window.open(e.data.url);
  53. }
  54. } else if (e.data.api === 'notation_exit') {
  55. console.log('进来');
  56. removeVisiable.value = true;
  57. }
  58. };
  59. onMounted(() => {
  60. window.addEventListener('message', handleOpen);
  61. });
  62. onUnmounted(() => {
  63. window.removeEventListener('message', handleOpen);
  64. });
  65. return () => (
  66. <div class={styles.wrap}>
  67. <iframe ref={iframeRef} src={data.src}></iframe>
  68. <NModal
  69. v-model:show={previewModal.value}
  70. class={styles.previewWindow}
  71. showIcon={false}
  72. displayDirective="show">
  73. <NSpin show={show.value} style="--n-opacity-spinning: 1;">
  74. <iframe
  75. class={styles.previewIframe}
  76. onLoad={() => {
  77. show.value = false;
  78. }}
  79. frameborder="0"
  80. src={previewParams.value.url}></iframe>
  81. </NSpin>
  82. </NModal>
  83. <NModal
  84. v-model:show={removeVisiable.value}
  85. preset="card"
  86. class={['modalTitle', styles.removeVisiable]}
  87. title={'退出制谱'}>
  88. <div class={styles.studentRemove}>
  89. <p>是否退出制谱功能?</p>
  90. <NSpace class={styles.btnGroupModal} justify="center">
  91. <NButton
  92. round
  93. type="primary"
  94. onClick={() => {
  95. previewModal.value = false;
  96. previewParams.value.url = '';
  97. removeVisiable.value = false;
  98. // 给制谱发消息
  99. iframeRef.value.contentWindow.postMessage(
  100. {
  101. api: 'reload'
  102. },
  103. '*'
  104. );
  105. if (state.application) {
  106. document.exitFullscreen
  107. ? document.exitFullscreen()
  108. : document.mozCancelFullScreen
  109. ? document.mozCancelFullScreen()
  110. : document.webkitExitFullscreen
  111. ? document.webkitExitFullscreen()
  112. : '';
  113. }
  114. }}>
  115. 确定
  116. </NButton>
  117. <NButton round onClick={() => (removeVisiable.value = false)}>
  118. 取消
  119. </NButton>
  120. </NSpace>
  121. </div>
  122. </NModal>
  123. </div>
  124. );
  125. }
  126. });