فهرست منبع

提现记录接口更改

zhangyujun 3 سال پیش
والد
کامیت
71682e615b

+ 1 - 1
src/api/modules/cashOut.ts

@@ -20,7 +20,7 @@ class CashOut {
 
 	/**查询提现记录 */
 	extractList(): AxiosPromise<CashOutType.ExtractList> {
-		return request("/wx/extract/list");
+		return request("/student/wx/extract/list");
 	}
 	// 查询微信提现到银行卡记录
 	studentWxBankList(params:Object) :AxiosPromise<CashOutType.bankList> {

+ 2 - 1
src/api/types/test.d.ts

@@ -1,5 +1,6 @@
 declare namespace Test {
 	interface QuestionInfo {
+		isTrue?: null|Boolean;
 		answer: string;
 		answerkeyword: string;
 		answermp3: string;
@@ -24,7 +25,7 @@ declare namespace Test {
 		liceTruck: string;
 		mockIssue: string;
 		number: number;
-		opts: string;
+		opts: string|[string];
 		placeIssue: string;
 		placeIssueName: string;
 		questionType: number;

+ 1 - 1
src/components/m-exercise/types.d.ts

@@ -1,3 +1,3 @@
 declare namespace ExerciseType {
-	type ListType = 'normal' | 'free' | 'test' | 'wrong';
+	type ListType = 'normal' | 'free' | 'test' | 'wrong'|'localWrong';
 }

+ 56 - 0
src/components/m-wrong-preview/components/bottomBar.vue

@@ -8,6 +8,10 @@ import { Console } from "console";
 import { RouterBus } from "@/hooks";
 export default defineComponent({
 	props: {
+		listType:{
+			type:String,
+			default:""
+		},
 		subjectList:{
 			type:Array,
 			default:[]
@@ -63,10 +67,19 @@ export default defineComponent({
 		// 	}
 		// };
 		const goWrongPreviewScore = () => {
+			switch(props.listType){
+				case "localWrong":
+					
 			Dialog.confirm({
 				message: "确认交卷吗?",
 			})
 				.then(() => {
+					switch(props.listType){
+						case "localWrong":
+							
+							break;
+					}
+			
 					
 				let wrongSet =	props.subjectList.filter((item:any,index)=>{
 						
@@ -92,6 +105,49 @@ export default defineComponent({
 				.catch(() => {
 					console.log(props.subjectList,"props")
 				});
+
+				break;
+				case "wrong":
+
+						Dialog.confirm({
+				message: "确认交卷吗?",
+			})
+				.then(() => {
+					switch(props.listType){
+						case "localWrong":
+							
+							break;
+					}
+			
+					
+				let wrongSet =	props.subjectList.filter((item:any,index)=>{
+						
+						return item.answer !== item.userAnswer
+					})
+					wrongSet.forEach((item:any)=>{
+						item.userAnswer = ""
+					})
+					window.localStorage.setItem(vehicle+subject,JSON.stringify(wrongSet))
+					router.push({
+						path:"/wrongExerciseRes",
+						query:{
+							title:"错题重做",
+							...router.currentRoute.value.query
+						}
+					})
+				})
+				.catch(() => {
+					console.log(props.subjectList,"props")
+				});
+
+
+				break;
+			}
+
+
+
+
+
 		};
 
 		return () => {

+ 1 - 1
src/components/m-wrong-preview/components/subjectContext.vue

@@ -18,7 +18,7 @@
 					<div class="problem">
 						<span class="type">{props.currentSubject.type}</span>
 						<span class="text">
-							{props.currentSubjectIndex + 1}、{props.currentSubject.explain}
+							{props.currentSubjectIndex + 1}、{props.currentSubject.explain||props.currentSubject.issue}
 						</span>
 						{props.currentSubject.image && <Image src={props.currentSubject.image} class="img" v-slots={slots} />}
 					</div>

+ 1 - 1
src/components/m-wrong-preview/index.vue

@@ -102,7 +102,7 @@
 		<subjectChangePopup :trueNum="trueNum" :falseNum="falseNum" v-model:currentSubjectIndex="currentSubjectIndex" :subjectList="subjectList" />
 	</van-popup>
 	<!-- 底部操作栏 -->
-	<bottomBar :currentSubjectIndex="currentSubjectIndex" :subjectList="subjectList" :subjectTotal="subjectTotal" :trueNum="trueNum" :falseNum="falseNum" v-model:showSubjectChangePopup="showSubjectChangePopup" v-model:officialShow="officialShow" @lastSubject="lastSubject" @nextSubject="nextSubject" />
+	<bottomBar :listType="listType"  :currentSubjectIndex="currentSubjectIndex" :subjectList="subjectList" :subjectTotal="subjectTotal" :trueNum="trueNum" :falseNum="falseNum" v-model:showSubjectChangePopup="showSubjectChangePopup" v-model:officialShow="officialShow" @lastSubject="lastSubject" @nextSubject="nextSubject" />
 </template>
 
 <script lang="ts" setup>

+ 3 - 0
src/components/m-wrong-preview/types.d.ts

@@ -0,0 +1,3 @@
+declare namespace ExerciseType {
+	type ListType = 'normal' | 'free' | 'test' | 'wrong'|'localWrong';
+}

+ 56 - 12
src/hooks/exercise/list.ts

@@ -1,8 +1,7 @@
 import { ref, onBeforeMount, computed } from "vue";
-import { useRoute,useRouter } from "vue-router";
+import { useRoute, useRouter } from "vue-router";
 import testModel from "@/model/test";
-
-
+import { CollectionModel } from "@/model/collection";
 /**获取题目列表 */
 export const useSubjectList = (type: ExerciseType.ListType) => {
 	type TestModelListResType = Awaited<ReturnType<typeof testModel.getList | typeof testModel.getFreeList>>;
@@ -16,21 +15,65 @@ export const useSubjectList = (type: ExerciseType.ListType) => {
 	onBeforeMount(async () => {
 		let res: TestModelListResType;
 
-		if (type == "normal"||type=="test") {
+		if (type == "normal" || type == "test") {
 			res = await testModel.getList({
 				...query,
 			});
 		}
-		else if(type=="wrong"){
-			let wrongSet:[any] =  JSON.parse(window.localStorage.getItem(vehicle+subject)||"[]")
-			res  = {
-				total:wrongSet.length,
-				list:wrongSet
+		else if (type == "localWrong") {
+			let wrongSet: [any] = JSON.parse(window.localStorage.getItem(vehicle + subject) || "[]")
+			wrongSet.forEach(item => {
+				item.userAnswer = null
+				item.isTrue = null
+			})
+			res = {
+				total: wrongSet.length,
+				list: wrongSet
 			} as TestModelListResType
-			
-			
 
-		} 
+
+
+		}
+		else if (type = "wrong") {
+			const collectionModel = new CollectionModel(type);
+			const result = await collectionModel.getList({
+				carType: query.vehicle as CollectionAndWrongType.CarType,
+				km: query.name as CollectionAndWrongType.Km,
+				pageNum: 1,
+				pageSize: 50
+			});
+			if(result.rows.length==0){
+				return
+			}
+			result.rows.forEach(item => {
+				item.isTrue = null
+				if (typeof item.opts == "string") {
+					item.opts = item.opts.split("-")
+				}
+			})
+			let questionItem: Test.QuestionInfo =result.rows[0]
+			let questionIndex = 0
+			//排序
+			if (query.questionId) {
+				result.rows.forEach((item, index) => {
+					if (item.id == Number(query.questionId)) {
+						questionIndex = index
+						questionItem = item
+					}
+				})
+				result.rows.splice(questionIndex,1)
+				result.rows.unshift(questionItem)
+
+			}
+			res = {
+				total: result.total,
+				list: result.rows
+			}
+
+
+			// const collectionList.value.push(...result.collectionList)
+			// const questionList.value.push(...result.rows)
+		}
 		else {
 			res = await testModel.getFreeList({
 				...query,
@@ -39,6 +82,7 @@ export const useSubjectList = (type: ExerciseType.ListType) => {
 
 		subjectList.value = res.list;
 		subjectTotal.value = res.total;
+		console.log(subjectList)
 	});
 
 	const currentSubjectIndex = ref(0); //当前题目下标

+ 2 - 4
src/hooks/exercise/wrong.ts

@@ -82,7 +82,7 @@ export const useSubjectCheck = (currentSubject: ComputedRef<any>, nextSubject: (
 		if (JSON.stringify(currentSubject.value.answer) == JSON.stringify(currentSubject.value.userAnswer)) {
 			//答案正确
 			//类型是错误时候不显示对错
-			_type == "wrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = true
+			_type == "localWrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = true
 			trueNum.value++;
 			if (isJumpNext.value) {
 				nextTick(() => {
@@ -99,13 +99,11 @@ export const useSubjectCheck = (currentSubject: ComputedRef<any>, nextSubject: (
 				},
 			]);
 			//类型是错误时候不显示对错
-			_type == "wrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = false
+			_type == "localWrong" ? currentSubject.value.isTrue = null : currentSubject.value.isTrue = false
 			//vip才显示错误解析
 			if (store.getters.getIsVip) {
 
 				skillsShow.value = true;
-
-
 			}
 
 			falseNum.value++;

+ 208 - 189
src/views/collection/components/list.vue

@@ -6,7 +6,21 @@
 					<van-pull-refresh v-model="refreshing" @refresh="onLoad">
 						<van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
 							<van-swipe-cell v-for="(item, index) in list" :key="index" :disabled="isChoose">
-								<van-cell class="cell-box" clickable :title="`${item.id}. ${item.issue}`" @click="goWrongReview(item.id)">
+								<van-cell
+									class="cell-box"
+									clickable
+									:title="`${item.id}. ${item.issue}`"
+									@click="
+										() => {
+											push({
+												name: 'wrongExercise',
+												query: {
+													...query,
+													questionId:item.id
+												},
+											});
+										}
+									">
 									<template #icon v-if="isChoose">
 										<van-checkbox :name="item.id" class="checkbox" />
 									</template>
@@ -46,220 +60,225 @@
 </template>
 
 <script lang="ts">
-	import { CollectionModel } from "@/model/collection";
-	import { RouterBus } from "@/hooks";
-	/**
-	 * 列表hook
-	 */
-	const useQuestionList = (type: CollectionAndWrongType.type) => {
-		const collectionModel = new CollectionModel(type);
-		const questionList = ref<Test.QuestionInfo[]>([]);
-		const collectionList = ref<CollectionAndWrongType.QuestionRes[]>([]);
-		const {
-			route: { query },
-		} = new RouterBus();
+import { CollectionModel } from "@/model/collection";
+import { RouterBus } from "@/hooks";
 
-		const total = ref(0);
-		const pageNum = ref(1);
-		const pageSize = ref(20);
-		/** 刷新数据 */
-		const refreshing = ref(false);
-		/**加载中 */
-		const loading = ref(false);
-		/**数据是否全部加载完成 */
-		const finished = ref(false);
+/**
+ * 列表hook
+ */
+const useQuestionList = (type: CollectionAndWrongType.type) => {
+	const collectionModel = new CollectionModel(type);
+	const questionList = ref<Test.QuestionInfo[]>([]);
+	const collectionList = ref<CollectionAndWrongType.QuestionRes[]>([]);
+	const {
+		route: { query },
+	} = new RouterBus();
 
-		/** 删除已收藏的问题 */
-		const deletes = async (ids: number[]) => {
-			const res = await collectionModel.deletes(ids, collectionList.value);
-			//乐观删除本地数据
-			questionList.value = questionList.value.filter((item) => !ids.includes(item.id));
-		};
+	const total = ref(0);
+	const pageNum = ref(1);
+	const pageSize = ref(20);
+	/** 刷新数据 */
+	const refreshing = ref(false);
+	/**加载中 */
+	const loading = ref(false);
+	/**数据是否全部加载完成 */
+	const finished = ref(false);
 
-		/** 加入收藏 */
-		const addsCollection = async (ids: number[]) => {
-			const list = collectionList.value.filter((item) => ids.includes(item.questionId));
-			const params = list.map((item) => {
-				return {
-					carType: item.carType,
-					km: item.km,
-					questionId: item.questionId,
-				};
-			});
-			const collectionModel = new CollectionModel("collection");
-			const res = await collectionModel.adds(params);
-			//收藏成功则删除错题
-			// if (res.data == 1) {
-			deletes(ids);
-			// }
-		};
+	/** 删除已收藏的问题 */
+	const deletes = async (ids: number[]) => {
+		const res = await collectionModel.deletes(ids, collectionList.value);
+		//乐观删除本地数据
+		questionList.value = questionList.value.filter((item) => !ids.includes(item.id));
+	};
 
-		/**获取下一页数据 */
-		const onLoadData = async () => {
-			if (loading.value) return;
-			loading.value = true;
-			if (refreshing.value) {
-				collectionList.value = [];
-				questionList.value = [];
-				pageNum.value = 1;
-				refreshing.value = false;
-			}
-			const res = await collectionModel.getList({
-				carType: query.vehicle as CollectionAndWrongType.CarType,
-				km: query.name as CollectionAndWrongType.Km,
-				pageNum: pageNum.value,
-				pageSize: pageSize.value,
-			});
-			total.value = res.total;
-			collectionList.value.push(...res.collectionList);
-			questionList.value.push(...res.rows);
-			loading.value = false;
-			finished.value = questionList.value.length >= total.value;
-			pageNum.value++;
-		};
+	/** 加入收藏 */
+	const addsCollection = async (ids: number[]) => {
+		const list = collectionList.value.filter((item) => ids.includes(item.questionId));
+		const params = list.map((item) => {
+			return {
+				carType: item.carType,
+				km: item.km,
+				questionId: item.questionId,
+			};
+		});
+		const collectionModel = new CollectionModel("collection");
+		const res = await collectionModel.adds(params);
+		//收藏成功则删除错题
+		// if (res.data == 1) {
+		deletes(ids);
+		// }
+	};
 
-		return {
-			questionList,
-			deletes,
-			finished,
-			loading,
-			onLoadData,
-			refreshing,
-			addsCollection,
-		};
+	/**获取下一页数据 */
+	const onLoadData = async () => {
+		if (loading.value) return;
+		loading.value = true;
+		if (refreshing.value) {
+			collectionList.value = [];
+			questionList.value = [];
+			pageNum.value = 1;
+			refreshing.value = false;
+		}
+		const res = await collectionModel.getList({
+			carType: query.vehicle as CollectionAndWrongType.CarType,
+			km: query.name as CollectionAndWrongType.Km,
+			pageNum: pageNum.value,
+			pageSize: pageSize.value,
+		});
+		total.value = res.total;
+		collectionList.value.push(...res.collectionList);
+		questionList.value.push(...res.rows);
+		loading.value = false;
+		finished.value = questionList.value.length >= total.value;
+		pageNum.value++;
 	};
+
+	return {
+		questionList,
+		deletes,
+		finished,
+		loading,
+		onLoadData,
+		refreshing,
+		addsCollection,
+	};
+};
 </script>
 
 <script setup lang="ts">
-	import { ref, watch } from "vue";
+import { ref, watch } from "vue";
+import { useRoute } from "vue-router";
+const {
+	router: { push },
+} = new RouterBus();
 
-	const { goWrongReview } = new RouterBus();
-
-	interface Props {
-		type: "wrong" | "collection";
-	}
+const { goWrongReview } = new RouterBus();
+const query = useRoute().query;
+interface Props {
+	type: "wrong" | "collection";
+}
 
-	const props = withDefaults(defineProps<Props>(), {});
+const props = withDefaults(defineProps<Props>(), {});
 
-	//当前视图事务
-	const {
-		questionList: list, //题目列表
-		finished, //是否全部加载完成
-		refreshing /** 重载状态 */,
-		loading /**显示加载状态 */,
-		onLoadData: onLoad /**加载数据 */,
-		deletes, //批量删除
-		addsCollection, //加入收藏,移除错题
-	} = useQuestionList(props.type);
+//当前视图事务
+const {
+	questionList: list, //题目列表
+	finished, //是否全部加载完成
+	refreshing /** 重载状态 */,
+	loading /**显示加载状态 */,
+	onLoadData: onLoad /**加载数据 */,
+	deletes, //批量删除
+	addsCollection, //加入收藏,移除错题
+} = useQuestionList(props.type);
 
-	const isChoose = ref(false); //开启批量选中
-	const isSelectAll = ref(false); //是否全选
-	const checked = ref([]); //选中内容
-	const checkboxGroup = ref(); //多选框组件实例
-	const isType = ref(0); //0错题 1收藏
-	//选择全选
-	watch(isSelectAll, (value) => {
-		if (value) {
-			selectAll();
-		} else {
-			unSelectAll();
-		}
-	});
-	// //全选状态改变
-	watch(checked, (val) => {
-		if (val.length == 0) {
-			isSelectAll.value = false;
-		}
-		if (val.length === list.value.length) {
-			isSelectAll.value = true;
-		}
-	});
-	//全选
-	const selectAll = () => {
-		checkboxGroup.value.toggleAll(true);
-	};
-	//取消全选
-	const unSelectAll = () => {
-		checked.value = [];
-	};
-	//单个删除
-	const deleteClick = (id: number) => {
-		deletes([id]);
-	};
-	//批量删除
-	const deletesClick = () => {
-		deletes(checked.value);
-	};
+const isChoose = ref(false); //开启批量选中
+const isSelectAll = ref(false); //是否全选
+const checked = ref([]); //选中内容
+const checkboxGroup = ref(); //多选框组件实例
+const isType = ref(0); //0错题 1收藏
+//选择全选
+watch(isSelectAll, (value) => {
+	if (value) {
+		selectAll();
+	} else {
+		unSelectAll();
+	}
+});
+// //全选状态改变
+watch(checked, (val) => {
+	if (val.length == 0) {
+		isSelectAll.value = false;
+	}
+	if (val.length === list.value.length) {
+		isSelectAll.value = true;
+	}
+});
+//全选
+const selectAll = () => {
+	checkboxGroup.value.toggleAll(true);
+};
+//取消全选
+const unSelectAll = () => {
+	checked.value = [];
+};
+//单个删除
+const deleteClick = (id: number) => {
+	deletes([id]);
+};
+//批量删除
+const deletesClick = () => {
+	deletes(checked.value);
+};
 
-	//单个收藏
-	const collectionClick = (id: number) => {
-		addsCollection([id]);
-	};
-	//批量收藏
-	const collectionsClick = () => {
-		addsCollection(checked.value);
-	};
+//单个收藏
+const collectionClick = (id: number) => {
+	addsCollection([id]);
+};
+//批量收藏
+const collectionsClick = () => {
+	addsCollection(checked.value);
+};
 </script>
 
 <style lang="scss" scoped>
-	.listcom-box {
-		height: calc(100vh - 50px);
-		display: flex;
-		flex-direction: column;
-	}
+.listcom-box {
+	height: calc(100vh - 50px);
+	display: flex;
+	flex-direction: column;
+}
 
-	.list-box {
-		flex-grow: 1;
-		overflow-y: auto;
-		.cell-box {
-			min-height: 70px;
-		}
+.list-box {
+	flex-grow: 1;
+	overflow-y: auto;
+	.cell-box {
+		min-height: 70px;
 	}
-	.checkbox {
-		margin-right: 5px;
-	}
-	.bottom-cell {
-		flex-shrink: 0;
-		border-top: 1px solid #bdbaba;
+}
+.checkbox {
+	margin-right: 5px;
+}
+.bottom-cell {
+	flex-shrink: 0;
+	border-top: 1px solid #bdbaba;
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	width: 100vw;
+	height: 50px;
+	box-sizing: border-box;
+	font-size: 13px;
+	font-weight: 400;
+	font-family: PingFang SC;
+	background-color: #ffffff;
+	padding: 10px 15px;
+	.choose {
 		display: flex;
 		justify-content: space-between;
 		align-items: center;
-		width: 100vw;
-		height: 50px;
-		box-sizing: border-box;
-		font-size: 13px;
-		font-weight: 400;
-		font-family: PingFang SC;
-		background-color: #ffffff;
-		padding: 10px 15px;
-		.choose {
+		width: 100px;
+	}
+	.operate {
+		display: flex;
+		justify-content: space-between;
+
+		span {
+			height: 30px;
 			display: flex;
-			justify-content: space-between;
+			justify-content: center;
 			align-items: center;
-			width: 100px;
-		}
-		.operate {
-			display: flex;
-			justify-content: space-between;
-
-			span {
-				height: 30px;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				color: #ffffff;
-				border-radius: 15px;
+			color: #ffffff;
+			border-radius: 15px;
 
-				&:nth-of-type(1) {
-					background-color: #ff4d53;
-				}
-				&:active {
-					filter: brightness(50%);
-				}
-				&:nth-of-type(2) {
-					background-color: #498ef5;
-				}
+			&:nth-of-type(1) {
+				background-color: #ff4d53;
+			}
+			&:active {
+				filter: brightness(50%);
+			}
+			&:nth-of-type(2) {
+				background-color: #498ef5;
 			}
 		}
 	}
+}
 </style>

+ 1 - 0
src/views/drawByBank/index.vue

@@ -1,5 +1,6 @@
 <template>
 	<div style="background: #f5f5f5">
+		<m-nav-bar  title="银行卡提现"  style="color: #333;background:#fff;" />
 		<div class="rect1"></div>
 		<van-form @submit="onSubmit" ref="drawByBank" class="custom-from">
 			<van-cell-group inset>

+ 13 - 0
src/views/wrongExercise/index.vue

@@ -0,0 +1,13 @@
+<template>
+    <div>
+      	<m-wrong-preview listType="wrong" />
+    </div>
+</template>
+
+<script setup lang="ts">
+
+</script>
+
+<style scoped>
+
+</style>

+ 58 - 0
src/views/wrongExerciseRes/index.vue

@@ -0,0 +1,58 @@
+<template>
+	<div class="btn-box">
+		<m-button
+			@click="
+				() => {
+					back();
+				}
+			"
+			class="btn1"
+			text="重做错题" />
+		<m-button @click="goHomeTest" class="btn2" text="返回首页" />
+	</div>
+</template>
+
+<script lang="ts" setup>
+import { useRouter } from "vue-router";
+import { Toast } from "vant";
+const router = useRouter();
+const back = useRouter().back;
+const vehicle = useRouter().currentRoute.value.query.vehicle as string; //路由qvehicle参数
+const subject = useRouter().currentRoute.value.query.subject as string; //路由subject参数
+const goWrongPreview = () => {
+	if (window.localStorage.getItem(vehicle + subject) == "" || window.localStorage.getItem(vehicle + subject) == "[]" || !window.localStorage.getItem(vehicle + subject)) {
+		Toast("没有错题了");
+		return;
+	}
+	router.push({
+		path: "/wrongReview",
+		query: router.currentRoute.value.query,
+	});
+};
+const goHomeTest = () => {
+	router.push({
+		path: "/home/test",
+	});
+};
+</script>
+
+<style lang="scss" scoped>
+.btn-box {
+	margin: 45px auto;
+	width: 230px;
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	color: #ffffff;
+	font-size: 15px;
+	font-family: PingFang SC;
+	font-weight: 400;
+	line-height: 23px;
+	.btn1 {
+		background-color: #498ef5;
+	}
+	.btn2 {
+		background-color: #01c18d;
+	}
+}
+</style>

+ 1 - 1
src/views/wrongReview/index.vue

@@ -1,5 +1,5 @@
 <template>
-	<m-wrong-preview listType="wrong" />
+	<m-wrong-preview listType="localWrong" />
 </template>
 
 <script lang="ts" setup>

+ 84 - 58
test.json

@@ -1,61 +1,87 @@
+
+
 [
     {
-        "createTime": "2021-11-05 10:25:51",
-        "updateTime": null,
-        "id": 1746,
-        "number": 1522,
-        "answer": "×",
-        "answerkeyword": null,
-        "explainGif": null,
-        "explainJq": "题目中看到“可悬挂”.直接“答错”。",
-        "explainJs": "《道路交通安全法实施条例》第六十二条:驾驶机动车不得有在机动车驾驶室的前后窗范围内悬挂、放置妨碍驾驶人视线的物品的行为。",
-        "explainMp3": "https://t1-1305573081.file.myqcloud.com/qb/mp3/explain1747.mp3",
-        "image": null,
-        "imageYdt": null,
-        "issue": "在驾驶室的前窗范围内可放置玩偶、抱枕,后视镜上可悬挂平安扣等小挂件。",
-        "opts": [
-            "√",
-            "×"
-        ],
-        "skillkeyword": "可悬挂",
-        "titlekeyword": "可悬挂",
-        "issuemp3": "https://t1-1305573081.file.myqcloud.com/qb/issue/issue1747.mp3",
-        "answermp3": "https://t1-1305573081.file.myqcloud.com/qb/answer/answer1747.mp3",
-        "explainjsmp3": "https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS1747.mp3",
-        "liceCar": "1",
-        "liceBus": "1",
-        "liceTruck": "1",
-        "liceMoto": "0",
-        "sequeIssue": "15",
-        "classIssue": "27",
-        "placeIssue": "0",
-        "excellIssue": "5",
-        "copyIssue": "0",
-        "mockIssue": "0",
-        "sequeIssueName": "驾驶证相关",
-        "placeIssueName": null,
-        "excellIssueName": "必学题五",
-        "classIssueName": "驾驶习惯",
-        "questionType": 1,
-        "subject": 1,
-        "classSort": 12,
-        "excellSort": 96,
-        "sequeSort": null,
-        "placeSort": null,
-        "explain": "在驾驶室的前窗范围内可放置玩偶、抱枕,后视镜上可悬挂平安扣等小挂件。",
-        "type": "判断题",
-        "userAnswer": "√",
-        "isTrue": null,
-        "isCollection": false,
-        "optsBack": [
-            {
-                "opt": "√",
-                "status": 2
-            },
-            {
-                "opt": "×",
-                "status": 1
-            }
-        ]
+    answer: "谨慎选择行车速度"
+    answerkeyword: "谨慎"
+    answermp3: "https://t1-1305573081.file.myqcloud.com/qb/answer/answer1280.mp3"
+    classIssue: "2"
+    classIssueName: "安全行车"
+    classSort: 55
+    copyIssue: "0"
+    createTime: "2021-11-05 10:25:51"
+    excellIssue: "6"
+    excellIssueName: "选学题一"
+    excellSort: null
+    explainGif: "https://t1-1305573081.file.myqcloud.com/qb/gif/1280.gif"
+    explainJq: "选项中看到“谨慎”.直接选。"
+    explainJs: "看到注意儿童标志的时候说明附近可能是幼儿园一类,因此要谨慎选择行车速度避免撞到孩子。"
+    explainMp3: "https://t1-1305573081.file.myqcloud.com/qb/mp3/explain1280.mp3"
+    explainjsmp3: "https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS1280.mp3"
+    id: 1280
+    image: null
+    imageYdt: null
+    issue: "驾驶人行车中看到注意儿童标志的时候,应怎样做?"
+    issuemp3: "https://t1-1305573081.file.myqcloud.com/qb/issue/issue1280.mp3"
+    liceBus: "1"
+    liceCar: "1"
+    liceMoto: "0"
+    liceTruck: "1"
+    mockIssue: "1"
+    number: 130
+    opts: "加速行驶-绕道行驶-谨慎选择行车速度-保持正常车速行驶"
+    placeIssue: "0"
+    placeIssueName: null
+    placeSort: null
+    questionType: 2
+    sequeIssue: "1"
+    sequeIssueName: "练习一"
+    sequeSort: 85
+    skillkeyword: "谨慎"
+    subject: 1
+    titlekeyword: null
+    updateTime: null
     }
-]
+]
+
+[{
+    answer: "大型货车"
+answerkeyword: "大型货车"
+answermp3: "https://t1-1305573081.file.myqcloud.com/qb/answer/answer1.mp3"
+classIssue: "23"
+classIssueName: "驾驶证相关"
+classSort: 68
+copyIssue: "0"
+createTime: "2021-11-05 10:25:51"
+excellIssue: "11"
+excellIssueName: "选学题六"
+excellSort: null
+explainGif: "https://t1-1305573081.file.myqcloud.com/qb/gif/1.gif"
+explainJq: "选择题选项中看到“大型货车”.直接选。"
+explainJs: "1、申请城市公交车、大型货车、无轨电车或者有轨电车准驾车型的,在20周岁以上,50周岁以下;2、申请大型客车准驾车型的,在26周岁以上,50周岁以下;3、申请中型客车准驾车型的,在21周岁以上,50周岁以下;4、申请牵引车准驾车型的,在24周岁以上,50周岁以下。"
+explainMp3: "https://t1-1305573081.file.myqcloud.com/qb/mp3/explain1.mp3"
+explainjsmp3: "https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS1.mp3"
+id: 1
+image: null
+imageYdt: null
+issue: "年满20周岁,可以初次申请下列哪种准驾车型?"
+issuemp3: "https://t1-1305573081.file.myqcloud.com/qb/issue/issue1.mp3"
+liceBus: "1"
+liceCar: "1"
+liceMoto: "0"
+liceTruck: "1"
+mockIssue: "0"
+number: 1505
+opts: "大型货车-大型客车-中型客车-牵引车"
+placeIssue: "0"
+placeIssueName: null
+placeSort: null
+questionType: 2
+sequeIssue: "15"
+sequeIssueName: "驾驶证相关"
+sequeSort: null
+skillkeyword: "大型货车"
+subject: 1
+titlekeyword: null
+updateTime: null
+}]