|
@@ -1,5 +1,22 @@
|
|
|
<template>
|
|
|
- <div class="config-table">
|
|
|
+ <div
|
|
|
+ class="config-table"
|
|
|
+ v-if="judgeAnswer == 'standardAnswer' ? (userError ? true : false) : true"
|
|
|
+ >
|
|
|
+ <h6
|
|
|
+ v-if="judgeAnswer == 'userAnswer' || judgeAnswer == 'studentAnswer'"
|
|
|
+ class="standardTitle"
|
|
|
+ style="margin: 10px 0 8px 24px"
|
|
|
+ >
|
|
|
+ {{ judgeAnswer == "userAnswer" ? "Your answer" : "Student answers" }}
|
|
|
+ </h6>
|
|
|
+ <h6
|
|
|
+ v-else-if="judgeAnswer == 'standardAnswer'"
|
|
|
+ class="standardTitle"
|
|
|
+ style="margin: 10px 0 8px 24px"
|
|
|
+ >
|
|
|
+ Standard answer
|
|
|
+ </h6>
|
|
|
<table
|
|
|
:style="{
|
|
|
'box-shadow': `${
|
|
@@ -55,7 +72,16 @@
|
|
|
:key="`td-${i}-${j}`"
|
|
|
:colspan="col.colspan"
|
|
|
:rowspan="col.rowspan"
|
|
|
- :class="[{ underline: col.isUnderline }]"
|
|
|
+ :class="[
|
|
|
+ { underline: col.isUnderline },
|
|
|
+ judgeAnswer == 'standardAnswer' ? 'correct' : '',
|
|
|
+ judgeAnswer == 'studentAnswer'
|
|
|
+ ? curQue.Bookanswer[i].content[j].userAnswerJudge ==
|
|
|
+ '[JUDGE##T##JUDGE]'
|
|
|
+ ? 'correct'
|
|
|
+ : 'error'
|
|
|
+ : '',
|
|
|
+ ]"
|
|
|
:style="{ 'background-color': `${col.background}` }"
|
|
|
>
|
|
|
<div class="cell-wrap">
|
|
@@ -65,12 +91,16 @@
|
|
|
</span>
|
|
|
<template v-else>
|
|
|
<el-input
|
|
|
- v-model="col.answer"
|
|
|
+ v-model="
|
|
|
+ judgeAnswer == 'standardAnswer'
|
|
|
+ ? col.answer
|
|
|
+ : curQue.Bookanswer[i].content[j].answer
|
|
|
+ "
|
|
|
type="textarea"
|
|
|
:placeholder="`${isAnswerMode ? '' : '输入'}`"
|
|
|
:disabled="isAnswerMode"
|
|
|
:autosize="{ minRows: 1, maxRows: 6 }"
|
|
|
- @input="enterAnswer(i, j, $event)"
|
|
|
+ @input="enterAnswer(i, j, 'input')"
|
|
|
/>
|
|
|
</template>
|
|
|
</template>
|
|
@@ -82,12 +112,16 @@
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
<el-input
|
|
|
- v-model="col.answer"
|
|
|
+ v-model="
|
|
|
+ judgeAnswer == 'standardAnswer'
|
|
|
+ ? col.answer
|
|
|
+ : curQue.Bookanswer[i].content[j].answer
|
|
|
+ "
|
|
|
type="textarea"
|
|
|
:placeholder="`${isAnswerMode ? '' : '输入'}`"
|
|
|
:disabled="isAnswerMode"
|
|
|
:autosize="{ minRows: 1, maxRows: 6 }"
|
|
|
- @input="enterAnswer(i, j, $event)"
|
|
|
+ @input="enterAnswer(i, j, 'input')"
|
|
|
/>
|
|
|
</template>
|
|
|
</div>
|
|
@@ -201,7 +235,18 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <CrossTick v-if="col.isCross" />
|
|
|
+ <CrossTick
|
|
|
+ v-if="col.isCross"
|
|
|
+ :index="i"
|
|
|
+ :indexs="j"
|
|
|
+ :data="
|
|
|
+ judgeAnswer == 'standardAnswer'
|
|
|
+ ? col
|
|
|
+ : curQue.Bookanswer[i].content[j]
|
|
|
+ "
|
|
|
+ :isAnswerMode="isAnswerMode"
|
|
|
+ @enterAnswer="enterAnswer"
|
|
|
+ />
|
|
|
</div>
|
|
|
</td>
|
|
|
</template>
|
|
@@ -225,10 +270,14 @@ export default {
|
|
|
type: String,
|
|
|
required: true,
|
|
|
},
|
|
|
+ judgeAnswer: {
|
|
|
+ type: String,
|
|
|
+ },
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
isAnswerMode: false,
|
|
|
+ userError: false,
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
@@ -260,24 +309,89 @@ export default {
|
|
|
},
|
|
|
},
|
|
|
created() {
|
|
|
- const Bookanswer = this.curQue.Bookanswer;
|
|
|
- if (Bookanswer) {
|
|
|
+ if (this.judgeAnswer) {
|
|
|
this.isAnswerMode = true;
|
|
|
- for (const key in Bookanswer) {
|
|
|
- let { col, row, value } = Bookanswer[key];
|
|
|
- this.curQue.tableData.body[col].content[row].answer = value;
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (!this.curQue.Bookanswer) {
|
|
|
+ let arr = [];
|
|
|
+ this.curQue.tableData.body.forEach((item, i) => {
|
|
|
+ arr.push({
|
|
|
+ content: [],
|
|
|
+ });
|
|
|
+ item.content.forEach((items) => {
|
|
|
+ arr[i].content.push({
|
|
|
+ answer: "",
|
|
|
+ CrossAnswer: "",
|
|
|
+ userAnswerJudge:
|
|
|
+ items.answer || items.isCross ? "[JUDGE##F##JUDGE]" : "",
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ this.$set(this.curQue, "Bookanswer", arr);
|
|
|
} else {
|
|
|
- this.$set(this.curQue, "Bookanswer", {});
|
|
|
+ this.curQue.Bookanswer.forEach((item) => {
|
|
|
+ item.content.forEach((item) => {
|
|
|
+ if (item.userAnswerJudge == "[JUDGE##F##JUDGE]") {
|
|
|
+ this.userError = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
- enterAnswer(i, j, value) {
|
|
|
- this.curQue.Bookanswer[`${i}-${j}`] = {
|
|
|
- col: i,
|
|
|
- row: j,
|
|
|
- value,
|
|
|
- };
|
|
|
+ enterAnswer(i, j, type) {
|
|
|
+ if (type == "input") {
|
|
|
+ if (
|
|
|
+ this.curQue.Bookanswer[i].content[j].answer ==
|
|
|
+ this.curQue.tableData.body[i].content[j].answer
|
|
|
+ ) {
|
|
|
+ if (this.curQue.tableData.body[i].content[j].isCross) {
|
|
|
+ if (
|
|
|
+ this.curQue.Bookanswer[i].content[j].CrossAnswer ==
|
|
|
+ this.curQue.tableData.body[i].content[j].CrossAnswer
|
|
|
+ ) {
|
|
|
+ this.curQue.Bookanswer[i].content[j].userAnswerJudge =
|
|
|
+ "[JUDGE##T##JUDGE]";
|
|
|
+ } else {
|
|
|
+ this.curQue.Bookanswer[i].content[j].userAnswerJudge =
|
|
|
+ "[JUDGE##F##JUDGE]";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.curQue.Bookanswer[i].content[j].userAnswerJudge =
|
|
|
+ "[JUDGE##T##JUDGE]";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (this.curQue.tableData.body[i].content[j].answer) {
|
|
|
+ this.curQue.Bookanswer[i].content[j].userAnswerJudge =
|
|
|
+ "[JUDGE##F##JUDGE]";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (
|
|
|
+ this.curQue.Bookanswer[i].content[j].CrossAnswer ==
|
|
|
+ this.curQue.tableData.body[i].content[j].CrossAnswer
|
|
|
+ ) {
|
|
|
+ if (this.curQue.tableData.body[i].content[j].answer) {
|
|
|
+ if (
|
|
|
+ this.curQue.Bookanswer[i].content[j].answer ==
|
|
|
+ this.curQue.tableData.body[i].content[j].answer
|
|
|
+ ) {
|
|
|
+ this.curQue.Bookanswer[i].content[j].userAnswerJudge =
|
|
|
+ "[JUDGE##T##JUDGE]";
|
|
|
+ } else {
|
|
|
+ this.curQue.Bookanswer[i].content[j].userAnswerJudge =
|
|
|
+ "[JUDGE##F##JUDGE]";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.curQue.Bookanswer[i].content[j].userAnswerJudge =
|
|
|
+ "[JUDGE##T##JUDGE]";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.curQue.Bookanswer[i].content[j].userAnswerJudge =
|
|
|
+ "[JUDGE##F##JUDGE]";
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
// th 是否生成
|
|
|
thIsShow(i, j) {
|
|
@@ -442,3 +556,35 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
</style>
|
|
|
+<style lang="scss">
|
|
|
+.config-table {
|
|
|
+ .correct {
|
|
|
+ .el-textarea.is-disabled .el-textarea__inner {
|
|
|
+ color: #2ca767 !important;
|
|
|
+ }
|
|
|
+ .cross-tick {
|
|
|
+ border-color: #2ca767 !important;
|
|
|
+ .el-icon-check:before {
|
|
|
+ color: #2ca767 !important;
|
|
|
+ }
|
|
|
+ .el-icon-close:before {
|
|
|
+ color: #2ca767 !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .error {
|
|
|
+ .el-textarea.is-disabled .el-textarea__inner {
|
|
|
+ color: #ed342d !important;
|
|
|
+ }
|
|
|
+ .cross-tick {
|
|
|
+ border-color: #ed342d !important;
|
|
|
+ .el-icon-check:before {
|
|
|
+ color: #ed342d !important;
|
|
|
+ }
|
|
|
+ .el-icon-close:before {
|
|
|
+ color: #ed342d !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|