浏览代码

更新显示多声部问题

lex 1 年之前
父节点
当前提交
d51cbd51f2

+ 1 - 1
src/router/router-guards.ts

@@ -26,7 +26,7 @@ const isChrome = () => {
 export function createRouterGuards(router: Router) {
   const userStore = useUserStore();
   router.beforeEach(async (to, from, next) => {
-    console.log(to, '修改标题');
+    // console.log(to, '修改标题');
     // console.log('access token');
     document.title = to.meta.title ? to.meta.title : ('音乐数字课堂' as string);
     if (!isChrome()) {

+ 9 - 0
src/store/modules/prepareLessons.ts

@@ -7,6 +7,7 @@ export const usePrepareStore = defineStore('prepare-lessons-store', {
     baseCourseware: {} as any, // 基础教学课件
     selectKey: '', // 选的哪一节课
     lessonCoursewareId: '', // 哪个教材分类
+    subjectList: [] as any, // 教材带的声部列表
     lessonCoursewareDetailId: '', // 哪个教材详情
     treeList: [] as any[], // 左边教学课件列表
     coursewareList: [] as any[], // 课件信息
@@ -79,6 +80,10 @@ export const usePrepareStore = defineStore('prepare-lessons-store', {
     /** 获取是否添加训练 */
     getIsAddTrain(): boolean {
       return this.isAddTrain;
+    },
+    /** 获取声部列表 */
+    getSubjectList(): any {
+      return this.subjectList;
     }
   },
   actions: {
@@ -141,6 +146,10 @@ export const usePrepareStore = defineStore('prepare-lessons-store', {
     /** 设置训练状态 */
     setIsEditTrain(status: boolean) {
       this.iseditTrain = status;
+    },
+    /** 设置声部列表 */
+    setSubjectList(subjects: any): any {
+      this.subjectList = subjects;
     }
   }
 });

+ 18 - 3
src/views/prepare-lessons/components/directory-main/index.tsx

@@ -11,6 +11,7 @@ import TheEmpty from '/src/components/TheEmpty';
 import { usePrepareStore } from '/src/store/modules/prepareLessons';
 import { useUserStore } from '/src/store/modules/users';
 import { useRoute } from 'vue-router';
+import { eventGlobal } from '/src/utils';
 
 export default defineComponent({
   name: 'directory-main',
@@ -28,7 +29,7 @@ export default defineComponent({
       coursewareStatus: false
     });
 
-    console.log(forms.lastUseCoursewareId, 'route.query.lastUseCoursewareId');
+    // console.log(forms.lastUseCoursewareId, 'route.query.lastUseCoursewareId');
     const getLessonCourseware = async () => {
       try {
         const { data } = await lessonCoursewarePage({
@@ -51,12 +52,12 @@ export default defineComponent({
             prepareStore.setBaseCourseware(selectItem);
             id = selectItem.id;
 
-            console.log(selectItem, 'selectItem');
+            prepareStore.setSubjectList(selectItem.subjectList || []);
           } else {
             prepareStore.setBaseCourseware(result[0]);
             id = result[0]?.id;
 
-            console.log(selectItem, 'selectItem');
+            prepareStore.setSubjectList(selectItem.subjectList || []);
           }
           setLastUseCoursewareId(id);
         }
@@ -137,11 +138,25 @@ export default defineComponent({
       }
     };
 
+    const onChangeClass = async (item: any) => {
+      show.value = true;
+      forms.lastUseCoursewareId = item.lastUseCoursewareId;
+      forms.unit = item.unit;
+      await getLessonCourseware();
+      await getLessonCoursewareDetail();
+      show.value = false;
+    };
+
     onMounted(async () => {
       show.value = true;
       await getLessonCourseware();
       await getLessonCoursewareDetail();
       show.value = false;
+
+      // 切换班级时触发
+      eventGlobal.on('onChangeClass', async (item: any) => {
+        onChangeClass(item);
+      });
     });
     return () => (
       <div class={styles.directoryList}>

+ 91 - 16
src/views/prepare-lessons/components/lesson-main/courseware/index.tsx

@@ -16,13 +16,14 @@ import { usePrepareStore } from '/src/store/modules/prepareLessons';
 import { useCatchStore } from '/src/store/modules/catchData';
 import TheEmpty from '/src/components/TheEmpty';
 import {
+  courseScheduleStart,
   queryCourseware,
   saveCourseware,
   teacherKnowledgeMaterialDelete
 } from '../../../api';
 import Draggable from 'vuedraggable';
 import iconDelete from '../../../images/icon-delete.png';
-import { useRoute, useRouter } from 'vue-router';
+import { onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router';
 import deepClone from '/src/helpers/deep-clone';
 import CardPreview from '/src/components/card-preview';
 import PreviewWindow from '/src/views/preview-window';
@@ -173,10 +174,10 @@ export default defineComponent({
         forms.drag = false;
         message.success('编辑成功');
         forms.removeVisiable = false;
-        prepareStore.setCoursewareList(deepClone(forms.coursewareList));
         prepareStore.setIsEditResource(false);
         // 重置临时删除编号
         forms.removeIds = [];
+        await getList();
       } catch {
         //
       }
@@ -253,21 +254,49 @@ export default defineComponent({
       }
     };
 
-    onMounted(async () => {
-      // 获取教材分类列表
-      await catchStore.getSubjects();
+    watch(
+      () => prepareStore.getSubjectList,
+      () => {
+        checkSubjectIds();
+      }
+    );
 
-      const subjectList = catchStore.getSubjectList;
+    const checkSubjectIds = () => {
+      const subjectList = prepareStore.getSubjectList;
+      // console.log(subjectList, 'subjectList');
       // 并且没有声部时才会更新
       if (subjectList.length > 0) {
         // 判断浏览器上面是否有
-        if (forms.subjectId) {
+        const index = subjectList.findIndex(
+          (subject: any) => subject.id == forms.subjectId
+        );
+        // 并且声部在列表中
+        if (forms.subjectId && index >= 0) {
           prepareStore.setSubjectId(forms.subjectId);
         } else if (!prepareStore.getSubjectId) {
           // 判断是否有缓存
           prepareStore.setSubjectId(subjectList[0].id);
         }
       }
+    };
+
+    watch(
+      () => route.query,
+      async () => {
+        forms.className = route.query.name as any;
+        forms.classGroupId = route.query.classGroupId as any;
+        forms.subjectId = route.query.subjectId
+          ? Number(route.query.subjectId)
+          : null;
+
+        checkSubjectIds();
+        await getList();
+      }
+    );
+
+    onMounted(async () => {
+      // 获取教材分类列表
+      checkSubjectIds();
 
       await getList();
 
@@ -300,6 +329,7 @@ export default defineComponent({
                 type="error"
                 onClick={() => {
                   forms.drag = false;
+                  forms.isEdit = false;
                   prepareStore.setIsEditResource(false);
                   forms.removeIds = [];
                   getList();
@@ -310,6 +340,7 @@ export default defineComponent({
                 type="error"
                 onClick={() => {
                   forms.removeVisiable1 = true;
+                  forms.isEdit = true;
                 }}>
                 清空资源
               </NButton>
@@ -342,7 +373,7 @@ export default defineComponent({
                 <NSelect
                   placeholder="选择声部"
                   class={styles.btnSubjectList}
-                  options={catchStore.getSubjectList}
+                  options={prepareStore.getSubjectList}
                   labelField="name"
                   valueField="id"
                   value={prepareStore.getSubjectId}
@@ -426,7 +457,7 @@ export default defineComponent({
                     </Draggable>
                   ) : (
                     <div class={styles.list}>
-                      {forms.coursewareList.map((item: any, index: number) => (
+                      {forms.coursewareList.map((item: any) => (
                         <CardType
                           class={[styles.itemContent, 'handle']}
                           isShowCollect={false}
@@ -462,7 +493,7 @@ export default defineComponent({
               {...{ id: 'lessons-3' }}
               type="primary"
               class={styles.btnClassStart}
-              onClick={() => {
+              onClick={async () => {
                 let count = 0;
                 forms.coursewareList.forEach((item: any) => {
                   if (!item.removeFlag) {
@@ -473,8 +504,40 @@ export default defineComponent({
                   message.error('课件不能为空');
                   return;
                 }
-                forms.showAttendClass = true;
-                forms.attendClassType = 'select';
+
+                if (forms.classGroupId) {
+                  // 开始上课
+                  await courseScheduleStart({
+                    lessonCoursewareKnowledgeDetailId: prepareStore.selectKey,
+                    classGroupId: forms.classGroupId
+                  });
+                  if (window.matchMedia('(display-mode: standalone)').matches) {
+                    state.application = window.matchMedia(
+                      '(display-mode: standalone)'
+                    ).matches;
+                    forms.previewModal = true;
+                    forms.previewParams = {
+                      type: 'class',
+                      classGroupId: forms.classGroupId,
+                      subjectId: prepareStore.getSubjectId,
+                      detailId: prepareStore.getSelectKey
+                    };
+                  } else {
+                    const { href } = router.resolve({
+                      path: '/attend-class',
+                      query: {
+                        type: 'class',
+                        classGroupId: forms.classGroupId,
+                        subjectId: prepareStore.getSubjectId,
+                        detailId: prepareStore.getSelectKey
+                      }
+                    });
+                    window.open(href, +new Date() + '');
+                  }
+                } else {
+                  forms.showAttendClass = true;
+                  forms.attendClassType = 'select';
+                }
               }}>
               开始上课
             </NButton>
@@ -514,7 +577,15 @@ export default defineComponent({
               console.log(item, 'confirm');
               forms.className = item.name;
               forms.classGroupId = item.classGroupId;
+              forms.subjectId = item.subjectId;
               forms.showAttendClass = false;
+
+              checkSubjectIds();
+              // 声部切换时
+              eventGlobal.emit('onChangeClass', {
+                lastUseCoursewareId: item.lastUseCoursewareId,
+                unit: item.unit
+              });
             }}
           />
         </NModal>
@@ -590,11 +661,15 @@ export default defineComponent({
           <SubjectSync
             subjectId={prepareStore.getSubjectId as any}
             onClose={() => (forms.subjectSyncVisiable = false)}
-            onConfirm={(subjectIds: any) => {
+            onConfirm={async (subjectIds: any) => {
               //
-              console.log(subjectIds, 'subjectIds');
-              forms.editSubjectIds = subjectIds.join(',');
-              onOverEdit();
+              try {
+                forms.editSubjectIds = subjectIds.join(',');
+                await onOverEdit();
+                forms.subjectSyncVisiable = false;
+              } catch {
+                //
+              }
             }}
           />
         </NModal>

+ 1 - 1
src/views/prepare-lessons/components/resource-main/components/resource-item/index.tsx

@@ -150,7 +150,7 @@ export default defineComponent({
         //   });
         // });
         eventGlobal.emit('onPrepareAddItem', {
-          materialId: item.materialId,
+          materialId: item.id,
           coverImg: item.coverImg,
           type: item.type,
           title: item.title,

+ 9 - 6
src/views/prepare-lessons/index.tsx

@@ -13,12 +13,16 @@ export default defineComponent({
   setup() {
     const prepareStore = usePrepareStore();
 
-    console.log(prepareStore, 'prepareStore');
+    // console.log(prepareStore, 'prepareStore');
     const { treeList, coursewareList } = storeToRefs(prepareStore);
     const showGuide = computed(() => {
-      return treeList.value.length > 0 && coursewareList.value.length > 0 && isEndMounted.value;
+      return (
+        treeList.value.length > 0 &&
+        coursewareList.value.length > 0 &&
+        isEndMounted.value
+      );
     });
-    const isEndMounted = ref(false)
+    const isEndMounted = ref(false);
     const directroyRef = ref();
     onMounted(() => {
       useResizeObserver(
@@ -33,9 +37,8 @@ export default defineComponent({
         }
       );
       setTimeout(() => {
-        isEndMounted.value = true
-      }, 300)
-
+        isEndMounted.value = true;
+      }, 300);
     });
 
     // 当前页面离开时

+ 1 - 1
src/views/prepare-lessons/model/select-resources/select-item/index.tsx

@@ -148,7 +148,7 @@ export default defineComponent({
         // message.success('添加成功');
         // prepareStore.setIsAddResource(true);
         eventGlobal.emit('onPrepareAddItem', {
-          materialId: item.materialId,
+          materialId: item.id,
           coverImg: item.coverImg,
           type: item.type,
           title: item.title,

+ 0 - 1
src/views/preview-window/index.tsx

@@ -22,7 +22,6 @@ export default defineComponent({
   emit: ['update:show'],
   setup(props, { emit }) {
     const { show, type, params } = toRefs(props);
-    console.log(type.value, 'type');
     watch(
       () => props.show,
       () => {