Browse Source

Merge branch 'iteration-select-courseware' into dev

lex-xin 6 months ago
parent
commit
0b0efc7722

+ 1 - 1
src/api/cloudPractice.api.ts

@@ -29,7 +29,7 @@ export const queryPage2_gym = (data: any) => {
    })
 }
 
-export const cbsDetail_gym = (id: number, data?: any) => {
+export const cbsDetail_gym = (id: number, data = {}) => {
    return httpAxios_gym.axioseRquest({
       method: "get",
       url: `/api-teacher/musicSheet/cbsDetail/${id}`,

+ 23 - 6
src/api/cloudTextbooks.api.ts

@@ -25,11 +25,16 @@ export const getLessonCoursewareSubjectList_gym = () => {
 }
 
 // 课程详情列表
-export const getLessonCoursewareCourseList_gym = (params: { id: string; search?: string; abortController: AbortController }) => {
+export const getLessonCoursewareCourseList_gym = (params: {
+   id: string
+   data: { search?: string; detailFlag?: string }
+   abortController: AbortController
+}) => {
    return httpAxios_gym.axioseRquest({
       signal: params.abortController.signal,
       method: "get",
-      url: `/api-teacher/lessonCourseware/getLessonCoursewareCourseList/${params.id}?search=${params.search || ""}`
+      url: `/api-teacher/lessonCourseware/getLessonCoursewareCourseList/${params.id}`,
+      params: params.data
    })
 }
 
@@ -54,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
    })
 }
 
@@ -106,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
    })
 }
 

+ 29 - 51
src/views/cloudPractice/cloudPractice.tsx

@@ -250,7 +250,7 @@ export default defineComponent({
       const handleGetDetail_gym = async () => {
          loading.value = true
          const { id } = state.list[state.listActive] || {}
-         if (!id) return
+         if (!id) return (loading.value = false)
          await httpAjaxErrMsg(cbsDetail_gym, id, { simpleFlag: "1" }).then(res => {
             loading.value = false
             if (res.code === 200) {
@@ -767,7 +767,7 @@ export default defineComponent({
       }
 
       const toDetailGYM = async () => {
-         const row: any = activeItem.value
+         // const row: any = activeItem.value
          const details: any = state.details
          state.imgs = []
          if (details.musicSheetType === "SINGLE") {
@@ -794,7 +794,7 @@ export default defineComponent({
 
          // 初始化数据
          // 是否显示总谱
-         if (row.isScoreRender) {
+         if (details.isScoreRender) {
             partColumns.value.unshift({
                label: "总谱",
                instrumentName: null,
@@ -803,34 +803,34 @@ export default defineComponent({
                xmlIndex: 999,
                value: 999
             })
-
-            if (row.defaultScoreRender) {
-               state.selectedPartIndex = 999
-            }
          }
-
-         console.log(partColumns.value, "partColumns.value")
          // gym 现在单独处理 管乐迷根据查询条件来筛选谱面
          let defaultShowStaff
-         // 这里筛选当前的声轨
-         const soundCodes = filterSoundCodes()
-         if (soundCodes) {
-            const soundCodesArr = soundCodes.split(",").map((code: string) => {
-               return code
-                  .toLowerCase()
-                  .replace(/^\d+|\d+$/g, "")
-                  .trim()
-            })
-            defaultShowStaff = partColumns.value.find((item: any) =>
-               soundCodesArr.includes(
-                  item.track &&
-                     item.track
-                        .toLowerCase()
-                        .replace(/^\d+|\d+$/g, "")
-                        .trim()
+
+         if (details.defaultScoreRender) {
+            state.selectedPartIndex = 999
+         } else {
+            // 这里筛选当前的声轨
+            const soundCodes = filterSoundCodes()
+            if (soundCodes) {
+               const soundCodesArr = soundCodes.split(",").map((code: string) => {
+                  return code
+                     .toLowerCase()
+                     .replace(/^\d+|\d+$/g, "")
+                     .trim()
+               })
+               defaultShowStaff = partColumns.value.find((item: any) =>
+                  soundCodesArr.includes(
+                     item.track &&
+                        item.track
+                           .toLowerCase()
+                           .replace(/^\d+|\d+$/g, "")
+                           .trim()
+                  )
                )
-            )
+            }
          }
+
          defaultShowStaff || (defaultShowStaff = partColumns.value.find((item: any) => item.value === state.selectedPartIndex))
 
          state.selectedPartName = defaultShowStaff?.instrumentName
@@ -907,32 +907,8 @@ export default defineComponent({
             }
          }
 
-         // gym 现在单独处理 管乐迷根据查询条件来筛选谱面
-         // let defaultShowStaff
-         // if (userStoreHook.roles === "GYM") {
-         //    // 这里筛选当前的声轨
-         //    const soundCodes = await filterSoundCodes()
-         //    if (soundCodes) {
-         //       const soundCodesArr = soundCodes.split(",").map((code: string) => {
-         //          return code
-         //             .toLowerCase()
-         //             .replace(/^\d+|\d+$/g, "")
-         //             .trim()
-         //       })
-         //       defaultShowStaff = partColumns.value.find((item: any) =>
-         //          soundCodesArr.includes(
-         //             item.track &&
-         //                item.track
-         //                   .toLowerCase()
-         //                   .replace(/^\d+|\d+$/g, "")
-         //                   .trim()
-         //          )
-         //       )
-         //    }
-         //    defaultShowStaff || (defaultShowStaff = partColumns.value.find((item: any) => item.value === state.selectedPartIndex))
-         // } else {
          const defaultShowStaff = partColumns.value.find((item: any) => item.value === state.selectedPartIndex)
-         // }
+
          state.selectedPartName = defaultShowStaff?.instrumentName
          state.selectedTrack = defaultShowStaff?.track
          state.partXmlIndex = defaultShowStaff?.xmlIndex
@@ -1017,6 +993,7 @@ 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)
                } else {
                   state.iframeSrc = `/osmd/index.html`
@@ -1499,6 +1476,7 @@ export default defineComponent({
                               state.selectedPartName = item.instrumentName
                               state.selectedTrack = item.track
                               state.partXmlIndex = item.xmlIndex
+                              state.imgs = []
                               nextTick(() => {
                                  let tempPdf = ""
                                  if (activeItem.value?.isScoreRender && value === 999) {

+ 1 - 0
src/views/cloudPractice/instrument.ts

@@ -53,6 +53,7 @@ export const onlyVisible = (xml: string, partIndex: number): string => {
    if (!xml) return ""
    const xmlParse = new DOMParser().parseFromString(xml, "text/xml")
    const partList = xmlParse.getElementsByTagName("part-list")?.[0]?.getElementsByTagName("score-part") || []
+   // @typescript-eslint/no-unused-vars
    const partListNames = Array.from(partList).map(item => item.getElementsByTagName("part-name")?.[0].textContent || "")
    const parts: any = xmlParse.getElementsByTagName("part")
    // const firstTimeInfo = parts[0]?.getElementsByTagName('metronome')[0]?.parentElement?.parentElement?.cloneNode(true)

+ 5 - 10
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")
 }
@@ -128,7 +122,8 @@ function handleCourseClick(value: any) {
       },
       query: {
          source: "search",
-         search: queryStr.value,
+         search: tempSearch.value,
+         knowledgePointId: value.knowledgePointId,
          materialId: value.id
       }
    })
@@ -139,7 +134,7 @@ function handleChangeType(type: "classlist" | "search") {
 }
 
 function handleQuery() {
-   tempSearch.value = queryStr.value
+   tempSearch.value = queryStr.value ? JSON.parse(JSON.stringify(queryStr.value)) : ""
    handleGetDetailList(props.modalData.id, true, queryStr.value)
 }
 </script>

+ 5 - 5
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">
@@ -129,7 +129,7 @@ function handleClick(value: any) {
       > .el-collapse-item__header {
          border-bottom-color: transparent;
          &.is-active {
-            border-bottom-color: #f2f2f2;
+            border-bottom-color: #f2f2f2 !important;
          }
       }
       &:last-child {
@@ -277,7 +277,7 @@ function handleClick(value: any) {
          align-items: center;
          // padding: 0 10px 0 24px;
          padding: 0;
-         margin-bottom: 6px;
+         // margin-bottom: 6px;
          cursor: pointer;
          // &.isActive {
          // background: #f0f0f0;
@@ -288,7 +288,7 @@ function handleClick(value: any) {
          // }
          // }
          .courseTitleCon {
-            padding: 12px 0 0 10px;
+            padding: 4px 0 20px 10px;
             flex-grow: 1;
             overflow: hidden;
             margin-right: 8px;

+ 56 - 14
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)
       }
    }
 
@@ -245,7 +245,7 @@ export const useDataDetailList = () => {
       coursewareDetailController = new AbortController()
       if (!isSearch) loading.value = true
       searchLoading.value = true
-      httpAjax(getLessonCoursewareCourseList_gym, { id, search, abortController: coursewareDetailController }).then(res => {
+      httpAjax(getLessonCoursewareCourseList_gym, { id, data: { search }, abortController: coursewareDetailController }).then(res => {
          if (!isSearch) loading.value = false
          searchLoading.value = false
          if (res.code === 200) {
@@ -265,6 +265,7 @@ export const useDataDetailList = () => {
                item.id = item.coursewareDetailId
                item.name = item.coursewareDetailName
             })
+            flattenCoursewareListData = []
             listSearchData.value = filterPointList(resultList)
             flattenCoursewareList.value = flattenCoursewareListData
             if (flattenCoursewareList.value[0]) {
@@ -274,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 {
@@ -287,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 {
@@ -303,14 +331,28 @@ 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]
+            }
          }
       })
    }
 
    function filterPointList(pointList: any[], parentData?: { ids: string[]; name: string }): any[] {
       // 设置父级及以上id数组和父级name
-      flattenCoursewareListData = []
       return pointList.map(point => {
          if (point.children) {
             return Object.assign(point, {

+ 1 - 0
src/views/coursewarePlay/components/courseCollapse/courseCollapse.vue

@@ -109,6 +109,7 @@ function handleClick(value: any) {
 }
 
 function formatName(name: string) {
+   // console.log(name, searchStr.value, "searchStr")
    if (!name || !searchStr.value) return name
    const search: any = searchStr.value
    return name.replace(search, `<span style="color: #F67146;">${search}</span>`)

+ 69 - 22
src/views/coursewarePlay/coursewarePlay.vue

@@ -24,7 +24,15 @@
             <ElImage :hide-on-click-modal="true" fit="contain" :src="activeCourseware?.content" class="imgPlay" />
          </div>
          <div class="songPlayBox" v-if="fileType === 'SONG'">
-            <iframe ref="songPlayDom" class="songIframe" @mousemove="handleMousemove" :src="songPlaySrc" frameborder="0"></iframe>
+            <iframe
+               ref="songPlayDom"
+               :key="activeCourseware?.content"
+               class="songIframe"
+               @mousemove="handleMousemove"
+               :src="songPlaySrc"
+               frameborder="0"
+            ></iframe>
+            <!-- <span></span> -->
          </div>
       </div>
       <div class="leftTools posTools">
@@ -130,8 +138,8 @@
                description="暂无搜索结果"
             />
             <courseCollapse
-               :activeCollapse="activeCourseware"
-               :search="searchObj.search"
+               :activeCollapse="tempActiveCourseware || activeCourseware"
+               :search="searchObj.tempSearch || searchObj.search"
                :courseList="tempCoursewareList"
                @handleClick="handleCourseClick"
             />
@@ -157,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"
@@ -202,10 +212,12 @@ const searchObj = reactive({
    isSearch: false, // 是否搜索 标识
    queryStr: route.query.search as any,
    source: route.query.source as any, // 从哪里来的
-   search: route.query.search as any // 默认的搜索条件 -
+   search: route.query.search as any, // 默认的搜索条件 -
+   tempSearch: route.query.search as any
 })
 
 // 选中的知识点
+const tempActiveCourseware: any = ref() // 临时数据
 const activeCourseware = computed<undefined | Record<string, any>>(() => {
    return flattenCoursewareList.value[activeCoursewareIndex.value]
 })
@@ -227,6 +239,11 @@ const songPlaySrc = computed<string>(() => {
          activeCourseware.value?.content
       }&Authorization=${getToken()}&platform=pc&isHideBack=true&isHideMusicList=true&isYjt=1&systemType=teacher`
    }
+
+   // const iframeRef = document.querySelector("#songPlayDom") as any
+   // iframeRef?.contentWindow.location.replace(urlObj[userStoreHook.roles!])
+   // console.log(iframeRef, "iframeRef")
+
    return urlObj[userStoreHook.roles!]
 })
 // 视频是否自动播放
@@ -298,18 +315,21 @@ 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),
-      search: searchObj.queryStr,
+      data: {
+         search: searchObj.queryStr,
+         detailFlag: "1"
+      },
       abortController: coursewareDetailController
    }).then(res => {
       searchObj.loading = false
@@ -367,6 +387,7 @@ function getCoursewareMenuList(id?: string) {
 }
 let flattenCoursewareListData: any = [] // 临时扁平化数据
 function handlePointList(pointList: any[], isSearch?: boolean) {
+   flattenCoursewareListData = []
    const list = filterPointList(pointList)
    if (!isSearch) {
       // 重置数据
@@ -380,6 +401,14 @@ function handlePointList(pointList: any[], isSearch?: boolean) {
          index > -1 && (activeCoursewareIndex.value = index)
       }
       flattenCoursewareList.value = deepCopy(flattenCoursewareListData)
+   } else {
+      if (flattenCoursewareListData[0]) {
+         // 默认展开第一个
+         tempActiveCourseware.value = {
+            ...flattenCoursewareListData[0],
+            id: null
+         }
+      }
    }
    tempCoursewareList.value = list
    tempFlattenCoursewareList.value = deepCopy(flattenCoursewareListData)
@@ -407,19 +436,17 @@ 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 item = flattenCoursewareList.value[activeCoursewareIndex.value]
    const newItem = flattenCoursewareList.value[newIndex]
-   const parentId = item ? item.parentData.ids[0] : ""
-   const newParentId = newItem ? newItem.parentData.ids[0] : ""
-   if (parentId !== newParentId) {
-      const parentItem = coursewareList.value.find((item: any) => item.id === parentId)
+   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
       }
@@ -429,12 +456,24 @@ function handleChangeCourseware(index: -1 | 1) {
 }
 function handleCourseClick(value: any) {
    // 选择之后初始化数据
-   searchObj.search = JSON.parse(JSON.stringify(searchObj.queryStr))
+   searchObj.search = searchObj.tempSearch ? JSON.parse(JSON.stringify(searchObj.tempSearch)) : ""
    coursewareList.value = deepCopy(tempCoursewareList.value)
    flattenCoursewareList.value = deepCopy(tempFlattenCoursewareList.value)
-   activeCoursewareIndex.value = flattenCoursewareList.value.findIndex((item: any) => {
+
+   const newIndex = flattenCoursewareList.value.findIndex((item: any) => {
       return value.id === item.id && value.knowledgePointId === item.knowledgePointId
    })
+
+   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
+      }
+   }
+   activeCoursewareIndex.value = newIndex
    drawerShow.value = false
 }
 async function handleCourseMenuClick(value: any) {
@@ -509,7 +548,10 @@ function preventDefaultContextmenu(event: MouseEvent) {
 }
 function handleKeydown(e: KeyboardEvent) {
    const key = e.key
-
+   // 打开弹窗之后快捷键失效
+   if (drawerShow.value || drawerMenuShow.value) {
+      return
+   }
    if (key === " ") {
       closeAllModalFrame()
       drawerShow.value = false
@@ -541,7 +583,9 @@ function handleToolClick(type: string) {
       drawerMenuShow.value = true
    } else if (type === "point") {
       tempCoursewareList.value = deepCopy(coursewareList.value)
-      searchObj.queryStr = JSON.parse(JSON.stringify(searchObj.search))
+      searchObj.queryStr = searchObj.search ? JSON.parse(JSON.stringify(searchObj.search)) : ""
+
+      tempActiveCourseware.value = null
       drawerShow.value = true
    }
 }
@@ -671,6 +715,7 @@ function onTitleTip(type: "phaseGoals" | "checkItem", text: string) {
 function handleQuery() {
    //
    searchObj.isSearch = true
+   searchObj.tempSearch = searchObj.queryStr ? JSON.parse(JSON.stringify(searchObj.queryStr)) : ""
    getLessCoursewareList()
 }
 </script>
@@ -933,12 +978,14 @@ function handleQuery() {
 .empty {
    height: calc(100vh - 54px);
    :deep(.el-empty__image) {
-      width: 238px;
+      width: 228px;
    }
 
    :deep(.el-empty__description) {
-      font-size: 18px;
       color: #aaa;
+      p {
+         font-size: 18px;
+      }
    }
 }
 </style>