From b6862540422a853ddca486de30382b34ad667b7f Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 07 Nov 2023 15:15:37 +0800
Subject: [PATCH] 考试逻辑

---
 src/components/Subjects/Choices/index.vue         |    2 
 src/components/Subjects/Judgement/index.vue       |  132 +++++++++++----------
 src/components/Subjects/MultipleChoices/index.vue |  162 ++++++++++++++------------
 src/views/startexam/index.vue                     |   47 +++++--
 4 files changed, 189 insertions(+), 154 deletions(-)

diff --git a/src/components/Subjects/Choices/index.vue b/src/components/Subjects/Choices/index.vue
index 11d992f..480678e 100644
--- a/src/components/Subjects/Choices/index.vue
+++ b/src/components/Subjects/Choices/index.vue
@@ -45,7 +45,7 @@
             return this.userAnswer
         },
         setAnswer (answer) {
-            this.userAnswer = ''
+            this.userAnswer = answer
         },
         setSubjectInfo (subject, subjectCount, index) {
             this.currentAnswer = false
diff --git a/src/components/Subjects/Judgement/index.vue b/src/components/Subjects/Judgement/index.vue
index 9d680ac..098cc75 100644
--- a/src/components/Subjects/Judgement/index.vue
+++ b/src/components/Subjects/Judgement/index.vue
@@ -1,76 +1,84 @@
 <template>
-    <div>
-        <div class="subject-content">
-            <div class="subject-title">
-                {{ index }}
-                <span class="subject-title-content" v-html="subjectInfo.subjectName" />
-                <span class="subject-title-content titlesss">
-                    (&nbsp;判断题&nbsp;<span v-if="subjectInfo.score !== undefined && subjectInfo.score !== 0">&nbsp;{{
-                        subjectInfo.score }}分&nbsp;</span>)
-                </span>
-            </div>
-            <ul class="subject-options" v-for="option in options" :key="option.id">
-                <li class="subject-option">
-                    <input class="toggle" type="checkbox" :checked="userAnswer === option.optionName"
-                        :id="'option' + option.id" @change="toggleOption(option)" />
-                    <label :for="'option' + option.id">
-                        <span class="subject-option-prefix">{{ option.optionName }}&nbsp;</span>
-                    </label>
-                </li>
-            </ul>
-        </div>
+  <div>
+    <div class="subject-content">
+      <div class="subject-title">
+        {{ index }}
+        <span class="subject-title-content" v-html="subjectInfo.subjectName" />
+        <span class="subject-title-content titlesss">
+          (&nbsp;判断题&nbsp;<span
+            v-if="subjectInfo.score !== undefined && subjectInfo.score !== 0"
+            >&nbsp;{{ subjectInfo.score }}分&nbsp;</span
+          >)
+        </span>
+      </div>
+      <ul class="subject-options" v-for="option in options" :key="option.id">
+        <li class="subject-option">
+          <input
+            class="toggle"
+            type="checkbox"
+            :checked="userAnswer === option.optionName"
+            :id="'option' + option.id"
+            @change="toggleOption(option)"
+          />
+          <label :for="'option' + option.id">
+            <span class="subject-option-prefix"
+              >{{ option.optionName }}&nbsp;</span
+            >
+          </label>
+        </li>
+      </ul>
     </div>
+  </div>
 </template>
 
 <script>
 export default {
-    name: "Judgement",
-    data () {
-        return {
-            subjectCount: 0,
-            subjectInfo: {
-                subjectName: "",
-                score: 0,
-            },
-            options: [
-                { id: 1, optionName: "正确" },
-                { id: 2, optionName: "错误" },
-            ],
-            userAnswer: "",
-            index: "",
-        }
+  name: "Judgement",
+  data() {
+    return {
+      subjectCount: 0,
+      subjectInfo: {
+        subjectName: "",
+        score: 0,
+      },
+      options: [
+        { id: 1, optionName: "正确" },
+        { id: 2, optionName: "错误" },
+      ],
+      userAnswer: "",
+      index: "",
+    };
+  },
+  methods: {
+    getAnswer() {
+      return this.userAnswer;
     },
-    methods: {
-        getAnswer () {
-            return this.userAnswer
-        },
-        setAnswer (answer) {
-            this.userAnswer = ''
-        },
-        setSubjectInfo (subject, subjectCount, index) {
-            this.subjectCount = subjectCount
-            this.subjectInfo = subject
-            if (subject.hasOwnProperty("answer")) {
-                this.setAnswer(subject.answer)
-            }
-            this.index = index + "."
-        },
-        getSubjectInfo () {
-            this.subjectInfo.options = this.options
-            return this.subjectInfo
-        },
-        // 选中选项
-        toggleOption (option) {
-            this.userAnswer = option.optionName
-        },
+    setAnswer(answer) {
+      this.userAnswer = answer;
     },
-}
+    setSubjectInfo(subject, subjectCount, index) {
+      this.subjectCount = subjectCount;
+      this.subjectInfo = subject;
+      if (subject.hasOwnProperty("answer")) {
+        this.setAnswer(subject.answer);
+      }
+      this.index = index + ".";
+    },
+    getSubjectInfo() {
+      this.subjectInfo.options = this.options;
+      return this.subjectInfo;
+    },
+    // 选中选项
+    toggleOption(option) {
+      this.userAnswer = option.optionName;
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>
 @import "../../../assets/css/subject.scss";
-
-.subject-options>li label {
-    line-height: 36px !important;
+.subject-options > li label {
+  line-height: 36px !important;
 }
 </style>
diff --git a/src/components/Subjects/MultipleChoices/index.vue b/src/components/Subjects/MultipleChoices/index.vue
index 9bb7bc5..5b8c33c 100644
--- a/src/components/Subjects/MultipleChoices/index.vue
+++ b/src/components/Subjects/MultipleChoices/index.vue
@@ -2,100 +2,110 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2023-11-06 10:15:36
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-11-07 14:43:28
+ * @LastEditTime: 2023-11-07 15:12:56
  * @FilePath: \zhba_exam\src\components\Subjects\MultipleChoices\index.vue
  * @Description: 
  * 
  * Copyright (c) 2023 by shuishen, All Rights Reserved. 
 -->
 <template>
-    <div>
-        <div class="subject-content">
-            <div class="subject-title">
-                {{ index }}
-                <span class="subject-title-content" v-html="subjectInfo.subjectName" />
-                <span class="subject-title-content titlesss">
-                    (&nbsp;多选题&nbsp;<span v-if="subjectInfo.score !== undefined && subjectInfo.score !== 0">&nbsp;{{
-                        subjectInfo.score }}分&nbsp;</span>)
-                </span>
-            </div>
+  <div>
+    <div class="subject-content">
+      <div class="subject-title">
+        {{ index }}
+        <span class="subject-title-content" v-html="subjectInfo.subjectName" />
+        <span class="subject-title-content titlesss">
+          (&nbsp;多选题&nbsp;<span
+            v-if="subjectInfo.score !== undefined && subjectInfo.score !== 0"
+            >&nbsp;{{ subjectInfo.score }}分&nbsp;</span
+          >)
+        </span>
+      </div>
 
-            <ul class="subject-options" v-for="option in options" :key="option.id">
-                <li class="subject-option">
-                    <input class="toggle" type="checkbox" :checked="isChecked(option.optionName)" :id="'option' + option.id"
-                        @change="toggleOption($event, option)" />
-                    <label :for="'option' + option.id">
-                        <span class="subject-option-prefix">{{ option.optionName + "." }}&nbsp;</span>
-                        <span v-html="option.optionContent" class="subject-option-prefix" />
-                    </label>
-                </li>
-            </ul>
-        </div>
+      <ul class="subject-options" v-for="option in options" :key="option.id">
+        <li class="subject-option">
+          <input
+            class="toggle"
+            type="checkbox"
+            :checked="isChecked(option.optionName)"
+            :id="'option' + option.id"
+            @change="toggleOption($event, option)"
+          />
+          <label :for="'option' + option.id">
+            <span class="subject-option-prefix"
+              >{{ option.optionName + "." }}&nbsp;</span
+            >
+            <span v-html="option.optionContent" class="subject-option-prefix" />
+          </label>
+        </li>
+      </ul>
     </div>
+  </div>
 </template>
 
 <script>
 export default {
-    name: "MultipleChoices",
-    data () {
-        return {
-            subjectCount: 0,
-            subjectInfo: {
-                subjectName: "",
-                score: 0,
-            },
-            options: [],
-            userAnswer: [],
-            index: "",
+  name: "MultipleChoices",
+  data() {
+    return {
+      subjectCount: 0,
+      subjectInfo: {
+        subjectName: "",
+        score: 0,
+      },
+      options: [],
+      userAnswer: [],
+      index: "",
+    };
+  },
+  watch: {},
+  methods: {
+    getAnswer() {
+      return this.userAnswer.join(",");
+    },
+    setAnswer(answer) {
+      // if (isNotEmpty(answer)) {
+      this.userAnswer = answer.split(",");
+      // }
+    },
+    setSubjectInfo(subject, subjectCount, index) {
+      this.subjectCount = subjectCount;
+      this.subjectInfo = subject;
+      if (subject.hasOwnProperty("examSubjectOptions")) {
+        this.options = subject.examSubjectOptions;
+      }
+      if (subject.hasOwnProperty("answer")) {
+        this.setAnswer(subject.answer);
+      }
+      this.index = index + ".";
+    },
+    getSubjectInfo() {
+      this.subjectInfo.options = this.options;
+      return this.subjectInfo;
+    },
+    // 选中选项
+    toggleOption($event, option) {
+      if ($event.target.checked) {
+        if (!this.userAnswer.includes(option.optionName)) {
+          this.userAnswer.push(option.optionName);
         }
+      } else {
+        this.userAnswer.splice(
+          this.userAnswer.findIndex((item) => item === option.optionName),
+          1
+        );
+      }
     },
-    watch: {},
-    methods: {
-        getAnswer () {
-            return this.userAnswer.join(",")
-        },
-        setAnswer (answer) {
-            this.userAnswer = []
-        },
-        setSubjectInfo (subject, subjectCount, index) {
-            this.subjectCount = subjectCount
-            this.subjectInfo = subject
-            if (subject.hasOwnProperty("examSubjectOptions")) {
-                this.options = subject.examSubjectOptions
-            }
-            if (subject.hasOwnProperty("answer")) {
-                this.setAnswer(subject.answer)
-            }
-            this.index = index + "."
-        },
-        getSubjectInfo () {
-            this.subjectInfo.options = this.options
-            return this.subjectInfo
-        },
-        // 选中选项
-        toggleOption ($event, option) {
-            if ($event.target.checked) {
-                if (!this.userAnswer.includes(option.optionName)) {
-                    this.userAnswer.push(option.optionName)
-                }
-            } else {
-                this.userAnswer.splice(
-                    this.userAnswer.findIndex((item) => item === option.optionName),
-                    1
-                )
-            }
-        },
-        isChecked (optionName) {
-            return this.userAnswer.includes(optionName)
-        },
+    isChecked(optionName) {
+      return this.userAnswer.includes(optionName);
     },
-}
+  },
+};
 </script>
 
 <style lang="scss" scoped>
 @import "../../../assets/css/subject.scss";
-
-.subject-options>li label {
-    line-height: 36px !important;
+.subject-options > li label {
+  line-height: 36px !important;
 }
 </style>
diff --git a/src/views/startexam/index.vue b/src/views/startexam/index.vue
index dfe34d2..e1f8289 100644
--- a/src/views/startexam/index.vue
+++ b/src/views/startexam/index.vue
@@ -548,7 +548,7 @@
         last () {
             for (let i = 0; i < this.subjectIds.length; i++) {
                 if (this.subjectIds[i].everyID == this.query.subjectId) {
-                    this.subjectIds[i].answer = this.judgeAnswerIfNull(this.subjectIds[i].answer)
+                    this.subjectIds[i].answer = this.getAnswer()
 
                     this.markAnswered(this.subjectIds[i].answer, i)
 
@@ -575,8 +575,32 @@
         next () {
             for (let i = 0; i < this.subjectIds.length; i++) {
                 if (this.subjectIds[i].everyID == this.query.subjectId) {
+                    //  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.judgeAnswerIfNull(this.subjectIds[i].answer)
+                    this.subjectIds[i].answer = this.getAnswer()
 
                     this.markAnswered(this.subjectIds[i].answer, i)
 
@@ -601,7 +625,10 @@
         },
         // 保存当前题目,同时根据序号加载下一题
         saveCurrentSubjectAndGetNextSubject (nextType, nextSubjectId, subjectIds) {
-            var answerData = this.judgeAnswerIfNull(subjectIds.answer)
+            // console.log(nextType, nextSubjectId, subjectIds, '2222222')
+            this.startLoading(nextType)
+
+            var answerData = this.getAnswer()
 
             var str = ""
 
@@ -737,7 +764,7 @@
                 ind = this.subjectIndex - 1
             }
 
-            this.subjectIds[ind].answer = this.judgeAnswerIfNull(this.subjectIds[ind].answer)
+            this.subjectIds[ind].answer = this.getAnswer()
 
             this.markAnswered(this.subjectIds[ind].answer, ind)
 
@@ -767,7 +794,7 @@
                 ind = this.subjectIndex - 1
             }
 
-            this.subjectIds[ind].answer = this.judgeAnswerIfNull(this.subjectIds[ind].answer)
+            this.subjectIds[ind].answer = this.getAnswer()
 
             this.markAnswered(this.subjectIds[ind].answer, ind)
 
@@ -874,16 +901,6 @@
         toggleOption (answer) {
             this.answer = answer
         },
-
-        // 根据答案是否为空决定使用哪个答案
-        judgeAnswerIfNull (val) {
-            if (this.getAnswer() == '') {
-                return val
-            } else {
-                return this.getAnswer()
-            }
-        },
-
         // 根据题目类型返回填写的答案
         getAnswer () {
             const ref = this.getSubjectRef()

--
Gitblit v1.9.3