|
@@ -8,76 +8,84 @@
|
|
|
</transition>
|
|
|
<div class="main">
|
|
|
<template v-if="isLongRun">
|
|
|
+ <!--长跑-->
|
|
|
<swiper :slides-per-view="testListArr.length >= 2 ? 2 : 1" :slides-per-group="testListArr.length >= 2 ? 2 : 1"
|
|
|
:space-between="20">
|
|
|
<swiper-slide v-for="(items, indexs) in testListArr " :key="indexs">
|
|
|
<div class="main-left main-left2">
|
|
|
<div class="trackItem">
|
|
|
- <div v-for="(item, index) in items" :key="item" class="li">
|
|
|
- <div class="left">
|
|
|
- <div class="track">{{ (index + 1) + (8 * indexs) }}</div>
|
|
|
- <div class="userInfo" @click="getChooseStudent(item.track)">
|
|
|
- <div class="pic pic2" v-if="item.face_pic"> <img :src="item.face_pic" /></div>
|
|
|
- <div class="pic" v-else>
|
|
|
- <img src="@/assets/images/test/profilePicture.png" />
|
|
|
- </div>
|
|
|
- <div class="nameBox">
|
|
|
- <div class="name">{{ item.student_name || "未检录" }}</div>
|
|
|
+ <transition-group :enter-active-class="proxy?.animate.runList.enter">
|
|
|
+ <div v-for="(item, index) in items" :key="indexs + '_' + index" class="li">
|
|
|
+ <div class="left">
|
|
|
+ <div class="track">{{ (index + 1) + (8 * indexs) }}</div>
|
|
|
+ <div class="userInfo" @click="getChooseStudent(item.track)">
|
|
|
+ <div class="pic pic2" v-if="item.student_id"> <img :src="item.face_pic" /></div>
|
|
|
+ <div class="pic" v-else>
|
|
|
+ <img src="@/assets/images/test/profilePicture.png" />
|
|
|
+ </div>
|
|
|
+ <div class="nameBox">
|
|
|
+ <div class="name">{{ item.student_name || "未检录" }}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="scoreBox">
|
|
|
- <div v-if="item.timeStr" class="score">
|
|
|
- {{ item.timeStr || "-" }}
|
|
|
+ <div class="scoreBox">
|
|
|
+ <div v-if="item.timeStr" class="score">
|
|
|
+ {{ item.timeStr || "-" }}
|
|
|
+ </div>
|
|
|
+ <div v-if="isBackRun && item.student_id" class="turns">往返次数:<span><i>{{ item.turns || "0"
|
|
|
+ }}</i></span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div v-if="isBackRun && item.student_id" class="turns">往返次数:<span><i>{{ item.turns || "0"
|
|
|
- }}</i></span>
|
|
|
+ <div class="menuBtn menuBtn2" v-if="examState == 43 && item.student_id">等待开始测试</div>
|
|
|
+ <div class="menuBtn menuBtn2" v-if="examState == 42 && item.student_id">正在测试</div>
|
|
|
+ <div class="menuBtn" v-if="examState == 3 && !item.timeStr && item.isfinish && item.student_id">
|
|
|
+ 异常
|
|
|
</div>
|
|
|
+ <div class="close" @click="close(item)" v-if="examState == 41"></div>
|
|
|
</div>
|
|
|
- <!-- <div class="menuBtn" v-if="examState < 42 && !item.isfinish" @click="getChooseStudent(item.track)">检录
|
|
|
- </div> -->
|
|
|
- <div class="menuBtn menuBtn2" v-if="examState == 43 && item.student_id">等待开始测试</div>
|
|
|
- <div class="menuBtn menuBtn2" v-if="examState == 42 && item.student_id">正在测试</div>
|
|
|
- <div class="menuBtn" v-if="examState == 3 && !item.timeStr && item.isfinish && item.student_id">
|
|
|
- 异常
|
|
|
- </div>
|
|
|
- <div class="close" @click="close(item)" v-if="examState == 41"></div>
|
|
|
- </div>
|
|
|
+ </transition-group>
|
|
|
</div>
|
|
|
</div>
|
|
|
</swiper-slide>
|
|
|
</swiper>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
+ <!--短跑-->
|
|
|
<div class="main-left">
|
|
|
- <div class="trackItem">
|
|
|
- <div v-for="(item, index) in faceStudentList" :key="item" class="li">
|
|
|
- <div class="left">
|
|
|
- <div class="track">{{ item.track }}</div>
|
|
|
- <div class="userInfo" @click="getChooseStudent(item.track)">
|
|
|
- <div class="pic pic2" v-if="item.face_pic"> <img :src="item.face_pic" /></div>
|
|
|
- <div class="pic" v-else>
|
|
|
- <img src="@/assets/images/test/profilePicture.png" />
|
|
|
+ <div class="trackItem"><transition-group :enter-active-class="proxy?.animate.runList.enter">
|
|
|
+ <div v-for="(item, index) in faceStudentList" :key="index" class="li">
|
|
|
+ <div class="left">
|
|
|
+ <div class="track">{{ item.track }}</div>
|
|
|
+ <div class="userInfo" @click="getChooseStudent(item.track)">
|
|
|
+
|
|
|
+ <div class="pic pic2" v-if="item.student_id"> <img :src="item.face_pic" /></div>
|
|
|
+ <div class="pic" v-else>
|
|
|
+ <img src="@/assets/images/test/profilePicture.png" />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="nameBox">
|
|
|
+ <div class="name">{{ item.student_name || "未检录" }}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="nameBox">
|
|
|
- <div class="name">{{ item.student_name || "未检录" }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="scoreBox">
|
|
|
+ <div v-if="item.timeStr" class="score">
|
|
|
+ {{ item.timeStr || "-" }}
|
|
|
+ </div>
|
|
|
+ <div v-if="isBackRun && item.student_id" class="turns">往返次数:<span><i>{{ item.turns || "0"
|
|
|
+ }}</i></span>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="scoreBox">
|
|
|
- <div v-if="item.timeStr" class="score">
|
|
|
- {{ item.timeStr || "-" }}
|
|
|
+ <div class="menuBtn" v-if="examState > 3 && examState < 42" @click="getChooseStudent(item.track)">检录
|
|
|
</div>
|
|
|
- <div v-if="isBackRun && item.student_id" class="turns">往返次数:<span><i>{{ item.turns || "0" }}</i></span>
|
|
|
+ <div class="menuBtn menuBtn2" v-if="examState == 43 && item.student_id">等待开始测试</div>
|
|
|
+ <div class="menuBtn menuBtn2" v-if="examState == 42 && item.student_id">正在测试</div>
|
|
|
+ <div class="menuBtn" v-if="examState == 3 && !item.timeStr && item.isfinish && item.student_id">
|
|
|
+ 异常
|
|
|
</div>
|
|
|
+
|
|
|
</div>
|
|
|
- <div class="menuBtn" v-if="examState < 42" @click="getChooseStudent(item.track)">检录</div>
|
|
|
- <div class="menuBtn menuBtn2" v-if="examState == 43 && item.student_id">等待开始测试</div>
|
|
|
- <div class="menuBtn menuBtn2" v-if="examState == 42 && item.student_id">正在测试</div>
|
|
|
- <div class="menuBtn" v-if="examState == 3 && !item.timeStr && item.isfinish && item.student_id">
|
|
|
- 异常
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ </transition-group>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="main-right">
|
|
@@ -252,6 +260,13 @@ const getStopFace = async () => {
|
|
|
if (examState.value != 41) {
|
|
|
return false;
|
|
|
}
|
|
|
+ let list = faceStudentList.value.filter((item: any) => {
|
|
|
+ return item.student_id;
|
|
|
+ })
|
|
|
+ if (!list.length) {
|
|
|
+ proxy?.$modal.msgWarning("请选择人员!");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
await stopFace();
|
|
|
getFaceConfirmOnly();
|
|
|
};
|
|
@@ -271,6 +286,13 @@ const getFaceConfirmOnly = (data?: any) => {
|
|
|
return item.student_id;
|
|
|
});
|
|
|
}
|
|
|
+ //短跑播报跑道
|
|
|
+ if (data && !isLongRun.value) {
|
|
|
+ let speechList = list.map((item: any) => {
|
|
|
+ return `第${item.track == 2 ? '二' : item.track}道, ${item.student_name}`
|
|
|
+ }).join();
|
|
|
+ speckText(speechList);
|
|
|
+ }
|
|
|
//长跑自动拼接跑道
|
|
|
if (isLongRun.value) {
|
|
|
list = list.map((item: any, index: any) => {
|
|
@@ -317,11 +339,26 @@ const getStartOneTest = () => {
|
|
|
proxy?.$modal.msgWarning("请选择人员!");
|
|
|
return false;
|
|
|
}
|
|
|
- startOneTest(data == null, () => {
|
|
|
+ //停止播报;
|
|
|
+ speckCancel()
|
|
|
+
|
|
|
+ // 和工作站搭配时差版
|
|
|
+ //提前发送开始的时间
|
|
|
+ let advanceTime = 1000;
|
|
|
+ //各就位+枪声是7秒左右,5.26秒是播枪声
|
|
|
+ let myTime = 7010;
|
|
|
+ //播放音频和遮罩
|
|
|
+ let myText = "各就位,预备!";
|
|
|
+ let loading = ElLoading.service({ text: myText, background: 'rgba(0, 0, 0, 0.8)', customClass: `sports ${parameter.value.project}` });
|
|
|
+ speckText(myText);
|
|
|
+ setTimeout(() => {
|
|
|
+ startOneTest(data == null, () => {
|
|
|
+ });
|
|
|
+ loading?.close();
|
|
|
+ }, advanceTime)
|
|
|
+ setTimeout(() => {
|
|
|
//显示再测一次按钮
|
|
|
showTestAgain.value = true;
|
|
|
- //停止播报;
|
|
|
- speckCancel()
|
|
|
//计时项目才开
|
|
|
if (needStart.value == true) {
|
|
|
//时间为0的为正计时,大于0的为倒计时
|
|
@@ -333,7 +370,24 @@ const getStartOneTest = () => {
|
|
|
} else {
|
|
|
speckText("请开始测试");
|
|
|
}
|
|
|
- })
|
|
|
+ }, myTime)
|
|
|
+
|
|
|
+ // 立即开版本
|
|
|
+ // startOneTest(data == null, () => {
|
|
|
+ // //显示再测一次按钮
|
|
|
+ // showTestAgain.value = true;
|
|
|
+ // //计时项目才开
|
|
|
+ // if (needStart.value == true) {
|
|
|
+ // //时间为0的为正计时,大于0的为倒计时
|
|
|
+ // if (time.value.testTime == 0) {
|
|
|
+ // getCounting("+");
|
|
|
+ // } else {
|
|
|
+ // getCounting("-");
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // speckText("请开始测试");
|
|
|
+ // }
|
|
|
+ // })
|
|
|
};
|
|
|
|
|
|
/**
|
|
@@ -530,16 +584,20 @@ const longStudent = (data: any) => {
|
|
|
const cleanData = () => {
|
|
|
time.value.countdownNum = time.value.testTime;
|
|
|
showTestAgain.value = false;
|
|
|
- //重置全部
|
|
|
- let list = faceStudentList.value.map((item: any) => {
|
|
|
- let obj = {
|
|
|
- student_id: null,
|
|
|
- track: item.track,
|
|
|
- isfinish: false,
|
|
|
- }
|
|
|
- return obj;
|
|
|
- })
|
|
|
- faceStudentList.value = list;
|
|
|
+ if (isLongRun.value) {
|
|
|
+ faceStudentList.value = [];
|
|
|
+ } else {
|
|
|
+ //重置全部
|
|
|
+ let list = faceStudentList.value.map((item: any) => {
|
|
|
+ let obj = {
|
|
|
+ student_id: null,
|
|
|
+ track: item.track,
|
|
|
+ isfinish: false,
|
|
|
+ }
|
|
|
+ return obj;
|
|
|
+ })
|
|
|
+ faceStudentList.value = list;
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
/**
|