lex-xin 6 月之前
父節點
當前提交
792778ee89

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

@@ -24,7 +24,7 @@ export const querySubjectIds_gym = (data?: any) => {
 export const queryPage2_gym = (data: any) => {
 export const queryPage2_gym = (data: any) => {
    return httpAxios_gym.axioseRquest({
    return httpAxios_gym.axioseRquest({
       method: "get",
       method: "get",
-      url: "/api-teacher/sysMusicScore/queryPage2",
+      url: "/api-teacher/sysMusicScore/queryPageSimple",
       params: data
       params: data
    })
    })
 }
 }

+ 178 - 66
src/views/cloudPractice/cloudPractice.tsx

@@ -59,6 +59,7 @@ export default defineComponent({
          reshing: false,
          reshing: false,
          page: 1,
          page: 1,
          rows: 20,
          rows: 20,
+         details: {} as any,
          iframeSrc: "",
          iframeSrc: "",
          listActive: 0, // 当前选中的对象
          listActive: 0, // 当前选中的对象
          firstTreeId: null as any, // 左侧
          firstTreeId: null as any, // 左侧
@@ -94,22 +95,22 @@ export default defineComponent({
          let tempList: any = {}
          let tempList: any = {}
 
 
          if (userStoreHook.roles === "GYM") {
          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 = {
             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") {
          } else if (userStoreHook.roles === "GYT") {
             tempList = {
             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).then(res => {
+            loading.value = false
+            if (res.code === 200) {
+               const result = res.data || {}
+               state.details = result
+            }
+         })
+      }
+
       /** 管乐团数据查询 */
       /** 管乐团数据查询 */
       const handleSearchList_gyt = async () => {
       const handleSearchList_gyt = async () => {
          loading.value = true
          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") => {
       const setDefaultData = async (type?: "first" | "category" | "level" | "type") => {
          if (userStoreHook.roles === "GYM") {
          if (userStoreHook.roles === "GYM") {
@@ -600,7 +625,7 @@ export default defineComponent({
                }
                }
             })
             })
 
 
-            await handleGetSubject_gym()
+            type && (await handleGetSubject_gym())
          }
          }
 
 
          if (state.levelList.length > 0) {
          if (state.levelList.length > 0) {
@@ -705,6 +730,7 @@ export default defineComponent({
          await handleAllSearchList()
          await handleAllSearchList()
          await handleAllGetSubject()
          await handleAllGetSubject()
          await handleAllGetList()
          await handleAllGetList()
+         await handleGetDetail() // 默认获取数据
          await toDetail()
          await toDetail()
          renderStaff()
          renderStaff()
       }
       }
@@ -739,25 +765,105 @@ export default defineComponent({
          await handleAllGetList()
          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.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 () => {
       const toDetail = async () => {
+         if (userStoreHook.roles === "GYM") {
+            await toDetailGYM()
+            return
+         }
          const row: any = activeItem.value
          const row: any = activeItem.value
          state.imgs = []
          state.imgs = []
          if (row.musicSheetType === "SINGLE") {
          if (row.musicSheetType === "SINGLE") {
             loading.value = false
             loading.value = false
             state.musicPdfUrl = row.musicPdfUrl
             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)
          state.partNames = await getPartNames(row.xmlUrl)
          let partList = row.background || []
          let partList = row.background || []
@@ -800,31 +906,31 @@ export default defineComponent({
          }
          }
 
 
          // gym 现在单独处理 管乐迷根据查询条件来筛选谱面
          // 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.selectedPartName = defaultShowStaff?.instrumentName
          state.selectedTrack = defaultShowStaff?.track
          state.selectedTrack = defaultShowStaff?.track
          state.partXmlIndex = defaultShowStaff?.xmlIndex
          state.partXmlIndex = defaultShowStaff?.xmlIndex
@@ -865,7 +971,6 @@ export default defineComponent({
             const res: any = await axios.get(activeItem.value.xmlUrl)
             const res: any = await axios.get(activeItem.value.xmlUrl)
             const parseXmlInfo = getCustomInfo(res.data)
             const parseXmlInfo = getCustomInfo(res.data)
             const xml = formatXML(parseXmlInfo.parsedXML)
             const xml = formatXML(parseXmlInfo.parsedXML)
-            console.log(activeItem.value, "activeItem.value")
             if (activeItem.value.isScoreRender) {
             if (activeItem.value.isScoreRender) {
                const canSelectTracks: any = []
                const canSelectTracks: any = []
                const background = activeItem.value.background || []
                const background = activeItem.value.background || []
@@ -882,7 +987,7 @@ export default defineComponent({
       const resetRender = async () => {
       const resetRender = async () => {
          const iframeRef: any = document.getElementById("staffIframeRef")
          const iframeRef: any = document.getElementById("staffIframeRef")
          if (userStoreHook.roles === "GYM") {
          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)
             // state.iframeSrc = getPreViewCloud(activeItem.value.id, state.partXmlIndex)
             return
             return
          }
          }
@@ -910,7 +1015,7 @@ export default defineComponent({
                // https://cdn.oss.dayaedu.com/daya202409/UODQffO.pdf
                // https://cdn.oss.dayaedu.com/daya202409/UODQffO.pdf
             } else {
             } else {
                if (userStoreHook.roles === "GYM") {
                if (userStoreHook.roles === "GYM") {
-                  state.iframeSrc = getPreViewCloud(activeItem.value.id, state.partXmlIndex)
+                  state.iframeSrc = getPreViewCloud(activeItem.value.id, state.partXmlIndex, state.selectedTrack)
                } else {
                } else {
                   state.iframeSrc = `/osmd/index.html`
                   state.iframeSrc = `/osmd/index.html`
                }
                }
@@ -1033,11 +1138,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 } =
          const { instrumentIds } =
             state.subjectList.find((item: any) => {
             state.subjectList.find((item: any) => {
                return item.value === state.subjectId
                return item.value === state.subjectId
@@ -1046,10 +1151,7 @@ export default defineComponent({
             //  GYM,GYT,KLX 区分   查询声部数据
             //  GYM,GYT,KLX 区分   查询声部数据
             let cbsDetails: any = []
             let cbsDetails: any = []
             if (userStoreHook.roles === "GYM") {
             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 === "GYT") {
                //
                //
             } else if (userStoreHook.roles === "KLX") {
             } else if (userStoreHook.roles === "KLX") {
@@ -1101,6 +1203,7 @@ export default defineComponent({
                                     state.firstTreeId = item.id
                                     state.firstTreeId = item.id
                                     await setDefaultData("first")
                                     await setDefaultData("first")
                                     await handleGetList()
                                     await handleGetList()
+                                    await handleGetDetail()
                                     searchContent()
                                     searchContent()
                                  }}
                                  }}
                               >
                               >
@@ -1126,6 +1229,7 @@ export default defineComponent({
                                           state.categoryId = item.value
                                           state.categoryId = item.value
                                           await setDefaultData("category")
                                           await setDefaultData("category")
                                           await handleGetList()
                                           await handleGetList()
+                                          await handleGetDetail()
                                           searchContent()
                                           searchContent()
                                        }
                                        }
                                     }}
                                     }}
@@ -1154,6 +1258,7 @@ export default defineComponent({
                                     placeholder="全部声部"
                                     placeholder="全部声部"
                                     onChange={async () => {
                                     onChange={async () => {
                                        await handleGetList()
                                        await handleGetList()
+                                       await handleGetDetail()
                                        searchContent()
                                        searchContent()
                                     }}
                                     }}
                                  />
                                  />
@@ -1169,6 +1274,7 @@ export default defineComponent({
                                        onChange={async () => {
                                        onChange={async () => {
                                           setDefaultData("level")
                                           setDefaultData("level")
                                           await handleGetList()
                                           await handleGetList()
+                                          await handleGetDetail()
                                           searchContent()
                                           searchContent()
                                        }}
                                        }}
                                     />
                                     />
@@ -1188,6 +1294,7 @@ export default defineComponent({
                                        placeholder="分类"
                                        placeholder="分类"
                                        onChange={async () => {
                                        onChange={async () => {
                                           await handleGetList()
                                           await handleGetList()
+                                          await handleGetDetail()
                                           searchContent()
                                           searchContent()
                                        }}
                                        }}
                                     />
                                     />
@@ -1207,11 +1314,13 @@ export default defineComponent({
                                  onKeyup={async (e: any) => {
                                  onKeyup={async (e: any) => {
                                     if (e.code === "Enter" || e.key === "Enter") {
                                     if (e.code === "Enter" || e.key === "Enter") {
                                        await handleGetList()
                                        await handleGetList()
+                                       await handleGetDetail()
                                        searchContent()
                                        searchContent()
                                     }
                                     }
                                  }}
                                  }}
                                  onHandleQuery={async () => {
                                  onHandleQuery={async () => {
                                     await handleGetList()
                                     await handleGetList()
+                                    await handleGetDetail()
                                     searchContent()
                                     searchContent()
                                  }}
                                  }}
                                  clearable
                                  clearable
@@ -1230,6 +1339,7 @@ export default defineComponent({
                                     state.listActive = index
                                     state.listActive = index
                                     state.selectedPartIndex = 0
                                     state.selectedPartIndex = 0
                                     state.partXmlIndex = 0
                                     state.partXmlIndex = 0
+                                    await handleGetDetail()
                                     searchContent()
                                     searchContent()
                                  }}
                                  }}
                               >
                               >
@@ -1371,7 +1481,9 @@ export default defineComponent({
                            }}
                            }}
                         </NTooltip>
                         </NTooltip>
                      </div>
                      </div>
-                     <div style={{ display: activeItem.value.musicSheetType === "CONCERT" ? "" : "none" }}>
+                     <div
+                        style={{ display: activeItem.value.musicSheetType === "CONCERT" || state.details.musicSheetType === "CONCERT" ? "" : "none" }}
+                     >
                         <NPopselect
                         <NPopselect
                            options={partColumns.value}
                            options={partColumns.value}
                            placement="bottom-end"
                            placement="bottom-end"

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

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

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

@@ -82,7 +82,6 @@ import userStore from "@/store/modules/user"
 const { handleGetDetailList, loading, searchLoading, listDetailData, listSearchData, activeCollapse, listData, pageNum, handlePage } =
 const { handleGetDetailList, loading, searchLoading, listDetailData, listSearchData, activeCollapse, listData, pageNum, handlePage } =
    useDataDetailList()
    useDataDetailList()
 import router from "@/router"
 import router from "@/router"
-import { c } from "naive-ui"
 const userStoreHook = userStore()
 const userStoreHook = userStore()
 
 
 const chooseType = ref<"classlist" | "search">("classlist")
 const chooseType = ref<"classlist" | "search">("classlist")