Просмотр исходного кода

Merge branch 'iteration-select-courseware' into staging

lex-xin 1 год назад
Родитель
Сommit
1c6a050452

+ 16 - 4
src/api/cloudTextbooks.api.ts

@@ -59,10 +59,16 @@ export const getMyCourseware_gyt = () => {
 }
 
 // 课程详情列表
-export const getMyCoursewareDetail_gyt = (id: string) => {
+export const getMyCoursewareDetail_gyt = (params: {
+   id: string
+   data: { search?: string; detailFlag?: string }
+   abortController: AbortController
+}) => {
    return httpAxios_gyt.axioseRquest({
+      signal: params.abortController.signal,
       method: "post",
-      url: "/api-teacher/courseSchedule/myCoursewareDetail/" + id
+      url: `/api-teacher/courseSchedule/myCoursewareDetail/${params.id}`,
+      params: params.data
    })
 }
 
@@ -111,10 +117,16 @@ export const queryLessonCourseware_klx = (type: string, albumId: string, abortCo
 }
 
 // 课程详情列表
-export const getLessonCoursewareCourseList_klx = (id: string) => {
+export const getLessonCoursewareCourseList_klx = (params: {
+   id: string
+   data: { search?: string; detailFlag?: string }
+   abortController: AbortController
+}) => {
    return httpAxios_klx.axioseRquest({
+      signal: params.abortController.signal,
       method: "get",
-      url: "/api-teacher/tenantAlbumMusic/getLessonCoursewareCourseList/" + id
+      url: `/api-teacher/tenantAlbumMusic/getLessonCoursewareCourseList/${params.id}`,
+      params: params.data
    })
 }
 

BIN
src/img/coursewarePlay/back.png


+ 16 - 20
src/views/cloudPractice/cloudPractice.tsx

@@ -766,7 +766,7 @@ export default defineComponent({
          await handleAllGetList()
       }
 
-      const toDetailGYM = async () => {
+      const toDetailGYM = () => {
          // const row: any = activeItem.value
          const details: any = state.details
          state.imgs = []
@@ -846,7 +846,7 @@ export default defineComponent({
 
       const toDetail = async () => {
          if (userStoreHook.roles === "GYM") {
-            await toDetailGYM()
+            toDetailGYM()
             return
          }
          const row: any = activeItem.value
@@ -854,18 +854,6 @@ export default defineComponent({
          if (row.musicSheetType === "SINGLE") {
             loading.value = false
             state.musicPdfUrl = row.musicPdfUrl
-
-            // if (userStoreHook.roles === "GYM") {
-            //    const imgs = row.musicImg ? row.musicImg.split(",") : []
-            //    imgs.forEach(async (item: string, index: number) => {
-            //       const imgCanvas = await imgToCanvas(item)
-            //       const img = await canvasAddTitle(imgCanvas, row.name)
-            //       state.imgs.push({
-            //          name: index + 1 + ".png",
-            //          url: img
-            //       })
-            //    })
-            // }
          }
          state.partNames = await getPartNames(row.xmlUrl)
          let partList = row.background || []
@@ -993,8 +981,14 @@ export default defineComponent({
                // https://cdn.oss.dayaedu.com/daya202409/UODQffO.pdf
             } else {
                if (userStoreHook.roles === "GYM") {
-                  console.log(state.partXmlIndex, state.selectedTrack, "----------")
-                  state.iframeSrc = getPreViewCloud(activeItem.value.id, state.partXmlIndex, state.selectedTrack)
+                  nextTick(() => {
+                     const iframeRef: any = document.getElementById("staffIframeRef")
+                     if (iframeRef) {
+                        iframeRef.contentWindow.location.replace(getPreViewCloud(activeItem.value.id, state.partXmlIndex, state.selectedTrack))
+                     } else {
+                        state.iframeSrc = getPreViewCloud(activeItem.value.id, state.partXmlIndex, state.selectedTrack)
+                     }
+                  })
                } else {
                   state.iframeSrc = `/osmd/index.html`
                }
@@ -1347,12 +1341,14 @@ export default defineComponent({
                                  <div class={styles.btnSection}>
                                     <div
                                        class={styles.btn}
-                                       onClick={(e: any) => {
+                                       onClick={async (e: any) => {
                                           e.stopPropagation()
-                                          handlePlay(item)
                                           if (state.listActive !== index) {
-                                             resetRender()
+                                             state.listActive = index
+                                             await handleGetDetail()
+                                             searchContent()
                                           }
+                                          handlePlay(item)
                                        }}
                                     >
                                        {state.listActive === index && (
@@ -1442,7 +1438,7 @@ export default defineComponent({
                      src={btnSubmit as any}
                      onClick={() => {
                         handleChangeAudio("pause")
-                        goToCloud(activeItem.value.id, state.partXmlIndex)
+                        goToCloud(activeItem.value.id, state.partXmlIndex, state.selectedTrack)
                      }}
                   />
 

+ 8 - 2
src/views/cloudPractice/useData.ts

@@ -21,11 +21,17 @@ export const useFunction = () => {
    /** 跳转云教练 */
    const isPracticeShow = ref(false)
    const practiceUrl = ref("")
-   function goToCloud(musicId: string, partIndex = 0) {
+   function goToCloud(musicId: string, partIndex = 0, track = "") {
       //  GYM,GYT,KLX 区分   云教练
+      let gymUrl = `${URL_TEACH_GYM}#/?id=${musicId}&Authorization=${getToken()}&platform=pc&isYjt=1&isHideMusicList=true&systemType=teacher`
+      if (partIndex === 999) {
+         gymUrl += `&part-index=${partIndex}`
+      } else {
+         gymUrl += `&part-name=${track}`
+      }
       const urlObj = {
          GYT: `${URL_TEACH_GYT}?id=${musicId}&modelType=practice&modeType=json&part-index=${partIndex}&Authorization=${getToken()}&isYjt=1&&isHideBack=false`,
-         GYM: `${URL_TEACH_GYM}#/?id=${musicId}&Authorization=${getToken()}&platform=pc&part-index=${partIndex}&isYjt=1&isHideMusicList=true&systemType=teacher`,
+         GYM: gymUrl,
          KLX: `${URL_TEACH_KLX}#/?id=${musicId}&Authorization=${getToken()}&platform=pc&part-index=${partIndex}&isYjt=1&isHideMusicList=true&systemType=teacher`
       }
       isPracticeShow.value = true

+ 2 - 8
src/views/cloudTextbooks/chooseDialog.vue

@@ -6,7 +6,7 @@
 <template>
    <div class="chooseDialog">
       <div class="close" @click="close"></div>
-      <div class="chooseHeader" v-if="isShowTabs">
+      <div class="chooseHeader">
          <img
             key="classlist"
             v-if="chooseType === 'classlist'"
@@ -74,15 +74,13 @@
 </template>
 
 <script setup lang="ts">
-import { computed, ref } from "vue"
+import { ref } from "vue"
 import { useDataDetailList } from "./useData"
 import myInput from "@/components/myInput"
 import searchCollapse from "./searchCollapse"
-import userStore from "@/store/modules/user"
 const { handleGetDetailList, loading, searchLoading, listDetailData, listSearchData, activeCollapse, listData, pageNum, handlePage } =
    useDataDetailList()
 import router from "@/router"
-const userStoreHook = userStore()
 
 const chooseType = ref<"classlist" | "search">("classlist")
 const queryStr = ref("")
@@ -98,10 +96,6 @@ const emits = defineEmits<{
 
 handleGetDetailList(props.modalData.id)
 
-const isShowTabs = computed(() => {
-   return userStoreHook.roles === "GYM" ? true : false
-})
-
 function close() {
    emits("onClose")
 }

+ 2 - 2
src/views/cloudTextbooks/searchCollapse/searchCollapse.vue

@@ -1,7 +1,7 @@
 <!--
 * @FileDescription: 折叠菜单
-* @Author: 黄琪勇
-* @Date:2024-04-01 18:40:50
+* @Author: 王新雷
+* @Date:2024-12-01 18:40:50
 -->
 <template>
    <el-collapse class="courseCollapse" accordion v-model="activeCollapseId">

+ 54 - 12
src/views/cloudTextbooks/useData.ts

@@ -227,9 +227,9 @@ export const useDataDetailList = () => {
       if (userStoreHook.roles === "GYM") {
          handleGetDetaList_gym(id, isSearch, search)
       } else if (userStoreHook.roles === "GYT") {
-         handleGetDetailList_gyt(id)
+         handleGetDetailList_gyt(id, isSearch, search)
       } else if (userStoreHook.roles === "KLX") {
-         handleGetDetailList_klx(id)
+         handleGetDetailList_klx(id, isSearch, search)
       }
    }
 
@@ -275,10 +275,16 @@ export const useDataDetailList = () => {
       })
    }
    // 获取管乐团
-   function handleGetDetailList_gyt(id: string) {
-      loading.value = true
-      httpAjaxErrMsg(getMyCoursewareDetail_gyt, id).then(res => {
-         loading.value = false
+   function handleGetDetailList_gyt(id: string, isSearch = false, search?: string) {
+      if (coursewareDetailController) {
+         coursewareDetailController.abort()
+      }
+      coursewareDetailController = new AbortController()
+      if (!isSearch) loading.value = true
+      searchLoading.value = true
+      httpAjax(getMyCoursewareDetail_gyt, { id, data: { search }, abortController: coursewareDetailController }).then(res => {
+         if (!isSearch) loading.value = false
+         searchLoading.value = false
          if (res.code === 200) {
             const data = (res.data || []).map((item: any) => {
                return {
@@ -288,15 +294,36 @@ export const useDataDetailList = () => {
                   lockFlag: false // 云课堂默认不锁
                }
             })
-            listData.value = chunkArray(chunkArray(data, 7), 2)
+
+            if (!isSearch) {
+               listData.value = chunkArray(chunkArray(data, 7), 2)
+            }
+
+            const resultList = res.data || []
+            resultList.forEach((item: any) => {
+               item.children = item.knowledgePointList || []
+               item.id = item.coursewareDetailId
+               item.name = item.coursewareDetailName
+            })
+            listSearchData.value = filterPointList(resultList)
+            flattenCoursewareList.value = flattenCoursewareListData
+            if (flattenCoursewareList.value[0]) {
+               activeCollapse.value = flattenCoursewareList.value[0]
+            }
          }
       })
    }
    // 获取酷乐秀
-   function handleGetDetailList_klx(id: string) {
-      loading.value = true
-      httpAjaxErrMsg(getLessonCoursewareCourseList_klx, id).then(res => {
-         loading.value = false
+   function handleGetDetailList_klx(id: string, isSearch = false, search?: string) {
+      if (coursewareDetailController) {
+         coursewareDetailController.abort()
+      }
+      coursewareDetailController = new AbortController()
+      if (!isSearch) loading.value = true
+      searchLoading.value = true
+      httpAjax(getLessonCoursewareCourseList_klx, { id, data: { search }, abortController: coursewareDetailController }).then(res => {
+         if (!isSearch) loading.value = false
+         searchLoading.value = false
          if (res.code === 200) {
             const data = (res.data || []).map((item: any) => {
                return {
@@ -304,7 +331,22 @@ export const useDataDetailList = () => {
                   id: item.coursewareDetailId
                }
             })
-            listData.value = chunkArray(chunkArray(data, 7), 2)
+
+            if (!isSearch) {
+               listData.value = chunkArray(chunkArray(data, 7), 2)
+            }
+
+            const resultList = res.data || []
+            resultList.forEach((item: any) => {
+               item.children = item.knowledgePointList || []
+               item.id = item.coursewareDetailId
+               item.name = item.coursewareDetailName
+            })
+            listSearchData.value = filterPointList(resultList)
+            flattenCoursewareList.value = flattenCoursewareListData
+            if (flattenCoursewareList.value[0]) {
+               activeCollapse.value = flattenCoursewareList.value[0]
+            }
          }
       })
    }

+ 16 - 12
src/views/coursewarePlay/coursewarePlay.vue

@@ -165,7 +165,9 @@ import {
    getLessonCourseDetail_gym,
    getLessonCoursewareDetail_gyt,
    getLessonCourseDetail_klx,
-   getLessonCoursewareCourseList_gym
+   getLessonCoursewareCourseList_gym,
+   getMyCoursewareDetail_gyt,
+   getLessonCoursewareCourseList_klx
 } from "@/api/cloudTextbooks.api"
 import myInput from "@/components/myInput"
 import { checkWebCourse_gyt, refLevel_gym, refLevel_gyt, refLevel_klx } from "@/api/coursewarePlay.api"
@@ -313,16 +315,16 @@ async function getCoursewareList(id?: string) {
 async function getLessCoursewareList(id?: string) {
    //  GYM,GYT,KLX 区分   查询接口
    const LessonCoursewareDetailApi = {
-      // GYT: getLessonCoursewareCourseList_gym
-      GYM: getLessonCoursewareCourseList_gym
-      // KLX: getLessonCourseDetail_klx
+      GYT: getMyCoursewareDetail_gyt,
+      GYM: getLessonCoursewareCourseList_gym,
+      KLX: getLessonCoursewareCourseList_klx
    }
    if (coursewareDetailController) {
       coursewareDetailController.abort()
    }
    coursewareDetailController = new AbortController()
    searchObj.loading = true
-   await httpAjax(LessonCoursewareDetailApi["GYM"], {
+   await httpAjax(LessonCoursewareDetailApi[userStoreHook.roles!], {
       id: id || (route.params.id as string),
       data: {
          search: searchObj.queryStr,
@@ -434,19 +436,21 @@ function filterPointList(pointList: any[], parentData?: { ids: string[]; name: s
    })
 }
 function handleChangeCourseware(index: -1 | 1) {
-   console.log("parentId parentId  parentId")
    handleVideoPause()
    handleSongPause()
    const newIndex = index + activeCoursewareIndex.value
    if (newIndex < 0 || newIndex > flattenCoursewareList.value.length - 1) {
       return
    }
-   const newItem = flattenCoursewareList.value[newIndex]
-   const newParentId = newItem ? newItem.parentData?.ids[0] : ""
-   if (newParentId) {
-      const parentItem = coursewareList.value.find((item: any) => item.id === newParentId)
-      if (parentItem) {
-         lessonTargetDetail.value = parentItem.lessonTargetDesc
+
+   if (searchObj.source === "search") {
+      const newItem = flattenCoursewareList.value[newIndex]
+      const newParentId = newItem ? newItem.parentData?.ids[0] : ""
+      if (newParentId) {
+         const parentItem = coursewareList.value.find((item: any) => item.id === newParentId)
+         if (parentItem) {
+            lessonTargetDetail.value = parentItem.lessonTargetDesc
+         }
       }
    }