From c7735db135f9c3c99224d8b5d2157926efde0977 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Mon, 09 May 2022 09:56:10 +0800
Subject: [PATCH] 登录用户名提示修改为姓名

---
 src/views/startexam/index.vue |  492 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 386 insertions(+), 106 deletions(-)

diff --git a/src/views/startexam/index.vue b/src/views/startexam/index.vue
index cb39537..449d999 100644
--- a/src/views/startexam/index.vue
+++ b/src/views/startexam/index.vue
@@ -39,13 +39,13 @@
                       >答题卡</el-button
                     >
                   </div>
-                  <el-button
+                  <!-- <el-button
                     type="success"
                     icon="el-icon-date"
                     @click="submitExam"
                     v-bind:disabled="disableSubmit"
                     >提交</el-button
-                  >
+                  > -->
                 </div>
               </el-col>
               <el-col :span="18">
@@ -55,44 +55,58 @@
                       subjectIds.length
                     }}题,合计100分)
                   </div>
-                  <!-- 题目内容 -->
-                  <choices ref="choices" v-show="this.query.type === 0" />
+                  <div class="subject_main">
+                    <!-- 题目内容 -->
+                    <choices ref="choices" v-show="this.query.type === 0" />
 
-                  <multiple-choices
-                    ref="multipleChoices"
-                    v-show="this.query.type === 1"
-                  />
+                    <multiple-choices
+                      ref="multipleChoices"
+                      v-show="this.query.type === 1"
+                    />
 
-                  <judgement ref="judgement" v-show="this.query.type === 2" />
+                    <judgement ref="judgement" v-show="this.query.type === 2" />
 
-                  <practical-operation
-                    ref="practicalOperation"
-                    v-show="this.query.type === 3"
-                  />
+                    <practical-operation
+                      ref="practicalOperation"
+                      v-show="this.query.type === 3"
+                    />
 
-                  <short-answer
-                    ref="shortAnswer"
-                    v-show="this.query.type === 4"
-                  />
+                    <short-answer
+                      ref="shortAnswer"
+                      v-show="this.query.type === 4"
+                    />
 
-                  <div class="subject-buttons" v-if="query.subjectId !== ''">
-                    <!-- <el-button plain @click="last" :loading="loadingLast"
+                    <div class="subject-buttons" v-if="query.subjectId !== ''">
+                      <!-- <el-button plain @click="last" :loading="loadingLast"
                       >上一题</el-button
                     > -->
-                    <el-button
-                      @click="next"
-                      class="buttons"
-                      :loading="loadingNext"
-                      type="primary"
-                      >下一题</el-button
-                    >
-                    <el-button
+                      <el-button
+                        @click="next"
+                        class="buttons"
+                        :loading="loadingNext"
+                        type="primary"
+                        >下一题</el-button
+                      >
+                      <!-- <el-button
+                      :disabled="timesIT"
                       type="success"
-                      style="display: none"
                       @click="submitExam"
-                      v-bind:disabled="disableSubmit"
-                      >提交</el-button
-                    >
+                      :title="
+                        timesIT
+                          ? '根据国家考试要求,30分钟内不可提交! 剩(' +
+                            timesITValue +
+                            ')分钟'
+                          : '点击完成考试'
+                      "
+                      >完成考试 {{ time }}</el-button
+                    > -->
+                      <el-button
+                        type="success"
+                        @click="submitExam"
+                        :disabled="subjectIndex != 60"
+                        >完成考试 {{ time }}
+                      </el-button>
+                    </div>
                   </div>
                 </div>
               </el-col>
@@ -104,6 +118,7 @@
               top="10vh"
               :modal="false"
               center
+              class="datika"
             >
               <div class="answer-card-title">
                 {{ exam.examinationName }}(共{{
@@ -127,6 +142,7 @@
                   :key="index"
                   >&nbsp;{{ index + 1 }}&nbsp;</el-button
                 >
+                <!-- @click="toSubject(value.everyID, value.type, index)" -->
               </el-row>
             </el-dialog>
           </div>
@@ -139,7 +155,7 @@
 import { mapState } from "vuex";
 import CountDown from "vue2-countdown";
 import { saveAndNext } from "@/api/exam/answer";
-import { getSubjectIds } from "@/api/exam/exam";
+import { getSubjectIds, getSubjectRefresh } from "@/api/exam/exam";
 import { getCurrentTime } from "@/api/exam/examRecord";
 import { getSubjectResultInfo } from "@/api/exam/subject";
 
@@ -148,7 +164,7 @@
   messageSuccess,
   messageFail,
   messageWarn,
-  isNotEmpty,
+  isNotEmpty
 } from "@/util/util";
 import Tinymce from "@/components/Tinymce";
 import Choices from "@/components/Subjects/Choices";
@@ -168,7 +184,7 @@
     Choices,
     MultipleChoices,
     PracticalOperation,
-    Judgement,
+    Judgement
     // ShortAnswer,
   },
   data() {
@@ -187,7 +203,7 @@
         examRecordId: undefined,
         subjectId: undefined,
         userId: undefined,
-        type: 0,
+        type: 0
       },
       subject: {},
       answer: "",
@@ -214,17 +230,46 @@
 
         remark: "全国计算机统考练习题10道",
 
-        newRecord: false,
+        newRecord: false
       },
       firstFlag: true,
+      times: ["30", "00"],
+      timeOut: null,
+      timeOTiv: null,
+      timesIT: true,
+      timesITValue: 0,
+      first: true
     };
   },
   computed: {
     ...mapState({
-      userInfo: (state) => state.user.userInfo,
+      userInfo: state => state.user.userInfo,
+      scoreId: state =>
+        state.exam.scoreId
+          ? state.exam.scoreId
+          : window.localStorage.getItem("scoreId")
     }),
+    time() {
+      var d = [+this.times[0], +this.times[1]];
+    }
   },
   created() {
+    var useInfo = this.$store.state.exam.examUserData;
+
+    if (useInfo.isExam == 3) {
+      window.name = "first";
+      this.first = false;
+    } else {
+      if (window.name == "") {
+        // console.log("首次被加载");
+        window.name = "first"; // 在首次进入页面时我们可以给window.name设置一个固定值
+        this.first = true;
+      } else if (window.name == "first") {
+        // console.log("页面被刷新");
+        this.first = false;
+      }
+    }
+
     const examInfo = this.$route.params.id;
 
     if (isNotEmpty(examInfo)) {
@@ -244,45 +289,107 @@
       // this.exam.totalScore = this.$route.query.totalScore
       // this.exam.status = this.$route.query.examStatus
       // this.exam.remark = this.$route.query.remark
-
       this.validateExamTime();
     }
   },
   methods: {
-    countDownS_cb: function () {
+    countDownS_cb: function() {
+      // console.log(12456);
       messageSuccess(this, "考试开始");
       this.startTime = this.getCurrentTimes();
     },
+    countDownE_cb: function() {
+      messageWarn(this, "考试结束");
+      //   this.disableSubmit = true;
+      // this.submitExam("over");
+    },
+    bottonControl(time) {
+      //倒计时循环
+      let times = time * 60;
+      var setTime = function(time) {
+        let a, b, d;
+        a = parseInt(time / 60);
+        b = time - a * 60;
+        d = a + ":" + b;
+        return d;
+      };
+      if (this.timeOTiv == null) {
+        this.timeOTiv = setInterval(res => {
+          times--;
+          this.timesITValue = setTime(times);
+        }, 1000);
+      } else {
+        clearTimeout(this.timeOTiv);
+        this.timeOTiv = null;
+        this.timeOTiv = setInterval(res => {
+          times--;
+          this.timesITValue = setTime(times);
+        }, 1000);
+      }
+      //倒计时定时
+      if (this.timeOut == null) {
+        this.timeOut = setTimeout(res => {
+          this.timesIT = false;
+          this.timesITValue--;
+        }, time * 3600);
+      } else {
+        clearTimeout(this.timeOut);
+        this.timeOut = null;
+        this.timeOut = setTimeout(res => {
+          this.timesIT = false;
+        }, time * 3600);
+      }
+    },
     validateExamTime() {
       getCurrentTime()
-        .then((response) => {
+        .then(response => {
+          // console.log(response, 7777);
           const currentTime = moment(response.data.data);
           if (currentTime.isAfter(this.exam.endTime)) {
             messageWarn(this, "考试已结束");
           } else if (currentTime.isBefore(this.exam.startTime)) {
             messageWarn(this, "考试未开始");
           } else {
-            this.startExam();
-            const current = currentTime.valueOf();
-            this.currentTime = current;
-            this.startTime = current;
-            this.subjectStartTime = current;
-            // this.endTime = moment(this.exam.endTime).valueOf()
-            this.endTime = current + 60 * 60 * 1000;
-            // this.endTime = current + 1 * 60 * 1000;
-            this.disableSubmit = false;
+            //判断是否是答过题
+            this.startExam(currentTime);
+            //判断是否是答过题
+            if (this.first) {
+              const current = currentTime.valueOf();
+              // console.log(current, "首次");
+              this.currentTime = current;
+              this.startTime = current;
+              this.subjectStartTime = current;
+              //   // this.endTime = moment(this.exam.endTime).valueOf()
+              this.endTime = current + 60 * 60 * 1000;
+              this.bottonControl(60);
+            }
+            // this.disableSubmit = false;
           }
         })
         .catch(() => {
           messageFail(this, "开始考试失败!15");
         });
     },
-    startExam() {
-      // 获取题目ID列表
-      getSubjectIds()
-        .then((subjectResponse) => {
-          const subjectData = subjectResponse.data.data;
+    startExam(currentTime) {
+      var scoreId = window.localStorage.getItem("scoreId");
+      // console.log(scoreId, this.first, "scoreIdscoreIdscoreIdscoreId");
+      this.subjectIds = [];
+      // if (this.first) {
+      //   const current = currentTime.valueOf();
+      //   console.log(current, "首次");
+      //   this.currentTime = current;
+      //   this.startTime = current;
+      //   this.subjectStartTime = current;
+      //   //   // this.endTime = moment(this.exam.endTime).valueOf()
+      //   this.endTime = current + 60 * 60 * 1000;
+      // }
+      if (!this.first) {
+        getSubjectRefresh(scoreId).then(obj => {
+          const objs = obj.data.data;
+          // console.log(objs, "objobjobjobjobjobj");
+          const subjectData = objs.examSubjectChoicesVOSList;
           if (subjectData.length > 0) {
+            //重载题目
             for (let i = 0; i < subjectData.length; i++) {
               this.subjectIds.push({
                 subjectId: 1,
@@ -294,6 +401,136 @@
                 score: subjectData[i].score,
                 color: "#fff",
                 fontColor: "#000",
+                title: subjectData[i].subjectName
+              });
+            }
+
+            //重载到当前题目
+            let nowObj = objs.examSubjectChoicesVO;
+            nowObj.answer = ""; //清除答案
+            // console.log(nowObj, "nowObj");
+            for (var i = 0; i < this.subjectIds.length; i++) {
+              if (nowObj.id == this.subjectIds[i].everyID) {
+                //定位显示题目
+                this.subjectIndex = i + 1;
+                //题目类型
+                this.query.type = parseInt(this.subjectIds[i].type);
+                // 题目id
+                this.query.subjectId = this.subjectIds[i].everyID;
+                this.setSubjectInfo(nowObj);
+              }
+            }
+            // 添加到答题卡
+            const anSwer = objs.examAnswerRecordList;
+            for (var i = 0; i < this.subjectIds.length; i++) {
+              for (var n = 0; n < anSwer.length; n++) {
+                // console.log(anSwer[i].subjectChoicesId);
+                if (anSwer[n].subjectChoicesId == this.subjectIds[i].everyID) {
+                  if (anSwer[n].answerResult == 1) {
+                    this.subjectIds[i].color = "#67C23A";
+                    this.subjectIds[i].fontColor = "#fff";
+                  }
+                  if (anSwer[n].answerResult == 2) {
+                    this.subjectIds[i].color = "red";
+                    this.subjectIds[i].fontColor = "#fff";
+                  }
+                  var test = /,/g;
+                  if (test.test(anSwer[n].answerOption)) {
+                    let ans = anSwer[n].answerOption.split(","),
+                      anw = [];
+                    for (var k = 0; k < ans.length; k++) {
+                      anw.push({
+                        key: k + 1,
+                        value: ans[k]
+                      });
+                    }
+                    this.subjectIds[i].answer = anw;
+                  } else {
+                    this.subjectIds[i].answer = anSwer[n].answerOption;
+                  }
+                  // console.log(anSwer[n].answerOption, 1);
+                  // console.log(this.subjectIds[i].answer, 2);
+                }
+              }
+            }
+            //适应时间
+            const datyTime = objs.examScore.examTime;
+            // console.log(objs, "datyTimedatyTimedatyTime");
+            var duibiTime = function(newTime, oldTime) {
+              var newYear = newTime.split(" ")[0],
+                newDat = newTime.split(" ")[1],
+                oldYear = oldTime.split(" ")[0],
+                oldDat = oldTime.split(" ")[1];
+              if (newYear !== oldYear) {
+                return false;
+              } else {
+                let newD = {
+                  s: +newDat.split(":")[0],
+                  f: +newDat.split(":")[1],
+                  m: +newDat.split(":")[2]
+                };
+                let oldD = {
+                  s: +oldDat.split(":")[0],
+                  f: +oldDat.split(":")[1],
+                  m: +oldDat.split(":")[2]
+                };
+                if (newD.s - oldD.s > 1) {
+                  return false;
+                } else if (newD.s - oldD.s == 1) {
+                  if (newD.f < oldD.f) {
+                    return oldD.f - newD.f;
+                  } else {
+                    return false;
+                  }
+                } else if (newD.s == oldD.s) {
+                  return 60 - (newD.f - oldD.f);
+                }
+                return [newD, oldD];
+              }
+              // return false;
+            };
+            var listTime = duibiTime(currentTime._i, datyTime);
+            const current = currentTime.valueOf();
+            this.currentTime = current;
+            this.startTime = current;
+            this.subjectStartTime = current;
+            // // this.endTime = moment(this.exam.endTime).valueOf()
+            if (listTime) {
+              this.endTime = current + listTime * 60 * 1000;
+              this.bottonControl(listTime - 30);
+            } else {
+              this.endTime = current + 0 * 60 * 1000;
+              this.bottonControl(0);
+            }
+            // console.log(datyTime, currentTime, "刷新");
+          }
+        });
+        // this.first = true;
+        return;
+      }
+      // console.log(this.subjectIds);
+      // 获取题目ID列表
+      // console.log("subjectResponsesubjectResponsesubjectResponse");
+      getSubjectIds(scoreId)
+        .then(subjectResponse => {
+          const subjectData = subjectResponse.data.data;
+          // console.log(
+          //   subjectResponse,
+          //   "subjectResponsesubjectResponsesubjectResponse"
+          // );
+          // console.log(subjectData, "subjectDatasubjectDatasubjectData");
+          if (subjectData.length > 0) {
+            for (let i = 0; i < subjectData.length; i++) {
+              this.subjectIds.push({
+                subjectId: 1,
+                everyID: subjectData[i].id,
+                type: subjectData[i].choicesType,
+                index: i + 1,
+                answered: false,
+                answer: "",
+                score: subjectData[i].score,
+                color: "#fff",
+                fontColor: "#000"
               });
             }
 
@@ -305,9 +542,9 @@
             this.updateSubjectIndex();
             // 获取当前题目信息
             getSubjectResultInfo({
-              id: this.subjectIds[0].everyID,
+              id: this.subjectIds[0].everyID
             })
-              .then((response) => {
+              .then(response => {
                 if (isNotEmpty(response.data.data)) {
                   response.data.data.answer = "";
                   this.setSubjectInfo(response.data.data);
@@ -322,11 +559,7 @@
           messageFail(this, "开始考试失败!4646549888*8*");
         });
     },
-    countDownE_cb: function () {
-      messageWarn(this, "考试结束");
-      //   this.disableSubmit = true;
-      this.submitExam("over");
-    },
+
     last() {
       for (let i = 0; i < this.subjectIds.length; i++) {
         if (this.subjectIds[i].everyID == this.query.subjectId) {
@@ -357,8 +590,35 @@
       for (let i = 0; i < this.subjectIds.length; i++) {
         if (this.subjectIds[i].everyID == this.query.subjectId) {
           if (this.getAnswer() == "") {
-            messageSuccess(this, "请选择答案");
+            this.$message({
+              message: "请选择答案",
+              type: "warning"
+            });
             return;
+          }
+          //  if (this.getAnswer() == "") {
+          //   this.$message({
+          //     message: "请选择答案",
+          //     type: "warning",
+          //   });
+          //   return;
+          // }
+          // console.log(this.getAnswer(), this.query.type);
+          if (this.query.type == 3) {
+            let goShiCao = true;
+            const answer = this.getAnswer();
+            for (let k in answer) {
+              if (answer[k].value == "") {
+                goShiCao = false;
+              }
+            }
+            if (!goShiCao) {
+              this.$message({
+                message: "实操题目请选择完整顺序!",
+                type: "warning"
+              });
+              return;
+            }
           }
 
           this.subjectIds[i].answer = this.getAnswer();
@@ -388,35 +648,34 @@
     saveCurrentSubjectAndGetNextSubject(nextType, nextSubjectId, subjectIds) {
       this.startLoading(nextType);
 
-
-      console.log()
+      // console.log();
 
       var answerData = this.getAnswer();
 
-      var str = '';
+      var str = "";
 
       if (Array.isArray(answerData)) {
         answerData.forEach(item => {
-          str += item.value + ','
-        })
+          str += item.value + ",";
+        });
 
         str = str.substr(0, str.length - 1);
 
-        answerData = str
+        answerData = str;
       }
-
 
       var data = {
         id: nextSubjectId,
         preSubJectId: this.query.subjectId,
         preResult: answerData,
+        scoreId: this.scoreId
       };
       getSubjectResultInfo(data)
-        .then((response) => {
+        .then(response => {
           if (response.data.data !== null) {
             // 保存成功后更新答题卡状态
             const subject = response.data.data;
-
+            // console.log(subject.answer, 123456);
             //结果
             this.result = response.data.data.result;
 
@@ -444,17 +703,20 @@
             }
 
             this.setSubjectInfo(subject);
+            console.log(subject);
+            this.$store.commit("setWindowSizeHeightAdd");
 
             // store.dispatch('SetSubjectInfo', subject).then(() => { })
           }
           // 更新时间
-          getCurrentTime().then((response) => {
+          getCurrentTime().then(response => {
             this.subjectStartTime = moment(response.data.data);
           });
           this.endLoading(nextType);
         })
-        .catch((error) => {
+        .catch(error => {
           console.log(error);
+          this.$store.commit("setWindowSizeHeightAdd");
           messageFail(this, "获取题目失败");
           this.endLoading(nextType);
         });
@@ -464,10 +726,10 @@
       this.startLoading(nextType);
 
       var data = {
-        id: nextSubjectId,
+        id: nextSubjectId
       };
       getSubjectResultInfo(data)
-        .then((response) => {
+        .then(response => {
           if (response.data.data !== null) {
             // 保存成功后更新答题卡状态
             const subject = response.data.data;
@@ -501,12 +763,12 @@
             // store.dispatch('SetSubjectInfo', subject).then(() => { })
           }
           // 更新时间
-          getCurrentTime().then((response) => {
+          getCurrentTime().then(response => {
             this.subjectStartTime = moment(response.data.data);
           });
           this.endLoading(nextType);
         })
-        .catch((error) => {
+        .catch(error => {
           console.log(error);
           messageFail(this, "获取题目失败");
           this.endLoading(nextType);
@@ -538,9 +800,9 @@
       this.subjectIndex = index + 1;
       this.firstFlag = true;
       // 保存当前题目,同时加载下一题
-      console.log(nextSubjectType.next,111);
-      console.log(everyID,222);
-      console.log(type,333);
+      // console.log(nextSubjectType.next, 111);
+      // console.log(everyID, 222);
+      // console.log(type, 333);
       this.saveCurrentSubjectAndGetNextSubject(
         nextSubjectType.next,
         everyID,
@@ -551,6 +813,7 @@
     },
     // 提交
     submitExam(val) {
+      // console.log(val);
       var ind = this.subjectIndex;
 
       if (this.firstFlag == false) {
@@ -573,7 +836,7 @@
       this.$confirm("确定要提交吗?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning",
+        type: "warning"
       })
         .then(() => {
           this.disableSubmit = true;
@@ -593,51 +856,67 @@
         examTime: this.startTime,
         papersId: this.$route.query.id,
         examEndTime: this.getCurrentTimes(),
-        examResultVOS: null,
+        examResultVOS: null
       };
       var arr = [];
-      this.subjectIds.forEach((item) => {
-        if (item.type == 3) {
+      console.log(this.subjectIds);
+      // debugger;
+      console.log(this.subjectIds.length, 111);
+      for (var i = 0; i < this.subjectIds.length; i++) {
+        let item = this.subjectIds[i];
+        // console.log(item.answer, i);
+        if (item.type == 3 || item.type == 1) {
           var str = "";
-
           if (item.answer.length > 0) {
-            item.answer.forEach((it) => {
-              if (it.value != "") {
-                str += it.value + ",";
-              }
-            });
+            //如果是数组
+            if (item.answer instanceof Array) {
+              item.answer.forEach(it => {
+                if (it.value != "") {
+                  str += it.value + ",";
+                }
+              });
 
-            var a = str.substr(0, str.length - 1);
+              var a = str.substr(0, str.length - 1);
 
-            arr.push({
-              subjectChoicesId: item.everyID,
-              value: a,
-              grade: item.score,
-            });
+              arr.push({
+                subjectChoicesId: item.everyID,
+                value: a,
+                grade: item.score
+              });
+            } else {
+              arr.push({
+                subjectChoicesId: item.everyID,
+                value: item.answer,
+                grade: item.score
+              });
+            }
           }
         } else {
           arr.push({
             subjectChoicesId: item.everyID,
             value: item.answer,
-            grade: item.score,
+            grade: item.score
           });
         }
-      });
-
+      }
+      // console.log(arr, 123);
+      // return;
       obj.examResultVOS = arr;
+      // console.log(this.subjectIds, 456);
+      // console.log(obj.examResultVOS, 789);
 
       saveAndNext(obj)
-        .then((response) => {
+        .then(response => {
           messageSuccess(this, "提交成功");
           if (response) {
             this.$store.commit("DEL_TAG", this.$store.state.tags.tag);
             var obj = {
               userId: this.userInfo.user_id,
-              examId: this.$route.query.id,
+              examId: this.$route.query.id
             };
             this.$router.push({
               path: `/singleperformance/index`,
-              query: obj,
+              query: obj
             });
           }
         })
@@ -760,7 +1039,7 @@
     },
     setSubjectInfo(subject) {
       const ref = this.getSubjectRef();
-
+      // console.log(subject, "subject");
       if (isNotEmpty(ref)) {
         try {
           ref.setSubjectInfo(
@@ -772,8 +1051,8 @@
           console.error(error);
         }
       }
-    },
-  },
+    }
+  }
 };
 </script>
 
@@ -783,8 +1062,9 @@
 $fontSize2: 20px;
 $fontSize3: 40px;
 .subject-box {
-  margin-top: 50px;
+  margin-top: 25px;
   margin-left: 20px;
+  height: 100%;
 }
 .subject-box-card {
   font-size: 28px;

--
Gitblit v1.9.3