|
@@ -0,0 +1,186 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="select-question">
|
|
|
|
+ <el-form
|
|
|
|
+ ref="modalFormComp"
|
|
|
|
+ :model="modelForm"
|
|
|
|
+ :rules="rules"
|
|
|
|
+ label-width="100px"
|
|
|
|
+ >
|
|
|
|
+ <el-form-item prop="quesBody" label="题干:">
|
|
|
|
+ <v-editor v-model="modalForm.quesBody"></v-editor>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item
|
|
|
|
+ v-for="(option, oindex) in modalForm.quesOptions"
|
|
|
|
+ :key="option.nmuber"
|
|
|
|
+ :prop="`quesOptions.${oindex}.body`"
|
|
|
|
+ :rules="optionRule"
|
|
|
|
+ >
|
|
|
|
+ <div class="question-edit-option">
|
|
|
|
+ <div class="option-check">
|
|
|
|
+ {{ (option.nmuber - 1) | optionOrderWordFilter }}
|
|
|
|
+ </div>
|
|
|
|
+ <div class="option-body">
|
|
|
|
+ <v-editor v-model="option.body"></v-editor>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="option-delete">
|
|
|
|
+ <el-button
|
|
|
|
+ size="mini"
|
|
|
|
+ circle
|
|
|
|
+ type="primary"
|
|
|
|
+ icon="el-icon-add"
|
|
|
|
+ title="新增"
|
|
|
|
+ @click.prevent="addQuesOption(index)"
|
|
|
|
+ ></el-button>
|
|
|
|
+ <el-button
|
|
|
|
+ size="mini"
|
|
|
|
+ circle
|
|
|
|
+ type="danger"
|
|
|
|
+ icon="el-icon-delete"
|
|
|
|
+ title="删除"
|
|
|
|
+ @click.prevent="removeQuesOption(index)"
|
|
|
|
+ ></el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item prop="quesAnswer" label="答案">
|
|
|
|
+ <el-radio-group
|
|
|
|
+ v-if="IS_SIMPLE"
|
|
|
|
+ v-model="quesAnswer"
|
|
|
|
+ @change="answerChange"
|
|
|
|
+ >
|
|
|
|
+ <el-radio
|
|
|
|
+ v-for="option in modalForm.quesOptions"
|
|
|
|
+ :key="option.number"
|
|
|
|
+ :label="option.number"
|
|
|
|
+ >
|
|
|
|
+ {{ (option.number - 1) | optionOrderWordFilter }}
|
|
|
|
+ </el-radio>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ <el-checkbox-group
|
|
|
|
+ v-if="IS_SIMPLE"
|
|
|
|
+ v-model="quesAnswer"
|
|
|
|
+ @change="answerChange"
|
|
|
|
+ >
|
|
|
|
+ <el-checkbox
|
|
|
|
+ v-for="option in modalForm.quesOptions"
|
|
|
|
+ :key="option.number"
|
|
|
|
+ :label="option.number"
|
|
|
|
+ >
|
|
|
|
+ {{ (option.number - 1) | optionOrderWordFilter }}
|
|
|
|
+ </el-checkbox>
|
|
|
|
+ </el-checkbox-group>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="答案解析">
|
|
|
|
+ <v-editor v-model="modalForm.comment"></v-editor>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import { isAnEmptyRichText } from "@/utils/utils";
|
|
|
|
+
|
|
|
|
+export default {
|
|
|
|
+ name: "SelectQuestion",
|
|
|
|
+ props: {
|
|
|
|
+ question: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default() {
|
|
|
|
+ return {};
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ modalForm: {
|
|
|
|
+ questionType: "SINGLE_ANSWER_QUESTION",
|
|
|
|
+ quesBody: null,
|
|
|
|
+ quesOptions: [],
|
|
|
|
+ quesAnswer: [],
|
|
|
|
+ comment: null,
|
|
|
|
+ },
|
|
|
|
+ quesAnswer: null,
|
|
|
|
+ rules: {
|
|
|
|
+ quesBody: [
|
|
|
|
+ {
|
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
|
+ if (!value || isAnEmptyRichText(value)) {
|
|
|
|
+ return callback(new Error(`请输入题干`));
|
|
|
|
+ }
|
|
|
|
+ callback();
|
|
|
|
+ },
|
|
|
|
+ trigger: "change",
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ quesAnswer: [
|
|
|
|
+ {
|
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
|
+ if (!value || !value.length) {
|
|
|
|
+ return callback(new Error(`请设置答案`));
|
|
|
|
+ }
|
|
|
|
+ callback();
|
|
|
|
+ },
|
|
|
|
+ trigger: "change",
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ optionRule: {
|
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
|
+ if (!value || !value.length) {
|
|
|
|
+ return callback(new Error(`请输入选项内容`));
|
|
|
|
+ }
|
|
|
|
+ callback();
|
|
|
|
+ },
|
|
|
|
+ trigger: "change",
|
|
|
|
+ },
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ computed: {
|
|
|
|
+ IS_SIMPLE() {
|
|
|
|
+ return this.question.questionType === "SINGLE_ANSWER_QUESTION";
|
|
|
|
+ },
|
|
|
|
+ answer() {
|
|
|
|
+ return "w";
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ addQuesOption(index) {
|
|
|
|
+ if (this.modalForm.quesOptions.length >= 20) {
|
|
|
|
+ this.$message.error("选项最多20个");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ this.modalForm.quesOptions.splice(index + 1, 0, {
|
|
|
|
+ number: 0,
|
|
|
|
+ body: { sections: [] },
|
|
|
|
+ });
|
|
|
|
+ this.resetNumberAndSaveOptions();
|
|
|
|
+ },
|
|
|
|
+ removeQuesOption(index) {
|
|
|
|
+ this.modalForm.quesOptions.splice(index, 1);
|
|
|
|
+ this.resetNumberAndSaveOptions();
|
|
|
|
+ },
|
|
|
|
+ resetNumberAndSaveOptions() {
|
|
|
|
+ this.modalForm.quesOptions = this.modalForm.quesOptions.forEach(
|
|
|
|
+ (option, index) => {
|
|
|
|
+ option.number = index + 1;
|
|
|
|
+ }
|
|
|
|
+ );
|
|
|
|
+ const optionCount = this.modalForm.quesOptions.length;
|
|
|
|
+ if (this.IS_SIMPLE) {
|
|
|
|
+ if (this.quesAnswer > optionCount) this.quesAnswer = null;
|
|
|
|
+ } else {
|
|
|
|
+ this.quesAnswer = this.quesAnswer.filter((item) => item <= optionCount);
|
|
|
|
+ }
|
|
|
|
+ this.answerChange();
|
|
|
|
+ },
|
|
|
|
+ answerChange() {
|
|
|
|
+ this.modalForm.quesAnswer = this.IS_SIMPLE
|
|
|
|
+ ? [this.quesAnswer]
|
|
|
|
+ : this.quesAnswer;
|
|
|
|
+ },
|
|
|
|
+ validate() {
|
|
|
|
+ return this.$refs.modalFormComp.validate();
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+</script>
|