FillBlankQuestion.vue 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div class="fill-blank-question">
  3. <div class="ep-question-title">
  4. <rich-text :text-json="question.body"></rich-text>
  5. </div>
  6. <div class="ep-question-props">
  7. <el-form ref="modalFormComp" :model="modalForm" label-width="100px">
  8. <el-form-item label="答案"></el-form-item>
  9. <el-form-item
  10. v-for="(answer, oindex) in modalForm.answer"
  11. :key="oindex"
  12. >
  13. <div class="question-edit-option">
  14. <div class="option-check">({{ oindex + 1 }})</div>
  15. <div class="option-body">
  16. <v-editor
  17. v-model="answer.body"
  18. :enable-audio="false"
  19. @change="() => answerBodyChange(oindex)"
  20. ></v-editor>
  21. </div>
  22. </div>
  23. </el-form-item>
  24. <el-form-item label="答案解析">
  25. <v-editor
  26. v-model="modalForm.answerAnalysis"
  27. :enable-audio="false"
  28. ></v-editor>
  29. </el-form-item>
  30. </el-form>
  31. <question-info-edit
  32. ref="QuestionInfoEdit"
  33. :question="modalForm"
  34. @change="questionInfoChange"
  35. ></question-info-edit>
  36. </div>
  37. </div>
  38. </template>
  39. <script>
  40. import { getInitQuestionModel } from "../model/questionModel";
  41. import QuestionInfoEdit from "../QuestionInfoEdit.vue";
  42. export default {
  43. name: "FillBlankQuestion",
  44. components: { QuestionInfoEdit },
  45. props: {
  46. question: {
  47. type: Object,
  48. default() {
  49. return {};
  50. },
  51. },
  52. },
  53. data() {
  54. return {
  55. modalForm: {},
  56. };
  57. },
  58. created() {
  59. this.initData();
  60. },
  61. methods: {
  62. initData() {
  63. this.modalForm = this.$objAssign(getInitQuestionModel(), this.question);
  64. this.modalForm.answer = [];
  65. if (!this.question.body || !this.question.body.sections) return;
  66. this.question.body.sections.forEach((section) => {
  67. section.blocks.forEach((block) => {
  68. if (block.type === "cloze")
  69. this.modalForm.answer.push({ body: { sections: [] } });
  70. });
  71. });
  72. },
  73. questionInfoChange(questionInfo) {
  74. this.modalForm = Object.assign({}, this.modalForm, questionInfo);
  75. },
  76. validate() {
  77. return Promise.resolve(true);
  78. },
  79. getData() {
  80. let data = Object.assign({}, this.question, this.modalForm);
  81. data.answer = data.answer.map((item, index) => {
  82. return {
  83. ...item.body,
  84. index,
  85. };
  86. });
  87. data.answer = JSON.stringify(data.answer);
  88. return data;
  89. },
  90. },
  91. };
  92. </script>