Просмотр исходного кода

add school config:ALL_ACTION_DURATION,FACE_API_PROVIDER,BAIDU_EXPECT_FACE_COMPARE_SCORE

deason 2 лет назад
Родитель
Сommit
d1692fa72c
1 измененных файлов с 158 добавлено и 73 удалено
  1. 158 73
      src/modules/basic/view/school_config.vue

+ 158 - 73
src/modules/basic/view/school_config.vue

@@ -24,6 +24,7 @@
             />
           </el-select>
         </el-form-item>
+
         <el-form-item
           label="使用第三方登录"
           prop="STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY"
@@ -34,6 +35,7 @@
             off-text="否"
           ></el-switch>
         </el-form-item>
+
         <el-form-item
           label="第三方登录页地址"
           prop="STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL"
@@ -45,6 +47,7 @@
             class="input-width"
           ></el-input>
         </el-form-item>
+
         <el-form-item label="展示我司logo" prop="SHOW_QMTH_LOGO">
           <el-switch
             v-model="ruleForm.SHOW_QMTH_LOGO"
@@ -52,6 +55,7 @@
             off-text="否"
           ></el-switch>
         </el-form-item>
+
         <el-form-item label="证件号隐私模式" prop="ID_NUMBER_PRIVATE_MODE">
           <el-switch
             v-model="ruleForm.ID_NUMBER_PRIVATE_MODE"
@@ -59,6 +63,7 @@
             off-text="否"
           ></el-switch>
         </el-form-item>
+
         <el-form-item
           label="展示APP下载二维码"
           prop="SHOW_STUDENT_CLIENT_APP_QRCODE"
@@ -69,6 +74,7 @@
             off-text="否"
           ></el-switch>
         </el-form-item>
+
         <el-form-item label="开放APP" prop="APP_ENABLED">
           <el-switch
             v-model="ruleForm.APP_ENABLED"
@@ -76,6 +82,7 @@
             off-text="否"
           ></el-switch>
         </el-form-item>
+
         <el-form-item label="开放微信小程序作答" prop="WEIXIN_ANSWER_ENABLED">
           <el-switch
             v-model="ruleForm.WEIXIN_ANSWER_ENABLED"
@@ -83,6 +90,16 @@
             off-text="否"
           ></el-switch>
         </el-form-item>
+
+        <el-form-item label="启用C端考生端" prop="PC_CLIENT_ENABLED">
+          <el-switch
+            v-model="ruleForm.PC_CLIENT_ENABLED"
+            on-text="是"
+            off-text="否"
+            :disabled="false"
+          ></el-switch>
+        </el-form-item>
+
         <el-form-item
           label="活体检测方案"
           prop="IDENTIFICATION_OF_LIVING_BODY_SCHEME"
@@ -92,9 +109,9 @@
             class="input"
           >
             <el-radio label="S1" :disabled="ruleForm.PC_CLIENT_ENABLED"
-              >FaceID</el-radio
+              >标准活体</el-radio
             >
-            <el-radio label="S2" :disabled="ruleForm.PC_CLIENT_ENABLED"
+            <el-radio label="S2" hidden :disabled="ruleForm.PC_CLIENT_ENABLED"
               >自研活体</el-radio
             >
             <el-radio label="S3" :disabled="!ruleForm.PC_CLIENT_ENABLED"
@@ -103,16 +120,28 @@
           </el-radio-group>
         </el-form-item>
 
-        <el-form-item label="启用C端考生端" prop="PC_CLIENT_ENABLED">
-          <el-switch
-            v-model="ruleForm.PC_CLIENT_ENABLED"
-            on-text="是"
-            off-text="否"
-            :disabled="false"
-          ></el-switch>
-        </el-form-item>
+        <div v-show="ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME !== 'S3'">
+          <el-form-item label="标准活体API" prop="FACE_API_PROVIDER">
+            <el-radio-group v-model="ruleForm.FACE_API_PROVIDER" class="input">
+              <el-radio label="FACEPP">旷视</el-radio>
+              <el-radio label="BAIDU">百度</el-radio>
+            </el-radio-group>
+          </el-form-item>
 
-        <div v-if="ruleForm.PC_CLIENT_ENABLED">
+          <el-form-item
+            label="百度人脸比对通过阈值"
+            prop="BAIDU_EXPECT_FACE_COMPARE_SCORE"
+          >
+            <el-input
+              v-model="ruleForm.BAIDU_EXPECT_FACE_COMPARE_SCORE"
+              :disabled="ruleForm.FACE_API_PROVIDER !== 'BAIDU'"
+              style="width: 180px"
+            ></el-input>
+            <span style="font-size: 14px; line-height: 44px"></span>
+          </el-form-item>
+        </div>
+
+        <div v-show="ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME === 'S3'">
           <el-form-item label="指定动作检测提醒" prop="ACTION_ALERT">
             <el-input
               v-model="ruleForm.ACTION_ALERT"
@@ -158,6 +187,13 @@
             ></el-input>
             <span style="font-size: 14px; line-height: 44px"> 秒</span>
           </el-form-item>
+          <el-form-item label="活体总时长限制" prop="ALL_ACTION_DURATION">
+            <el-input
+              v-model="ruleForm.ALL_ACTION_DURATION"
+              style="width: 180px"
+            ></el-input>
+            <span style="font-size: 14px; line-height: 44px"> 秒</span>
+          </el-form-item>
         </div>
 
         <el-form-item>
@@ -204,8 +240,7 @@ export default {
     };
 
     let checkActionOptions = (rule, value, callback) => {
-      let pcClientEnabled = this.ruleForm.PC_CLIENT_ENABLED;
-      if (pcClientEnabled) {
+      if (this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME === "S3") {
         if (this.ruleForm.ACTION_NUM != this.ruleForm.ACTION_OPTIONS.length) {
           return callback(new Error("动作个数与动作选项数量不一致"));
         }
@@ -214,11 +249,20 @@ export default {
     };
 
     let checkDuration = (rule, value, callback) => {
-      let pcClientEnabled = this.ruleForm.PC_CLIENT_ENABLED;
-      if (pcClientEnabled) {
+      if (this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME === "S3") {
         let reg = /^[1-9][0-9]*$/;
-        if (!new String(value).match(reg) || value < 5 || value > 20) {
-          return callback(new Error("范围5至20之间"));
+        if (!new String(value).match(reg) || value < 1 || value > 200) {
+          return callback(new Error("范围1至200之间"));
+        }
+      }
+      callback();
+    };
+
+    let checkFaceScore = (rule, value, callback) => {
+      if (this.ruleForm.FACE_API_PROVIDER === "BAIDU") {
+        let reg = /^[1-9][0-9]*$/;
+        if (!new String(value).match(reg) || value < 50 || value > 90) {
+          return callback(new Error("范围50至90之间"));
         }
       }
       callback();
@@ -228,25 +272,28 @@ export default {
       actionOptions: ACTION_OPTION_LIST,
       rootOrgList: [],
       propertyGroupId: "",
-      formDataChanged: false,
+      btnSaveDiabled: false,
       originalRuleForm: {},
       ruleForm: {
         relatedPropertyGroupIdList: [],
         orgId: null,
         STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY: false,
-        SHOW_STUDENT_CLIENT_APP_QRCODE: false,
         STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL: "",
         SHOW_QMTH_LOGO: false,
         ID_NUMBER_PRIVATE_MODE: false,
+        SHOW_STUDENT_CLIENT_APP_QRCODE: false,
         APP_ENABLED: false,
         WEIXIN_ANSWER_ENABLED: false,
-        IDENTIFICATION_OF_LIVING_BODY_SCHEME: "",
         PC_CLIENT_ENABLED: false,
+        IDENTIFICATION_OF_LIVING_BODY_SCHEME: "S1",
+        FACE_API_PROVIDER: "FACEPP",
+        BAIDU_EXPECT_FACE_COMPARE_SCORE: 70,
         ACTION_ALERT: "",
         ACTION_NUM: "",
         ACTION_OPTIONS: [],
         ACTION_ORDER: "",
         ACTION_DURATION: "",
+        ALL_ACTION_DURATION: "",
       },
       rules: {
         STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL: [
@@ -281,17 +328,27 @@ export default {
             trigger: "blur",
           },
         ],
+        ALL_ACTION_DURATION: [
+          { required: true, message: " ", trigger: "blur" },
+          {
+            validator: checkDuration,
+            trigger: "blur",
+          },
+        ],
+        BAIDU_EXPECT_FACE_COMPARE_SCORE: [
+          { required: true, message: " ", trigger: "blur" },
+          {
+            validator: checkFaceScore,
+            trigger: "blur",
+          },
+        ],
       },
     };
   },
   computed: {
     ...mapState({ user: (state) => state.user }),
-    btnSaveDiabled() {
-      console.log(this.formDataChanged);
-      return !this.formDataChanged;
-    },
     isSuperAdmin() {
-      return this.user.roleList.some((role) => role.roleCode == "SUPER_ADMIN");
+      return this.user.roleList.some((role) => role.roleCode === "SUPER_ADMIN");
     },
     rootSchoolSelect() {
       let rootSchools = [];
@@ -319,37 +376,14 @@ export default {
         }
       },
     },
-    ruleForm: {
+    /*ruleForm: {
       deep: true,
       handler: function (newForm) {
         if (Object.keys(this.originalRuleForm).length > 0) {
-          this.formDataChanged = !(
-            newForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY ==
-              this.originalRuleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY &&
-            newForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL ==
-              this.originalRuleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL &&
-            newForm.SHOW_QMTH_LOGO == this.originalRuleForm.SHOW_QMTH_LOGO &&
-            newForm.ID_NUMBER_PRIVATE_MODE ==
-              this.originalRuleForm.ID_NUMBER_PRIVATE_MODE &&
-            newForm.APP_ENABLED == this.originalRuleForm.APP_ENABLED &&
-            newForm.WEIXIN_ANSWER_ENABLED ==
-              this.originalRuleForm.WEIXIN_ANSWER_ENABLED &&
-            newForm.SHOW_STUDENT_CLIENT_APP_QRCODE ==
-              this.originalRuleForm.SHOW_STUDENT_CLIENT_APP_QRCODE &&
-            newForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME ==
-              this.originalRuleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME &&
-            newForm.PC_CLIENT_ENABLED ==
-              this.originalRuleForm.PC_CLIENT_ENABLED &&
-            newForm.ACTION_ALERT == this.originalRuleForm.ACTION_ALERT &&
-            newForm.ACTION_OPTIONS == this.originalRuleForm.ACTION_OPTIONS &&
-            newForm.ACTION_ORDER == this.originalRuleForm.ACTION_ORDER &&
-            newForm.ACTION_DURATION == this.originalRuleForm.ACTION_DURATION
-          );
-        } else {
-          this.formDataChanged = false;
+
         }
       },
-    },
+    },*/
   },
   created() {
     this.ruleForm.orgId = this.user.rootOrgId;
@@ -367,33 +401,46 @@ export default {
     submitForm(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
+          this.btnSaveDiabled = true;
+
           let params = {
             orgId: null,
             relatedPropertyGroupIdList: [],
             properties: {},
           };
+
           params.orgId = this.ruleForm.orgId;
+
           params.relatedPropertyGroupIdList =
             this.ruleForm.relatedPropertyGroupIdList;
 
           params.properties.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY =
             this.ruleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY;
+
           params.properties.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL =
             this.ruleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL;
+
           params.properties.SHOW_QMTH_LOGO = this.ruleForm.SHOW_QMTH_LOGO;
+
           params.properties.ID_NUMBER_PRIVATE_MODE =
             this.ruleForm.ID_NUMBER_PRIVATE_MODE;
+
+          params.properties.SHOW_STUDENT_CLIENT_APP_QRCODE =
+            this.ruleForm.SHOW_STUDENT_CLIENT_APP_QRCODE;
+
           params.properties.APP_ENABLED = this.ruleForm.APP_ENABLED;
+
           params.properties.WEIXIN_ANSWER_ENABLED =
             this.ruleForm.WEIXIN_ANSWER_ENABLED;
-          params.properties.SHOW_STUDENT_CLIENT_APP_QRCODE =
-            this.ruleForm.SHOW_STUDENT_CLIENT_APP_QRCODE;
+
+          params.properties.PC_CLIENT_ENABLED = this.ruleForm.PC_CLIENT_ENABLED;
+
           params.properties.IDENTIFICATION_OF_LIVING_BODY_SCHEME =
             this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME;
-          params.properties.PC_CLIENT_ENABLED = this.ruleForm.PC_CLIENT_ENABLED;
 
-          if (params.properties.PC_CLIENT_ENABLED) {
+          if (this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME === "S3") {
             params.properties.ACTION_ALERT = this.ruleForm.ACTION_ALERT;
+
             params.properties.ACTION_NUM = this.ruleForm.ACTION_NUM;
 
             // 固定动作顺序
@@ -407,7 +454,17 @@ export default {
             params.properties.ACTION_OPTIONS = finalActionOptions.join(",");
 
             params.properties.ACTION_ORDER = this.ruleForm.ACTION_ORDER;
+
             params.properties.ACTION_DURATION = this.ruleForm.ACTION_DURATION;
+
+            params.properties.ALL_ACTION_DURATION =
+              this.ruleForm.ALL_ACTION_DURATION;
+          } else {
+            params.properties.FACE_API_PROVIDER =
+              this.ruleForm.FACE_API_PROVIDER;
+
+            params.properties.BAIDU_EXPECT_FACE_COMPARE_SCORE =
+              this.ruleForm.BAIDU_EXPECT_FACE_COMPARE_SCORE;
           }
 
           this.$httpWithMsg
@@ -418,10 +475,12 @@ export default {
                   message: "保存成功",
                   type: "success",
                 });
-                this.originalRuleForm = Object.assign({}, this.ruleForm);
-                this.formDataChanged = false;
+                this.btnSaveDiabled = false;
+                // this.originalRuleForm = Object.assign({}, this.ruleForm);
               },
-              () => {}
+              () => {
+                this.btnSaveDiabled = false;
+              }
             );
         } else {
           return false;
@@ -441,35 +500,54 @@ export default {
       this.$httpWithMsg.get(url).then((response) => {
         if (response) {
           this.ruleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY =
-            response.data.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY == "true";
+            response.data.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY === "true";
 
           this.ruleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL =
             response.data.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL;
 
-          this.ruleForm.SHOW_QMTH_LOGO = response.data.SHOW_QMTH_LOGO == "true";
+          this.ruleForm.SHOW_QMTH_LOGO =
+            response.data.SHOW_QMTH_LOGO === "true";
 
           this.ruleForm.ID_NUMBER_PRIVATE_MODE =
-            response.data.ID_NUMBER_PRIVATE_MODE == "true";
-
-          this.ruleForm.APP_ENABLED = response.data.APP_ENABLED == "true";
-
-          this.ruleForm.WEIXIN_ANSWER_ENABLED =
-            response.data.WEIXIN_ANSWER_ENABLED == "true";
+            response.data.ID_NUMBER_PRIVATE_MODE === "true";
 
           this.ruleForm.SHOW_STUDENT_CLIENT_APP_QRCODE =
-            response.data.SHOW_STUDENT_CLIENT_APP_QRCODE == "true";
+            response.data.SHOW_STUDENT_CLIENT_APP_QRCODE === "true";
+
+          this.ruleForm.APP_ENABLED = response.data.APP_ENABLED === "true";
 
-          this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME =
-            response.data.IDENTIFICATION_OF_LIVING_BODY_SCHEME;
+          this.ruleForm.WEIXIN_ANSWER_ENABLED =
+            response.data.WEIXIN_ANSWER_ENABLED === "true";
 
           // 未配置时,赋默认值
           this.ruleForm.PC_CLIENT_ENABLED =
-            "true" == response.data.PC_CLIENT_ENABLED;
+            response.data.PC_CLIENT_ENABLED === "true";
+
+          if (response.data.IDENTIFICATION_OF_LIVING_BODY_SCHEME) {
+            this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME =
+              response.data.IDENTIFICATION_OF_LIVING_BODY_SCHEME;
+          } else {
+            this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME = "S1";
+          }
+
+          if (response.data.FACE_API_PROVIDER) {
+            this.ruleForm.FACE_API_PROVIDER = response.data.FACE_API_PROVIDER;
+          } else {
+            // BAIDU、FACEPP
+            this.ruleForm.FACE_API_PROVIDER = "FACEPP";
+          }
+
+          if (response.data.BAIDU_EXPECT_FACE_COMPARE_SCORE) {
+            this.ruleForm.BAIDU_EXPECT_FACE_COMPARE_SCORE =
+              response.data.BAIDU_EXPECT_FACE_COMPARE_SCORE;
+          } else {
+            this.ruleForm.BAIDU_EXPECT_FACE_COMPARE_SCORE = 70;
+          }
 
           if (response.data.ACTION_ALERT) {
             this.ruleForm.ACTION_ALERT = response.data.ACTION_ALERT;
           } else {
-            this.ruleForm.ACTION_ALERT = 15;
+            this.ruleForm.ACTION_ALERT = 5;
           }
 
           if (response.data.ACTION_NUM) {
@@ -494,10 +572,17 @@ export default {
           if (response.data.ACTION_DURATION) {
             this.ruleForm.ACTION_DURATION = response.data.ACTION_DURATION;
           } else {
-            this.ruleForm.ACTION_DURATION = 15;
+            this.ruleForm.ACTION_DURATION = 10;
+          }
+
+          if (response.data.ALL_ACTION_DURATION) {
+            this.ruleForm.ALL_ACTION_DURATION =
+              response.data.ALL_ACTION_DURATION;
+          } else {
+            this.ruleForm.ALL_ACTION_DURATION = 120;
           }
 
-          this.originalRuleForm = Object.assign({}, this.ruleForm);
+          // this.originalRuleForm = Object.assign({}, this.ruleForm);
         } else {
           this.$notify({
             message: "学校设置信息暂未初始化,请立即初始化",