|
@@ -6,13 +6,19 @@
|
|
}}</div>
|
|
}}</div>
|
|
<div style="display: flex; justify-content: space-between; margin-bottom: 40px;">
|
|
<div style="display: flex; justify-content: space-between; margin-bottom: 40px;">
|
|
<MultipleItem :ref="(el: any) => { multipleItemRef(el, index, item.area) }" v-for="(item, index) in testList"
|
|
<MultipleItem :ref="(el: any) => { multipleItemRef(el, index, item.area) }" v-for="(item, index) in testList"
|
|
- :query="parameter" :area="item.area" :key="index" @returnData="returnData" />
|
|
|
|
|
|
+ :query="parameter" :area="item.area" :key="index" @returnData="returnData" :examState="examState"
|
|
|
|
+ :needStart="needStart" />
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
- <div @click="getAgain" v-if="examState == 42 || showTestAgain">再测一次</div>
|
|
|
|
- <div @click="getOpenOneTestAndStartFace" v-if="examState < 41">1、开始识别</div>
|
|
|
|
- <div @click="getStopFace" v-if="examState == 41">2、停止人脸识别</div>
|
|
|
|
- <div @click="getStartOneTest" v-if="examState == 43">3、开始测试</div>
|
|
|
|
|
|
+ <div v-if="needStart">
|
|
|
|
+ <div @click="getAgain" v-if="examState == 42 || showTestAgain">再测一次</div>
|
|
|
|
+ <div @click="getOpenOneTestAndStartFace" v-if="examState < 41">1、开始识别</div>
|
|
|
|
+ <div @click="getStopFace" v-if="examState == 41">2、停止人脸识别</div>
|
|
|
|
+ <div @click="getStartOneTest" v-if="examState == 43">3、开始测试</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-else>
|
|
|
|
+ <div @click="getStartOneTest">3、开始测试</div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
@@ -32,17 +38,17 @@ const data = reactive<any>({
|
|
},
|
|
},
|
|
userInfo: {},//用户信息
|
|
userInfo: {},//用户信息
|
|
examState: 0,//当前状态
|
|
examState: 0,//当前状态
|
|
|
|
+ needStart: false,//是否需要按钮
|
|
showTestAgain: false,//再测一次按钮
|
|
showTestAgain: false,//再测一次按钮
|
|
testList: [],//获取区列表
|
|
testList: [],//获取区列表
|
|
multipleItemRefList: [],//获取区列表
|
|
multipleItemRefList: [],//获取区列表
|
|
});
|
|
});
|
|
-const { timerManager, parameter, time, userInfo, examState, showTestAgain, testList, multipleItemRefList } = toRefs(data);
|
|
|
|
|
|
+const { timerManager, parameter, time, userInfo, examState, needStart, showTestAgain, testList, multipleItemRefList } = toRefs(data);
|
|
|
|
|
|
/**
|
|
/**
|
|
* 创建组件实例
|
|
* 创建组件实例
|
|
*/
|
|
*/
|
|
const multipleItemRef = (el: any, index: number, area: any) => {
|
|
const multipleItemRef = (el: any, index: number, area: any) => {
|
|
- el.area = area;
|
|
|
|
multipleItemRefList.value[index] = el;
|
|
multipleItemRefList.value[index] = el;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -50,11 +56,11 @@ const multipleItemRef = (el: any, index: number, area: any) => {
|
|
* 开始识别
|
|
* 开始识别
|
|
*/
|
|
*/
|
|
const getOpenOneTestAndStartFace = () => {
|
|
const getOpenOneTestAndStartFace = () => {
|
|
|
|
+ cleanData();
|
|
examState.value = 41;
|
|
examState.value = 41;
|
|
for (let i = 0; i < multipleItemRefList.value.length; i++) {
|
|
for (let i = 0; i < multipleItemRefList.value.length; i++) {
|
|
multipleItemRefList.value[i].getOpenOneTestAndStartFace()
|
|
multipleItemRefList.value[i].getOpenOneTestAndStartFace()
|
|
}
|
|
}
|
|
- cleanData();
|
|
|
|
};
|
|
};
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -81,6 +87,9 @@ const getStopFace = async () => {
|
|
* 开始测试
|
|
* 开始测试
|
|
*/
|
|
*/
|
|
const getStartOneTest = () => {
|
|
const getStartOneTest = () => {
|
|
|
|
+ if (examState.value != 43) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
let flag = false;
|
|
let flag = false;
|
|
for (let i = 0; i < testList.value.length; i++) {
|
|
for (let i = 0; i < testList.value.length; i++) {
|
|
if (testList.value[i] && testList.value[i].faceCheckStu?.student_id) {
|
|
if (testList.value[i] && testList.value[i].faceCheckStu?.student_id) {
|
|
@@ -93,6 +102,10 @@ const getStartOneTest = () => {
|
|
}
|
|
}
|
|
examState.value = 42;
|
|
examState.value = 42;
|
|
for (let i = 0; i < multipleItemRefList.value.length; i++) {
|
|
for (let i = 0; i < multipleItemRefList.value.length; i++) {
|
|
|
|
+ if (testList.value[i].examState == 41) {
|
|
|
|
+ //正在识别的停止识别
|
|
|
|
+ multipleItemRefList.value[i].getStopFace()
|
|
|
|
+ }
|
|
if (testList.value[i].examState == 43) {
|
|
if (testList.value[i].examState == 43) {
|
|
multipleItemRefList.value[i].getStartOneTest()
|
|
multipleItemRefList.value[i].getStartOneTest()
|
|
}
|
|
}
|
|
@@ -207,8 +220,12 @@ const returnData = (data: any) => {
|
|
//测试完成后回退状态
|
|
//测试完成后回退状态
|
|
if (examState.value == 42) {
|
|
if (examState.value == 42) {
|
|
let flag = false;
|
|
let flag = false;
|
|
- for (let i = 0; i < testList.value.length; i++) {
|
|
|
|
- if (testList.value[i] && testList.value[i].faceCheckStu?.student_id && testList.value[i].examState == 3) {
|
|
|
|
|
|
+ //只监听人脸识别的区
|
|
|
|
+ let newList = testList.value.filter((item: any) => {
|
|
|
|
+ return item?.faceCheckStu?.student_id;
|
|
|
|
+ })
|
|
|
|
+ for (let i = 0; i < newList.length; i++) {
|
|
|
|
+ if (newList[i] && newList[i].faceCheckStu?.student_id && newList[i].examState == 3) {
|
|
flag = true;
|
|
flag = true;
|
|
} else {
|
|
} else {
|
|
return false;
|
|
return false;
|
|
@@ -218,6 +235,42 @@ const returnData = (data: any) => {
|
|
examState.value = 3;
|
|
examState.value = 3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (examState.value == 41) {
|
|
|
|
+ let flag = false;
|
|
|
|
+ //只监听人脸识别的区
|
|
|
|
+ let newList = testList.value.filter((item: any) => {
|
|
|
|
+ return item?.faceCheckStu?.student_id;
|
|
|
|
+ })
|
|
|
|
+ for (let i = 0; i < newList.length; i++) {
|
|
|
|
+ if (newList[i] && newList[i].faceCheckStu?.student_id && newList[i].examState == 43) {
|
|
|
|
+ flag = true;
|
|
|
|
+ } else {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (flag) {
|
|
|
|
+ examState.value = 43;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (examState.value == 0) {
|
|
|
|
+ let flag = false;
|
|
|
|
+ //只监听人脸识别的区
|
|
|
|
+ let newList = testList.value.filter((item: any) => {
|
|
|
|
+ return item?.faceCheckStu?.student_id;
|
|
|
|
+ })
|
|
|
|
+ for (let i = 0; i < newList.length; i++) {
|
|
|
|
+ if (newList[i] && newList[i].faceCheckStu?.student_id && newList[i].examState == 41) {
|
|
|
|
+ flag = true;
|
|
|
|
+ } else {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (flag) {
|
|
|
|
+ examState.value = 41;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
};
|
|
};
|
|
|
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
@@ -242,12 +295,17 @@ onMounted(() => {
|
|
}
|
|
}
|
|
return obj;
|
|
return obj;
|
|
});
|
|
});
|
|
|
|
+ //需要开始按钮的项目
|
|
|
|
+ if (testList.value.length > 5) {
|
|
|
|
+ needStart.value = true;
|
|
|
|
+ }
|
|
//加载WS
|
|
//加载WS
|
|
initWs({ parameter: parameter.value, testTime: time.value.testTime, version: "v2" }, (data: any) => {
|
|
initWs({ parameter: parameter.value, testTime: time.value.testTime, version: "v2" }, (data: any) => {
|
|
- let obj = multipleItemRefList.value.find((item: any) => {
|
|
|
|
- return project + '_' + item.area == data.exam_id;
|
|
|
|
|
|
+ let index = testList.value.findIndex((item: any) => {
|
|
|
|
+ let examId = `${project}_${item.area}`;
|
|
|
|
+ return examId == data.exam_id;
|
|
})
|
|
})
|
|
- obj?.getMessage(data);
|
|
|
|
|
|
+ multipleItemRefList.value[index]?.getMessage(data);
|
|
});
|
|
});
|
|
initSpeech();
|
|
initSpeech();
|
|
})
|
|
})
|