浏览代码

fix: bug修复

TIANYONG 11 月之前
父节点
当前提交
622e07eee5

+ 5 - 0
src/helpers/communication.ts

@@ -511,6 +511,11 @@ export const api_remove_finishDelayCheck = (callback: any) => {
 	removeListenerMessage("finishDelayCheck", callback);
 };
 
+/** 取消监听APP取消延迟检测 */
+export const api_remove_cancelDelayCheck = (callback: any) => {
+	removeListenerMessage("cancelDelayCheck", callback);
+};
+
 /** 监听APP播放进度 */
 export const simple_playProgress = (callback: any) => {
 	listenerMessage("api_playProgress", callback);

+ 17 - 4
src/page-instrument/evaluat-model/index.tsx

@@ -1,5 +1,5 @@
 import { Transition, defineComponent, onMounted, reactive, watch, defineAsyncComponent, computed, onUnmounted } from "vue";
-import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport, startCheckDelay, checkUseEarphone, handleCancelEvaluat, checkMinInterval } from "/src/view/evaluating";
+import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport, startCheckDelay, checkUseEarphone, handleCancelEvaluat, checkMinInterval, handleEndEvaluat } from "/src/view/evaluating";
 import Earphone from "./earphone";
 import styles from "./index.module.less";
 import SoundEffect from "./sound-effect";
@@ -10,7 +10,7 @@ import { getNoteByMeasuresSlursStart } from "/src/helpers/formateMusic";
 import { Icon, Popup, showToast, closeToast, showLoadingToast } from "vant";
 import EvaluatResult from "./evaluat-result";
 import EvaluatAudio from "./evaluat-audio";
-import { api_getDeviceDelay, api_openAdjustRecording, api_proxyServiceMessage, api_videoUpdate, getEarphone, api_back, api_startDelayCheck, api_cancelDelayCheck, api_closeDelayCheck, api_finishDelayCheck, api_retryEvaluating, api_remove_finishDelayCheck } from "/src/helpers/communication";
+import { api_getDeviceDelay, api_openAdjustRecording, api_proxyServiceMessage, api_videoUpdate, getEarphone, api_back, api_startDelayCheck, api_cancelDelayCheck, api_remove_cancelDelayCheck, api_closeDelayCheck, api_finishDelayCheck, api_retryEvaluating, api_remove_finishDelayCheck } from "/src/helpers/communication";
 import EvaluatShare from "./evaluat-share";
 import { Vue3Lottie } from "vue3-lottie";
 import startData from "./data/start.json";
@@ -329,8 +329,8 @@ export default defineComponent({
       } else if (type === "selfCancel") {
         // 再来一次,需要手动取消评测,不生成评测记录,不显示评测结果弹窗
         evaluatingData.oneselfCancleEvaluating = true;
-        handleCancelEvaluat();
-        startBtnHandle();
+        // handleCancelEvaluat();
+        handleEndEvaluat(true, 'selfCancel');
       }
       resetPlaybackToStart();
       evaluatingData.resulstMode = false;
@@ -445,6 +445,18 @@ export default defineComponent({
       }
     );
 
+    // 手动取消评测,需要自动再次评测
+    watch(
+      () => evaluatingData.hideResultModal,
+      (val) => {
+        if (val && evaluatingData.oneselfCancleEvaluating) {
+          setTimeout(() => {
+            startBtnHandle();
+          }, 500);
+        }
+      }
+    );
+
     onMounted(async () => {
       // 如果打开了延迟检测开关,需要先发送开始检测的消息
       const delayData = await api_getDeviceDelay();
@@ -464,6 +476,7 @@ export default defineComponent({
     
     onUnmounted(() => {
       api_remove_finishDelayCheck(handleFinishDelayCheck);
+      api_remove_cancelDelayCheck(handleCancelDelayCheck);
 			clearTimeout(checkErjiTimer);
       checkErjiTimer = null;
 		});

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

@@ -150,6 +150,10 @@
                     }
                 }
             }
+            .disableSpend {
+                opacity: 0.4;
+                pointer-events: none;
+            }
             .metronome{
                 margin-top: 18px;
                 display: flex;

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

@@ -5,12 +5,13 @@ import { headData } from "../index"
 import { headImg } from "../image";
 import state, { handleSetSpeed, resetBaseRate } from "../../../state";
 import { metronomeData } from "../../../helpers/metronome"; 
+import { getQuery } from "/src/utils/queryString";
 
 export default defineComponent({
 	name: "speed",
 	setup() {
 		const speed = ref(state.speed);
-
+		const query: any = getQuery();
 		const minusSpeed = () => {
 			let canSpeed = Math.max(speed.value - 1, 45);
 			canSpeed = Math.min(canSpeed, 270);
@@ -58,7 +59,7 @@ export default defineComponent({
 				<div class={styles.content}>
 					<div class={styles.conBox}>
 						<div class={styles.tit}>速度</div>
-						<div class={styles.spendCon}>
+						<div class={[styles.spendCon, query.workRecord && 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}>
@@ -73,7 +74,7 @@ export default defineComponent({
 							</div>
 							<img src={headImg("addImg.png")} class={[styles.btn]} onClick={plusSpeed} />	
 						</div>
-						<div class={styles.speedSel}>
+						<div class={[styles.speedSel, query.workRecord && styles.disableSpend]}>
 							<div onClick={resetCurrentSpeed}>原速</div>
 							<div onClick={()=>{ speed.value = 70 }}>70</div>
 							<div onClick={()=>{ speed.value = 80 }}>80</div>

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

@@ -122,7 +122,7 @@
     position: absolute;
     left: 50%;
     top: 50%;
-    transform: translate(-50%, -50%);
+    transform: translate(-35%, -50%);
 
     .cItem {
         width: 64px;

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

@@ -307,7 +307,7 @@ export default defineComponent({
           {/* 五线谱,简谱类型提示  */}
           {scoreData.value.musicType === "staff" ? (
             <>
-              {state.isPercussion ? null : (
+              {(
                 <div class={styles.demos}>
                   {itemType.value === "intonation" && (
                     <>
@@ -368,7 +368,7 @@ export default defineComponent({
             </>
           ) : (
             <>
-              {state.isPercussion ? null : (
+              {(
                 <div class={styles.demos}>
                   {itemType.value === "intonation" && (
                     <>

+ 10 - 7
src/view/evaluating/index.tsx

@@ -486,9 +486,10 @@ const recordStartTimePoint = async (res?: IPostMessage) => {
 /**
  * 结束评测
  * @param isComplete 是否完整评测
+ * @param endType 结束类型,selfCancel:是否是自己取消本次评测
  * @returns
  */
-export const handleEndEvaluat = (isComplete = false) => {
+export const handleEndEvaluat = (isComplete = false, endType?: string) => {
   // 没有开始评测 , 不是评测模式 , 不评分
   if (!evaluatingData.startBegin || state.modeType !== "evaluating") return;
   // 结束录音
@@ -504,12 +505,14 @@ export const handleEndEvaluat = (isComplete = false) => {
       message: "完整演奏结束才算作业分数!",
     });
   } else {
-    showLoadingToast({
-      message: "评分中",
-      duration: 0,
-      overlay: true,
-      overlayClass: styles.scoreMode,
-    });
+    if (!endType) {
+      showLoadingToast({
+        message: "评分中",
+        duration: 0,
+        overlay: true,
+        overlayClass: styles.scoreMode,
+      });
+    }
   }
   setTimeout(() => {
     evaluatingData.startBegin = false;

+ 2 - 1
src/view/follow-practice/index.tsx

@@ -103,7 +103,8 @@ export const handleFollowStart = async () => {
 	const res = await api_cloudToggleFollow("start");
 	// 用户没有授权,需要重置状态
 	if (res?.content?.reson) {
-		// 
+		followData.isBeginMask = false
+		followData.start = false;
 	} else {
 		// 跟练模式开始前,增加播放系统节拍器
 		const tickend = await handleStartTick();

+ 1 - 1
src/view/music-score/index.tsx

@@ -122,7 +122,7 @@ export default defineComponent({
 				osmd.EngravingRules.BreathMarkDistance = 0.1; 
 				osmd.EngravingRules.PageBottomMargin = 0;
 			} else {
-				osmd.EngravingRules.PageTopMargin = 3; // 顶部间距
+				osmd.EngravingRules.PageTopMargin = state.isEvaluatReport ? 7 : 3; // 顶部间距
 				osmd.EngravingRules.PageTopMarginNarrow = 3;
 				osmd.EngravingRules.PageLeftMargin = 2;
 				osmd.EngravingRules.PageRightMargin = 2;