Browse Source

做题历史答案回显

shmily1213 1 tháng trước cách đây
mục cha
commit
6bc6f41b8d

+ 8 - 0
src/api/modules/study.ts

@@ -107,3 +107,11 @@ export function commitExamineePaper(params: ExamPaperSubmit) {
 export function getSimulationInfo() {
   return flyio.get('/front/student/simulated/info') as Promise<ApiResponse<SimulationTestInfo>>;
 }
+
+
+/**
+ * 收藏题目
+ */
+export function collectQuestion(questionId: number) {
+  return flyio.post('/front/questions/collect/', null, { params: { questionId } }) as Promise<ApiResponse<any>>;
+}

+ 7 - 3
src/composables/useExam.ts

@@ -205,7 +205,7 @@ export const useExam = () => {
         title: item.title,
         typeId: item.typeId,
         id: item.id,
-        answers: [],
+        answers: item.answers || [],
         subQuestions: item.subQuestions?.map(parseQuestion) || [],
         options: item.options.map((option, index) => {
           return {
@@ -215,19 +215,23 @@ export const useExam = () => {
             isAnswer: false
           } as Study.QuestionOption
         }),
-        isDone: false
+        isDone: false,
+        isMark: item.isMark,
+        isNotKnow: item.isNotKnow,
+        isFavorite: item.isFavorite
       } as Study.Question
     }
     const arr: Study.Question[] = list.map(item => {
       return parseQuestion(item);
     });
+    console.log(222, arr)
     questionList.value = arr;
   }
   const reset = () => {
     questionList.value = questionList.value.map(item => {
       return {
         ...item,
-        answer: [],
+        answers: [],
         isMark: false,
         isNotKnow: false
       } as Study.Question;

+ 35 - 10
src/pagesStudy/pages/start-exam/start-exam.vue

@@ -94,12 +94,12 @@
 import QuestionItem from './components/question-item.vue';
 import QuestionStatsPopup from './components/question-stats-popup.vue';
 import { useTransferPage } from '@/hooks/useTransferPage';
-import { EnumExamMode, EnumQuestionType } from '@/common/enum';
-import { getOpenExaminee, getPaper, commitExamineePaper } from '@/api/modules/study';
+import { EnumExamMode } from '@/common/enum';
+import { getOpenExaminee, getPaper, commitExamineePaper, collectQuestion } from '@/api/modules/study';
 import { useExam } from '@/composables/useExam';
 import { Study } from '@/types';
 import { NEXT_QUESTION, PREV_QUESTION, NEXT_QUESTION_QUICKLY, PREV_QUESTION_QUICKLY } from '@/types/injectionSymbols';
-import { Examinee, ExamPaper, ExamPaperSubmit } from '@/types/study';
+// import { Examinee, ExamPaper, ExamPaperSubmit } from '@/types/study';
 const { prevData, transferBack } = useTransferPage();
 const { setQuestionList, questionList, stateQuestionList, questionTypeDesc, favoriteList, notKnowList, markList, currentIndex,
   totalCount, doneCount, notDoneCount, notKnowCount, markCount, isAllDone,
@@ -118,8 +118,8 @@ const transitionEndX = ref(null);
 const isReady = ref(false);
 // 自动提交只提醒1次
 const hasShowSubmitConfirm = ref(false);
-const examineerData = ref<Examinee>({} as Examinee);
-const paperData = ref<ExamPaper>({} as ExamPaper);
+const examineerData = ref<Study.Examinee>({} as Study.Examinee);
+const paperData = ref<Study.ExamPaper>({} as Study.ExamPaper);
 const pageTitle = computed(() => {
   const { mode } = prevData.value;
   return mode === EnumExamMode.PRACTICE ? '练习' : '考试';
@@ -162,8 +162,11 @@ const currentQuestion = computed(() => {
 const hanadleNavigate = (index: number) => {
   changeIndex(index);
 }
-const handleFavorite = () => {
-  currentQuestion.value.isFavorite = !currentQuestion.value.isFavorite;
+const handleFavorite = async () => {
+  if (!currentQuestion.value.isFavorite) {
+    await collectQuestion(currentQuestion.value.id);
+  }
+  // currentQuestion.value.isFavorite = !currentQuestion.value.isFavorite;
 };
 const handleMark = () => {
   currentQuestion.value.isMark = !currentQuestion.value.isMark;
@@ -275,7 +278,7 @@ const handleSubmit = (tempSave: boolean = false) => {
       }),
       examineeId: examineerData.value.examineeId,
       isDone: isAllDone.value
-    } as ExamPaperSubmit;
+    } as Study.ExamPaperSubmit;
     if (!isExamMode.value) {
       params.duration = practiceDuration.value;
     }
@@ -290,7 +293,27 @@ const handleUpdateQuestion = (question: Study.Question) => {
     autoSubmit();
   }
 }
-
+/**
+ * 恢复上次做题历史数据
+ * @param savedQuestion 上次做题历史数据
+ * @param fullQuestion 当前试卷数据
+ */
+const restoreQuestion = (savedQuestion: Study.ExamineeQuestion[], fullQuestion: Study.ApiQuestion[]) => {
+  console.log(savedQuestion, fullQuestion)
+  for (const item of fullQuestion) {
+    const savedQs = savedQuestion.find(q => q.id === item.id);
+    if (savedQs) {
+      item.answers = savedQs.answers.filter(ans => ans.trim());
+      item.isMark = savedQs.isMark;
+      item.isFavorite = savedQs.isFavorite;
+      item.isNotKnow = savedQs.isNotKnow;
+      if (item.subQuestions) {
+        restoreQuestion(savedQs.subQuestions, item.subQuestions);
+      }
+    }
+  }
+  return fullQuestion;
+}
 const loadData = async () => {
   uni.$ie.showLoading();
   const { data } = await getOpenExaminee({
@@ -308,10 +331,12 @@ const loadData = async () => {
       type: prevData.value.paperType,
       id: data.paperId
     });
+    // const savedQuestionList = res.data.questions;
     uni.$ie.hideLoading();
     paperData.value = res.data;
+    paperData.value.questions = restoreQuestion(data.questions, res.data.questions);
     setQuestionList(paperData.value.questions)
-    // console.log(123, paperData)
+    console.log(123, paperData.value.questions)
     // loadExamData(prevData.value.paperType, data.paperId);
   }
   isReady.value = true;

+ 1 - 1
src/pagesStudy/pages/study-plan-edit/study-plan-edit.vue

@@ -79,7 +79,7 @@ const handleConfirm = async () => {
   uni.$ie.showToast('保存成功');
   setTimeout(() => {
     uni.navigateBack();
-  }, 500);
+  }, 800);
 }
 
 onLoad(() => {

+ 0 - 1
src/pagesStudy/pages/study-plan/study-plan.vue

@@ -40,7 +40,6 @@ const loadData = async () => {
     reportMonth: today
   });
   studyPlanStats.value = data;
-  console.log('学习计划统计数据:', data)
 }
 onShow(() => {
   loadData();

+ 10 - 7
src/types/study.ts

@@ -108,18 +108,21 @@ export interface QuestionState {
 /**
  * 开卷信息
  */
+export interface ExamineeQuestion {
+  id: number;
+  title: string;
+  isFavorite: boolean;
+  isMark: boolean;
+  isNotKnow: boolean;
+  answers: string[];
+  subQuestions: ExamineeQuestion[];
+}
 export interface Examinee {
   examineeId: number;
   name: string;
   paperId: number;
   duration: number;
-  questions: {
-    id: number;
-    title: string;
-    isFavorite: boolean;
-    isMark: boolean;
-    isNotKnow: boolean;
-  }[];
+  questions: ExamineeQuestion[];
 }
 
 /**