Sfoglia il codice sorgente

Merge branch 'feature-tianyong-newVersion' into ktyq-test-new

TIANYONG 1 anno fa
parent
commit
cddf766e24

+ 6 - 4
src/helpers/customMusicScore.ts

@@ -539,20 +539,22 @@ export const resetFormate = () => {
 
 		// 给小节添加背景色
 		if (!state.isCreateImg && !state.isPreView) {
-			staves.forEach((stave: any) => {
+			staves.forEach((stave: any,i: number) => {
 				const list = [
+					Array.from(stave?.getElementsByTagName("text") || []),
 					Array.from(stave?.querySelectorAll(".vf-StaveSection") || []),
 					Array.from(stave?.querySelectorAll(".vf-Volta") || []),
 					Array.from(stave?.querySelectorAll(".vf-clef") || []),
 					Array.from(stave?.querySelectorAll(".vf-keysignature") || []),
 					Array.from(stave?.querySelectorAll(".vf-Repetition") || []),
-					Array.from(stave?.getElementsByTagName("text") || []),
 				].flat();
 				try {
 					if (list.length) {
 						list.forEach((_el: any) => {
-							stave?.removeChild(_el)
-							_el?.style?.setProperty("display", "none");
+							if (_el.parentNode === stave) {
+								stave?.removeChild(_el)
+								_el?.style?.setProperty("display", "none");
+							}
 						});
 					}
 				} catch (error) {}

+ 1 - 0
src/page-instrument/evaluat-model/index.tsx

@@ -43,6 +43,7 @@ let calculateInfo: any = {};
 let checkErjiTimer: any = null
 
 export const reCheckDelay = () => {
+  evaluatingData.onceErjiPopShow = false;
   evaluatingData.needCheckErjiStatus = true;
   headTopData.settingMode = false
   state.setting.soundEffect = false

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

@@ -325,13 +325,13 @@
     }
 
     &.playLeftButton {
-        left: 46px !important;
+        left: 30px !important;
         right: auto !important;
         bottom: 12px !important;
     }
 
     &.playRightButton {
-        right: 46px !important;
+        right: 30px !important;
         left: auto !important;
         bottom: 12px !important;
     }
@@ -359,13 +359,13 @@
     }
 
     &.pauseLeftButton {
-        left: 108px !important;
+        left: 102px !important;
         right: auto !important;
         bottom: 12px !important;
     }
 
     &.pauseRightButton {
-        right: 108px !important;
+        right: 102px !important;
         left: auto !important;
         bottom: 12px !important;
     }

+ 2 - 2
src/page-instrument/header-top/speed/index.tsx

@@ -100,8 +100,8 @@ export default defineComponent({
 			} catch (error) {
 			  console.log(error)
 			} finally {
-				state.isLoading = false;
-				switchLoading.value = false;
+				// state.isLoading = false;
+				// switchLoading.value = false;
 			}
 		};
 		return () => (

+ 2 - 2
src/page-instrument/view-detail/index.module.less

@@ -288,7 +288,7 @@
     width: 52px;
     height: 125px;
     position: absolute;
-    left: 0;
+    left: -1px;
     top: 0;
 }
 
@@ -296,6 +296,6 @@
     width: 52px;
     height: 125px;
     position: absolute;
-    right: 0;
+    right: -1px;
     top: 0;
 }

+ 2 - 2
src/page-instrument/view-detail/index.tsx

@@ -333,7 +333,7 @@ export default defineComponent({
                 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" || state.fingeringInfo.name === "whistling" ? "60px" : 0,
+                top: (state.fingeringInfo.name === "ocarina" || state.fingeringInfo.name === "whistling") ? "60px" : state.fingeringInfo.name === "hulusi-flute" ? "10px" : (state.fingeringInfo.name === "baroque-recorder" || state.fingeringInfo.name === "piccolo") ? "40px" : 0,
               },
             };
           } else {
@@ -346,7 +346,7 @@ export default defineComponent({
                 width: state.fingeringInfo.width,
                 height: state.fingeringInfo.name === "hulusi-flute" ? "86%" : "80%",
                 left: 0,
-                top: state.fingeringInfo.name === "ocarina" || state.fingeringInfo.name === "whistling" ? "60px" : 0,
+                top: (state.fingeringInfo.name === "ocarina" || state.fingeringInfo.name === "whistling") ? "60px" : state.fingeringInfo.name === "hulusi-flute" ? "10px" : (state.fingeringInfo.name === "baroque-recorder" || state.fingeringInfo.name === "piccolo") ? "40px" : 0,
               },
             };
           }

+ 107 - 64
src/page-instrument/view-detail/smoothAnimation/index.ts

@@ -7,7 +7,7 @@ import state from "/src/state"
 import "./index.less"
 import Bird from "./bird"
 
-type pointsPosType = { x: number; y: number; MeasureNumberXML: number }[]
+type pointsPosType = { x: number; y: number; MeasureNumberXML: number; noteId: number }[]
 type smoothAnimationType = {
    isShow: Ref<boolean>
    canvasDom: null | HTMLCanvasElement
@@ -64,7 +64,10 @@ export function initSmoothAnimation() {
    // 初始化动画数据
    const batePos = getPointsPosByBatePos()
    console.log(batePos, "batePos")
-   smoothAnimationState.pointsPos = createSmoothCurvePoints(batePos, undefined, undefined, _numberOfSegments)
+   const batePos1 = dataFilter([...batePos])
+   const batePos2 = createSmoothCurvePoints(batePos1, undefined, undefined, _numberOfSegments)
+   const batePos3 = dataFilter2(batePos, batePos2)
+   smoothAnimationState.pointsPos = batePos3
    // 谱面的平均速度(因为可能有反复的情况所以实际距离要加上反复的距离)
    const canvasDomPath = batePos.reduce((path, item, index, arr) => {
       if (index !== 0) {
@@ -88,6 +91,27 @@ export function initSmoothAnimation() {
    console.log(smoothAnimationState, "一行谱小鸟数据")
 }
 
+// 排序
+function dataFilter(batePos: pointsPosType) {
+   const filterData = batePos.filter((item, index, array) => {
+      return array.findIndex(i => i.noteId === item.noteId) === index
+   })
+   // 先按 音符排序  因为音符可能有重复id
+   const sortedData = filterData.sort((a, b) => a.noteId - b.noteId)
+   // 再按 小节排序
+   return sortedData.sort((a, b) => a.MeasureNumberXML - b.MeasureNumberXML)
+}
+
+//给原始数据赋值
+function dataFilter2(batePos1: pointsPosType, batePos2: pointsPosType) {
+   return batePos1.reduce((arr: pointsPosType, { noteId, MeasureNumberXML }, index) => {
+      const noteIdIndex = batePos2.findIndex(item => {
+         return noteId === item.noteId && MeasureNumberXML === item.MeasureNumberXML
+      })
+      arr.push(...batePos2.slice(noteIdIndex, noteIdIndex + _numberOfSegments + 1))
+      return arr
+   }, [])
+}
 /**
  * 销毁
  */
@@ -160,8 +184,13 @@ export function moveSmoothAnimation(progress: number, activeIndex: number, isMov
    // 百分比转为当前的index 距离个数
    const progressCalcIndex = Math.round(progress * _numberOfSegments)
    // // 当前的index
-   let nowIndex = nextPointsIndex - _numberOfSegments + progressCalcIndex
+   const nowIndex = nextPointsIndex - _numberOfSegments + progressCalcIndex
    const nowPointsPos = smoothAnimationState.pointsPos[nowIndex]
+   // 当x的值为null和undefinedde的时候 错误 不走下面的方法
+   if (!(nowPointsPos?.x != null)) {
+      console.error(nowPointsPos?.x, "nowPointsPos", nowIndex, activeIndex)
+      return
+   }
    smoothAnimationState.canvasCtx?.clearRect(0, 0, smoothAnimationState.canvasDomWith, smoothAnimationState.canvasDomHeight)
    // 移动
    smoothAnimationMove(
@@ -320,17 +349,26 @@ function getPointsPosByBatePos(): pointsPosType {
    const frequencyData = state.times.map(item => {
       return !item.frequency || item.frequency === -1 ? 0 : item.frequency
    })
-   console.log(frequencyData,"没线性化之前的数据")
    // 线性频率数据
-   const frequencyLineData = quantileScale(frequencyData, 4, 76)
+   const frequencyLineData = quantileScale(frequencyData, 6, 74)
    const pointsPos = state.times.reduce((posArr: any[], item, index) => {
-      // 当休止小节,可能当前音符在谱面上没有实际的音符(没有bbox),所以往后找谱面上有的音符
-      if (item.bbox) {
+      // 当休止小节,可能当前音符在谱面上没有实际的音符(没有bbox)
+      if (item.bbox?.x != null && item.noteId != null) {
          posArr.push({
+            noteId: item.noteId,
             MeasureNumberXML: item.MeasureNumberXML,
             x: item.bbox.x,
             y: 80 - frequencyLineData[index]
          })
+      } else {
+         // 连续休止小节 noteId 可能为 null,所以这里取上一个音符的id
+         posArr.push({
+            // 这里当第一个音符noteId为null,找不到前一个noteId,所以兼容一下
+            noteId: item.noteId != null ? item.noteId : (posArr[posArr.length - 1]?.noteId != null ? posArr[posArr.length - 1]?.noteId : -1) + 0.01, // 这里+0.01 是制造一个假id
+            MeasureNumberXML: item.MeasureNumberXML,
+            x: item.bbox?.x != null ? item.bbox.x : posArr[posArr.length - 1]?.x || 10,
+            y: 80 - frequencyLineData[index]
+         })
       }
       return posArr
    }, [])
@@ -338,7 +376,8 @@ function getPointsPosByBatePos(): pointsPosType {
    const extendPoint = {
       ...pointsPos[pointsPos.length - 1]
    }
-   extendPoint.MeasureNumberXML++
+   extendPoint.MeasureNumberXML += 100 // 防止MeasureNumberXML重复
+   extendPoint.noteId += 100 // 防止noteId重复
    // 当总长度减30小于最后一个音符时候,取最后一个音符加15
    extendPoint.x = smoothAnimationState.canvasDomWith - 30 > extendPoint.x ? smoothAnimationState.canvasDomWith - 30 : extendPoint.x + 15
    pointsPos.push(extendPoint)
@@ -399,62 +438,63 @@ function createSmoothCurvePoints(pointsPos: pointsPosType, tension?: number, clo
       t2x = (ps[i + 2].x - ps[i].x) * tension
       t1y = (ps[i + 1].y - ps[i - 1].y) * tension
       t2y = (ps[i + 2].y - ps[i].y) * tension
-      // 当中途出现反复 刚开始反复时候 53 52 22 52  (22)中途值会变小 这里强行拉大 防止算法平均值出现很大偏差
-      if (ps[i + 1].MeasureNumberXML - ps[i + 2].MeasureNumberXML > 1) {
-         const nowNumberXML = ps[i + 1].MeasureNumberXML + 1
-         //在当前值的情况下 向前一位
-         let index = ps.findIndex(item => {
-            return nowNumberXML === item.MeasureNumberXML
-         })
-         // 查询不到index时候取当前值
-         index === -1 && (index = i + 1)
-         t2x = (ps[index].x - ps[i].x) * tension
-      }
-      // 当中途出现反复 结束反复时候 22 53 22 22  (53)中途值会变大 这里强行缩小 防止算法平均值出现很大偏差
-      if (ps[i - 1].MeasureNumberXML - ps[i].MeasureNumberXML > 1) {
-         //在当前值的情况下 向后一位
-         const nowNumberXML = ps[i].MeasureNumberXML - 1
-         let index = ps.findIndex((item, index) => {
-            return nowNumberXML === item.MeasureNumberXML && nowNumberXML !== ps[index + 1]?.MeasureNumberXML
-         })
-         // 查询不到index时候取当前值
-         index === -1 && (index = i)
-         t1x = (ps[i + 1].x - ps[index].x) * tension
-      }
-      // 当中途出现跳房子 刚开始跳房子时候 35 35 54 35  (54)中途值会变大 这里强行缩小 防止算法平均值出现很大偏差
-      if (ps[i + 1].MeasureNumberXML - ps[i + 2].MeasureNumberXML < -1) {
-         const nowNumberXML = ps[i + 1].MeasureNumberXML + 1
-         //在当前值的情况下 向前一位
-         let index = ps.findIndex(item => {
-            return nowNumberXML === item.MeasureNumberXML
-         })
-         // 查询不到index时候取当前值
-         index === -1 && (index = i + 1)
-         t2x = (ps[index].x - ps[i].x) * tension
-      }
-      // 当中途出现跳房子 结束跳房子时候 54 35 54 54  (35)中途值会变小 这里强行拉大 防止算法平均值出现很大偏差
-      if (ps[i - 1].MeasureNumberXML - ps[i].MeasureNumberXML < -1) {
-         const nowNumberXML = ps[i].MeasureNumberXML - 1
-         let index = ps.findIndex((item, index) => {
-            return nowNumberXML === item.MeasureNumberXML && nowNumberXML !== ps[index + 1]?.MeasureNumberXML
-         })
-         // 查询不到index时候取当前值
-         index === -1 && (index = i)
-         t1x = (ps[i + 1].x - ps[index].x) * tension
-      }
-      const nowMeasureNumberXML = pointsPos[i - 1].MeasureNumberXML
-      const nextMeasureNumberXML = pointsPos[i].MeasureNumberXML
+      // // 当中途出现反复 刚开始反复时候 53 52 22 52  (22)中途值会变小 这里强行拉大 防止算法平均值出现很大偏差
+      // if (ps[i + 1].MeasureNumberXML - ps[i + 2].MeasureNumberXML > 1) {
+      //    const nowNumberXML = ps[i + 1].MeasureNumberXML + 1
+      //    //在当前值的情况下 向前一位
+      //    let index = ps.findIndex(item => {
+      //       return nowNumberXML === item.MeasureNumberXML
+      //    })
+      //    // 查询不到index时候取当前值
+      //    index === -1 && (index = i + 1)
+      //    t2x = (ps[index].x - ps[i].x) * tension
+      // }
+      // // 当中途出现反复 结束反复时候 22 53 22 22  (53)中途值会变大 这里强行缩小 防止算法平均值出现很大偏差
+      // if (ps[i - 1].MeasureNumberXML - ps[i].MeasureNumberXML > 1) {
+      //    //在当前值的情况下 向后一位
+      //    const nowNumberXML = ps[i].MeasureNumberXML - 1
+      //    let index = ps.findIndex((item, index) => {
+      //       return nowNumberXML === item.MeasureNumberXML && nowNumberXML !== ps[index + 1]?.MeasureNumberXML
+      //    })
+      //    // 查询不到index时候取当前值
+      //    index === -1 && (index = i)
+      //    t1x = (ps[i + 1].x - ps[index].x) * tension
+      // }
+      // // 当中途出现跳房子 刚开始跳房子时候 35 35 54 35  (54)中途值会变大 这里强行缩小 防止算法平均值出现很大偏差
+      // if (ps[i + 1].MeasureNumberXML - ps[i + 2].MeasureNumberXML < -1) {
+      //    const nowNumberXML = ps[i + 1].MeasureNumberXML + 1
+      //    //在当前值的情况下 向前一位
+      //    let index = ps.findIndex(item => {
+      //       return nowNumberXML === item.MeasureNumberXML
+      //    })
+      //    // 查询不到index时候取当前值
+      //    index === -1 && (index = i + 1)
+      //    t2x = (ps[index].x - ps[i].x) * tension
+      // }
+      // // 当中途出现跳房子 结束跳房子时候 54 35 54 54  (35)中途值会变小 这里强行拉大 防止算法平均值出现很大偏差
+      // if (ps[i - 1].MeasureNumberXML - ps[i].MeasureNumberXML < -1) {
+      //    const nowNumberXML = ps[i].MeasureNumberXML - 1
+      //    let index = ps.findIndex((item, index) => {
+      //       return nowNumberXML === item.MeasureNumberXML && nowNumberXML !== ps[index + 1]?.MeasureNumberXML
+      //    })
+      //    // 查询不到index时候取当前值
+      //    index === -1 && (index = i)
+      //    t1x = (ps[i + 1].x - ps[index].x) * tension
+      // }
+      // const nowMeasureNumberXML = pointsPos[i - 1].MeasureNumberXML
+      // const nextMeasureNumberXML = pointsPos[i].MeasureNumberXML
       for (t = 0; t <= numberOfSegments; t++) {
-         // 小于1时候是反复   大于1是跳房子  不画曲线  停留
-         if (nextMeasureNumberXML - nowMeasureNumberXML < 0 || nextMeasureNumberXML - nowMeasureNumberXML > 1) {
-            //console.log(x, y)
-            result.push({
-               x: x as number,
-               y: y as number,
-               MeasureNumberXML: nowMeasureNumberXML
-            })
-            continue
-         }
+         // // 小于1时候是反复   大于1是跳房子  不画曲线  停留
+         // if (nextMeasureNumberXML - nowMeasureNumberXML < 0 || nextMeasureNumberXML - nowMeasureNumberXML > 1) {
+         //    //console.log(x, y)
+         //    result.push({
+         //       x: x as number,
+         //       y: y as number,
+         //       MeasureNumberXML: nowMeasureNumberXML,
+         //       noteId: pointsPos[i - 1].noteId
+         //    })
+         //    continue
+         // }
          st = t / numberOfSegments
          c1 = 2 * Math.pow(st, 3) - 3 * Math.pow(st, 2) + 1
          c2 = -(2 * Math.pow(st, 3)) + 3 * Math.pow(st, 2)
@@ -466,7 +506,10 @@ function createSmoothCurvePoints(pointsPos: pointsPosType, tension?: number, clo
          result.push({
             x,
             y,
-            MeasureNumberXML: t === numberOfSegments ? nextMeasureNumberXML : nowMeasureNumberXML
+            // MeasureNumberXML: t === numberOfSegments ? nextMeasureNumberXML : nowMeasureNumberXML,
+            // noteId: t === numberOfSegments ? pointsPos[i].noteId : pointsPos[i - 1].noteId
+            MeasureNumberXML: pointsPos[i - 1].MeasureNumberXML,
+            noteId: pointsPos[i - 1].noteId
          })
       }
    }

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

@@ -229,7 +229,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]}|速度:{Math.floor(scoreData.value.speed)}|综合分数:{scoreData.value.score}分
+                {level[scoreData.value.heardLevel]}|速度:{Math.floor(scoreData.value.speed)}|综合分数:{scoreData.value.score}分
               </div>
             </div>
           </div>

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

@@ -192,13 +192,13 @@
   width: 52px;
   height: 125px;
   position: absolute;
-  left: 0;
+  left: -1px;
   top: 0;
 }
 .bg2Right {
   width: 52px;
   height: 125px;
   position: absolute;
-  right: 0;
+  right: -1px;
   top: 0;
 }

+ 1 - 1
src/state.ts

@@ -1884,7 +1884,7 @@ watch(
     state.vfmeasures.forEach((item: any, idx: number) => {
       const measureNum = item.getAttribute('data-num') ? Number(item.getAttribute('data-num')) : -1;
       const nextMeasureNum = state.vfmeasures[idx+1]?.getAttribute('data-num') ? Number(state.vfmeasures[idx+1]?.getAttribute('data-num')) : -1;
-      if (measureNum >= 0 && (measureNum === state.activeMeasureIndex || (measureNum < state.activeMeasureIndex && nextMeasureNum > state.activeMeasureIndex)) ) {
+      if (measureNum >= 0 && (measureNum === state.activeMeasureIndex || (measureNum < state.activeMeasureIndex && nextMeasureNum > state.activeMeasureIndex)) || (measureNum < state.activeMeasureIndex && nextMeasureNum == -1) ) {
         item.querySelector('.vf-custom-bg')?.setAttribute("fill", "#132D4C")
         item.querySelector('.vf-custom-bot')?.setAttribute("fill", "#040D1E")
         // 预备小节

+ 3 - 3
src/view/selection/index.module.less

@@ -83,8 +83,8 @@
 
 .scoreItem {
     position: absolute;
-    left: 50%;
-    top: -90%;
+    left: 80%;
+    top: -120%;
     transform: translateX(-50%);
     font-size: 16px;
     font-family: "Roboto", sans-serif;
@@ -186,7 +186,7 @@
         content: "";
         position: absolute;
         left: 50%;
-        bottom: -8PX;
+        bottom: -9PX;
         transform: translateX(-50%);
         width: 13Px;
         height: 9Px;

+ 135 - 161
src/view/selection/index.tsx

@@ -146,19 +146,15 @@ const calcNoteData = () => {
 			} else {
 				if (item.multipleRestMeasures) {
 					if (state.isCombineRender) {
-						state.vfmeasures.forEach((item: any, idx: number) => {
-							const measureNum = item.getAttribute('data-num') ? Number(item.getAttribute('data-num')) : -1;
-							
-						})
 						let currentItem = null;
 						for (let index = 0; index < state.vfmeasures.length; index++) {
 							const element = state.vfmeasures[index];
 							const measureNum = element.getAttribute('data-num') ? Number(element.getAttribute('data-num')) : -1;
-							if (measureNum === item.MeasureNumberXML) {
+							const nextMeasureNum = state.vfmeasures[index+1]?.getAttribute('data-num') ? Number(state.vfmeasures[index+1]?.getAttribute('data-num')) : -1;
+							if (measureNum === item.MeasureNumberXML || item.MeasureNumberXML < nextMeasureNum || nextMeasureNum == -1) {
 								currentItem = element
 								break;
 							}
-							
 						}
 						const staveBbox = currentItem?.querySelector('.vf-stave')?.getBoundingClientRect() || { x: 0, width: 0, y: 0, height: 0 };
 						if (currentItem) {
@@ -259,167 +255,145 @@ export default defineComponent({
 			} catch (error) {}
 		});
 		return () => (
-			<>
-				<div class={styles.staveBgContainer}>
-					{
-						selectData.staves.map((item: any) => {
-							return (
-								<>
-									{
-										item.staveBox && item.multipleRestMeasures <= 1 && 
+			<div
+				id="selectionBox"
+				class={[
+					styles.selectionContainer,
+				]}
+				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]
+					// 	if (show && measureIndex !== item.measureListIndex) {
+					// 		evaluatingData.evaluatings[idx].show = false
+					// 	}
+					// }
+					// 高级模式下,显示节拍线
+					// 不是报告模式
+					// 不是多小节休止符
+					// 节拍线开关
+					// 当前小节
+					// 当前小节
+					const lineShow =
+						!state.isReport &&
+						metronomeData.cursorMode === 2 &&
+						item.MeasureNumberXML === metronomeData.activeMetro?.measureNumberXML &&
+						state.times[state.activeNoteIndex].MeasureNumberXML === item.MeasureNumberXML;
+					return (
+						<>
+							{item.staveBox && (
+								<div
+									class={[
+										styles.position,
+										// scoreItem ? `scoreItemLeve${scoreItem.leve}` : "", // 去掉评测小节得分的背景色
+										item.multipleRestMeasures <= 1 ? styles.staveBg : "",
+										(state.platform === IPlatform.PC && state.zoom > 0.8) ? styles.linePC : '',
+									]}
+									style={item.staveBox}
+									onClick={() => handleSelection(item)}
+								>
+									{lineShow && (
+										<div style={{height: selectData.measureHeight + 'px', position: 'relative'}}>
 											<div 
-												style={{
-													left:item.staveBox.left,
-													top:`calc(${item.staveBox.top} + ${item.staveBox.height})`,
-													width:item.staveBox.width
-												}}
-												class={[styles.staveBg]}
-											></div>
-									}
-								</>
-							)
-						})
-					}
-				</div>
-				<div
-					id="selectionBox"
-					class={[
-						styles.selectionContainer,
-					]}
-					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]
-						// 	if (show && measureIndex !== item.measureListIndex) {
-						// 		evaluatingData.evaluatings[idx].show = false
-						// 	}
-						// }
-						// 高级模式下,显示节拍线
-						// 不是报告模式
-						// 不是多小节休止符
-						// 节拍线开关
-						// 当前小节
-						// 当前小节
-						const lineShow =
-							!state.isReport &&
-							metronomeData.cursorMode === 2 &&
-							item.MeasureNumberXML === metronomeData.activeMetro?.measureNumberXML &&
-							state.times[state.activeNoteIndex].MeasureNumberXML === item.MeasureNumberXML;
-						return (
-							<>
-								{item.staveBox && (
-									<div
-										class={[
-											styles.position,
-											// scoreItem ? `scoreItemLeve${scoreItem.leve}` : "", // 去掉评测小节得分的背景色
-											(state.platform === IPlatform.PC && state.zoom > 0.8) ? styles.linePC : '',
-										]}
-										style={item.staveBox}
-										onClick={() => handleSelection(item)}
+											class={[
+												styles.line,
+												state.setting.eyeProtection ? styles.eyeLine : '',
+												state.musicRenderType == EnumMusicRenderType.staff ? styles.lineStaff : styles.lineJianPu,
+											]} 
+											style={{ left: metronomeData.activeMetro.left }}></div>
+										</div>
+									)}
+									{!state.isReport &&
+										!!item.multipleRestMeasures &&
+										state.activeMeasureIndex == item.MeasureNumberXML && (
+											<div class={styles.dotWrap}>{item.multipleRestMeasures}</div>
+										)}
+									<Transition
+										name="centerTop"
+										onAfterEnter={() => {
+											scoreItem.show = false;
+										}}
 									>
-										{lineShow && (
-											<div style={{height: selectData.measureHeight + 'px', position: 'relative'}}>
-												<div 
-												class={[
-													styles.line,
-													state.setting.eyeProtection ? styles.eyeLine : '',
-													state.musicRenderType == EnumMusicRenderType.staff ? styles.lineStaff : styles.lineJianPu,
-												]} 
-												style={{ left: metronomeData.activeMetro.left }}></div>
+										{scoreItem?.show && (
+											<div
+												class={styles.scoreItem}
+												style={{ color: leveByScoreMeasureIcons[scoreItem.leve]?.color || "" }}
+											>
+												<img src={leveByScoreMeasureIcons[scoreItem.leve]?.icon} />
+												<span>{scoreItem.score}</span>
 											</div>
 										)}
-										{!state.isReport &&
-											!!item.multipleRestMeasures &&
-											state.activeMeasureIndex == item.MeasureNumberXML && (
-												<div class={styles.dotWrap}>{item.multipleRestMeasures}</div>
-											)}
-										<Transition
-											name="centerTop"
-											onAfterEnter={() => {
-												scoreItem.show = false;
-											}}
-										>
-											{scoreItem?.show && (
-												<div
-													class={styles.scoreItem}
-													style={{ color: leveByScoreMeasureIcons[scoreItem.leve]?.color || "" }}
-												>
-													<img src={leveByScoreMeasureIcons[scoreItem.leve]?.icon} />
-													<span>{scoreItem.score}</span>
-												</div>
-											)}
-										</Transition>
-									</div>
-								)}
-							</>
-						);
-					})}
-					{selectData.notes.map((item: any) => {
+									</Transition>
+								</div>
+							)}
+						</>
+					);
+				})}
+				{selectData.notes.map((item: any) => {
+					return (
+						<div
+							class={[styles.position, disableClickNote.value && styles.disable, styles.note, `noteIndex_${item.index}`]}
+							style={item.bbox}
+							onClick={() => skipNotePlay(item.index)}
+						>
+							{/* <div class={styles.noteFollow} data-vf={"vf" + item.id}>
+								<Icon name="success" />
+								<Icon name="cross" />
+							</div> */}
+							<div class={styles.noteFollow} data-vf={"vf" + item.id}>
+								{/* <Icon name="success" />
+								<Icon name="cross" /> */}
+								<div class={[styles.followTipUp, 'tip-up']}>
+									<img src={IntonationUp} />
+									<span>音准<i>高了</i></span>
+								</div>
+								<div class={[styles.followTipDown, 'tip-down']}>
+									<img src={IntonationDown} />
+									<span>音准<i>低了</i></span>
+								</div>
+							</div>							
+							<div class={[styles.noteDot, 'node-dot']}></div>
+						</div>
+					);
+				})}
+				{/* 选段 */}
+				{
+					sectionPosData.value.map((item,index) =>{
 						return (
-							<div
-								class={[styles.position, disableClickNote.value && styles.disable, styles.note, `noteIndex_${item.index}`]}
-								style={item.bbox}
-								onClick={() => skipNotePlay(item.index)}
-							>
-								{/* <div class={styles.noteFollow} data-vf={"vf" + item.id}>
-									<Icon name="success" />
-									<Icon name="cross" />
-								</div> */}
-								<div class={styles.noteFollow} data-vf={"vf" + item.id}>
-									{/* <Icon name="success" />
-									<Icon name="cross" /> */}
-									<div class={[styles.followTipUp, 'tip-up']}>
-										<img src={IntonationUp} />
-										<span>音准<i>高了</i></span>
-									</div>
-									<div class={[styles.followTipDown, 'tip-down']}>
-										<img src={IntonationDown} />
-										<span>音准<i>低了</i></span>
-									</div>
-								</div>							
-								<div class={[styles.noteDot, 'node-dot']}></div>
+							item && <div class={styles.selectBox} style={item}>
+								<div class={[styles.selectHandle,index>0&&styles.selectHandleRight,(state.playState==="play" || query.workRecord)&&styles.playIng]} onClick={()=>{
+									// 如果选择了2个 删除左边的时候
+									if(state.section.length===2&&index === 0){
+										state.section = []
+										// 重置速度和播放倍率
+										resetBaseRate(state.activeNoteIndex);
+										showToast({
+											message: "请选择开始小节",
+											duration: 0,
+											position: "top",
+											className: "selectionToast",
+										});
+									}else{
+										state.section.splice(index,1)
+										state.section = [...state.section]  // 触发 watch
+										showToast({
+											message: state.section.length?"请选择结束小节":"请选择开始小节",
+											duration: 0,
+											position: "top",
+											className: "selectionToast",
+										});
+									}
+								}}></div>
 							</div>
-						);
-					})}
-					{/* 选段 */}
-					{
-						sectionPosData.value.map((item,index) =>{
-							return (
-								item && <div class={styles.selectBox} style={item}>
-									<div class={[styles.selectHandle,index>0&&styles.selectHandleRight,(state.playState==="play" || query.workRecord)&&styles.playIng]} onClick={()=>{
-										// 如果选择了2个 删除左边的时候
-										if(state.section.length===2&&index === 0){
-											state.section = []
-											// 重置速度和播放倍率
-											resetBaseRate(state.activeNoteIndex);
-											showToast({
-												message: "请选择开始小节",
-												duration: 0,
-												position: "top",
-												className: "selectionToast",
-											});
-										}else{
-											state.section.splice(index,1)
-											state.section = [...state.section]  // 触发 watch
-											showToast({
-												message: state.section.length?"请选择结束小节":"请选择开始小节",
-												duration: 0,
-												position: "top",
-												className: "selectionToast",
-											});
-										}
-									}}></div>
-								</div>
-							)
-						})
-					}
-					{/* 移动模块 */}
-					{query.isMove == "1" && <MoveMusicScore />}
-				</div>
-			</>
+						)
+					})
+				}
+				{/* 移动模块 */}
+				{query.isMove == "1" && <MoveMusicScore />}
+			</div>
 		);
 	},
 });