Selaa lähdekoodia

Merge branch 'iteration-temp-http' into dev

lex-xin 6 kuukautta sitten
vanhempi
commit
b47199b2cf

+ 4 - 3
src/api/cloudPractice.api.ts

@@ -24,15 +24,16 @@ export const querySubjectIds_gym = (data?: any) => {
 export const queryPage2_gym = (data: any) => {
    return httpAxios_gym.axioseRquest({
       method: "get",
-      url: "/api-teacher/sysMusicScore/queryPage2",
+      url: "/api-teacher/sysMusicScore/queryPageSimple",
       params: data
    })
 }
 
-export const cbsDetail_gym = (id: number) => {
+export const cbsDetail_gym = (id: number, data?: any) => {
    return httpAxios_gym.axioseRquest({
       method: "get",
-      url: `/api-teacher/musicSheet/cbsDetail/${id}`
+      url: `/api-teacher/musicSheet/cbsDetail/${id}`,
+      params: data
    })
 }
 

BIN
src/img/cloudPractice/icon-left-active.png


+ 184 - 69
src/views/cloudPractice/cloudPractice.tsx

@@ -12,7 +12,7 @@ import iconBtnPlay from "../../img/cloudPractice/icon-btn-play.png"
 import btnSubmit from "../../img/cloudPractice/btn-submit.png"
 import iconTransfer from "../../img/cloudPractice/icon-transfer.png"
 import iconDownload from "../../img/cloudPractice/icon-download.png"
-import { httpAjax, httpAjaxErrMsg } from "@/plugin/httpAjax"
+import { httpAjaxErrMsg } from "@/plugin/httpAjax"
 import {
    queryPage2_gym,
    queryPage2_gyt,
@@ -35,7 +35,7 @@ import PlayLoading from "./component/play-loading"
 import PracticeForm from "@/businessComponents/practiceForm"
 import { saveAs } from "file-saver"
 import JSZip from "jszip"
-import { canvasAddTitle, imgToCanvas, svgtoblob } from "./formatSvgToImg"
+import { svgtoblob } from "./formatSvgToImg"
 import { penShow, whitePenShow } from "@/businessComponents/globalTools/globalTools"
 import { handleFullscreen } from "@/libs/fullscreen"
 
@@ -59,6 +59,7 @@ export default defineComponent({
          reshing: false,
          page: 1,
          rows: 20,
+         details: {} as any,
          iframeSrc: "",
          listActive: 0, // 当前选中的对象
          firstTreeId: null as any, // 左侧
@@ -94,22 +95,22 @@ export default defineComponent({
          let tempList: any = {}
 
          if (userStoreHook.roles === "GYM") {
-            const item = list.background?.[0]
-            const audioFileUrl = item?.musicSheetType === "CONCERT" ? item?.metronomeUrl : item?.metronomeMp3Url || item?.mp3Url
+            // const item = list.background?.[0]
+            // const audioFileUrl = item?.musicSheetType === "CONCERT" ? item?.metronomeUrl : item?.metronomeMp3Url || item?.mp3Url
             tempList = {
-               id: item?.id,
-               name: item?.examSongName,
-               background: list?.background,
-               xmlUrl: item?.xmlUrl,
-               musicSheetType: item?.musicSheetType,
-               audioFileUrl,
-               // titleImg: list?.titleImg,
-               musicImg: list.musicImg,
-               musicJianImg: list.musicJianSvg,
-               musicFirstImg: list.musicFirstSvg,
-               isScoreRender: item?.isScoreRender,
-               defaultScoreRender: item?.defaultScoreRender,
-               musicPdfUrl: item?.musicPdfUrl // 独奏使用PDF
+               id: list?.id,
+               name: list?.name,
+               // background: list?.background,
+               // xmlUrl: item?.xmlUrl,
+               // musicSheetType: item?.musicSheetType,
+               audioFileUrl: list.audioFileUrl,
+               titleImg: list?.titleImg
+               // musicImg: list.titleImg
+               // musicJianImg: list.musicJianSvg,
+               // musicFirstImg: list.musicFirstSvg,
+               // isScoreRender: item?.isScoreRender,
+               // defaultScoreRender: item?.defaultScoreRender,
+               // musicPdfUrl: item?.musicPdfUrl // 独奏使用PDF
             }
          } else if (userStoreHook.roles === "GYT") {
             tempList = {
@@ -246,6 +247,19 @@ export default defineComponent({
          })
       }
 
+      const handleGetDetail_gym = async () => {
+         loading.value = true
+         const { id } = state.list[state.listActive] || {}
+         if (!id) return
+         await httpAjaxErrMsg(cbsDetail_gym, id, { simpleFlag: "1" }).then(res => {
+            loading.value = false
+            if (res.code === 200) {
+               const result = res.data || {}
+               state.details = result
+            }
+         })
+      }
+
       /** 管乐团数据查询 */
       const handleSearchList_gyt = async () => {
          loading.value = true
@@ -550,6 +564,17 @@ export default defineComponent({
          }
       }
 
+      const handleGetDetail = async () => {
+         //  GYM,GYT,KLX 区分   查询声部数据·
+         if (userStoreHook.roles === "GYM") {
+            await handleGetDetail_gym()
+         } else if (userStoreHook.roles === "GYT") {
+            // await handleGetList_gyt()
+         } else if (userStoreHook.roles === "KLX") {
+            // await handleGetList_klx()
+         }
+      }
+
       /** 初始化数据 */
       const setDefaultData = async (type?: "first" | "category" | "level" | "type") => {
          if (userStoreHook.roles === "GYM") {
@@ -600,7 +625,7 @@ export default defineComponent({
                }
             })
 
-            await handleGetSubject_gym()
+            type && (await handleGetSubject_gym())
          }
 
          if (state.levelList.length > 0) {
@@ -705,6 +730,7 @@ export default defineComponent({
          await handleAllSearchList()
          await handleAllGetSubject()
          await handleAllGetList()
+         await handleGetDetail() // 默认获取数据
          await toDetail()
          renderStaff()
       }
@@ -726,6 +752,7 @@ export default defineComponent({
          state.playState = "pause"
          state.partNames = []
          state.partList = []
+         state.details = {}
          state.selectedPartName = ""
          state.selectedTrack = ""
          state.selectedPartIndex = 0
@@ -739,25 +766,106 @@ export default defineComponent({
          await handleAllGetList()
       }
 
+      const toDetailGYM = async () => {
+         const row: any = activeItem.value
+         const details: any = state.details
+         state.imgs = []
+         if (details.musicSheetType === "SINGLE") {
+            loading.value = false
+            state.musicPdfUrl = details.musicPdfUrl
+            return
+         }
+         // state.partNames = await getPartNames(row.xmlUrl)
+         let partList = details.musicSheetSoundList || []
+         partList = partList.filter((item: any) => item.audioPlayType === "PLAY")
+         partList = partList.filter((item: any) => !item.track?.toLocaleUpperCase()?.includes("COMMON"))
+         partColumns.value = partList.map((item: any, index: number) => {
+            const instrumentName = getInstrumentName(item.track)
+            // const xmlIndex = state.partNames.findIndex((name: any) => name.trim() === item.track)
+            return {
+               label: item.track + (instrumentName ? `(${instrumentName})` : ""),
+               instrumentName: instrumentName,
+               track: item.track,
+               musicPdfUrl: item.musicPdfUrl,
+               // xmlIndex: -1,
+               value: index
+            }
+         })
+
+         // 初始化数据
+         // 是否显示总谱
+         if (row.isScoreRender) {
+            partColumns.value.unshift({
+               label: "总谱",
+               instrumentName: null,
+               track: null,
+               musicPdfUrl: "",
+               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()
+               )
+            )
+         }
+         defaultShowStaff || (defaultShowStaff = partColumns.value.find((item: any) => item.value === state.selectedPartIndex))
+
+         state.selectedPartName = defaultShowStaff?.instrumentName
+         state.selectedTrack = defaultShowStaff?.track
+         state.partXmlIndex = defaultShowStaff?.xmlIndex
+         state.selectedPartIndex = defaultShowStaff?.value
+         if (details.isScoreRender && details.defaultScoreRender) {
+            state.musicPdfUrl = details?.musicPdfUrl || ""
+         } else {
+            state.musicPdfUrl = defaultShowStaff?.musicPdfUrl || ""
+         }
+      }
+
       const toDetail = async () => {
+         if (userStoreHook.roles === "GYM") {
+            await toDetailGYM()
+            return
+         }
          const row: any = activeItem.value
          state.imgs = []
          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
-                  })
-               })
-            }
-            return
+            // 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 || []
@@ -800,31 +908,31 @@ 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 {
-            defaultShowStaff = partColumns.value.find((item: any) => item.value === state.selectedPartIndex)
-         }
+         // 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
@@ -865,7 +973,6 @@ export default defineComponent({
             const res: any = await axios.get(activeItem.value.xmlUrl)
             const parseXmlInfo = getCustomInfo(res.data)
             const xml = formatXML(parseXmlInfo.parsedXML)
-            console.log(activeItem.value, "activeItem.value")
             if (activeItem.value.isScoreRender) {
                const canSelectTracks: any = []
                const background = activeItem.value.background || []
@@ -882,7 +989,7 @@ export default defineComponent({
       const resetRender = async () => {
          const iframeRef: any = document.getElementById("staffIframeRef")
          if (userStoreHook.roles === "GYM") {
-            iframeRef.contentWindow.location.replace(getPreViewCloud(activeItem.value.id, state.partXmlIndex))
+            iframeRef.contentWindow.location.replace(getPreViewCloud(activeItem.value.id, state.partXmlIndex, state.selectedTrack))
             // state.iframeSrc = getPreViewCloud(activeItem.value.id, state.partXmlIndex)
             return
          }
@@ -910,7 +1017,7 @@ export default defineComponent({
                // https://cdn.oss.dayaedu.com/daya202409/UODQffO.pdf
             } else {
                if (userStoreHook.roles === "GYM") {
-                  state.iframeSrc = getPreViewCloud(activeItem.value.id, state.partXmlIndex)
+                  state.iframeSrc = getPreViewCloud(activeItem.value.id, state.partXmlIndex, state.selectedTrack)
                } else {
                   state.iframeSrc = `/osmd/index.html`
                }
@@ -967,7 +1074,8 @@ export default defineComponent({
          if (e.data?.api === "musicStaffRender") {
             const musicName =
                activeItem.value.name +
-               ((activeItem.value.musicSheetType === "CONCERT" && state.selectedPartName) || state.selectedTrack
+               (((activeItem.value.musicSheetType === "CONCERT" || state.details.musicSheetType === "CONCERT") && state.selectedPartName) ||
+               state.selectedTrack
                   ? `(${state.selectedPartName || state.selectedTrack})`
                   : "")
             try {
@@ -1033,11 +1141,11 @@ export default defineComponent({
       }
 
       // 根据当前选中的声部和曲目筛选出对应的声轨
-      async function filterSoundCodes() {
-         const { id } = state.list[state.listActive] || {}
-         if (!id) {
-            return undefined
-         }
+      function filterSoundCodes() {
+         // const { id } = state.list[state.listActive] || {}
+         // if (!id) {
+         //    return undefined
+         // }
          const { instrumentIds } =
             state.subjectList.find((item: any) => {
                return item.value === state.subjectId
@@ -1046,10 +1154,7 @@ export default defineComponent({
             //  GYM,GYT,KLX 区分   查询声部数据
             let cbsDetails: any = []
             if (userStoreHook.roles === "GYM") {
-               const resData = await httpAjax(cbsDetail_gym, id)
-               if (resData.code === 200) {
-                  cbsDetails = resData.data.musicalInstruments
-               }
+               cbsDetails = state.details.musicalInstruments || []
             } else if (userStoreHook.roles === "GYT") {
                //
             } else if (userStoreHook.roles === "KLX") {
@@ -1101,6 +1206,7 @@ export default defineComponent({
                                     state.firstTreeId = item.id
                                     await setDefaultData("first")
                                     await handleGetList()
+                                    await handleGetDetail()
                                     searchContent()
                                  }}
                               >
@@ -1126,6 +1232,7 @@ export default defineComponent({
                                           state.categoryId = item.value
                                           await setDefaultData("category")
                                           await handleGetList()
+                                          await handleGetDetail()
                                           searchContent()
                                        }
                                     }}
@@ -1154,6 +1261,7 @@ export default defineComponent({
                                     placeholder="全部声部"
                                     onChange={async () => {
                                        await handleGetList()
+                                       await handleGetDetail()
                                        searchContent()
                                     }}
                                  />
@@ -1169,6 +1277,7 @@ export default defineComponent({
                                        onChange={async () => {
                                           setDefaultData("level")
                                           await handleGetList()
+                                          await handleGetDetail()
                                           searchContent()
                                        }}
                                     />
@@ -1188,6 +1297,7 @@ export default defineComponent({
                                        placeholder="分类"
                                        onChange={async () => {
                                           await handleGetList()
+                                          await handleGetDetail()
                                           searchContent()
                                        }}
                                     />
@@ -1207,11 +1317,13 @@ export default defineComponent({
                                  onKeyup={async (e: any) => {
                                     if (e.code === "Enter" || e.key === "Enter") {
                                        await handleGetList()
+                                       await handleGetDetail()
                                        searchContent()
                                     }
                                  }}
                                  onHandleQuery={async () => {
                                     await handleGetList()
+                                    await handleGetDetail()
                                     searchContent()
                                  }}
                                  clearable
@@ -1230,6 +1342,7 @@ export default defineComponent({
                                     state.listActive = index
                                     state.selectedPartIndex = 0
                                     state.partXmlIndex = 0
+                                    await handleGetDetail()
                                     searchContent()
                                  }}
                               >
@@ -1371,7 +1484,9 @@ export default defineComponent({
                            }}
                         </NTooltip>
                      </div>
-                     <div style={{ display: activeItem.value.musicSheetType === "CONCERT" ? "" : "none" }}>
+                     <div
+                        style={{ display: activeItem.value.musicSheetType === "CONCERT" || state.details.musicSheetType === "CONCERT" ? "" : "none" }}
+                     >
                         <NPopselect
                            options={partColumns.value}
                            placement="bottom-end"

+ 27 - 1
src/views/cloudPractice/formatSvgToImg.ts

@@ -70,7 +70,8 @@ export const svgtoblob = async (svg: any, width: any, height: any, name: string)
     * @param height
     * @param preserveAspectRatio
     */
-   v.resize(width * 2, height * 2, "xMidYMid meet")
+   // v.resize(width * 2, height * 2, "xMidYMid meet")
+   v.resize(width / 1.2, height / 1.2, "xMidYMid meet")
 
    // Render only first frame, ignoring animations and mouse.
    await v.start()
@@ -83,6 +84,31 @@ export const svgtoblob = async (svg: any, width: any, height: any, name: string)
    return base64
 }
 
+// export const svgtopng = async (svg: any, width: any, height: any) => {
+//    let canvas: any = new OffscreenCanvas(width, height);
+//    const ctx = canvas.getContext("2d")!;
+//    let v: any = await Canvg.fromString(ctx!, svg, preset);
+
+//    /**
+//     * Resize SVG to fit in given size.
+//     * @param width
+//     * @param height
+//     * @param preserveAspectRatio
+//     */
+//    v.resize(width / 1.2, height / 1.2, "xMidYMid meet");
+
+//    // Render only first frame, ignoring animations and mouse.
+//    await v.start();
+//    let blob: any = await canvas.convertToBlob();
+//    const base64 = await blobToBase64(blob);
+//    ctx.clearRect(0, 0, canvas.width, canvas.height);
+//    canvas = null;
+//    v.stop();
+//    v = null;
+//    blob = null;
+//    return base64;
+//  };
+
 const convertToBlob = (canvas: any, type = "image/png") => {
    return new Promise((resolve, reject) => {
       canvas.toBlob((blob: Blob) => {

+ 1 - 1
src/views/cloudPractice/index.module.scss

@@ -302,7 +302,7 @@
          display: flex;
          align-items: center;
          justify-content: space-between;
-         padding: 15px 10px 15px 26px;
+         padding: 15px 10px 15px 15px;
          border-radius: 12px;
 
          cursor: pointer;

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

@@ -37,11 +37,18 @@ export const useFunction = () => {
       practiceUrl.value = ""
    }
 
-   function getPreViewCloud(musicId: string, partIndex = 0) {
+   function getPreViewCloud(musicId: string, partIndex = 0, track = "") {
       //  GYM,GYT,KLX 区分   云教练
+      let gymUrl = `${URL_TEACH_GYM}?t=${Date.now()}#/?id=${musicId}&Authorization=${getToken()}&isPreView=true&zoom=1&downPng=A4&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}?t=${Date.now()}#/?id=${musicId}&Authorization=${getToken()}&part-index=${partIndex}&isPreView=true&systemType=teacher`,
+         GYM: gymUrl,
          KLX: `${URL_TEACH_KLX}?t=${Date.now()}#/?id=${musicId}&Authorization=${getToken()}&part-index=${partIndex}&isPreView=true&systemType=teacher`
       }
       return urlObj[userStoreHook.roles!]

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

@@ -55,7 +55,7 @@
                   class="queryIpt"
                   v-model="queryStr"
                   :height="40"
-                  placeholder="请输入素材关键"
+                  placeholder="请输入素材关键"
                   clearable
                   @handleQuery="handleQuery"
                   @keyup.enter="handleQuery"
@@ -82,7 +82,6 @@ import userStore from "@/store/modules/user"
 const { handleGetDetailList, loading, searchLoading, listDetailData, listSearchData, activeCollapse, listData, pageNum, handlePage } =
    useDataDetailList()
 import router from "@/router"
-import { c } from "naive-ui"
 const userStoreHook = userStore()
 
 const chooseType = ref<"classlist" | "search">("classlist")

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

@@ -279,14 +279,14 @@ function handleClick(value: any) {
          padding: 0;
          margin-bottom: 6px;
          cursor: pointer;
-         &.isActive {
-            background: #f0f0f0;
-            border-radius: 7px;
-            .courseTitleCon {
-               color: #f67146;
-               font-weight: 600;
-            }
-         }
+         // &.isActive {
+         // background: #f0f0f0;
+         // border-radius: 7px;
+         // .courseTitleCon {
+         //    color: #f67146;
+         //    font-weight: 600;
+         // }
+         // }
          .courseTitleCon {
             padding: 12px 0 0 10px;
             flex-grow: 1;

+ 8 - 1
src/views/cloudTextbooks/useData.ts

@@ -209,6 +209,7 @@ export const useDataDetailList = () => {
    let coursewareDetailController: AbortController
    const listData = shallowRef<listDetail[][]>([])
    const listSearchData = shallowRef<any[]>([])
+   const flattenCoursewareList = ref<any[]>([]) // 扁平化coursewareList
    const activeCollapse = ref<any>({
       parentData: {
          ids: []
@@ -235,6 +236,7 @@ export const useDataDetailList = () => {
    function handlePage(type: "next" | "prev") {
       type === "next" ? pageNum.value++ : pageNum.value--
    }
+   let flattenCoursewareListData: any[] = []
    // 获取管乐迷
    function handleGetDetaList_gym(id: string, isSearch = false, search?: string) {
       if (coursewareDetailController) {
@@ -264,7 +266,10 @@ export const useDataDetailList = () => {
                item.name = item.coursewareDetailName
             })
             listSearchData.value = filterPointList(resultList)
-            activeCollapse.value = { parentData: { ids: listSearchData.value.length > 0 ? [listSearchData.value[0].id] : [] } }
+            flattenCoursewareList.value = flattenCoursewareListData
+            if (flattenCoursewareList.value[0]) {
+               activeCollapse.value = flattenCoursewareList.value[0]
+            }
          }
       })
    }
@@ -305,6 +310,7 @@ export const useDataDetailList = () => {
 
    function filterPointList(pointList: any[], parentData?: { ids: string[]; name: string }): any[] {
       // 设置父级及以上id数组和父级name
+      flattenCoursewareListData = []
       return pointList.map(point => {
          if (point.children) {
             return Object.assign(point, {
@@ -317,6 +323,7 @@ export const useDataDetailList = () => {
                      ids: [...(parentData?.ids || []), point.id],
                      name: point.name
                   }
+                  flattenCoursewareListData.push(item)
                   return item
                })
             })

+ 23 - 4
src/views/coursewarePlay/coursewarePlay.vue

@@ -109,7 +109,7 @@
                   class="queryIpt"
                   v-model="searchObj.queryStr"
                   :height="36"
-                  placeholder="请输入素材关键"
+                  placeholder="请输入素材关键"
                   clearable
                   @handleQuery="handleQuery"
                   @keyup.enter="handleQuery"
@@ -122,6 +122,13 @@
             <img class="close" @click="close" src="@/img/coursewarePlay/close.png" />
          </template>
          <ElScrollbar class="elScrollbar" v-loading="searchObj.loading">
+            <!-- <tempCoursewareList -->
+            <el-empty
+               class="empty"
+               v-if="!tempCoursewareList.length && !searchObj.loading"
+               :image="require('@/img/layout/empty.png')"
+               description="暂无搜索结果"
+            />
             <courseCollapse
                :activeCollapse="activeCourseware"
                :search="searchObj.search"
@@ -372,10 +379,10 @@ function handlePointList(pointList: any[], isSearch?: boolean) {
          })
          index > -1 && (activeCoursewareIndex.value = index)
       }
-      flattenCoursewareList.value = flattenCoursewareListData
+      flattenCoursewareList.value = deepCopy(flattenCoursewareListData)
    }
    tempCoursewareList.value = list
-   tempFlattenCoursewareList.value = flattenCoursewareListData
+   tempFlattenCoursewareList.value = deepCopy(flattenCoursewareListData)
 }
 function filterPointList(pointList: any[], parentData?: { ids: string[]; name: string }): any[] {
    // 设置父级及以上id数组和父级name
@@ -422,6 +429,7 @@ function handleChangeCourseware(index: -1 | 1) {
 }
 function handleCourseClick(value: any) {
    // 选择之后初始化数据
+   searchObj.search = JSON.parse(JSON.stringify(searchObj.queryStr))
    coursewareList.value = deepCopy(tempCoursewareList.value)
    flattenCoursewareList.value = deepCopy(tempFlattenCoursewareList.value)
    activeCoursewareIndex.value = flattenCoursewareList.value.findIndex((item: any) => {
@@ -533,6 +541,7 @@ function handleToolClick(type: string) {
       drawerMenuShow.value = true
    } else if (type === "point") {
       tempCoursewareList.value = deepCopy(coursewareList.value)
+      searchObj.queryStr = JSON.parse(JSON.stringify(searchObj.search))
       drawerShow.value = true
    }
 }
@@ -661,7 +670,6 @@ function onTitleTip(type: "phaseGoals" | "checkItem", text: string) {
 
 function handleQuery() {
    //
-   // handleGetDetailList(props.modalData.id, true, queryStr.value)
    searchObj.isSearch = true
    getLessCoursewareList()
 }
@@ -922,4 +930,15 @@ function handleQuery() {
       }
    }
 }
+.empty {
+   height: calc(100vh - 54px);
+   :deep(.el-empty__image) {
+      width: 238px;
+   }
+
+   :deep(.el-empty__description) {
+      font-size: 18px;
+      color: #aaa;
+   }
+}
 </style>