BooleanQuestion.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <div class="boolean-question">
  3. <div
  4. :class="['ep-question-content', { 'is-active': isActive }]"
  5. @click="activeQuestion"
  6. >
  7. <div class="ep-question-title">
  8. <span class="ep-question-title-number">{{ question.number }}.</span>
  9. <rich-text :text-json="question.body"></rich-text>
  10. </div>
  11. <question-info-view
  12. v-if="!isActive"
  13. :question="getData()"
  14. ></question-info-view>
  15. </div>
  16. <div v-if="isActive" class="ep-question-props">
  17. <el-form ref="modalFormComp" :model="modalForm" label-width="72px">
  18. <el-form-item prop="quesAnswer" label="答案">
  19. <el-radio-group v-model="modalForm.quesAnswer" @change="answerChange">
  20. <el-radio
  21. v-for="option in answerOptions"
  22. :key="option.value"
  23. :label="option.value"
  24. >
  25. {{ option.label }}
  26. </el-radio>
  27. </el-radio-group>
  28. </el-form-item>
  29. <el-form-item label="答案解析">
  30. <v-editor
  31. v-model="modalForm.answerAnalysis"
  32. :enable-audio="false"
  33. ></v-editor>
  34. </el-form-item>
  35. </el-form>
  36. <question-info-edit
  37. ref="QuestionInfoEdit"
  38. :question="modalForm"
  39. label-width="72px"
  40. use-course-property-cache
  41. @change="questionInfoChange"
  42. ></question-info-edit>
  43. <div class="ep-question-props-close" @click="unactiveQuestion">
  44. <i class="el-icon-error"></i>
  45. </div>
  46. </div>
  47. </div>
  48. </template>
  49. <script>
  50. import { getInitQuestionModel } from "./model";
  51. import QuestionInfoEdit from "../QuestionInfoEdit.vue";
  52. import QuestionInfoView from "./QuestionInfoView.vue";
  53. import { mapState, mapMutations } from "vuex";
  54. export default {
  55. name: "BooleanQuestion",
  56. components: { QuestionInfoEdit, QuestionInfoView },
  57. props: {
  58. question: {
  59. type: Object,
  60. default() {
  61. return {};
  62. },
  63. },
  64. },
  65. data() {
  66. return {
  67. modalForm: {},
  68. answerOptions: [
  69. {
  70. value: "false",
  71. label: "错误",
  72. },
  73. {
  74. value: "true",
  75. label: "正确",
  76. },
  77. ],
  78. };
  79. },
  80. computed: {
  81. ...mapState("import-edit", ["curQuestion"]),
  82. isActive() {
  83. return this.curQuestion.id === this.question.id;
  84. },
  85. },
  86. created() {
  87. this.initData();
  88. },
  89. methods: {
  90. ...mapMutations("import-edit", ["setCurQuestion"]),
  91. initData() {
  92. this.modalForm = this.$objAssign(getInitQuestionModel(), this.question);
  93. const validAnswer = ["true", "false"];
  94. this.modalForm.quesAnswer = validAnswer.includes(
  95. this.modalForm.quesAnswer
  96. )
  97. ? this.modalForm.quesAnswer
  98. : null;
  99. },
  100. answerChange() {
  101. this.$refs.modalFormComp.validateField(`answer`, () => {});
  102. },
  103. questionInfoChange(questionInfo) {
  104. this.modalForm = Object.assign({}, this.modalForm, questionInfo);
  105. },
  106. validate() {
  107. return this.$refs.modalFormComp.validate();
  108. },
  109. getData() {
  110. let data = Object.assign({}, this.question, this.modalForm);
  111. return data;
  112. },
  113. activeQuestion() {
  114. this.setCurQuestion(this.question);
  115. },
  116. unactiveQuestion() {
  117. this.setCurQuestion({});
  118. },
  119. },
  120. };
  121. </script>