wrong.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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<any>, 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. /** 批量新增收藏 */
  20. const addsCullection = async (ids: number[]) => {
  21. const questionList = ids.map((id) => {
  22. return {
  23. carType: query.vehicle as CollectionAndWrongType.CarType,
  24. km: query.name as CollectionAndWrongType.Km,
  25. questionId: id,
  26. };
  27. });
  28. collectionModel.adds(questionList);
  29. };
  30. /** 收藏当前题目 */
  31. const addCurrentQuestion = async () => {
  32. const res = await collectionModel.adds([
  33. {
  34. carType: query.vehicle as CollectionAndWrongType.CarType,
  35. km: query.name as CollectionAndWrongType.Km,
  36. questionId: currentSubject.value.id,
  37. },
  38. ]);
  39. if (res.data == 1) {
  40. currentSubject.value.isCollection = true;
  41. Notify({ type: "success", message: "收藏成功" });
  42. } else {
  43. currentSubject.value.isCollection = true;
  44. Notify({ type: "primary", message: res.msg });
  45. }
  46. };
  47. /**
  48. * 选择答案后进行校验
  49. */
  50. const userAnswerChange = () => {
  51. console.log(currentSubject.value);
  52. let isAllTrue = true
  53. currentSubject.value.optsBack = currentSubject.value.opts.map((val: String) => {
  54. let status;
  55. let answers = currentSubject.value.answer.split("-")
  56. if (Array.isArray(currentSubject.value.userAnswer)) {
  57. // if (currentSubject.value.answer.includes(val)) {
  58. // status = 1;
  59. // } else {
  60. // status = 0;
  61. // }
  62. if (answers.includes(val)) {
  63. status = 3;
  64. }
  65. else if (!answers.includes(val) && JSON.stringify(answers.sort()) == JSON.stringify(currentSubject.value.userAnswer.sort())) {
  66. status = 0;
  67. }
  68. else {
  69. status = 2
  70. }
  71. } else {
  72. if (currentSubject.value.answer === val) {
  73. status = 1;
  74. } else {
  75. status = 0;
  76. }
  77. if (currentSubject.value.userAnswer === val) {
  78. status += 2;
  79. }
  80. }
  81. return { opt: val, status };
  82. });
  83. if (JSON.stringify(currentSubject.value.answer) == JSON.stringify(currentSubject.value.userAnswer)) {
  84. //答案正确
  85. //类型是错误时候不显示对错
  86. _type == "localWrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = true
  87. trueNum.value++;
  88. if (isJumpNext.value) {
  89. nextTick(() => {
  90. nextSubject();
  91. });
  92. }
  93. } else {
  94. //答案错误
  95. wrongModel.adds([
  96. {
  97. carType: query.vehicle as CollectionAndWrongType.CarType,
  98. km: query.name as CollectionAndWrongType.Km,
  99. questionId: currentSubject.value.id,
  100. },
  101. ]);
  102. //类型是错误时候不显示对错
  103. _type == "localWrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = false
  104. //vip才显示错误解析
  105. if (store.getters.getIsVip) {
  106. skillsShow.value = true;
  107. }
  108. falseNum.value++;
  109. }
  110. };
  111. return {
  112. trueNum,
  113. skillsShow,
  114. officialShow,
  115. falseNum,
  116. isJumpNext,
  117. userAnswerChange,
  118. addCurrentQuestion,
  119. };
  120. };