show.tsx 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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: '<p style="text-align: left; font-size:13px;"><strong style="font-size:15px;">尊敬的家长: 您好!</strong></p><p style="text-align: left;">非常感谢您一直以来对学校工作给予的大力支持与密切关注。为深入贯彻教育部《关于全面实施学校美育浸润行动的通知》(教体艺〔2023〕5 号)文件精神,积极顺应艺术素质测评结果纳入中考的教育改革趋势,致力于让学生在在校期间熟练掌握 1 - 2 项艺术专长,全面提升学生的艺术素养。</p><p style="text-align: left;">我校计划在北京知勉公益基金会的支持下,启动音乐(器乐)课堂数字化转型工作。为了确保此项工作顺利开展,现向您详细介绍相关情况,并诚恳征询您的宝贵意见,学校将根据您的意见反馈决定开展与否。</p>', // 第一段
  21. contentB: '<p style="text-align: left;"><strong style="font-size:15px; color: #0B8BFE;">二、为什么要开展数字化转型</strong></p><p style="text-align: left;">1.解决学习难题:数字化转型将为乐器学习和练习制定明确标准,学生能实时知晓练习的对错,练习结果也可量化呈现,有效解决学生不会练、家长无法辅导的困扰。</p><p style="text-align: left;">2.适应教改趋势:随着教育改革的推进,艺术素质测评结果已逐步纳入中考,数字化转型将助力学生更好地适应这一变化,提升综合素养。</p><p style="text-align: left;">3.关注身心健康:乐器学习能成为学生缓解学习压力的有效途径,有助于学生保持身心健康,实现全面发展。</p><p style="text-align: left;"><br></p>', // 第二段
  22. contentC: '<p style="text-align: left;"><strong style="font-size:15px; color: #0B8BFE;">三、开展原则</strong></p><p style="text-align: left;">本次活动面向全体学生,完全遵循学生自愿参加的原则。</p><p style="text-align: left;">1.若学生选择参加转型,家长需自行为学生准备好自用的乐器(硬件)和“器乐数字 Ai”应用(软件,用于联通学校音乐课堂)两项学习工具。</p><p style="text-align: left;">2.若学生不参加转型,可继续按原有方式进行音乐课学习。</p>',
  23. contentD: '<p style="text-align: left;"><strong style="font-size:15px; color: #0B8BFE;">五、事项说明</strong></p><p style="text-align: left;">1.学校不涉及任何费用收取。学生所需的自用工具在市面上均可购买到,家长可自行根据实际情况为学生准备。</p><p style="text-align: left;">2.如学生有参加数字化转型的意愿,但存在特殊或特困情况,可先向学校进行登记,学校将尽力寻求资源协助家长解决。</p><p style="text-align: left;">如有意参加,请点击下一步进行互通互联登记:</p>',
  24. introductionVideo: "https://oss.dayaedu.com/ktyq/03/1742283035204.mp4",
  25. introductionVideoTime: 117,
  26. coverImg: "https://oss.dayaedu.com/ktyq/02/1739362815061.png",
  27. introductionVideo2: "https://oss.dayaedu.com/ktyq/02/1739345326291.mp4",
  28. introductionVideoTime2: 111,
  29. coverImg2: "https://oss.dayaedu.com/ktyq/02/1739324215341.png",
  30. player1: null as any,
  31. player2: null as any,
  32. player1Speed: 1,
  33. player2Speed: 1,
  34. videoLoading1: true,
  35. videoLoading2: true,
  36. meetingType: 'primarySchoolNo' as 'primarySchoolNo' | 'primarySchoolYes' | 'juniorSchoolNo' | 'juniorSchool' | any,
  37. intentionInfo: null as any,
  38. contentShow: false,
  39. });
  40. const showPopup = ref(false);
  41. const showPopupMessage = ref('');
  42. // 播放视频总时长
  43. const videoIntervalRef = useInterval(1000, { controls: true });
  44. videoIntervalRef.pause();
  45. const videoIntervalRef2 = useInterval(1000, { controls: true });
  46. videoIntervalRef2.pause();
  47. const getMessage = (ev: any) => {
  48. if (ev.data.api === 'parent-agenda') {
  49. forms.contentShow = true
  50. // console.log('消息',ev.data)
  51. forms.contentA = ev.data.message.contentA || forms.contentA
  52. forms.contentB = ev.data.message.contentB || forms.contentB
  53. forms.contentC = ev.data.message.contentC || forms.contentC
  54. forms.contentD = ev.data.message.contentD || forms.contentD
  55. console.log('消息',forms.contentD)
  56. }
  57. }
  58. onMounted(async () => {
  59. forms.meetingType = route.query.type || forms.meetingType;
  60. nextTick(() => {
  61. // 是否加载完成
  62. window.parent &&
  63. window.parent.postMessage(
  64. {
  65. api: 'onLoad',
  66. status: true
  67. },
  68. '*'
  69. )
  70. // const videoRef: any = document.querySelector('#register-video')
  71. // const videoRef2: any = document.querySelector('#register-video2')
  72. // if(videoRef) {
  73. // const rect = videoRef?.getBoundingClientRect()
  74. // console.log(rect)
  75. // videoRef.style.height = rect.width / 16 * 9 + 'px'
  76. // }
  77. // if(videoRef2) {
  78. // const rect = videoRef2?.getBoundingClientRect()
  79. // console.log(rect)
  80. // videoRef2.style.height = rect.width / 16 * 9 + 'px'
  81. // }
  82. })
  83. _initVideo('one', forms, videoIntervalRef)
  84. _initVideo('two', forms, videoIntervalRef2)
  85. window.addEventListener('message', getMessage)
  86. });
  87. // const nextSkip = () => {
  88. // router.push({
  89. // path: '/fill-questionnaire',
  90. // query: {
  91. // openId: forms.openId, //
  92. // meetingType: forms.meetingType
  93. // }
  94. // });
  95. // };
  96. const onPageShow = () => {
  97. console.log(forms.isPageHide, 'showInfo');
  98. if (forms.isPageHide) {
  99. window.location.reload();
  100. }
  101. };
  102. // 处理监听页面返回不刷新的问题
  103. window.addEventListener('pageshow', onPageShow);
  104. const onPageHide = () => {
  105. console.log(forms.isPageHide, 'showInfo');
  106. forms.isPageHide = true;
  107. };
  108. window.addEventListener('pagehide', onPageHide);
  109. onUnmounted(() => {
  110. window.removeEventListener('pageshow', onPageShow);
  111. window.removeEventListener('pagehide', onPageHide);
  112. window.removeEventListener('message', getMessage)
  113. });
  114. return () => (
  115. <div class={styles['intention-page']}>
  116. <div class={[styles['content-box'], !forms.contentShow && styles.hideContent]}>
  117. <div class={styles.contentBody} v-html={forms.contentA}></div>
  118. <div class={styles.contentBody}>
  119. <div class={styles.cbTitle}>一、什么是音乐(器乐)课堂数字化转型<span>(详见视频介绍)</span></div>
  120. <div class={styles.videoBoxCon}>
  121. <div class={styles.videoBox}>
  122. <div class={[styles['video-content']]}>
  123. <video
  124. id="register-video"
  125. class={styles['video']}
  126. src={forms.introductionVideo}
  127. playsinline={true}
  128. poster={forms.coverImg}
  129. preload="auto"></video>
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. <div class={styles.contentBody} v-html={forms.contentB}></div>
  135. <div class={styles.contentBody} v-html={forms.contentC}></div>
  136. <div class={styles.contentBody} v-html={forms.contentD}></div>
  137. <div class={styles.contentBody}>
  138. <div class={styles.cbTitle}>五、什么是器乐数字 Ai<span>(详见视频介绍)</span></div>
  139. <div class={styles.videoBoxCon}>
  140. <div class={styles.videoBox}>
  141. <div class={[styles['video-content']]}>
  142. <video
  143. id="register-video2"
  144. class={styles['video']}
  145. src={forms.introductionVideo2}
  146. playsinline={true}
  147. poster={forms.coverImg2}
  148. preload="auto"></video>
  149. </div>
  150. </div>
  151. </div>
  152. </div>
  153. </div>
  154. {/* 是否在微信中打开 */}
  155. {/* <OWxTip /> */}
  156. {/* <div class={styles.bottomBtn}>
  157. <p><i>如有意参加,请点击下一步进行意见</i></p>
  158. <img class={styles.nextBtn} src={nextBtn} onClick={nextSkip} />
  159. </div> */}
  160. </div>
  161. );
  162. }
  163. });