wyling007 преди 3 години
родител
ревизия
cdd9f60bc3
променени са 5 файла, в които са добавени 56 реда и са изтрити 120 реда
  1. 7 60
      src/api/modules/test.ts
  2. 1 10
      src/hooks/exercise/index.ts
  3. 16 26
      src/hooks/exercise/list.ts
  4. 29 5
      src/model/test.ts
  5. 3 19
      src/views/mockTest/components/hooks.ts

+ 7 - 60
src/api/modules/test.ts

@@ -3,22 +3,22 @@ import { AxiosPromise } from "axios";
 
 class Test {
 	/** 获取题目列表 */
-	list(params: Test.listParams): AxiosPromise<Test.listRes> {
+	getList(params: Test.listParams): AxiosPromise<Test.listRes> {
 		return request("/student/qustion/info/list", {
 			params,
 		});
 	}
 
-	/**获取模拟考试题列表 */
-	getMockList(params: Test.listParams): AxiosPromise<Test.listRes> {
-		return request("/student/qustion/info/selectTestQuestionInfo", {
+	/**获取免费题列表 */
+	getFreeList(params: Test.listParams): AxiosPromise<Test.listRes> {
+		return request("/student/qustion/info/normalList", {
 			params,
 		});
 	}
 
-	/** 获取非VIP题目列表 */
-	normalList(params: Test.listParams): AxiosPromise<Test.listRes> {
-		return request("/student/qustion/info/normalList", {
+	/**获取模拟考试题列表 */
+	getMockList(params: Test.listParams): AxiosPromise<Test.listRes> {
+		return request("/student/qustion/info/selectTestQuestionInfo", {
 			params,
 		});
 	}
@@ -68,59 +68,6 @@ class Test {
 
 export const test = new Test();
 
-/**
- * 获取题目列表
- * @returns
- */
-export async function getTopicList(params: any, isVip: Boolean = true) {
-	const getUserAnswer = (type: string) => {
-		switch (type) {
-			case "判断题":
-				return null;
-			case "单选题":
-				return null;
-			case "多选题":
-				return [];
-		}
-	};
-
-	const getType = (answer: Array<string>) => {
-		if (answer.length === 1) {
-			if (["√", "×"].includes(answer[0])) {
-				return "判断题";
-			} else {
-				return "单选题";
-			}
-		} else {
-			return "多选题";
-		}
-	};
-
-	const res = await request({
-		url: isVip ? "/student/qustion/info/list" : "/student/qustion/info/normalList",
-		params,
-	});
-
-	const data = {
-		total: res.data.total,
-		list: res.data.rows.map((item: any) => {
-			return {
-				...item,
-				explain: item.issue,
-				opts: item.opts.split("-").filter((item: any) => !!item),
-				image: item.image,
-				type: getType(item.answer.split("-")),
-				answer: item.answer,
-				userAnswer: getUserAnswer(getType(item.answer.split("-"))),
-				isTrue: null,
-				isCollection: false,
-			};
-		}),
-	};
-
-	return data;
-}
-
 /**
  * 获取题目分类
  */

+ 1 - 10
src/hooks/exercise/index.ts

@@ -5,7 +5,7 @@ import { useSubjectList } from "./list";
 import { useSubjectCheck } from "./wrong";
 
 export const useSubjectShowLogic = (type: ExerciseType.ListType) => {
-	const { subjectList, subjectTotal, loadNewSubject, currentSubject, currentSubjectIndex } = useSubjectList(type); //获取题目列表
+	const { subjectList, subjectTotal, currentSubject, currentSubjectIndex } = useSubjectList(type); //获取题目列表
 
 	/**下一题数据请求锁 */
 	const nextBtnState = ref(true);
@@ -14,15 +14,6 @@ export const useSubjectShowLogic = (type: ExerciseType.ListType) => {
 	const nextSubject = async () => {
 		if (currentSubjectIndex.value < subjectList.value.length - 1) {
 			currentSubjectIndex.value++;
-		} else {
-			if (nextBtnState.value) {
-				//禁用下一题按钮
-				nextBtnState.value = false;
-				//题目数量不足加载数据
-				await loadNewSubject();
-				//启用按钮
-				nextBtnState.value = true;
-			}
 		}
 	};
 

+ 16 - 26
src/hooks/exercise/list.ts

@@ -1,40 +1,31 @@
 import { ref, onBeforeMount, computed } from "vue";
 import { useRoute } from "vue-router";
-import * as API from "@/api";
+import testModel from "@/model/test";
 
 /**获取题目列表 */
 export const useSubjectList = (type: ExerciseType.ListType) => {
-	const subjectList = ref<any[]>([]); //题目列表
+	type TestModelListResType = Awaited<ReturnType<typeof testModel.getList | typeof testModel.getFreeList>>;
+
+	const subjectList = ref<TestModelListResType["list"]>([]); //题目列表
 	const subjectTotal = ref(0); //题目总数
-	const pageNum = ref(1); //当前请求页码
-	const pageSize = ref(10000); //当前请求每页数据
 	const query = useRoute().query; //路由query参数
 	onBeforeMount(async () => {
-		const res = await API.getTopicList(
-			{
+		let res: TestModelListResType;
+
+		if (type !== "free") {
+			res = await testModel.getList({
 				...query,
-				pageNum: pageNum.value,
-				pageSize: pageSize.value,
-			},
-			type !== "free"
-		);
+			});
+		} else {
+			res = await testModel.getFreeList({
+				...query,
+			});
+		}
+
 		subjectList.value = res.list;
 		subjectTotal.value = res.total;
 	});
-	//加载下一页数据
-	const loadNewSubject = async () => {
-		if (subjectList.value.length == subjectTotal.value) return;
-		pageNum.value++;
-		const res = await API.getTopicList(
-			{
-				...query,
-				pageNum: pageNum.value,
-				pageSize: pageSize.value,
-			},
-			type !== "free"
-		);
-		subjectList.value = subjectList.value.concat(res.list);
-	};
+
 	const currentSubjectIndex = ref(0); //当前题目下标
 	//当前题目内容
 	const currentSubject = computed(() => {
@@ -43,7 +34,6 @@ export const useSubjectList = (type: ExerciseType.ListType) => {
 	return {
 		subjectList,
 		subjectTotal,
-		loadNewSubject,
 		currentSubject,
 		currentSubjectIndex,
 	};

+ 29 - 5
src/model/test.ts

@@ -50,15 +50,39 @@ class TestModel {
 
 	/** 获取题目列表 */
 	async getList(params: Test.listParams) {
-		const res = await test.list(params);
+		const res = await test.getList(params);
 
 		const data = {
 			total: res.data.total,
-			list: res.data.rows.map((item: any) => {
+			list: res.data.rows.map((item) => {
 				return {
 					...item,
 					explain: item.issue,
-					opts: item.opts.split("-").filter((item: any) => !!item),
+					opts: item.opts.split("-").filter((item) => !!item),
+					image: item.image,
+					type: this.getType(item.answer.split("-")),
+					answer: item.answer,
+					userAnswer: this.getUserAnswer(this.getType(item.answer.split("-"))),
+					isTrue: null,
+					isCollection: false,
+				};
+			}),
+		};
+
+		return data;
+	}
+
+	/** 获取免费题目列表 */
+	async getFreeList(params: Test.listParams) {
+		const res = await test.getFreeList(params);
+
+		const data = {
+			total: res.data.total,
+			list: res.data.rows.map((item) => {
+				return {
+					...item,
+					explain: item.issue,
+					opts: item.opts.split("-").filter((item) => !!item),
 					image: item.image,
 					type: this.getType(item.answer.split("-")),
 					answer: item.answer,
@@ -78,11 +102,11 @@ class TestModel {
 
 		const data = {
 			total: res.data.total,
-			list: res.data.rows.map((item: any) => {
+			list: res.data.rows.map((item) => {
 				return {
 					...item,
 					explain: item.issue,
-					opts: item.opts.split("-").filter((item: any) => !!item),
+					opts: item.opts.split("-").filter((item) => !!item),
 					image: item.image,
 					type: this.getType(item.answer.split("-")),
 					answer: item.answer,

+ 3 - 19
src/views/mockTest/components/hooks.ts

@@ -119,26 +119,11 @@ const useSubjectList = () => {
 	const query = useRoute().query; //路由query参数
 	onBeforeMount(async () => {
 		const res = await testModel.getMockList({ ...query });
-		// const res = await API.getTopicList({
-		// 	...query,
-		// 	pageNum: pageNum.value,
-		// 	pageSize: pageSize.value,
-		// 	isRand: true,
-		// });
+
 		subjectList.value = res.list;
 		subjectTotal.value = res.total;
 	});
-	//加载下一页数据
-	const loadNewSubject = async () => {
-		if (subjectList.value.length == subjectTotal.value) return;
-		pageNum.value++;
-		const res = await API.getTopicList({
-			...query,
-			pageNum: pageNum.value,
-			pageSize: pageSize.value,
-		});
-		subjectList.value = subjectList.value.concat(res.list);
-	};
+
 	const currentSubjectIndex = ref(0); //当前题目下标
 	//当前题目内容
 	const currentSubject = computed(() => {
@@ -147,7 +132,6 @@ const useSubjectList = () => {
 	return {
 		subjectList,
 		subjectTotal,
-		loadNewSubject,
 		currentSubject,
 		currentSubjectIndex,
 	};
@@ -205,7 +189,7 @@ const useSubjectCheck = (nextSubject: () => Promise<void>) => {
 };
 
 export const useSubjectShowLogic = () => {
-	const { subjectList, subjectTotal, loadNewSubject, currentSubject, currentSubjectIndex } = useSubjectList(); //获取题目列表
+	const { subjectList, subjectTotal, currentSubject, currentSubjectIndex } = useSubjectList(); //获取题目列表
 
 	const nextBtnState = ref(true); //下一题数据请求锁