index.tsx 3.6 KB

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