wrong.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. import { ref, watch, onBeforeMount, Ref, computed, nextTick, ComputedRef } from "vue";
  2. import { CollectionModel } from "@/model/collection";
  3. import { RouterBus } from "@/hooks";
  4. import { Notify } from "vant";
  5. import { isArrSubset } from "@/utils/utils";
  6. import store from "@/store";
  7. /**错题与收藏 */
  8. export const useSubjectCheck = (currentSubject: ComputedRef<Test.QuestionInfo>, nextSubject: () => Promise<void>, _type?: ExerciseType.ListType) => {
  9. const trueNum = ref(0); //正确数量
  10. const falseNum = ref(0); //错误数量
  11. const skillsShow = ref(false); //显示技巧讲解
  12. const officialShow = ref(false); //显示官方解释
  13. const isJumpNext = ref(false); //答对跳转下一题
  14. const wrongModel = new CollectionModel("wrong");
  15. const collectionModel = new CollectionModel("collection");
  16. const {
  17. route: { query },
  18. } = new RouterBus();
  19. const subject = query.subject
  20. /** 批量新增收藏 */
  21. const addsCullection = async (ids: number[]) => {
  22. const questionList = ids.map((id) => {
  23. return {
  24. carType: query.vehicle as CollectionAndWrongType.CarType,
  25. km: query.name as CollectionAndWrongType.Km,
  26. questionId: id,
  27. };
  28. });
  29. collectionModel.adds(questionList);
  30. };
  31. /** 收藏当前题目 */
  32. const addCurrentQuestion = async () => {
  33. const res = await collectionModel.adds([
  34. {
  35. carType: query.vehicle as CollectionAndWrongType.CarType,
  36. km: query.name as CollectionAndWrongType.Km,
  37. questionId: currentSubject.value.id,
  38. },
  39. ]);
  40. if (res.data == 1) {
  41. currentSubject.value.isCollection = true;
  42. Notify({ type: "success", message: "收藏成功" });
  43. } else {
  44. currentSubject.value.isCollection = true;
  45. Notify({ type: "primary", message: res.msg });
  46. }
  47. };
  48. /**
  49. * 选择答案后进行校验
  50. */
  51. const userAnswerChange = () => {
  52. console.log(currentSubject.value);
  53. let isAllTrue = true
  54. currentSubject.value.optsBack = currentSubject.value.opts.map((val: String) => {
  55. let status;
  56. let answers = currentSubject.value.answer.split("-")
  57. if (Array.isArray(currentSubject.value.userAnswer)) {
  58. // if (currentSubject.value.answer.includes(val)) {
  59. // status = 1;
  60. // } else {
  61. // status = 0;
  62. // }
  63. if (answers.includes(val)) {
  64. status = 3;
  65. }
  66. else if (!answers.includes(val) && JSON.stringify(answers.sort()) == JSON.stringify(currentSubject.value.userAnswer.sort())) {
  67. status = 0;
  68. }
  69. else {
  70. //状态2是错误的
  71. isAllTrue = false
  72. status = 2
  73. }
  74. } else {
  75. if (currentSubject.value.answer === val) {
  76. status = 1;
  77. } else {
  78. status = 0;
  79. }
  80. if (currentSubject.value.userAnswer === val) {
  81. //状态2是错误的
  82. isAllTrue = false
  83. status += 2;
  84. }
  85. }
  86. return { opt: val, status };
  87. });
  88. //正确已经在别处处理了
  89. let answers = currentSubject.value.answer.split("-")
  90. // console.log(JSON.stringify(currentSubject.value.answer.split("-")),JSON.stringify(currentSubject.value.userAnswer))
  91. //统一使用数组进行检查,单项时候currentSubject.value.userAnswer为string,需转化为数组进行比对
  92. if (JSON.stringify(answers.sort()) == JSON.stringify(typeof currentSubject.value.userAnswer === 'string' ? [currentSubject.value.userAnswer] : currentSubject.value.userAnswer.sort())) {
  93. //答案正确
  94. //类型是错误时候不显示对错
  95. _type == "localWrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = true
  96. trueNum.value++;
  97. if (isJumpNext.value) {
  98. nextTick(() => {
  99. nextSubject();
  100. });
  101. }
  102. } else {
  103. falseNum.value++;
  104. let localVuex = JSON.parse(window.localStorage.getItem('vuex') || '{}')
  105. let userWrongKey = localVuex.userData.openid + '_用户错题id_' + subject
  106. let userWrongIds: { id: number, timestamp: number }[] = JSON.parse(window.localStorage.getItem(userWrongKey) || "[]")
  107. if (
  108. userWrongIds.some(item => {
  109. return item.id === currentSubject.value.id
  110. })
  111. ) {
  112. }
  113. else{
  114. userWrongIds.push({
  115. id:currentSubject.value.id,
  116. timestamp:+ new Date()
  117. })
  118. }
  119. // if(userWrongIds.some(item=>{
  120. // return item.id === currentSubject.value.id
  121. // }))
  122. // else{
  123. // }
  124. window.localStorage.setItem(userWrongKey, "[]");
  125. //答案错误
  126. // wrongModel.adds([
  127. // {
  128. // carType: query.vehicle as CollectionAndWrongType.CarType,
  129. // km: query.name as CollectionAndWrongType.Km,
  130. // questionId: currentSubject.value.id,
  131. // },
  132. // ]);
  133. //类型是错误时候不显示对错
  134. _type == "localWrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = false
  135. //vip才显示错误解析
  136. if (store.getters.getIsVip) {
  137. skillsShow.value = true;
  138. }
  139. }
  140. };
  141. return {
  142. trueNum,
  143. skillsShow,
  144. officialShow,
  145. falseNum,
  146. isJumpNext,
  147. userAnswerChange,
  148. addCurrentQuestion,
  149. };
  150. };