123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <template>
- <div class="text-answer-question">
- <div
- :class="['ep-question-content', { 'is-active': isActive }]"
- @click="activeQuestion"
- >
- <div class="ep-question-title">
- <span class="ep-question-title-number">{{ question.number }}.</span>
- <rich-text :text-json="question.body"></rich-text>
- </div>
- <div v-if="question.exceptions.length" class="ep-question-exception">
- <p
- class="tips-info tips-error"
- v-for="(cont, index) in question.exceptions"
- :key="index"
- >
- {{ cont }}
- </p>
- </div>
- <question-info-view
- v-if="!isActive"
- :question="getData()"
- ></question-info-view>
- </div>
- <div v-if="isActive" class="ep-question-props">
- <el-form ref="modalFormComp" :model="modalForm" label-width="72px">
- <el-form-item label="答案">
- <v-editor
- v-model="quesAnswer"
- :enable-audio="false"
- @change="answerChange"
- ></v-editor>
- </el-form-item>
- <el-form-item label="答案解析">
- <v-editor
- v-model="answerAnalysis"
- :enable-audio="false"
- @change="answerAnalysisChange"
- ></v-editor>
- </el-form-item>
- </el-form>
- <question-info-edit
- ref="QuestionInfoEdit"
- :question="modalForm"
- label-width="72px"
- use-course-property-cache
- @change="questionInfoChange"
- ></question-info-edit>
- <div class="ep-question-props-close" @click="unactiveQuestion">
- <i class="el-icon-error"></i>
- </div>
- </div>
- </div>
- </template>
- <script>
- import { getInitQuestionModel } from "./model";
- import QuestionInfoEdit from "../QuestionInfoEdit.vue";
- import QuestionInfoView from "./QuestionInfoView.vue";
- import { mapState, mapMutations } from "vuex";
- import { objTypeOf } from "@/plugins/utils";
- import { isAnEmptyRichText } from "@/utils/utils";
- export default {
- name: "TextAnswerQuestion",
- components: { QuestionInfoEdit, QuestionInfoView },
- props: {
- question: {
- type: Object,
- default() {
- return {};
- },
- },
- },
- data() {
- return {
- modalForm: {},
- quesAnswer: null,
- answerAnalysis: null,
- };
- },
- computed: {
- ...mapState("import-edit", ["curQuestion"]),
- isActive() {
- return this.curQuestion.id === this.question.id;
- },
- },
- created() {
- this.initData();
- },
- methods: {
- ...mapMutations("import-edit", ["setCurQuestion"]),
- initData() {
- this.modalForm = this.$objAssign(getInitQuestionModel(), this.question);
- this.initAnswer(this.question.quesAnswer);
- this.initAnswerAnalysis(this.question.answerAnalysis);
- this.quesAnswer = this.modalForm.quesAnswer[0] || {
- sections: [],
- };
- this.answerAnalysis = this.modalForm.answerAnalysis[0] || {
- sections: [],
- };
- },
- initAnswer(answer) {
- let quesAnswer = [];
- if (answer) {
- try {
- quesAnswer = JSON.parse(answer);
- } catch (err) {
- console.log(`answer error:${answer}`);
- }
- }
- if (this.checkAnswerFormatValid(quesAnswer)) {
- this.modalForm.quesAnswer = quesAnswer.map((item) =>
- isAnEmptyRichText(item)
- ? {
- sections: [],
- }
- : item
- );
- } else {
- this.modalForm.quesAnswer = [];
- }
- },
- initAnswerAnalysis(answer) {
- let answerAnalysis = [];
- if (answer) {
- try {
- answerAnalysis = JSON.parse(answer);
- } catch (err) {
- console.log(`answer error:${answer}`);
- }
- }
- if (this.checkAnswerFormatValid(answerAnalysis)) {
- this.modalForm.answerAnalysis = answerAnalysis.map((item) =>
- isAnEmptyRichText(item)
- ? {
- sections: [],
- }
- : item
- );
- } else {
- this.modalForm.answerAnalysis = [];
- }
- },
- checkAnswerFormatValid(answer) {
- return objTypeOf(answer) === "array";
- },
- answerChange() {
- this.modalForm.quesAnswer = [
- {
- index: 1,
- ...this.quesAnswer,
- },
- ];
- },
- answerAnalysisChange() {
- this.modalForm.answerAnalysis = [
- {
- ...this.answerAnalysis,
- },
- ];
- },
- questionInfoChange(questionInfo) {
- this.modalForm = Object.assign({}, this.modalForm, questionInfo);
- },
- validate() {
- return Promise.resolve(true);
- },
- getData() {
- let data = Object.assign({}, this.question, this.modalForm);
- data.quesAnswer = JSON.stringify(data.quesAnswer);
- data.answerAnalysis =
- data.answerAnalysis && data.answerAnalysis?.length
- ? data.answerAnalysis[0]
- : { sections: [] };
- return data;
- },
- activeQuestion() {
- this.setCurQuestion(this.question);
- },
- unactiveQuestion() {
- this.setCurQuestion({});
- },
- },
- };
- </script>
|