浏览代码

对口升学做题对接

shmily1213 1 周之前
父节点
当前提交
f4463aff5f

+ 9 - 1
src/api/modules/study.ts

@@ -1,6 +1,6 @@
 import { ApiResponse, ApiResponseList } from "@/types";
 import flyio from "../flyio";
-import { Batch, ClassKnowledgeRecord, DirectedSchool, Examinee, ExamPaper, ExamPaperSubmit, GetExamPaperRequestDTO, Knowledge, KnowledgeListRequestDTO, KnowledgeRecord, OpenExamineeRequestDTO, PaperWork, PaperWorkRecord, PaperWorkRecordDetail, PaperWorkRecordQuery, PracticeHistory, PracticeRecord, SimulatedRecord, SimulationExamSubject, SimulationTestInfo, StudentExamRecord, StudentPlanStudyRecord, StudentVideoRecord, StudyPlan, Subject, SubjectListRequestDTO, TeachClass, VideoStudy } from "@/types/study";
+import { Batch, ClassKnowledgeRecord, DirectedSchool, Examinee, ExamPaper, ExamPaperSubmit, GetExamPaperRequestDTO, Knowledge, KnowledgeListRequestDTO, KnowledgeRecord, OpenExamineeRequestDTO, PaperWork, PaperWorkRecord, PaperWorkRecordDetail, PaperWorkRecordQuery, PracticeHistory, PracticeRecord, SimulatedRecord, SimulationExamSubject, SimulationTestInfo, StudentExamRecord, StudentPlanStudyRecord, StudentVideoRecord, StudyPlan, Subject, SubjectListRequestDTO, TeachClass, VHSPaperListRequestDTO, VideoStudy } from "@/types/study";
 import { EnumPaperWorkState } from "@/common/enum";
 
 /**
@@ -116,6 +116,14 @@ export function getExamineeResult(examineeId: number) {
   return flyio.get('/front/exam/loadExaminee', { examineeId }) as Promise<ApiResponse<Examinee>>;
 }
 
+/**
+ * 对口升学-获取真题&模拟试卷
+ * @param params 
+ * @returns 
+ */
+export function getVHSPaperList(params: VHSPaperListRequestDTO) {
+  return flyio.get('/front/paper/list', params) as Promise<ApiResponse<any[]>>;
+}
 
 /**
  * 获取模拟考试信息

+ 18 - 4
src/pagesStudy/pages/exam-start/components/exam-subtitle.vue

@@ -17,11 +17,25 @@ const examData = inject(EXAM_DATA) || {} as ReturnType<typeof useExam>;
 const { virtualCurrentIndex, virtualTotalCount } = examData;
 
 const pageSubtitle = computed(() => {
-  if (examPageOptions) {
-    const { name } = examPageOptions;
-    return name;
+  if (!examPageOptions || !examPageOptions.practiceInfo) {
+    return '知识点练习';
   }
-  return '';
+  const { practiceInfo: { isVHS, directed, questionType, name } } = examPageOptions;
+  let titlePrefix = '';
+  if (isVHS) {
+    if (questionType === 0) {
+      titlePrefix = '知识点练习';
+    } else if (questionType === 2) {
+      titlePrefix = '必刷题';
+    }
+  } else {
+    if (directed) {
+      titlePrefix = '定向刷题';
+    } else {
+      titlePrefix = '全量刷题';
+    }
+  }
+  return titlePrefix + '-' + name;
 });
 </script>
 <style lang="scss" scoped></style>

+ 11 - 4
src/pagesStudy/pages/exam-start/exam-start.vue

@@ -222,7 +222,8 @@ const handleSubmit = (tempSave: boolean = false) => {
               paperType: prevData.value.paperType,
               examineeId: examineeId.value,
               name: prevData.value.practiceInfo?.name,
-              directed: prevData.value.practiceInfo?.directed
+              directed: prevData.value.practiceInfo?.directed,
+              questionType: prevData.value.practiceInfo?.questionType
             } as Transfer.PracticeResultPageOptions,
             type: 'redirectTo'
           });
@@ -276,11 +277,17 @@ const loadPracticeData = async () => {
       data = res.data;
     }
   } else {
-    const res = await getOpenExaminee({
+    const params = {
       paperType: paperType,
       relateId: practiceInfo?.relateId,
-      directed: practiceInfo?.directed || false
-    });
+    } as Study.OpenExamineeRequestDTO;
+    if (userStore.isVHS) {
+      params.questionType = practiceInfo?.questionType;
+    } else {
+      params.directed = practiceInfo?.directed || false;
+      params.questionType = practiceInfo?.questionType || 0;
+    }
+    const res = await getOpenExaminee(params);
     data = res.data || {};
   }
 

+ 12 - 0
src/pagesStudy/pages/index/compoentns/henan-exam.vue

@@ -21,6 +21,8 @@
 <script lang="ts" setup>
 import HenanExamItem from '@/pagesStudy/components/henan-exam-item.vue';
 import { useNavbar } from '@/hooks/useNavbar';
+import { getVHSPaperList } from '@/api/modules/study';
+import { Study } from '@/types';
 
 const { baseStickyTop } = useNavbar();
 const list = [1, 1, 1, 1, 1, 1, 1, 1]
@@ -28,6 +30,16 @@ const current = ref(0);
 const handleChange = (index: number) => {
   current.value = index;
 }
+const loadData = async () => {
+  const { data } = await getVHSPaperList({
+    subjectId: current.value
+  });
+  console.log(data)
+  // list.value = data;
+}
+onLoad(() => {
+  loadData();
+});
 </script>
 <style lang="scss" scoped>
 .is-active {

+ 2 - 2
src/pagesStudy/pages/index/compoentns/index-practice-entry.vue

@@ -117,7 +117,7 @@ const handlePracticeKnowledge = () => {
     data: {
       isVHS: true,
       directed: false,
-      subjectType: 0
+      questionType: 0
     }
   });
 }
@@ -127,7 +127,7 @@ const handlePracticeMustDo = () => {
     data: {
       isVHS: true,
       directed: false,
-      subjectType: 1
+      questionType: 2
     }
   });
 }

+ 10 - 5
src/pagesStudy/pages/knowledge-practice-detail/knowledge-practice-detail.vue

@@ -106,9 +106,12 @@ const handleStartPractice = () => {
       practiceInfo: {
         name: prevData.value.name,
         relateId: knowledgeId,
-        directed: prevData.value.directed
+        directed: prevData.value.directed,
+        // 对口升学
+        isVHS: prevData.value.isVHS,
+        questionType: prevData.value.questionType
       },
-    }
+    } as Transfer.ExamAnalysisPageOptions
   });
 }
 const handleViewAnalysis = () => {
@@ -117,16 +120,17 @@ const handleViewAnalysis = () => {
   }
   transferTo('/pagesStudy/pages/exam-start/exam-start', {
     data: {
-      name: paperName.value,
       paperType: EnumPaperType.PRACTICE,
       readonly: true,
       practiceInfo: {
         name: prevData.value.name,
         relateId: examineeData.value.knowledgeId,
         directed: prevData.value.directed,
-        examineeId: examineeData.value.examineeId
+        examineeId: examineeData.value.examineeId,
+        // 对口升学
+        questionType: prevData.value.questionType
       },
-    }
+    } as Transfer.ExamAnalysisPageOptions
   });
 }
 const loadData = async () => {
@@ -139,6 +143,7 @@ const loadData = async () => {
   }
 }
 onLoad(() => {
+  console.log(prevData.value)
   loadData();
 });
 </script>

+ 8 - 4
src/pagesStudy/pages/knowledge-practice-history/knowledge-practice-history.vue

@@ -27,22 +27,26 @@
   </ie-page>
 </template>
 <script lang="ts" setup>
+import { useUserStore } from '@/store/userStore';
 import { useNavbar } from '@/hooks/useNavbar';
 import { useTransferPage } from '@/hooks/useTransferPage';
 import { getPracticeHistory } from '@/api/modules/study';
 import { Study } from '@/types';
 import { Transfer } from '@/types';
 import { EnumPaperType } from '@/common/enum';
+
 const { prevData, transferTo } = useTransferPage<{}, Transfer.PracticeResultPageOptions>();
 const { baseStickyTop } = useNavbar();
+const userStore = useUserStore();
 const historyList = ref<Study.PracticeHistory[]>([]);
-const handleViewHistory = (value: Study.PracticeHistory) => {
+const handleViewHistory = (item: Study.PracticeHistory) => {
   transferTo('/pagesStudy/pages/knowledge-practice-detail/knowledge-practice-detail', {
     data: {
       paperType: EnumPaperType.PRACTICE,
-      examineeId: value.examineeId,
-      name: value.paperName,
-      directed: value.directed === 1
+      examineeId: item.examineeId,
+      name: item.paperName,
+      directed: item.directed === 1,
+      questionType: item.questionType
     }
   });
 }

+ 16 - 17
src/pagesStudy/pages/knowledge-practice/knowledge-practice.vue

@@ -3,14 +3,16 @@
     <z-paging ref="pagingRef" v-model="treeData" :loading-more-enabled="false" :auto="false" @query="loadKnowledgeList">
       <template #top>
         <ie-navbar :title="pageTitle" />
-        <uv-tabs :list="subjectList" key-name="subjectName" @click="handleChangeTab" :scrollable="true"></uv-tabs>
-        <view class="px-30 py-16 bg-back">
-          <view class="flex items-center justify-end gap-x-4" @click="handleViewHistory">
-            <uv-icon name="clock" size="16" color="#31A0FC"></uv-icon>
-            <text class="text-28 text-primary">查看记录</text>
-            <uv-icon name="arrow-right" size="16" color="#31A0FC"></uv-icon>
+        <template v-if="subjectList.length">
+          <uv-tabs :list="subjectList" key-name="subjectName" @click="handleChangeTab" :scrollable="true"></uv-tabs>
+          <view class="px-30 py-16 bg-back">
+            <view class="flex items-center justify-end gap-x-4" @click="handleViewHistory">
+              <uv-icon name="clock" size="16" color="#31A0FC"></uv-icon>
+              <text class="text-28 text-primary">查看记录</text>
+              <uv-icon name="arrow-right" size="16" color="#31A0FC"></uv-icon>
+            </view>
           </view>
-        </view>
+        </template>
       </template>
       <view class="px-40">
         <knowledgeTree :tree-data="treeData" @start-practice="handleStartPractice" />
@@ -24,7 +26,7 @@ import IePage from '@/components/ie-page/ie-page.vue';
 import { useTransferPage } from '@/hooks/useTransferPage';
 import { getSubjectList, getKnowledgeList } from '@/api/modules/study';
 import knowledgeTree from '@/pagesStudy/components/knowledge-tree.vue';
-import { Study } from '@/types';
+import { Study, Transfer } from '@/types';
 import { EnumPaperType, EnumUserRole } from '@/common/enum';
 import { useUserStore } from '@/store/userStore';
 import { useAuth } from '@/hooks/useAuth';
@@ -80,11 +82,7 @@ const loadKnowledgeList = async () => {
       directed: prevData.value.directed
     });
     treeData.value = data as Study.KnowledgeNode[];
-    if (data.length) {
-      pagingRef.value?.complete(data);
-    } else {
-      pagingRef.value?.complete(false);
-    }
+    pagingRef.value?.complete(data);
   } catch (error) {
     console.log(error);
     pagingRef.value?.complete(false);
@@ -98,14 +96,15 @@ const handleStartPractice = async (node: Study.KnowledgeNode) => {
   if (hasAuth) {
     transferTo('/pagesStudy/pages/exam-start/exam-start', {
       data: {
-        name: '知识点练习-' + node.name,
         paperType: EnumPaperType.PRACTICE,
         practiceInfo: {
           name: node.name,
           relateId: node.id,
-          directed: prevData.value.directed
-        },
-      }
+          directed: prevData.value.directed,
+          // 对口升学
+          questionType: prevData.value.questionType
+        }
+      } as Transfer.ExamAnalysisPageOptions
     });
   }
 }

+ 7 - 1
src/types/study.ts

@@ -314,7 +314,8 @@ export interface OpenExamineeRequestDTO {
   relateId?: number,
   directed: boolean,
   subjectId?: number,
-  testType?: string
+  testType?: string;
+  questionType?: number;
 }
 
 export interface GetExamPaperRequestDTO {
@@ -432,6 +433,7 @@ export interface PracticeHistory {
   endTime: string;
   examineeId: number;
   paperName: string;
+  questionType?: number;
 }
 
 /**
@@ -456,4 +458,8 @@ export interface PaperWork {
   endTime: string;
   duration: number;
   batchName: string;
+}
+
+export interface VHSPaperListRequestDTO {
+  subjectId: number;
 }

+ 3 - 0
src/types/transfer.ts

@@ -10,6 +10,8 @@ export interface PracticeResultPageOptions {
   name: string;
   directed: boolean;
   paperType: EnumPaperType;
+  isVHS?: boolean; // 是否是对口升学
+  questionType?: number; // 对口升学用来区分是知识点还是必刷题
 }
 
 /**
@@ -31,6 +33,7 @@ export interface ExamAnalysisPageOptions {
     relateId: number;
     directed: boolean; // 知识点 id
     examineeId?: number;
+    questionType?: number; // 对口升学用来区分是知识点还是必刷题
   };
 }