ソースを参照

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

TIANYONG 7 ヶ月 前
コミット
65ed16ff47

+ 1 - 1
src/helpers/customMusicScore.ts

@@ -587,7 +587,7 @@ export const resetFormate = () => {
 
 // 一行谱时,五线谱/简谱的谱面staffLine,居中显示
 const transSinglePage = () => {
-	if (state.isSingleLine) {
+	if (state.isSingleLine && !state.isSimplePage) {
 		const svgPage = document?.getElementById('osmdSvgPage1')?.getBoundingClientRect();
 		const staffLine = document?.querySelector('.staffline')?.getBoundingClientRect();
 		if (svgPage && staffLine && svgPage.height > 130) {

+ 3 - 3
src/page-instrument/evaluat-model/earphone/index.module.less

@@ -1,7 +1,7 @@
 .earphoneBox {
     position: relative;
-    width: 100vw;
-    height: 100vh;
+    width: 600px;
+    height: 229px;
     .earphoneBg {
         position: absolute;
         left: 50%;
@@ -12,7 +12,7 @@
     .earphoneBtn {
         position: absolute;
         left: 50%;
-        bottom: 75px;
+        bottom: 13px;
         width: 133px;
         height: 39px;
         transform: translateX(-43%);

BIN
src/page-instrument/evaluat-model/icons/lanya_erji.png


BIN
src/page-instrument/evaluat-model/icons/no_erji.png


BIN
src/page-instrument/evaluat-model/icons/tip_btn.png


BIN
src/page-instrument/evaluat-model/icons/tip_erji.png


BIN
src/page-instrument/evaluat-model/icons/youxian_erji.png


+ 21 - 0
src/page-instrument/evaluat-model/index.module.less

@@ -127,4 +127,25 @@
     width: 100vw;
     height: 100vh;
     z-index: 10000;
+}
+
+.earphoneBox {
+    position: relative;
+    width: 600px;
+    height: 229px;
+    .earphoneBg {
+        position: absolute;
+        left: 50%;
+        top: 0;
+        height: 100%;
+        transform: translateX(-50%);
+    }
+    .earphoneBtn {
+        position: absolute;
+        left: 50%;
+        bottom: 13px;
+        width: 133px;
+        height: 39px;
+        transform: translateX(-43%);
+    }
 }

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

@@ -23,6 +23,8 @@ import { headTopData } from "../header-top/index";
 import { getQuery } from "/src/utils/queryString";
 import Countdown from "./countdown";
 import { IPostMessage } from "/src/utils/native-message";
+import tipErjiBg from "./icons/tip_erji.png"
+import tipErjiBtn from "./icons/tip_btn.png"
 
 // const DelayCheck = defineAsyncComponent(() =>
 //   import('./delay-check')
@@ -417,6 +419,11 @@ export default defineComponent({
         });
       }
       // console.log('异常流程3')
+      // 非选段状态,从头开始评测,重置速度
+      if (!state.sectionStatus && state.section.length === 0) {
+        state.activeNoteIndex = 0;
+        state.speed = state.times[0].measureSpeed * state.basePlayRate
+      }
       initSetPlayRate();
       // 检测APP端socket状态
       const res: any = await startCheckDelay();
@@ -447,7 +454,7 @@ export default defineComponent({
       if (res?.content) {
         evaluatingData.checkEnd = true;
         state.setting.soundEffect = false;
-        checkEarphoneStatus();
+        evaluatingData.tipErjiShow = true;
       }
     };
 
@@ -460,6 +467,10 @@ export default defineComponent({
 			return evaluatingData.earphoneMode && !state.isLoading && !state.hasDriverPop;
 		});
 
+    const tipErjiPopShow = computed(() => {
+			return evaluatingData.tipErjiShow && !state.isLoading && !state.hasDriverPop;
+		});
+
     // watch(
     //   () => state.setting.soundEffect,
     //   (val) => {
@@ -559,6 +570,15 @@ export default defineComponent({
         {
           evaluatingData.isBeginMask && <div class={styles.beginMask}></div>
         }
+        <Popup teleport="body" closeOnClickOverlay={false} class={["popup-custom", "van-scale"]} transition="van-scale" v-model:show={tipErjiPopShow.value}>
+          <div class={styles.earphoneBox}>
+            <img class={styles.earphoneBg} src={tipErjiBg} />
+            <img class={styles.earphoneBtn} src={tipErjiBtn} onClick={() => {
+              evaluatingData.tipErjiShow = false;
+              checkEarphoneStatus();
+            }} />
+          </div>
+        </Popup>        
         <Popup teleport="body" closeOnClickOverlay={false} class={["popup-custom", "van-scale"]} transition="van-scale" v-model:show={earPhonePopShow.value}>
           <Earphone
             earphoneType={evaluatingData.earPhoneType}

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

@@ -346,7 +346,7 @@ export default defineComponent({
       // 选择模式 不显示
       if (headTopData.modeType !== "show" || ["follow"].includes(state.modeType)) return { display: false, disabled: true };
       // 音频播放中 禁用
-      if (state.playState === "play") return { display: true, disabled: true };
+      if (state.playState === "play" || query.workRecord) return { display: true, disabled: true };
 
       return {
         disabled: false,

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

@@ -8,6 +8,7 @@ import { metronomeData } from "../../../helpers/metronome";
 import { getQuery } from "/src/utils/queryString";
 import { api_createMusicPlayer, api_updateMusicPlayer, api_checkSocketStatus } from "/src/helpers/communication";
 import { storeData } from "/src/store";
+import { data as workData } from "/src/page-instrument/custom-plugins/work-index";
 
 export default defineComponent({
 	name: "speed",
@@ -62,7 +63,9 @@ export default defineComponent({
 		const toggleSwitch = async (res: any) => {
 			switchLoading.value = true;
 			try {
-			  if (storeData.isApp) {
+			  if (storeData.isApp && state.enableEvaluation) {
+				// 加载弹窗的开始时间
+				let startTime = +new Date();
 				state.loadingText = '节拍器准备中,请稍等…'
 				state.isLoading = true;
 				const targetSrc = res ? state.beatSong.accompany || state.beatSong.music : state.accompany || state.music;
@@ -73,9 +76,21 @@ export default defineComponent({
 				})
 				// console.log('切换节拍器音频',resData)
 				if (resData?.content) {
-					state.isLoading = false;
-					metronomeDisable.value = res;
-					switchLoading.value = false;
+					// 返回结果的时间
+					let intervalTime = +new Date() - startTime;
+					// 超过1秒直接关闭加载弹窗,小于1秒则最短显示1秒加载弹窗
+					if (intervalTime >= 1000) {
+						state.isLoading = false;
+						metronomeDisable.value = res;
+						switchLoading.value = false;
+					} else {
+						const continueTime = 1000 - intervalTime;
+						setTimeout(() => {
+							state.isLoading = false;
+							metronomeDisable.value = res;
+							switchLoading.value = false;
+						}, continueTime);
+					}
 				}
 				// api_checkSocketStatus();
 			  } else {
@@ -98,7 +113,7 @@ export default defineComponent({
 				<div class={styles.content}>
 					<div class={styles.conBox}>
 						<div class={styles.tit}>速度</div>
-						<div class={[styles.spendCon, query.workRecord && styles.disableSpend]}>
+						<div class={[styles.spendCon, workData.trainingType === "PRACTICE" && styles.disableSpend]}>
 							<img src={headImg("cutImg.png")} class={[styles.btn]} onClick={minusSpeed} />
 							<div class={styles.sliderCon}>
 								<Slider class={styles.slider} max={270} min={speed.value < 45 ? speed.value : 45} v-model={speed.value}>
@@ -113,7 +128,7 @@ export default defineComponent({
 							</div>
 							<img src={headImg("addImg.png")} class={[styles.btn]} onClick={plusSpeed} />	
 						</div>
-						<div class={[styles.speedSel, query.workRecord && styles.disableSpend]}>
+						<div class={[styles.speedSel, workData.trainingType === "PRACTICE" && styles.disableSpend]}>
 							<div onClick={resetCurrentSpeed}>原速</div>
 							<div onClick={()=>{ speed.value = 70 }}>70</div>
 							<div onClick={()=>{ speed.value = 80 }}>80</div>

+ 4 - 0
src/page-instrument/simple-detail/index.module.less

@@ -1,3 +1,7 @@
+body {
+    overflow: hidden;
+}
+
 .skeleton {
     position: fixed;
     left: 0;

+ 9 - 2
src/page-instrument/simple-detail/index.tsx

@@ -37,12 +37,19 @@ export default defineComponent({
 			}
 			// 暂停播放
 			if (resInfo?.api === "api_paused") {
-				console.log('暂停播放')
+				const currentTime = resInfo?.content?.currentTime
+				console.log('暂停播放',currentTime)
 				state.playState = 'paused';
+				if (currentTime === 0) {
+					// 坐标和小节都改为初始值
+					state.activeNoteIndex = 0
+					state.activeMeasureIndex = state.times[0].MeasureNumberXML;
+					handlePlaying(true);
+				}
 			}
 			// 暂停状态下,拖动进度
 			if (resInfo?.api === "api_updateProgress") {
-				console.log('拖动的进度')
+				console.log('拖动的进度',state.playState)
 				if (state.playState === 'paused') {
 					detailData.currentTime = resInfo?.content?.currentTime ?? detailData.currentTime;
 					// 坐标和小节都改为初始值

+ 8 - 4
src/view/audio-list/index.tsx

@@ -52,9 +52,12 @@ export const audioListStart = (type: "play" | "paused") => {
 		return;
 	}
 	if (type === "play") {
-		audioData.songEle?.play();
-		audioData.backgroundEle?.play();
-		audioData.mingSongEle?.play();
+		if(state.playSource === "mingSong"){
+			audioData.mingSongEle?.play();
+		}else{
+			audioData.songEle?.play();
+			audioData.backgroundEle?.play();
+		}
 	} else if (type === "paused") {
 		audioData.songEle?.pause();
 		audioData.backgroundEle?.pause();
@@ -338,7 +341,8 @@ export default defineComponent({
 					banSong.addEventListener("play", onPlay);
 					banSong.addEventListener("ended", onEnded);
 					mingSong && (mingSong.muted = true);
-				} else if(mingSong){
+				}
+				if(mingSong){
 					mingSong.addEventListener("play", onPlay);
 					mingSong.addEventListener("ended", onEnded);
 				}

+ 1 - 0
src/view/evaluating/index.tsx

@@ -113,6 +113,7 @@ export const evaluatingData = reactive({
   evaluatSpeed: 0, // 评测记录的速度
   needReplayEvaluat: false, // 手动取消评测,需要自动开始评测
   needPlayTick: false, // 评测时,mp3节拍器需要等待音频开始播放后再执行播放节拍器的圆点动画
+  tipErjiShow: false, // 评测提示弹窗
 });
 
 const sendOffsetTime = async (offsetTime: number) => {