|
@@ -6,23 +6,27 @@ import Dictionary from "@/components/dictionary"
|
|
|
import MyInput from "@/components/myInput"
|
|
|
import { NImage, NPopselect, NSpin } from "naive-ui"
|
|
|
// import PlayLoading from "./component/play-loading"
|
|
|
+import PlayItem from "./component/play-item"
|
|
|
import icon_default from "../../img/cloudPractice/icon_default.png"
|
|
|
-// import iconBtnPause from "../../img/cloudPractice/icon-btn-pause.png"
|
|
|
+import iconBtnPause from "../../img/cloudPractice/icon-btn-pause.png"
|
|
|
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 { httpAjaxErrMsg } from "@/plugin/httpAjax"
|
|
|
-import { queryPage2_gym, querySubjectIds_gym, queryTree_gym } from "@/api/cloudPractice.api"
|
|
|
+import { queryPage2_gym, queryPage2_gyt, querySubjectIds_gym, querySubjectIds_gyt, queryTree_gym, queryTree_gyt } from "@/api/cloudPractice.api"
|
|
|
// import { getToken } from "@/libs/auth"
|
|
|
-import { URL_TEACH_GYM } from "@/config"
|
|
|
+// import { URL_TEACH_GYM } from "@/config"
|
|
|
import axios from "axios"
|
|
|
import { getInstrumentName } from "@/libs/instruments"
|
|
|
import { formatXML, getCustomInfo, onlyVisible } from "./instrument"
|
|
|
-// import { useDataSearchObj } from "./useData"
|
|
|
+import { useFunction } from "./useData"
|
|
|
+import userStore from "@/store/modules/user"
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: "cloudPractice",
|
|
|
setup() {
|
|
|
+ const userStoreHook = userStore()
|
|
|
+ const { goToCloud } = useFunction()
|
|
|
const navs = [
|
|
|
{
|
|
|
name: "主页",
|
|
@@ -53,20 +57,54 @@ export default defineComponent({
|
|
|
list: [] as any[],
|
|
|
searchStatus: false,
|
|
|
queryStr: "", // 搜索条件
|
|
|
- selectedPartIndex: 0
|
|
|
+ partList: [] as any[],
|
|
|
+ partNames: [] as any[],
|
|
|
+ selectedPartName: "" as any,
|
|
|
+ selectedPartIndex: 0,
|
|
|
+ partXmlIndex: 0,
|
|
|
+ playState: "pause" as "play" | "pause", // 播放状态
|
|
|
+ showPlayer: false // 是否显示播放器
|
|
|
})
|
|
|
+ const partColumns = ref<any>([])
|
|
|
|
|
|
/** 选中的item */
|
|
|
const activeItem = computed(() => {
|
|
|
- return state.list[state.listActive] || {}
|
|
|
+ const list = state.list[state.listActive] || {}
|
|
|
+ const mp3 = {
|
|
|
+ GYT: "",
|
|
|
+ GYM: list?.musicSheetType === "CONCERT" ? list?.metronomeUrl : list?.metronomeMp3Url || list?.mp3Url,
|
|
|
+ KLX: ""
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ id: list?.id,
|
|
|
+ name: list?.name,
|
|
|
+ background: list?.background,
|
|
|
+ xmlUrl: list?.xmlUrl,
|
|
|
+ musicSheetType: list?.musicSheetType,
|
|
|
+ audioFileUrl: mp3[userStoreHook.roles!]
|
|
|
+ }
|
|
|
})
|
|
|
- // 固定五线谱
|
|
|
- const musicImg = computed(() => {
|
|
|
- const img = activeItem.value?.musicImg || activeItem.value?.musicSvg
|
|
|
- return img ? img.split(",") : []
|
|
|
+
|
|
|
+ const songPrevNextStatus = computed(() => {
|
|
|
+ let prev = true,
|
|
|
+ next = true
|
|
|
+ if (state.listActive === 0) {
|
|
|
+ prev = false
|
|
|
+ }
|
|
|
+
|
|
|
+ if (state.listActive >= state.list.length - 1) {
|
|
|
+ next = false
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ prev,
|
|
|
+ next
|
|
|
+ }
|
|
|
})
|
|
|
|
|
|
const loading = ref(false)
|
|
|
+ const staffLoading = ref(false)
|
|
|
const storeData = shallowRef<any[]>([])
|
|
|
const handleSearchList_gym = async () => {
|
|
|
loading.value = true
|
|
@@ -99,6 +137,17 @@ export default defineComponent({
|
|
|
label: "全部声部",
|
|
|
value: -1
|
|
|
})
|
|
|
+
|
|
|
+ const userSubjectId = userStoreHook.userInfo.subjectId
|
|
|
+ if (userSubjectId) {
|
|
|
+ const tempSubjectId = userSubjectId.split(",")[0]
|
|
|
+ state.subjectList.forEach((item: any) => {
|
|
|
+ // 判断是否存在声部编号
|
|
|
+ if (item.value === Number(tempSubjectId)) {
|
|
|
+ state.subjectId = Number(tempSubjectId)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -126,15 +175,76 @@ export default defineComponent({
|
|
|
if (Array.isArray(result.rows)) {
|
|
|
state.list = [...state.list, ...result.rows]
|
|
|
state.finshed = state.page >= result.totalPage
|
|
|
+ } else {
|
|
|
+ state.finshed = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 管乐团数据查询 */
|
|
|
+ const handleSearchList_gyt = async () => {
|
|
|
+ loading.value = true
|
|
|
+ await httpAjaxErrMsg(queryTree_gyt).then(res => {
|
|
|
+ loading.value = false
|
|
|
+ if (res.code === 200) {
|
|
|
+ storeData.value = res.data || []
|
|
|
+
|
|
|
+ setDefaultData()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
- // 是否显示总谱
|
|
|
- // const selectMusic = data.list[data.listActive];
|
|
|
- // if (selectMusic && selectMusic.isScoreRender && data.listActive === 0) {
|
|
|
- // data.musicInstrumentIndex = 999;
|
|
|
- // }
|
|
|
+ const handleGetSubject_gyt = async () => {
|
|
|
+ loading.value = true
|
|
|
+ await httpAjaxErrMsg(querySubjectIds_gyt, {
|
|
|
+ enableFlag: true,
|
|
|
+ page: 1,
|
|
|
+ rows: 100
|
|
|
+ }).then(res => {
|
|
|
+ loading.value = false
|
|
|
+ if (res.code === 200) {
|
|
|
+ const result = res.data || []
|
|
|
|
|
|
- // await analyzeXml();
|
|
|
- // musicIframeLoad();
|
|
|
+ state.subjectList = result.map((item: any) => {
|
|
|
+ return {
|
|
|
+ label: item.name,
|
|
|
+ value: item.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ state.subjectList.unshift({
|
|
|
+ label: "全部声部",
|
|
|
+ value: -1
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ const handleGetList_gyt = async () => {
|
|
|
+ loading.value = true
|
|
|
+ const params = {
|
|
|
+ page: state.page,
|
|
|
+ rows: state.rows,
|
|
|
+ musicSubject: state.subjectId === -1 ? null : state.subjectId,
|
|
|
+ musicSheetCategoriesId: state.typeId === -1 ? state.levelId : state.typeId,
|
|
|
+ keyword: state.queryStr,
|
|
|
+ status: 1
|
|
|
+ }
|
|
|
+ console.log(state.typeId, state.levelId, "level")
|
|
|
+ await httpAjaxErrMsg(queryPage2_gyt, params).then(res => {
|
|
|
+ loading.value = false
|
|
|
+ if (res.code === 200) {
|
|
|
+ const result = res.data || []
|
|
|
+
|
|
|
+ if (state.reshing) {
|
|
|
+ state.list = []
|
|
|
+ state.reshing = false
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Array.isArray(result.rows)) {
|
|
|
+ state.list = [...state.list, ...result.rows]
|
|
|
+ state.finshed = state.page >= result.totalPage
|
|
|
} else {
|
|
|
state.finshed = true
|
|
|
}
|
|
@@ -142,15 +252,49 @@ export default defineComponent({
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ /** 条件查询 */
|
|
|
+ const handleAllSearchList = async () => {
|
|
|
+ // GYM,GYT,KLX 区分 查询搜索条件数据
|
|
|
+ if (userStoreHook.roles === "GYM") {
|
|
|
+ await handleSearchList_gym()
|
|
|
+ } else if (userStoreHook.roles === "GYT") {
|
|
|
+ await handleSearchList_gyt()
|
|
|
+ } else if (userStoreHook.roles === "KLX") {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const handleAllGetSubject = async () => {
|
|
|
+ // GYM,GYT,KLX 区分 查询声部数据
|
|
|
+ if (userStoreHook.roles === "GYM") {
|
|
|
+ await handleGetSubject_gym()
|
|
|
+ } else if (userStoreHook.roles === "GYT") {
|
|
|
+ await handleGetSubject_gyt()
|
|
|
+ } else if (userStoreHook.roles === "KLX") {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const handleAllGetList = async () => {
|
|
|
+ // GYM,GYT,KLX 区分 查询声部数据·
|
|
|
+ if (userStoreHook.roles === "GYM") {
|
|
|
+ await handleGetList_gym()
|
|
|
+ } else if (userStoreHook.roles === "GYT") {
|
|
|
+ await handleGetList_gyt()
|
|
|
+ } else if (userStoreHook.roles === "KLX") {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/** 初始化数据 */
|
|
|
const setDefaultData = (type?: "first" | "category" | "level" | "type") => {
|
|
|
- if (storeData.value.length > 0) {
|
|
|
+ if (storeData.value.length > 0 && !["category", "level", "type"].includes(type as any)) {
|
|
|
let result: any = []
|
|
|
if (type === "first" && state.firstTreeId) {
|
|
|
result = storeData.value.find((item: any) => item.id === state.firstTreeId)?.sysMusicScoreCategoriesList || []
|
|
|
} else {
|
|
|
- state.firstTreeId = storeData.value[1]?.id
|
|
|
- result = storeData.value[1]?.sysMusicScoreCategoriesList || []
|
|
|
+ state.firstTreeId = storeData.value[0]?.id
|
|
|
+ result = storeData.value[0]?.sysMusicScoreCategoriesList || []
|
|
|
}
|
|
|
state.categoryList = result.map((item: any) => {
|
|
|
return {
|
|
@@ -160,7 +304,7 @@ export default defineComponent({
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
- if (state.categoryList.length > 0) {
|
|
|
+ if (state.categoryList.length > 0 && !["level", "type"].includes(type as any)) {
|
|
|
let result: any = []
|
|
|
if (type === "category" && state.categoryId) {
|
|
|
result = state.categoryList.find((item: any) => item.value === state.categoryId)?.sysMusicScoreCategoriesList || []
|
|
@@ -202,10 +346,10 @@ export default defineComponent({
|
|
|
}
|
|
|
|
|
|
const __init = async () => {
|
|
|
- await handleSearchList_gym()
|
|
|
- handleGetSubject_gym()
|
|
|
- await handleGetList_gym()
|
|
|
-
|
|
|
+ await handleAllSearchList()
|
|
|
+ await handleAllGetSubject()
|
|
|
+ await handleAllGetList()
|
|
|
+ await toDetail()
|
|
|
renderStaff()
|
|
|
}
|
|
|
|
|
@@ -214,23 +358,69 @@ export default defineComponent({
|
|
|
const handleResh = () => {
|
|
|
if (loading.value || state.finshed) return
|
|
|
state.page = state.page + 1
|
|
|
- handleGetList_gym()
|
|
|
+ handleAllGetList()
|
|
|
}
|
|
|
|
|
|
const handleGetList = async () => {
|
|
|
state.listActive = 0
|
|
|
- // data.showPlayer = false;
|
|
|
- // data.playState = 'pause';
|
|
|
+ state.showPlayer = false
|
|
|
+ state.playState = "pause"
|
|
|
document.querySelector(".musicList-container")?.scroll(0, 0)
|
|
|
state.page = 1
|
|
|
state.finshed = false
|
|
|
state.reshing = true
|
|
|
- await handleGetList_gym()
|
|
|
+ await handleAllGetList()
|
|
|
+ }
|
|
|
+
|
|
|
+ const toDetail = async () => {
|
|
|
+ const row: any = activeItem.value
|
|
|
+ if (row.musicSheetType === "SINGLE") {
|
|
|
+ loading.value = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+ console.log(row, "row")
|
|
|
+ state.partNames = await getPartNames(row.xmlUrl)
|
|
|
+ let partList = row.background || []
|
|
|
+ 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 === item.track)
|
|
|
+ return {
|
|
|
+ text: item.track + (instrumentName ? `(${instrumentName})` : ""),
|
|
|
+ instrumentName: instrumentName,
|
|
|
+ xmlIndex,
|
|
|
+ value: index
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // 初始化数据
|
|
|
+ const defaultShowStaff = partColumns.value[state.selectedPartIndex]
|
|
|
+ console.log(defaultShowStaff, partList)
|
|
|
+ state.selectedPartName = defaultShowStaff?.instrumentName
|
|
|
+ state.partXmlIndex = defaultShowStaff?.xmlIndex
|
|
|
+
|
|
|
+ console.log(partColumns.value, "partColumns partColumns")
|
|
|
+ }
|
|
|
+
|
|
|
+ const getPartNames = async (xmlUrl: string) => {
|
|
|
+ const partNames: string[] = []
|
|
|
+ try {
|
|
|
+ const res: any = await axios.get(xmlUrl)
|
|
|
+ const xml: any = new DOMParser().parseFromString(res, "text/xml")
|
|
|
+ for (const item of xml.getElementsByTagName("part-name")) {
|
|
|
+ if (item.textContent) {
|
|
|
+ partNames.push(item.textContent)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ return partNames.filter((text: string) => text.toLocaleUpperCase() !== "COMMON") || []
|
|
|
}
|
|
|
|
|
|
const musicIframeLoad = async () => {
|
|
|
const iframeRef: any = document.getElementById("staffIframeRef")
|
|
|
if (iframeRef && iframeRef.contentWindow?.renderXml) {
|
|
|
+ staffLoading.value = true
|
|
|
const res = await axios.get(activeItem.value.xmlUrl)
|
|
|
const parseXmlInfo = getCustomInfo(res.data)
|
|
|
const xml = formatXML(parseXmlInfo.parsedXML)
|
|
@@ -241,6 +431,7 @@ export default defineComponent({
|
|
|
const resetRender = async () => {
|
|
|
const iframeRef: any = document.getElementById("staffIframeRef")
|
|
|
if (iframeRef && iframeRef.contentWindow?.renderXml) {
|
|
|
+ staffLoading.value = true
|
|
|
const res = await axios.get(activeItem.value.xmlUrl)
|
|
|
const parseXmlInfo = getCustomInfo(res.data)
|
|
|
const xml = formatXML(parseXmlInfo.parsedXML)
|
|
@@ -258,6 +449,43 @@ export default defineComponent({
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /** 音频控制 */
|
|
|
+ const handleChangeAudio = (type: "play" | "pause" | "pre" | "next") => {
|
|
|
+ if (type === "play") {
|
|
|
+ state.playState = "play"
|
|
|
+ } else if (type === "pause") {
|
|
|
+ state.playState = "pause"
|
|
|
+ } else if (type === "pre") {
|
|
|
+ if (state.list[state.listActive - 1]) {
|
|
|
+ handlePlay(state.list[state.listActive - 1])
|
|
|
+ }
|
|
|
+ } else if (type === "next") {
|
|
|
+ if (state.list[state.listActive + 1]) {
|
|
|
+ handlePlay(state.list[state.listActive + 1])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 播放曲目 */
|
|
|
+ const handlePlay = (item: any) => {
|
|
|
+ const index = state.list.findIndex((_item: any) => _item.id === item.id)
|
|
|
+ if (index > -1) {
|
|
|
+ if (state.listActive === index) {
|
|
|
+ state.playState = state.playState === "play" ? "pause" : "play"
|
|
|
+ } else {
|
|
|
+ state.playState = "play"
|
|
|
+ }
|
|
|
+ state.showPlayer = true
|
|
|
+ state.listActive = index
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const showLoading = async (e: any) => {
|
|
|
+ if (e.data?.api === "musicStaffRender") {
|
|
|
+ staffLoading.value = e.data.loading
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
const obv = new IntersectionObserver(entries => {
|
|
|
if (entries[0].intersectionRatio > 0) {
|
|
@@ -265,6 +493,8 @@ export default defineComponent({
|
|
|
}
|
|
|
})
|
|
|
obv.observe(spinRef.value)
|
|
|
+
|
|
|
+ window.addEventListener("message", showLoading)
|
|
|
})
|
|
|
return () => (
|
|
|
<NavContainer navs={navs}>
|
|
@@ -292,26 +522,29 @@ export default defineComponent({
|
|
|
|
|
|
<div class={[styles.musicList, "musicList-container"]}>
|
|
|
<div class={styles.searchHeader}>
|
|
|
- <div class={[styles.categorySection]}>
|
|
|
- <NPopselect
|
|
|
- options={state.categoryList}
|
|
|
- v-model:value={state.categoryId}
|
|
|
- onUpdate:value={(val: any) => {
|
|
|
- const item = state.categoryList.find((item: any) => item.value === val)
|
|
|
- console.log(item, "item")
|
|
|
- if (item) {
|
|
|
- state.categoryName = item.label
|
|
|
- state.categoryId = item.value
|
|
|
- setDefaultData("category")
|
|
|
- handleGetList()
|
|
|
- }
|
|
|
- }}
|
|
|
- trigger="click"
|
|
|
- class={"PopSelect"}
|
|
|
- >
|
|
|
- <span class={styles.iconTagName}>{state.categoryName}</span>
|
|
|
- </NPopselect>
|
|
|
- </div>
|
|
|
+ {state.categoryList.length > 1 && (
|
|
|
+ <div class={[styles.categorySection]}>
|
|
|
+ <NPopselect
|
|
|
+ options={state.categoryList}
|
|
|
+ v-model:value={state.categoryId}
|
|
|
+ onUpdate:value={(val: any) => {
|
|
|
+ const item = state.categoryList.find((item: any) => item.value === val)
|
|
|
+ console.log(item, "item")
|
|
|
+ if (item) {
|
|
|
+ state.categoryName = item.label
|
|
|
+ state.categoryId = item.value
|
|
|
+ setDefaultData("category")
|
|
|
+ handleGetList()
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ trigger="click"
|
|
|
+ class={"PopSelect"}
|
|
|
+ >
|
|
|
+ <span class={styles.iconTagName}>{state.categoryName}</span>
|
|
|
+ </NPopselect>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+
|
|
|
<div class={styles.searchMore}>
|
|
|
<div class={styles.searchSection}>
|
|
|
<Dictionary
|
|
@@ -357,15 +590,18 @@ export default defineComponent({
|
|
|
v-model={state.queryStr}
|
|
|
height={42}
|
|
|
placeholder="请输入曲目关键词"
|
|
|
- // @keyup.enter="handleQuery"
|
|
|
- // @input="handleInputQuery"
|
|
|
+ onKeyup={(e: any) => {
|
|
|
+ if (e.code === "Enter" || e.key === "Enter") {
|
|
|
+ handleGetList()
|
|
|
+ }
|
|
|
+ }}
|
|
|
onHandleQuery={handleGetList}
|
|
|
clearable
|
|
|
/>
|
|
|
)}
|
|
|
</div>
|
|
|
|
|
|
- <div class={styles.wrapList}>
|
|
|
+ <div class={[styles.wrapList, !state.list.length && !loading.value && styles.wrapListEmpty]}>
|
|
|
{state.list.map((item: any, index: number) => (
|
|
|
<div
|
|
|
class={[styles.item, index === state.listActive && styles.active]}
|
|
@@ -401,55 +637,81 @@ export default defineComponent({
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class={styles.btnSection}>
|
|
|
- <div class={styles.btn}>
|
|
|
- 播放
|
|
|
- <img src={iconBtnPlay as any} />
|
|
|
+ <div
|
|
|
+ class={styles.btn}
|
|
|
+ onClick={(e: any) => {
|
|
|
+ e.stopPropagation()
|
|
|
+ handlePlay(item)
|
|
|
+ if (state.listActive === index && state.playState === "play") {
|
|
|
+ musicIframeLoad()
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {state.listActive === index && (
|
|
|
+ <>
|
|
|
+ {state.playState === "pause" ? "播放" : "暂停"}
|
|
|
+ <img src={state.playState === "pause" ? iconBtnPlay : (iconBtnPause as any)} />
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ {state.listActive !== index && (
|
|
|
+ <>
|
|
|
+ 播放
|
|
|
+ <img src={iconBtnPlay as any} />
|
|
|
+ </>
|
|
|
+ )}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
))}
|
|
|
|
|
|
+ {!state.list.length && !loading.value && (
|
|
|
+ <ElEmpty class={styles.empty} image={require("@/img/layout/empty.png")} description="暂无结果" />
|
|
|
+ )}
|
|
|
+
|
|
|
<div ref={spinRef} class={[styles.loadingWrap, state.finshed && styles.showLoading]}>
|
|
|
<NSpin show={true} stroke="#FF531C"></NSpin>
|
|
|
</div>
|
|
|
</div>
|
|
|
- {/* <el-empty class="empty" v-if="!listData.length && !loading" :image="require('@/img/layout/empty.png')" description="暂无搜索结果" /> */}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class={styles.rightContainer}>
|
|
|
- <div class={styles.musicName}>{activeItem.value.name}</div>
|
|
|
- <div class={styles.staffImgs}>
|
|
|
- {state.iframeSrc || musicImg.value.length > 0 ? (
|
|
|
- <iframe
|
|
|
- id="staffIframeRef"
|
|
|
- style={{
|
|
|
- // opacity: loading.value ? 0 : 1,
|
|
|
- width: "100%",
|
|
|
- height: "100%"
|
|
|
- }}
|
|
|
- src={state.iframeSrc}
|
|
|
- onLoad={musicIframeLoad}
|
|
|
- ></iframe>
|
|
|
- ) : (
|
|
|
- musicImg.value.map((item: string) => {
|
|
|
- return <img src={item} key={item} />
|
|
|
- })
|
|
|
- )}
|
|
|
- </div>
|
|
|
+ <i class={styles.leftArrow}></i>
|
|
|
+
|
|
|
+ <NSpin show={staffLoading.value} stroke="#FF531C">
|
|
|
+ <div class={styles.musicName}>{activeItem.value.name}</div>
|
|
|
+ <div class={[styles.staffImgs, !state.list.length && !loading.value && styles.staffImgsEmpty]}>
|
|
|
+ {state.iframeSrc && activeItem.value?.id && (
|
|
|
+ <iframe
|
|
|
+ id="staffIframeRef"
|
|
|
+ style={{
|
|
|
+ // opacity: loading.value ? 0 : 1,
|
|
|
+ width: "100%",
|
|
|
+ height: "100%"
|
|
|
+ }}
|
|
|
+ src={state.iframeSrc}
|
|
|
+ onLoad={musicIframeLoad}
|
|
|
+ ></iframe>
|
|
|
+ )}
|
|
|
+
|
|
|
+ {!loading.value && !activeItem.value?.id && (
|
|
|
+ <ElEmpty class={styles.empty} image={require("@/img/layout/empty.png")} description="暂无结果" />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </NSpin>
|
|
|
|
|
|
<img
|
|
|
- // style={{
|
|
|
- // display: activeItem.value.id ? '' : 'none'
|
|
|
- // }}
|
|
|
+ style={{
|
|
|
+ display: activeItem.value?.id ? "" : "none"
|
|
|
+ }}
|
|
|
class={[styles.goBtn]}
|
|
|
src={btnSubmit as any}
|
|
|
- onClick={() => {}}
|
|
|
+ onClick={() => goToCloud(activeItem.value.id)}
|
|
|
/>
|
|
|
|
|
|
<div
|
|
|
class={styles.rightBtns}
|
|
|
- // style={{ display: activeItem.value.id ? '' : 'none' }}
|
|
|
+ style={{ display: activeItem.value.id && activeItem.value.musicSheetType === "CONCERT" ? "" : "none" }}
|
|
|
>
|
|
|
<NPopselect
|
|
|
// options={data.trackList}
|
|
@@ -458,12 +720,7 @@ export default defineComponent({
|
|
|
onUpdate:value={async () => {
|
|
|
// await analyzeXml();
|
|
|
// //
|
|
|
- // data.trackName =
|
|
|
- // data.trackList.find(
|
|
|
- // (item: any) =>
|
|
|
- // item.value === data.musicInstrumentIndex
|
|
|
- // )?.label || '切换声部';
|
|
|
- // musicIframeLoad();
|
|
|
+ // musicIfrcmeLoad();
|
|
|
}}
|
|
|
class={[styles.popSelect]}
|
|
|
>
|
|
@@ -473,6 +730,19 @@ export default defineComponent({
|
|
|
</div>
|
|
|
</div>
|
|
|
</ElScrollbar>
|
|
|
+
|
|
|
+ {state.list.length !== 0 && activeItem.value.audioFileUrl && (
|
|
|
+ <PlayItem
|
|
|
+ show={state.showPlayer}
|
|
|
+ playState={state.playState}
|
|
|
+ songPrevNextStatus={songPrevNextStatus.value}
|
|
|
+ item={activeItem.value}
|
|
|
+ onChange={value => handleChangeAudio(value)}
|
|
|
+ onShow={(status: boolean) => {
|
|
|
+ state.showPlayer = status
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )}
|
|
|
</NavContainer>
|
|
|
)
|
|
|
}
|