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">
- ( 判断题 <span v-if="subjectInfo.score !== undefined && subjectInfo.score !== 0"> {{
- subjectInfo.score }}分 </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 }} </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">
+ ( 判断题 <span
+ v-if="subjectInfo.score !== undefined && subjectInfo.score !== 0"
+ > {{ subjectInfo.score }}分 </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 }} </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">
- ( 多选题 <span v-if="subjectInfo.score !== undefined && subjectInfo.score !== 0"> {{
- subjectInfo.score }}分 </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">
+ ( 多选题 <span
+ v-if="subjectInfo.score !== undefined && subjectInfo.score !== 0"
+ > {{ subjectInfo.score }}分 </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 + "." }} </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 + "." }} </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