index.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import {
  2. defineComponent,
  3. onMounted,
  4. ref,
  5. computed,
  6. onUnmounted,
  7. reactive
  8. } from 'vue';
  9. import styles from './index.module.less';
  10. import DirectoryList from './components/directory-main';
  11. import LessonMain from './components/lesson-main';
  12. import ResourceMain from './components/resource-main';
  13. import { useResizeObserver } from '@vueuse/core';
  14. import { onBeforeRouteLeave } from 'vue-router';
  15. import { usePrepareStore } from '/src/store/modules/prepareLessons';
  16. import { storeToRefs } from 'pinia';
  17. import LessonsGuide from '@/custom-plugins/guide-page/lessons-guide';
  18. import { eventGlobal } from '/src/utils';
  19. import { setGuidance } from '/src/custom-plugins/guide-page/api';
  20. export default defineComponent({
  21. name: 'prepare-lessons',
  22. setup() {
  23. const state = reactive({
  24. sidebarShow: false
  25. });
  26. const prepareStore = usePrepareStore();
  27. const resourceMainRef = ref();
  28. // console.log(prepareStore, 'prepareStore');
  29. const { treeList, coursewareList } = storeToRefs(prepareStore);
  30. const showGuide = computed(() => {
  31. return (
  32. treeList.value.length > 0 &&
  33. coursewareList.value.length > 0 &&
  34. isEndMounted.value
  35. );
  36. });
  37. const isEndMounted = ref(false);
  38. const directroyRef = ref();
  39. const onUpdate = async (name: string) => {
  40. if (name === 'prepare-lessons') {
  41. if (prepareStore.getTabType === 'courseware') {
  42. try {
  43. await setGuidance({
  44. guideTag: 'teacher-guideInfo',
  45. guideValue: JSON.stringify({ lessonsGuide: false })
  46. });
  47. } catch (e) {
  48. console.log(e);
  49. }
  50. }
  51. eventGlobal.emit('prepare-lessons-guide', prepareStore.getTabType);
  52. }
  53. };
  54. const onSlideChange = (val: boolean) => {
  55. console.log(val, 'val');
  56. state.sidebarShow = val;
  57. resourceMainRef.value?.resetTabPosition();
  58. };
  59. onMounted(() => {
  60. // 指引事件
  61. eventGlobal.on('teacher-guideInfo', async (name: string) =>
  62. onUpdate(name)
  63. );
  64. // 作业预设事件
  65. eventGlobal.on('teacher-slideshow', onSlideChange);
  66. // // 课件编辑事件
  67. // eventGlobal.on('courseware-slideshow', onSlideChange);
  68. });
  69. onUnmounted(() => {
  70. eventGlobal.off('teacher-guideInfo', onUpdate);
  71. eventGlobal.off('teacher-slideshow', onSlideChange);
  72. });
  73. onMounted(() => {
  74. useResizeObserver(
  75. document.querySelector('#lessons-height') as HTMLElement,
  76. (entries: any) => {
  77. const entry = entries[0];
  78. const { height } = entry.contentRect;
  79. document.documentElement.style.setProperty(
  80. '--window-page-lesson-height',
  81. height + 'px'
  82. );
  83. }
  84. );
  85. setTimeout(() => {
  86. isEndMounted.value = true;
  87. }, 300);
  88. });
  89. // 当前页面离开时
  90. onBeforeRouteLeave(() => {
  91. // 离开时恢复默认
  92. prepareStore.setTabType('courseware');
  93. prepareStore.setSelectMusicStatus(false);
  94. prepareStore.setSelectResourceStatus(false);
  95. prepareStore.setIsAddResource(false);
  96. prepareStore.setIsAddTrain(false);
  97. prepareStore.setIsEditResource(false);
  98. prepareStore.setIsEditTrain(false);
  99. sessionStorage.removeItem('prepareLessonCourseWareSubjectIsNull');
  100. });
  101. onUnmounted(() => {
  102. prepareStore.setSubjectId('');
  103. });
  104. return () => (
  105. <div
  106. class={[
  107. styles.prepareLessons,
  108. state.sidebarShow ? styles.showSideBar : styles.hideSideBar
  109. ]}
  110. id="lessons-height">
  111. {/* 左侧目录 */}
  112. <div class={styles.directoryMain} ref={directroyRef.value}>
  113. <DirectoryList />
  114. </div>
  115. {/* 中间排课 */}
  116. <div class={styles.lessonMain}>
  117. <LessonMain />
  118. </div>
  119. {/* 资源 */}
  120. <div class={[styles.resourceMain]} id="lessons-1">
  121. {state.sidebarShow && <ResourceMain ref={resourceMainRef} />}
  122. </div>
  123. {showGuide.value ? <LessonsGuide></LessonsGuide> : null}
  124. </div>
  125. );
  126. }
  127. });