Răsfoiți Sursa

添加冻结时间外追加活检的配置

lideyin 5 ani în urmă
părinte
comite
d131cca128
2 a modificat fișierele cu 234 adăugiri și 69 ștergeri
  1. 164 1
      src/modules/examwork/view/onlineExam.vue
  2. 70 68
      src/modules/examwork/view/student.vue

+ 164 - 1
src/modules/examwork/view/onlineExam.vue

@@ -567,6 +567,75 @@
                     </el-input>
                   </el-form-item>
                 </el-row>
+                <el-row
+                  v-show="
+                    form.properties.IS_FACE_ENABLE == 'true' &&
+                      form.properties.IDENTIFICATION_OF_LIVING_BODY_SCHEME ==
+                        'S2'
+                  "
+                >
+                  <el-form-item
+                    label="追加人脸活体检测"
+                    :label-width="style.label_width_tab4"
+                  >
+                    <el-radio-group
+                      v-model="form.properties.ADD_FACE_VERIFY_OUT_FREEZE_TIME"
+                      :disabled="this.is_face_verify_diabled"
+                      class="input"
+                    >
+                      <el-radio label="true">是</el-radio>
+                      <el-radio label="false">否</el-radio>
+                    </el-radio-group>
+                  </el-form-item>
+                </el-row>
+                <el-row
+                  v-show="
+                    form.properties.ADD_FACE_VERIFY_OUT_FREEZE_TIME == 'true'
+                  "
+                >
+                  <el-form-item
+                    label="追加人脸活体检测开始时间"
+                    prop="OUT_FREEZE_TIME_FACE_VERIFY_START_MINUTE"
+                    :label-width="style.label_width_tab4"
+                  >
+                    <el-input
+                      maxlength="5"
+                      v-model.trim.number="
+                        form.properties.OUT_FREEZE_TIME_FACE_VERIFY_START_MINUTE
+                      "
+                      auto-complete="off"
+                      class="input"
+                    >
+                      <template slot="append"
+                        >分钟</template
+                      >
+                    </el-input>
+                  </el-form-item>
+                </el-row>
+                <el-row
+                  v-show="
+                    form.properties.ADD_FACE_VERIFY_OUT_FREEZE_TIME == 'true'
+                  "
+                >
+                  <el-form-item
+                    label="追加人脸活体检测结束时间"
+                    prop="OUT_FREEZE_TIME_FACE_VERIFY_END_MINUTE"
+                    :label-width="style.label_width_tab4"
+                  >
+                    <el-input
+                      maxlength="5"
+                      v-model.trim.number="
+                        form.properties.OUT_FREEZE_TIME_FACE_VERIFY_END_MINUTE
+                      "
+                      auto-complete="off"
+                      class="input"
+                    >
+                      <template slot="append"
+                        >分钟</template
+                      >
+                    </el-input>
+                  </el-form-item>
+                </el-row>
               </el-tab-pane>
               <el-tab-pane label="阅卷设置" name="tab5">
                 <el-row>
@@ -930,6 +999,67 @@ let validateFaceVerifyEndMinute = (rule, value, callback) => {
   }
 };
 
+let validateOutFreezeTimeFaceVerifyStartMinute = (rule, value, callback) => {
+  let isFaceVerify = _this.form.properties.IS_FACE_VERIFY;
+  let faceVerifyScheme =
+    _this.form.properties.IDENTIFICATION_OF_LIVING_BODY_SCHEME;
+  let v = _this.form.properties.OUT_FREEZE_TIME_FACE_VERIFY_START_MINUTE;
+  if (isFaceVerify == "true" && faceVerifyScheme == "S2") {
+    if (v === "") {
+      callback(new Error("请输入追加活体检测开始分钟数"));
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
+    } else if (!v.toString().match(/^[1-9]\d*$/)) {
+      callback(new Error("追加活体检测开始分钟数只能是正整数"));
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
+    } else {
+      callback();
+    }
+  } else {
+    callback();
+  }
+};
+
+let validateOutFreezeTimeFaceVerifyEndMinute = (rule, value, callback) => {
+  let isFaceVerify = _this.form.properties.IS_FACE_VERIFY;
+  let faceVerifyScheme =
+    _this.form.properties.IDENTIFICATION_OF_LIVING_BODY_SCHEME;
+  let start = _this.form.properties.OUT_FREEZE_TIME_FACE_VERIFY_START_MINUTE;
+  let v = _this.form.properties.OUT_FREEZE_TIME_FACE_VERIFY_END_MINUTE;
+  if (isFaceVerify == "true" && faceVerifyScheme == "S2") {
+    if (v === "") {
+      callback(new Error("请输入追加活体检测结束分钟数"));
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
+    } else if (!v.toString().match(/^[1-9]\d*$/)) {
+      callback(new Error("追加活体检测结束分钟数只能是正整数"));
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
+    } else if (start !== "" && parseInt(v) < parseInt(start)) {
+      callback(
+        new Error("追加活体检测结束分钟数不能小于追加活体检测开始分钟数")
+      );
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
+    } else {
+      callback();
+    }
+  } else {
+    callback();
+  }
+};
+
 export default {
   components: {
     ckeditor,
@@ -995,7 +1125,11 @@ export default {
           FACE_VERIFY_END_MINUTE: 10,
           PUSH_SCORE: "false",
           CHECK_ENVIRONMENT: "false",
-          WEIXIN_ANSWER_ENABLED: "false"
+          WEIXIN_ANSWER_ENABLED: "false",
+          ADD_FACE_VERIFY_OUT_FREEZE_TIME: "false",
+          OUT_FREEZE_TIME_FACE_VERIFY_START_MINUTE: 10,
+          OUT_FREEZE_TIME_FACE_VERIFY_END_MINUTE: 30,
+          IDENTIFICATION_OF_LIVING_BODY_SCHEME: "S1"
         }
       },
       examTypeList: EXAM_TYPE,
@@ -1062,6 +1196,20 @@ export default {
             trigger: "blur"
           }
         ],
+        OUT_FREEZE_TIME_FACE_VERIFY_START_MINUTE: [
+          {
+            required: true,
+            validator: validateOutFreezeTimeFaceVerifyStartMinute,
+            trigger: "blur"
+          }
+        ],
+        OUT_FREEZE_TIME_FACE_VERIFY_END_MINUTE: [
+          {
+            required: true,
+            validator: validateOutFreezeTimeFaceVerifyEndMinute,
+            trigger: "blur"
+          }
+        ],
         LIVING_WARN_THRESHOLD: [
           {
             required: true,
@@ -1079,6 +1227,7 @@ export default {
         this.form.properties.IS_STRANGER_ENABLE = "false";
         this.form.properties.IS_FACE_CHECK = "false";
         this.form.properties.IS_FACE_VERIFY = "false";
+        this.form.properties.ADD_FACE_VERIFY_OUT_FREEZE_TIME = "false";
       }
     },
     init() {
@@ -1137,6 +1286,7 @@ export default {
           this.form.properties.IS_STRANGER_ENABLE = "false";
           this.form.properties.IS_FACE_CHECK = "false";
           this.form.properties.IS_FACE_VERIFY = "false";
+          this.form.properties.ADD_FACE_VERIFY_OUT_FREEZE_TIME = "false";
           this.is_face_enable_diabled = true;
         } else {
           this.is_face_enable_diabled = false;
@@ -1144,6 +1294,7 @@ export default {
         if (!res.IDENTIFICATION_OF_LIVING_BODY) {
           this.is_face_verify_diabled = true;
           this.form.properties.IS_FACE_VERIFY = "false";
+          this.form.properties.ADD_FACE_VERIFY_OUT_FREEZE_TIME = "false";
         } else {
           this.is_face_verify_diabled = false;
         }
@@ -1158,6 +1309,18 @@ export default {
           this.form.properties.WEIXIN_ANSWER_ENABLED = false;
         }
       });
+      this.getOrgProperty("IDENTIFICATION_OF_LIVING_BODY_SCHEME", function(
+        res
+      ) {
+        this.form.properties.IDENTIFICATION_OF_LIVING_BODY_SCHEME = res;
+      });
+    },
+    getOrgProperty: function(propkey, callback) {
+      let url = CORE_API + "/org/property/" + this.rootOrgId + "/" + propkey;
+      this.$httpWithMsg.get(url).then(response => {
+        let res = response.data;
+        callback(res);
+      });
     },
     saveExam: function() {
       this.toActiveName = null;

+ 70 - 68
src/modules/examwork/view/student.vue

@@ -21,8 +21,7 @@
                 :label="item.name"
                 :value="item.id"
                 :key="item.id"
-              >
-              </el-option>
+              ></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="姓名">
@@ -63,15 +62,14 @@
                 :label="item.name + ' - ' + item.code"
                 :value="item.id"
                 :key="item.id"
-              >
-              </el-option>
+              ></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="照片状态">
             <el-select v-model="formSearch.hasPhoto" class="input">
-              <el-option label="未选择" value="UNDEFINED"> </el-option>
-              <el-option label="已上传" value="TRUE"> </el-option>
-              <el-option label="未上传" value="FALSE"> </el-option>
+              <el-option label="未选择" value="UNDEFINED"></el-option>
+              <el-option label="已上传" value="TRUE"></el-option>
+              <el-option label="未上传" value="FALSE"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item class="d-block">
@@ -81,31 +79,29 @@
               type="primary"
               icon="el-icon-search"
               @click="resetPageAndSearchForm"
-              >查询
-            </el-button>
+              >查询</el-button
+            >
             <el-button
               size="small"
               icon="el-icon-refresh"
               @click="resetSearchForm"
+              >重置</el-button
             >
-              重置
-            </el-button>
             <el-button
               v-if="rolePrivileges.upload_student_photo"
               size="small"
               type="primary"
               icon="el-icon-upload2"
               @click="uploadPhoto"
-              >上传照片
-            </el-button>
+              >上传照片</el-button
+            >
             <el-button
               size="small"
               type="primary"
               icon="el-icon-download"
               @click="exportStudent"
+              >导出</el-button
             >
-              导出
-            </el-button>
           </el-form-item>
         </el-form>
 
@@ -119,8 +115,8 @@
           icon="el-icon-refresh"
           :disabled="noBatchSelected"
           @click="resetPassword('')"
-          >重置密码
-        </el-button>
+          >重置密码</el-button
+        >
         <el-button
           v-if="rolePrivileges.change_student_availability"
           size="small"
@@ -128,8 +124,8 @@
           icon="el-icon-check"
           :disabled="noBatchSelected"
           @click="enableStudent('')"
-          >启用
-        </el-button>
+          >启用</el-button
+        >
         <el-button
           v-if="rolePrivileges.change_student_availability"
           size="small"
@@ -137,17 +133,16 @@
           icon="el-icon-close"
           :disabled="noBatchSelected"
           @click="disableStudent('')"
+          >禁用</el-button
         >
-          禁用
-        </el-button>
         <el-button
           v-if="rolePrivileges.reset_student_password"
           size="small"
           type="danger"
           icon="el-icon-refresh"
           @click="resetPasswordByOrgId()"
-          >重置学习中心所有学生密码
-        </el-button>
+          >重置学习中心所有学生密码</el-button
+        >
 
         <div style="width: 100%;margin-bottom: 10px;"></div>
 
@@ -181,8 +176,7 @@
                   :label="item.name + ' - ' + item.code"
                   :value="item.id"
                   :key="item.id"
-                >
-                </el-option>
+                ></el-option>
               </el-select>
             </el-form-item>
           </el-form>
@@ -271,17 +265,17 @@
             </template>
           </el-table-column>
           <el-table-column label="学号">
-            <span slot-scope="scope" v-html="scope.row.studentCodesStr"> </span>
+            <span slot-scope="scope" v-html="scope.row.studentCodesStr"></span>
           </el-table-column>
           <el-table-column
             prop="identityNumber"
-            width=""
+            width
             label="身份证"
             sortable
           ></el-table-column>
           <el-table-column
             prop="orgName"
-            width=""
+            width
             label="学习中心"
             sortable
           ></el-table-column>
@@ -324,8 +318,8 @@
                 plain
                 icon="el-icon-picture"
                 @click="showPhoto(scope.row)"
-                >查看照片
-              </el-button>
+                >查看照片</el-button
+              >
               <el-button
                 v-if="
                   null != scope.row.enable &&
@@ -337,20 +331,21 @@
                 plain
                 icon="el-icon-check"
                 @click="enableStudent(scope.row)"
-                >启用
-              </el-button>
+                >启用</el-button
+              >
               <el-button
                 v-else-if="rolePrivileges.change_student_availability"
                 size="mini"
                 type="danger"
                 icon="el-icon-close"
                 @click="disableStudent(scope.row)"
-                >禁用
-              </el-button>
+                >禁用</el-button
+              >
 
               <el-dropdown style="margin-left: 10px;">
                 <el-button type="primary" plain size="mini">
-                  更多<i class="el-icon-arrow-down el-icon--right"></i>
+                  更多
+                  <i class="el-icon-arrow-down el-icon--right"></i>
                 </el-button>
                 <el-dropdown-menu slot="dropdown">
                   <el-dropdown-item
@@ -361,8 +356,8 @@
                       type="danger"
                       icon="el-icon-refresh"
                       @click="resetPassword(scope.row)"
-                      >重置密码
-                    </el-button>
+                      >重置密码</el-button
+                    >
                   </el-dropdown-item>
                   <el-dropdown-item>
                     <el-button
@@ -370,8 +365,8 @@
                       type="primary"
                       icon="el-icon-document"
                       @click="showStuExamDialog(scope.row)"
-                      >考试记录
-                    </el-button>
+                      >考试记录</el-button
+                    >
                   </el-dropdown-item>
                   <el-dropdown-item v-if="rolePrivileges.unbind_student_code">
                     <el-button
@@ -379,8 +374,8 @@
                       type="danger"
                       icon="el-icon-refresh"
                       @click="showUnbindStudentCode(scope.row)"
-                      >解绑学号
-                    </el-button>
+                      >解绑学号</el-button
+                    >
                   </el-dropdown-item>
                   <el-dropdown-item v-if="rolePrivileges.unbind_security_phone">
                     <el-button
@@ -388,8 +383,8 @@
                       type="danger"
                       icon="el-icon-refresh"
                       @click="unbindSecurityPhone(scope.row)"
-                      >解绑安全手机
-                    </el-button>
+                      >解绑安全手机</el-button
+                    >
                   </el-dropdown-item>
                 </el-dropdown-menu>
               </el-dropdown>
@@ -405,8 +400,7 @@
             @size-change="handleSizeChange"
             layout="total, sizes, prev, pager, next, jumper"
             :total="total"
-          >
-          </el-pagination>
+          ></el-pagination>
         </div>
 
         <!-- 解绑学号-->
@@ -430,8 +424,8 @@
                   type="danger"
                   @click="unbindStudentCode(scope.row)"
                   icon="el-icon-delete"
-                  >解绑
-                </el-button>
+                  >解绑</el-button
+                >
               </div>
             </el-table-column>
           </el-table>
@@ -467,8 +461,7 @@
                   :label="item.name"
                   :value="item.id"
                   :key="item.id"
-                >
-                </el-option>
+                ></el-option>
               </el-select>
             </el-form-item>
             <el-form-item class="pull-left">
@@ -477,8 +470,8 @@
                 type="primary"
                 icon="el-icon-search"
                 @click="searchStuExam"
-                >查询
-              </el-button>
+                >查询</el-button
+              >
             </el-form-item>
           </el-form>
 
@@ -487,15 +480,25 @@
             border
             style="width: 100%;text-align:center;"
           >
-            <el-table-column prop="studentName" label="学生姓名">
-            </el-table-column>
-            <el-table-column prop="studentCode" label="学号"> </el-table-column>
-            <el-table-column prop="identityNumber" label="身份证">
-            </el-table-column>
-            <el-table-column prop="examName" label="考试" sortable>
-            </el-table-column>
-            <el-table-column prop="courseName" label="课程" sortable>
-            </el-table-column>
+            <el-table-column
+              prop="studentName"
+              label="学生姓名"
+            ></el-table-column>
+            <el-table-column prop="studentCode" label="学号"></el-table-column>
+            <el-table-column
+              prop="identityNumber"
+              label="身份证"
+            ></el-table-column>
+            <el-table-column
+              prop="examName"
+              label="考试"
+              sortable
+            ></el-table-column>
+            <el-table-column
+              prop="courseName"
+              label="课程"
+              sortable
+            ></el-table-column>
             <el-table-column width="130" label="考试状态">
               <div slot-scope="scope">
                 <span v-if="null == scope.row.started"></span>
@@ -513,8 +516,7 @@
               @size-change="handleStuExamSizeChange"
               layout="total, sizes, prev, pager, next, jumper"
               :total="stuExamTotal"
-            >
-            </el-pagination>
+            ></el-pagination>
           </div>
           <div style="margin-top: 10px;"></div>
         </el-dialog>
@@ -548,16 +550,16 @@
                     slot="trigger"
                     type="primary"
                     icon="el-icon-search"
-                    >选择文件
-                  </el-button>
+                    >选择文件</el-button
+                  >
                   <el-button
                     size="small"
                     style="margin-left:10px;"
                     type="primary"
                     icon="el-icon-check"
                     @click="submitUpload"
-                    >确认上传
-                  </el-button>
+                    >确认上传</el-button
+                  >
                   <div slot="tip" class="el-upload__tip">
                     只能上传jpg,png文件
                   </div>
@@ -1162,7 +1164,7 @@ export default {
       }
 
       if (this.pureLC) {
-        var url = CORE_API + "/user/" + this.user.userId;
+        let url = CORE_API + "/user/" + this.user.userId;
         this.$httpWithMsg.get(url).then(response => {
           var userInfo = response.data;
           this.lc_id = userInfo.orgId;
@@ -1175,7 +1177,7 @@ export default {
         });
       }
 
-      var url = CORE_API + "/org/getRootOrgList";
+      let url = CORE_API + "/org/getRootOrgList";
 
       this.$httpWithMsg.get(url).then(response => {
         this.rootOrgList = response.data;