show.tsx 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. import { defineComponent, onMounted, onUnmounted, reactive, ref, nextTick } from 'vue';
  2. import styles from './index.module.less';
  3. import { useRoute, useRouter } from 'vue-router';
  4. import { useInterval, useIntervalFn } from '@vueuse/core';
  5. import 'tcplayer.js/dist/tcplayer.css';
  6. import { _initVideo } from './initVideo'
  7. export default defineComponent({
  8. name: 'intention-questionnaire-show',
  9. setup() {
  10. // 页面定时
  11. const pageTimer = useInterval(1000, { controls: true });
  12. pageTimer.pause();
  13. const router = useRouter();
  14. const route = useRoute();
  15. const forms = reactive({
  16. loading: true,
  17. code: null,
  18. openId: '' as any,
  19. isPageHide: false,
  20. contentA:
  21. '', // 第一段
  22. contentB:
  23. '', // 第二段
  24. contentC:
  25. '',
  26. contentD:
  27. '',
  28. contentE: null as any,
  29. introductionVideo: "https://oss.dayaedu.com/ktyq/03/1742283035204.mp4",
  30. introductionVideoTime: 117,
  31. coverImg: "https://oss.dayaedu.com/ktyq/02/1739362815061.png",
  32. introductionVideo2: "https://oss.dayaedu.com/ktyq/02/1739345326291.mp4",
  33. introductionVideoTime2: 111,
  34. coverImg2: "https://oss.dayaedu.com/ktyq/02/1739324215341.png",
  35. player1: null as any,
  36. player2: null as any,
  37. player1Speed: 1,
  38. player2Speed: 1,
  39. videoLoading1: true,
  40. videoLoading2: true,
  41. meetingType: 'primarySchoolNo' as 'primarySchoolNo' | 'primarySchoolYes' | 'juniorSchoolNo' | 'juniorSchool' | any,
  42. intentionInfo: null as any,
  43. contentShow: false,
  44. });
  45. const showPopup = ref(false);
  46. const showPopupMessage = ref('');
  47. // 播放视频总时长
  48. const videoIntervalRef = useInterval(1000, { controls: true });
  49. videoIntervalRef.pause();
  50. const videoIntervalRef2 = useInterval(1000, { controls: true });
  51. videoIntervalRef2.pause();
  52. const getMessage = (ev: any) => {
  53. if (ev.data.api === 'parent-agenda') {
  54. forms.contentShow = true
  55. // console.log('消息',ev.data)
  56. forms.contentA = ev.data.message.contentA || forms.contentA
  57. forms.contentB = ev.data.message.contentB || forms.contentB
  58. forms.contentC = ev.data.message.contentC || forms.contentC
  59. forms.contentD = ev.data.message.contentD || forms.contentD
  60. forms.contentE = ev.data.message.contentE || forms.contentE || null;
  61. console.log('消息',forms.contentD)
  62. }
  63. }
  64. onMounted(async () => {
  65. forms.meetingType = route.query.type || forms.meetingType;
  66. nextTick(() => {
  67. // 是否加载完成
  68. window.parent &&
  69. window.parent.postMessage(
  70. {
  71. api: 'onLoad',
  72. status: true
  73. },
  74. '*'
  75. )
  76. // const videoRef: any = document.querySelector('#register-video')
  77. // const videoRef2: any = document.querySelector('#register-video2')
  78. // if(videoRef) {
  79. // const rect = videoRef?.getBoundingClientRect()
  80. // console.log(rect)
  81. // videoRef.style.height = rect.width / 16 * 9 + 'px'
  82. // }
  83. // if(videoRef2) {
  84. // const rect = videoRef2?.getBoundingClientRect()
  85. // console.log(rect)
  86. // videoRef2.style.height = rect.width / 16 * 9 + 'px'
  87. // }
  88. })
  89. _initVideo('one', forms, videoIntervalRef)
  90. _initVideo('two', forms, videoIntervalRef2)
  91. window.addEventListener('message', getMessage)
  92. });
  93. // const nextSkip = () => {
  94. // router.push({
  95. // path: '/fill-questionnaire',
  96. // query: {
  97. // openId: forms.openId, //
  98. // meetingType: forms.meetingType
  99. // }
  100. // });
  101. // };
  102. const onPageShow = () => {
  103. console.log(forms.isPageHide, 'showInfo');
  104. if (forms.isPageHide) {
  105. window.location.reload();
  106. }
  107. };
  108. // 处理监听页面返回不刷新的问题
  109. window.addEventListener('pageshow', onPageShow);
  110. const onPageHide = () => {
  111. console.log(forms.isPageHide, 'showInfo');
  112. forms.isPageHide = true;
  113. };
  114. window.addEventListener('pagehide', onPageHide);
  115. onUnmounted(() => {
  116. window.removeEventListener('pageshow', onPageShow);
  117. window.removeEventListener('pagehide', onPageHide);
  118. window.removeEventListener('message', getMessage)
  119. });
  120. return () => (
  121. <div class={styles['intention-page']}>
  122. <div class={[styles['content-box'], !forms.contentShow && styles.hideContent]}>
  123. <div class={styles.contentBody} v-html={forms.contentA}></div>
  124. <div class={styles.contentBody}>
  125. <div class={styles.cbTitle} style="font-size:15px;">
  126. <strong>一、数字化音乐课堂定位</strong>
  127. <p style="text-align: left; line-height: 2;">
  128. <span style="font-size:15px; color: #333;">以“科技赋能美育”为理念,通过“课堂教学+课后Ai练习”的模式,帮助学生掌握乐器技能,提高学生专注力及审美能力。</span>
  129. </p>
  130. </div>
  131. <div class={styles.videoBoxCon}>
  132. <div class={styles.videoBox}>
  133. <div class={[styles['video-content']]}>
  134. <video
  135. id="register-video"
  136. class={styles['video']}
  137. src={forms.introductionVideo}
  138. playsinline={true}
  139. poster={forms.coverImg}
  140. preload="auto"></video>
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. <div class={styles.contentBody} v-html={forms.contentB}></div>
  146. <div class={styles.contentBody}>
  147. <div v-html={forms.contentC}></div>
  148. <div class={styles.videoBoxCon}>
  149. <div class={styles.videoBox}>
  150. <div class={[styles['video-content']]}>
  151. <video
  152. id="register-video2"
  153. class={styles['video']}
  154. src={forms.introductionVideo2}
  155. playsinline={true}
  156. poster={forms.coverImg2}
  157. preload="auto"></video>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. {/* <div class={styles.contentBody} v-html={forms.contentD}></div>
  163. <div class={styles.contentBody}>
  164. <div class={styles.cbTitle}>五、什么是器乐数字 Ai<span>(详见视频介绍)</span></div>
  165. <div class={styles.videoBoxCon}>
  166. <div class={styles.videoBox}>
  167. <div class={[styles['video-content']]}>
  168. <video
  169. id="register-video2"
  170. class={styles['video']}
  171. src={forms.introductionVideo2}
  172. playsinline={true}
  173. poster={forms.coverImg2}
  174. preload="auto"></video>
  175. </div>
  176. </div>
  177. </div>
  178. </div> */}
  179. {/* <div class={styles.contentBody} v-html={forms.contentA}></div>
  180. <div class={styles.contentBody}>
  181. <div v-html={forms.contentB}></div>
  182. <div class={styles.videoBoxCon}>
  183. <div class={styles.videoBox}>
  184. <div class={[styles['video-content']]}>
  185. <video
  186. id="register-video"
  187. class={styles['video']}
  188. src={forms.introductionVideo}
  189. playsinline={true}
  190. poster={forms.coverImg}
  191. preload="auto"></video>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. <div class={styles.contentBody} v-html={forms.contentC}></div>
  197. <div class={styles.contentBody}>
  198. <div v-html={forms.contentD}></div>
  199. <div class={styles.videoBoxCon}>
  200. <div class={styles.videoBox}>
  201. <div class={[styles['video-content']]}>
  202. <video
  203. id="register-video2"
  204. class={styles['video']}
  205. src={forms.introductionVideo2}
  206. playsinline={true}
  207. poster={forms.coverImg2}
  208. preload="auto"></video>
  209. </div>
  210. </div>
  211. </div>
  212. </div> */}
  213. </div>
  214. {/* 是否在微信中打开 */}
  215. {/* <OWxTip /> */}
  216. {/* <div class={styles.bottomBtn}>
  217. <p><i>如有意参加,请点击下一步进行意见</i></p>
  218. <img class={styles.nextBtn} src={nextBtn} onClick={nextSkip} />
  219. </div> */}
  220. </div>
  221. );
  222. }
  223. });