林旭祥 преди 8 месеца
родител
ревизия
50d8219bf3
променени са 3 файла, в които са добавени 123 реда и са изтрити 25 реда
  1. 72 5
      src/components/ChooseStudent/index.vue
  2. 3 3
      src/components/ReportWindow/index.vue
  3. 48 17
      src/views/train/run.vue

+ 72 - 5
src/components/ChooseStudent/index.vue

@@ -23,8 +23,9 @@
             <el-button class="button" type="primary" @click="getSearchStudent">搜索</el-button>
           </div>
           <div class="tableBox">
-            <el-table :data="tableData" class="table" @row-click="handleSelectionChange" @row-dblclick="confirm"
-              highlight-current-row>
+            <el-table :data="tableData" class="table" @cell-click="handleCellClickChange"
+              @selection-change="handleSelectionChange" @row-dblclick="handleDblclick" highlight-current-row>
+              <el-table-column type="selection" width="55" v-if="props.selectType == 'multiple'" />
               <el-table-column label="头像" width="120">
                 <template #default="scope">
                   <el-avatar :src="scope.row.face_pic || scope.row.logo_url" />
@@ -41,6 +42,14 @@
               :page-sizes="[20, 60, 120]" :current-page="page.page" @size-change="handleSizeChange"
               @current-change="handleCurrentChange" />
           </div>
+          <div class="multipleList" v-if="props.selectType == 'multiple'">
+            <ul>
+              <li v-for="item in selectValue">
+                <div><el-avatar :src="item.face_pic || item.logo_url" /></div>
+                <div>{{ item.name }}</div>
+              </li>
+            </ul>
+          </div>
         </div>
         <div class="bottom">
           <div class="btn" @click="confirm">确定</div>
@@ -55,6 +64,14 @@ import dataDictionary from "@/utils/dataDictionary"
 const { proxy } = getCurrentInstance() as any;
 const emit = defineEmits(['returnData']);
 
+//父值
+const props = defineProps({
+  selectType: {
+    type: String,
+    default: 'single',//单选single 多选multiple
+  },
+});
+
 //筛选班别
 const classData = computed(() => {
   optionForm.value.class = "";
@@ -169,19 +186,38 @@ const handleSizeChange = (data: number) => {
   getStudent();
 };
 
-//被选行
+//单选行
+const handleCellClickChange = (data: any) => {
+  if (props.selectType == 'single') {
+    selectValue.value = [data];
+  }
+};
+
+//多选行
 const handleSelectionChange = (data: any) => {
   selectValue.value = data;
 };
 
+//双击
+const handleDblclick = (data: any) => {
+  if (props.selectType == 'single') {
+    confirm();
+  }
+};
+
 //确定
 const confirm = () => {
-  if (!selectValue.value.id) {
+  console.log("selectValue.value", selectValue.value)
+  if (selectValue.value.length == 0) {
     proxy?.$modal.msgWarning(`请选择!`);
     return false;
   }
+  if (props.selectType == 'multiple') {
+    emit('returnData', selectValue.value);
+  } else {
+    emit('returnData', selectValue.value[0]);
+  }
   close();
-  emit('returnData', selectValue.value);
 };
 
 onMounted(() => {
@@ -331,6 +367,37 @@ defineExpose({
           }
         }
       }
+
+      .multipleList {
+        ul {
+          display: flex;
+          overflow-x: scroll;
+          padding: 15px 0 0px 0;
+
+          li {
+            margin-right: 20px;
+            text-align: center;
+          }
+
+          &::-webkit-scrollbar {
+            width: 6px;
+          }
+
+          &::-webkit-scrollbar-thumb {
+            border-width: 2px;
+            border-radius: 3px;
+            border-style: dashed;
+            border-color: transparent;
+            background: rgb(27, 72, 92);
+            background-clip: padding-box;
+          }
+
+          &::-webkit-scrollbar-button:hover {
+            border-radius: 5px;
+            background: rgba(26, 62, 78, 1);
+          }
+        }
+      }
     }
 
     .bottom {

+ 3 - 3
src/components/ReportWindow/index.vue

@@ -147,7 +147,7 @@ const getReportDetails = async () => {
     student_ids: faceCheckStu.value.student_id,
     result_id_info: faceCheckStu.value.result_id_info
   };
-  await proxy?.$http.common.reportDetailsOld(params).then((res: any) => {
+  await proxy?.$http.common.reportDetails(params).then((res: any) => {
     if (res.data.length > 0) {
       reportDetails.value = res.data[0];
     }
@@ -162,12 +162,12 @@ const getChoose = (data: any) => {
 //打开
 const open = async (typeData: any, data: any) => {
   console.log("data", data)
+  type.value = typeData;
+  faceCheckStu.value = data;
   if (faceCheckStu.value.result_id_info == undefined) {
     proxy?.$modal.msgWarning("查询参数错误");
     return false;
   }
-  type.value = typeData;
-  faceCheckStu.value = data;
   await getReportDetails();
   reportWindow.value.show = true;
   emit('returnData', reportWindow.value.show);

+ 48 - 17
src/views/train/run.vue

@@ -4,11 +4,12 @@
     <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" :slides-per-group="2" :space-between="20">
+        <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">
@@ -33,8 +34,8 @@
                           }}</i></span>
                     </div>
                   </div>
-                  <div class="menuBtn" v-if="examState < 42 && !item.isfinish" @click="getChooseStudent(item.track)">检录
-                  </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">
@@ -101,13 +102,11 @@
         </div>
       </template>
     </div>
-
-
-
     <!-- <div>当前状态:({{ examState == 3 ? "初始化完成" : examState == 40 ? "创建测试" : examState == 41 ? "正在人脸识别":examState ==43 ? "停止人脸识别" : examState == 42 ? "正在测试" : "请初始化" }})</div> -->
     <div class="footerBtn">
       <template v-if="needStart">
         <div class="btn" @click="getOpenOneTestAndStartFace" v-if="examState == 3 || examState == 40">开始识别</div>
+        <div class="btn" @click="getChooseStudent()" v-if="examState == 41 && isLongRun">检录</div>
         <div class="btn" @click="getStopFace" v-if="examState == 41">停止识别</div>
         <div class="btn startBtn" @click="getStartOneTest" v-if="examState == 43">开始测试</div>
       </template>
@@ -116,7 +115,7 @@
       <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" />
+    <ChooseStudent ref="chooseStudentRef" :selectType="isLongRun ? 'multiple' : 'single'" @returnData="returnStudent" />
   </div>
 </template>
 
@@ -165,14 +164,14 @@ const getMessage = (e: any) => {
   }
   //工作站状态
   if (e.cmd === 'init_result') {
-    if (isLongRun.value) {
-      let num = 80;
-      let list: any = [];
-      for (let i = 1; i <= num; i++) {
-        list.push({ track: i });
-      }
-      faceStudentList.value = list
-    }
+    // if (isLongRun.value) {
+    //   let num = 80;
+    //   let list: any = [];
+    //   for (let i = 1; i <= num; i++) {
+    //     list.push({ track: i });
+    //   }
+    //   faceStudentList.value = list
+    // }
   }
 
   //获取跑道配置
@@ -452,7 +451,7 @@ const getClearTimer = (data?: any) => {
 /**
  * 选择学生
 */
-const getChooseStudent = (track: number) => {
+const getChooseStudent = (track?: number) => {
   if (examState.value < 41) {
     proxy?.$modal.msgWarning("请点击开始识别");
     return false;
@@ -469,6 +468,19 @@ const getChooseStudent = (track: number) => {
  * 返回被选学生
 */
 const returnStudent = (data: any) => {
+  if (isLongRun.value) {
+    //长跑
+    longStudent(data)
+  } else {
+    //短跑
+    sprintStudent(data)
+  }
+};
+
+/**
+ * 处理短跑返回被选学生
+*/
+const sprintStudent = (data: any) => {
   let obj = {
     result_id: resultId.value,
     face_pic: data.face_pic || data.logo_url,
@@ -494,6 +506,24 @@ const returnStudent = (data: any) => {
   currentTrack.value = null;
 };
 
+/**
+ * 处理长跑返回被选学生
+*/
+const longStudent = (data: any) => {
+  let list = data.map((item: any, index: any) => {
+    let obj = {
+      track: index + 1,
+      result_id: resultId.value,
+      face_pic: item.face_pic || item.logo_url,
+      student_id: item.id,
+      student_name: item.name,
+      gender: item.gender,
+    }
+    return obj;
+  })
+  faceStudentList.value = list;
+};
+
 /**
  * 清除历史记录
 */
@@ -637,6 +667,7 @@ const testListArr: any = computed(() => {
       }
     }
   }
+  console.log("111", list)
   return list;
 });