exam.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { defineStore } from 'pinia'
  2. import subjectApi from '@/api/exam/paper/subject.js'
  3. const format = function (array, key) {
  4. for (let item of array) {
  5. if (item.key === key) {
  6. return item.value
  7. }
  8. }
  9. return null
  10. }
  11. export const useExamStore = defineStore('exam', {
  12. state: () => ({
  13. // 学科相关
  14. subjects: [],
  15. // 枚举相关
  16. user: {
  17. sexEnum: [
  18. { key: 1, value: '男' },
  19. { key: 2, value: '女' }
  20. ],
  21. statusEnum: [
  22. { key: 1, value: '启用' },
  23. { key: 2, value: '禁用' }
  24. ],
  25. levelEnum: [
  26. { key: 1, value: '一年级' },
  27. { key: 2, value: '二年级' },
  28. { key: 3, value: '三年级' },
  29. { key: 4, value: '四年级' },
  30. { key: 5, value: '五年级' },
  31. { key: 6, value: '六年级' },
  32. { key: 7, value: '初一' },
  33. { key: 8, value: '初二' },
  34. { key: 9, value: '初三' },
  35. { key: 10, value: '高一' },
  36. { key: 11, value: '高二' },
  37. { key: 12, value: '高三' }
  38. ],
  39. roleEnum: [
  40. { key: 1, value: '学生' },
  41. { key: 2, value: '教师' },
  42. { key: 3, value: '管理员' }
  43. ],
  44. statusTag: [
  45. { key: 1, value: 'success' },
  46. { key: 2, value: 'danger' }
  47. ],
  48. statusBtn: [
  49. { key: 1, value: '禁用' },
  50. { key: 2, value: '启用' }
  51. ]
  52. },
  53. exam: {
  54. examPaper: {
  55. paperTypeEnum: [
  56. { key: 1, value: '固定试卷' },
  57. { key: 4, value: '时段试卷' },
  58. { key: 6, value: '任务试卷' }
  59. ]
  60. },
  61. question: {
  62. typeEnum: [
  63. { key: 1, value: '单选题' },
  64. { key: 2, value: '多选题' },
  65. { key: 3, value: '判断题' },
  66. { key: 4, value: '填空题' },
  67. { key: 5, value: '简答题' }
  68. ],
  69. editUrlEnum: [
  70. { key: 1, value: './edit/single-choice.vue', name: '单选题' },
  71. { key: 2, value: './edit/multiple-choice.vue', name: '多选题' },
  72. { key: 3, value: './edit/true-false.vue', name: '判断题' },
  73. { key: 4, value: './edit/gap-filling.vue', name: '填空题' },
  74. { key: 5, value: './edit/short-answer.vue', name: '简答题' }
  75. ]
  76. }
  77. }
  78. }),
  79. getters: {
  80. // 枚举格式化
  81. enumFormat: (state) => (array, key) => format(array, key),
  82. levelEnum: (state) => state.user.levelEnum,
  83. paperTypeEnum: (state) => state.exam.examPaper.paperTypeEnum,
  84. questionTypeEnum: (state) => state.exam.question.typeEnum,
  85. // 学科格式化
  86. subjectEnumFormat: (state) => (key) => {
  87. for (let item of state.subjects) {
  88. if (item.id === key) {
  89. return item.name + ' ( ' + item.levelName + ' )'
  90. }
  91. }
  92. return null
  93. },
  94. getLevelEnum: (state) => state.user.levelEnum
  95. },
  96. actions: {
  97. async initSubject(action) {
  98. const re = await subjectApi.list()
  99. this.subjects = re
  100. if (action !== undefined) {
  101. action()
  102. }
  103. }
  104. }
  105. })