index.tsx 4.8 KB

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