TIANYONG пре 1 година
родитељ
комит
cfb032ef7e

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

@@ -1,40 +1,20 @@
-.fraction {
-    color: #fff;
-    border-radius: 18px;
-    width: 244px;
-    overflow: hidden;
-}
-.content{
+.earphoneBox {
     position: relative;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    width: 100%;
-    background-color: #fff;
-    top: -2px;
-}
-.title {
-    color: #1A1A1A;
-    font-size: 17px;
-    padding: 16px 0 10px 0;
-    font-weight: bold;
-}
-
-.erji {
-    position: relative;
-    width: 100%;
-    display: block;
-    z-index: 10;
-}
-
-.tip {
-    font-size: 13px;
-    color: #808080;
-}
-
-.btn {
-    display: block;
-    width: 117px;
-    height: 36px;
-    margin: 18px 0 17px 0;
+    width: 100vw;
+    height: 100vh;
+    .earphoneBg {
+        position: absolute;
+        left: 50%;
+        top: 0;
+        height: 100%;
+        transform: translateX(-50%);
+    }
+    .earphoneBtn {
+        position: absolute;
+        left: 50%;
+        bottom: 75px;
+        width: 133px;
+        height: 39px;
+        transform: translateX(-43%);
+    }
 }

+ 13 - 8
src/page-instrument/evaluat-model/earphone/index.tsx

@@ -1,19 +1,24 @@
 import { defineComponent } from "vue";
 import styles from "./index.module.less";
-import icons from "../icons/index.json";
+import noEarphone from "../icons/no_erji.png";
+import youxianEarphone from "../icons/youxian_erji.png";
+import lanyaEarphone from "../icons/lanya_erji.png";
+import earphoneBtn from "../icons/confirm.png"
 
 export default defineComponent({
 	name: "earphone",
 	emits: ["close"],
+	props: {
+		earphoneType: {
+			type: String,
+			default: "",
+		},
+	},	
 	setup(props, { emit }) {
 		return () => (
-			<div class={styles.fraction}>
-				<img class={styles.erji} src={icons.erji} />
-				<div class={styles.content}>
-					<div class={styles.title}>请佩戴有线耳机</div>
-					<div class={styles.tip}>佩戴有线耳机能保证评测准确率哦!</div>
-					<img src={icons.erjibtn} class={styles.btn} onClick={() => emit("close")} />
-				</div>
+			<div class={styles.earphoneBox}>
+				<img class={styles.earphoneBg} src={props.earphoneType === "有线耳机" ? youxianEarphone : props.earphoneType === "蓝牙耳机" ? lanyaEarphone : noEarphone} />
+				<img class={styles.earphoneBtn} src={earphoneBtn} onClick={() => emit("close")} />
 			</div>
 		);
 	},

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


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/youxian_erji.png


+ 61 - 3
src/page-instrument/evaluat-model/index.tsx

@@ -10,7 +10,18 @@ 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 } from "/src/helpers/communication";
+import { 
+  api_getDeviceDelay, 
+  api_openAdjustRecording, 
+  api_proxyServiceMessage, 
+  api_videoUpdate, 
+  getEarphone, 
+  api_back, 
+  api_startDelayCheck,
+  api_cancelDelayCheck,
+  api_closeDelayCheck,
+  api_finishDelayCheck
+ } from "/src/helpers/communication";
 import EvaluatShare from "./evaluat-share";
 import { Vue3Lottie } from "vue3-lottie";
 import startData from "./data/start.json";
@@ -23,6 +34,7 @@ import { api_musicPracticeRecordVideoUpload } from "../api";
 import { headTopData } from "../header-top/index";
 import { getQuery } from "/src/utils/queryString";
 import Countdown from "./countdown"
+import { IPostMessage } from "/src/utils/native-message";
 
 const DelayCheck = defineAsyncComponent(() =>
   import('./delay-check')
@@ -123,6 +135,25 @@ export default defineComponent({
       return criteria;
     };
 
+    /** 校验耳机状态 */
+    const checkEarphoneStatus = async (type?: string) => {
+      if (type !== 'start') {
+        // const erji = await checkUseEarphone();
+        const res = await getEarphone();
+        const erji = res?.content?.checkIsWired || false;
+        console.log('耳机状态111',res)
+        evaluatingData.earphoneMode = true;
+        evaluatingData.earPhoneType = res?.content?.type || "";
+        if (evaluatingData.earPhoneType === "有线耳机") {
+          setTimeout(() => {
+            evaluatingData.earphoneMode = false;
+          }, 3000);
+        }
+      }
+      console.log("检测结束,生成数据",evaluatingData.websocketState , evaluatingData.startBegin , evaluatingData.checkEnd);
+      handleConnect();
+    }
+
     /** 生成评测曲谱数据 */
     const formatTimes = () => {
       let starTime = 0
@@ -362,13 +393,38 @@ export default defineComponent({
         
       }
     }
+
+    // 监听到APP取消延迟检测
+    const handleCancelDelayCheck = async (res?: IPostMessage) => {
+      console.log('监听取消延迟检测', res)
+      if (res?.content) {
+        // 关闭延迟检测页面,并返回到模式选择页面
+        // await api_closeDelayCheck({});
+        handleDelayBack()
+      }
+    };
+
+    // 监听APP延迟成功的回调
+    const handleFinishDelayCheck = async (res?: IPostMessage) => {
+      console.log('监听延迟检测成功', res)
+      if (res?.content) {
+        evaluatingData.checkEnd = true
+        checkEarphoneStatus()
+      }
+    };
+
     onMounted(async () => {
       // 如果打开了延迟检测开关,需要先发送开始检测的消息
       if (state.setting.soundEffect) {
         await api_startDelayCheck({});
+      } else {
+        evaluatingData.checkEnd = true
+        checkEarphoneStatus()
       }
       evaluatingData.isDisabledPlayMusic = true;
-      handlePerformDetection();
+      // handlePerformDetection();
+      api_cancelDelayCheck(handleCancelDelayCheck);
+      api_finishDelayCheck(handleFinishDelayCheck);
     });
     return () => (
       <div>
@@ -402,9 +458,11 @@ export default defineComponent({
 
         <Popup teleport="body" closeOnClickOverlay={false} class={["popup-custom", "van-scale"]} transition="van-scale" v-model:show={evaluatingData.earphoneMode}>
           <Earphone
+            earphoneType={evaluatingData.earPhoneType}
             onClose={() => {
               evaluatingData.earphoneMode = false;
-              handlePerformDetection();
+              // handlePerformDetection();
+              checkEarphoneStatus('start');
             }}
           />
         </Popup>

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

@@ -78,7 +78,7 @@ export const headTopData = reactive({
       state.playIngSpeed = state.originSpeed;
       handleStartEvaluat();
       // 开发模式,把此处打开
-      // state.modeType = "evaluating"
+      state.modeType = "evaluating"
       // evaluatingData.rendered = true;
       // evaluatingData.soundEffectMode = true;
     } else if (value === "follow") {

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

@@ -78,6 +78,7 @@ export const evaluatingData = reactive({
 	checkStep: 0, // 执行步骤
 	checkEnd: false, // 检测结束
 	earphoneMode: false, // 耳机弹窗
+	earPhoneType: "" as "" | "有线耳机" | "蓝牙耳机", // 耳机类型
 	soundEffectMode: false, // 效音弹窗
 	websocketState: false, // websocket连接状态
 	/**是否开始播放 */

+ 1 - 1
src/view/music-score/index.module.less

@@ -19,7 +19,7 @@
         #osmdCanvasPage1{
             //position: absolute !important;
             left: 0;
-            top: 2.4rem;
+            top: 0;
         }
     }
     .noteActive {