Sfoglia il codice sorgente

ip限制格式检查

Michael Wang 4 anni fa
parent
commit
2386c0ef39
1 ha cambiato i file con 53 aggiunte e 9 eliminazioni
  1. 53 9
      src/features/examwork/ExamManagement/ExamEdit.vue

+ 53 - 9
src/features/examwork/ExamManagement/ExamEdit.vue

@@ -533,8 +533,10 @@
 
       <el-tab-pane label="其他设置" name="third">
         <el-form
+          ref="form3"
           :model="form"
           label-width="170px"
+          :rules="rules"
           inline
           :disabled="disableEdit"
         >
@@ -549,9 +551,13 @@
           </el-row>
           <el-row>
             <el-form-item label="须知强制阅读时长">
-              <el-input v-model.trim="form.preNoticeStaySeconds">
-                <template slot="append">秒</template>
-              </el-input>
+              <el-input-number
+                :min="0"
+                :max="24 * 60 * 60"
+                step-strictly
+                :controls="false"
+                v-model.trim="form.preNoticeStaySeconds"
+              />(秒)
             </el-form-item>
           </el-row>
           <el-row>
@@ -569,9 +575,12 @@
               <el-radio v-model="form.enableIpLimit" :label="0">否</el-radio>
             </el-form-item>
           </el-row>
-          <el-row>
-            <el-form-item label="IP段(*表示任意):">
-              <el-input v-model.trim="form.ipAllow"></el-input>
+          <el-row v-if="form.enableIpLimit">
+            <el-form-item label="IP段(*表示任意):" prop="ipAllow">
+              <el-input
+                v-model.trim="form.ipAllow"
+                placeholder="192.168.10.1, 192.168.11.*, 172.10.*.*"
+              ></el-input>
             </el-form-item>
           </el-row>
         </el-form>
@@ -794,11 +803,11 @@ export default {
         mode: { required: true, message: "必填" },
         name: [
           { required: true, message: "必填" },
-          { type: "string", min: 1, max: 30 },
+          { type: "string", min: 1, max: 30, message: "长度必须在1到30之间" },
         ],
         code: [
           { required: true, message: "必填" },
-          { type: "string", min: 1, max: 30 },
+          { type: "string", min: 1, max: 30, message: "长度必须在1到30之间" },
         ],
         startEndTimeProxy: { required: true, message: "必填" },
         inProcessLivenessFixedRange: {
@@ -842,6 +851,41 @@ export default {
             });
           },
         },
+        ipAllow: {
+          validator: (rule, value) => {
+            console.log(value);
+            return new Promise((resolve, reject) => {
+              if (!this.form.enableIpLimit) {
+                resolve();
+                return;
+              }
+              const ips = value.split(",").map((v) => v.trim());
+              console.log(ips);
+              const checkIpSeg = (seg, idx) => {
+                if (idx < 2) {
+                  if (!/^\d+$/.test(seg)) {
+                    return false;
+                  }
+                } else if (idx >= 2 && idx < 4) {
+                  if (!(/^\d+$/.test(seg) || /^\*$/.test(seg))) {
+                    return false;
+                  }
+                }
+                return true;
+              };
+              if (
+                ips.every(
+                  (v) =>
+                    v.split(".").length === 4 && v.split(".").every(checkIpSeg)
+                )
+              ) {
+                resolve();
+              } else {
+                reject("格式不匹配");
+              }
+            });
+          },
+        },
       },
       orgSetting: null,
       loading: false,
@@ -870,7 +914,7 @@ export default {
       try {
         await this.$refs.form1.validate();
         await this.$refs.form2.validate();
-        // await this.$refs.form3.validate();
+        await this.$refs.form3.validate();
       } catch (error) {
         console.log("校验失败", error);
         this.$notify({