index.tsx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { defineComponent, onMounted, ref, computed } 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. export default defineComponent({
  12. name: 'prepare-lessons',
  13. setup() {
  14. const prepareStore = usePrepareStore();
  15. // console.log(prepareStore, 'prepareStore');
  16. const { treeList, coursewareList } = storeToRefs(prepareStore);
  17. const showGuide = computed(() => {
  18. return (
  19. treeList.value.length > 0 &&
  20. coursewareList.value.length > 0 &&
  21. isEndMounted.value
  22. );
  23. });
  24. const isEndMounted = ref(false);
  25. const directroyRef = ref();
  26. onMounted(() => {
  27. useResizeObserver(
  28. document.querySelector('#lessons-1') as HTMLElement,
  29. (entries: any) => {
  30. const entry = entries[0];
  31. const { height } = entry.contentRect;
  32. document.documentElement.style.setProperty(
  33. '--window-page-lesson-height',
  34. height + 'px'
  35. );
  36. }
  37. );
  38. setTimeout(() => {
  39. isEndMounted.value = true;
  40. }, 300);
  41. });
  42. // 当前页面离开时
  43. onBeforeRouteLeave(() => {
  44. // 离开时恢复默认
  45. prepareStore.setTabType('courseware');
  46. prepareStore.setSelectMusicStatus(false);
  47. prepareStore.setSelectResourceStatus(false);
  48. prepareStore.setIsAddResource(false);
  49. prepareStore.setIsAddTrain(false);
  50. prepareStore.setIsEditResource(false);
  51. prepareStore.setIsEditTrain(false);
  52. prepareStore.setSubjectId('');
  53. // prepareStore.setCoursewareList([]);
  54. // prepareStore.setTreeList([]);
  55. // prepareStore.setTrainList([]);
  56. });
  57. return () => (
  58. <div class={styles.prepareLessons}>
  59. {/* 左侧目录 */}
  60. <div class={styles.directoryMain} ref={directroyRef.value}>
  61. <DirectoryList />
  62. </div>
  63. {/* 中间排课 */}
  64. <div class={styles.lessonMain}>
  65. <LessonMain />
  66. </div>
  67. {/* 资源 */}
  68. <div
  69. class={[
  70. styles.resourceMain
  71. // prepareStore.getSelectMusicStatus ||
  72. // prepareStore.getSelectResourceStatus
  73. // ? styles.resourceClose
  74. // : ''
  75. ]}
  76. id="lessons-1">
  77. <ResourceMain />
  78. </div>
  79. {showGuide.value ? <LessonsGuide></LessonsGuide> : null}
  80. </div>
  81. );
  82. }
  83. });