WANG 6 yıl önce
ebeveyn
işleme
b578c9697b
1 değiştirilmiş dosya ile 126 ekleme ve 75 silme
  1. 126 75
      src/modules/examwork/view/onlineExam.vue

+ 126 - 75
src/modules/examwork/view/onlineExam.vue

@@ -7,8 +7,8 @@
           <el-form
             :inline="true"
             :rules="rules"
-            ref="mainForm"
-            :model="mainForm"
+            ref="form"
+            :model="form"
             label-position="right"
           >
             <div style="margin-bottom: 10px">
@@ -28,7 +28,7 @@
                     placeholder="请输入考试名称"
                     prop="name"
                   >
-                    <el-input v-model="mainForm.name"></el-input>
+                    <el-input v-model="form.name"></el-input>
                   </el-form-item>
                 </el-row>
                 <el-row>
@@ -36,7 +36,7 @@
                     <el-select
                       style="width:205px"
                       :disabled="true"
-                      v-model="mainForm.examType"
+                      v-model="form.examType"
                       placeholder="请选择"
                     >
                       <el-option
@@ -52,7 +52,7 @@
                 <el-row>
                   <el-form-item label="是否开启">
                     <el-radio-group
-                      v-model="mainForm.enable"
+                      v-model="form.enable"
                       style="margin-left: 15px"
                     >
                       <el-radio label="true">开启</el-radio>
@@ -81,7 +81,7 @@
                 <el-row>
                   <el-form-item label="考试时长" prop="duration">
                     <el-input
-                      v-model.trim.number="mainForm.duration"
+                      v-model.trim.number="form.duration"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
@@ -90,7 +90,7 @@
                 <el-row>
                   <el-form-item label="考试次数" prop="examTimes">
                     <el-input
-                      v-model.number="mainForm.examTimes"
+                      v-model.trim.number="form.examTimes"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
@@ -98,7 +98,7 @@
                 <el-row>
                   <el-form-item label="交卷冻结时间" prop="FREEZE_TIME">
                     <el-input
-                      v-model.number="mainForm.properties.FREEZE_TIME"
+                      v-model.trim.number="form.properties.FREEZE_TIME"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
@@ -107,7 +107,7 @@
                 <el-row>
                   <el-form-item label="断点续考时间" prop="EXAM_RECONNECT_TIME">
                     <el-input
-                      v-model.number="mainForm.properties.EXAM_RECONNECT_TIME"
+                      v-model.trim.number="form.properties.EXAM_RECONNECT_TIME"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
@@ -118,7 +118,7 @@
                 <el-row>
                   <el-form-item label="考前说明">
                     <el-input
-                      v-model="mainForm.properties.BEFORE_EXAM_REMARK"
+                      v-model="form.properties.BEFORE_EXAM_REMARK"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
@@ -126,7 +126,7 @@
                 <el-row>
                   <el-form-item label="考后说明">
                     <el-input
-                      v-model="mainForm.properties.AFTER_EXAM_REMARK"
+                      v-model="form.properties.AFTER_EXAM_REMARK"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
@@ -134,7 +134,7 @@
                 <el-row>
                   <el-form-item label="展示作弊说明">
                     <el-radio-group
-                      v-model="mainForm.properties.SHOW_CHEATING_REMARK"
+                      v-model="form.properties.SHOW_CHEATING_REMARK"
                     >
                       <el-radio label="true">开启</el-radio>
                       <el-radio label="false">关闭</el-radio>
@@ -144,7 +144,7 @@
                 <el-row>
                   <el-form-item label="作弊说明">
                     <el-input
-                      v-model="mainForm.properties.CHEATING_REMARK"
+                      v-model="form.properties.CHEATING_REMARK"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
@@ -152,14 +152,14 @@
                 <el-row>
                   <el-form-item label="单选题补充说明">
                     <el-input
-                      :disabled="!mainForm.properties.SINGLE_EDIT"
-                      v-model="mainForm.properties.SINGLE_ANSWER_REMARK"
+                      :disabled="!form.properties.SINGLE_EDIT"
+                      v-model="form.properties.SINGLE_ANSWER_REMARK"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
                   <el-form-item label="">
                     <el-switch
-                      v-model="mainForm.properties.SINGLE_EDIT"
+                      v-model="form.properties.SINGLE_EDIT"
                       on-text="启用"
                       off-text="禁用"
                     ></el-switch>
@@ -168,14 +168,14 @@
                 <el-row>
                   <el-form-item label="多选题补充说明">
                     <el-input
-                      :disabled="!mainForm.properties.MUTIPLE_EDIT"
-                      v-model="mainForm.properties.MUTIPLE_ANSWER_REMARK"
+                      :disabled="!form.properties.MUTIPLE_EDIT"
+                      v-model="form.properties.MUTIPLE_ANSWER_REMARK"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
                   <el-form-item label="">
                     <el-switch
-                      v-model="mainForm.properties.MUTIPLE_EDIT"
+                      v-model="form.properties.MUTIPLE_EDIT"
                       on-text="启用"
                       off-text="禁用"
                     ></el-switch>
@@ -184,14 +184,14 @@
                 <el-row>
                   <el-form-item label="判断题补充说明">
                     <el-input
-                      :disabled="!mainForm.properties.BOOL_EDIT"
-                      v-model="mainForm.properties.BOOL_ANSWER_REMARK"
+                      :disabled="!form.properties.BOOL_EDIT"
+                      v-model="form.properties.BOOL_ANSWER_REMARK"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
                   <el-form-item label="">
                     <el-switch
-                      v-model="mainForm.properties.BOOL_EDIT"
+                      v-model="form.properties.BOOL_EDIT"
                       on-text="启用"
                       off-text="禁用"
                     ></el-switch>
@@ -200,14 +200,14 @@
                 <el-row>
                   <el-form-item label="填空题补充说明">
                     <el-input
-                      :disabled="!mainForm.properties.FILL_BLANK_EDIT"
-                      v-model="mainForm.properties.FILL_BLANK_REMARK"
+                      :disabled="!form.properties.FILL_BLANK_EDIT"
+                      v-model="form.properties.FILL_BLANK_REMARK"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
                   <el-form-item label="">
                     <el-switch
-                      v-model="mainForm.properties.FILL_BLANK_EDIT"
+                      v-model="form.properties.FILL_BLANK_EDIT"
                       on-text="启用"
                       off-text="禁用"
                     ></el-switch>
@@ -215,9 +215,7 @@
                 </el-row>
                 <el-row>
                   <el-form-item label="客观题成绩显示">
-                    <el-radio-group
-                      v-model="mainForm.properties.IS_OBJ_SCORE_VIEW"
-                    >
+                    <el-radio-group v-model="form.properties.IS_OBJ_SCORE_VIEW">
                       <el-radio label="true">开启</el-radio>
                       <el-radio label="false">关闭</el-radio>
                     </el-radio-group>
@@ -228,7 +226,7 @@
                 <el-row>
                   <el-form-item label="是否开启">
                     <el-radio-group
-                      v-model="mainForm.properties.IS_FACE_ENABLE"
+                      v-model="form.properties.IS_FACE_ENABLE"
                       @change="faceChange"
                     >
                       <el-radio label="true">开启</el-radio>
@@ -236,36 +234,36 @@
                     </el-radio-group>
                   </el-form-item>
                 </el-row>
-                <el-row v-show="mainForm.properties.IS_FACE_ENABLE == 'true'">
+                <el-row v-show="form.properties.IS_FACE_ENABLE == 'true'">
                   <el-form-item label="考试强制使用">
-                    <el-radio-group v-model="mainForm.properties.IS_FACE_CHECK">
+                    <el-radio-group v-model="form.properties.IS_FACE_CHECK">
                       <el-radio label="true">强制</el-radio>
                       <el-radio label="false">非强制</el-radio>
                     </el-radio-group>
                   </el-form-item>
                 </el-row>
-                <el-row v-show="mainForm.properties.IS_FACE_ENABLE == 'true'">
+                <el-row v-show="form.properties.IS_FACE_ENABLE == 'true'">
                   <el-form-item label="抓拍间隔">
                     <el-input
-                      v-model.number="mainForm.properties.SNAPSHOT_INTERVAL"
+                      v-model.number="form.properties.SNAPSHOT_INTERVAL"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
                   <el-form-item label="分钟"></el-form-item>
                 </el-row>
-                <el-row v-show="mainForm.properties.IS_FACE_ENABLE == 'true'">
+                <el-row v-show="form.properties.IS_FACE_ENABLE == 'true'">
                   <el-form-item label="预警阀值">
                     <el-input
-                      v-model.number="mainForm.properties.WARN_THRESHOLD"
+                      v-model.number="form.properties.WARN_THRESHOLD"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
                   <el-form-item label="%"></el-form-item>
                 </el-row>
-                <el-row v-show="mainForm.properties.IS_FACE_ENABLE == 'true'">
+                <el-row v-show="form.properties.IS_FACE_ENABLE == 'true'">
                   <el-form-item label="真实性预警阀值">
                     <el-input
-                      v-model.number="mainForm.properties.LIVING_WARN_THRESHOLD"
+                      v-model.number="form.properties.LIVING_WARN_THRESHOLD"
                       auto-complete="off"
                     ></el-input>
                   </el-form-item>
@@ -276,8 +274,8 @@
                 <el-row>
                   <el-form-item label="阅卷方式">
                     <el-radio-group
-                      :disabled="mainForm.started"
-                      v-model="mainForm.properties.MARKING_TYPE"
+                      :disabled="form.started"
+                      v-model="form.properties.MARKING_TYPE"
                     >
                       <el-radio label="ALL">全部评阅</el-radio>
                       <el-radio label="OBJECT_SCORE_MAX">客观分最高</el-radio>
@@ -289,7 +287,7 @@
               <el-tab-pane label="网络设置" name="tab6">
                 <el-row>
                   <el-form-item label="IP限制">
-                    <el-radio-group v-model="mainForm.properties.IP_LIMIT">
+                    <el-radio-group v-model="form.properties.IP_LIMIT">
                       <el-radio label="true">开启</el-radio>
                       <el-radio label="false">关闭</el-radio>
                     </el-radio-group>
@@ -297,9 +295,7 @@
                 </el-row>
                 <el-row>
                   <el-form-item label="IP段( *表示任意 )">
-                    <el-input
-                      v-model="mainForm.properties.IP_ADDRESSES"
-                    ></el-input>
+                    <el-input v-model="form.properties.IP_ADDRESSES"></el-input>
                   </el-form-item>
                 </el-row>
               </el-tab-pane>
@@ -318,7 +314,7 @@ import moment from "moment";
 let _this = null;
 
 let validateName = (rule, value, callback) => {
-  let name = _this.mainForm.name;
+  let name = _this.form.name;
   if (name == "") {
     callback(new Error("请输入考试名称"));
     _this.activeName = "tab1";
@@ -328,7 +324,7 @@ let validateName = (rule, value, callback) => {
 };
 
 let validateDuration = (rule, value, callback) => {
-  let duration = _this.mainForm.duration;
+  let duration = _this.form.duration;
   if (duration == "") {
     callback(new Error("请输入考试时长"));
     _this.activeName = "tab2";
@@ -340,13 +336,56 @@ let validateDuration = (rule, value, callback) => {
   }
 };
 
+let validateExamTimes = (rule, value, callback) => {
+  let examTimes = _this.form.examTimes;
+  if (examTimes == "") {
+    callback(new Error("请输入考试次数"));
+    _this.activeName = "tab2";
+  } else if (!examTimes.toString().match(/^[1-9]\d*$/)) {
+    callback(new Error("只能是正整数"));
+    _this.activeName = "tab2";
+  } else {
+    callback();
+  }
+};
+
+let validateFreezeTime = (rule, value, callback) => {
+  let freezeTime = _this.form.properties.FREEZE_TIME;
+  let duration = _this.form.duration;
+  if (freezeTime == "") {
+    callback(new Error("请输入交卷冻结时长"));
+    _this.activeName = "tab2";
+  } else if (!freezeTime.toString().match(/^[1-9]\d*|0$/)) {
+    callback(new Error("只能是非负整数"));
+    _this.activeName = "tab2";
+  } else if (freezeTime > duration) {
+    callback(new Error("交卷冻结时长不能大于考试时长"));
+    _this.activeName = "tab2";
+  } else {
+    callback();
+  }
+};
+
+let validateExamReconnectTime = (rule, value, callback) => {
+  let examReconnectTime = _this.form.properties.EXAM_RECONNECT_TIME;
+  if (examReconnectTime == "") {
+    callback(new Error("请输入断点续考时间"));
+    _this.activeName = "tab2";
+  } else if (!examReconnectTime.toString().match(/^[1-9]\d*$/)) {
+    callback(new Error("只能是正整数"));
+    _this.activeName = "tab2";
+  } else {
+    callback();
+  }
+};
+
 export default {
   data() {
     return {
       activeName: "tab1",
       examDatetimeRange: [],
       show_ckeditor: false,
-      mainForm: {
+      form: {
         started: false,
         name: "",
         examType: "ONLINE",
@@ -384,17 +423,32 @@ export default {
       examTypeList: EXAM_TYPE,
       examId: "",
       rules: {
-        name: [{ validator: validateName, trigger: "blur" }],
-        duration: [{ validator: validateDuration, trigger: "blur" }]
+        name: [{ required: true, validator: validateName, trigger: "blur" }],
+        duration: [
+          { required: true, validator: validateDuration, trigger: "blur" }
+        ],
+        examTimes: [
+          { required: true, validator: validateExamTimes, trigger: "blur" }
+        ],
+        FREEZE_TIME: [
+          { required: true, validator: validateFreezeTime, trigger: "blur" }
+        ],
+        EXAM_RECONNECT_TIME: [
+          {
+            required: true,
+            validator: validateExamReconnectTime,
+            trigger: "blur"
+          }
+        ]
       }
     };
   },
 
   methods: {
     faceChange() {
-      if (this.mainForm.properties.IS_FACE_ENABLE == "false") {
-        this.mainForm.properties.SNAPSHOT_INTERVAL = 30;
-        this.mainForm.properties.WARN_THRESHOLD = 50;
+      if (this.form.properties.IS_FACE_ENABLE == "false") {
+        this.form.properties.SNAPSHOT_INTERVAL = 30;
+        this.form.properties.WARN_THRESHOLD = 50;
       }
     },
     init() {
@@ -402,29 +456,26 @@ export default {
         let url = EXAM_WORK_API + "/exam/" + this.examId;
         this.$http.get(url).then(response => {
           let body = response.data;
-          body.properties = this.mainForm.properties;
-          this.mainForm = Object.assign(this.mainForm, response.data);
-          this.mainForm.enable = this.mainForm.enable ? "true" : "false";
-          this.examDatetimeRange = [
-            this.mainForm.beginTime,
-            this.mainForm.endTime
-          ];
-          console.log("getOnlineExam(); mainForm: ", this.mainForm);
+          body.properties = this.form.properties;
+          this.form = Object.assign(this.form, response.data);
+          this.form.enable = this.form.enable ? "true" : "false";
+          this.examDatetimeRange = [this.form.beginTime, this.form.endTime];
+          console.log("getOnlineExam(); form: ", this.form);
 
           let url = EXAM_WORK_API + "/exam/allProperties/" + this.examId;
           this.$http.get(url).then(response => {
-            this.mainForm.properties = Object.assign(
-              this.mainForm.properties,
+            this.form.properties = Object.assign(
+              this.form.properties,
               response.data
             );
-            this.mainForm.properties.SINGLE_EDIT =
-              this.mainForm.properties.SINGLE_EDIT == "true" ? true : false;
-            this.mainForm.properties.MUTIPLE_EDIT =
-              this.mainForm.properties.MUTIPLE_EDIT == "true" ? true : false;
-            this.mainForm.properties.BOOL_EDIT =
-              this.mainForm.properties.BOOL_EDIT == "true" ? true : false;
-            this.mainForm.properties.FILL_BLANK_EDIT =
-              this.mainForm.properties.FILL_BLANK_EDIT == "true" ? true : false;
+            this.form.properties.SINGLE_EDIT =
+              this.form.properties.SINGLE_EDIT == "true" ? true : false;
+            this.form.properties.MUTIPLE_EDIT =
+              this.form.properties.MUTIPLE_EDIT == "true" ? true : false;
+            this.form.properties.BOOL_EDIT =
+              this.form.properties.BOOL_EDIT == "true" ? true : false;
+            this.form.properties.FILL_BLANK_EDIT =
+              this.form.properties.FILL_BLANK_EDIT == "true" ? true : false;
             this.show_ckeditor = true;
           });
         });
@@ -435,14 +486,14 @@ export default {
       }
     },
     saveOnlineExam: function() {
-      this.mainForm.beginTime = this.examDatetimeRange[0];
-      this.mainForm.endTime = this.examDatetimeRange[1];
-      console.log(this.mainForm);
+      this.form.beginTime = this.examDatetimeRange[0];
+      this.form.endTime = this.examDatetimeRange[1];
+      console.log(this.form);
       let url = EXAM_WORK_API + "/exam";
-      this.$refs.mainForm.validate(valid => {
+      this.$refs.form.validate(valid => {
         if (valid) {
           if (this.examId != "add") {
-            this.$http.put(url, this.mainForm).then(response => {
+            this.$http.put(url, this.form).then(response => {
               if (200 != response.status) {
                 this.$notify({
                   type: "error",
@@ -456,7 +507,7 @@ export default {
               });
             });
           } else {
-            this.$http.post(url, this.mainForm).then(response => {
+            this.$http.post(url, this.form).then(response => {
               console.log(response);
               this.$notify({
                 type: "success",