|
@@ -4,36 +4,40 @@
|
|
|
<transition :enter-active-class="proxy?.animate.dialog.enter" :leave-active-class="proxy?.animate.dialog.leave">
|
|
|
<div class="time" v-show="[42].includes(examState)">{{
|
|
|
countdownNumFormat
|
|
|
- }}</div>
|
|
|
+ }}</div>
|
|
|
</transition>
|
|
|
<div class="main">
|
|
|
-
|
|
|
<template v-if="isLongRun">
|
|
|
<swiper :slides-per-view="2" :space-between="20">
|
|
|
<swiper-slide v-for="(items, indexs) in testListArr " :key="indexs">
|
|
|
- <div class="main-left">
|
|
|
+ <div class="main-left main-left2">
|
|
|
<div class="trackItem">
|
|
|
- <div v-for="(item, index) in items" :key="index" class="li">
|
|
|
- <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 v-for="(item, index) in items" :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>
|
|
|
+ <div class="nameBox">
|
|
|
+ <div class="name">{{ item.student_name || "未检录" }}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="name">{{ item.student_name || "未检录" }}</div>
|
|
|
</div>
|
|
|
- <div>
|
|
|
+ <div class="scoreBox">
|
|
|
<div v-if="item.timeStr" class="score">
|
|
|
{{ item.timeStr || "-" }}
|
|
|
</div>
|
|
|
- <div v-if="isBackRun && item.student_id"> 往返次数:{{ item.turns || "0" }} </div>
|
|
|
+ <div v-if="isBackRun && item.student_id" class="turns">往返次数:<span><i>{{ item.turns || "0"
|
|
|
+ }}</i></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="menuBtn" v-if="examState < 42 && !item.isfinish" @click="getChooseStudent(item.track)">检录
|
|
|
</div>
|
|
|
- <div class="menuBtn" v-if="isBackRun && item.student_id"> 往返次数:{{ item.turns || "0" }} </div>
|
|
|
- <div class="menuBtn" v-if="examState < 42" @click="getChooseStudent(item.track)">检录</div>
|
|
|
- <div class="menuBtn" v-if="examState == 43">等待开始测试</div>
|
|
|
- <div class="menuBtn" v-if="examState == 42">正在测试</div>
|
|
|
- <div class="menuBtn menuBtn"
|
|
|
- v-if="examState == 3 && !item.timeStr && item.isfinish && item.student_id">
|
|
|
+ <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>
|
|
@@ -45,26 +49,30 @@
|
|
|
<template v-else>
|
|
|
<div class="main-left">
|
|
|
<div class="trackItem">
|
|
|
- <div v-for="(item, index) in faceStudentList" :key="index" class="li">
|
|
|
- <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 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>
|
|
|
+ <div class="nameBox">
|
|
|
+ <div class="name">{{ item.student_name || "未检录" }}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="name">{{ item.student_name || "未检录" }}</div>
|
|
|
</div>
|
|
|
- <div>
|
|
|
+ <div class="scoreBox">
|
|
|
<div v-if="item.timeStr" class="score">
|
|
|
{{ item.timeStr || "-" }}
|
|
|
</div>
|
|
|
- <div v-if="isBackRun && item.student_id"> 往返次数:{{ item.turns || "0" }} </div>
|
|
|
+ <div v-if="isBackRun && item.student_id" class="turns">往返次数:<span><i>{{ item.turns || "0" }}</i></span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="menuBtn" v-if="isBackRun && item.student_id"> 往返次数:{{ item.turns || "0" }} </div>
|
|
|
<div class="menuBtn" v-if="examState < 42" @click="getChooseStudent(item.track)">检录</div>
|
|
|
- <div class="menuBtn" v-if="examState == 43">等待开始测试</div>
|
|
|
- <div class="menuBtn" v-if="examState == 42">正在测试</div>
|
|
|
- <div class="menuBtn menuBtn" v-if="examState == 3 && !item.timeStr && item.isfinish && item.student_id">
|
|
|
+ <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>
|
|
@@ -104,7 +112,8 @@
|
|
|
<div class="btn startBtn" @click="getStartOneTest" v-if="examState == 43">开始测试</div>
|
|
|
</template>
|
|
|
<template v-else> </template>
|
|
|
- <div class="btn" @click="getAgain" v-if="examState == 42 || showTestAgain">再测一次</div>
|
|
|
+ <div class="btn" @click="getConfirmEnd" v-if="examState == 42">{{ isLongRun ? '结 束' : '下一组' }}</div>
|
|
|
+ <div class="btn" @click="getAgain" v-if="showTestAgain">再测一次</div>
|
|
|
<div class="btn" @click="getRetestFace" v-if="examState == 43">重新识别</div>
|
|
|
</div>
|
|
|
<ChooseStudent ref="chooseStudentRef" @returnData="returnStudent" />
|
|
@@ -157,7 +166,7 @@ const getMessage = (e: any) => {
|
|
|
//工作站状态
|
|
|
if (e.cmd === 'init_result') {
|
|
|
if (isLongRun.value) {
|
|
|
- let num = 70;
|
|
|
+ let num = 80;
|
|
|
let list: any = [];
|
|
|
for (let i = 1; i <= num; i++) {
|
|
|
list.push({ track: i });
|
|
@@ -342,6 +351,7 @@ const getStartOneTest = () => {
|
|
|
* 再测一次
|
|
|
*/
|
|
|
const getAgain = async () => {
|
|
|
+ let loading = ElLoading.service({ text: '请稍等...', background: 'rgba(0, 0, 0, 0.8)', customClass: `sports ${parameter.value.project}` });
|
|
|
//预存测试人员
|
|
|
let student = faceStudentList.value.map((item: any) => {
|
|
|
let obj = {
|
|
@@ -366,6 +376,38 @@ const getAgain = async () => {
|
|
|
await startFace();
|
|
|
await stopFace();
|
|
|
getFaceConfirmOnly(student);
|
|
|
+ loading?.close();
|
|
|
+ let loadingTime = setTimeout(() => {
|
|
|
+ loading?.close();
|
|
|
+ clearTimeout(loadingTime);
|
|
|
+ }, 10000);
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 确认退出
|
|
|
+*/
|
|
|
+const getConfirmEnd = async () => {
|
|
|
+ let txt = isLongRun.value ? '是否结束' : '是否开始下一组?'
|
|
|
+ await proxy?.$modal.confirm(txt);
|
|
|
+ let loading = ElLoading.service({ text: '请稍等...', background: 'rgba(0, 0, 0, 0.8)', customClass: `sports ${parameter.value.project}` });
|
|
|
+ //测试中
|
|
|
+ if (examState.value == 42) {
|
|
|
+ await finishOneTest();
|
|
|
+ }
|
|
|
+ //其他状态
|
|
|
+ if (examState.value > 3) {
|
|
|
+ await closeOneTest();
|
|
|
+ }
|
|
|
+ if (!isLongRun.value) {
|
|
|
+ //重新走一次流程
|
|
|
+ await openOneTest();
|
|
|
+ await startFace();
|
|
|
+ }
|
|
|
+ loading?.close();
|
|
|
+ let loadingTime = setTimeout(() => {
|
|
|
+ loading?.close();
|
|
|
+ clearTimeout(loadingTime);
|
|
|
+ }, 10000);
|
|
|
};
|
|
|
|
|
|
/**
|
|
@@ -415,6 +457,10 @@ const getChooseStudent = (track: number) => {
|
|
|
proxy?.$modal.msgWarning("请点击开始人脸识别");
|
|
|
return false;
|
|
|
}
|
|
|
+ if (examState.value == 43) {
|
|
|
+ proxy?.$modal.msgWarning("请点击重新识别");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
currentTrack.value = track;
|
|
|
chooseStudentRef.value.open();
|
|
|
};
|
|
@@ -579,7 +625,7 @@ const getReportList = () => {
|
|
|
*/
|
|
|
const testListArr: any = computed(() => {
|
|
|
let list: any = [];
|
|
|
- let num = 7;
|
|
|
+ let num = 8;
|
|
|
let myLength = Math.ceil(faceStudentList.value.length / num);
|
|
|
for (let i = 0; i < myLength; i++) {
|
|
|
list[i] = [];
|
|
@@ -692,7 +738,7 @@ $waiPadding: 6.51rem;
|
|
|
line-height: 20vh;
|
|
|
border-radius: 50%;
|
|
|
color: #FF9402;
|
|
|
- font-size: 8vh;
|
|
|
+ font-size: 7.5vh;
|
|
|
text-align: center;
|
|
|
background-image: url("@/assets/images/test/time.png");
|
|
|
background-position: center;
|
|
@@ -714,10 +760,9 @@ $waiPadding: 6.51rem;
|
|
|
justify-content: space-between;
|
|
|
overflow: hidden;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
.main-left {
|
|
|
width: 71.5%;
|
|
|
+ height: 100%;
|
|
|
display: flex;
|
|
|
background: linear-gradient(58deg, #092941 -85%, #2A484B 96%);
|
|
|
box-shadow: inset 0px 1px 0px 2px rgba(255, 255, 255, 0.4);
|
|
@@ -753,63 +798,122 @@ $waiPadding: 6.51rem;
|
|
|
border-bottom: 1px solid #475557;
|
|
|
height: calc(100%/8);
|
|
|
box-sizing: border-box;
|
|
|
+ padding: 0px 20px 0px 50px;
|
|
|
|
|
|
- .track {
|
|
|
- color: #13ED84;
|
|
|
- font-size: 2rem;
|
|
|
- font-family: 'Saira-ExtraBold';
|
|
|
- }
|
|
|
-
|
|
|
- .pic {
|
|
|
- width: 7vh;
|
|
|
- height: 7vh;
|
|
|
- border-radius: 50%;
|
|
|
+ .left {
|
|
|
display: flex;
|
|
|
- justify-content: center;
|
|
|
align-items: center;
|
|
|
- overflow: hidden;
|
|
|
|
|
|
- img {
|
|
|
- width: 100%;
|
|
|
+ .track {
|
|
|
+ width: 5rem;
|
|
|
+ color: #13ED84;
|
|
|
+ font-size: 2rem;
|
|
|
+ font-family: 'Saira-ExtraBold';
|
|
|
+ margin-right: 1rem
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
+ .pic {
|
|
|
+ width: 6.7vh;
|
|
|
+ height: 6.7vh;
|
|
|
+ border-radius: 50%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ overflow: hidden;
|
|
|
+ margin-right: 15px;
|
|
|
|
|
|
- .pic2 {
|
|
|
- box-sizing: border-box;
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.5);
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ .pic2 {
|
|
|
+ box-sizing: border-box;
|
|
|
+ border: 1px solid rgba(255, 255, 255, 0.5);
|
|
|
+ }
|
|
|
+
|
|
|
+ .userInfo {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-start;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ .nameBox {
|
|
|
+ width: 8rem;
|
|
|
+
|
|
|
+ .name {
|
|
|
+ font-size: 1.5rem;
|
|
|
+ color: #ffffff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- .userInfo {
|
|
|
+ .scoreBox {
|
|
|
display: flex;
|
|
|
- justify-content: flex-start;
|
|
|
align-items: center;
|
|
|
|
|
|
- .name {
|
|
|
+ .score {
|
|
|
+ color: #ffffff;
|
|
|
font-size: 2rem;
|
|
|
+ font-family: 'Saira-ExtraBold';
|
|
|
+ }
|
|
|
+
|
|
|
+ .turns {
|
|
|
+ margin-left: 3rem;
|
|
|
color: #ffffff;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ span {
|
|
|
+ font: 1.5rem;
|
|
|
+ margin-left: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-style: normal;
|
|
|
+ font-size: 1.8rem;
|
|
|
+ font-family: 'Saira-ExtraBold';
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- .score {
|
|
|
- color: #ffffff;
|
|
|
- font-size: 2rem;
|
|
|
- font-family: 'Saira-ExtraBold';
|
|
|
- }
|
|
|
|
|
|
.menuBtn {
|
|
|
width: auto;
|
|
|
- padding: 0 1.2rem 0 0.7rem;
|
|
|
- height: 3rem;
|
|
|
- line-height: 3rem;
|
|
|
- border-radius: 1.5rem;
|
|
|
+ padding: 0 1.2rem;
|
|
|
+ height: 2.8rem;
|
|
|
+ line-height: 2.8rem;
|
|
|
+ border-radius: 1.4rem;
|
|
|
color: #ffffff;
|
|
|
- font-size: 1.7rem;
|
|
|
- margin-left: 1rem;
|
|
|
+ font-size: 1.5rem;
|
|
|
background: linear-gradient(180deg, #FFB200 0%, #ED7905 72%);
|
|
|
box-shadow: inset 0px 1px 0px 1px rgba(255, 255, 255, 0.5);
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .menuBtn2 {
|
|
|
+ color: #1A293A;
|
|
|
+ background: radial-gradient(159% 126% at 5% 93%, #8EFFA9 0%, #07FFE7 100%);
|
|
|
+ box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.1874), inset 0px 1px 0px 2px rgba(255, 255, 255, 0.5577);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .main-left2 {
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ .trackItem {
|
|
|
+ .li {
|
|
|
+ .scoreBox {
|
|
|
+ .score {
|
|
|
+ font-size: 1.8rem;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -964,7 +1068,7 @@ $waiPadding: 6.51rem;
|
|
|
margin-left: 20px;
|
|
|
cursor: pointer;
|
|
|
background: radial-gradient(159% 126% at 5% 93%, #8EFFA9 0%, #07FFE7 100%);
|
|
|
- box-shadow: 3px 6px 4px 1px rgba(0, 0, 0, 0.1874), inset 0px 1px 0px 2px rgba(255, 255, 255, 0.5577);
|
|
|
+ box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.1874), inset 1px 1px 1px 1px rgba(255, 255, 255, 0.5577);
|
|
|
|
|
|
&:hover {
|
|
|
background: #8EFFA9;
|
|
@@ -974,7 +1078,7 @@ $waiPadding: 6.51rem;
|
|
|
.startBtn {
|
|
|
color: #ffffff;
|
|
|
background: radial-gradient(159% 126% at 5% 93%, #F99F02 0%, #ED7905 100%);
|
|
|
- box-shadow: 3px 6px 4px 1px rgba(0, 0, 0, 0.1874), inset 0px 1px 0px 2px rgba(255, 255, 255, 0.5577);
|
|
|
+ box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.1874), inset 1px 1px 1px 1px rgba(255, 255, 255, 0.5577);
|
|
|
|
|
|
&:hover {
|
|
|
background: #F99F02;
|