Tang 3 سال پیش
والد
کامیت
dd5eac16af

+ 5 - 1
common/api.js

@@ -16,6 +16,8 @@ import order from './httpList/order.js'
 import informUser from './httpList/informUser.js'
 import study from './httpList/study.js'
 import profileTp from './httpList/profileTp.js'
+import answer from './httpList/answer.js'
+import note from './httpList/note.js'
 export default {
 	...login,
 	...polyvVideo,
@@ -34,5 +36,7 @@ export default {
 	...order,
 	...informUser,
 	...study,
-	...profileTp
+	...profileTp,
+	...answer,
+	...note,
 }

+ 27 - 0
common/httpList/answer.js

@@ -0,0 +1,27 @@
+import {
+	myRequest
+} from '../request.js'
+export default {
+	//答疑列表
+	answerList(data) {
+		return myRequest({
+			url: '/app/answer/list',
+			method: 'get',
+			data: data
+		})
+	},
+	postAnswer(data) {
+		return myRequest({
+			url: '/app/answer',
+			method: 'post',
+			data: data
+		})
+	},
+	delAnswer(data) {
+		return myRequest({
+			url: '/app/answer/edit',
+			method: 'post',
+			data: data
+		})
+	}
+}

+ 21 - 0
common/httpList/course.js

@@ -2,6 +2,27 @@ import {
 	myRequest
 } from '../request.js'
 export default {
+	reSectionList(data) {
+		return myRequest({
+			url: '/course/sectionList',
+			method: 'get',
+			data: data
+		})
+	},
+	reChapterList(data) {
+		return myRequest({
+			url: '/course/chapterList',
+			method: 'get',
+			data: data
+		})
+	},
+	reMenuList(data) {
+		return myRequest({
+			url: '/course/menuList',
+			method: 'get',
+			data: data
+		})
+	},
 	menuList(data) {
 		return myRequest({
 			url: '/app/common/course/menuList',

+ 8 - 2
common/httpList/goods.js

@@ -140,8 +140,7 @@ export default {
 		})
 	},
 	
-	
-	
+
 	goodsChapterList(data) {
 		return myRequest({
 			url: '/app/common/bank/chapter/list',
@@ -166,6 +165,13 @@ export default {
 		})
 	},
 	
+	bankExam(data) {
+		return myRequest({
+			url: '/bank/exam/'+data,
+			method: 'get',
+		})
+	},
+	
 	goodsCollectExamList(data) {
 		return myRequest({
 			url: '/collect/question/exam_list',

+ 26 - 0
common/httpList/note.js

@@ -0,0 +1,26 @@
+import {
+	myRequest
+} from '../request.js'
+export default {
+	noteList(data) {
+		return myRequest({
+			url: '/user/note/listDate',
+			method: 'get',
+			data: data
+		})
+	},
+	postNote(data) {
+		return myRequest({
+			url: '/user/note',
+			method: 'post',
+			data: data
+		})
+	},
+	delNote(data) {
+		return myRequest({
+			url: '/user/note/edit',
+			method: 'post',
+			data: data
+		})
+	}
+}

+ 37 - 1
common/methodTool.js

@@ -231,5 +231,41 @@ export default {
 			}
 		}
 		return returnAge; //返回周岁年龄
-	}
+	},
+	getDate () {
+	  let nowDate = new Date()
+	  let date = {
+	    year: nowDate.getFullYear(),
+	    month: nowDate.getMonth() + 1,
+	    date: nowDate.getDate()
+	  }
+	  return  date.year + '-' + date.month + '-' + date.date
+	},
+	getZeroTime () {
+		return Number(new Date(new Date().toLocaleDateString()).getTime()/1000)
+	},
+	setClock:function(time){
+	            	var that=this, sec= parseInt(time) , clockCount={}, strTimer="";
+	            	    clockCount=setInterval(function(){
+	            	    	if(sec==0){
+			                        $(".js-count-down").html("活动已经结束");
+			                       clearInterval(clockCount);
+			                       return false;
+	                        }
+						    strTimer = that.secondToDate(sec);
+						    $(".js-count-down").html(strTimer);
+						    sec--;
+	                    },1000)
+	            },
+	secondToDate(result){
+	            	var h = Math.floor(result / 3600) < 10 ? '0'+Math.floor(result / 3600) : Math.floor(result / 3600);
+				    var m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60));
+				    var s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60));
+				        if(h==0){
+				        	result = m + ":" + s;
+				        }else{
+				        	result = h+':'+m + ":" + s
+				        }
+				    return result;
+	 }
 }

+ 4 - 2
common/request.js

@@ -4,7 +4,9 @@
 import store from '@/store/index.js'
 import api from './api.js'
 var num = 1
-export const BASE_URL = 'http://192.168.1.222:5055'//接口api  http://42.192.164.187:19005
+
+export const BASE_URL = 'http://42.192.164.187:19005'//接口api  http://42.192.164.187:19005
+
 
 export const BASE_IMG_URL = 'https://file-dev.xyyxt.net/'//图片上传api  'https://file.xyyxt.net/
 export const tenantId = '867735392558919680'
@@ -22,7 +24,7 @@ export const myRequest = (options) => {
 			method: options.method || 'GET',
 			data: options.data,
 			header: options.noToken ? {
-				TenantId: tenantId
+				TenantId: tenantId,
 			} : {
 				AuthorizationToken: 'WX ' + (token?token:uni.getStorageSync('token_temp')),
 				TenantId: tenantId

+ 28 - 2
components/course/courseChapter.vue

@@ -7,7 +7,7 @@
 		</view>
 		<view v-if="!down">
 			<view v-for="(itemM,indexM) in list" >
-				<courseSection :isBuy="isBuy" :isRebuild="isRebuild" :menuItem="itemM" :levelId="levelId+'-'+itemM.sectionId"></courseSection>
+				<courseSection :isBuy="isBuy" :isRebuild="isRebuild" :gradeId="gradeId" :menuItem="itemM" :levelId="levelId+'-'+itemM.sectionId"></courseSection>
 				<u-line v-if="indexM<list.length-1"></u-line>
 			</view>
 		</view>
@@ -35,6 +35,10 @@ export default {
 		isRebuild: {
 			type: Boolean,
 			default: false
+		},
+		gradeId: {
+			type: Number,
+			default: 0
 		}
 	},
 	components: {
@@ -57,9 +61,31 @@ export default {
 		openChapter(item){
 			this.down = !this.down
 			if(!this.down&&this.list.length==0){
-				this.getSectionList(item.id)
+				if(this.isRebuild){
+					this.getReSectionList(item.id,item.courseId,item.moduleId)
+				}else{
+					this.getSectionList(item.id)
+				}
+				
 			}
 		},
+		getReSectionList(chapterId,courseId,moduleId) {
+			let self = this
+			this.$api.reSectionList({chapterId:chapterId,gradeId:this.gradeId,courseId:courseId,rebuild:1,moduleId:moduleId}).then(res => {
+				if(res.data.code==200){
+					for(let i=0;i<res.data.data.length;i++){
+						let item = res.data.data[i]
+						item.id = item.sectionId
+						//判断是否试听
+						item.tryListen = false
+						if(self.goodsAuditionConfigIdList.indexOf(item.id)!==-1){
+							item.tryListen = true
+						}	
+					}
+					self.list = res.data.data
+				}
+			});
+		},
 		getSectionList(chapterId) {
 			let self = this
 			this.$api.sectionList(chapterId).then(res => {

+ 26 - 4
components/course/courseModule.vue

@@ -7,7 +7,7 @@
 		</view>
 		<view v-if="!down">
 			<view v-for="(itemM,indexM) in list" >
-				<courseChapter :isBuy="isBuy" :isRebuild="isRebuild"  :menuItem="itemM" :levelId="levelId+'-'+itemM.chapterId"></courseChapter>
+				<courseChapter :isBuy="isBuy" :gradeId="gradeId" :isRebuild="isRebuild"  :menuItem="itemM" :levelId="levelId+'-'+itemM.chapterId"></courseChapter>
 				<u-line v-if="indexM<list.length-1"></u-line>
 			</view>
 		</view>
@@ -23,7 +23,7 @@ export default {
 			type: Object,
 			default: {}
 		},
-		isBuy: {
+		isBuy: { //是否是已购买商品
 			type: Boolean,
 			default: false
 		},
@@ -31,9 +31,13 @@ export default {
 			type: String,
 			default: ""
 		},
-		isRebuild: {
+		isRebuild: {  //是否重修目录
 			type: Boolean,
 			default: false
+		},
+		gradeId: {  //重修需要班级ID
+			type: Number,
+			default: 0
 		}
 	},
 	components: {
@@ -56,9 +60,27 @@ export default {
 		openModule(item){
 			this.down = !this.down
 			if(!this.down&&this.list.length==0){
-				this.getChapterList(item.id)
+				if(this.isRebuild){
+					this.getReChapterList(item.id,item.courseId)
+				}else{
+					this.getChapterList(item.id)
+				}
+				
 			}
 		},
+		getReChapterList(moduleId,courseId) {
+			let self = this
+			this.$api.reChapterList({moduleId:moduleId,gradeId:this.gradeId,courseId:courseId,rebuild:1}).then(res => {
+				if(res.data.code==200){
+					for(let i=0;i<res.data.data.length;i++){
+						let item = res.data.data[i]
+						item.id = item.chapterId
+						
+					}
+					self.list = res.data.data
+				}
+			});
+		},
 		getChapterList(moduleId) {
 			let self = this
 			this.$api.chapterList(moduleId).then(res => {

+ 35 - 18
components/course/courseSection.vue

@@ -1,26 +1,30 @@
 <template>
 	<view style="display: flex;justify-content: space-between;align-items: center;" @click="getVideo">
-		<view style="display: flex;align-items: center;margin: 20rpx 0;">
-			<view class="tag tagColor1" v-if="menuItem.sectionType==1">录播</view>
-			<view class="tag tagColor2" v-if="menuItem.sectionType==2">直播</view>
-			<view class="tag tagColor3" v-if="menuItem.sectionType==3">回放</view>
-			<view class="t_content">
-			<view v-if="menuItem.sectionType==1" :class="playSectionId==newId?'color1':''">{{menuItem.name}}</view>
-			<view v-if="menuItem.sectionType==2" :class="playSectionId==newId?'color2':''">{{menuItem.name}}</view>
-			<view v-if="menuItem.sectionType==3" :class="playSectionId==newId?'color3':''">{{menuItem.name}}</view>
-				<view style="font-size: 20rpx;color: #FF3B30;" v-if="menuItem.liveStartTime">
-					<view v-if="menuItem.liveStartTime>nowTime">
-						<text>{{$method.timestampToTime(menuItem.liveStartTime)}}</text>-
-						<text>{{$method.timestampToTime(menuItem.liveEndTime)}}</text>
-					</view>
-					<view v-if="menuItem.liveStartTime<=nowTime&&menuItem.liveEndTime>nowTime">
-						<text>直播中</text>
-					</view>
-					<view v-if="menuItem.liveEndTime<nowTime">
-						<text>回放</text>
+		<view style="display: flex;justify-content: space-between;margin: 20rpx 0;width: 100%;">
+			<view style="display: flex;align-items: center;">
+				<view class="tag tagColor1" v-if="menuItem.sectionType==1">录播</view>
+				<view class="tag tagColor2" v-if="menuItem.sectionType==2">直播</view>
+				<view class="tag tagColor3" v-if="menuItem.sectionType==3">回放</view>
+				<view class="t_content">
+				<view v-if="menuItem.sectionType==1" :class="playSectionId==newId?'color1':''">{{menuItem.name}}</view>
+				<view v-if="menuItem.sectionType==2" :class="playSectionId==newId?'color2':''">{{menuItem.name}}</view>
+				<view v-if="menuItem.sectionType==3" :class="playSectionId==newId?'color3':''">{{menuItem.name}}</view>
+					<view style="font-size: 20rpx;color: #FF3B30;" v-if="menuItem.liveStartTime">
+						<view v-if="menuItem.liveStartTime>nowTime">
+							<text>{{$method.timestampToTime(menuItem.liveStartTime)}}</text>-
+							<text>{{$method.timestampToTime(menuItem.liveEndTime)}}</text>
+						</view>
+						<view v-if="menuItem.liveStartTime<=nowTime&&menuItem.liveEndTime>nowTime">
+							<text>直播中</text>
+						</view>
+						<view v-if="menuItem.liveEndTime<nowTime">
+							<text>回放</text>
+						</view>
 					</view>
 				</view>
+				<view v-if="menuItem.sectionType==null">{{menuItem.name}}</view>
 			</view>
+			<view v-if="isRebuild" class="tagRe">待重修</view>
 		</view>
 		<view v-if="menuItem.tryListen&&!isBuy" class="tryBox">
 			试看
@@ -49,6 +53,10 @@ export default {
 		isRebuild: {
 			type: Boolean,
 			default: false
+		},
+		gradeId: {
+			type: Number,
+			default: 0
 		}
 	},
 	data() {
@@ -99,6 +107,15 @@ export default {
 </script>
 
 <style scoped>
+	.tagRe{
+		width: 80rpx;
+		height: 28rpx;
+		background: #FF3B30;
+		border-radius: 8rpx;
+		font-size: 20rpx;
+		color: #FFFFFF;
+		text-align: center;
+	}
 	.tryBox{
 		width: 96rpx;
 		height: 48rpx;

+ 11 - 1
pages.json

@@ -459,6 +459,16 @@
 					}
 				}
 			},
+			{
+				"path": "subject/wrongBank",
+				"style": {
+					"navigationBarTitleText": "错题",
+					"app-plus": {
+						"titleNView": false, //禁用原生导航栏 
+						"bounce": "none"
+					}
+				}
+			},
 			
 			{
 				"path": "subject/collectTypeBank",
@@ -471,7 +481,7 @@
 				}
 			},
 			{
-				"path": "subject/collectQuestionTypeBank",
+				"path": "subject/wrongTypeBank",
 				"style": {
 					"navigationBarTitleText": "试卷",
 					"app-plus": {

+ 16 - 11
pages2/bank/detail.vue

@@ -48,10 +48,10 @@
 									{{item2.name}}
 								</view>
 								<view  v-if="item2.showList">
-									<view class="article" :class="{active:index3 == 0}"  v-for="(article,index3) in item2.list" :key="index3">
+									<view class="article" :class="{active:showTest(article.examId)}"  v-for="(article,index3) in item2.list" :key="index3">
 										<view class="flex_auto">{{article.examName}}</view>
-										<navigator :url="'/pages2/bank/questionBankTest?id='+article.examId">
-											<view class="btn">试做</view>
+										<navigator :url="'/pages2/bank/questionBankTest?id='+article.examId+'&num='+showTest(article.examId).num">
+											<view class="btn" v-if="showTest(article.examId)">试做</view>
 										</navigator>
 									</view>
 								</view>
@@ -69,10 +69,10 @@
 							{{item1.name}}
 						</view>
 						<view v-if="item1.showList" >
-							<view class="article" :class="{active:index2 == 0}"  :key="index3" v-for="(article,index2) in item1.list">
+							<view class="article" :class="{active:showTest(article.examId)}"  :key="index3" v-for="(article,index2) in item1.list">
 								<view class="flex_auto">{{item1.name}}</view>
-								<navigator :url="'/pages2/bank/questionBankTest?id='+article.majorId">
-									<view class="btn">试做</view>
+								<navigator :url="'/pages2/bank/questionBankTest?id='+article.majorId+'&num='+showTest(article.examId).num">
+									<view class="btn"  v-if="showTest(article.examId)">试做</view>
 								</navigator>
 								
 							</view>
@@ -80,10 +80,10 @@
 					</template>
 					
 					<template v-if="item1.type ==3">
-						<view class="article active" >
+						<view class="article" :class="{active:showTest(item1.majorId)}" >
 							<view class="flex_auto">{{item1.name}}</view>
-							<navigator :url="'/pages2/bank/questionBankTest?id='+item1.majorId">
-								<view class="btn">试做</view>
+							<navigator :url="'/pages2/bank/questionBankTest?id='+item1.majorId+'&num='+showTest(item1.majorId).num">
+								<view class="btn" v-if="showTest(item1.majorId)">试做</view>
 							</navigator>
 							
 						</view>
@@ -118,7 +118,8 @@ export default {
 			current:0,
 			id:'',
 			goodsData:{},
-			bankList:[]
+			bankList:[],
+			goodsExamConfig:[],
 		};
 	},
 	filters: {
@@ -147,7 +148,7 @@ export default {
 			this.$api.commonGoodsDetail(this.id).then(res => {
 				console.log(res)
 				this.goodsData = res.data.data;
-				 
+				this.goodsExamConfig = JSON.parse(res.data.data.goodsExamConfig)
 			})
 		},
 		goodsBankList() {
@@ -166,6 +167,10 @@ export default {
 				 
 			})
 		},
+		
+		showTest(id) {
+			return this.goodsExamConfig.find(item => item.examId == id);
+		},
 		clickModule(e) {
 			
 			let index = e.currentTarget.dataset.index;

+ 74 - 29
pages2/bank/questionBank.vue

@@ -345,7 +345,8 @@ export default {
 			isSubmit:false,
 			lastTime:0,
 			timer :null,
-			wrongList:[]
+			wrongList:[],
+			bankType:0
 		};
 	},
 	onLoad(option){
@@ -353,12 +354,56 @@ export default {
 		this.goodsId = option.goodsid;
 		this.goodsQuestionList();
 		this.wrongRecordExamQuestionList();
+		this.bankExam();
 	},
 	onUnload() {
 		console.log(this.ans)
 		this.examRecordEdit();
 	},
 	methods: {
+		bankExam() {
+			this.$api.bankExam(this.id).then(res => {
+				this.bankType = res.data.data.doType;
+				console.log(res.data)
+				if(this.bankType == 1) { // 练习
+					wx.enableAlertBeforeUnload({
+					
+						message: "返回上页时弹出对话框1212",
+						
+						success: function (res) {
+						
+						console.log("方法注册成功:", res)
+						
+						},
+						
+						fail: function (errMsg) {
+						
+						console.log("方法注册失败:", errMsg);
+						
+						},
+					
+					});
+				} else if(this.bankType == 2){  //考试
+					wx.enableAlertBeforeUnload({
+					
+						message: "返回上页时弹出对话框1212",
+						
+						success: function (res) {
+						
+						console.log("方法注册成功:", res)
+						
+						},
+						
+						fail: function (errMsg) {
+						
+						console.log("方法注册失败:", errMsg);
+						
+						},
+					
+					});
+				}
+			})
+		},
 		/**
 		 * 获取错题集
 		 */
@@ -560,16 +605,16 @@ export default {
 					
 				})
 			} else {
-				let question = this.wrongList.find(item => item.questionId == this.questionList[bindex].questionId);
-				if(question) {
-					this.$api.wrongRecordDelete({
-						"examId": +this.id,
-						"goodsId": +this.goodsId,
-						"questionId": this.questionList[bindex].questionId,
-					}).then(res => {
+				// let question = this.wrongList.find(item => item.questionId == this.questionList[bindex].questionId);
+				// if(question) {
+				// 	this.$api.wrongRecordDelete({
+				// 		"examId": +this.id,
+				// 		"goodsId": +this.goodsId,
+				// 		"questionId": this.questionList[bindex].questionId,
+				// 	}).then(res => {
 						
-					})
-				}
+				// 	})
+				// }
 				
 			}
 		},
@@ -629,16 +674,16 @@ export default {
 					
 				})
 			} else {
-				let question = this.wrongList.find(item => item.questionId == this.questionList[bindex].questionId);
-				if(question) {
-					this.$api.wrongRecordDelete({
-						"examId": +this.id,
-						"goodsId": +this.goodsId,
-						"questionId": this.questionList[bindex].questionId,
-					}).then(res => {
+				// let question = this.wrongList.find(item => item.questionId == this.questionList[bindex].questionId);
+				// if(question) {
+				// 	this.$api.wrongRecordDelete({
+				// 		"examId": +this.id,
+				// 		"goodsId": +this.goodsId,
+				// 		"questionId": this.questionList[bindex].questionId,
+				// 	}).then(res => {
 						
-					})
-				}
+				// 	})
+				// }
 			}
 		},
 		
@@ -677,16 +722,16 @@ export default {
 					
 				})
 			} else {
-				let question = this.wrongList.find(item => item.questionId == this.questionList[bindex].questionId);
-				if(question) {
-					this.$api.wrongRecordDelete({
-						"examId": +this.id,
-						"goodsId": +this.goodsId,
-						"questionId": this.questionList[bindex].questionId,
-					}).then(res => {
+				// let question = this.wrongList.find(item => item.questionId == this.questionList[bindex].questionId);
+				// if(question) {
+				// 	this.$api.wrongRecordDelete({
+				// 		"examId": +this.id,
+				// 		"goodsId": +this.goodsId,
+				// 		"questionId": this.questionList[bindex].questionId,
+				// 	}).then(res => {
 						
-					})
-				}
+				// 	})
+				// }
 			}
 		},
 		
@@ -1373,7 +1418,7 @@ export default {
 .footer_btn {
 	background-color: #fff;
 	z-index: 10078;
-	position: absolute;
+	position: fixed;
 	bottom: 0rpx;
 	display: flex;
 	align-items: center;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 354 - 250
pages2/bank/questionBankTest.vue


+ 177 - 39
pages2/class/detail.vue

@@ -45,22 +45,22 @@
 			<view v-show="current == 0">
 				<view class="menuBox" v-for="(item, index) in reMenuList">
 					<!--模块 -->
-					<view v-if="item.type == 1"><courseModule :isRebuild="true" :isBuy="true" :menuItem="item" :levelId="item.menuId"></courseModule></view>
+					<view v-if="item.type == 1"><courseModule :gradeId="gradeId" :isRebuild="true" :isBuy="true" :menuItem="item" :levelId="item.menuId"></courseModule></view>
 					<!--章 -->
-					<view v-if="item.type == 2"><courseChapter :isRebuild="true" :isBuy="true" :menuItem="item" :levelId="'0-'+item.menuId"></courseChapter></view>
+					<view v-if="item.type == 2"><courseChapter :gradeId="gradeId" :isRebuild="true" :isBuy="true" :menuItem="item" :levelId="'0-'+item.menuId"></courseChapter></view>
 					<!--节 -->
-					<view v-if="item.type == 3"><courseSection :isRebuild="true" :isBuy="true" :menuItem="item" :levelId="'0-0-'+item.menuId"></courseSection></view>
+					<view v-if="item.type == 3"><courseSection :gradeId="gradeId" :isRebuild="true" :isBuy="true" :menuItem="item" :levelId="'0-0-'+item.menuId"></courseSection></view>
 				</view>
 			</view>
 			<!--目录 -->
 			<view v-show="current == 1">
 				<view class="menuBox" v-for="(item, index) in menuList">
 					<!--模块 -->
-					<view v-if="item.type == 1"><courseModule :isBuy="true" :menuItem="item" :levelId="item.menuId"></courseModule></view>
+					<view v-if="item.type == 1"><courseModule  :isBuy="true" :menuItem="item" :levelId="item.menuId"></courseModule></view>
 					<!--章 -->
-					<view v-if="item.type == 2"><courseChapter :isBuy="true" :menuItem="item" :levelId="'0-'+item.menuId"></courseChapter></view>
+					<view v-if="item.type == 2"><courseChapter  :isBuy="true" :menuItem="item" :levelId="'0-'+item.menuId"></courseChapter></view>
 					<!--节 -->
-					<view v-if="item.type == 3"><courseSection :isBuy="true" :menuItem="item" :levelId="'0-0-'+item.menuId"></courseSection></view>
+					<view v-if="item.type == 3"><courseSection  :isBuy="true" :menuItem="item" :levelId="'0-0-'+item.menuId"></courseSection></view>
 				</view>
 			</view>
 			<!--笔记 -->
@@ -68,48 +68,62 @@
 				<view class="inputBottom">
 					<view style="width: 10%;"><image src="/static/icon/note3.png" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image></view>
 					<view style="width: 73%;height: 88rpx;margin-bottom: 15rpx;">
-						<u-input height="78" fixed="true" :placeholder="placeholder" type="textarea" :custom-style="inputStyle" v-model="value" />
+						<u-input height="78" fixed="true" :placeholder="placeholder" type="textarea" :custom-style="inputStyle" v-model="noteValue" />
 					</view>
-					<view style="color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;">提交</view>
+					<view style="color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;" @click="postNote">提交</view>
 				</view>
-				<view v-for="(item, index) in menuList">
-					<view class="dateBox">2021年10月30日</view>
-					<view class="noteBox">
-						<view class="tBox">
-							<image src="/static/icon/note1.png" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image>
-							<view class="title leftPadding">施工承发包模式-施工合同与物资采购合同</view>
-						</view>
-						<view class="tBox2">
-							<view class="title" style="width: 39rpx;height: 39rpx;margin:0 29rpx;">00:20</view>
-							<view class="t2Content leftPadding">这是一段用户记录的笔记本文,当内容过长时 需要换行,完整显示文字内容。</view>
-						</view>
-						<view class="tBox">
-							<image src="/static/icon/note2.png" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image>
-							<view class="title leftPadding">施工承发包模式-施工合同与物资采购合同</view>
+				<view v-for="(item, index) in noteList" >
+					<view class="dateBox">{{$method.timestampToTime(item.dateNote)}}</view>
+						<view class="noteBox" v-for="(item1, index1) in item.userNotes">
+							<view>
+								<view class="tBox" v-if="playSectionId==item1.sectionId">
+									<image src="/static/icon/note1.png" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image>
+									<view class="title leftPadding">{{item1.dateNote}}</view>
+								</view>
+								<view class="tBox2">
+									<view class="title" style="width: 39rpx;height: 39rpx;margin:0 29rpx;">{{$method.secondToDate(item1.noteSecond)}}</view>
+									<view class="t2Content leftPadding">fdgdfgd</view>
+								</view>
+								<view class="tBox" v-if="playSectionId!=item1.sectionId">
+									<image src="/static/icon/note2.png" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image>
+									<view class="title leftPadding">{{item1.sectionName}}</view>
+								</view>
+								<view style="margin-left: 97rpx;" class="t2Content leftPadding">{{item1.noteText}}</view>
+							</view>
+							
 						</view>
-						<view style="margin-left: 97rpx;" class="t2Content leftPadding">这是一段用户记录的笔记本文,当内容过长时 需要换行,完整显示文字内容。</view>
-					</view>
+
 				</view>
 			</view>
 			<!--答疑 -->
 			<view v-show="current == 3">
 				<view class="inputBottom">
 					<view style="width: 73%;height: 88rpx;margin-bottom: 15rpx;margin-left: 10% ;">
-						<u-input height="78" fixed="true" placeholder="您可以在这里输入答疑内容" type="textarea" :custom-style="inputStyle" v-model="value" />
+						<u-input height="78" fixed="true"   :placeholder="placeholder" type="textarea" :custom-style="inputStyle" v-model="ctxValue" />
 					</view>
-					<view style="color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;">提交</view>
+					<view style="color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;" @click="postContent">提交</view>
 				</view>
-				<view v-for="(item, index) in menuList" style="background-color: #FFFFFF;">
-					<view class="chat_box">
-						<view><image src="https://file-dev.xyyxt.net/oss/images/avatar/20210623/1624414559368_44562477.png" style="width: 64rpx;height: 64rpx;"></image></view>
-						<view style="margin-left: 15rpx;">
-							<view class="chat1">倪虹洁</view>
-							<view class="chat2">2021/10/31 09:36:23</view>
-							<view class="chat3">老师的课讲得太棒了!</view>
+				<view v-for="(item, index) in answerList" style="background-color: #FFFFFF;margin-bottom: 20rpx;">
+					<view class="chat_box" @click.stop="clearCtx">
+						<view style="display: flex;" >
+							<view><image :src="$method.splitImgHost(item.avatar)" style="width: 64rpx;height: 64rpx;"></image></view>
+							<view style="margin-left: 15rpx;">
+								<view class="chat1">{{item.realname}}</view>
+								<view class="chat2">{{$method.timestampToTime(item.createTime)}}</view>
+								<view class="chat3">
+									<text v-if="item.assignUserId>0">回复</text>
+									<text v-if="item.assignUserId>0" style="color: #007AFF;">@{{item.assignRealname}}</text>
+									{{item.answerText}}</view>
+							</view>
 						</view>
+						<view class="btnReply" @click.stop="replyContent(item)" v-if="item.userId!=userInfo.userId">回复</view>
+						<view v-else class="btnDel" @click.stop="delContent(item)">删除</view>
 					</view>
 					<u-line color="#D6D6DB" />
 				</view>
+				<view v-if="answerList.length==0" style="text-align: center;">
+					暂无记录
+				</view>
 			</view>
 		</view>
 		<!-- 播放前拍照start -->
@@ -203,9 +217,13 @@ export default {
 			gradeId:0,
 			chapterId:0,
 			moduleId:0,
-			reMenuList: [
-			],
-			
+			reMenuList: [],
+			answerList: [],
+			assignUserId:0,
+			placeholder:'您可以在这里输入答疑内容',
+			ctxValue:'',
+			noteList:[],
+			noteValue:''
 		};
 	},
 	onUnload() {},
@@ -214,8 +232,8 @@ export default {
 		this.courseId = option.id;
 		this.goodsId = uni.getStorageSync('courseGoodsId');
 		this.courseDetail();
-		this.getMenuList();
 		this.getGoodsDetail()
+		this.getAnswerList()
 		
 	},
 	onShow() {},
@@ -253,6 +271,92 @@ export default {
 		});
 	},
 	methods: {
+		postNote() {
+			let self = this;
+			if(!(this.playSectionId>0)){
+				this.$u.toast('目前无播放视频');
+				retun
+			}
+			if(!this.noteValue){
+				this.$u.toast('请输入内容');
+				retun
+			}
+			 var polyvPlayerContext = this.selectComponent('#playerVideo');
+			let noteDate = this.$method.getZeroTime()
+			let noteSecond= polyvPlayerContext.getCurrentTime()
+			if(!noteSecond){
+				this.$u.toast('视频暂未开始');
+				retun
+			}
+			let data = { 
+				gradeId:this.gradeId,
+				goodsId:this.goodsId,
+				sectionId:this.playSectionId,
+				courseId: this.courseId,
+				noteText:this.noteValue,
+				noteDate:noteDate,
+				noteSecond:noteSecond}
+				console.log(data,66)
+			this.$api.postNote(data).then(res => {
+				if (res.data.code == 200) {
+					this.$u.toast('发布成功');
+					self.getNoteList()
+					this.noteValue = ''
+				}
+			});
+		},
+		getNoteList() {
+			let self = this;
+			this.$api.noteList({ courseId: this.courseId,gradeId:this.gradeId,goodsId:this.goodsId }).then(res => {
+				if (res.data.code == 200) {
+					self.noteList = res.data.rows;
+				}
+			});
+		},
+		delAnswer(answerId) {
+			let self = this;
+			let data = { answerId: answerId,status:-1 }
+			this.$api.delAnswer(data).then(res => {
+				if (res.data.code == 200) {
+					self.getAnswerList()
+				}
+			});
+		},
+		clearCtx(){
+			console.log(4234)
+			this.placeholder ='您可以在这里输入答疑内容'
+			this.ctxValue = ''
+			this.assignUserId=0
+		},
+		replyContent(item){
+			this.assignUserId = item.userId
+			this.placeholder = '@'+item.realname
+		},
+		delContent(item){
+			this.delAnswer(item.answerId)
+		},
+		postAnswer() {
+			let self = this;
+			let data = { courseId: this.courseId,answerText:this.ctxValue }
+			if(this.assignUserId>0){
+				data.assignUserId = this.assignUserId
+			}
+			this.$api.postAnswer(data).then(res => {
+				if (res.data.code == 200) {
+					this.$u.toast('发布成功');
+					self.getAnswerList()
+					this.placeholder ='您可以在这里输入答疑内容'
+					this.ctxValue = ''
+					this.assignUserId=0
+				}
+			});
+		},
+		postContent(){
+			if(!this.ctxValue){
+				this.$u.toast('请输入内容');
+			}
+			this.postAnswer()
+		},
 		postStudyRecord(status=0) {
 			let self = this;
 			let data = {
@@ -449,7 +553,9 @@ export default {
 			this.$api.goodsDetail(this.goodsId).then(res => {
 				self.goodsData = res.data.data;
 				self.gradeId = self.goodsData.gradeId
+				self.getMenuList();
 				self.getReMenuList() //获取重修目录
+				self.getNoteList()
 				if(self.goodsData.goodsPlayConfig){
 					self.goodsPlayConfig = JSON.parse(self.goodsData.goodsPlayConfig);
 					if(self.goodsPlayConfig.autoPlay>0){
@@ -473,9 +579,17 @@ export default {
 		startVideo() {
 			this.startStatus = true;
 		},
+		getAnswerList() {
+			let self = this;
+			this.$api.answerList({ courseId: this.courseId }).then(res => {
+				if (res.data.code == 200) {
+					self.answerList = res.data.rows;
+				}
+			});
+		},
 		getReMenuList() {
 			let self = this;
-			this.$api.menuList({ courseId: this.courseId,rebuild:1,gradeId:this.gradeId }).then(res => {
+			this.$api.reMenuList({ courseId: this.courseId,rebuild:1,gradeId:this.gradeId }).then(res => {
 				if (res.data.code == 200) {
 					for (let i = 0; i < res.data.rows.length; i++) {
 						let item = res.data.rows[i];
@@ -521,6 +635,29 @@ export default {
 </script>
 
 <style  lang="scss" scope>
+	.btnReply{
+		width: 80rpx;
+		height: 40rpx;
+		background: #E3F0FF;
+		border-radius: 16rpx;
+		text-align: center;
+		color: #007AFF;
+	}
+	.btnDel{
+		width: 80rpx;
+		height: 40rpx;
+		background: #FFEDF0;
+		border-radius: 16rpx;
+		text-align: center;
+		color: #FF2D55;
+	}
+	.btnReply{
+		width: 80rpx;
+		height: 40rpx;
+		background: #E3F0FF;
+		border-radius: 16rpx;
+		font-size: 24rpx;
+	}
 	.photoBox{
 		.photoTop{
 			height: 74upx;
@@ -571,6 +708,7 @@ export default {
 .chat_box {
 	display: flex;
 	padding: 20rpx;
+	justify-content: space-between;
 }
 .chat3 {
 	font-size: 30rpx;
@@ -634,8 +772,8 @@ page {
 .noteBox {
 	width: 100%;
 	background: #ffffff;
-	border-radius: 16rpx;
 	padding: 10rpx;
+	border-radius: 16rpx;
 }
 .dateBox {
 	width: 216rpx;

+ 1 - 1
pages2/subject/collectBank.vue

@@ -1044,7 +1044,7 @@ export default {
 .footer_btn {
 	background-color: #fff;
 	z-index: 10078;
-	position: absolute;
+	position: fixed;
 	bottom: 0rpx;
 	display: flex;
 	align-items: center;

+ 1 - 1
pages2/subject/collectTypeBank.vue

@@ -1044,7 +1044,7 @@ export default {
 .footer_btn {
 	background-color: #fff;
 	z-index: 10078;
-	position: absolute;
+	position: fixed;
 	bottom: 0rpx;
 	display: flex;
 	align-items: center;

+ 23 - 8
pages2/subject/wrong.vue

@@ -23,8 +23,7 @@
 			<view class="wrongHead">
 				<view class="title">错题统计<text class="sub">(不含简答和案例题)</text></view>
 				<view class="progress">
-					<text v-if="type == 1">{{testList.total}}</text>
-					<text v-if="type == 2">{{typeList.total}}</text>
+					<text>{{total}}</text>
 				</view>
 			</view> 
 			<view class="wrongList" v-if="type == 1">
@@ -33,10 +32,10 @@
 					<view class="bt">
 						<view class="left">错题数<text class="num">{{item.wrongQuestionNum}}</text></view>
 						<view class="right">
-							<navigator :url="'/pages2/subject/collectBank?id='+item.examId">
+							<navigator :url="'/pages2/subject/wrongBank?id='+item.examId">
 								<view class="btn">重做</view>
 							</navigator>
-							<navigator :url="'/pages2/subject/collectBank?id='+item.examId+'&explain=1'">
+							<navigator :url="'/pages2/subject/wrongBank?id='+item.examId+'&explain=1'">
 								<view class="btn">解析</view>
 							</navigator>
 							<!-- <view class="btn">解析</view> -->
@@ -57,10 +56,10 @@
 					<view class="bt">
 						<view class="left">错题数<text class="num">{{item.num}}</text></view>
 						<view class="right">
-							<navigator :url="'/pages2/subject/collectQuestionTypeBank?type='+item.type">
+							<navigator :url="'/pages2/subject/wrongTypeBank?type='+item.type">
 								<view class="btn">重做</view>
 							</navigator>
-							<navigator :url="'/pages2/subject/collectQuestionTypeBank?type='+item.type+'&explain=1'">
+							<navigator :url="'/pages2/subject/wrongTypeBank?type='+item.type+'&explain=1'">
 								<view class="btn">解析</view>
 							</navigator>
 						</view>
@@ -88,14 +87,17 @@ export default {
 			testList:[],
 			typeList:[],
 			goodsid:'',
-			paperid:''
+			paperid:'',
+			total:0,
 		};
 	},
 	onPullDownRefresh() {},
+	onShow() {
+		this.getData();
+	},
 	onLoad(option) {
 		this.listGoodsUserQuestion();
 		this.examaperList();
-		this.getData();
 	},
 	methods: {
 		getData() {
@@ -126,6 +128,12 @@ export default {
 				goodsId:this.goodsid
 			}).then(res => {
 				this.testList = res.data;
+				let total = 0;
+				this.testList.rows.forEach(item => {
+					total += item.wrongQuestionNum;
+				})
+				
+				this.total = total
 			})
 		},
 		wrongRecordTypeList() {
@@ -134,6 +142,13 @@ export default {
 				goodsId:this.goodsid
 			}).then(res => {
 				this.typeList = res.data;
+				
+				let total = 0;
+				this.typeList.rows.forEach(item => {
+					total += item.num;
+				})
+				
+				this.total = total
 			})
 		},
 		selectType(type) {

+ 1187 - 0
pages2/subject/wrongBank.vue

@@ -0,0 +1,1187 @@
+<template>
+	<view id="questionBank">
+		<swiper class="swiper" :current="current" @change="swiperChange" :interval="interval">
+			<swiper-item v-for="(bank,bankIndex) in questionList" :key="bankIndex">
+				<view class="pageContent">
+					<view class="pad_8 titBox" >
+						<view class="firstLetter">
+							<view class="leftLetters">
+								<view class="btnType">
+									<text v-if="bank.type==1">单选</text>
+									<text v-if="bank.type==2">多选</text>
+									<text v-if="bank.type==3">判断</text>
+									<text v-if="bank.type==4">案例题</text>
+									<text v-if="bank.type==5">简答题</text>
+								</view>
+								<text>{{bankIndex+1}}/{{questionList.length}}</text>
+							</view>
+							<view style="color: #666;font-size: 28rpx;"></view>
+							<view class="leftLetters"></view>
+						</view>
+						<view class="titles">
+							<rich-text :nodes="bank.content"></rich-text>
+						</view>		
+					</view>
+					<view class="pad_8 titBox">
+						<template v-if="bank.type == 1">
+							<view v-if="!bank.ques">
+								<view v-for="(item, index) in bank.jsonStr" :key="index" class="lisSty" @click="radioSelect(item.optionsId,bankIndex)">
+									<view class="activeTI">{{ ast[index] }}</view>
+									<view class="flex_auto">{{ item.content }}</view>
+								</view>
+							</view>
+							<view v-if="bank.ques">
+								<view v-for="(item, index) in bank.jsonStr" :key="index" class="lisSty">
+									<text :class="{right:(item.optionsId == bank.ques) || (item.optionsId == bank.ans),wrong:(item.optionsId == bank.ques) && (bank.ques != bank.ans)}"  class="activeTI">{{ ast[index] }}</text>
+									<view class="flex_auto">{{ item.content }}</view>
+								</view>
+							</view> 
+							<view v-if="bank.ques">
+								<view class="pad_8 answer">
+									<view>正确答案:{{ast[bank.ans-1]}}</view>
+									<view v-if="!explain">我的答案:{{ast[bank.ques-1]}}</view>
+								</view>
+								<view class="pad_8 answerInfos">
+									<view class="answerTitle">答案解析</view>
+									<view class="answerContent">
+										<rich-text :nodes="bank.analysisContent"></rich-text>
+									</view>
+								</view>
+							</view>
+						</template>
+						
+						<template v-if="bank.type == 2">
+							<view v-if="!bank.ques">
+								<view v-for="(item, index) in bank.jsonStr" :key="index" class="lisSty" @click="checkboxSelect(item.optionsId,bankIndex,index)">
+									<view :class="{checked:item.checked}" class="activeTI">{{ ast[index] }}</view>
+									<view class="flex_auto">{{ item.content }}</view>
+								</view>
+							</view>
+							<view v-if="!bank.ques" class="submit_checkbox" @click="checkboxSubmit(bankIndex)">
+								确认答案
+							</view>
+							<view v-if="bank.ques">
+								<view v-for="(item, index) in bank.jsonStr" :key="index" class="lisSty">
+									<text :class="{right:(bank.ques.indexOf(item.optionsId) != -1 ) || (bank.ans.indexOf(item.optionsId) != -1),wrong:(bank.ques.indexOf(item.optionsId) != -1 ) && (bank.ans.indexOf(item.optionsId) == -1)}"  class="activeTI">{{ ast[index] }}</text>
+									<view class="flex_auto">{{ item.content }}</view>
+								</view>
+							</view> 
+							<view v-if="bank.ques">
+								<view class="pad_8 answer">
+									<view>正确答案:
+										<text v-for="ansItem in bank.ans">{{ast[ansItem-1]}}</text>
+									</view>
+									<view v-if="!explain">我的答案:
+										<text v-for="quesItem in bank.ques">{{ast[quesItem-1]}}</text>
+									</view>
+								</view>
+								<view class="pad_8 answerInfos">
+									<view class="answerTitle">答案解析</view>
+									<view class="answerContent">
+										<rich-text :nodes="bank.analysisContent"></rich-text>
+									</view>
+								</view>
+							</view>
+						</template>
+						
+						<template v-if="bank.type == 3">
+							<view v-if="!bank.ques">
+								<view v-for="(item, index) in judge" :key="index" class="lisSty" @click="judgeSelect(index,bankIndex)">
+									<view class="activeTI">{{ ast[index] }}</view>
+									{{ item }}
+								</view>
+							</view>
+							<view v-if="bank.ques">
+								<view v-for="(item, index) in judge" :key="index" class="lisSty">
+									<text :class="{right:(index == bank.ques) || (index == bank.ans),wrong:(index == bank.ques) && (bank.ques != bank.ans)}"  class="activeTI">{{ ast[index] }}</text>
+									{{ item }}
+								</view>
+							</view> 
+							<view v-if="bank.ques">
+								<view class="pad_8 answer">
+									<view>正确答案:{{ast[bank.ans]}}</view>
+									<view v-if="!explain">我的答案:{{ast[bank.ques]}}</view>
+								</view>
+								<view class="pad_8 answerInfos">
+									<view class="answerTitle">答案解析</view>
+									<view class="answerContent">
+										<rich-text :nodes="bank.analysisContent"></rich-text>
+									</view>
+								</view>
+							</view>
+						</template>
+						
+						
+						<!-- 简答题 -->
+						<template v-if="bank.type == 5">
+							<view class="ans">
+								<view class="ans_input" v-if="!bank.ques">
+									<view class="top flex">
+										<image :data-index="bankIndex" class="icon" @click="chooseImg(bankIndex)" src="/static/08-10_032.jpg" mode=""></image>
+										<view class="progress">0/4</view>
+										<view class="submit"  @click="submitAns(bankIndex)" >确认答案</view>
+									</view>
+									<view class="textarea">
+										<textarea v-model="bank.ansText.text" placeholder="在此输入答案"></textarea>
+									</view>
+									<view class="imgs">
+										<view class="img" v-for="(img,imgIndex) in bank.ansText.imageList" >
+											<text @click="deleteImg(imgIndex,bankIndex)">x</text>
+											<image :src="$method.splitImgHost(img, true)"></image>
+										</view>
+									</view>
+								</view>
+								<view class="ans_submit answerInfos" v-if="bank.ques && !explain">
+									<view class="answerTitle">答案我的</view>
+									{{bank.ques.text}}
+									<view class="imgs">
+										<image class="img" v-for="ques in bank.ques.imageList" :src="ques"></image>
+									</view>
+								</view>
+							</view>
+							<view v-if="bank.ques">
+								<view class="pad_8 answerInfos">
+									<view class="answerTitle">答案解析</view>
+									<view class="answerContent">
+										<rich-text :nodes="bank.analysisContent"></rich-text>
+									</view>
+								</view>
+							</view>
+						</template>
+						
+						<!-- 案例题 -->
+						<template v-if="bank.type == 4">
+							<view class="tabs">
+								<view class="tab" :class="{current:tabIndex == bank.current}" :key="tabIndex" v-for="(tab,tabIndex) in bank.jsonStr" @click="tabSelect(tabIndex,bankIndex)">问题{{tabIndex}}</view>
+							</view>
+							<view v-for="(ansItem,ansIndex) in bank.jsonStr" v-if="bank.current == ansIndex" :key="ansIndex">
+								<view class="titles">
+									<rich-text :nodes="ansItem.content"></rich-text>
+								</view>
+								<template v-if="ansItem.type == 1">
+									<view v-if="!bank.ques[ansIndex]">
+										<view v-for="(option, childIndex) in ansItem.optionsList" :key="childIndex" class="lisSty" @click="radioSelectChild(option.optionsId,ansIndex,bankIndex)">
+											<view class="activeTI">{{ ast[childIndex] }}</view>
+											<rich-text class="textChild" :nodes="option.content"></rich-text>
+										</view>
+									</view>
+									<view v-if="bank.ques[ansIndex]">
+										<view v-for="(option, childIndex) in ansItem.optionsList" :key="index" class="lisSty">
+											<text :class="{right:(option.optionsId == bank.ques[ansIndex]) || (option.optionsId == bank.ans[ansIndex]),wrong:(option.optionsId == bank.ques[ansIndex]) && (bank.ques[ansIndex] != bank.ans[ansIndex])}"  class="activeTI">{{ ast[childIndex] }}</text>
+											<rich-text :nodes="option.content"></rich-text>
+										</view>
+									</view> 
+									<view v-if="bank.ques[ansIndex]">
+										<view class="pad_8 answer">
+											<view>正确答案:{{ast[bank.ans[ansIndex]-1]}}</view>
+											<view v-if="!explain">我的答案:{{ast[bank.ques[ansIndex]-1]}}</view>
+										</view>
+										<view class="pad_8 answerInfos">
+											<view class="answerTitle">答案解析</view>
+											<view class="answerContent">
+												<rich-text :nodes="option.analysisContent"></rich-text>
+											</view>
+										</view>
+									</view>
+								</template>
+								
+								<template v-if="ansItem.type == 2">
+									<view v-if="!bank.ques[ansIndex]">
+										<view v-for="(option, childindex) in ansItem.optionsList" :key="childindex" class="lisSty" @click="checkboxSelectChild(bankIndex,ansIndex,childindex)">
+											<view :class="{checked:option.checked}" class="activeTI">{{ ast[childindex] }}</view>
+											<rich-text :nodes="option.content"></rich-text>
+										</view>
+									</view>
+									<view v-if="!bank.ques[ansIndex]" class="submit_checkbox" @click="checkboxSubmitChild(bankIndex,ansIndex)">
+										确认答案
+									</view>
+									<view v-if="bank.ques && bank.ques[ansIndex]">
+										<view v-for="(option, childindex) in ansItem.optionsList" :key="childindex" class="lisSty">
+											<text :class="{right:right(bankIndex,ansIndex,option),wrong:wrong(bankIndex,ansIndex,option)}"  class="activeTI">{{ ast[childindex] }}</text>
+											<rich-text :nodes="option.content"></rich-text>
+										</view>
+									</view> 
+									<view v-if="bank.ques[ansIndex]">
+										<view class="pad_8 answer">
+											<view>正确答案:
+												<text v-for="ansItem1 in bank.ans[ansIndex]">{{ast[ansItem1-1]}}</text>
+											</view>
+											<view v-if="!explain">我的答案:
+												<text v-for="quesItem in bank.ques[ansIndex]">{{ast[quesItem-1]}}</text>
+											</view>
+										</view>
+										<view class="pad_8 answerInfos">
+											<view class="answerTitle">答案解析</view>
+											<view class="answerContent">
+												<rich-text :nodes="ansItem.analysisContent"></rich-text>
+											</view>
+										</view>
+									</view>
+								</template>
+								
+								<template v-if="ansItem.type == 3">
+									<view v-if="!bank.ques[ansIndex]">
+										<view v-for="(option, childindex) in judge" :key="childindex" class="lisSty" @click="judgeSelectChild(ansIndex,childindex,bankIndex)">
+											<view class="activeTI">{{ ast[childindex] }}</view>
+											{{ option }}
+										</view>
+									</view>
+									<view v-if="bank.ques[ansIndex]">
+										<view v-for="(option, childindex) in judge" :key="childindex" class="lisSty">
+											<text :class="{right:(childindex == bank.ques[ansIndex]) || (childindex == bank.ans[ansIndex]),wrong:(childindex == bank.ques[ansIndex]) && (bank.ques[ansIndex] != bank.ans[ansIndex])}"  class="activeTI">{{ ast[childindex] }}</text>
+											{{ option }}
+										</view>
+									</view> 
+									<view v-if="bank.ques[ansIndex]">
+										<view class="pad_8 answer">
+											<view>正确答案:{{ast[bank.ans[ansIndex]]}}</view>
+											<view v-if="!explain">我的答案:{{ast[bank.ques[ansIndex]]}}</view>
+										</view>
+										<view class="pad_8 answerInfos">
+											<view class="answerTitle">答案解析</view>
+											<view class="answerContent">
+												<rich-text :nodes="ansItem.analysisContent"></rich-text>
+											</view>
+										</view>
+									</view>
+								</template>
+								
+								
+								<!-- 简答题 -->
+								<template v-if="ansItem.type == 5">
+									<view class="ans">
+										<view class="ans_input" v-if="!bank.ques[ansIndex]">
+											<view class="top flex">
+												<image class="icon" @click="chooseImgChild(bankIndex,ansIndex)" src="/static/08-10_032.jpg" mode=""></image>
+												<view class="progress">0/4</view>
+												<view class="submit"  @click="submitAnsChild(bankIndex,ansIndex)">确认答案</view>
+											</view>
+											<view class="textarea">
+												<textarea v-model="ansItem.ansText.text" placeholder="在此输入答案"></textarea>
+											</view>
+											<view class="imgs">
+												<view class="img" v-for="(img,imgIndex) in ansItem.ansText.imageList" >
+													<text @click="deleteImgChild(imgIndex,bankIndex,ansIndex)">x</text>
+													<image :src="$method.splitImgHost(img, true)"></image>
+												</view>
+											</view>
+										</view>
+										<view class="ans_submit answerInfos" v-if="bank.ques[ansIndex] && !explain">
+											<view class="answerTitle">答案我的</view>
+											{{bank.ques[ansIndex].text}}
+											<view class="imgs">
+												<image class="img" v-for="ques in bank.ques[ansIndex].imageList" :src="ques"></image>
+											</view>
+										</view>
+									</view>
+									<view v-if="bank.ques[ansIndex]">
+										<view class="pad_8 answerInfos">
+											<view class="answerTitle">答案解析</view>
+											<view class="answerContent">
+												<rich-text :nodes="ansItem.analysisContent"></rich-text>
+											</view>
+										</view>
+									</view>
+								</template>
+								
+								
+							</view>
+						</template>
+						
+						
+					</view>
+					
+				
+					<view class="footer_btn">
+						<view @click="openFooterTab">答题卡</view>
+					</view>
+				</view>
+			</swiper-item>
+		</swiper>
+		
+		<u-popup v-model="show" mode="bottom" border-radius="14" height="680rpx">
+			<view class="popupView">
+				<view class="popupTops">
+					<view class="topIcon"></view>
+					点击编号即可跳转至对应题目
+				</view>
+				<view class="popupContent">
+					<scroll-view scroll-y="true" style="height: 506rpx;">
+						<view class="boxSty">
+							<view v-for="(item, index) in questionList" :key="index" @click="changeIndex(index)" :class="{isRight:isRight(item,index),isWrong:isWrong(item,index)}" class="liListSty">{{ index + 1 }}</view>
+						</view>
+					</scroll-view>
+				</view>
+			</view>
+		</u-popup>
+		
+		<view class="dialog" v-if="showDialog">
+			<view class="text">左右滑动切换上下题</view>
+			<view class="btn" @click="hideDialog">我知道了</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			id:'',
+			current:0,
+			questionList:[],
+			ast: ['A', 'B', 'C', 'D','E','F','G'],
+			judge:['错误','正确'],
+			show: false,
+			showDialog:true,
+			bankList: [],
+			collectList:[],
+			goodsId:'',
+			explain:''
+		};
+	},
+	onLoad(option){
+		this.id = option.id;
+		this.explain = option.explain;
+		this.wrongRecordExamQuestionList();
+	},
+	onUnload() {
+		
+	},
+	methods: {
+		wrongRecordExamQuestionList() {
+			this.$api.wrongRecordExamQuestionList({
+				examId:this.id
+			}).then(res => {
+				
+				res.data.rows.forEach((item,index) => { 
+					if(typeof item.jsonStr == 'string') {
+						item.jsonStr = JSON.parse(item.jsonStr)
+						
+						if(item.type == 2) { //多选
+							item.jsonStr.forEach(str => {
+								str.optionsId = ''+str.optionsId;
+							})
+							let arr = item.answerQuestion.split(',');
+							arr.forEach((a,i) => {
+								arr[i] = ''+a;
+							})
+							item.ans = arr;
+							if(this.explain) {
+								item.ques = item.ans;
+							}
+							return;
+						} else if(item.type == 5) {
+							item.ansText = {
+								text: '',
+								imageList: []
+							}
+							
+							if(this.explain) {
+								item.ques = {
+									text:item.analysisContent
+								}
+								
+								return;
+							}
+							
+							
+						} else if(item.type == 4) {
+							console.log(item.jsonStr)
+							item.ques = []
+							item.current = 0;
+							let ansArr = []; 
+							item.jsonStr.forEach((json,index) => {
+								if(json.type == 1) {
+									ansArr[index] = json.answerQuestion;
+								} else if(json.type == 2) {
+									json.optionsList.forEach(str => {
+										str.optionsId = ''+str.optionsId;
+									})
+									let arr = json.answerQuestion.split(',');
+									arr.forEach((a,i) => {
+										arr[i] = ''+a;
+									})
+									ansArr[index] = arr
+								} else if(json.type == 3) {
+									ansArr[index] = json.answerQuestion;
+								} else if(json.type == 5) {
+									ansArr[index] = {
+										text: '',
+										imageList: []
+									}
+									json.ansText = {
+										text: '',
+										imageList: []
+									}
+								}
+							})
+							
+							item.ans = ansArr
+							if(this.explain) {
+								item.ques = item.ans;
+							}
+							return;
+							
+						}
+						
+						item.ans = item.answerQuestion
+						if(this.explain) {
+							item.ques = item.ans;
+						}
+					} else {
+						if(this.explain) {
+							item.ques = item.ans;
+						}
+					}
+					
+				})
+				
+				this.questionList = res.data.rows;
+				
+			})
+		},
+		/**
+		 * @param {Object} e单选点击
+		 */
+		radioSelect(optionsId,bindex) {
+			if(this.questionList[bindex].ques) return;
+			this.$set(this.questionList[bindex],'ques',optionsId)
+			
+			// 回答错误
+			if(this.questionList[bindex].ques != this.questionList[bindex].ans) {
+				
+			} else {
+				this.$api.wrongRecordDelete({
+					"examId": this.questionList[bindex].examId,
+					"goodsId": this.questionList[bindex].goodsId,
+					"questionId": this.questionList[bindex].questionId,
+				}).then(res => {
+					
+				})
+				
+			}
+		},
+		
+		/**
+		 * @param {Object} e单选点击
+		 */
+		radioSelectChild(optionsId,ansIndex,bindex) {
+			if(this.questionList[bindex].ques[ansIndex]) return;
+			this.$set(this.questionList[bindex].ques,ansIndex,optionsId)
+			
+		},
+		
+		
+		/**
+		 * @param {Object} 多选点击
+		 */
+		checkboxSelect(optionsId,bindex,index) {
+			
+			this.$set(this.questionList[bindex].jsonStr[index],'checked',!this.questionList[bindex].jsonStr[index].checked)
+		},
+		
+		/**
+		 * @param {Object} 多选点击
+		 */
+		checkboxSelectChild(bindex,ansIndex,childIndex) {
+			
+			this.$set(this.questionList[bindex].jsonStr[ansIndex].optionsList[childIndex],'checked',!this.questionList[bindex].jsonStr[ansIndex].optionsList[childIndex].checked)
+		},
+		
+		/**
+		 * @param {Object} 多选确认
+		 */
+		checkboxSubmit(bindex) {
+			
+			if(this.questionList[bindex].ques) return;
+			let arr = [];
+			this.questionList[bindex].jsonStr.forEach(item => {
+				if(item.checked) {
+					arr.push(item.optionsId)
+				}
+			})
+			
+			this.$set(this.questionList[bindex],'ques',arr)
+			
+			let isWrong = this.questionList[bindex].ques.some((quesItem,quesIndex) => {
+				return this.questionList[bindex].ques[quesIndex] != this.questionList[bindex].ans[quesIndex]
+			})
+			
+			// 回答错误
+			if(isWrong) {
+				
+			} else {
+				let question = this.questionList.find(item => item.questionId == this.questionList[bindex].questionId);
+				if(question) {
+					this.$api.wrongRecordDelete({
+						"examId": this.questionId[bindex].examId,
+						"goodsId": this.questionId[bindex].examId,
+						"questionId": this.questionList[bindex].questionId,
+					}).then(res => {
+						
+					})
+				}
+			}
+			
+		},
+		
+		/**
+		 * @param {Object} 多选确认
+		 */
+		checkboxSubmitChild(bindex,ansIndex) {
+			
+			if(this.questionList[bindex].ques[ansIndex]) return;
+			let arr = [];
+			this.questionList[bindex].jsonStr[ansIndex].optionsList.forEach(item => {
+				if(item.checked) {
+					arr.push(item.optionsId)
+				}
+			})
+			
+			this.$set(this.questionList[bindex].ques,ansIndex,arr)
+		},
+		
+		judgeSelect(index,bindex) {
+			if(this.questionList[bindex].ques) return;
+			this.$set(this.questionList[bindex],'ques',index+'')
+			
+			// 回答错误
+			if(this.questionList[bindex].ques != this.questionList[bindex].ans) {
+				
+			} else {
+
+					this.$api.wrongRecordDelete({
+						"examId": this.questionList[bindex].examId,
+						"goodsId": this.questionList[bindex].goodsId,
+						"questionId": this.questionList[bindex].questionId,
+					}).then(res => {
+						
+					})
+			}
+			
+		},
+		
+		judgeSelectChild(ansindex,childindex,bindex) {
+			if(this.questionList[bindex].ques[ansindex]) return;
+			this.$set(this.questionList[bindex].ques,ansindex,childindex+'')
+		},
+		
+		openFooterTab() {
+			this.show = true;
+		},
+		hideDialog() {
+			this.showDialog = false
+		},
+		changeIndex(index) {
+			this.current = index
+		},
+		
+		swiperChange(e) {
+			this.current = e.detail.current;
+		},
+		
+		
+		deleteImg(imgIndex,bankIndex) {
+			
+			
+			this.questionList[bankIndex].ansText.imageList.splice(imgIndex,1)
+		},
+		
+		
+		deleteImgChild(imgIndex,bankIndex,ansIndex) {
+			
+			
+			this.questionList[bankIndex].jsonStr[ansIndex].ansText.imageList.splice(imgIndex,1)
+		},
+		
+		chooseImg(bankindex) {
+			uni.chooseImage({
+				count: 1, //默认9
+				sizeType: ['compressed', ], //可以指定是原图还是压缩图,默认二者都有
+				sourceType: ['album','camera'], //从相册选择
+				success: (res) => {
+					let self = this;
+					// console.log(JSON.stringify(res.tempFilePaths));
+					let img = res.tempFilePaths[0];
+					uni.getImageInfo({
+						src: img,
+						success: async res => {
+							let canvasWidth = res.width; //图片原始长宽
+							let canvasHeight = res.height;
+							if (canvasWidth > 1000 || canvasHeight > 1000) {
+								uni.compressImage({
+									src: img,
+									quality: 75,
+									width: '50%',
+									height: '50%',
+									success: async rest => {
+										const dir = await self.uploadFile(rest.tempFilePath, 0);
+										this.questionList[bankindex].ansText.imageList.push(dir)
+									} 
+								});
+							} else {
+								const dir = await self.uploadFile(img, 0);
+								this.questionList[bankindex].ansText.imageList.push(dir)
+							}
+						}
+					});
+				}
+			})
+		},
+		
+		chooseImgChild(bankindex,ansindex) {
+			uni.chooseImage({
+				count: 1, //默认9
+				sizeType: ['compressed', ], //可以指定是原图还是压缩图,默认二者都有
+				sourceType: ['album','camera'], //从相册选择
+				success: (res) => {
+					let self = this;
+					// console.log(JSON.stringify(res.tempFilePaths));
+					let img = res.tempFilePaths[0];
+					uni.getImageInfo({
+						src: img,
+						success: async res => {
+							let canvasWidth = res.width; //图片原始长宽
+							let canvasHeight = res.height;
+							if (canvasWidth > 1000 || canvasHeight > 1000) {
+								uni.compressImage({
+									src: img,
+									quality: 75,
+									width: '50%',
+									height: '50%',
+									success: async rest => {
+										const dir = await self.uploadFile(rest.tempFilePath, 0);
+										this.questionList[bankindex].jsonStr[ansindex].ansText.imageList.push(dir)
+									} 
+								});
+							} else {
+								const dir = await self.uploadFile(img, 0);
+								this.questionList[bankindex].jsonStr[ansindex].ansText.imageList.push(dir)
+							}
+						}
+					});
+				}
+			})
+		},
+		
+		uploadFile(options, int) {
+			var self = this;
+			return new Promise((resolve, reject) => {
+				var data = {
+					imageStatus: int
+				};
+				self.$api.aliyunpolicy(data).then(res => {
+					console.log(res.data,6)
+					if(res.data.code!=200){
+						self.$method.showToast('签名错误'+JSON.stringify(res.data))
+						return
+					}
+					var ossToken = res.data.data.resultContent;
+					if(ossToken.host==null||ossToken.host==undefined){
+						self.$method.showToast('上传路径报错'+JSON.stringify(res.data))
+						return
+					}
+					uni.uploadFile({
+						url: ossToken.host,
+						name: 'file',
+						filePath: options,
+						fileType: 'image',
+						header: {
+							AuthorizationToken: 'WX ' + uni.getStorageSync('token')
+						},
+						formData: {
+							key: ossToken.dir,
+							OSSAccessKeyId: ossToken.accessid,
+							policy: ossToken.policy,
+							Signature: ossToken.signature,
+							callback: ossToken.callback,
+							success_action_status: 200
+						},
+						success: result => {
+							if (result.statusCode === 200) {
+								resolve(ossToken.dir);
+							} else {
+								uni.showToast({
+									title: '上传失败',
+									icon: 'none'
+								});
+								return;
+							}
+						},
+						fail: error => {
+							uni.showToast({
+								title: '上传接口报错'+error,
+								icon: 'none'
+							});
+							return;
+						}
+					});
+				});
+			});
+		},
+		submitAns(type,bankindex) {
+				
+			console.log(this.questionList[bankindex])
+			if(!this.questionList[bankindex].ansText.text && !this.questionList[bankindex].ansText.imageList.length) {
+				uni.showToast({
+					title: '请输入内容或上传图片',
+					duration: 2000,
+					icon:'none'
+				});
+				return
+			}
+			
+			this.$set(this.ques,bankindex,{
+				imageList:this.questionList[bankindex].ansText.imageList,
+				text:this.questionList[bankindex].ansText.text,
+			})
+			
+		},
+		
+		submitAnsChild(bankindex,ansindex) {
+				
+			if(!this.questionList[bankindex].jsonStr[ansindex].ansText.text && !this.questionList[bankindex].jsonStr[ansindex].ansText.imageList.length) {
+				uni.showToast({
+					title: '请输入内容或上传图片',
+					duration: 2000,
+					icon:'none'
+				});
+				return
+			}
+			
+			this.$set(this.questionList[bankindex].ques,ansindex,{
+				imageList:this.questionList[bankindex].jsonStr[ansindex].ansText.imageList,
+				text:this.questionList[bankindex].jsonStr[ansindex].ansText.text,
+			})
+			
+		},
+		
+		isRight(item,index) {
+			//单选
+			if(this.questionList[index].ques) {
+				if(item.type == 1) {
+					return this.questionList[index].ques == this.questionList[index].ans;
+				//多选
+				} else if(item.type == 2) {
+					//每一项都相等
+					return this.questionList[index].ques.every((item,index) => {
+						return item == this.questionList[index].ans;
+					})
+				//判断
+				} else if(item.type == 3) {
+					return this.questionList[index].ques == this.questionList[index].ans;
+				} else {
+					return false;
+				}
+			} else {
+				return false;
+			}
+			
+		},
+		
+		
+		right(bankIndex,ansIndex,option) {
+			if(this.questionList[bankIndex].ques[ansIndex] && this.questionList[bankIndex].ans[ansIndex]) {
+				
+				if((this.questionList[bankIndex].ques[ansIndex].indexOf(option.optionsId) != -1 ) || (this.questionList[bankIndex].ans[ansIndex].indexOf(option.optionsId) != -1)) {
+					return true
+				} else {
+					return false;
+				}
+			} else {
+				return false;
+			}
+			
+		},
+		
+		wrong(bankIndex,ansIndex,option) {
+			if(this.questionList[bankIndex].ques[ansIndex] && this.questionList[bankIndex].ans[ansIndex]) {
+				
+				if((this.questionList[bankIndex].ques[ansIndex].indexOf(option.optionsId) != -1 ) && (this.questionList[bankIndex].ans[ansIndex].indexOf(option.optionsId) == -1)) {
+					return true;
+				} else {
+					return false;
+				}
+			} else {
+				return false;
+			}
+		},
+		
+		isWrong(item,index) {
+			if(this.questionList[index].ques) {
+				//单选
+				if(item.type == 1) {
+					return this.questionList[index].ques != this.questionList[index].ans;
+				//多选
+				} else if(item.type == 2) {
+					//每一项都相等
+					return this.questionList[index].ques.some((item,index) => {
+						return item != this.questionList[index].ans;
+					})
+				//判断
+				} else if(item.type == 3) {
+					return this.questionList[index].ques != this.questionList[index].ans;
+				} else {
+					return false;
+				}
+			} else {
+				return false;
+			}
+			
+		},
+		
+		tabSelect(index,bankindex) {
+			
+			this.$set(this.questionList[bankindex],'current',index)
+			
+		},
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.swiper {
+	width:100%;
+	height:100vh;
+}
+.lisSty {
+	margin-bottom: 16rpx;
+	display: flex;
+	
+	.flex_auto {
+		flex:1;
+	}
+}
+.activeTI {
+	vertical-align: middle;
+	display: inline-block;
+	border: 1rpx solid #eee;
+	border-radius: 50rpx;
+	height: 48rpx;
+	line-height: 46rpx;
+	text-align: center;
+	width: 48rpx;
+	margin-right: 15rpx;
+	color: #666;
+	font-size: 30rpx;
+	
+	
+	&.right {
+		color:#fff;
+		background:green;
+	}
+	
+	&.wrong {
+		color:#fff;
+		background:red;
+	}
+	
+	&.checked {
+		color:#fff;
+		background:blue;
+	}
+}
+
+.submit_checkbox {
+	margin:20rpx auto;
+	width: 526rpx;
+	height: 80rpx;
+	background: rgba(0, 122, 255, 1);
+	color:#fff;
+	text-align: center;
+	line-height: 80rpx;
+	font-size: 30rpx;
+	border-radius: 40rpx;
+}
+.titles {
+	overflow: hidden;
+	margin-bottom: 24rpx;
+}
+.titBox {
+	padding: 41rpx 25rpx 24rpx 25rpx;
+}
+
+.tabs {
+	margin:10rpx;
+	display: flex;
+	.tab {
+		margin:0 10rpx;
+		width: 96rpx;
+		height: 48rpx;
+		line-height: 48rpx;
+		text-align: center;
+		color:#007AFF;
+		font-size: 28rpx;
+		border-radius: 16rpx;
+		
+		&.current {
+			color:#fff;
+			background: #007AFF;
+		}
+	}
+}
+
+.ans {
+	margin:8rpx 8rpx 8rpx;
+	
+	.ans_input {
+	    border-radius: 16rpx;
+		background:#fff;
+		.top {
+			border-bottom:1rpx solid #EEEEEE;
+			padding: 16rpx;
+			display: flex;
+			align-items: center;
+			
+			.icon {
+				margin-right:20rpx;
+				width: 40rpx;
+				height: 38rpx;
+			}
+			
+			.progress {
+				flex:1;
+			}
+			
+			.submit {
+				width: 168rpx;
+				height: 48rpx;
+				line-height: 48rpx;
+				text-align: center;
+				color:#fff;
+				font-size: 30rpx;
+				background: #007AFF;
+				border-radius: 24rpx;
+			}
+		}
+		
+		.textarea {
+			textarea {
+				width:100%;
+				height:287rpx;
+				padding:10rpx;
+			}
+		}
+		
+		.imgs {
+			overflow: hidden;
+			display: flex;
+			width:100%;
+			.img {
+				width: 104rpx;
+				height: 104rpx;
+				border-radius: 8rpx;
+				position:relative;
+				margin:20rpx;
+				
+				
+				text {
+					position:absolute;
+					right:-15rpx;
+					top:-15rpx;
+					width:30rpx;
+					height:30rpx;
+					text-align: center;
+					line-height: 30rpx;
+					color:#fff;
+					background:red;
+					border-radius:50%;
+				}
+				
+				image {
+					width:100%;
+					height:100%;
+				}
+			}
+		}
+	}
+	
+	.ans_submit {
+		padding:16rpx;
+		border-radius: 16rpx;
+		background:#fff;
+		
+		.imgs {
+			overflow: hidden;
+			display: flex;
+			width:100%;
+			.img {
+				width: 104rpx;
+				height: 104rpx;
+				border-radius: 8rpx;
+				position:relative;
+				margin:20rpx;
+				
+				image {
+					width:100%;
+					height:100%;
+				}
+			}
+		}
+	}
+}
+.firstLetter {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	margin-bottom: 30rpx;
+	.leftLetters {
+		display: flex;
+		align-items: center;
+		width: 220rpx;
+		.btnType {
+			padding: 5rpx 10rpx;
+			border: 1rpx solid #007aff;
+			border-radius: 10rpx;
+			background-color: rgba(0, 122, 255, 0.1);
+			font-size: 28rpx;
+			color: #007aff;
+			margin-right: 15rpx;
+		}
+	}
+}
+.popupView {
+	height: 100%;
+	padding-bottom: 100rpx;
+	.popupTops {
+		height: 77rpx;
+		border-bottom: 1rpx solid #eee;
+		text-align: center;
+		line-height: 77rpx;
+		font-size: 24rpx;
+		color: #999;
+		position: relative;
+		.topIcon {
+			position: absolute;
+			top: 10rpx;
+			left: 50%;
+			transform: translateX(-50%);
+			width: 80rpx;
+			height: 8rpx;
+			background-color: #999;
+			border-radius: 4rpx;
+		}
+	}
+	.popupContent {
+	}
+}
+.pageContent {
+	position:relative;
+	background-color: #eaeef1;
+	min-height: 100vh;
+	padding-top: 8rpx;
+	padding-bottom: 100rpx;
+}
+.pad_8 {
+	background-color: #fff;
+	margin: 0rpx 8rpx 8rpx;
+	border-radius: 16rpx;
+}
+.answer {
+	height: 80rpx;
+	line-height: 80rpx;
+	padding: 0rpx 24rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	color: #666;
+	font-size: 30rpx;
+}
+.footer_btn {
+	background-color: #fff;
+	z-index: 10078;
+	position: fixed;
+	bottom: 0rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	width: 100%;
+	height: 98rpx;
+	padding: 0rpx 38rpx;
+	border-top: 1rpx solid #eee;
+	
+	.collect {
+		visibility: hidden;
+		
+		&.show {
+			visibility: visible;
+		}
+	}
+}
+.boxSty {
+	padding: 44rpx 41rpx 0rpx;
+}
+.liListSty {
+	border:1rpx solid #EEEEEE;
+	width: 88rpx;
+	height: 88rpx;
+	border-radius: 32rpx;
+	text-align: center;
+	line-height: 88rpx;
+	color: #333;
+	font-size: 32rpx;
+	float: left;
+	margin: 20rpx 23rpx;
+	
+	&.isRight {
+		border:1rpx solid #EEEEEE;
+		color:#fff;
+		background: green;
+	}
+	
+	&.isWrong {
+		border:1rpx solid #EEEEEE;
+		color:#fff;
+		background: red;
+	}
+}
+.answerInfos {
+	padding: 25rpx 25rpx 25rpx 23rpx;
+}
+.answerTitle {
+	margin-bottom: 28rpx;
+	color: #666;
+	font-size: 30rpx;
+}
+.answerContent {
+	font-size: 30rpx;
+	color: #666;
+}
+
+.textChild {
+	display: inline-block;
+	vertical-align: middle;
+}
+
+.dialog {
+	position: fixed;
+	left:0;
+	top:0;
+	width:100%;
+	height:100%;
+	background-color: rgba(0,0,0,0.8);
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	z-index: 20000;
+	
+	.text {
+		font-size: 32rpx;
+		color: #FFFFFF;
+		text-align: center;
+	}
+	
+	.btn {
+		width: 242rpx;
+		height: 82rpx;
+		border: 2rpx solid #FFFFFF;
+		border-radius: 16rpx;
+		text-align: center;
+		line-height: 82rpx;
+		margin:41rpx auto;
+		color:#fff;
+		font-size: 32rpx;
+	}
+}
+</style>

+ 48 - 1
pages2/subject/collectQuestionTypeBank.vue → pages2/subject/wrongTypeBank.vue

@@ -447,6 +447,19 @@ export default {
 			if(this.questionList[bindex].ques) return;
 			this.$set(this.questionList[bindex],'ques',optionsId)
 			
+			// 回答错误
+			if(this.questionList[bindex].ques != this.questionList[bindex].ans) {
+				
+			} else {
+				this.$api.wrongRecordDelete({
+					"examId": this.questionList[bindex].examId,
+					"goodsId": this.questionList[bindex].goodsId,
+					"questionId": this.questionList[bindex].questionId,
+				}).then(res => {
+					
+				})
+				
+			}
 		},
 		
 		/**
@@ -490,6 +503,26 @@ export default {
 			
 			this.$set(this.questionList[bindex],'ques',arr)
 			
+			let isWrong = this.questionList[bindex].ques.some((quesItem,quesIndex) => {
+				return this.questionList[bindex].ques[quesIndex] != this.questionList[bindex].ans[quesIndex]
+			})
+			
+			// 回答错误
+			if(isWrong) {
+				
+			} else {
+				let question = this.questionList.find(item => item.questionId == this.questionList[bindex].questionId);
+				if(question) {
+					this.$api.wrongRecordDelete({
+						"examId": this.questionId[bindex].examId,
+						"goodsId": this.questionId[bindex].examId,
+						"questionId": this.questionList[bindex].questionId,
+					}).then(res => {
+						
+					})
+				}
+			}
+			
 		},
 		
 		/**
@@ -512,6 +545,20 @@ export default {
 			if(this.questionList[bindex].ques) return;
 			this.$set(this.questionList[bindex],'ques',index+'')
 			
+			// 回答错误
+			if(this.questionList[bindex].ques != this.questionList[bindex].ans) {
+				
+			} else {
+			
+					this.$api.wrongRecordDelete({
+						"examId": this.questionList[bindex].examId,
+						"goodsId": this.questionList[bindex].goodsId,
+						"questionId": this.questionList[bindex].questionId,
+					}).then(res => {
+						
+					})
+			}
+			
 		},
 		
 		judgeSelectChild(ansindex,childindex,bindex) {
@@ -1042,7 +1089,7 @@ export default {
 .footer_btn {
 	background-color: #fff;
 	z-index: 10078;
-	position: absolute;
+	position: fixed;
 	bottom: 0rpx;
 	display: flex;
 	align-items: center;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است