|
@@ -50,12 +50,12 @@
|
|
label="小题号"
|
|
label="小题号"
|
|
width="80"
|
|
width="80"
|
|
></el-table-column>
|
|
></el-table-column>
|
|
- <el-table-column prop="totalScore" label="小题满分" width="105">
|
|
|
|
|
|
+ <el-table-column prop="totalScore" label="ß" width="85">
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column label="答案" width="200px" class-name="answer-column">
|
|
|
|
|
|
+ <el-table-column label="答案" width="140px" class-name="answer-column">
|
|
<div
|
|
<div
|
|
slot-scope="scope"
|
|
slot-scope="scope"
|
|
- :class="['el-form-item', { 'is-error': scope.row.error }]"
|
|
|
|
|
|
+ :class="['el-form-item', { 'is-error': scope.row.answerError }]"
|
|
>
|
|
>
|
|
<div class="el-form-item__content">
|
|
<div class="el-form-item__content">
|
|
<el-input
|
|
<el-input
|
|
@@ -65,17 +65,25 @@
|
|
"
|
|
"
|
|
:maxlength="scope.row.optionCount"
|
|
:maxlength="scope.row.optionCount"
|
|
clearable
|
|
clearable
|
|
- @change="validateAnswer(scope.row)"
|
|
|
|
|
|
+ @change="answerChange(scope.row)"
|
|
></el-input>
|
|
></el-input>
|
|
- <div v-if="scope.row.error" class="el-form-item__error">
|
|
|
|
- {{ scope.row.errMsg }}
|
|
|
|
|
|
+ <div v-if="scope.row.answerError" class="el-form-item__error">
|
|
|
|
+ {{ scope.row.answerError }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column label="判分策略" width="140px">
|
|
|
|
|
|
+ <el-table-column
|
|
|
|
+ label="判分策略"
|
|
|
|
+ width="270px"
|
|
|
|
+ class-name="answer-column"
|
|
|
|
+ >
|
|
<template v-if="scope.row.questionType === 2" slot-scope="scope">
|
|
<template v-if="scope.row.questionType === 2" slot-scope="scope">
|
|
- <el-select v-model="scope.row.objectivePolicy">
|
|
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="scope.row.objectivePolicy"
|
|
|
|
+ style="width: 120px"
|
|
|
|
+ @change="objectivePolicyChange(scope.row)"
|
|
|
|
+ >
|
|
<el-option
|
|
<el-option
|
|
v-for="(val, key) in QUESTION_SCORE_TYPE"
|
|
v-for="(val, key) in QUESTION_SCORE_TYPE"
|
|
:key="key"
|
|
:key="key"
|
|
@@ -83,6 +91,36 @@
|
|
:label="val"
|
|
:label="val"
|
|
></el-option>
|
|
></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
|
|
+ <div
|
|
|
|
+ v-if="scope.row.objectivePolicy === 'PICK'"
|
|
|
|
+ :class="[
|
|
|
|
+ 'el-form-item',
|
|
|
|
+ { 'is-error': scope.row.objectivePolicyError },
|
|
|
|
+ ]"
|
|
|
|
+ style="display: inline-block"
|
|
|
|
+ >
|
|
|
|
+ <div class="el-form-item__content">
|
|
|
|
+ <el-input-number
|
|
|
|
+ v-model="scope.row.objectivePolicyPickScore"
|
|
|
|
+ style="width: 110px; margin-left: 5px"
|
|
|
|
+ size="small"
|
|
|
|
+ :min="0"
|
|
|
|
+ :max="100"
|
|
|
|
+ :step="0.5"
|
|
|
|
+ step-strictly
|
|
|
|
+ :controls="false"
|
|
|
|
+ placeholder="每个选项得分"
|
|
|
|
+ @change="validateObjectivePolicy(scope.row)"
|
|
|
|
+ ></el-input-number>
|
|
|
|
+ <div
|
|
|
|
+ v-if="scope.row.objectivePolicyError"
|
|
|
|
+ class="el-form-item__error"
|
|
|
|
+ style="padding-left: 5px"
|
|
|
|
+ >
|
|
|
|
+ {{ scope.row.objectivePolicyError }}
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
@@ -135,10 +173,11 @@ export default {
|
|
this.tableData = objectiveStructure.map((item) => {
|
|
this.tableData = objectiveStructure.map((item) => {
|
|
let nitem = {
|
|
let nitem = {
|
|
...item,
|
|
...item,
|
|
|
|
+ objectivePolicyPickScore: item.objectivePolicyPickScore || undefined,
|
|
mainFirstSub: false,
|
|
mainFirstSub: false,
|
|
expandSub: true,
|
|
expandSub: true,
|
|
- error: false,
|
|
|
|
- errMsg: "",
|
|
|
|
|
|
+ answerError: "",
|
|
|
|
+ objectivePolicyError: "",
|
|
};
|
|
};
|
|
if (item.questionType === 2 && !item.objectivePolicy) {
|
|
if (item.questionType === 2 && !item.objectivePolicy) {
|
|
nitem.objectivePolicy = "NONE";
|
|
nitem.objectivePolicy = "NONE";
|
|
@@ -168,16 +207,18 @@ export default {
|
|
.filter((item) => item.mainId === row.mainId && !item.mainFirstSub)
|
|
.filter((item) => item.mainId === row.mainId && !item.mainFirstSub)
|
|
.forEach((item) => (item.expandSub = row.expandSub));
|
|
.forEach((item) => (item.expandSub = row.expandSub));
|
|
},
|
|
},
|
|
|
|
+ answerChange(row) {
|
|
|
|
+ this.validateAnswer(row);
|
|
|
|
+ this.objectivePolicyChange(row);
|
|
|
|
+ },
|
|
validateAnswer(row) {
|
|
validateAnswer(row) {
|
|
if (!row.answer) {
|
|
if (!row.answer) {
|
|
- row.error = true;
|
|
|
|
- row.errMsg = "不能为空";
|
|
|
|
|
|
+ row.answerError = "不能为空";
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
if (!/^[A-Z]{1,26}$/.test(row.answer)) {
|
|
if (!/^[A-Z]{1,26}$/.test(row.answer)) {
|
|
- row.error = true;
|
|
|
|
- row.errMsg = "只能输入英文大写字母";
|
|
|
|
|
|
+ row.answerError = "只能输入英文大写字母";
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -188,8 +229,7 @@ export default {
|
|
row.answer.length !== 1 ||
|
|
row.answer.length !== 1 ||
|
|
row.answer.split("").some((item) => !validAnswers.includes(item))
|
|
row.answer.split("").some((item) => !validAnswers.includes(item))
|
|
) {
|
|
) {
|
|
- row.error = true;
|
|
|
|
- row.errMsg = `只能输入${validAnswers}中的一个`;
|
|
|
|
|
|
+ row.answerError = `只能输入${validAnswers}中的一个`;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -197,33 +237,69 @@ export default {
|
|
// 多选题
|
|
// 多选题
|
|
if (row.questionType === 2) {
|
|
if (row.questionType === 2) {
|
|
// if (row.answer.length <= 1) {
|
|
// if (row.answer.length <= 1) {
|
|
- // row.error = true;
|
|
|
|
- // row.errMsg = `答案必须为多个`;
|
|
|
|
|
|
+ // row.answerError = `答案必须为多个`;
|
|
// return;
|
|
// return;
|
|
// }
|
|
// }
|
|
if (row.answer.split("").some((item) => !validAnswers.includes(item))) {
|
|
if (row.answer.split("").some((item) => !validAnswers.includes(item))) {
|
|
- row.error = true;
|
|
|
|
- row.errMsg = `只能输入${validAnswers}中的字符`;
|
|
|
|
|
|
+ row.answerError = `只能输入${validAnswers}中的字符`;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
const ansSet = new Set(row.answer.split(""));
|
|
const ansSet = new Set(row.answer.split(""));
|
|
if (ansSet.size !== row.answer.length) {
|
|
if (ansSet.size !== row.answer.length) {
|
|
- row.error = true;
|
|
|
|
- row.errMsg = "答案不能重复";
|
|
|
|
|
|
+ row.answerError = "答案不能重复";
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- row.error = false;
|
|
|
|
- row.errMsg = "";
|
|
|
|
|
|
+ row.answerError = "";
|
|
|
|
+ },
|
|
|
|
+ validateObjectivePolicy(row) {
|
|
|
|
+ if (row.questionType === 2 && row.objectivePolicy === "PICK") {
|
|
|
|
+ if (
|
|
|
|
+ !row.objectivePolicyPickScore &&
|
|
|
|
+ row.objectivePolicyPickScore !== 0
|
|
|
|
+ ) {
|
|
|
|
+ row.objectivePolicyError = "不能为空";
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (
|
|
|
|
+ row.answer &&
|
|
|
|
+ row.objectivePolicyPickScore * row.answer.length > row.totalScore
|
|
|
|
+ ) {
|
|
|
|
+ row.objectivePolicyError = "分值过大";
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ row.objectivePolicyError = "";
|
|
},
|
|
},
|
|
checkData() {
|
|
checkData() {
|
|
this.tableData.forEach((item) => {
|
|
this.tableData.forEach((item) => {
|
|
this.validateAnswer(item);
|
|
this.validateAnswer(item);
|
|
|
|
+ this.validateObjectivePolicy(item);
|
|
});
|
|
});
|
|
|
|
|
|
- return !this.tableData.some((item) => item.error);
|
|
|
|
|
|
+ return !this.tableData.some(
|
|
|
|
+ (item) => item.answerError || item.objectivePolicyError
|
|
|
|
+ );
|
|
|
|
+ },
|
|
|
|
+ objectivePolicyChange(row) {
|
|
|
|
+ const { totalScore, answer, objectivePolicy } = row;
|
|
|
|
+ if (objectivePolicy === "PICK") {
|
|
|
|
+ if (answer) {
|
|
|
|
+ const answerCount = answer.length;
|
|
|
|
+ const pickScore = Math.floor((totalScore * 2) / answerCount) / 2;
|
|
|
|
+
|
|
|
|
+ row.objectivePolicyPickScore = pickScore;
|
|
|
|
+ } else {
|
|
|
|
+ row.objectivePolicyPickScore = undefined;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ row.objectivePolicyPickScore = undefined;
|
|
|
|
+ }
|
|
|
|
+ this.validateObjectivePolicy(row);
|
|
},
|
|
},
|
|
async submit() {
|
|
async submit() {
|
|
if (!this.checkData()) return;
|
|
if (!this.checkData()) return;
|