index.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { defineComponent, reactive } from 'vue';
  2. import styles from './index.module.less';
  3. import { NTabPane, NTabs } from 'naive-ui';
  4. import Courseware from './courseware';
  5. import Train from './train';
  6. import { usePrepareStore } from '/src/store/modules/prepareLessons';
  7. import TrainPresets from './train-presets';
  8. import { eventGlobal } from '/src/utils';
  9. export default defineComponent({
  10. name: 'lesson-main',
  11. setup() {
  12. const prepareStore = usePrepareStore();
  13. const state = reactive({
  14. editWorkShow: false // 是否编辑预设
  15. });
  16. return () => (
  17. <div class={styles['lesson-main']}>
  18. <NTabs
  19. defaultValue="courseware"
  20. paneClass={styles.paneTitle}
  21. justifyContent="center"
  22. paneWrapperClass={styles.paneWrapperContainer}
  23. value={prepareStore.getTabType}
  24. onUpdate:value={(val: string) => {
  25. prepareStore.setTabType(val);
  26. // 重置编辑状态
  27. prepareStore.setIsEditResource(false);
  28. prepareStore.setIsEditTrain(false);
  29. eventGlobal.emit(
  30. 'teacher-slideshow',
  31. val === 'train' ? false : true
  32. );
  33. if (val !== 'train') {
  34. state.editWorkShow = false;
  35. }
  36. }}>
  37. <NTabPane name="courseware" tab="课件" displayDirective="show">
  38. <Courseware />
  39. </NTabPane>
  40. <NTabPane
  41. name="train"
  42. tab="作业"
  43. displayDirective="if"
  44. v-slots={{ tab: () => <span id="lessons-4">作业</span> }}
  45. {...{ id: 'lessons-4' }}>
  46. <div>
  47. {state.editWorkShow ? (
  48. <Train
  49. onChange={(val: any) => {
  50. state.editWorkShow = val.status;
  51. if (!val.status) {
  52. eventGlobal.emit('teacher-slideshow', false);
  53. }
  54. }}
  55. />
  56. ) : (
  57. <TrainPresets
  58. onChange={(val: any) => (state.editWorkShow = val.status)}
  59. />
  60. )}
  61. </div>
  62. </NTabPane>
  63. </NTabs>
  64. </div>
  65. );
  66. }
  67. });