|
@@ -48,6 +48,9 @@ export default defineComponent({
|
|
|
stopTimer: null as any,
|
|
|
volumeTimer: null as any,
|
|
|
earPhoneType: "" as "" | "有线耳机" | "蓝牙耳机",
|
|
|
+ startAbnormalTimer: null as any, // 发送startTune后,超过10秒没有收到sendResult回调,处理这类异常的定时器
|
|
|
+ startTuneResult: false, // 发送startTune后,能否收到正常的result回调
|
|
|
+ abnormalPopShow: false, // 异常弹窗
|
|
|
});
|
|
|
/** 获取耳机状态 */
|
|
|
const getEarphoneState = async () => {
|
|
@@ -91,6 +94,12 @@ export default defineComponent({
|
|
|
toggleTune("start");
|
|
|
}, 100);
|
|
|
}
|
|
|
+ // startTune效音通过返回后,调用endTune
|
|
|
+ if (header?.commond === "result") {
|
|
|
+ clearTimeout(data.startAbnormalTimer);
|
|
|
+ data.startTuneResult = true
|
|
|
+ toggleTune("stop");
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
onMounted(() => {
|
|
@@ -111,7 +120,7 @@ export default defineComponent({
|
|
|
data.count = 0;
|
|
|
clearTimeout(data.startTimer);
|
|
|
clearTimeout(data.stopTimer);
|
|
|
- toggleTune("stop");
|
|
|
+ // toggleTune("stop");
|
|
|
}
|
|
|
data.step = 3;
|
|
|
}
|
|
@@ -136,16 +145,42 @@ export default defineComponent({
|
|
|
|
|
|
const toggleTune = async (state: "start" | "stop" | "finishTune") => {
|
|
|
if (state === "start") {
|
|
|
- api_toggleTune("start", data.count);
|
|
|
- data.stopTimer = setTimeout(() => {
|
|
|
- api_toggleTune("stop");
|
|
|
- }, 2000);
|
|
|
+ const res = await api_toggleTune("start", data.count);
|
|
|
+ // 用户没有授权,需要重置状态
|
|
|
+ if (res?.content?.reson) {
|
|
|
+ data.step = 2
|
|
|
+ data.checkStatus = 'init'
|
|
|
+ data.count = 0
|
|
|
+ } else {
|
|
|
+ // data.stopTimer = setTimeout(() => {
|
|
|
+ // api_toggleTune("stop");
|
|
|
+ // }, 2000);
|
|
|
+ data.startAbnormalTimer = setTimeout(() => {
|
|
|
+ /** startTune发出后,超过10秒没有收到回调,异常处理 */
|
|
|
+ if (!data.startTuneResult) {
|
|
|
+ api_toggleTune("stop");
|
|
|
+ // 给出异常提示,再来一次
|
|
|
+ data.abnormalPopShow = true
|
|
|
+ }
|
|
|
+ }, 10000);
|
|
|
+ }
|
|
|
} else if (state === "finishTune") {
|
|
|
data.checkStatus = "finish";
|
|
|
data.step = 6;
|
|
|
api_toggleTune("finishTune");
|
|
|
+ } else if (state === "stop") {
|
|
|
+ api_toggleTune("stop");
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
+ const resetCheck = () => {
|
|
|
+ clearTimeout(data.startAbnormalTimer);
|
|
|
+ data.abnormalPopShow = false
|
|
|
+ data.step = 2
|
|
|
+ data.checkStatus = 'init'
|
|
|
+ data.count = 0
|
|
|
+ }
|
|
|
+
|
|
|
return () => (
|
|
|
<Popup
|
|
|
teleport="body"
|
|
@@ -160,6 +195,14 @@ export default defineComponent({
|
|
|
clearTimeout(startTuneTimer)
|
|
|
emit("back")
|
|
|
}} />
|
|
|
+ {/* 异常提示弹窗 */}
|
|
|
+ {
|
|
|
+ data.abnormalPopShow &&
|
|
|
+ <div class={styles.tipBox}>
|
|
|
+ <div class={styles.tipContent}>检测失败,请确保设备麦克风、扬声器正常,重新开始检测</div>
|
|
|
+ <div class={styles.tipBtn} onClick={resetCheck}>再来一次</div>
|
|
|
+ </div>
|
|
|
+ }
|
|
|
<div class={[styles.item, data.step !== 7 && styles.show]}>
|
|
|
<Vue3Lottie animationData={bg}></Vue3Lottie>
|
|
|
</div>
|