|  | @@ -96,6 +96,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                 xmlUrl: item?.xmlUrl,
 | 
	
		
			
				|  |  |                 musicSheetType: item?.musicSheetType,
 | 
	
		
			
				|  |  |                 audioFileUrl,
 | 
	
		
			
				|  |  | +               // titleImg: list?.titleImg,
 | 
	
		
			
				|  |  |                 isComberRender: false
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |           } else if (userStoreHook.roles === "GYT") {
 | 
	
	
		
			
				|  | @@ -106,7 +107,8 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                 xmlUrl: list?.xmlFileUrl,
 | 
	
		
			
				|  |  |                 musicSheetType: list?.musicSheetType,
 | 
	
		
			
				|  |  |                 audioFileUrl: list?.audioFileUrl,
 | 
	
		
			
				|  |  | -               isComberRender: list?.musicSubject === "1"
 | 
	
		
			
				|  |  | +               titleImg: list?.titleImg,
 | 
	
		
			
				|  |  | +               isComberRender: list?.musicSubjectId === "1"
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |           } else if (userStoreHook.roles === "KLX") {
 | 
	
		
			
				|  |  |              const item: any = list.background?.[0]
 | 
	
	
		
			
				|  | @@ -117,6 +119,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                 xmlUrl: list?.xmlFileUrl,
 | 
	
		
			
				|  |  |                 musicSheetType: list?.musicSheetType,
 | 
	
		
			
				|  |  |                 audioFileUrl: item?.audioFileUrl,
 | 
	
		
			
				|  |  | +               titleImg: list?.titleImg,
 | 
	
		
			
				|  |  |                 isComberRender: false
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |           }
 | 
	
	
		
			
				|  | @@ -158,7 +161,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        const handleGetSubject_gym = async () => {
 | 
	
		
			
				|  |  |           loading.value = true
 | 
	
		
			
				|  |  |           // , { categoriesId: state.categoryId || state.firstTreeId }
 | 
	
		
			
				|  |  | -         await httpAjaxErrMsg(querySubjectIds_gym).then(res => {
 | 
	
		
			
				|  |  | +         await httpAjaxErrMsg(querySubjectIds_gym, { categoriesId: state.firstTreeId }).then(res => {
 | 
	
		
			
				|  |  |              loading.value = false
 | 
	
		
			
				|  |  |              if (res.code === 200) {
 | 
	
		
			
				|  |  |                 const result = res.data || []
 | 
	
	
		
			
				|  | @@ -518,7 +521,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        /** 初始化数据 */
 | 
	
		
			
				|  |  |        const setDefaultData = async (type?: "first" | "category" | "level" | "type") => {
 | 
	
		
			
				|  |  |           if (userStoreHook.roles === "GYM") {
 | 
	
		
			
				|  |  | -            initCategories_gym(type)
 | 
	
		
			
				|  |  | +            await initCategories_gym(type)
 | 
	
		
			
				|  |  |           } else if (userStoreHook.roles === "GYT") {
 | 
	
		
			
				|  |  |              initCategories_gyt(type)
 | 
	
		
			
				|  |  |           } else if (userStoreHook.roles === "KLX") {
 | 
	
	
		
			
				|  | @@ -526,7 +529,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |           }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      const initCategories_gym = (type?: "first" | "category" | "level" | "type") => {
 | 
	
		
			
				|  |  | +      const initCategories_gym = async (type?: "first" | "category" | "level" | "type") => {
 | 
	
		
			
				|  |  |           if (storeData.value.length > 0 && !["category", "level", "type"].includes(type as any)) {
 | 
	
		
			
				|  |  |              let result: any = []
 | 
	
		
			
				|  |  |              if (type === "first" && state.firstTreeId) {
 | 
	
	
		
			
				|  | @@ -542,6 +545,8 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                    sysMusicScoreCategoriesList: item.sysMusicScoreCategoriesList || []
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |              })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            await handleGetSubject_gym()
 | 
	
		
			
				|  |  |           }
 | 
	
		
			
				|  |  |           if (state.categoryList.length > 0 && !["level", "type"].includes(type as any)) {
 | 
	
		
			
				|  |  |              let result: any = []
 | 
	
	
		
			
				|  | @@ -819,260 +824,262 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        })
 | 
	
		
			
				|  |  |        return () => (
 | 
	
		
			
				|  |  |           <NavContainer navs={navs}>
 | 
	
		
			
				|  |  | -            <ElScrollbar class="elScrollbar">
 | 
	
		
			
				|  |  | -               <div class={styles.cloudPractice}>
 | 
	
		
			
				|  |  | -                  <div class={styles.leftContainer}>
 | 
	
		
			
				|  |  | -                     <div class={styles.details}>
 | 
	
		
			
				|  |  | -                        {storeData.value.length > 0 && (
 | 
	
		
			
				|  |  | -                           <ElScrollbar class={styles.leftSection}>
 | 
	
		
			
				|  |  | -                              {/* 基 础 云 练 */}
 | 
	
		
			
				|  |  | -                              {storeData.value.map((item: any) => (
 | 
	
		
			
				|  |  | -                                 <div
 | 
	
		
			
				|  |  | -                                    class={[styles.leftSection_item, item.id === state.firstTreeId && styles.leftSection_item__active]}
 | 
	
		
			
				|  |  | -                                    onClick={async () => {
 | 
	
		
			
				|  |  | -                                       if (loading.value) return
 | 
	
		
			
				|  |  | -                                       state.firstTreeId = item.id
 | 
	
		
			
				|  |  | -                                       await setDefaultData("first")
 | 
	
		
			
				|  |  | -                                       await handleGetList()
 | 
	
		
			
				|  |  | -                                       await toDetail()
 | 
	
		
			
				|  |  | +            {/* <ElScrollbar class="elScrollbar"> */}
 | 
	
		
			
				|  |  | +            <div class={styles.cloudPractice}>
 | 
	
		
			
				|  |  | +               <div class={styles.leftContainer}>
 | 
	
		
			
				|  |  | +                  <div class={styles.details}>
 | 
	
		
			
				|  |  | +                     {storeData.value.length > 0 && (
 | 
	
		
			
				|  |  | +                        <ElScrollbar class={styles.leftSection}>
 | 
	
		
			
				|  |  | +                           {/* 基 础 云 练 */}
 | 
	
		
			
				|  |  | +                           {storeData.value.map((item: any) => (
 | 
	
		
			
				|  |  | +                              <div
 | 
	
		
			
				|  |  | +                                 class={[styles.leftSection_item, item.id === state.firstTreeId && styles.leftSection_item__active]}
 | 
	
		
			
				|  |  | +                                 onClick={async () => {
 | 
	
		
			
				|  |  | +                                    if (loading.value) return
 | 
	
		
			
				|  |  | +                                    state.firstTreeId = item.id
 | 
	
		
			
				|  |  | +                                    await setDefaultData("first")
 | 
	
		
			
				|  |  | +                                    await handleGetList()
 | 
	
		
			
				|  |  | +                                    await toDetail()
 | 
	
		
			
				|  |  | +                                 }}
 | 
	
		
			
				|  |  | +                              >
 | 
	
		
			
				|  |  | +                                 {item.name}
 | 
	
		
			
				|  |  | +                              </div>
 | 
	
		
			
				|  |  | +                           ))}
 | 
	
		
			
				|  |  | +                        </ElScrollbar>
 | 
	
		
			
				|  |  | +                     )}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                     <div class={[styles.musicList, "musicList-container"]}>
 | 
	
		
			
				|  |  | +                        <div class={styles.searchHeader}>
 | 
	
		
			
				|  |  | +                           {state.categoryList.length > 1 && (
 | 
	
		
			
				|  |  | +                              <div class={[styles.categorySection]}>
 | 
	
		
			
				|  |  | +                                 <NPopselect
 | 
	
		
			
				|  |  | +                                    placement="bottom-start"
 | 
	
		
			
				|  |  | +                                    disabled={loading.value}
 | 
	
		
			
				|  |  | +                                    options={state.categoryList}
 | 
	
		
			
				|  |  | +                                    v-model:value={state.categoryId}
 | 
	
		
			
				|  |  | +                                    onUpdate:value={async (val: any) => {
 | 
	
		
			
				|  |  | +                                       const item = state.categoryList.find((item: any) => item.value === val)
 | 
	
		
			
				|  |  | +                                       if (item) {
 | 
	
		
			
				|  |  | +                                          state.categoryName = item.label
 | 
	
		
			
				|  |  | +                                          state.categoryId = item.value
 | 
	
		
			
				|  |  | +                                          await setDefaultData("category")
 | 
	
		
			
				|  |  | +                                          await handleGetList()
 | 
	
		
			
				|  |  | +                                          await toDetail()
 | 
	
		
			
				|  |  | +                                       }
 | 
	
		
			
				|  |  |                                      }}
 | 
	
		
			
				|  |  | +                                    onUpdate:show={(value: any) => {
 | 
	
		
			
				|  |  | +                                       state.categoryShow = value
 | 
	
		
			
				|  |  | +                                    }}
 | 
	
		
			
				|  |  | +                                    trigger="click"
 | 
	
		
			
				|  |  | +                                    class={"PopSelect"}
 | 
	
		
			
				|  |  |                                   >
 | 
	
		
			
				|  |  | -                                    {item.name}
 | 
	
		
			
				|  |  | -                                 </div>
 | 
	
		
			
				|  |  | -                              ))}
 | 
	
		
			
				|  |  | -                           </ElScrollbar>
 | 
	
		
			
				|  |  | -                        )}
 | 
	
		
			
				|  |  | +                                    <span class={[styles.iconTagName, state.categoryShow && styles.show]}>
 | 
	
		
			
				|  |  | +                                       <span>{state.categoryName}</span>
 | 
	
		
			
				|  |  | +                                    </span>
 | 
	
		
			
				|  |  | +                                 </NPopselect>
 | 
	
		
			
				|  |  | +                              </div>
 | 
	
		
			
				|  |  | +                           )}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                        <div class={[styles.musicList, "musicList-container"]}>
 | 
	
		
			
				|  |  | -                           <div class={styles.searchHeader}>
 | 
	
		
			
				|  |  | -                              {state.categoryList.length > 1 && (
 | 
	
		
			
				|  |  | -                                 <div class={[styles.categorySection]}>
 | 
	
		
			
				|  |  | -                                    <NPopselect
 | 
	
		
			
				|  |  | -                                       placement="bottom-start"
 | 
	
		
			
				|  |  | -                                       disabled={loading.value}
 | 
	
		
			
				|  |  | -                                       options={state.categoryList}
 | 
	
		
			
				|  |  | -                                       v-model:value={state.categoryId}
 | 
	
		
			
				|  |  | -                                       onUpdate:value={async (val: any) => {
 | 
	
		
			
				|  |  | -                                          const item = state.categoryList.find((item: any) => item.value === val)
 | 
	
		
			
				|  |  | -                                          if (item) {
 | 
	
		
			
				|  |  | -                                             state.categoryName = item.label
 | 
	
		
			
				|  |  | -                                             state.categoryId = item.value
 | 
	
		
			
				|  |  | -                                             await setDefaultData("category")
 | 
	
		
			
				|  |  | -                                             await handleGetList()
 | 
	
		
			
				|  |  | -                                             await toDetail()
 | 
	
		
			
				|  |  | -                                          }
 | 
	
		
			
				|  |  | -                                       }}
 | 
	
		
			
				|  |  | -                                       onUpdate:show={(value: any) => {
 | 
	
		
			
				|  |  | -                                          state.categoryShow = value
 | 
	
		
			
				|  |  | +                           <div class={styles.searchMore}>
 | 
	
		
			
				|  |  | +                              <div class={styles.searchSection}>
 | 
	
		
			
				|  |  | +                                 <Dictionary
 | 
	
		
			
				|  |  | +                                    popperClass="classTypePopper"
 | 
	
		
			
				|  |  | +                                    v-model={state.subjectId}
 | 
	
		
			
				|  |  | +                                    height={42}
 | 
	
		
			
				|  |  | +                                    // disabled={loading.value}
 | 
	
		
			
				|  |  | +                                    options={state.subjectList}
 | 
	
		
			
				|  |  | +                                    placeholder="全部声部"
 | 
	
		
			
				|  |  | +                                    onChange={handleGetList}
 | 
	
		
			
				|  |  | +                                 />
 | 
	
		
			
				|  |  | +                                 {state.levelList.length ? (
 | 
	
		
			
				|  |  | +                                    <Dictionary
 | 
	
		
			
				|  |  | +                                       popperClass="classTypePopper"
 | 
	
		
			
				|  |  | +                                       v-model={state.levelId}
 | 
	
		
			
				|  |  | +                                       height={42}
 | 
	
		
			
				|  |  | +                                       // disabled={loading.value}
 | 
	
		
			
				|  |  | +                                       options={state.levelList}
 | 
	
		
			
				|  |  | +                                       placeholder="级别"
 | 
	
		
			
				|  |  | +                                       onChange={() => {
 | 
	
		
			
				|  |  | +                                          setDefaultData("level")
 | 
	
		
			
				|  |  | +                                          handleGetList()
 | 
	
		
			
				|  |  |                                         }}
 | 
	
		
			
				|  |  | -                                       trigger="click"
 | 
	
		
			
				|  |  | -                                       class={"PopSelect"}
 | 
	
		
			
				|  |  | -                                    >
 | 
	
		
			
				|  |  | -                                       <span class={[styles.iconTagName, state.categoryShow && styles.show]}>{state.categoryName}</span>
 | 
	
		
			
				|  |  | -                                    </NPopselect>
 | 
	
		
			
				|  |  | -                                 </div>
 | 
	
		
			
				|  |  | -                              )}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                              <div class={styles.searchMore}>
 | 
	
		
			
				|  |  | -                                 <div class={styles.searchSection}>
 | 
	
		
			
				|  |  | +                                    />
 | 
	
		
			
				|  |  | +                                 ) : null}
 | 
	
		
			
				|  |  | +                                 {state.typeList.length > 0 ? (
 | 
	
		
			
				|  |  |                                      <Dictionary
 | 
	
		
			
				|  |  |                                         popperClass="classTypePopper"
 | 
	
		
			
				|  |  | -                                       v-model={state.subjectId}
 | 
	
		
			
				|  |  | +                                       v-model={state.typeId}
 | 
	
		
			
				|  |  |                                         height={42}
 | 
	
		
			
				|  |  |                                         // disabled={loading.value}
 | 
	
		
			
				|  |  | -                                       options={state.subjectList}
 | 
	
		
			
				|  |  | -                                       placeholder="全部声部"
 | 
	
		
			
				|  |  | +                                       options={state.typeList}
 | 
	
		
			
				|  |  | +                                       propsOpt={{
 | 
	
		
			
				|  |  | +                                          labelField: "name",
 | 
	
		
			
				|  |  | +                                          valueField: "id"
 | 
	
		
			
				|  |  | +                                       }}
 | 
	
		
			
				|  |  | +                                       placeholder="分类"
 | 
	
		
			
				|  |  |                                         onChange={handleGetList}
 | 
	
		
			
				|  |  |                                      />
 | 
	
		
			
				|  |  | -                                    {state.levelList.length ? (
 | 
	
		
			
				|  |  | -                                       <Dictionary
 | 
	
		
			
				|  |  | -                                          popperClass="classTypePopper"
 | 
	
		
			
				|  |  | -                                          v-model={state.levelId}
 | 
	
		
			
				|  |  | -                                          height={42}
 | 
	
		
			
				|  |  | -                                          // disabled={loading.value}
 | 
	
		
			
				|  |  | -                                          options={state.levelList}
 | 
	
		
			
				|  |  | -                                          placeholder="级别"
 | 
	
		
			
				|  |  | -                                          onChange={() => {
 | 
	
		
			
				|  |  | -                                             setDefaultData("level")
 | 
	
		
			
				|  |  | -                                             handleGetList()
 | 
	
		
			
				|  |  | -                                          }}
 | 
	
		
			
				|  |  | -                                       />
 | 
	
		
			
				|  |  | -                                    ) : null}
 | 
	
		
			
				|  |  | -                                    {state.typeList.length > 0 ? (
 | 
	
		
			
				|  |  | -                                       <Dictionary
 | 
	
		
			
				|  |  | -                                          popperClass="classTypePopper"
 | 
	
		
			
				|  |  | -                                          v-model={state.typeId}
 | 
	
		
			
				|  |  | -                                          height={42}
 | 
	
		
			
				|  |  | -                                          // disabled={loading.value}
 | 
	
		
			
				|  |  | -                                          options={state.typeList}
 | 
	
		
			
				|  |  | -                                          propsOpt={{
 | 
	
		
			
				|  |  | -                                             labelField: "name",
 | 
	
		
			
				|  |  | -                                             valueField: "id"
 | 
	
		
			
				|  |  | -                                          }}
 | 
	
		
			
				|  |  | -                                          placeholder="分类"
 | 
	
		
			
				|  |  | -                                          onChange={handleGetList}
 | 
	
		
			
				|  |  | -                                       />
 | 
	
		
			
				|  |  | -                                    ) : null}
 | 
	
		
			
				|  |  | -                                 </div>
 | 
	
		
			
				|  |  | -                                 <div
 | 
	
		
			
				|  |  | -                                    class={[styles.btnSearch, state.searchStatus && styles.btnSearchActive]}
 | 
	
		
			
				|  |  | -                                    onClick={() => (state.searchStatus = !state.searchStatus)}
 | 
	
		
			
				|  |  | -                                 ></div>
 | 
	
		
			
				|  |  | +                                 ) : null}
 | 
	
		
			
				|  |  |                                </div>
 | 
	
		
			
				|  |  | -                              {state.searchStatus && (
 | 
	
		
			
				|  |  | -                                 <MyInput
 | 
	
		
			
				|  |  | -                                    class="queryCp"
 | 
	
		
			
				|  |  | -                                    v-model={state.queryStr}
 | 
	
		
			
				|  |  | -                                    height={42}
 | 
	
		
			
				|  |  | -                                    placeholder="请输入曲目关键词"
 | 
	
		
			
				|  |  | -                                    onKeyup={(e: any) => {
 | 
	
		
			
				|  |  | -                                       if (e.code === "Enter" || e.key === "Enter") {
 | 
	
		
			
				|  |  | -                                          handleGetList()
 | 
	
		
			
				|  |  | -                                       }
 | 
	
		
			
				|  |  | -                                    }}
 | 
	
		
			
				|  |  | -                                    onHandleQuery={handleGetList}
 | 
	
		
			
				|  |  | -                                    clearable
 | 
	
		
			
				|  |  | -                                 />
 | 
	
		
			
				|  |  | -                              )}
 | 
	
		
			
				|  |  | +                              <div
 | 
	
		
			
				|  |  | +                                 class={[styles.btnSearch, state.searchStatus && styles.btnSearchActive]}
 | 
	
		
			
				|  |  | +                                 onClick={() => (state.searchStatus = !state.searchStatus)}
 | 
	
		
			
				|  |  | +                              ></div>
 | 
	
		
			
				|  |  |                             </div>
 | 
	
		
			
				|  |  | +                           {state.searchStatus && (
 | 
	
		
			
				|  |  | +                              <MyInput
 | 
	
		
			
				|  |  | +                                 class="queryCp"
 | 
	
		
			
				|  |  | +                                 v-model={state.queryStr}
 | 
	
		
			
				|  |  | +                                 height={42}
 | 
	
		
			
				|  |  | +                                 placeholder="请输入曲目关键词"
 | 
	
		
			
				|  |  | +                                 onKeyup={(e: any) => {
 | 
	
		
			
				|  |  | +                                    if (e.code === "Enter" || e.key === "Enter") {
 | 
	
		
			
				|  |  | +                                       handleGetList()
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                 }}
 | 
	
		
			
				|  |  | +                                 onHandleQuery={handleGetList}
 | 
	
		
			
				|  |  | +                                 clearable
 | 
	
		
			
				|  |  | +                              />
 | 
	
		
			
				|  |  | +                           )}
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                           <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]}
 | 
	
		
			
				|  |  | -                                    onClick={async () => {
 | 
	
		
			
				|  |  | -                                       state.listActive = index
 | 
	
		
			
				|  |  | -                                       await toDetail()
 | 
	
		
			
				|  |  | -                                       resetRender()
 | 
	
		
			
				|  |  | -                                    }}
 | 
	
		
			
				|  |  | -                                 >
 | 
	
		
			
				|  |  | -                                    <div class={styles.itemInfo}>
 | 
	
		
			
				|  |  | -                                       <div class={styles.img}>
 | 
	
		
			
				|  |  | -                                          <NImage
 | 
	
		
			
				|  |  | -                                             lazy
 | 
	
		
			
				|  |  | -                                             objectFit="cover"
 | 
	
		
			
				|  |  | -                                             previewDisabled={true}
 | 
	
		
			
				|  |  | -                                             src={icon_default}
 | 
	
		
			
				|  |  | -                                             onLoad={(e: any) => {
 | 
	
		
			
				|  |  | -                                                ;(e.target as any).dataset.loaded = "true"
 | 
	
		
			
				|  |  | -                                             }}
 | 
	
		
			
				|  |  | -                                          />
 | 
	
		
			
				|  |  | -                                          <PlayLoading
 | 
	
		
			
				|  |  | -                                             class={[state.listActive === index && state.playState === "play" ? "" : styles.showPlayLoading]}
 | 
	
		
			
				|  |  | -                                          />
 | 
	
		
			
				|  |  | -                                       </div>
 | 
	
		
			
				|  |  | -                                       <div class={styles.title}>
 | 
	
		
			
				|  |  | -                                          <div class={styles.titleName}>
 | 
	
		
			
				|  |  | -                                             <ellipsisScroll title={item.name} />
 | 
	
		
			
				|  |  | -                                          </div>
 | 
	
		
			
				|  |  | -                                       </div>
 | 
	
		
			
				|  |  | -                                    </div>
 | 
	
		
			
				|  |  | -                                    <div class={styles.btnSection}>
 | 
	
		
			
				|  |  | -                                       <div
 | 
	
		
			
				|  |  | -                                          class={styles.btn}
 | 
	
		
			
				|  |  | -                                          onClick={(e: any) => {
 | 
	
		
			
				|  |  | -                                             e.stopPropagation()
 | 
	
		
			
				|  |  | -                                             handlePlay(item)
 | 
	
		
			
				|  |  | -                                             if (state.listActive !== index) {
 | 
	
		
			
				|  |  | -                                                resetRender()
 | 
	
		
			
				|  |  | -                                             }
 | 
	
		
			
				|  |  | +                        <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]}
 | 
	
		
			
				|  |  | +                                 onClick={async () => {
 | 
	
		
			
				|  |  | +                                    state.listActive = index
 | 
	
		
			
				|  |  | +                                    await toDetail()
 | 
	
		
			
				|  |  | +                                    resetRender()
 | 
	
		
			
				|  |  | +                                 }}
 | 
	
		
			
				|  |  | +                              >
 | 
	
		
			
				|  |  | +                                 <div class={styles.itemInfo}>
 | 
	
		
			
				|  |  | +                                    <div class={styles.img}>
 | 
	
		
			
				|  |  | +                                       <NImage
 | 
	
		
			
				|  |  | +                                          lazy
 | 
	
		
			
				|  |  | +                                          objectFit="cover"
 | 
	
		
			
				|  |  | +                                          previewDisabled={true}
 | 
	
		
			
				|  |  | +                                          src={item.titleImg || icon_default}
 | 
	
		
			
				|  |  | +                                          onLoad={(e: any) => {
 | 
	
		
			
				|  |  | +                                             ;(e.target as any).dataset.loaded = "true"
 | 
	
		
			
				|  |  |                                            }}
 | 
	
		
			
				|  |  | -                                       >
 | 
	
		
			
				|  |  | -                                          {state.listActive === index && (
 | 
	
		
			
				|  |  | -                                             <>
 | 
	
		
			
				|  |  | -                                                {state.playState === "pause" ? "播放" : "暂停"}
 | 
	
		
			
				|  |  | -                                                <img src={state.playState === "pause" ? iconBtnPlay : (iconBtnPause as any)} />
 | 
	
		
			
				|  |  | -                                             </>
 | 
	
		
			
				|  |  | -                                          )}
 | 
	
		
			
				|  |  | -                                          {state.listActive !== index && (
 | 
	
		
			
				|  |  | -                                             <>
 | 
	
		
			
				|  |  | -                                                播放
 | 
	
		
			
				|  |  | -                                                <img src={iconBtnPlay as any} />
 | 
	
		
			
				|  |  | -                                             </>
 | 
	
		
			
				|  |  | -                                          )}
 | 
	
		
			
				|  |  | +                                       />
 | 
	
		
			
				|  |  | +                                       <PlayLoading
 | 
	
		
			
				|  |  | +                                          class={[state.listActive === index && state.playState === "play" ? "" : styles.showPlayLoading]}
 | 
	
		
			
				|  |  | +                                       />
 | 
	
		
			
				|  |  | +                                    </div>
 | 
	
		
			
				|  |  | +                                    <div class={styles.title}>
 | 
	
		
			
				|  |  | +                                       <div class={styles.titleName}>
 | 
	
		
			
				|  |  | +                                          <ellipsisScroll title={item.name} />
 | 
	
		
			
				|  |  |                                         </div>
 | 
	
		
			
				|  |  |                                      </div>
 | 
	
		
			
				|  |  |                                   </div>
 | 
	
		
			
				|  |  | -                              ))}
 | 
	
		
			
				|  |  | +                                 <div class={styles.btnSection}>
 | 
	
		
			
				|  |  | +                                    <div
 | 
	
		
			
				|  |  | +                                       class={styles.btn}
 | 
	
		
			
				|  |  | +                                       onClick={(e: any) => {
 | 
	
		
			
				|  |  | +                                          e.stopPropagation()
 | 
	
		
			
				|  |  | +                                          handlePlay(item)
 | 
	
		
			
				|  |  | +                                          if (state.listActive !== index) {
 | 
	
		
			
				|  |  | +                                             resetRender()
 | 
	
		
			
				|  |  | +                                          }
 | 
	
		
			
				|  |  | +                                       }}
 | 
	
		
			
				|  |  | +                                    >
 | 
	
		
			
				|  |  | +                                       {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="暂无结果" />
 | 
	
		
			
				|  |  | -                              )}
 | 
	
		
			
				|  |  | +                           {!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 ref={spinRef} class={[styles.loadingWrap, state.finshed && styles.showLoading]}>
 | 
	
		
			
				|  |  | +                              <NSpin show={true} stroke="#FF531C"></NSpin>
 | 
	
		
			
				|  |  |                             </div>
 | 
	
		
			
				|  |  |                          </div>
 | 
	
		
			
				|  |  |                       </div>
 | 
	
		
			
				|  |  |                    </div>
 | 
	
		
			
				|  |  | -                  <div class={styles.rightContainer}>
 | 
	
		
			
				|  |  | -                     {/* <i class={styles.leftArrow}></i> */}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                     <NSpin show={staffLoading.value} stroke="#FF531C">
 | 
	
		
			
				|  |  | -                        <div class={styles.musicName}>
 | 
	
		
			
				|  |  | -                           {activeItem.value.name}
 | 
	
		
			
				|  |  | -                           {activeItem.value.musicSheetType === "CONCERT" && state.selectedPartName ? `(${state.selectedPartName})` : ""}
 | 
	
		
			
				|  |  | -                        </div>
 | 
	
		
			
				|  |  | -                        <div class={[styles.staffImgs, !loading.value && !activeItem.value?.id && 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>
 | 
	
		
			
				|  |  | -                           )}
 | 
	
		
			
				|  |  | +               </div>
 | 
	
		
			
				|  |  | +               <div class={styles.rightContainer}>
 | 
	
		
			
				|  |  | +                  {/* <i class={styles.leftArrow}></i> */}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                           {!loading.value && !activeItem.value?.id && (
 | 
	
		
			
				|  |  | -                              <ElEmpty class={styles.empty} image={require("@/img/layout/empty.png")} description="暂无结果" />
 | 
	
		
			
				|  |  | -                           )}
 | 
	
		
			
				|  |  | -                        </div>
 | 
	
		
			
				|  |  | -                     </NSpin>
 | 
	
		
			
				|  |  | +                  <NSpin show={staffLoading.value} stroke="#FF531C">
 | 
	
		
			
				|  |  | +                     <div class={styles.musicName}>
 | 
	
		
			
				|  |  | +                        {activeItem.value.name}
 | 
	
		
			
				|  |  | +                        {activeItem.value.musicSheetType === "CONCERT" && state.selectedPartName ? `(${state.selectedPartName})` : ""}
 | 
	
		
			
				|  |  | +                     </div>
 | 
	
		
			
				|  |  | +                     <div class={[styles.staffImgs, !loading.value && !activeItem.value?.id && 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>
 | 
	
		
			
				|  |  | +                        )}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                     <img
 | 
	
		
			
				|  |  | -                        style={{
 | 
	
		
			
				|  |  | -                           display: activeItem.value?.id ? "" : "none"
 | 
	
		
			
				|  |  | -                        }}
 | 
	
		
			
				|  |  | -                        class={[styles.goBtn]}
 | 
	
		
			
				|  |  | -                        src={btnSubmit as any}
 | 
	
		
			
				|  |  | -                        onClick={() => {
 | 
	
		
			
				|  |  | -                           handleChangeAudio("pause")
 | 
	
		
			
				|  |  | -                           goToCloud(activeItem.value.id, state.partXmlIndex)
 | 
	
		
			
				|  |  | +                        {!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"
 | 
	
		
			
				|  |  | +                     }}
 | 
	
		
			
				|  |  | +                     class={[styles.goBtn]}
 | 
	
		
			
				|  |  | +                     src={btnSubmit as any}
 | 
	
		
			
				|  |  | +                     onClick={() => {
 | 
	
		
			
				|  |  | +                        handleChangeAudio("pause")
 | 
	
		
			
				|  |  | +                        goToCloud(activeItem.value.id, state.partXmlIndex)
 | 
	
		
			
				|  |  | +                     }}
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                  <div
 | 
	
		
			
				|  |  | +                     class={styles.rightBtns}
 | 
	
		
			
				|  |  | +                     style={{ display: activeItem.value.id && activeItem.value.musicSheetType === "CONCERT" ? "" : "none" }}
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  | +                     <NPopselect
 | 
	
		
			
				|  |  | +                        options={partColumns.value}
 | 
	
		
			
				|  |  | +                        trigger="click"
 | 
	
		
			
				|  |  | +                        v-model:value={state.selectedPartIndex}
 | 
	
		
			
				|  |  | +                        scrollable
 | 
	
		
			
				|  |  | +                        onUpdate:value={async (value: any) => {
 | 
	
		
			
				|  |  | +                           console.log(value, "value")
 | 
	
		
			
				|  |  | +                           const item = partColumns.value.find((item: any) => item.value === value)
 | 
	
		
			
				|  |  | +                           state.selectedPartIndex = value
 | 
	
		
			
				|  |  | +                           state.selectedPartName = item.instrumentName
 | 
	
		
			
				|  |  | +                           state.partXmlIndex = item.xmlIndex
 | 
	
		
			
				|  |  | +                           nextTick(() => {
 | 
	
		
			
				|  |  | +                              resetRender()
 | 
	
		
			
				|  |  | +                           })
 | 
	
		
			
				|  |  |                          }}
 | 
	
		
			
				|  |  | -                     />
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                     <div
 | 
	
		
			
				|  |  | -                        class={styles.rightBtns}
 | 
	
		
			
				|  |  | -                        style={{ display: activeItem.value.id && activeItem.value.musicSheetType === "CONCERT" ? "" : "none" }}
 | 
	
		
			
				|  |  | +                        class={"PopSelect"}
 | 
	
		
			
				|  |  |                       >
 | 
	
		
			
				|  |  | -                        <NPopselect
 | 
	
		
			
				|  |  | -                           options={partColumns.value}
 | 
	
		
			
				|  |  | -                           trigger="click"
 | 
	
		
			
				|  |  | -                           v-model:value={state.selectedPartIndex}
 | 
	
		
			
				|  |  | -                           scrollable
 | 
	
		
			
				|  |  | -                           onUpdate:value={async (value: any) => {
 | 
	
		
			
				|  |  | -                              console.log(value, "value")
 | 
	
		
			
				|  |  | -                              const item = partColumns.value.find((item: any) => item.value === value)
 | 
	
		
			
				|  |  | -                              state.selectedPartIndex = value
 | 
	
		
			
				|  |  | -                              state.selectedPartName = item.instrumentName
 | 
	
		
			
				|  |  | -                              state.partXmlIndex = item.xmlIndex
 | 
	
		
			
				|  |  | -                              nextTick(() => {
 | 
	
		
			
				|  |  | -                                 resetRender()
 | 
	
		
			
				|  |  | -                              })
 | 
	
		
			
				|  |  | -                           }}
 | 
	
		
			
				|  |  | -                           class={"PopSelect"}
 | 
	
		
			
				|  |  | -                        >
 | 
	
		
			
				|  |  | -                           <img class={styles.transBtn} src={iconTransfer as any} />
 | 
	
		
			
				|  |  | -                        </NPopselect>
 | 
	
		
			
				|  |  | -                     </div>
 | 
	
		
			
				|  |  | +                        <img class={styles.transBtn} src={iconTransfer as any} />
 | 
	
		
			
				|  |  | +                     </NPopselect>
 | 
	
		
			
				|  |  |                    </div>
 | 
	
		
			
				|  |  |                 </div>
 | 
	
		
			
				|  |  | -            </ElScrollbar>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            {/* </ElScrollbar> */}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              {state.list.length !== 0 && activeItem.value.audioFileUrl && (
 | 
	
		
			
				|  |  |                 <PlayItem
 |