paperStruct.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { getFillBackClozeCount } from "./paperCard";
  2. const COMMON_QUESTION_TYPES = [
  3. "SINGLE_ANSWER_QUESTION",
  4. "MULTIPLE_ANSWER_QUESTION",
  5. "BOOL_ANSWER_QUESTION",
  6. "FILL_BLANK_QUESTION",
  7. "TEXT_ANSWER_QUESTION",
  8. ];
  9. // paper json
  10. export function getPaperJsonSimpleStructInfo(paperJson) {
  11. let struct = [];
  12. paperJson.paperDetails.forEach((detail) => {
  13. struct.push(`detail:${detail.number}-${detail.name}`);
  14. detail.paperDetailUnits.forEach((question) => {
  15. if (COMMON_QUESTION_TYPES.includes(question.questionType)) {
  16. question.question.number = question.number;
  17. const info = parseCommonTypeQuestion(question.question);
  18. struct.push(`${detail.number}-${info}`);
  19. } else {
  20. let infos = parseNestedTypeQuestion(question);
  21. infos.forEach((info) => {
  22. struct.push(`${detail.number}-${info}`);
  23. });
  24. }
  25. });
  26. });
  27. return struct.join("#");
  28. }
  29. function parseCommonTypeQuestion(question) {
  30. const structType = question.questionType;
  31. let info = `${question.number}:${structType}`;
  32. const choiceQs = ["SINGLE_ANSWER_QUESTION", "MULTIPLE_ANSWER_QUESTION"];
  33. if (choiceQs.includes(structType)) {
  34. info += `:${question.quesOptions.length}`;
  35. } else if (structType === "FILL_BLANK_QUESTION") {
  36. info += `:${getFillBackClozeCount(question.quesOptions)}`;
  37. } else {
  38. info += ":";
  39. }
  40. return info;
  41. }
  42. function parseNestedTypeQuestion(question) {
  43. let struct = [];
  44. let qinfo = `${question.number}`;
  45. question.question.subQuestions.forEach((subq, sindex) => {
  46. subq.number = sindex + 1;
  47. const info = parseCommonTypeQuestion(subq);
  48. struct.push(`${qinfo}-${info}`);
  49. });
  50. return struct;
  51. }
  52. // paper struct
  53. export function getPaperStructSimpleStructInfo(paperStruct) {
  54. let struct = [];
  55. paperStruct.details.forEach((detail) => {
  56. struct.push(`detail:${detail.number}-${detail.name}`);
  57. detail.units.forEach((question) => {
  58. if (COMMON_QUESTION_TYPES.includes(question.type)) {
  59. const info = parseStructCommonTypeQuestion(question);
  60. struct.push(`${detail.number}-${info}`);
  61. }
  62. });
  63. });
  64. return struct.join("#");
  65. }
  66. function parseStructCommonTypeQuestion(question) {
  67. const structType = question.type;
  68. let info = `${question.number}:${structType}`;
  69. const choiceQs = ["SINGLE_ANSWER_QUESTION", "MULTIPLE_ANSWER_QUESTION"];
  70. if (choiceQs.includes(structType)) {
  71. info += `:4`;
  72. } else if (structType === "FILL_BLANK_QUESTION") {
  73. info += `:1`;
  74. } else {
  75. info += ":";
  76. }
  77. return info;
  78. }