questionModel.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import { deepCopy } from "@/plugins/utils";
  2. export const selectQuestion = {
  3. questionType: "SINGLE_ANSWER_QUESTION", // 2多选
  4. quesBody: null,
  5. quesOptions: [
  6. {
  7. number: 1,
  8. optionBody: null,
  9. },
  10. {
  11. number: 2,
  12. optionBody: null,
  13. },
  14. {
  15. number: 3,
  16. optionBody: null,
  17. },
  18. {
  19. number: 4,
  20. optionBody: null,
  21. },
  22. ],
  23. quesAnswer: null,
  24. comment: null,
  25. };
  26. export const booleanQuestion = {
  27. questionType: "BOOL_ANSWER_QUESTION",
  28. quesBody: null,
  29. quesAnswer: null,
  30. comment: null,
  31. };
  32. export const fillBlankQuestion = {
  33. questionType: "FILL_BLANK_QUESTION",
  34. quesBody: null,
  35. quesAnswer: [
  36. // {
  37. // index: 1,
  38. // sections: [{ blocks: [{ type: "text", value: "" }] }],
  39. // },
  40. ],
  41. comment: null,
  42. };
  43. export const textAnswerQuestion = {
  44. questionType: "TEXT_ANSWER_QUESTION",
  45. quesBody: null,
  46. // only one
  47. quesAnswer: [
  48. // {
  49. // index: 1,
  50. // sections: [{ blocks: [{ type: "text", value: "" }] }],
  51. // },
  52. ],
  53. comment: null,
  54. };
  55. // 完型填空/听力/阅读理解
  56. export const readingComprehensionQuestion = {
  57. questionType: "READING_COMPREHENSION",
  58. quesBody: null,
  59. comment: null,
  60. subQuestions: [],
  61. };
  62. // 段落匹配/选词填空
  63. export const bankedClozeQuestion = {
  64. questionType: "BANKED_CLOZE",
  65. quesBody: null,
  66. comment: null,
  67. subQuestions: [
  68. // {
  69. // number: 1,
  70. // quesAnswer: null,
  71. // difficulty: "易",
  72. // quesProperties: [],
  73. // },
  74. ],
  75. quesOptions: [
  76. {
  77. number: 1,
  78. optionBody: null,
  79. },
  80. {
  81. number: 2,
  82. optionBody: null,
  83. },
  84. ],
  85. param: { matchingMode: 1, matchingType: 1 },
  86. // 段落匹配: "param": { "matchingMode": 2, "matchingType": 2 },
  87. // quesAnswer: [{ number: 1, answer: [8] }],
  88. };
  89. const models = {
  90. SINGLE_ANSWER_QUESTION: selectQuestion,
  91. MULTIPLE_ANSWER_QUESTION: Object.assign({}, selectQuestion, {
  92. questionType: "MULTIPLE_ANSWER_QUESTION",
  93. }),
  94. BOOL_ANSWER_QUESTION: booleanQuestion,
  95. FILL_BLANK_QUESTION: fillBlankQuestion,
  96. TEXT_ANSWER_QUESTION: textAnswerQuestion,
  97. READING_COMPREHENSION: readingComprehensionQuestion,
  98. LISTENING_QUESTION: Object.assign({}, readingComprehensionQuestion, {
  99. questionType: "LISTENING_QUESTION",
  100. }),
  101. CLOZE: Object.assign({}, readingComprehensionQuestion, {
  102. questionType: "CLOZE",
  103. }),
  104. PARAGRAPH_MATCHING: Object.assign({}, bankedClozeQuestion, {
  105. questionType: "PARAGRAPH_MATCHING",
  106. param: { matchingMode: 2, matchingType: 2 },
  107. }),
  108. BANKED_CLOZE: bankedClozeQuestion,
  109. };
  110. export const getInitQuestionModel = (qtype) => {
  111. return {
  112. id: null,
  113. sourceDetailId: "",
  114. courseId: "",
  115. difficulty: "易",
  116. quesProperties: [],
  117. ...deepCopy(models[qtype]),
  118. };
  119. };
  120. export const getMatchQuestionModel = () => {
  121. let matchQuestionModel = getInitQuestionModel("SINGLE_ANSWER_QUESTION");
  122. matchQuestionModel.quesOptions = null;
  123. return matchQuestionModel;
  124. };
  125. export const STRUCT_TYPE_COMP_DICT = {
  126. SINGLE_ANSWER_QUESTION: "select-question",
  127. MULTIPLE_ANSWER_QUESTION: "select-question",
  128. BOOL_ANSWER_QUESTION: "boolean-question",
  129. FILL_BLANK_QUESTION: "fill-blank-question",
  130. TEXT_ANSWER_QUESTION: "text-answer-question",
  131. READING_COMPREHENSION: "nested-question",
  132. LISTENING_QUESTION: "nested-question",
  133. CLOZE: "nested-question",
  134. PARAGRAPH_MATCHING: "banked-cloze-question",
  135. BANKED_CLOZE: "banked-cloze-question",
  136. };