NestedQuestionView.vue 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div class="question-view">
  3. <div class="question-body" v-html="question.body"></div>
  4. <!-- <div class="ops">
  5. <div class="stu-answer"> {{stuAnswer}}</div>
  6. <i-button @click="resetQuestion(examQuestion.id)">重置</i-button>
  7. <div class="score">({{question.questionScore}}分)</div>
  8. </div>
  9. <div v-for="(option, index) in question.options" :key="option.id" class="option" @click="toggleAnswer(index)">
  10. <input type="checkbox" name="question" value="optionName[index]" :checked="stuAnswer.includes(optionName[index])" />
  11. <span>{{optionName[index]}}: </span>
  12. <span class="question-options" v-html="option.content"></span>
  13. </div> -->
  14. <template v-if="subQuestion.questionType === 'SINGLE_ANSWER_QUESTION'">
  15. <single-question-view :question="subQuestion" :examQuestion="examQuestion" />
  16. </template>
  17. <template v-if="subQuestion.questionType === 'MULTIPLE_ANSWER_QUESTION'">
  18. <multiple-question-view :question="subQuestion" :examQuestion="examQuestion" />
  19. </template>
  20. <template v-if="subQuestion.questionType === 'BOOL_ANSWER_QUESTION'">
  21. <boolean-question-view :question="subQuestion" :examQuestion="examQuestion" />
  22. </template>
  23. <template v-if="subQuestion.questionType === 'FILL_BLANK_QUESTION'">
  24. <fill-blank-question-view :question="subQuestion" :examQuestion="examQuestion" />
  25. </template>
  26. <template v-if="subQuestion.questionType === 'TEXT_ANSWER_QUESTION'">
  27. <text-question-view :question="subQuestion" :examQuestion="examQuestion" />
  28. </template>
  29. </div>
  30. </template>
  31. <script>
  32. import SingleQuestionView from "./SingleQuestionView";
  33. import MultipleQuestionView from "./MultipleQuestionView";
  34. import BooleanQuestionView from "./BooleanQuestionView";
  35. import FillBlankQuestionView from "./FillBlankQuestionView";
  36. import TextQuestionView from "./TextQuestionView";
  37. export default {
  38. name: "NestedQuestionView",
  39. data() {
  40. return {
  41. subQuestion: this.question.subQuestionList[
  42. this.examQuestion.subNumber - 1
  43. ]
  44. };
  45. },
  46. props: {
  47. question: Object,
  48. examQuestion: Object
  49. },
  50. methods: {
  51. answerQuestion: function() {
  52. this.$http.put("/api/exam_question/" + this.examQuestion.id, {
  53. stuAnswer: this.stuAnswer
  54. });
  55. },
  56. resetQuestion: function(examQuestionId) {
  57. this.stuAnswer = "";
  58. this.$http.put("/api/exam_question/" + examQuestionId, {
  59. stuAnswer: null
  60. });
  61. }
  62. },
  63. watch: {},
  64. components: {
  65. SingleQuestionView,
  66. MultipleQuestionView,
  67. BooleanQuestionView,
  68. FillBlankQuestionView,
  69. TextQuestionView
  70. }
  71. };
  72. </script>
  73. <style scoped>
  74. .question-view {
  75. display: block;
  76. }
  77. .ops {
  78. display: flex;
  79. align-items: flex-end;
  80. }
  81. .stu-answer {
  82. width: 100px;
  83. border-bottom: 1px solid black;
  84. }
  85. .option {
  86. display: flex;
  87. }
  88. .question-options {
  89. text-align: left;
  90. padding-left: 10px;
  91. }
  92. </style>