123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- import { ref, watch, onBeforeMount, Ref, computed, nextTick, ComputedRef } from "vue";
- import { CollectionModel } from "@/model/collection";
- import { RouterBus } from "@/hooks";
- import { Notify } from "vant";
- import { isArrSubset } from "@/utils/utils";
- import store from "@/store";
- /**错题与收藏 */
- export const useSubjectCheck = (currentSubject: ComputedRef<Test.QuestionInfo>, nextSubject: () => Promise<void>, _type?: ExerciseType.ListType) => {
- const trueNum = ref(0); //正确数量
- const falseNum = ref(0); //错误数量
- const skillsShow = ref(false); //显示技巧讲解
- const officialShow = ref(false); //显示官方解释
- const isJumpNext = ref(false); //答对跳转下一题
- const wrongModel = new CollectionModel("wrong");
- const collectionModel = new CollectionModel("collection");
- const {
- route: { query },
- } = new RouterBus();
- const subject = query.subject
- /** 批量新增收藏 */
- const addsCullection = async (ids: number[]) => {
- const questionList = ids.map((id) => {
- return {
- carType: query.vehicle as CollectionAndWrongType.CarType,
- km: query.name as CollectionAndWrongType.Km,
- questionId: id,
- };
- });
- collectionModel.adds(questionList);
- };
- /** 收藏当前题目 */
- const addCurrentQuestion = async () => {
- const res = await collectionModel.adds([
- {
- carType: query.vehicle as CollectionAndWrongType.CarType,
- km: query.name as CollectionAndWrongType.Km,
- questionId: currentSubject.value.id,
- },
- ]);
- if (res.data == 1) {
- currentSubject.value.isCollection = true;
- Notify({ type: "success", message: "收藏成功" });
- } else {
- currentSubject.value.isCollection = true;
- Notify({ type: "primary", message: res.msg });
- }
- };
- /**
- * 选择答案后进行校验
- */
- const userAnswerChange = () => {
- console.log(currentSubject.value);
- let isAllTrue = true
- currentSubject.value.optsBack = currentSubject.value.opts.map((val: String) => {
- let status;
- let answers = currentSubject.value.answer.split("-")
- if (Array.isArray(currentSubject.value.userAnswer)) {
- // if (currentSubject.value.answer.includes(val)) {
- // status = 1;
- // } else {
- // status = 0;
- // }
- if (answers.includes(val)) {
- status = 3;
- }
- else if (!answers.includes(val) && JSON.stringify(answers.sort()) == JSON.stringify(currentSubject.value.userAnswer.sort())) {
- status = 0;
- }
- else {
- //状态2是错误的
- isAllTrue = false
- status = 2
- }
- } else {
- if (currentSubject.value.answer === val) {
- status = 1;
- } else {
- status = 0;
- }
- if (currentSubject.value.userAnswer === val) {
- //状态2是错误的
- isAllTrue = false
- status += 2;
- }
- }
- return { opt: val, status };
- });
- //正确已经在别处处理了
- let answers = currentSubject.value.answer.split("-")
- // console.log(JSON.stringify(currentSubject.value.answer.split("-")),JSON.stringify(currentSubject.value.userAnswer))
- //统一使用数组进行检查,单项时候currentSubject.value.userAnswer为string,需转化为数组进行比对
- if (JSON.stringify(answers.sort()) == JSON.stringify(typeof currentSubject.value.userAnswer === 'string' ? [currentSubject.value.userAnswer] : currentSubject.value.userAnswer.sort())) {
- //答案正确
- //类型是错误时候不显示对错
- _type == "localWrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = true
- trueNum.value++;
- if (isJumpNext.value) {
- nextTick(() => {
- nextSubject();
- });
- }
- } else {
- falseNum.value++;
- let localVuex = JSON.parse(window.localStorage.getItem('vuex') || '{}')
- let userWrongKey = localVuex.userData.openid + '_用户错题id_' + subject
- let userWrongIds: { id: number, timestamp: number }[] = JSON.parse(window.localStorage.getItem(userWrongKey) || "[]")
- if (
- userWrongIds.some(item => {
- return item.id === currentSubject.value.id
- })
- ) {
- }
- else{
- userWrongIds.push({
- id:currentSubject.value.id,
- timestamp:+ new Date()
- })
- }
- // if(userWrongIds.some(item=>{
- // return item.id === currentSubject.value.id
- // }))
- // else{
- // }
- window.localStorage.setItem(userWrongKey, "[]");
- //答案错误
- // wrongModel.adds([
- // {
- // carType: query.vehicle as CollectionAndWrongType.CarType,
- // km: query.name as CollectionAndWrongType.Km,
- // questionId: currentSubject.value.id,
- // },
- // ]);
- //类型是错误时候不显示对错
- _type == "localWrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = false
- //vip才显示错误解析
- if (store.getters.getIsVip) {
- skillsShow.value = true;
- }
- }
- };
- return {
- trueNum,
- skillsShow,
- officialShow,
- falseNum,
- isJumpNext,
- userAnswerChange,
- addCurrentQuestion,
- };
- };
|