浏览代码

Merge branch 'feature-tianyong-newVersion' of http://git.dayaedu.com/liushengqiang/music-score into hqyDevNewVersion

黄琪勇 11 月之前
父节点
当前提交
50c39a8316
共有 34 个文件被更改,包括 154 次插入100 次删除
  1. 4 2
      src/helpers/customMusicScore.ts
  2. 1 1
      src/page-instrument/component/authorName/index.module.less
  3. 1 0
      src/page-instrument/custom-plugins/helper-model/recommendation/index.module.less
  4. 2 2
      src/page-instrument/custom-plugins/helper-model/recommendation/index.tsx
  5. 5 2
      src/page-instrument/evaluat-model/index.tsx
  6. 3 0
      src/page-instrument/follow-model/index.module.less
  7. 2 1
      src/page-instrument/follow-model/index.tsx
  8. 二进制
      src/page-instrument/header-top/image/headImg2.png
  9. 二进制
      src/page-instrument/header-top/image/speedBtn.png
  10. 2 2
      src/page-instrument/header-top/index.module.less
  11. 4 4
      src/page-instrument/header-top/index.tsx
  12. 2 1
      src/page-instrument/header-top/speed/index.module.less
  13. 50 30
      src/page-instrument/view-detail/index.tsx
  14. 2 1
      src/page-instrument/view-detail/smoothAnimation/index.ts
  15. 二进制
      src/page-instrument/view-evaluat-report/component/share-top/image/icon-huifang.png
  16. 二进制
      src/page-instrument/view-evaluat-report/component/share-top/image/icon-shiyi.png
  17. 1 1
      src/page-instrument/view-evaluat-report/component/share-top/index.module.less
  18. 6 6
      src/page-instrument/view-evaluat-report/component/share-top/index.tsx
  19. 4 4
      src/page-instrument/view-evaluat-report/index.module.less
  20. 7 7
      src/page-instrument/view-evaluat-report/index.tsx
  21. 3 1
      src/state.ts
  22. 1 1
      src/style.css
  23. 3 1
      src/view/abnormal-pop/index.module.less
  24. 11 11
      src/view/fingering/fingering-config.ts
  25. 0 0
      src/view/fingering/fingering-img/baroque-recorder/index.json
  26. 0 0
      src/view/fingering/fingering-img/ocarina/index.json
  27. 0 0
      src/view/fingering/fingering-img/piccolo/index.json
  28. 0 0
      src/view/fingering/fingering-img/whistling/index.json
  29. 7 1
      src/view/fingering/index.tsx
  30. 3 0
      src/view/music-score/index.module.less
  31. 7 0
      src/view/music-score/index.tsx
  32. 14 14
      src/view/plugins/useDrag/index.module.less
  33. 7 6
      src/view/selection/index.module.less
  34. 2 1
      src/view/selection/index.tsx

+ 4 - 2
src/helpers/customMusicScore.ts

@@ -557,8 +557,10 @@ export const resetFormate = () => {
 					}
 				} catch (error) {}
 				const bbox = stave?.getBBox() || {};
-				const rect = `<rect class="vf-custom-bg" x="${bbox.x}" y="${bbox.y}" width="${bbox.width}" height="${bbox.height}" fill="#609FCF" />`
-				const rectBottom = `<rect class="vf-custom-bot" x="${bbox.x}" y="${bbox.y+bbox.height}" width="${bbox.width}" height="7.5" fill="#2B70A5" />`
+				const bgColor = state.isEvaluatReport ? '#132D4C' : '#609FCF';
+				const botColor = state.isEvaluatReport ? '#040D1E' : '#2B70A5';
+				const rect = `<rect class="vf-custom-bg" x="${bbox.x}" y="${bbox.y}" width="${bbox.width}" height="${bbox.height}" fill=${bgColor} />`
+				const rectBottom = `<rect class="vf-custom-bot" x="${bbox.x}" y="${bbox.y+bbox.height}" width="${bbox.width}" height="7.5" fill=${botColor} />`
 				// const filterDom = `<defs>
 				// 						<filter id="shadow">
 				// 						<feDropShadow dx="5" dy="5" stdDeviation="3" flood-color="black" />

+ 1 - 1
src/page-instrument/component/authorName/index.module.less

@@ -2,7 +2,7 @@
     height: 1.8rem;
 }
 .title{
-    width: 216px;
+    width: 280px;
     margin: 0 auto;
     :global{
         .van-notice-bar{

+ 1 - 0
src/page-instrument/custom-plugins/helper-model/recommendation/index.module.less

@@ -133,6 +133,7 @@
                                     background: #F2FAFF;
                                     border-radius: 8px;
                                     color: #1CACF1;
+                                    font-weight: 600;
                                 }
                                 .van-cell__value{
                                     display: none;

+ 2 - 2
src/page-instrument/custom-plugins/helper-model/recommendation/index.tsx

@@ -106,7 +106,7 @@ export default defineComponent({
 			getTypeList();
 		});
 		function beforeRead(file:any[]){
-			if(file.length > 5){
+			if(file.length + fileList.value.length > 5){
 				showToast(`最多只能选择5张图片`);
 			}
 			return true
@@ -123,7 +123,7 @@ export default defineComponent({
 							<DropdownMenu class={[styles.dropdownMenu, currItem.value && styles.currItem]} overlay={false}>
 								<DropdownItem class={['recommendationDropdownItem']} title={ currItem.value?currItem.value.name:"请选择反馈类型"} v-model={recommenData.suggestId} options={suggestionTypeList.value}/>
 							</DropdownMenu>
-							<div class={styles.tit}>{`${recommenData.message.length}/200`}</div>
+							<div class={styles.tit}>{`${recommenData.message.length >= 200 ? 200 : recommenData.message.length }/200`}</div>
 						</div>
 						<Field
 							class={styles.field}

+ 5 - 2
src/page-instrument/evaluat-model/index.tsx

@@ -250,6 +250,9 @@ export default defineComponent({
           const startId = item.noteElement.tie?.StartNote?.NoteToGraphicalNoteObjectId
           isTenutoSound = item.NoteToGraphicalNoteObjectId === startId ? false : true
         }
+        // 音符是否不需要评测
+        let noteNeedEvaluat = item.hasGraceNote || ListenMode || dontEvaluatingMode || !!item?.voiceEntry?.ornamentContainer || !!item.noteElement?.speedInfo?.startWord?.includes('rit.') || item.skipMode
+        noteNeedEvaluat = noteNeedEvaluat == true ? true : false;
         const data = {
           timeStamp: (start * 1000) / rate,
           duration: ((end * 1000) / rate - (start * 1000) / rate) * noteRate,
@@ -260,12 +263,12 @@ export default defineComponent({
           measureIndex: measureIndex,
           measureRenderIndex: item.measureListIndex,
           //  item.MeasureNumberXML >= 1 ? item.MeasureNumberXML - 1 : note.noteElement.sourceMeasure.measureListIndex,
-          dontEvaluating: item.hasGraceNote || ListenMode || dontEvaluatingMode || !!item?.voiceEntry?.ornamentContainer || !!item.noteElement?.speedInfo?.startWord?.includes('rit.') || item.skipMode,
+          dontEvaluating: noteNeedEvaluat,
           musicalNotesIndex: index,
           denominator: note.noteElement?.Length.denominator,
           // isOrnament: !!note?.voiceEntry?.ornamentContainer,
           isTenutoSound,
-          isStaccato: item?.voiceEntry?.isStaccato, // 是否是重音
+          isStaccato: item?.voiceEntry?.isStaccato ? true : false, // 是否是重音
         };
         datas.push(data);
       }

+ 3 - 0
src/page-instrument/follow-model/index.module.less

@@ -84,6 +84,9 @@
           margin-left: 20px;
       }
   }
+  &.operatingLeft {
+    left: 30px !important;
+  }
 }
 .beginMask{
   position: fixed;

+ 2 - 1
src/page-instrument/follow-model/index.tsx

@@ -41,12 +41,13 @@ export default defineComponent({
         {
           followData.isBeginMask && <div class={styles.beginMask}></div>
         }        
-        <div class={styles.operatingBtn}>
+        <div class={[styles.operatingBtn, state.playBtnDirection === "left" ? styles.operatingLeft : ""]}>
           {!followData.start && (
             <img
               class={[styles.iconBtn, "follow-1"]}
               src={headImg("icon_play.png")}
               onClick={() => {
+                followData.start = true;
                 handleFollowStart();
               }}
             />

二进制
src/page-instrument/header-top/image/headImg2.png


二进制
src/page-instrument/header-top/image/speedBtn.png


+ 2 - 2
src/page-instrument/header-top/index.module.less

@@ -307,7 +307,7 @@
     }
 
     &.pauseRightButton {
-        right: 88px !important;
+        right: 108px !important;
         left: auto !important;
         bottom: 12px !important;
     }
@@ -387,5 +387,5 @@
 }
 
 .socketErrorStatus{
-    top: 10vh;
+    top: 20vh;
 }

+ 4 - 4
src/page-instrument/header-top/index.tsx

@@ -626,7 +626,7 @@ export default defineComponent({
     return () => (
       <>
         <div
-          class={[styles.headerTop, state.platform === IPlatform.PC && state.musicScoreBtnDirection === "left" ? styles.headerTopRight : ""]}
+          class={[styles.headerTop]}
           onClick={(e: Event) => {
             e.stopPropagation();
             if (state.platform === IPlatform.PC) {
@@ -691,7 +691,7 @@ export default defineComponent({
           {/* 模式提醒 */}
           {
             state.modeType === "practise" &&
-              <div class={[styles.modeWarn, "practiseModeWarn", state.platform === IPlatform.PC && state.musicScoreBtnDirection === "left" ? styles.modeWarnRight : ""]}>
+              <div class={[styles.modeWarn, "practiseModeWarn"]}>
                 <img src={state.playType === "play" ? headImg("perform1.png") : headImg("sing1.png")} />
                 <div>{state.playType === "play" ? "演奏场景" : "演唱场景"}</div>
               </div>
@@ -882,7 +882,7 @@ export default defineComponent({
             "driver-1",
             styles.playBtn,
             playBtn.value.disabled && styles.disabled,
-            state.platform === IPlatform.PC && state.musicScoreBtnDirection === "left" ? styles.playLeftButton : state.platform === IPlatform.PC && state.musicScoreBtnDirection === "right" ? styles.playRightButton : "",
+            // state.platform === IPlatform.PC && state.musicScoreBtnDirection === "left" ? styles.playLeftButton : state.platform === IPlatform.PC && state.musicScoreBtnDirection === "right" ? styles.playRightButton : "",
           ]}
           onClick={() => togglePlay(state.playState === "play" ? "paused" : "play")}
         >
@@ -897,7 +897,7 @@ export default defineComponent({
         <div
           id="tips-step-9"
           style={{ display: resetBtn.value.display ? "" : "none" }}
-          class={[styles.resetBtn, resetBtn.value.disabled && styles.disabled, state.platform === IPlatform.PC && state.musicScoreBtnDirection === "left" ? styles.pauseLeftButton : state.platform === IPlatform.PC && state.musicScoreBtnDirection === "right" ? styles.pauseRightButton : ""]}
+          class={[styles.resetBtn, resetBtn.value.disabled && styles.disabled]}
           onClick={() => handleResetPlay()}
         >
           <img class={styles.iconBtn} src={headImg("icon_reset.png")} />

+ 2 - 1
src/page-instrument/header-top/speed/index.module.less

@@ -120,6 +120,7 @@
                                     height: 4px;
                                     background: url("../image/gg.png") no-repeat;
                                     background-size: 100% 100%;
+                                    transform: translate(-20%,-20%);
                                 }
                                 .van-slider__button-wrapper{
                                     bottom: 0;
@@ -146,7 +147,7 @@
                             padding-top: 3px;
                         }
                         .speedBtn{
-                            width: 16px;
+                            width: 20px;
                             height: 30px;
                             background: url("../image/speedBtn.png") no-repeat;
                             background-size: 100% 100%;

+ 50 - 30
src/page-instrument/view-detail/index.tsx

@@ -314,35 +314,47 @@ export default defineComponent({
         } else {
           console.log('指法',state.playBtnDirection,state.platform)
           // 老师端,竖向指法,需要根据功能按钮方向进行设置
-          if (state.platform === IPlatform.PC) {
-            return {
-              container: {
-                paddingRight: state.playBtnDirection === "right" ? "initial" : state.fingeringInfo.width,
-                paddingLeft: state.playBtnDirection === "right" ? state.fingeringInfo.width : "initial",
-              },
-              fingerBox: {
-                position: "absolute",
-                width: state.fingeringInfo.width,
-                height: "80%",
-                right: state.playBtnDirection === "right" ? "initial" : 0,
-                left: state.playBtnDirection === "right" ? 0 : "initial",
-                top: 0,
-              },
-            };
-          } else {
-            return {
-              container: {
-                paddingLeft: state.fingeringInfo.width,
-              },
-              fingerBox: {
-                position: "absolute",
-                width: state.fingeringInfo.width,
-                height: "80%",
-                left: 0,
-                top: 0,
-              },
-            };
-          }
+          // if (state.platform === IPlatform.PC) {
+          //   return {
+          //     container: {
+          //       paddingRight: state.playBtnDirection === "right" ? "initial" : state.fingeringInfo.width,
+          //       paddingLeft: state.playBtnDirection === "right" ? state.fingeringInfo.width : "initial",
+          //     },
+          //     fingerBox: {
+          //       position: "absolute",
+          //       width: state.fingeringInfo.width,
+          //       height: state.fingeringInfo.name === "hulusi-flute" ? "86%" : "80%",
+          //       right: state.playBtnDirection === "right" ? "initial" : 0,
+          //       left: state.playBtnDirection === "right" ? 0 : "initial",
+          //       top: state.fingeringInfo.name === "ocarina" ? "60px" : 0,
+          //     },
+          //   };
+          // } else {
+          //   return {
+          //     container: {
+          //       paddingLeft: state.fingeringInfo.width,
+          //     },
+          //     fingerBox: {
+          //       position: "absolute",
+          //       width: state.fingeringInfo.width,
+          //       height: state.fingeringInfo.name === "hulusi-flute" ? "86%" : "80%",
+          //       left: 0,
+          //       top: state.fingeringInfo.name === "ocarina" ? "60px" : 0,
+          //     },
+          //   };
+          // }
+          return {
+            container: {
+              paddingLeft: state.fingeringInfo.width,
+            },
+            fingerBox: {
+              position: "absolute",
+              width: state.fingeringInfo.width,
+              height: state.fingeringInfo.name === "hulusi-flute" ? "86%" : "80%",
+              left: 0,
+              top: state.fingeringInfo.name === "ocarina" ? "60px" : 0,
+            },
+          };
         }
       }
       return {
@@ -393,6 +405,13 @@ export default defineComponent({
         sendParentMessage(state.playState);
       }
     );
+    // 监听跟练的开启状态
+    watch(
+      () => followData.start,
+      () => {
+        detailData.headerHide = followData.start;
+      }
+    );
     /** 指法预览切换 */
     watch(
       () => detailData.fingerPreView,
@@ -490,7 +509,8 @@ export default defineComponent({
             // if (state.playState === "play" && state.platform != IPlatform.PC) {
             //   detailData.headerHide = !detailData.headerHide;
             // }
-            if (state.playState === "play") {
+            // 点击谱面跟练也需要切换显示按钮栏
+            if (state.playState === "play" || followData.start) {
               detailData.headerHide = !detailData.headerHide;
             }
           }}

+ 2 - 1
src/page-instrument/view-detail/smoothAnimation/index.ts

@@ -186,7 +186,8 @@ export function moveSmoothAnimation(progress: number, activeIndex: number, isMov
  * 谱面移动逻辑
  */
 function move_osmd(nowPointsPos: pointsPosType[0]) {
-   const speed = smoothAnimationState.aveSpeed * (state.speed / 60)
+   // 评测移动太快看不到前面小节的分数,评测改成0.5倍速移动谱面
+   const speed = (state.modeType === 'evaluating' ? smoothAnimationState.aveSpeed * 0.5 : smoothAnimationState.aveSpeed) * (state.speed / 60)
    // 视口宽度
    const clientWidth = smoothAnimationState.osdmScrollDomWith
    const clientMidWidth = clientWidth / 2

二进制
src/page-instrument/view-evaluat-report/component/share-top/image/icon-huifang.png


二进制
src/page-instrument/view-evaluat-report/component/share-top/image/icon-shiyi.png


+ 1 - 1
src/page-instrument/view-evaluat-report/component/share-top/index.module.less

@@ -48,7 +48,7 @@
             line-height: 20px;
             margin-bottom: 2px;
             padding: 0 !important;
-
+            width: 200px;
             :global {
                 .van-notice-bar {
                     height: 20px;

+ 6 - 6
src/page-instrument/view-evaluat-report/component/share-top/index.tsx

@@ -4,8 +4,8 @@ import styles from "./index.module.less";
 import { api_back } from "/src/helpers/communication";
 import state from "/src/state";
 import iconBack from "./image/back_icon.png";
-import iconShiyi from "./image/icon-shiyi.svg";
-import iconhuifang from "./image/icon-huifang.svg";
+import iconShiyi from "./image/icon-shiyi.png";
+import iconhuifang from "./image/icon-huifang.png";
 import shiyiTop from "./image/shiyi-top.png";
 import shiyiClose from "./image/closeImg.png";
 import { Grid, GridItem, Popup } from "vant";
@@ -53,7 +53,7 @@ export default defineComponent({
       low: "#FFB900",
       right: "#65FFAE",
       wrong: "#DA3736",
-      lack: "#A5CBFF",
+      lack: "#7AB2FF",
       not: "#FFFFFF",
       fast: "#B366FF",
       slow: "#FF7B00",
@@ -221,7 +221,7 @@ export default defineComponent({
               {/* <div class={styles.lcName}>{state.examSongName}</div> */}
               <Title class={styles.lcName} text={state.examSongName} rightView={false} />
               <div class={styles.lcScore}>
-                {level[scoreData.value.heardLevel]}|速度:{scoreData.value.speed}|综合分数:{scoreData.value.score}分
+                {level[scoreData.value.heardLevel]}|速度:{Math.floor(scoreData.value.speed)}|综合分数:{scoreData.value.score}分
               </div>
             </div>
           </div>
@@ -343,7 +343,7 @@ export default defineComponent({
 
                   {itemType.value === "integrity" && (
                     <div>
-                      <Note fill="#A5CBFF" />
+                      <Note fill="#7AB2FF" />
                       <span>时值不足</span>
                     </div>
                   )}
@@ -475,7 +475,7 @@ export default defineComponent({
                     <span>紫色音符:节奏偏快</span>
                   </div>
                   <div class={styles.item}>
-                    <Note fill="#A5CBFF" />
+                    <Note fill="#7AB2FF" />
                     <span>浅蓝色音符:时值不足</span>
                   </div>
                   <div class={styles.item}>

+ 4 - 4
src/page-instrument/view-evaluat-report/index.module.less

@@ -87,8 +87,8 @@
 
 .beam {
   path {
-    fill: #ADADAD !important;
-    stroke: #ADADAD;
+    // fill: #ADADAD !important;
+    // stroke: #ADADAD;
   }
 }
 
@@ -171,8 +171,8 @@
 // 完成度
 .integrity_wrong {
   path {
-    fill: #A5CBFF;
-    stroke: #A5CBFF;
+    fill: #7AB2FF;
+    stroke: #7AB2FF;
   }
 }
 

+ 7 - 7
src/page-instrument/view-evaluat-report/index.tsx

@@ -294,13 +294,13 @@ export default defineComponent({
           svgEl?.classList.add(colorsClass[errType]);
           // console.log(123456,'添加颜色',errType)
           // 评测过的音符,需要给小节添加背景色
-          if (errType !== "NOT_PLAYED") {
-            const staveNote = svgEl?.parentNode?.parentNode?.querySelector(".vf-stave");
-            if (staveNote) {
-              staveNote.querySelector(".vf-custom-bg")?.setAttribute("fill", "#132D4C");
-              staveNote.querySelector(".vf-custom-bot")?.setAttribute("fill", "#040D1E");
-            }
-          }
+          // if (errType !== "NOT_PLAYED") {
+          //   const staveNote = svgEl?.parentNode?.parentNode?.querySelector(".vf-stave");
+          //   if (staveNote) {
+          //     staveNote.querySelector(".vf-custom-bg")?.setAttribute("fill", "#132D4C");
+          //     staveNote.querySelector(".vf-custom-bot")?.setAttribute("fill", "#040D1E");
+          //   }
+          // }
           if (svgEl && isNeedCopyElement) {
             stemEl?.classList.remove(colorsClass[errType]);
             svgEl?.classList.remove(colorsClass[errType]);

+ 3 - 1
src/state.ts

@@ -1787,7 +1787,9 @@ export const fillWordColor = () => {
   const currentLyrics: SVGAElement[] = Array.from(document.querySelectorAll(`.lyric${currentNote?.noteId}`));
   currentLyrics.forEach((lyric, index) => {
     const lyricIndex = lyric.getAttribute('lyricIndex');
-    if ((index === currentNote.repeatIdx && currentNote.repeatIdx + 1 == lyricIndex) || (currentNote.repeatIdx > 0 && currentNote.formatLyricsEntries?.length === 1)) {
+    // bug:#10942,如果需要反复唱的小节,只有一遍歌词,反复唱的时候,歌词都需要高亮
+    const onlyOneLyric = currentNote.measures?.every((item: any) => item?.formatLyricsEntries?.length <= 1);
+    if ((index === currentNote.repeatIdx && currentNote.repeatIdx + 1 == lyricIndex) || (currentNote.repeatIdx != index && !onlyOneLyric && currentNote.repeatIdx + 1 == lyricIndex) || (currentNote.repeatIdx > 0 && currentNote.formatLyricsEntries?.length === 1 && onlyOneLyric)) {
       lyric?.classList.add('lyricActive')
     }
     // if ((index === currentNote.repeatIdx && currentNote.repeatIdx + 1 == lyricIndex)) {

+ 1 - 1
src/style.css

@@ -36,7 +36,7 @@ body {
 }
 
 .selectionToast {
-  top: 10vh;
+  top: 20vh;
 }
 
 .pop-center-enter-from,

+ 3 - 1
src/view/abnormal-pop/index.module.less

@@ -30,7 +30,7 @@
             font-size: 15px;
             font-family: PingFangSC, PingFang SC;
             font-weight: 400;
-            color: rgba(255, 255, 255, 0.8);     
+            color: rgba(255, 255, 255, 0.7);     
             margin: 20px 0 24px;
             text-align: center;  
         }
@@ -79,6 +79,7 @@
     flex-direction: column;
     justify-content: center;
     align-items: center;
+    transform: translateY(-14px);
     .loadingIcon {
         width: 118px;
     }
@@ -97,6 +98,7 @@
         text-align: center;
         width: 97px;
         height: 32px;
+        box-sizing: border-box;
         &:active{
             opacity: 0.8;
         }

+ 11 - 11
src/view/fingering/fingering-config.ts

@@ -260,7 +260,7 @@ export const matchVoicePart = (id: number | string, type: "SINGLE" | "CONCERT"):
   } else {
     let code = id;
     const subject: { [_key: string | number]: any } = {
-      Piccolo: "piccolo",
+      Piccolo: 1,
       Flute: 2,
       "Flute 1": 2,
       "Flute 2": 2,
@@ -448,16 +448,16 @@ export const subjectFingering = (subjectId: number | string): IFingering => {
         hasTizhi: true,
         id: 2,
       };
-    // case "piccolo": // 德式竖笛
-    //   return {
-    //     name: "piccolo",
-    //     direction: "vertical",
-    //     width: "3rem",
-    //     orientation: 0,
-    //     code: "竖笛",
-    //     hasTizhi: true,
-    //     id: 37,
-    //   };
+    case "piccolo": // 德式竖笛
+      return {
+        name: "piccolo",
+        direction: "vertical",
+        width: "3rem",
+        orientation: 0,
+        code: "竖笛",
+        hasTizhi: true,
+        id: 37,
+      };
     case "hulusi-flute": // 葫芦丝
       return {
         name: "hulusi-flute",

文件差异内容过多而无法显示
+ 0 - 0
src/view/fingering/fingering-img/baroque-recorder/index.json


文件差异内容过多而无法显示
+ 0 - 0
src/view/fingering/fingering-img/ocarina/index.json


文件差异内容过多而无法显示
+ 0 - 0
src/view/fingering/fingering-img/piccolo/index.json


文件差异内容过多而无法显示
+ 0 - 0
src/view/fingering/fingering-img/whistling/index.json


+ 7 - 1
src/view/fingering/index.tsx

@@ -27,6 +27,12 @@ export default defineComponent({
       return state.times[state.activeNoteIndex]?.realKey || -1;
     });
 
+    // 竖笛、陶笛,云教练的乐器图片不需要正面两个字
+    const specialBgFinger = computed(() => {
+      const list: any = ['baroque-recorder', 'piccolo', 'ocarina', 'whistling']
+      return list.includes(state.fingeringInfo.name);
+    });
+
     const doubeClick = () => {
       const nowTime = Date.now();
       if (nowTime - fingerData.delay < 300) {
@@ -61,7 +67,7 @@ export default defineComponent({
           ) : (
             <div onClick={() => doubeClick()} class={[styles.fingeringContainer, styles.vertical, state.fingeringInfo.name, state.fingeringInfo.name === 'hulusi-flute' ? styles.hulusiTop : '']}>
               <div class={styles.imgs}>
-                <img class="driver-7" src={fingerData.subject?.json?.full} />
+                <img class="driver-7" src={specialBgFinger.value ? fingerData.subject?.json?.fullSpe : fingerData.subject?.json?.full} />
                 {rs.map((key: number | string, index: number) => {
                   const nk: string = typeof key === "string" ? key.replace("active-", "") : String(key);
                   return <img data-index={nk} src={fingerData.subject?.json?.[nk]} />;

+ 3 - 0
src/view/music-score/index.module.less

@@ -22,6 +22,9 @@
             left: 0;
             top: 0;
         }
+        // #osmdCanvasPage2 {
+        //     display: none;
+        // }
     }
     .noteActive {
         path {

+ 7 - 0
src/view/music-score/index.tsx

@@ -150,6 +150,13 @@ export default defineComponent({
 			if(state.isSimplePage){
 				state.zoom = 0.5
 			}
+			// 需要渲染总谱的云教练页面
+			if (!state.isSimplePage && state.isCombineRender) {
+				for (let i = 0; i < osmd.Sheet.Instruments.length; i++) {
+					const trackName = osmd.Sheet.Instruments[i].Name || '';
+					osmd.Sheet.Instruments[i].Visible = state.canSelectTracks.includes(trackName)
+				  }
+			}
 			osmd.zoom = state.zoom;
 			osmd.render();
 			console.log("🚀 ~ osmd:", osmd)

+ 14 - 14
src/view/plugins/useDrag/index.module.less

@@ -7,20 +7,20 @@
   //overflow: hidden;
   position: absolute;
   bottom: 0;
-  .box {
-    position: relative;
-    bottom: 10px;
-    width: 20px;
-    height: 20px;
-    background: url('./img/left.png') no-repeat;
-    background-size: 100% 100%;
-    border-bottom-left-radius: 16Px;
-    &.right {
-      background: url('./img/right.png') no-repeat;
-      background-size: 100% 100%;
-      border-bottom-right-radius: 16Px;
-    }
-  }
+  // .box {
+  //   position: relative;
+  //   bottom: 10px;
+  //   width: 20px;
+  //   height: 20px;
+  //   background: url('./img/left.png') no-repeat;
+  //   background-size: 100% 100%;
+  //   border-bottom-left-radius: 16Px;
+  //   &.right {
+  //     background: url('./img/right.png') no-repeat;
+  //     background-size: 100% 100%;
+  //     border-bottom-right-radius: 16Px;
+  //   }
+  // }
 }
 .guide {
   position: absolute;

+ 7 - 6
src/view/selection/index.module.less

@@ -163,19 +163,20 @@
     align-items: center;
     background: rgba(0,0,0,0.6);
     position: relative;
-    padding: 3px 6px;
+    padding: 6px 10px;
     border-radius: 16px;
     width: fit-content;
     left: 50%;
-    top: -30px;
+    top: -42px;
     transform: translate(-50%);
     img {
-        width: 14px;
-        height: 14px;
-        margin-right: 4px;
+        width: 18px;
+        height: 18px;
+        margin-right: 6px;
     }
     span {
-        font-size: 12px;
+        font-size: 14px;
+        font-weight: 500;
         color: #fff;
         word-break: keep-all;
         display: flex;

+ 2 - 1
src/view/selection/index.tsx

@@ -236,6 +236,7 @@ export default defineComponent({
 				onClick={(e: Event) => e.stopPropagation()}
 			>
 				{selectData.staves.map((item: any) => {
+					// 评测得分
 					const scoreItem = item.id && evaluatingData.evaluatings[item.measureListIndex];
 					// for(let idx in evaluatingData.evaluatings) {
 					// 	const { show, measureIndex } = evaluatingData.evaluatings[idx]
@@ -260,7 +261,7 @@ export default defineComponent({
 								<div
 									class={[
 										styles.position,
-										scoreItem ? `scoreItemLeve${scoreItem.leve}` : "",
+										// scoreItem ? `scoreItemLeve${scoreItem.leve}` : "", // 去掉评测小节得分的背景色
 										item.multipleRestMeasures <= 1 ? styles.staveBg : "",
 										(state.platform === IPlatform.PC && state.zoom > 0.8) ? styles.linePC : '',
 									]}

部分文件因为文件数量过多而无法显示