|
@@ -91,10 +91,75 @@
|
|
|
v-model="ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME"
|
|
|
class="input"
|
|
|
>
|
|
|
- <el-radio label="S1">faceID</el-radio>
|
|
|
- <el-radio label="S2">自研活体</el-radio>
|
|
|
+ <el-radio label="S1" :disabled="ruleForm.PC_CLIENT_ENABLED"
|
|
|
+ >FaceID</el-radio
|
|
|
+ >
|
|
|
+ <el-radio label="S2" :disabled="ruleForm.PC_CLIENT_ENABLED"
|
|
|
+ >自研活体</el-radio
|
|
|
+ >
|
|
|
+ <el-radio label="S3" :disabled="!ruleForm.PC_CLIENT_ENABLED"
|
|
|
+ >C端活体</el-radio
|
|
|
+ >
|
|
|
</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-if="ruleForm.PC_CLIENT_ENABLED">
|
|
|
+ <el-form-item label="指定动作检测提醒" prop="ACTION_ALERT">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.ACTION_ALERT"
|
|
|
+ style="width: 180px"
|
|
|
+ ></el-input>
|
|
|
+ <span style="font-size: 14px; line-height: 44px">
|
|
|
+ 秒后开始检测</span
|
|
|
+ >
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="动作个数" prop="ACTION_NUM">
|
|
|
+ <el-select v-model="ruleForm.ACTION_NUM" style="width: 180px">
|
|
|
+ <el-option label="1" value="1"></el-option>
|
|
|
+ <el-option label="2" value="2"></el-option>
|
|
|
+ <el-option label="3" value="3"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="动作选项" prop="ACTION_OPTIONS">
|
|
|
+ <el-checkbox-group v-model="ruleForm.ACTION_OPTIONS">
|
|
|
+ <el-checkbox
|
|
|
+ v-for="opt in actionOptions"
|
|
|
+ :key="opt.code"
|
|
|
+ v-model="opt.code"
|
|
|
+ name="ACTION_OPTION"
|
|
|
+ :label="opt.code"
|
|
|
+ >{{ opt.name }}</el-checkbox
|
|
|
+ >
|
|
|
+ </el-checkbox-group>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="动作顺序" prop="ACTION_ORDER">
|
|
|
+ <el-radio-group v-model="ruleForm.ACTION_ORDER" class="input">
|
|
|
+ <el-radio label="RANDOM">随机</el-radio>
|
|
|
+ <el-radio label="FIXED">固定</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="单个动作最大时长" prop="ACTION_DURATION">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.ACTION_DURATION"
|
|
|
+ style="width: 180px"
|
|
|
+ ></el-input>
|
|
|
+ <span style="font-size: 14px; line-height: 44px"> 秒</span>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+
|
|
|
<el-form-item>
|
|
|
<el-button
|
|
|
:disabled="btnSaveDiabled"
|
|
@@ -109,7 +174,7 @@
|
|
|
</template>
|
|
|
<script>
|
|
|
import { mapState } from "vuex";
|
|
|
-import { CORE_API } from "@/constants/constants.js";
|
|
|
+import { ACTION_OPTION_LIST, CORE_API } from "@/constants/constants.js";
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
@@ -124,7 +189,43 @@ export default {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
+ let checkFaceType = (rule, value, callback) => {
|
|
|
+ if (this.ruleForm.PC_CLIENT_ENABLED) {
|
|
|
+ if (value != "S3") {
|
|
|
+ return callback(new Error("请选择可用的 “活体检测方案”"));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (value == "S3") {
|
|
|
+ return callback(new Error("请选择可用的 “活体检测方案”"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ };
|
|
|
+
|
|
|
+ let checkActionOptions = (rule, value, callback) => {
|
|
|
+ let pcClientEnabled = this.ruleForm.PC_CLIENT_ENABLED;
|
|
|
+ if (pcClientEnabled) {
|
|
|
+ if (this.ruleForm.ACTION_NUM != this.ruleForm.ACTION_OPTIONS.length) {
|
|
|
+ return callback(new Error("动作个数与动作选项数量不一致"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ };
|
|
|
+
|
|
|
+ let checkDuration = (rule, value, callback) => {
|
|
|
+ let pcClientEnabled = this.ruleForm.PC_CLIENT_ENABLED;
|
|
|
+ if (pcClientEnabled) {
|
|
|
+ let reg = /^[1-9][0-9]*$/;
|
|
|
+ if (!value.match(reg) || value < 5 || value > 20) {
|
|
|
+ return callback(new Error("范围5至20之间"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ };
|
|
|
+
|
|
|
return {
|
|
|
+ actionOptions: ACTION_OPTION_LIST,
|
|
|
rootOrgList: [],
|
|
|
propertyGroupId: "",
|
|
|
formDataChanged: false,
|
|
@@ -140,16 +241,12 @@ export default {
|
|
|
APP_ENABLED: false,
|
|
|
WEIXIN_ANSWER_ENABLED: false,
|
|
|
IDENTIFICATION_OF_LIVING_BODY_SCHEME: "",
|
|
|
- properties: {
|
|
|
- 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,
|
|
|
- APP_ENABLED: false,
|
|
|
- WEIXIN_ANSWER_ENABLED: false,
|
|
|
- IDENTIFICATION_OF_LIVING_BODY_SCHEME: "",
|
|
|
- },
|
|
|
+ PC_CLIENT_ENABLED: false,
|
|
|
+ ACTION_ALERT: "",
|
|
|
+ ACTION_NUM: "",
|
|
|
+ ACTION_OPTIONS: [],
|
|
|
+ ACTION_ORDER: "",
|
|
|
+ ACTION_DURATION: "",
|
|
|
},
|
|
|
rules: {
|
|
|
STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL: [
|
|
@@ -158,6 +255,32 @@ export default {
|
|
|
trigger: "change",
|
|
|
},
|
|
|
],
|
|
|
+ IDENTIFICATION_OF_LIVING_BODY_SCHEME: [
|
|
|
+ {
|
|
|
+ validator: checkFaceType,
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ ACTION_OPTIONS: [
|
|
|
+ {
|
|
|
+ validator: checkActionOptions,
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ ACTION_ALERT: [
|
|
|
+ { required: true, message: " ", trigger: "blur" },
|
|
|
+ {
|
|
|
+ validator: checkDuration,
|
|
|
+ trigger: "blur",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ ACTION_DURATION: [
|
|
|
+ { required: true, message: " ", trigger: "blur" },
|
|
|
+ {
|
|
|
+ validator: checkDuration,
|
|
|
+ trigger: "blur",
|
|
|
+ },
|
|
|
+ ],
|
|
|
},
|
|
|
};
|
|
|
},
|
|
@@ -214,7 +337,13 @@ export default {
|
|
|
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
|
|
|
+ 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;
|
|
@@ -238,24 +367,42 @@ export default {
|
|
|
submitForm(formName) {
|
|
|
this.$refs[formName].validate((valid) => {
|
|
|
if (valid) {
|
|
|
- this.ruleForm.properties.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY =
|
|
|
+ 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;
|
|
|
- this.ruleForm.properties.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL =
|
|
|
+ params.properties.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL =
|
|
|
this.ruleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL;
|
|
|
- this.ruleForm.properties.SHOW_QMTH_LOGO =
|
|
|
- this.ruleForm.SHOW_QMTH_LOGO;
|
|
|
- this.ruleForm.properties.ID_NUMBER_PRIVATE_MODE =
|
|
|
+ params.properties.SHOW_QMTH_LOGO = this.ruleForm.SHOW_QMTH_LOGO;
|
|
|
+ params.properties.ID_NUMBER_PRIVATE_MODE =
|
|
|
this.ruleForm.ID_NUMBER_PRIVATE_MODE;
|
|
|
- this.ruleForm.properties.APP_ENABLED = this.ruleForm.APP_ENABLED;
|
|
|
- this.ruleForm.properties.WEIXIN_ANSWER_ENABLED =
|
|
|
+ params.properties.APP_ENABLED = this.ruleForm.APP_ENABLED;
|
|
|
+ params.properties.WEIXIN_ANSWER_ENABLED =
|
|
|
this.ruleForm.WEIXIN_ANSWER_ENABLED;
|
|
|
- this.ruleForm.properties.SHOW_STUDENT_CLIENT_APP_QRCODE =
|
|
|
+ params.properties.SHOW_STUDENT_CLIENT_APP_QRCODE =
|
|
|
this.ruleForm.SHOW_STUDENT_CLIENT_APP_QRCODE;
|
|
|
- this.ruleForm.properties.IDENTIFICATION_OF_LIVING_BODY_SCHEME =
|
|
|
+ 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) {
|
|
|
+ params.properties.ACTION_ALERT = this.ruleForm.ACTION_ALERT;
|
|
|
+ params.properties.ACTION_NUM = this.ruleForm.ACTION_NUM;
|
|
|
+ params.properties.ACTION_OPTIONS =
|
|
|
+ this.ruleForm.ACTION_OPTIONS.join(",");
|
|
|
+ params.properties.ACTION_ORDER = this.ruleForm.ACTION_ORDER;
|
|
|
+ params.properties.ACTION_DURATION = this.ruleForm.ACTION_DURATION;
|
|
|
+ }
|
|
|
|
|
|
this.$httpWithMsg
|
|
|
- .put(CORE_API + "/org/saveOrgProperties", this.ruleForm)
|
|
|
+ .put(CORE_API + "/org/saveOrgProperties", params)
|
|
|
.then(
|
|
|
() => {
|
|
|
this.$notify({
|
|
@@ -281,24 +428,66 @@ export default {
|
|
|
this.ruleForm.orgId +
|
|
|
"/" +
|
|
|
this.propertyGroupId;
|
|
|
+
|
|
|
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";
|
|
|
+
|
|
|
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.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";
|
|
|
+
|
|
|
this.ruleForm.SHOW_STUDENT_CLIENT_APP_QRCODE =
|
|
|
response.data.SHOW_STUDENT_CLIENT_APP_QRCODE == "true";
|
|
|
+
|
|
|
this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME =
|
|
|
response.data.IDENTIFICATION_OF_LIVING_BODY_SCHEME;
|
|
|
|
|
|
+ // 未配置时,赋默认值
|
|
|
+ this.ruleForm.PC_CLIENT_ENABLED =
|
|
|
+ "true" == response.data.PC_CLIENT_ENABLED;
|
|
|
+
|
|
|
+ if (response.data.ACTION_ALERT) {
|
|
|
+ this.ruleForm.ACTION_ALERT = response.data.ACTION_ALERT;
|
|
|
+ } else {
|
|
|
+ this.ruleForm.ACTION_ALERT = 15;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (response.data.ACTION_NUM) {
|
|
|
+ this.ruleForm.ACTION_NUM = response.data.ACTION_NUM;
|
|
|
+ } else {
|
|
|
+ this.ruleForm.ACTION_NUM = 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (response.data.ACTION_OPTIONS) {
|
|
|
+ this.ruleForm.ACTION_OPTIONS =
|
|
|
+ response.data.ACTION_OPTIONS.split(",");
|
|
|
+ } else {
|
|
|
+ this.ruleForm.ACTION_OPTIONS = ["NOD", "SHAKE"];
|
|
|
+ }
|
|
|
+
|
|
|
+ if (response.data.ACTION_ORDER) {
|
|
|
+ this.ruleForm.ACTION_ORDER = response.data.ACTION_ORDER;
|
|
|
+ } else {
|
|
|
+ this.ruleForm.ACTION_ORDER = "RANDOM";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (response.data.ACTION_DURATION) {
|
|
|
+ this.ruleForm.ACTION_DURATION = response.data.ACTION_DURATION;
|
|
|
+ } else {
|
|
|
+ this.ruleForm.ACTION_DURATION = 15;
|
|
|
+ }
|
|
|
+
|
|
|
this.originalRuleForm = Object.assign({}, this.ruleForm);
|
|
|
} else {
|
|
|
this.$notify({
|