lex hai 11 meses
pai
achega
bc225c6dfb

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/assets/App-legacy.6e4d6664.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/assets/index-legacy.1bf0a9bb.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/assets/index-legacy.97452c93.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/assets/index-legacy.f0063d4d.js


+ 31 - 36
src/components/fee/index.tsx

@@ -12,15 +12,15 @@ export default defineComponent({
   name: 'DetailFee',
   data() {
     return {
-      content: '您尚未开通云练服务,请联系乐团老师开通'
+      content: '您尚未开通云练服务,请联系乐团老师开通',
     }
   },
   methods: {
     getContent() {
       // 是否有待未激活会员
       const isExistPendingMember = appstate.user?.isExistPendingMember
-      if(isExistPendingMember) {
-        this.content = '您购买的云练尚未激活,请联系乐团老师进行激活'
+      if (isExistPendingMember) {
+        this.content = '您购买的云练尚未激活,请联系乐团老师进行激活'
       }
       return this.content
     },
@@ -28,10 +28,10 @@ export default defineComponent({
       if (appstate.openKey) {
         const detail: any = appstate.openKey ? appstate.modularDetail[appstate.openKey] : null
         if (detail) {
-          setTongjiTag(['_trackEvent', '云练', '操作', detail.name + '|前往购买页面'])
+          setTongjiTag(['_trackEvent', '云练', '操作', detail.name + '|前往购买页面'])
         }
       } else {
-        setTongjiTag(['_trackEvent', '云练', '操作', '前往购买页面'])
+        setTongjiTag(['_trackEvent', '云练', '操作', '前往购买页面'])
       }
       // postMessage({
       //   api: 'openWebView',
@@ -40,48 +40,43 @@ export default defineComponent({
       //     orientation: 1,
       //   }
       // })
-    }
+    },
   },
   render() {
     const detail: any = appstate.openKey ? appstate.modularDetail[appstate.openKey] : null
     return (
       <div class={styles.fee}>
         <Popup
-        show={state.feeShow}
-        get-container="body"
-        closeable
-        onClickCloseIcon={() => state.feeShow = false}
-        class={styles.fractionContainer}
-      >
-        <div class={styles.fraction}>
-          <div class={styles.title}>{detail?.name}</div>
-          <div class={styles.content}>
-            <div class={styles.detail}>
-            </div>
-            {detail?.images.length ? (
-              <Swipe class={styles.swipe} autoplay={2000} show-indicators={false}>
-                {detail?.images.map((img: string) => (
-                  <SwipeItem>
-                    <img src={modules[img].default} />
-                  </SwipeItem>
-                ))}
-              </Swipe>
-            ) : null}
-            <div class={styles.tipMember}>
-              {this.getContent()}
-            </div>
-            <div class={styles.tips}>
-              {detail?.desc}
-            </div>
-            {/* <div class={styles.ctrls}>
+          show={state.feeShow}
+          get-container="body"
+          closeable
+          onClickCloseIcon={() => (state.feeShow = false)}
+          class={styles.fractionContainer}
+        >
+          <div class={styles.fraction}>
+            <div class={styles.title}>{detail?.name}</div>
+            <div class={styles.content}>
+              <div class={styles.detail}></div>
+              {detail?.images.length ? (
+                <Swipe class={styles.swipe} autoplay={2000} show-indicators={false}>
+                  {detail?.images.map((img: string) => (
+                    <SwipeItem>
+                      <img src={modules[img].default} />
+                    </SwipeItem>
+                  ))}
+                </Swipe>
+              ) : null}
+              <div class={styles.tipMember}>{this.getContent()}</div>
+              <div class={styles.tips}>{detail?.desc}</div>
+              {/* <div class={styles.ctrls}>
               <Button color="#01c1b5" round onClick={this.open}>
               确定
               </Button>
             </div> */}
+            </div>
           </div>
-        </div>
-      </Popup>
+        </Popup>
       </div>
     )
-  }
+  },
 })

+ 11 - 15
src/components/vip/index.tsx

@@ -11,13 +11,13 @@ export default defineComponent({
   name: 'vip-popup',
   data() {
     return {
-      content: '您尚未开通云练服务,请联系乐团老师开通'
+      content: '您尚未开通云练服务,请联系乐团老师开通',
     }
   },
   methods: {
     open() {
       state.vipShow = false
-      // setTongjiTag(['_trackEvent', '云练', 'VIP曲目', '前往购买页面'])
+      // setTongjiTag(['_trackEvent', '云练', 'VIP曲目', '前往购买页面'])
       // postMessage({
       //   api: 'openWebView',
       //   content: {
@@ -29,26 +29,22 @@ export default defineComponent({
     getContent() {
       // 是否有待未激活会员
       const isExistPendingMember = appState.user?.isExistPendingMember
-      if(isExistPendingMember) {
-        this.content = '您购买的云练尚未激活,请联系乐团老师进行激活'
+      if (isExistPendingMember) {
+        this.content = '您购买的云练尚未激活,请联系乐团老师进行激活'
       }
       return this.content
-    }
+    },
   },
   render() {
     return (
-      <Popup
-        show={state.vipShow}
-        get-container="body"
-        closeable
-        onClickCloseIcon={() => state.vipShow = false}
-        round
-      >
+      <Popup show={state.vipShow} get-container="body" closeable onClickCloseIcon={() => (state.vipShow = false)} round>
         <div class={styles.vip}>
-          <img src={TipsIcon}/>
+          <img src={TipsIcon} />
           {/* <p>当前曲目需付费使用,开通会员<br/>即可自由畅享</p> */}
-          <p>{ this.getContent() }</p>
-          <Button class={styles.btn} onClick={this.open} round color="#01C1B5">确定</Button>
+          <p>{this.getContent()}</p>
+          <Button class={styles.btn} onClick={this.open} round color="#01C1B5">
+            确定
+          </Button>
         </div>
       </Popup>
     )

+ 65 - 83
src/pages/baseClass/index.tsx

@@ -1,21 +1,16 @@
-import { defineComponent } from "vue";
-import { Image, Empty, Popup, Toast, Button } from "vant";
-import {
-  browser,
-  setTongjiTag,
-  getRandomKey,
-  getRequestHostname,
-} from "/src/helpers/utils";
-import { postMessage } from "/src/helpers/native-message";
-import appState from "/src/state";
-import request from "/src/helpers/request";
-import ChooseSubjectName from "./modals/chooseSubjectName/index";
-import styles from "./index.module.less";
+import { defineComponent } from 'vue'
+import { Image, Empty, Popup, Toast, Button } from 'vant'
+import { browser, setTongjiTag, getRandomKey, getRequestHostname } from '/src/helpers/utils'
+import { postMessage } from '/src/helpers/native-message'
+import appState from '/src/state'
+import request from '/src/helpers/request'
+import ChooseSubjectName from './modals/chooseSubjectName/index'
+import styles from './index.module.less'
 
-const browserInfo = browser();
+const browserInfo = browser()
 
 export default defineComponent({
-  name: "baseClass",
+  name: 'baseClass',
   components: { ChooseSubjectName },
   data() {
     return {
@@ -23,14 +18,14 @@ export default defineComponent({
       show: true,
       closeStatus: true,
       courseNum: 0,
-    };
+    }
   },
   mounted() {
     document.addEventListener('visibilitychange', this.visibilitychange, false)
-    localStorage.setItem("behaviorId", getRandomKey());
-    this.FetchList();
-    setTongjiTag(["_trackEvent", "云教练", "切换页面", "分类页面"]);
-    appState.subjectId = appState.origanSubjectId;
+    localStorage.setItem('behaviorId', getRandomKey())
+    this.FetchList()
+    setTongjiTag(['_trackEvent', '云练习', '切换页面', '分类页面'])
+    appState.subjectId = appState.origanSubjectId
     if (getRequestHostname() === '/api-student') {
       this.FetchCourseInfo()
     }
@@ -41,14 +36,14 @@ export default defineComponent({
   computed: {
     chooseShow() {
       if (
-        getRequestHostname() === "/api-student" &&
+        getRequestHostname() === '/api-student' &&
         !appState.subjectLoading &&
         appState.subjectId === 0 &&
         this.closeStatus
       ) {
-        return true;
+        return true
       }
-      return false;
+      return false
     },
   },
   methods: {
@@ -65,7 +60,7 @@ export default defineComponent({
     },
     async FetchList() {
       try {
-        const res = await request.get("/sysMusicScoreCategories/queryTree");
+        const res = await request.get('/sysMusicScoreCategories/queryTree')
         // const result = res.data || []
         // result.forEach((item: any) => {
         //   const children = item.sysMusicScoreCategories && item.sysMusicScoreCategories.length > 0 ? item.sysMusicScoreCategories : []
@@ -73,18 +68,18 @@ export default defineComponent({
         //     this.list.push(item)
         //   }
         // })
-        this.list = (await this.filterList(res.data || [])) || [];
+        this.list = (await this.filterList(res.data || [])) || []
         // console.log(res.data, this.filterList(res.data || []))
-        this.show = this.list.length > 0 ? true : false;
+        this.show = this.list.length > 0 ? true : false
       } catch (error) {}
     },
 
     filterList(list: any) {
       // 过滤掉(59分部)考级曲目
-      const tenantId = appState.tenantId;
-      const organId = appState.organId;
+      const tenantId = appState.tenantId
+      const organId = appState.organId
       // 大雅机构
-      let tempOrgan: number[] = [];
+      let tempOrgan: number[] = []
       // if (getRequestHostname() === "/api-web") {
       //   let tempOrganId: any = String(organId).split(",");
       //   tempOrganId = tempOrganId ? tempOrganId.map((i: any) => Number(i)) : [];
@@ -95,29 +90,29 @@ export default defineComponent({
 
       // 如果不是大雅机构则 不过滤
       if (tenantId != 1) {
-        return list;
+        return list
       }
 
       list.forEach((item: any) => {
-        const children = item.sysMusicScoreCategoriesList || [];
-        let tempChildren = [];
+        const children = item.sysMusicScoreCategoriesList || []
+        let tempChildren = []
         if (item.id === 38) {
           // 只对声部训练做处理
           if (tempOrgan.includes(55)) {
             // 显示所有子分类
-            tempChildren = children;
+            tempChildren = children
           } else if (tempOrgan.includes(59)) {
             children.forEach((child: any) => {
               if (child.id == 30) {
-                tempChildren.push(child);
+                tempChildren.push(child)
               }
-            });
+            })
           } else if (!tempOrgan.includes(55) && !tempOrgan.includes(59)) {
             children.forEach((item: any) => {
               if (item.id != 30) {
-                tempChildren.push(item);
+                tempChildren.push(item)
               }
-            });
+            })
           }
         } else if (item.id === 40) {
           // 考级曲目
@@ -125,71 +120,58 @@ export default defineComponent({
             // 齐齐哈尔二部没有考级曲目
             children.forEach((item: any) => {
               if (item.id != 47) {
-                tempChildren.push(item);
+                tempChildren.push(item)
               }
-            });
+            })
           } else if (!tempOrgan.includes(59)) {
             children.forEach((item: any) => {
-              tempChildren.push(item);
-            });
+              tempChildren.push(item)
+            })
           }
         } else {
-          tempChildren = children;
+          tempChildren = children
         }
-        item.sysMusicScoreCategoriesList = tempChildren;
-      });
+        item.sysMusicScoreCategoriesList = tempChildren
+      })
       // 判断考级曲目是否有子分类,如果没有则删除
-      let parentList: any[] = [];
+      let parentList: any[] = []
       list.forEach((item: any) => {
-        if (
-          item.id == 40 &&
-          item.sysMusicScoreCategoriesList &&
-          item.sysMusicScoreCategoriesList.length > 0
-        ) {
+        if (item.id == 40 && item.sysMusicScoreCategoriesList && item.sysMusicScoreCategoriesList.length > 0) {
           // 考级曲目
-          parentList.push(item);
+          parentList.push(item)
         }
         if (item.id != 40) {
-          parentList.push(item);
+          parentList.push(item)
         }
-      });
-      return parentList;
+      })
+      return parentList
     },
     onClickLeft() {
       if (browserInfo.isApp) {
         postMessage({
-          api: "back",
-        });
+          api: 'back',
+        })
       }
     },
     toDetail(item: any) {
-      const childLength = item.sysMusicScoreCategoriesList
-        ? item.sysMusicScoreCategoriesList.length
-        : 0;
+      const childLength = item.sysMusicScoreCategoriesList ? item.sysMusicScoreCategoriesList.length : 0
       // 如果二级分类只有一个分类,则直接跳转到曲目列表
-      sessionStorage.setItem(
-        "musicScoreList",
-        JSON.stringify(item.sysMusicScoreCategoriesList)
-      );
+      sessionStorage.setItem('musicScoreList', JSON.stringify(item.sysMusicScoreCategoriesList))
       if (childLength > 1) {
-        (this as any).$router.push({
-          path: "/classify",
+        ;(this as any).$router.push({
+          path: '/classify',
           query: {
             parentId: item.id, // 父级元素编号
             ...this.$route.query,
           },
-        });
+        })
       } else {
-        (this as any).$router.push({
-          path:
-            "/list/" +
-            (childLength == 1
-              ? item.sysMusicScoreCategoriesList[0]?.id
-              : item.id),
+        ;(this as any).$router.push({
+          path: '/list/' + (childLength == 1 ? item.sysMusicScoreCategoriesList[0]?.id : item.id),
           query: {
             ...this.$route.query,
           },
-        });
+        })
       }
     },
     audition() {
@@ -206,18 +188,18 @@ export default defineComponent({
     },
     async onSelectedPartName(item: any) {
       if (!item.id) {
-        Toast("请选择声部");
-        return;
+        Toast('请选择声部')
+        return
       }
       try {
-        await request.post("/student/updateSubject", {
+        await request.post('/student/updateSubject', {
           data: {
             subjectId: item.id,
           },
-        });
-        this.chooseShow = false;
-        appState.subjectId = item.id;
-        appState.origanSubjectId = item.id;
+        })
+        this.chooseShow = false
+        appState.subjectId = item.id
+        appState.origanSubjectId = item.id
       } catch {}
     },
   },
@@ -228,7 +210,7 @@ export default defineComponent({
           show={this.chooseShow}
           teleport="body"
           style={{
-            borderRadius: "8px",
+            borderRadius: '8px',
           }}
         >
           <ChooseSubjectName onSelectedPartName={this.onSelectedPartName} />
@@ -259,6 +241,6 @@ export default defineComponent({
           </div>
         </div>
       </div>
-    );
+    )
   },
-});
+})

+ 13 - 13
src/pages/classify/index.tsx

@@ -13,21 +13,21 @@ export default defineComponent({
   name: 'classify',
   data() {
     return {
-      list: [] as any[]
+      list: [] as any[],
     }
   },
   mounted() {
     // localStorage.setItem('behaviorId', getRandomKey())
     // this.FetchList()
     const musicScoreList = sessionStorage.getItem('musicScoreList')
-    if(musicScoreList) {
+    if (musicScoreList) {
       let tempMusicScoreList = JSON.parse(musicScoreList)
 
       this.list = tempMusicScoreList // 从上面页面获取分类信息
     } else {
-      (this as any).$router.replace('/')
+      ;(this as any).$router.replace('/')
     }
-    setTongjiTag(['_trackEvent', '云练', '切换页面', '分类页面'])
+    setTongjiTag(['_trackEvent', '云练', '切换页面', '分类页面'])
 
     // appState.subjectOptions = [{value: 0, text: '全部声部'}]
     appState.subjectId = appState.origanSubjectId
@@ -38,8 +38,8 @@ export default defineComponent({
         const { parentId }: any = this.$route.query
         const res = await request.get('/sysMusicScoreCategories/queryTree', {
           params: {
-            parentId: parentId || 0
-          }
+            parentId: parentId || 0,
+          },
         })
         this.list = res.data
       } catch (error) {}
@@ -47,16 +47,16 @@ export default defineComponent({
     onClickLeft() {
       if (browserInfo.isApp) {
         postMessage({
-          api: 'back'
+          api: 'back',
         })
       }
     },
     toDetail(item: any) {
-      (this as any).$router.push({
+      ;(this as any).$router.push({
         path: '/list/' + item.id,
         query: {
-          ...this.$route.query
-        }
+          ...this.$route.query,
+        },
       })
     },
   },
@@ -66,10 +66,10 @@ export default defineComponent({
         <div class={styles.content}>
           <div class={styles.title}>教材</div>
           <div class={styles.items}>
-            {this.list.map(item => (
+            {this.list.map((item) => (
               <div key={item.id} onClick={() => this.toDetail(item)}>
                 <div class={styles.inner}>
-                  <Image src={item.coverImg} class={styles.img}/>
+                  <Image src={item.coverImg} class={styles.img} />
                   <div class="van-ellipsis">{item.name}</div>
                 </div>
               </div>
@@ -78,5 +78,5 @@ export default defineComponent({
         </div>
       </div>
     )
-  }
+  },
 })

+ 302 - 384
src/pages/detail/evaluating/index.tsx

@@ -22,41 +22,41 @@ import {
   listenerMessage,
   removeListenerMessage,
   IPostMessage,
-  CallBack
+  CallBack,
 } from '/src/helpers/native-message'
 import SettingState from '/src/pages/detail/setting-state'
 import { getLeveByScore, getLeveByScoreMeasure } from './helper'
 import styles from './index.module.less'
 import { browser, getRequestHostname } from '/src/helpers/utils'
-import CheckDelayPopup from "../CheckDelayPopup";
-import Headphone, { HeadphoneData } from "../Headphone";
-import PhoneTip from "../PhoneTip";
+import CheckDelayPopup from '../CheckDelayPopup'
+import Headphone, { HeadphoneData } from '../Headphone'
+import PhoneTip from '../PhoneTip'
 
 const browserInfo = browser()
 
 /** 初始化评测音频 */
 export const evaluatCreateMusicPlayer = () => {
-	return new Promise((resolve) => {
-		// 初始化曲谱音频 和效音音频
-		postMessage(
+  return new Promise((resolve) => {
+    // 初始化曲谱音频 和效音音频
+    postMessage(
       {
-        api: "createMusicPlayer",
+        api: 'createMusicPlayer',
         content: {
           musicSrc: runtime.songs.background || runtime.songs.music, // 曲谱音频url
-          tuneSrc: "https://oss.dayaedu.com/cloud-coach/1686725501654check_music1_(1).mp3", //效音音频url
+          tuneSrc: 'https://oss.dayaedu.com/cloud-coach/1686725501654check_music1_(1).mp3', //效音音频url
         },
       },
       () => {
         if (browserInfo.ios) {
-          resolve(true);
+          resolve(true)
         }
       }
-    );
-		// 安卓不需要
-		if(!browserInfo.ios){
-			resolve(true)
-		}
-	})
+    )
+    // 安卓不需要
+    if (!browserInfo.ios) {
+      resolve(true)
+    }
+  })
 }
 
 let player: any = null
@@ -74,17 +74,13 @@ const getMusicMode = (): RuntimeUtils.IMode => {
   const tongguan = [12, 13, 14, 15, 17]
   if (
     muguan.includes(state.subjectId) &&
-    (state.activeDetail?.examSongName || '').search(
-      /[^\u0000-\u00FF](1-2|1-3|1-6)/gi
-    ) > -1
+    (state.activeDetail?.examSongName || '').search(/[^\u0000-\u00FF](1-2|1-3|1-6)/gi) > -1
   ) {
     return 'music'
   }
   if (
     tongguan.includes(state.subjectId) &&
-    (state.activeDetail?.examSongName || '').search(
-      /[^\u0000-\u00FF](1-1-1|1-1-2|1-5|1-6)/gi
-    ) > -1
+    (state.activeDetail?.examSongName || '').search(/[^\u0000-\u00FF](1-1-1|1-1-2|1-5|1-6)/gi) > -1
   ) {
     return 'music'
   }
@@ -103,21 +99,21 @@ export const resetPlayer = () => {
 
 /** 监听评测弹窗是否隐藏保存演奏按钮 */
 const hideComplexButton = (callback: CallBack, listen?: boolean) => {
-	if (listen) {
-		listenerMessage("hideComplexButton", callback);
-	} else {
-		removeListenerMessage("hideComplexButton", callback);
-	}
-};
+  if (listen) {
+    listenerMessage('hideComplexButton', callback)
+  } else {
+    removeListenerMessage('hideComplexButton', callback)
+  }
+}
 
 // 隐藏存演奏按钮
 const handleComplexButton = (res?: IPostMessage) => {
-	console.log('监听是否隐藏上传云端按钮', res)
-	if (res?.content) {
-		const { header, body } = res.content;
-		detailState.isHideEvaluatReportSaveBtn = true
-	}
-};
+  console.log('监听是否隐藏上传云端按钮', res)
+  if (res?.content) {
+    const { header, body } = res.content
+    detailState.isHideEvaluatReportSaveBtn = true
+  }
+}
 
 export default defineComponent({
   name: 'evaluating',
@@ -144,22 +140,22 @@ export default defineComponent({
       shareLoadedPngData: null as null | string,
       isSaveVideo: SettingState.sett.camera && SettingState.eva.save,
       tuningStatus: false,
-			/** 延迟数据 */
-			delayData: {
-				/** 是否强制检测 */
-				isForce: true,
-				/** 弹窗 */
-				open: false,
-				/** 延迟次数 */
-				count: 0,
-				/** 延迟时间 */
-				time: 0,
-				/** 耳机状态 */
-				erji: false,
-				/** 检测状态 */
-				checkStatus: 'init' as 'init' | 'ing' | 'error',
+      /** 延迟数据 */
+      delayData: {
+        /** 是否强制检测 */
+        isForce: true,
+        /** 弹窗 */
+        open: false,
+        /** 延迟次数 */
+        count: 0,
+        /** 延迟时间 */
+        time: 0,
+        /** 耳机状态 */
+        erji: false,
+        /** 检测状态 */
+        checkStatus: 'init' as 'init' | 'ing' | 'error',
         step: 1,
-			},      
+      },
     }
   },
   computed: {
@@ -169,10 +165,7 @@ export default defineComponent({
   },
   methods: {
     startPlay() {
-      console.log(
-        '连接服务成功,开始播放',
-        new Date().getTime() - runtime.clickTime
-      )
+      console.log('连接服务成功,开始播放', new Date().getTime() - runtime.clickTime)
       synced = false
       if (!SettingState.eva.mute) {
         RuntimeUtils.changeAllMode()
@@ -241,9 +234,7 @@ export default defineComponent({
           clientId: 'student',
           speed: runtime.speed,
           heardLevel: SettingState.eva.difficulty,
-          beatLength: Math.round(
-            (RuntimeUtils.getFixTime(state.times[0].beatSpeed) * 1000) / rate
-          ),
+          beatLength: Math.round((RuntimeUtils.getFixTime(state.times[0].beatSpeed) * 1000) / rate),
         }
         const apiPath = getRequestHostname()
         if (apiPath === '/api-student') {
@@ -463,12 +454,9 @@ export default defineComponent({
         // const fixtime = 0
         const start = item.sourceRelativeTime || item.relativeTime
         const end = item.sourceRelaEndtime || item.relaEndtime
-        const isStaccato = note.isStaccato 
+        const isStaccato = note.isStaccato
         const noteRate = isStaccato ? 0.5 : 1
-        if (
-          note.formatLyricsEntries.contains('Play') ||
-          note.formatLyricsEntries.contains('Play...')
-        ) {
+        if (note.formatLyricsEntries.contains('Play') || note.formatLyricsEntries.contains('Play...')) {
           ListenMode = false
         }
         if (note.formatLyricsEntries.contains('Listen')) {
@@ -482,20 +470,10 @@ export default defineComponent({
         }
         const nextNote = state.times[index + 1]
         // console.log("noteinfo", note.noteElement.isRestFlag && !!note.stave && !!nextNote)
-        if (
-          skip &&
-          (note.stave ||
-            !note.noteElement.isRestFlag ||
-            (nextNote && !nextNote.noteElement.isRestFlag))
-        ) {
+        if (skip && (note.stave || !note.noteElement.isRestFlag || (nextNote && !nextNote.noteElement.isRestFlag))) {
           skip = false
         }
-        if (
-          note.noteElement.isRestFlag &&
-          !!note.stave &&
-          !!nextNote &&
-          nextNote.noteElement.isRestFlag
-        ) {
+        if (note.noteElement.isRestFlag && !!note.stave && !!nextNote && nextNote.noteElement.isRestFlag) {
           skip = true
         }
         // console.log(note.measureOpenIndex, item.measureOpenIndex, note)
@@ -678,79 +656,79 @@ export default defineComponent({
     //   }
     // },
 
-		sendResult(evt?: IPostMessage) {
-			console.log("sendResult", evt);
-			if (evt?.content) {
-				const data = evt?.content?.body;
-				if (evt?.content.header.commond === "overall") {
-					detailState.isHideEvaluatReportSaveBtn = false;
-					Toast.clear();
-					this.res = data;
-					this.endloading = false;
-					RuntimeUtils.event.emit("onEvaluationResult", data);
-				} else if (evt?.content.header.commond === "checkDone") {
-					this.checkStatus = true;
-				} else if (evt?.content.header.commond === "checking") {
-					this.frequency = evt?.content?.body?.frequency;
-				} else if (evt?.content.header.commond === "recordEnd") {
-					if (this.delayData.checkStatus !== 'ing') return
-					this.delayData.count++;
-					if (this.delayData.count >= 2) {
-						this.handleToggleTune('finishTune');
-						return;
-					}
-					setTimeout(() => {
-						this.startTune()
-					}, 100)
-				} else {
-					const getBeforeNote = (index: number) => {
-						while (index >= 0) {
-							const item = state.times[index];
-							if (item.stave) {
-								return item;
-							}
-							index--;
-						}
-					};
-					const setEvaluatings = (note: any, data: any, dontTransition = false) => {
-						const startNote = getBoundingBoxByverticalNote(note);
-						state.evaluatings = {
-							...state.evaluatings,
-							[startNote.measureIndex]: {
-								...startNote,
-								...getLeveByScoreMeasure(data.score),
-								score: data.score,
-								dontTransition,
-							},
-						};
-					};
+    sendResult(evt?: IPostMessage) {
+      console.log('sendResult', evt)
+      if (evt?.content) {
+        const data = evt?.content?.body
+        if (evt?.content.header.commond === 'overall') {
+          detailState.isHideEvaluatReportSaveBtn = false
+          Toast.clear()
+          this.res = data
+          this.endloading = false
+          RuntimeUtils.event.emit('onEvaluationResult', data)
+        } else if (evt?.content.header.commond === 'checkDone') {
+          this.checkStatus = true
+        } else if (evt?.content.header.commond === 'checking') {
+          this.frequency = evt?.content?.body?.frequency
+        } else if (evt?.content.header.commond === 'recordEnd') {
+          if (this.delayData.checkStatus !== 'ing') return
+          this.delayData.count++
+          if (this.delayData.count >= 2) {
+            this.handleToggleTune('finishTune')
+            return
+          }
+          setTimeout(() => {
+            this.startTune()
+          }, 100)
+        } else {
+          const getBeforeNote = (index: number) => {
+            while (index >= 0) {
+              const item = state.times[index]
+              if (item.stave) {
+                return item
+              }
+              index--
+            }
+          }
+          const setEvaluatings = (note: any, data: any, dontTransition = false) => {
+            const startNote = getBoundingBoxByverticalNote(note)
+            state.evaluatings = {
+              ...state.evaluatings,
+              [startNote.measureIndex]: {
+                ...startNote,
+                ...getLeveByScoreMeasure(data.score),
+                score: data.score,
+                dontTransition,
+              },
+            }
+          }
 
-					for (let index = 0; index < state.times.length; index++) {
-						let time = state.times[index];
-						if (data.measureRenderIndex == time.noteElement.sourceMeasure.measureListIndex) {
-							if (!time.stave) {
-								const ntime = getBeforeNote(index);
-								// console.log('ntime', ntime)
-								if (ntime) {
-									time = ntime;
-								}
-							}
+          for (let index = 0; index < state.times.length; index++) {
+            let time = state.times[index]
+            if (data.measureRenderIndex == time.noteElement.sourceMeasure.measureListIndex) {
+              if (!time.stave) {
+                const ntime = getBeforeNote(index)
+                // console.log('ntime', ntime)
+                if (ntime) {
+                  time = ntime
+                }
+              }
 
-							if (!time.noteElement.tie) {
-								setEvaluatings(time, data);
-							} else {
-								for (const item of time.noteElement.tie.notes) {
-									const note = getParentNote(item);
-									if (!note) continue;
-									setEvaluatings(note, data, item !== time.noteElement.tie.StartNote);
-								}
-							}
-							break;
-						}
-					}
-				}
-			}
-		},
+              if (!time.noteElement.tie) {
+                setEvaluatings(time, data)
+              } else {
+                for (const item of time.noteElement.tie.notes) {
+                  const note = getParentNote(item)
+                  if (!note) continue
+                  setEvaluatings(note, data, item !== time.noteElement.tie.StartNote)
+                }
+              }
+              break
+            }
+          }
+        }
+      }
+    },
     setWiredStatus(res?: IPostMessage) {
       this.erjiShow = !res?.content.checkIsWired
       this.tuningStatus = true
@@ -771,8 +749,7 @@ export default defineComponent({
         api: 'openWebView',
         content: {
           // url: location.origin + '/accompany/#/report/',
-          url:
-            location.origin + '/accompany/#/report/' + this.res?.recordId || '',
+          url: location.origin + '/accompany/#/report/' + this.res?.recordId || '',
           orientation: 0,
           isHideTitle: true, // 此处兼容安卓,意思为隐藏全部头部
           statusBarTextColor: false,
@@ -843,7 +820,7 @@ export default defineComponent({
           api: 'shareAchievements',
           content: {
             title: '分享我的乐器练习进度,一起见证我的成长!',
-            desc: '晒一下我的评测分数,快来“云练”上和我PK一下吧!',
+            desc: '晒一下我的评测分数,快来“云练”上和我PK一下吧!',
             image: this.shareLoadedPngData,
             video: '',
             type: 'image',
@@ -862,8 +839,7 @@ export default defineComponent({
     getShareUrl() {
       const data: any = {
         name: appstate.user?.student?.username || '',
-        subjectName:
-          (appstate.user?.student?.subjectNames || '').split(',')[0] || '',
+        subjectName: (appstate.user?.student?.subjectNames || '').split(',')[0] || '',
         avatar: encodeURIComponent(appstate.user?.student?.avatar || ''),
         score: this.res?.score || 0,
         examSongName: detailState.activeDetail?.examSongName || '',
@@ -882,149 +858,155 @@ export default defineComponent({
       return ''
     },
 
-
-		/** 评测效验 */
-		async checkEvaluating() {
-			this.delayData.erji = await this.getWiredStatus();
-			this.delayData.time = await this.getDeviceDelay();
-			// 没有设备延迟数据,显示检测组件,并持续检测耳机状态
-			if (!this.delayData.time || this.delayData.isForce) {
-				this.delayData.open = runtime.delayCheckFirst && this.$route.query.evaluatingRecord ? false : true
-				this.delayData.count = 0;
-				if (runtime.delayCheckFirst && this.$route.query.evaluatingRecord) {
-					this.closeErji()
-				}
-				return;
-			}
-			this.handleCheckDelayEnd()
-		},    
+    /** 评测效验 */
+    async checkEvaluating() {
+      this.delayData.erji = await this.getWiredStatus()
+      this.delayData.time = await this.getDeviceDelay()
+      // 没有设备延迟数据,显示检测组件,并持续检测耳机状态
+      if (!this.delayData.time || this.delayData.isForce) {
+        this.delayData.open = runtime.delayCheckFirst && this.$route.query.evaluatingRecord ? false : true
+        this.delayData.count = 0
+        if (runtime.delayCheckFirst && this.$route.query.evaluatingRecord) {
+          this.closeErji()
+        }
+        return
+      }
+      this.handleCheckDelayEnd()
+    },
     /** 获取设备延迟 */
-		getDeviceDelay(): Promise<number> {
-			return new Promise((resolve) => {
-				const timer = setTimeout(() => {
-					resolve(0);
-				}, 1000)
-				postMessage({
-					api: "getDeviceDelay",
-				}, (res) => {
-					const delay = res?.content?.value > 0 ? res?.content?.value : 0;
-					clearTimeout(timer)
-					resolve(delay);
-				});
-			});
-		},
-		/** 获取耳机状态 */
-		getWiredStatus(): Promise<boolean> {
-			return new Promise((resolve) => {
-				const timer = setTimeout(() => {
-					resolve(false);
-				}, 1000)
-				postMessage({
-					api: "isWiredHeadsetOn",
-				}, (res) => {
-					const checkIsWired = res?.content?.checkIsWired ? true : false;
-          if (checkIsWired) {
-            if (this.delayData.step <= 5) {
-              this.delayData.step = 3
-            }
-          } else {
-            if (this.delayData.step === 2 || this.delayData.step === 3) {
-              this.delayData.step = 4
+    getDeviceDelay(): Promise<number> {
+      return new Promise((resolve) => {
+        const timer = setTimeout(() => {
+          resolve(0)
+        }, 1000)
+        postMessage(
+          {
+            api: 'getDeviceDelay',
+          },
+          (res) => {
+            const delay = res?.content?.value > 0 ? res?.content?.value : 0
+            clearTimeout(timer)
+            resolve(delay)
+          }
+        )
+      })
+    },
+    /** 获取耳机状态 */
+    getWiredStatus(): Promise<boolean> {
+      return new Promise((resolve) => {
+        const timer = setTimeout(() => {
+          resolve(false)
+        }, 1000)
+        postMessage(
+          {
+            api: 'isWiredHeadsetOn',
+          },
+          (res) => {
+            const checkIsWired = res?.content?.checkIsWired ? true : false
+            if (checkIsWired) {
+              if (this.delayData.step <= 5) {
+                this.delayData.step = 3
+              }
+            } else {
+              if (this.delayData.step === 2 || this.delayData.step === 3) {
+                this.delayData.step = 4
+              }
             }
+            clearTimeout(timer)
+            resolve(checkIsWired)
           }
-					clearTimeout(timer)
-					resolve(checkIsWired);
-				});
-			});
-		},  
-		/** 持续检测耳机状态 */
+        )
+      })
+    },
+    /** 持续检测耳机状态 */
     checkWiredStatus() {
-      console.log('耳机状态',this.delayData.checkStatus)
-			// 设备检测结束,停止获取耳机状态
-			if (this.delayData.checkStatus !== 'ing' || this.delayData.open === false) {
-				return
-			}
-			setTimeout(async () => {
-				this.delayData.erji = await this.getWiredStatus();
-				if (this.delayData.erji) {
-					this.delayData.count = 0;
-					this.delayData.time = 0;
-					this.delayData.checkStatus = 'error'
-				}
-				this.checkWiredStatus();
-			}, 1000)
-		},    
-		/** 开始效音 */
-		startTune() {
-			// 带了耳机,停止播放效音
-			if (this.delayData.erji) return;
-			this.handleToggleTune('start')
-			setTimeout(() => {
-				this.handleToggleTune('stop')
-			}, 1500)
-		},      
-		/** 设备延迟检测结束 */
-		handleCheckDelayEnd() {
-			if (this.delayData.erji) {
-				this.closeErji();
-			} else {
-				this.erjiShow = true;
-				HeadphoneData.toggle();
-			}
-		},
-		/** 切换效音 */
-		handleToggleTune(state: 'start' | 'stop' | 'finishTune'){
-			if (state === 'start') {
+      console.log('耳机状态', this.delayData.checkStatus)
+      // 设备检测结束,停止获取耳机状态
+      if (this.delayData.checkStatus !== 'ing' || this.delayData.open === false) {
+        return
+      }
+      setTimeout(async () => {
+        this.delayData.erji = await this.getWiredStatus()
+        if (this.delayData.erji) {
+          this.delayData.count = 0
+          this.delayData.time = 0
+          this.delayData.checkStatus = 'error'
+        }
+        this.checkWiredStatus()
+      }, 1000)
+    },
+    /** 开始效音 */
+    startTune() {
+      // 带了耳机,停止播放效音
+      if (this.delayData.erji) return
+      this.handleToggleTune('start')
+      setTimeout(() => {
+        this.handleToggleTune('stop')
+      }, 1500)
+    },
+    /** 设备延迟检测结束 */
+    handleCheckDelayEnd() {
+      if (this.delayData.erji) {
+        this.closeErji()
+      } else {
+        this.erjiShow = true
+        HeadphoneData.toggle()
+      }
+    },
+    /** 切换效音 */
+    handleToggleTune(state: 'start' | 'stop' | 'finishTune') {
+      if (state === 'start') {
         this.delayData.step = 5
-				// 开始效音
-				postMessage({
-					api: "startTune",
-					content: {
-						count: this.delayData.count + '',
-					}
-				})
-			} else if (state === 'stop') {
-				// 结束效音,触发时机: 1.监听后台效音返回 2.点击跳过效音或关闭效音
-				postMessage({
-					api: "endTune"
-				})
-			} else if (state === 'finishTune') {
+        // 开始效音
+        postMessage({
+          api: 'startTune',
+          content: {
+            count: this.delayData.count + '',
+          },
+        })
+      } else if (state === 'stop') {
+        // 结束效音,触发时机: 1.监听后台效音返回 2.点击跳过效音或关闭效音
+        postMessage({
+          api: 'endTune',
+        })
+      } else if (state === 'finishTune') {
         this.delayData.step = 6
-				// 效音完成
-				postMessage({
-					api: "finishTune",
-				}, (res) => {
-					const result = res?.content?.result //1成功 0失败
-					// Toast('检测延迟完成')
-					// setTimeout(() => {
-					// 	this.delayData.open = false
-					// }, 500)
-				})
-			}
-			
-		},    
-		/** 停止设备延迟检测 */
-		handleStopCheckDelay() {
-			runtime.delayCheckFirst = true
-			this.delayData.open = false
-			this.delayData.checkStatus = 'init'
-			this.handleToggleTune('stop')
-			this.close();
-		},    
-		/** 开始检测设备延迟 */
-		async handleStartCheckDelay(){
-			if (this.delayData.checkStatus === 'ing') return;
+        // 效音完成
+        postMessage(
+          {
+            api: 'finishTune',
+          },
+          (res) => {
+            const result = res?.content?.result //1成功 0失败
+            // Toast('检测延迟完成')
+            // setTimeout(() => {
+            // 	this.delayData.open = false
+            // }, 500)
+          }
+        )
+      }
+    },
+    /** 停止设备延迟检测 */
+    handleStopCheckDelay() {
+      runtime.delayCheckFirst = true
+      this.delayData.open = false
+      this.delayData.checkStatus = 'init'
+      this.handleToggleTune('stop')
+      this.close()
+    },
+    /** 开始检测设备延迟 */
+    async handleStartCheckDelay() {
+      if (this.delayData.checkStatus === 'ing') return
       this.delayData.step = 2
-			this.delayData.erji = await this.getWiredStatus();
-			if (this.delayData.erji) {
-				this.delayData.checkStatus = 'error'
-				return;
-			}
-			this.delayData.checkStatus = 'ing';
-			this.startTune();
-			this.checkWiredStatus();
-		},
-
+      this.delayData.erji = await this.getWiredStatus()
+      if (this.delayData.erji) {
+        this.delayData.checkStatus = 'error'
+        return
+      }
+      this.delayData.checkStatus = 'ing'
+      this.startTune()
+      this.checkWiredStatus()
+    },
   },
   mounted() {
     if (!SettingState.eva.mute) {
@@ -1040,22 +1022,14 @@ export default defineComponent({
     listenerMessage('sendResult', this.sendResult)
     listenerMessage('listenerWiredStatus', this.setWiredStatus)
     listenerMessage('recordStartTime', (res) => {
-      console.log(
-        '监听时间',
-        res?.content.inteveral,
-        '系统时间',
-        new Date().getTime()
-      )
+      console.log('监听时间', res?.content.inteveral, '系统时间', new Date().getTime())
     })
     RuntimeUtils.event.on('stopTick', this.clearStartStatus)
     RuntimeUtils.event.on('next-click', this.stop)
     RuntimeUtils.event.on('ended', this.endevent)
     RuntimeUtils.event.on('tickEnd', this.start)
     // console.log('runtime.songs', runtime.songs)
-    runtime.audiosInstance?.audios[this.playUrl]?.addEventListener(
-      'play',
-      this.timeupdate
-    )
+    runtime.audiosInstance?.audios[this.playUrl]?.addEventListener('play', this.timeupdate)
     runtime.evaluatingTips = true
     postMessage(
       {
@@ -1063,9 +1037,9 @@ export default defineComponent({
       },
       this.setWiredStatus
     )
-    hideComplexButton(handleComplexButton, true);
+    hideComplexButton(handleComplexButton, true)
     // 开始效验
-		this.checkEvaluating()
+    this.checkEvaluating()
   },
   unmounted() {
     state.mode = this.oldMode
@@ -1076,10 +1050,7 @@ export default defineComponent({
     RuntimeUtils.event.off('next-click', this.stop)
     RuntimeUtils.event.off('ended', this.endevent)
     RuntimeUtils.event.off('tickEnd', this.start)
-    runtime.audiosInstance?.audios[this.playUrl]?.removeEventListener(
-      'play',
-      this.timeupdate
-    )
+    runtime.audiosInstance?.audios[this.playUrl]?.removeEventListener('play', this.timeupdate)
     runtime.evaluatingTips = false
     state.evaluatings = {}
   },
@@ -1087,17 +1058,9 @@ export default defineComponent({
     const data = getLeveByScore(this.res?.score)
     return (
       <div class={styles.button}>
-        {!(this.endloading || this.startloading) &&
-        !this.res &&
-        this.erjiClicked ? (
+        {!(this.endloading || this.startloading) && !this.res && this.erjiClicked ? (
           this.evaluating && !state.isPauseRecording ? (
-            <Button
-              key="end"
-              color="#01c1b5"
-              round
-              onClick={this.stop}
-              icon="success"
-            >
+            <Button key="end" color="#01c1b5" round onClick={this.stop} icon="success">
               结束演奏
             </Button>
           ) : state.activeTick === -1 ? (
@@ -1109,10 +1072,7 @@ export default defineComponent({
         {/* {this.erjiClicked && SettingState.sett.tuning && state.subjectId !== 23 ? (
           <TuningPopup checkStatus={this.checkStatus} trend={this.trend}/>
         ) : null} */}
-        {this.erjiClicked &&
-        SettingState.sett.tuning &&
-        !detailState.isPercussion &&
-        this.tuningStatus ? (
+        {this.erjiClicked && SettingState.sett.tuning && !detailState.isPercussion && this.tuningStatus ? (
           <TuningPopup
             checkStatus={this.checkStatus}
             frequency={this.frequency}
@@ -1129,25 +1089,13 @@ export default defineComponent({
             <div class={styles.title}>提示</div>
             <div class={styles.content}>
               <div class={styles.detail} style={{ flexDirection: 'column' }}>
-                <p class={styles.tips}>
-                  评测{this.isSaveVideo ? '音视频' : '音频'}是否上传到云端?
-                </p>
+                <p class={styles.tips}>评测{this.isSaveVideo ? '音视频' : '音频'}是否上传到云端?</p>
               </div>
               <div class={styles.ctrls}>
-                <Button
-                  color="#F0F0F0"
-                  round
-                  onClick={() => (this.alertStatus = false)}
-                  style={{ color: '#01c1b5' }}
-                >
+                <Button color="#F0F0F0" round onClick={() => (this.alertStatus = false)} style={{ color: '#01c1b5' }}>
                   取消
                 </Button>
-                <Button
-                  color="#01c1b5"
-                  round
-                  onClick={this.videoUpdate}
-                  style={{ marginLeft: '10px' }}
-                >
+                <Button color="#01c1b5" round onClick={this.videoUpdate} style={{ marginLeft: '10px' }}>
                   确认
                 </Button>
               </div>
@@ -1175,11 +1123,7 @@ export default defineComponent({
             </div>
           </div>
           {this.shareStatus ? (
-            <iframe
-              class={styles.iframe}
-              src={this.getShareUrl()}
-              onLoad={this.shareLoaded}
-            />
+            <iframe class={styles.iframe} src={this.getShareUrl()} onLoad={this.shareLoaded} />
           ) : null}
         </Popup>
         <Popup
@@ -1219,10 +1163,7 @@ export default defineComponent({
               <div class={styles.content}>
                 {!detailState.isPercussion ? (
                   <div class={styles.leftContent}>
-                    <img
-                      src={data.img}
-                      style={{ margin: detailState.isPercussion ? 'auto' : '' }}
-                    />
+                    <img src={data.img} style={{ margin: detailState.isPercussion ? 'auto' : '' }} />
                     <div>
                       <span>{this.res?.score}</span>分<br />
                       {data.mome}
@@ -1275,32 +1216,20 @@ export default defineComponent({
                       margin: detailState.isPercussion ? 'auto' : '',
                     }}
                   />
-                  <div
-                    class={styles.progress}
-                    style={{ display: detailState.isPercussion ? 'none' : '' }}
-                  >
+                  <div class={styles.progress} style={{ display: detailState.isPercussion ? 'none' : '' }}>
                     <div class={styles.progressitem}>
                       <span>音准</span>
-                      <Progress
-                        percentage={this.res?.intonation}
-                        color="linear-gradient(to right, #02E2DB, #01C1B5)"
-                      />
+                      <Progress percentage={this.res?.intonation} color="linear-gradient(to right, #02E2DB, #01C1B5)" />
                       <span>{this.res?.intonation}</span>
                     </div>
                     <div class={styles.progressitem}>
                       <span>节奏</span>
-                      <Progress
-                        percentage={this.res?.cadence}
-                        color="linear-gradient(to right, #02E2DB, #01C1B5)"
-                      />
+                      <Progress percentage={this.res?.cadence} color="linear-gradient(to right, #02E2DB, #01C1B5)" />
                       <span>{this.res?.cadence}</span>
                     </div>
                     <div class={styles.progressitem}>
                       <span>完成度</span>
-                      <Progress
-                        percentage={this.res?.integrity}
-                        color="linear-gradient(to right, #02E2DB, #01C1B5)"
-                      />
+                      <Progress percentage={this.res?.integrity} color="linear-gradient(to right, #02E2DB, #01C1B5)" />
                       <span>{this.res?.integrity}</span>
                     </div>
                   </div>
@@ -1315,20 +1244,10 @@ export default defineComponent({
                   <Button color="#01c1b5" round onClick={this.backDetail}>
                     去练习
                   </Button>
-                  <Button
-                    color="#F79300"
-                    style={{ marginLeft: '10px' }}
-                    round
-                    onClick={() => this.retest()}
-                  >
+                  <Button color="#F79300" style={{ marginLeft: '10px' }} round onClick={() => this.retest()}>
                     再试一次
                   </Button>
-                  <Button
-                    color="#F7B500"
-                    style={{ marginLeft: '10px' }}
-                    round
-                    onClick={this.viewReport}
-                  >
+                  <Button color="#F7B500" style={{ marginLeft: '10px' }} round onClick={this.viewReport}>
                     查看报告
                   </Button>
                 </div>
@@ -1337,25 +1256,24 @@ export default defineComponent({
           ) : null}
         </Popup>
 
-				{/* 延迟检测窗口 */}
-				<Popup 
-					teleport="body"
-					class="popup-scale" 
-					transition="van-scale" 
-					overlay={false}
-					show={this.delayData.open}
-					onClose={() => this.handleCheckDelayEnd()}
-				>
-					<CheckDelayPopup 
-						delayData={this.delayData}
-						onStartCheckDelay={() => this.handleStartCheckDelay()}
-						onClose={() => this.handleStopCheckDelay()} 
-					/>
-				</Popup>
+        {/* 延迟检测窗口 */}
+        <Popup
+          teleport="body"
+          class="popup-scale"
+          transition="van-scale"
+          overlay={false}
+          show={this.delayData.open}
+          onClose={() => this.handleCheckDelayEnd()}
+        >
+          <CheckDelayPopup
+            delayData={this.delayData}
+            onStartCheckDelay={() => this.handleStartCheckDelay()}
+            onClose={() => this.handleStopCheckDelay()}
+          />
+        </Popup>
 
-				{/* <Headphone onClose={this.closeErji} />
+        {/* <Headphone onClose={this.closeErji} />
 				<PhoneTip show={!this.delayData.erji && runtime.evaluatingTips} /> */}
-
       </div>
     )
   },

+ 2 - 2
src/pages/detail/index.tsx

@@ -536,7 +536,7 @@ export default defineComponent({
       this.queryUserTrainingPlayTime()
       this.FetchCourseInfo()
     }
-    setTongjiTag(['_trackEvent', '云练', '切换页面', '详情页面'])
+    setTongjiTag(['_trackEvent', '云练', '切换页面', '详情页面'])
     MusicScoreEvent.once('loaded', () => (this.rendered = true))
     await this.loader()
     listenerMessage('startPlay', () => {
@@ -598,7 +598,7 @@ export default defineComponent({
                 [styles.homework]: SettingState.sett.camera || mode === 'homework',
                 eyeProtection: SettingState.sett.eyeProtection,
                 ipad: browserInfo.iPad,
-                hideCursor: metronomeData.cursorMode === 3
+                hideCursor: metronomeData.cursorMode === 3,
               })}
               key={this.firstLib?.examSongId}
             >

+ 167 - 144
src/pages/list/index.tsx

@@ -1,5 +1,18 @@
 import { defineComponent } from 'vue'
-import { Sticky, Search, List, Empty, CellGroup, Cell, Icon, NoticeBar, DropdownMenu, DropdownItem, Popup, Toast } from 'vant'
+import {
+  Sticky,
+  Search,
+  List,
+  Empty,
+  CellGroup,
+  Cell,
+  Icon,
+  NoticeBar,
+  DropdownMenu,
+  DropdownItem,
+  Popup,
+  Toast,
+} from 'vant'
 import classnames from 'classnames'
 import qs from 'query-string'
 import { find } from 'lodash'
@@ -15,7 +28,7 @@ import VipIcon from '/src/pages/list/icons/vip.png'
 import iconSearch from '/src/pages/list/icons/icon_search.png'
 import styles from './index.module.less'
 
-const searchParse =  qs.parse(location.search)
+const searchParse = qs.parse(location.search)
 
 import MusicIcon from './icons/music.png'
 
@@ -48,7 +61,7 @@ export default defineComponent({
   // },
   methods: {
     async initList() {
-      setTongjiTag(['_trackEvent', '云练', '切换页面', '列表页面'])
+      setTongjiTag(['_trackEvent', '云练', '切换页面', '列表页面'])
       const initState = getInitState()
       for (const key in initState) {
         if (Object.prototype.hasOwnProperty.call(initState, key)) {
@@ -66,29 +79,32 @@ export default defineComponent({
         const musicScoreList = sessionStorage.getItem('musicScoreList')
         const musicList = musicScoreList ? JSON.parse(musicScoreList) : []
         let childClass = []
-        for(let music of musicList) {
-          if(music.id == state.parentId) {
+        for (let music of musicList) {
+          if (music.id == state.parentId) {
             childClass = music.sysMusicScoreCategoriesList || []
           }
         }
         // console.log(childClass)
-        state.levelOptions = [...childClass.map((item: any) => ({
-          value: item.id,
-          text: item.name,
-          childs: item.sysMusicScoreCategoriesList
-        }))]
+        state.levelOptions = [
+          ...childClass.map((item: any) => ({
+            value: item.id,
+            text: item.name,
+            childs: item.sysMusicScoreCategoriesList,
+          })),
+        ]
         if (state.levelOptions.length && !state.levelId) {
           state.levelId = state.levelOptions[0].value
-          const active = find(state.levelOptions, {value: state.levelId})
+          const active = find(state.levelOptions, { value: state.levelId })
           if (active) {
             if (active.childs) {
               console.log(active, 'showInfo')
               state.typeOptions = [
-                {value: 0, text: '全部'},
+                { value: 0, text: '全部' },
                 ...active.childs.map((item: any) => ({
                   value: item.id,
-                  text: item.name
-              }))]
+                  text: item.name,
+                })),
+              ]
             } else {
               state.typeOptions = null
             }
@@ -126,16 +142,18 @@ export default defineComponent({
       try {
         const res = await request.get('/sysMusicScoreAccompaniment/querySubjectIds', {
           params: {
-            categoriesId: this.$route.params.id || 1
-          }
+            categoriesId: this.$route.params.id || 1,
+          },
         })
         appState.subjectOptions = [
-          {value: 0, text: '全部声部'},
-          ...res.data.filter((item: any) => !!item)
+          { value: 0, text: '全部声部' },
+          ...res.data
+            .filter((item: any) => !!item)
             .map((item: any) => ({
               value: item.id,
-              text: item.name
-        }))]
+              text: item.name,
+            })),
+        ]
       } catch (error) {}
     },
     async FetchList() {
@@ -151,25 +169,27 @@ export default defineComponent({
       if (getRequestHostname() !== '/api-student') {
         await this.FetchCats()
       }
-      if(getRequestHostname() === '/api-student') { // 因为学生端加了一个扩展声部
+      if (getRequestHostname() === '/api-student') {
+        // 因为学生端加了一个扩展声部
         appState.subjectOptions = [
-          ...appState.extSubjectIds.filter((item: any) => !!item)
+          ...appState.extSubjectIds
+            .filter((item: any) => !!item)
             .map((item: any) => ({
               value: item.id,
-              text: item.name
-        }))]
-
+              text: item.name,
+            })),
+        ]
       }
       // if (getRequestHostname() != '/api-student') {
-        // 每次请求前设置,确保列表中有值。不在声部列表中清空掉,此处不会影响详情
-        const ids: number[] = appState.subjectOptions.map((item: any) => item.value).filter((item: number) => item > 0)
-        console.log(ids, appState.subjectId)
-        if (ids.includes(5)) {
-          ids.push(6)
-        }
-        if (!ids.includes(appState.subjectId)) {
-          appState.subjectId = 0
-        }
+      // 每次请求前设置,确保列表中有值。不在声部列表中清空掉,此处不会影响详情
+      const ids: number[] = appState.subjectOptions.map((item: any) => item.value).filter((item: number) => item > 0)
+      console.log(ids, appState.subjectId)
+      if (ids.includes(5)) {
+        ids.push(6)
+      }
+      if (!ids.includes(appState.subjectId)) {
+        appState.subjectId = 0
+      }
       // }
       console.log(appState.subjectOptions)
       try {
@@ -184,47 +204,49 @@ export default defineComponent({
         //   state.subjectId = 0
         //   appState.subjectId = 0
         // }
-          state.subjectId = appState.subjectId
-          let params = state.params
-          let parentId = this.$route.params.id
-          // 如果根级分类没有,则取父级分类
-          // let categoriesId = 181
-          let categoriesId = ((state.levelId || state.typeId) === 0 ? undefined : state.typeId || state.levelId) || parentId
-          let subjectId = appState.subjectId === 0 ? undefined : appState.subjectId
-          if(getRequestHostname() !== '/api-student') { // 学生端则根据当前登录人声部选择,其它端,则选择全部
-            // subjectId = undefined
-            // 需要这个id 暂时移除
-          }
+        state.subjectId = appState.subjectId
+        let params = state.params
+        let parentId = this.$route.params.id
+        // 如果根级分类没有,则取父级分类
+        // let categoriesId = 181
+        let categoriesId =
+          ((state.levelId || state.typeId) === 0 ? undefined : state.typeId || state.levelId) || parentId
+        let subjectId = appState.subjectId === 0 ? undefined : appState.subjectId
+        if (getRequestHostname() !== '/api-student') {
+          // 学生端则根据当前登录人声部选择,其它端,则选择全部
+          // subjectId = undefined
+          // 需要这个id 暂时移除
+        }
 
-          const res = await request.get('/sysMusicScore/queryPage2', {
-            params: {
-              ...params,
-              clientType: 'SMART_PRACTICE',
-              subjectId,
-              categoriesId,
-              search: state.search
-            }
-          })
-          const { data } = res
-          // 处理接口重复请求,过滤数据
-          if(state.list.length > 0 && data.pageNo == 1) {
-            return
-          }
-          state.list = [...state.list, ...data.rows]
-          if(params.page >= Math.ceil(data.total / params.rows)) {
-            state.finished = true
-            // Toast('列表加载完成')
-          }
-          state.params.page = data.nextPage
-          if(state.list.length <= 0) {
-              this.show = false
-          }
-      } catch(e) {
+        const res = await request.get('/sysMusicScore/queryPage2', {
+          params: {
+            ...params,
+            clientType: 'SMART_PRACTICE',
+            subjectId,
+            categoriesId,
+            search: state.search,
+          },
+        })
+        const { data } = res
+        // 处理接口重复请求,过滤数据
+        if (state.list.length > 0 && data.pageNo == 1) {
+          return
+        }
+        state.list = [...state.list, ...data.rows]
+        if (params.page >= Math.ceil(data.total / params.rows)) {
+          state.finished = true
+          // Toast('列表加载完成')
+        }
+        state.params.page = data.nextPage
+        if (state.list.length <= 0) {
+          this.show = false
+        }
+      } catch (e) {
         state.error = true
       }
       state.loading = false
     },
-    async getPartNames (xmlUrl: string) {
+    async getPartNames(xmlUrl: string) {
       const partNames: string[] = []
       Toast({
         type: 'loading',
@@ -250,10 +272,7 @@ export default defineComponent({
       const row = this.activeRow
       const needIds = row.rankIds?.split(',')
       const sid = String(appState.user?.student?.memberRankSettingId)
-      if (
-        row.rankIds && appState.user && !needIds.includes(sid) &&
-        getRequestHostname() === '/api-student'
-      ) {
+      if (row.rankIds && appState.user && !needIds.includes(sid) && getRequestHostname() === '/api-student') {
         detailState.vipShow = true
         return
       }
@@ -265,7 +284,7 @@ export default defineComponent({
               id: row.id,
               name: row.name,
               partIndex: this.selectedPartIndex,
-            }
+            },
           })
         }
         return
@@ -274,7 +293,7 @@ export default defineComponent({
       if (this.isApp) {
         /**
          * app 已验证麦克风,摄像头权限才会继续打开页面
-        */
+         */
         postMessage({
           api: 'openAccompanyWebView',
           content: {
@@ -283,7 +302,7 @@ export default defineComponent({
             isHideTitle: true,
             statusBarTextColor: false,
             isOpenLight: true,
-          }
+          },
         })
       } else {
         const nextUrl = toNext('#' + herf, {
@@ -313,13 +332,13 @@ export default defineComponent({
       this.openDetail()
     },
     onPayVideo(evt: MouseEvent, data: any) {
-      evt.stopPropagation();
+      evt.stopPropagation()
       postMessage({
         api: 'recordHomeworkVideo',
         content: {
           ...data,
           partIndex: this.selectedPartIndex,
-        }
+        },
       })
     },
     openRecordingWebview(evt: MouseEvent, row: any) {
@@ -334,7 +353,7 @@ export default defineComponent({
           // isHideTitle: true,
           // statusBarTextColor: false,
           // isOpenLight: true,
-        }
+        },
       })
     },
     onSearch() {
@@ -349,7 +368,7 @@ export default defineComponent({
       this.onSearch()
     },
     onClickLeft() {
-      (this as any).$router.replace('/')
+      ;(this as any).$router.replace('/')
     },
   },
   render() {
@@ -362,76 +381,81 @@ export default defineComponent({
           style={{
             borderRadius: '8px',
           }}
-          onClickOverlay={() => this.chooseShow = false}
-          onClickCloseIcon={() => this.chooseShow = false}
+          onClickOverlay={() => (this.chooseShow = false)}
+          onClickCloseIcon={() => (this.chooseShow = false)}
         >
-          <ChoosePartName
-            partNames={this.partNames}
-            onSelectedPartName={this.onSelectedPartName}
-          />
+          <ChoosePartName partNames={this.partNames} onSelectedPartName={this.onSelectedPartName} />
         </Popup>
         <Sticky>
-          {state.typeOptions || state.levelOptions && state.levelOptions.length > 0 ?
-          <DropdownMenu
-            activeColor="#01C1B5"
-          >
-            {state.levelOptions && state.levelOptions.length > 0 ? <DropdownItem
-              modelValue={state.levelId}
-              options={state.levelOptions}
-              onChange={(val: number) => {
-                state.levelId = val
-                state.typeId = 0
-                const active = find(state.levelOptions, {value: val})
-                if (active) {
-                  if (active.childs) {
-                    state.typeOptions = [
-                      {value: 0, text: '全部'},
-                      ...active.childs.map((item: any) => ({
-                        value: item.id,
-                        text: item.name
-                      }))]
-                  } else {
-                    state.typeOptions = null
-                  }
-                }
-                this.onSearch()
-              }}
-            /> : null }
-            {state.typeOptions ? (
-              <DropdownItem
-                class={styles.searchSelect}
-                get-container="#app"
-                modelValue={state.typeId}
-                options={state.typeOptions}
-                onChange={(val: any) => {
-                  state.typeId = val
-                  this.onSearch()
-                }}
-              />
+          {state.typeOptions || (state.levelOptions && state.levelOptions.length > 0) ? (
+            <DropdownMenu activeColor="#01C1B5">
+              {state.levelOptions && state.levelOptions.length > 0 ? (
+                <DropdownItem
+                  modelValue={state.levelId}
+                  options={state.levelOptions}
+                  onChange={(val: number) => {
+                    state.levelId = val
+                    state.typeId = 0
+                    const active = find(state.levelOptions, { value: val })
+                    if (active) {
+                      if (active.childs) {
+                        state.typeOptions = [
+                          { value: 0, text: '全部' },
+                          ...active.childs.map((item: any) => ({
+                            value: item.id,
+                            text: item.name,
+                          })),
+                        ]
+                      } else {
+                        state.typeOptions = null
+                      }
+                    }
+                    this.onSearch()
+                  }}
+                />
               ) : null}
-            {/* <DropdownItem
+              {state.typeOptions ? (
+                <DropdownItem
+                  class={styles.searchSelect}
+                  get-container="#app"
+                  modelValue={state.typeId}
+                  options={state.typeOptions}
+                  onChange={(val: any) => {
+                    state.typeId = val
+                    this.onSearch()
+                  }}
+                />
+              ) : null}
+              {/* <DropdownItem
               modelValue={appState.subjectId}
               options={appState.subjectOptions}
               onChange={this.subjectChange}
             /> */}
-          </DropdownMenu> : null
-          }
+            </DropdownMenu>
+          ) : null}
           <Search
             class={[styles.search]}
             placeholder="请输入搜索关键词"
             modelValue={state.search}
-            background='#F8F9FC'
-            onUpdate:model-value={(text: string) => state.search = text}
+            background="#F8F9FC"
+            onUpdate:model-value={(text: string) => (state.search = text)}
             showAction
             onSearch={this.onSearch}
             vSlots={{
-              'left-icon': () => (<img class={styles.iconSearch} src={iconSearch} />),
+              'left-icon': () => <img class={styles.iconSearch} src={iconSearch} />,
               label: () => {
-                if (getRequestHostname() == '/api-student' && appState.subjectOptions && appState.subjectOptions.length === 1) return null
+                if (
+                  getRequestHostname() == '/api-student' &&
+                  appState.subjectOptions &&
+                  appState.subjectOptions.length === 1
+                )
+                  return null
                 return (
                   <DropdownMenu
                     activeColor="#01C1B5"
-                    onClick={(evt: MouseEvent) => {evt.preventDefault()}}
+                    onClick={(evt: MouseEvent) => {
+                      evt.preventDefault()
+                    }}
                   >
                     <DropdownItem
                       class={styles.searchSelect}
@@ -447,13 +471,15 @@ export default defineComponent({
                 )
               },
               action: () => (
-                <span class={styles.search_btn} onClick={this.onSearch}>搜索</span>
-              )
+                <span class={styles.search_btn} onClick={this.onSearch}>
+                  搜索
+                </span>
+              ),
             }}
           />
         </Sticky>
         {/* <div class={styles.vipTip}><span class={styles.strong}>限时免费</span>使用</div> */}
-        <div class={classnames(styles.accompanyList, styles.song)} >
+        <div class={classnames(styles.accompanyList, styles.song)}>
           {this.show ? (
             <List
               loading={state.loading}
@@ -464,9 +490,7 @@ export default defineComponent({
               immediateCheck={false}
               onLoad={this.FetchList}
               vSlots={{
-                error: () => (
-                  <span onClick={this.FetchList}>加载失败,请点击重试</span>
-                )
+                error: () => <span onClick={this.FetchList}>加载失败,请点击重试</span>,
               }}
             >
               <CellGroup>
@@ -480,7 +504,7 @@ export default defineComponent({
                           <Icon class={styles.iconMusic} name={MusicIcon} />
                           {item.rankIds ? (
                             <div class={styles.icon}>
-                              <img src={VipIcon}/>
+                              <img src={VipIcon} />
                             </div>
                           ) : null}
                         </div>
@@ -495,18 +519,17 @@ export default defineComponent({
                           text={item.name}
                           key="notactive"
                         />
-                      )
+                      ),
                     }}
-                  >
-                  </Cell>
+                  ></Cell>
                 ))}
               </CellGroup>
             </List>
           ) : (
-            <Empty description="暂无数据"/>
+            <Empty description="暂无数据" />
           )}
         </div>
       </div>
     )
-  }
+  },
 })

+ 1 - 1
src/subpages/colexiu/App.tsx

@@ -16,7 +16,7 @@ let timer = null as any
 const initBehaviorId = '' + Date.now()
 
 let expireTimeFlag = false
-/** 学生端记录在云练里面的时长 */
+/** 学生端记录在云练里面的时长 */
 const recordTotalTime = () => {
   const client = useClientType()
   if (client == 'web') return

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio