Ver Fonte

第六期模考

chenxiong há 3 anos atrás
pai
commit
2631b25b48

+ 60 - 0
pages.json

@@ -776,8 +776,32 @@
 					"bounce": "none"
 				}
 			}
+		},{
+			"path": "examCount/index",
+			"style": {
+				"navigationBarTitleText": "模拟考试",
+				"navigationBarBackgroundColor": "#0386FD",
+				"navigationBarTextStyle": "white",
+				"navigationStyle": "custom", // 隐藏系统导航栏
+				"app-plus": {
+					"titleNView": false, //禁用原生导航栏 
+					"bounce": "none"
+				}
+			}
 		},{
 			"path": "examList/index",
+			"style": {
+				"navigationBarTitleText": "我的模考",
+				"navigationBarBackgroundColor": "#0386FD",
+				"navigationBarTextStyle": "white",
+				"navigationStyle": "custom", // 隐藏系统导航栏
+				"app-plus": {
+					"titleNView": false, //禁用原生导航栏 
+					"bounce": "none"
+				}
+			}
+		},{
+			"path": "examAppointList/index",
 			"style": {
 				"navigationBarTitleText": "模考预约",
 				"navigationBarBackgroundColor": "#0386FD",
@@ -788,6 +812,42 @@
 					"bounce": "none"
 				}
 			}
+		},{
+			"path": "examReport/index",
+			"style": {
+				"navigationBarTitleText": "试卷报告",
+				"navigationBarBackgroundColor": "#0386FD",
+				"navigationBarTextStyle": "white",
+				"navigationStyle": "custom", // 隐藏系统导航栏
+				"app-plus": {
+					"titleNView": false, //禁用原生导航栏 
+					"bounce": "none"
+				}
+			}
+		},{
+			"path": "examBank/index",
+			"style": {
+				"navigationBarTitleText": "模考",
+				"navigationBarBackgroundColor": "#0386FD",
+				"navigationBarTextStyle": "white",
+				"navigationStyle": "custom", // 隐藏系统导航栏
+				"app-plus": {
+					"titleNView": false, //禁用原生导航栏 
+					"bounce": "none"
+				}
+			}
+		},{
+			"path": "liveList/index",
+			"style": {
+				"navigationBarTitleText": "模考讲解直播",
+				"navigationBarBackgroundColor": "#0386FD",
+				"navigationBarTextStyle": "white",
+				"navigationStyle": "custom", // 隐藏系统导航栏
+				"app-plus": {
+					"titleNView": false, //禁用原生导航栏 
+					"bounce": "none"
+				}
+			}
 		}]
 			
 	}],

+ 47 - 16
pages2/wd/class.vue

@@ -315,7 +315,11 @@
 </template>
 
 <script>
+	import {mapGetters} from 'vuex'
 	export default {
+		computed:{
+			...mapGetters(['userInfo'])
+		},
 		data() {
 			return {
 				activeItem:{},
@@ -417,7 +421,17 @@
 								
 							},1000)
 						} else {
-							resolve()
+							
+							if(res.data.data.pushInfo) {
+								resolve()
+							} else {
+								uni.showModal({
+									showCancel:false,
+									title:'提示',
+									content:'开通信息推送不成功,无法进入学习,请联系020-87085982!'
+								})
+							}
+							
 						}
 					})
 				})
@@ -435,7 +449,18 @@
 							orderGoodsId:this.activeItem.orderGoodsId,
 							infoJson:JSON.stringify(infoJson)
 						}).then(res => {
-							
+							if(res.data.data.pushInfo) {
+								uni.showToast({
+									icon:'none',
+									title:'提交成功'
+								})
+							} else {
+								uni.showModal({
+									showCancel:false,
+									title:'提示',
+									content:'开通信息推送不成功,无法进入学习,请联系020-87085982!'
+								})
+							}
 							this.showUserConfirmInfo = false;
 						})
 					} else {
@@ -632,21 +657,31 @@
 									orderGoodsId: item.orderGoodsId,
 								}).then(res => {
 									if (res.data.code == 200) {
-									// this.userConfirmInfoDetail().then(() => {
+										if(item.officialName && item.businessName == '二级' && item.projectName == '建造师') {
+											this.userConfirmInfoDetail().then(() => {
+													uni.navigateTo({
+															url: `/pages3/polyv/detail?id=${res.data.rows[0].courseId}&goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}`
+														})
+											})
+										} else {
 											uni.navigateTo({
 													url: `/pages3/polyv/detail?id=${res.data.rows[0].courseId}&goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}`
 												})
-									// })
+										}
+									
 					  			
 									}
 								});
 								return;
 							}
 							
-							// this.userConfirmInfoDetail().then(() => {
-									this.$navTo.togo(
-										`/pages2/wd/course?id=${v}&gid=${i}&orderGoodsId=${item.orderGoodsId}`);
-							// })
+							if(item.officialName && item.businessName == '二级' && item.projectName == '建造师') {
+								// this.userConfirmInfoDetail().then(() => {
+										this.$navTo.togo(`/pages2/wd/course?id=${v}&gid=${i}&orderGoodsId=${item.orderGoodsId}`);
+								// })
+							} else {
+								this.$navTo.togo(`/pages2/wd/course?id=${v}&gid=${i}&orderGoodsId=${item.orderGoodsId}`);
+							}
 							
 						}
 					})
@@ -661,19 +696,15 @@
 							orderGoodsId: item.orderGoodsId,
 						}).then(res => {
 							if (res.data.code == 200) {
-								// this.userConfirmInfoDetail().then(() => {
-										uni.navigateTo({
-											url: `/pages3/polyv/detail?id=${res.data.rows[0].courseId}&goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}`
-										})
-								// })
+								uni.navigateTo({
+										url: `/pages3/polyv/detail?id=${res.data.rows[0].courseId}&goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}`
+									})
 								
 							}
 						});
 						return;
 					}
-					// this.userConfirmInfoDetail().then(() => {
-							this.$navTo.togo(`/pages2/wd/course?id=${v}&gid=${i}&orderGoodsId=${item.orderGoodsId}`);
-					// })
+					this.$navTo.togo(`/pages2/wd/course?id=${v}&gid=${i}&orderGoodsId=${item.orderGoodsId}`);
 					
 				}
 

+ 9 - 5
pages5/exam/index.vue

@@ -6,17 +6,17 @@
 				<view class="item">模拟考试预约</view>
 				<view class="item"><text class="note">去预约模拟考试</text><u-icon name="arrow-right" color="#999999" size="28"></u-icon></view>
 			</view>
-			<view class="examItem" @click="goAppointment">
+			<view class="examItem" @click="goList(0)">
 				<view class="item">未考试</view>
 				<view class="item"><text class="num">{{yyNum}}</text>个<u-icon name="arrow-right" color="#999999" size="28"></u-icon></view>
 			</view>
-			<view class="examItem" @click="goAppointment">
+			<view class="examItem" @click="goList(1)">
 				<view class="item">已结束</view>
 				<view class="item"><text class="num">{{yyNum}}</text>个<u-icon name="arrow-right" color="#999999" size="28"></u-icon></view>
 			</view>
 			<view class="examItem" @click="goResult">
 				<view class="item">
-					<view>考试成绩和证书</view>
+					<view>模拟考试讲解直播</view>
 					<view class="desc"><text class="num">二建模考-法律讲解正在直播中,立即前往查看</text></view>
 				</view>
 				<view class="item"><u-icon name="arrow-right" color="#999999" size="28"></u-icon></view>
@@ -49,10 +49,14 @@ export default {
 			});
 		},
 		goAppointment(){
-			this.$navTo.togo('/pages5/examList/index');
+			this.$navTo.togo('/pages5/examAppointList/index');
+		},
+		goList(state) {
+			this.$navTo.togo('/pages5/examList/index?state='+state);
 		},
 		goResult(){
-			this.$navTo.togo('/pages2/exam/exam_result');
+			console.log(111)
+			this.$navTo.togo('/pages5/liveList/index');
 		}
 	},
 	onReachBottom() {},

+ 704 - 0
pages5/examAppointList/index.vue

@@ -0,0 +1,704 @@
+<template>
+	<view>
+		<nav-bar title="模考预约" class="nav"></nav-bar>
+		<view class="tabs">
+			<view class="tab" :class="{ active: index == 1 }" data-index="1" @click="tab(1)">
+				<view>全部</view>
+				<u-icon class="icon" :class="index ==1? 'animals':''" name="arrow-down"></u-icon>
+			</view>
+			<view class="tab" :class="{ active: index == 2 }" data-index="2">
+				<view class="dateRange">
+					<picker mode="date" :value="dateFrom" :start="startDate" :end="endDate" @change="bindDateFromChange">
+						<view class="uni-input">{{dateFrom}}</view>
+					</picker>
+					- 
+					<picker mode="date" :value="dateTo" :start="startDate" :end="endDate" @change="bindDateToChange">
+						<view class="uni-input">{{dateTo}}</view>
+					</picker></view>
+				<u-icon class="icon" name="calendar"></u-icon>
+			</view>
+		</view>
+		<view class="scroll">
+			<scroll-view scroll-x="true" class="scroll-x" >
+				<view class="content">
+					<view class="scroll-tag active">AAAAAAAAAAAAAA</view>
+					<view class="scroll-tag">bbbbbbbbbbbb</view>
+					<view class="scroll-tag">ccccccccccc</view>
+					<view class="scroll-tag">AAAAAAAAAAAAAA</view>
+					<view class="scroll-tag">bbbbbbbbbbbb</view>
+					<view class="scroll-tag">ccccccccccc</view>
+					<view class="scroll-tag">AAAAAAAAAAAAAA</view>
+					<view class="scroll-tag">bbbbbbbbbbbb</view>
+					<view class="scroll-tag">ccccccccccc</view>
+				</view>
+				
+			</scroll-view>
+		</view>
+		
+
+		<view class="record">
+			<view class="item" v-for="(item,index) in 5" :key="index">
+				<view class="item__header">建设工程法规及相关知识建设工程</view>
+				<view class="item__body">
+					<view class="title">
+						<image class="img" mode="widthFix" src="/pages5/static/time.png"></image>
+						<text>考试时间</text>
+					</view>
+					<view class="desc">2022年4月15日(周五) 9:00-11:00 </view>
+					<view class="btn" @click="appoint(item)" :class="{active: index % 2 == 0}">预约考试</view>
+				</view>
+			</view>
+		</view>
+		
+		
+		<view class="notice" @click="noticeModal=true">
+			<u-icon class="icon" color="#fff" name="info-circle"></u-icon>
+			<view class="text">模考说明</view>
+		</view>
+
+		<view class="modal" :style="{top:modalTop+'px'}" v-if="index == 1">
+			<view class="content">
+				<scroll-view scroll-y="true" style="height:100%">
+					<view class="top" :class="activeIndex === 0 ? 'activesty' : ''" @click="testClick(3)">全部</view>
+					<view class="list">
+						<view class="item" :class="activeIndex == listItem.goodsId ? 'activesty' : ''" v-for="(listItem,listIndex) in list" :key="listIndex" @click="testClick(listItem)">
+							{{ listItem.goodsName }}
+						</view>
+					</view>
+				</scroll-view>
+				
+			</view>
+			<view class="modal_wrap" @click="index = 0"></view>
+		</view>
+		
+		<view class="notice_modal" :style="{top:modalTop+'px'}" v-if="index == 2">
+			<view class="content">
+				<scroll-view scroll-y="true" style="height:100%">
+					<view class="top" :class="typeIndex === 0 ? 'activesty' : ''" @click="paperClick(3)">全部试卷类型</view>
+					<view class="list">
+						<view class="item" :class="typeIndex == listItem.paperId ? 'activesty' : ''" v-for="(listItem,listIndex) in list1" :key="listIndex" @click="paperClick(listItem)">{{ listItem.paperName }}</view>
+					</view>
+				</scroll-view>
+			</view>
+			<view class="modal_wrap" @click="index = 0"></view>
+		</view>
+		
+		<u-popup class="notice__modal" v-model="noticeModal" mode="center" border-radius="24" :mask-close-able="false">
+			<view class="notice__content">
+				<view class="body">
+					<scroll-view scroll-y="true" style="height:700rpx">
+						<view class="content">
+							<view class="bold text">模拟考试说明</view>
+							
+							<view>在您注册过程中,您需要完成我们的注册流程并通过点击“同意并继续”的形式在线签署以下协议及政策,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。
+							</view>
+							
+						</view>
+					</scroll-view>
+				</view>
+				<view class="footer">
+					<view class="btn close" @click="noticeModal = false">我知道了</view>
+				</view>
+			</view>
+		</u-popup>
+		
+		<view class="appoint__modal" v-if="appointModal" mode="center" border-radius="24" :mask-close-able="false">
+			<view class="appoint__content">
+				<view class="body">
+						<image class="img" src="/pages5/static/img-header.png" mode="widthFix"></image>
+						<view class="content">
+							<view class="bold center">模拟考试说明</view>
+							
+							<view>
+								您预约的模拟考试,安排如下: 
+							</view>
+							<view>
+								<text class="bold text">模考场次: </text>
+								<text class="text">2022年考前一建模拟考试</text>
+							</view>
+							<view>
+								<text class="bold text">项目:   </text>
+								<text class="text">一级建造师</text>
+							</view>
+							<view>
+								<text class="bold text">专业:</text>
+								<text class="text">市政专业</text>
+							</view>
+							<view>
+								<text class="bold text">科目:</text>
+								<text class="text">建设工程经济</text>
+							</view>
+							<view>
+								<text class="bold text">考试时间:</text>
+								<text class="text">2022年4月15日(周五)  9:00-10:00</text>
+							</view>
+							<view>请准时参加考试哦~</view>
+							
+						</view>
+				</view>
+				<view class="footer">
+					<view class="btn close" @click="appointModal = false;openAppoint=true">我知道了</view>
+				</view>
+			</view>
+		</view>
+		
+		<u-popup class="open__modal" v-model="openAppoint" mode="center" border-radius="24" :mask-close-able="false">
+			<view class="open__content">
+				<view class="body">
+						<view class="content">
+							<view class="bold center">开考提醒</view>
+							
+							<view class="center">
+								开考前10分钟提醒入场,不错过实战机会
+							</view>
+							
+						</view>
+				</view>
+				<view class="footer">
+					<view class="btn close" @click="openAppoint = false">我知道了</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			openAppoint:false,
+			appointModal:false,
+			noticeModal:false,
+			index: 0,
+			list: [],
+			list1: [],
+			recordList: [],
+			goodsData: {},
+			param: {
+				pageNum: 1,
+				pageSize: 10
+			},
+			dateFrom:'',
+			dateTo:'',
+			isRepeat:false,
+			total: 0,
+			activeIndex: 0,
+			typeIndex:0,
+			itemIndex:'',
+			modalTop:0,
+			endDate:'',
+		};
+	},
+	onLoad(option) {
+		this.dateFrom = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
+		this.dateTo = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
+		this.endDate = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
+		
+		uni.getSystemInfo({
+			success:(e) => {
+				let info = uni.createSelectorQuery().select(".nav");
+				info.boundingClientRect((navData) => { //data - 各种参数
+				
+					let info = uni.createSelectorQuery().select(".tabs");
+					info.boundingClientRect((tabData) => { //data - 各种参数
+						this.modalTop = navData.height + tabData.height
+						console.log(navData) // 获取元素宽度
+						console.log(tabData) // 获取元素宽度
+					}).exec()
+				}).exec()
+			}
+		})
+	},
+	onPullDownRefresh() {
+		let that = this;
+		this.param = {
+			pageNum: 1,
+			pageSize: 10
+		};
+		this.getExamRecordList();
+		setTimeout(function() {
+			uni.stopPullDownRefresh();
+		}, 500);
+	},
+	onReachBottom() {
+		if (this.recordList.length < this.total) {
+			this.param.pageNum++;
+			this.getExamRecordList();
+		}
+	},
+	onShow() {
+		if(this.isRepeat) {
+			this.addRecord();
+		} else {
+			if(this.itemIndex !== '') {
+				this.refreshByIndex();
+			}
+		}
+		
+	},
+	methods: {
+		refreshByIndex() {
+			this.$api.examRecordGroupList({
+				pageNum: this.itemIndex+1,
+				pageSize: 1
+			}).then(res => {
+				this.$set(this.recordList,this.itemIndex,res.data.rows[0])
+				this.itemIndex = ''
+			});
+		},
+		
+		appoint(item) {
+			this.appointModal = true;
+		},
+		tab(index) {
+			console.log(index,this.index)
+			if(this.index == index) {
+				this.index = 0;
+				return;
+			}
+			this.index = index;
+			console.log(this.index);
+		},
+		bindDateFromChange(e) {
+			this.dateFrom = e.detail.value
+		},
+		
+		bindDateToChange(e) {
+			this.dateTo = e.detail.value
+		}
+	}
+};
+</script>
+<style>
+page {
+	background: #eaeef1;
+}
+</style>
+<style lang="scss" scope>
+	.animals{
+		transition: all 0.3s;
+		transform: rotate(180deg);
+	}
+.tabs {
+	position: fixed;
+	left: 0;
+	width: 100%;
+	display: flex;
+	z-index: 10;
+	.tab {
+		padding:0 18rpx;
+		flex: 1;
+		display: flex;
+		justify-content: space-between;
+		height: 80rpx;
+		line-height: 80rpx;
+		background: #ffffff;
+		font-size: 24rpx;
+		color: #999999;
+		
+		&:nth-of-type(1) {
+			border-right:1px solid #EEEEEE;
+		}
+		
+		.dateRange {
+			display: flex;
+			justify-content: space-between;
+		}
+
+		&.active {
+			color: #333333;
+			.icon{
+				transform: rotate(180deg);
+			}
+		}
+	}
+}
+
+.scroll {
+	width:100%;
+	margin-top:80rpx;
+	.scroll-x {
+		
+		.content {
+				display: flex;
+				padding:16rpx;
+				
+				.scroll-tag {
+					padding:11rpx 17rpx;
+					background: #fff;
+					color:#666666;
+					margin-right:16rpx;
+					border-radius:16rpx;;
+					
+					&.active {
+						background: #007AFF;
+						color:#fff;
+					}
+				}
+		}
+		
+	}
+}
+
+
+.record {
+	padding: 16rpx 16rpx;
+	display: flex;
+	flex-wrap: wrap;
+	.item {
+		margin-bottom: 16rpx;
+		width:351rpx;
+		background: #ffffff;
+		border-radius: 16rpx;
+		position: relative;
+		
+		&:nth-of-type(2n) {
+			margin-left:16rpx;
+			
+		}
+
+		&__header {
+			padding:24rpx 16rpx;
+			background: #F2F6FF;
+			font-size: 30rpx;
+			color:#007AFF;
+			
+			&::before {
+				content:'';
+				display: inline-block;
+				width: 4rpx;
+				height: 32rpx;
+				background: #007AFF;
+				margin-right:10rpx;
+				vertical-align: middle;
+			}
+		}
+		
+		&__body {
+			padding:16rpx;
+			
+			.title {
+				font-size: 24rpx;
+				color: #666666;
+				line-height: 48rpx;
+				
+				.img {
+					vertical-align: middle;
+					width:32rpx;
+				}
+			}
+			
+			.desc {
+				margin-top:10rpx;
+				font-size: 28rpx;
+				font-weight: bold;
+				color: #666666;
+				line-height: 36rpx;
+			}
+			
+			.btn {
+				margin-top:30rpx;
+				background: #FFFFFF;
+				border-radius: 16rpx;
+				height: 64rpx;
+				line-height: 62rpx;
+				text-align: center;
+				font-size: 28rpx;
+					border: 1px solid #D9D9D9;
+					color:#D9D9D9;
+				
+				&.active {
+					
+					border: 1px solid #007AFF;
+					color:#007AFF;
+				}
+			}
+		}
+	}
+}
+
+.notice {
+	position:fixed;
+	right:0;
+	top:50%;
+	width: 48rpx;
+	height: 200rpx;
+	background: #52C41A;
+	box-shadow: 0px 3rpx 16rpx 0rpx rgba(44, 121, 7, 0.5);
+	border-radius: 24rpx;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	padding:10rpx 0;
+	
+	.text {
+		flex:1;
+		color:#fff;
+		text-align: center;
+	}
+}
+
+
+.modal {
+	bottom:0;
+	z-index: 199999999;
+	position: fixed;
+	left: 0;
+	width: 100%;
+
+	.content {
+		height:80%;
+		overflow: hidden;
+		position: relative;
+		z-index: 10;
+		background: #fff;
+		padding: 8rpx 12rpx 20rpx;
+		display: flex;
+		flex-wrap: wrap;
+
+		.top {
+			margin: 0 auto;
+			width: 726rpx;
+			height: 80rpx;
+			background: #f5f5f5;
+			color: #666666;
+			border-radius: 16rpx;
+			text-align: center;
+			line-height: 80rpx;
+			font-size: 32rpx;
+		}
+
+		.list {
+			width:100%;
+			margin-top: 16rpx;
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+
+			.item {
+				padding: 25rpx 20rpx;
+				width: 49%;
+				background: #f5f5f5;
+				border-radius: 16rpx;
+				font-size: 32rpx;
+				color: #666666;
+				margin: 8rpx 0;
+			}
+		}
+	}
+
+	.modal_wrap {
+		position: absolute;
+		left: 0;
+		width: 100%;
+		top: 0;
+		height: 100%;
+		background: rgba(0, 0, 0, 0.3);
+	}
+}
+
+
+.notice__modal {
+	.notice__content {
+		width: 640rpx;
+		height: 818rpx;
+		background: #FFFFFF;
+		display: flex;
+		flex-direction: column;
+		
+		.body {
+			flex:1;
+			
+			.content {
+				padding:30rpx 40rpx 28rpx;
+				line-height: 40rpx;
+				font-size: 28rpx;
+				color:#666;
+				
+				.bold {
+					color:#333;
+					font-size: 32rpx;
+					font-weight: bold;
+				}
+				
+				.center {
+					text-align: center;
+				}
+			}
+		}
+		
+		.footer {
+			height:140rpx;
+			border-top:1px solid #EEEEEE;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			
+			.btn {
+				margin:0 12rpx;
+				width: 200rpx;
+				height: 80rpx;
+				color:#007AFF;
+				font-size: 30rpx;
+				text-align: center;
+				line-height: 80rpx;
+				background: #F5F5F5;
+				border-radius: 40rpx 40rpx 40rpx 40rpx;
+				
+				
+				&.close {
+					color:#fff;
+					width: 560rpx;
+					height: 80rpx;
+					background: #007AFF;
+					border-radius: 40rpx 40rpx 40rpx 40rpx;
+				}
+			}
+		}
+	}
+}
+
+.open__modal {
+	.open__content {
+		width: 640rpx;
+		background: #FFFFFF;
+		
+		.body {
+			
+			.content {
+				padding:30rpx 40rpx 28rpx;
+				line-height: 40rpx;
+				font-size: 28rpx;
+				color:#666;
+				
+				.bold {
+					color:#333;
+					font-size: 32rpx;
+					font-weight: bold;
+				}
+				
+				.center {
+					text-align: center;
+				}
+			}
+		}
+		
+		.footer {
+			height:140rpx;
+			border-top:1px solid #EEEEEE;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			
+			.btn {
+				margin:0 12rpx;
+				width: 200rpx;
+				height: 80rpx;
+				color:#007AFF;
+				font-size: 30rpx;
+				text-align: center;
+				line-height: 80rpx;
+				background: #F5F5F5;
+				border-radius: 40rpx 40rpx 40rpx 40rpx;
+				
+				
+				&.close {
+					color:#fff;
+					width: 560rpx;
+					height: 80rpx;
+					background: #007AFF;
+					border-radius: 40rpx 40rpx 40rpx 40rpx;
+				}
+			}
+		}
+	}
+}
+
+.appoint__modal {
+	position:fixed;
+	left:0;
+	top:0;
+	width:100%;
+	height:100%;
+	background:rgba(0,0,0,0.3);
+	.img {
+		width:280rpx;
+		position:absolute;
+		left:50%;
+		margin-left:-140rpx;
+		top:-70rpx;
+	}
+	.appoint__content {
+		border-radius:20rpx;
+		position:absolute;
+		left:50%;
+		top:50%;
+		transform: translate3D(-50%,-50%,0);
+		width: 640rpx;
+		height: 867rpx;
+		background: #FFFFFF;
+		
+		.body {
+			position: relative;
+			
+			
+			.content {
+				padding:160rpx 40rpx 28rpx;
+				line-height: 60rpx;
+				font-size: 28rpx;
+				color:#666;
+				
+				.bold {
+					color:#333;
+					font-size: 32rpx;
+					font-weight: bold;
+				}
+				
+				.center {
+					text-align: center;
+				}
+				
+				
+				.text {
+					color:#666;
+					font-size: 28rpx;
+				}
+			}
+		}
+		
+		.footer {
+			height:140rpx;
+			border-top:1px solid #EEEEEE;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			
+			.btn {
+				margin:0 12rpx;
+				width: 200rpx;
+				height: 80rpx;
+				color:#007AFF;
+				font-size: 30rpx;
+				text-align: center;
+				line-height: 80rpx;
+				background: #F5F5F5;
+				border-radius: 40rpx 40rpx 40rpx 40rpx;
+				
+				
+				&.close {
+					color:#fff;
+					width: 560rpx;
+					height: 80rpx;
+					background: #007AFF;
+					border-radius: 40rpx 40rpx 40rpx 40rpx;
+				}
+			}
+		}
+	}
+}
+.activesty {
+	background: #007aff !important;
+	color: #fff !important;
+}
+</style>

+ 3201 - 0
pages5/examBank/index.vue

@@ -0,0 +1,3201 @@
+<template>
+  <view class="questionBank">
+    <uni-nav-bar
+      @clickLeft="clickLeft"
+      left-icon="back"
+      ref="navbar"
+      :statusBar="true"
+      :title="examData.examName"
+    ></uni-nav-bar>
+    <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">{{
+                countdown(lastTime)
+              }}</view>
+            </view>
+            <view class="titles" @click="showPhoto(bank.content)"
+              ><rich-text :nodes="bank.content"></rich-text
+            ></view>
+          </view>
+
+          <template v-if="bank.type == 1">
+            <view class="pad_8 titBox no-margin">
+              <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 v-if="item.imgUrl">
+                      <image
+                        style="width: 600rpx"
+                        mode="widthFix"
+                        :src="$method.splitImgHost(item.imgUrl)"
+                      ></image>
+                    </view>
+                  </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 v-if="item.imgUrl">
+                      <image
+                        style="width: 600rpx"
+                        mode="widthFix"
+                        :src="$method.splitImgHost(item.imgUrl)"
+                      ></image>
+                    </view>
+                  </view>
+                </view>
+              </view>
+            </view>
+            <view v-if="bank.ques">
+              <view class="pad_8 answer">
+                <view>正确答案:{{ ast[bank.ans - 1] }} </view>
+                <view>我的答案:{{ 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 class="pad_8 titBox no-margin">
+              <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 v-if="item.imgUrl">
+                      <image
+                        style="width: 600rpx"
+                        mode="widthFix"
+                        :src="$method.splitImgHost(item.imgUrl)"
+                      ></image>
+                    </view>
+                  </view>
+                </view>
+              </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 v-if="item.imgUrl">
+                      <image
+                        style="width: 600rpx"
+                        mode="widthFix"
+                        :src="$method.splitImgHost(item.imgUrl)"
+                      ></image>
+                    </view>
+                  </view>
+                </view>
+              </view>
+              <view
+                v-if="!bank.ques"
+                class="submit_checkbox"
+                :class="{ disabled: !isCheckboxChecked(bank.jsonStr) }"
+                @click="checkboxSubmit(bankIndex)"
+                >确认答案</view
+              >
+            </view>
+            <view v-if="bank.ques">
+              <view class="pad_8 answer">
+                <view>
+                  正确答案:
+                  <text
+                    v-for="(ansItem, ansIndex) in bank.ans"
+                    :key="ansIndex"
+                    >{{ ast[ansItem - 1] }}</text
+                  >
+                </view>
+                <view>
+                  我的答案:
+                  <text
+                    v-for="(quesItem, quesIndex) in bank.ques"
+                    :key="quesIndex"
+                    >{{ 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 class="pad_8 titBox no-margin">
+              <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>
+                  <view class="flex_auto">
+                    {{ item }}
+                    <view v-if="item.imgUrl">
+                      <image
+                        style="width: 600rpx"
+                        mode="widthFix"
+                        :src="$method.splitImgHost(item.imgUrl)"
+                      ></image>
+                    </view>
+                  </view>
+                </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>
+                  <view class="flex_auto">
+                    {{ item }}
+                    <view v-if="item.imgUrl">
+                      <image
+                        style="width: 600rpx"
+                        mode="widthFix"
+                        :src="$method.splitImgHost(item.imgUrl)"
+                      ></image>
+                    </view>
+                  </view>
+                </view>
+              </view>
+            </view>
+            <view v-if="bank.ques">
+              <view class="pad_8 answer">
+                <view>正确答案:{{ ast[bank.ans] }}</view>
+                <view>我的答案:{{ 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="pad_8 titBox">
+              <view class="ans">
+                <view
+                  class="ans_input"
+                  v-if="
+                    !bank.ques ||
+                    (!bank.ques.imageList.length && !bank.ques.text)
+                  "
+                >
+                  <view class="top flex">
+                    <image
+                      :data-index="bankIndex"
+                      class="icon"
+                      @click="chooseImg(bankIndex)"
+                      src="/static/camera.png"
+                      mode=""
+                    ></image>
+                    <view class="progress"
+                      >{{ bank.ansText.imageList.length || "0" }}/4</view
+                    >
+                    <view
+                      class="submit"
+                      :class="{ disabled: !bank.ansText.text && hasImgs(bank) }"
+                      @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"
+                      :key="imgIndex"
+                    >
+                      <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 && (bank.ques.imageList.length || bank.ques.text)
+                  "
+                >
+                  <view class="answerTitle">我的答案:</view>
+                  {{ bank.ques.text }}
+                  <view class="imgs"
+                    ><image
+                      class="img"
+                      :key="quesIndex"
+                      v-for="(ques, quesIndex) in bank.ques.imageList"
+                      :src="$method.splitImgHost(ques, true)"
+                    ></image
+                  ></view>
+                </view>
+              </view>
+            </view>
+
+            <view
+              v-if="bank.ques && (bank.ques.imageList.length || bank.ques.text)"
+            >
+              <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 + 1 }}
+              </view>
+            </view>
+
+            <view
+              v-for="(ansItem, ansIndex) in bank.jsonStr"
+              v-if="bank.current == ansIndex"
+              :key="ansIndex"
+            >
+              <template v-if="ansItem.type == 1">
+                <view class="pad_8 titBox">
+                  <view class="leftLetters">
+                    <view class="btnType">
+                      <text>单选</text>
+                    </view>
+                  </view>
+                  <view class="titles"
+                    ><rich-text :nodes="ansItem.content"></rich-text
+                  ></view>
+                  <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>
+                      <view class="flex_auto">
+                        <rich-text
+                          class="textChild"
+                          :nodes="option.content"
+                        ></rich-text>
+                        <view v-if="option.imgUrl">
+                          <image
+                            style="width: 600rpx"
+                            mode="widthFix"
+                            :src="$method.splitImgHost(option.imgUrl)"
+                          ></image>
+                        </view>
+                      </view>
+                    </view>
+                  </view>
+                  <view v-if="bank.ques[ansIndex]">
+                    <view
+                      v-for="(option, childIndex) in ansItem.optionsList"
+                      :key="childIndex"
+                      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>
+                      <view class="flex_auto">
+                        <rich-text :nodes="option.content"></rich-text>
+                        <view v-if="option.imgUrl">
+                          <image
+                            style="width: 600rpx"
+                            mode="widthFix"
+                            :src="$method.splitImgHost(option.imgUrl)"
+                          ></image>
+                        </view>
+                      </view>
+                    </view>
+                  </view>
+                </view>
+
+                <view v-if="bank.ques[ansIndex]">
+                  <view class="pad_8 answer">
+                    <view>正确答案:{{ ast[bank.ans[ansIndex] - 1] }}</view>
+                    <view>我的答案:{{ 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 class="pad_8 titBox">
+                  <view class="leftLetters">
+                    <view class="btnType">
+                      <text>多选</text>
+                    </view>
+                  </view>
+                  <view class="titles"
+                    ><rich-text :nodes="ansItem.content"></rich-text
+                  ></view>
+                  <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
+                      >
+                      <view class="flex_auto">
+                        <rich-text :nodes="option.content"></rich-text>
+                        <view v-if="option.imgUrl">
+                          <image
+                            style="width: 600rpx"
+                            mode="widthFix"
+                            :src="$method.splitImgHost(option.imgUrl)"
+                          ></image>
+                        </view>
+                      </view>
+                    </view>
+                  </view>
+                  <view
+                    v-if="!bank.ques[ansIndex]"
+                    class="submit_checkbox"
+                    :class="{
+                      disabled: !isCheckboxChecked(ansItem.optionsList),
+                    }"
+                    @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>
+                      <view class="flex_auto">
+                        <rich-text :nodes="option.content"></rich-text>
+                        <view v-if="option.imgUrl">
+                          <image
+                            style="width: 600rpx"
+                            mode="widthFix"
+                            :src="$method.splitImgHost(option.imgUrl)"
+                          ></image>
+                        </view>
+                      </view>
+                    </view>
+                  </view>
+                </view>
+                <view v-if="bank.ques[ansIndex]">
+                  <view class="pad_8 answer">
+                    <view>
+                      正确答案:
+                      <text
+                        :key="ansItemIndex1"
+                        v-for="(ansItem1, ansItemIndex1) in bank.ans[ansIndex]"
+                        >{{ ast[ansItem1 - 1] }}</text
+                      >
+                    </view>
+                    <view>
+                      我的答案:
+                      <text
+                        :key="quesItemIndex"
+                        v-for="(quesItem, quesItemIndex) 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 class="pad_8 titBox">
+                  <view class="leftLetters">
+                    <view class="btnType">
+                      <text>判断</text>
+                    </view>
+                  </view>
+                  <view class="titles"
+                    ><rich-text :nodes="ansItem.content"></rich-text
+                  ></view>
+                  <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>
+                      <view class="flex_auto">
+                        {{ option }}
+                        <view v-if="option.imgUrl">
+                          <image
+                            style="width: 600rpx"
+                            mode="widthFix"
+                            :src="$method.splitImgHost(option.imgUrl)"
+                          ></image>
+                        </view>
+                      </view>
+                    </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>
+                      <view class="flex_auto">
+                        {{ option }}
+                        <view v-if="option.imgUrl">
+                          <image
+                            style="width: 600rpx"
+                            mode="widthFix"
+                            :src="$method.splitImgHost(option.imgUrl)"
+                          ></image>
+                        </view>
+                      </view>
+                    </view>
+                  </view>
+                </view>
+                <view v-if="bank.ques[ansIndex]">
+                  <view class="pad_8 answer">
+                    <view>正确答案:{{ ast[bank.ans[ansIndex]] }}</view>
+                    <view>我的答案:{{ 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="pad_8 titBox_title">
+                  <view class="leftLetters">
+                    <view class="btnType">
+                      <text>简答</text>
+                    </view>
+                  </view>
+                  <view><rich-text :nodes="ansItem.content"></rich-text></view>
+                </view>
+                <view class="pad_8 titBox_title">
+                  <view class="ans">
+                    <view
+                      class="ans_input"
+                      v-if="
+                        !bank.ques[ansIndex] ||
+                        (!bank.ques[ansIndex].text &&
+                          !bank.ques[ansIndex].imageList.length)
+                      "
+                    >
+                      <view class="top flex">
+                        <image
+                          class="icon"
+                          @click="chooseImgChild(bankIndex, ansIndex)"
+                          src="/static/camera.png"
+                          mode=""
+                        ></image>
+                        <view class="progress"
+                          >{{ ansItem.ansText.imageList.length || "0" }}/4</view
+                        >
+                        <view
+                          class="submit"
+                          :class="{
+                            disabled: !ansItem.ansText.text && hasImgs(ansItem),
+                          }"
+                          @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"
+                          :key="imgIndex"
+                        >
+                          <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] &&
+                        (bank.ques[ansIndex].imageList.length ||
+                          bank.ques[ansIndex].text)
+                      "
+                    >
+                      <view class="answerTitle">我的答案</view>
+                      {{ bank.ques[ansIndex].text || "" }}
+                      <view class="imgs">
+                        <image
+                          class="img"
+                          v-for="(ques, quesIndex) in bank.ques[ansIndex]
+                            .imageList"
+                          :key="quesIndex"
+                          :src="$method.splitImgHost(ques, true)"
+                        ></image>
+                      </view>
+                    </view>
+                  </view>
+                </view>
+                <view
+                  v-if="
+                    bank.ques[ansIndex].imageList.length ||
+                    bank.ques[ansIndex].text
+                  "
+                >
+                  <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 class="footer_btn">
+            <view
+              class="collect"
+              :class="{ show: goodsId && !isFromVideo ? true : false }"
+              @click="collect(collectList[bankIndex], bankIndex)"
+            >
+              <view v-if="collectList[bankIndex]">
+                <image src="/static/icon/collected.png" mode=""></image>
+                <view>取消收藏</view>
+              </view>
+              <view v-if="!collectList[bankIndex]">
+                <image src="/static/icon/collect.png" mode=""></image>
+                <view>收藏</view>
+              </view>
+            </view>
+            <view class="flex_center" @click="openFooterTab">
+              <view class="up-icon">
+                <image src="/static/up.png"></image>
+              </view>
+              答题卡
+            </view>
+            <view class="collect show" @click="pdsubmit">
+              <view>
+                <image src="/static/jj.png" mode=""></image>
+                <view>交卷</view>
+              </view>
+            </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),
+                  isPart: isPart(item, index),
+                  isOver: isOver(item, index),
+                }"
+                class="liListSty"
+              >
+                {{ index + 1 }}
+              </view>
+            </view>
+          </scroll-view>
+        </view>
+      </view>
+    </u-popup>
+
+    <view class="dialog" v-if="showDialog">
+      <image class="pointer" src="/static/pointer.png" mode=""></image>
+      <view class="text">左右滑动切换上下题</view>
+      <view class="btn" @click="showDialog = false">我知道了</view>
+    </view>
+
+    <view class="dialog-arrow" v-if="showArrow">
+      <image class="pointer" src="/static/arrow-left.png" mode=""></image>
+      <view class="text">您当前正在测试, 若想退出请点击左上角返回按钮。</view>
+      <view class="btn" @click="showArrow = false">我知道了</view>
+    </view>
+
+    <view class="dialog_wrap" v-if="testOver">
+      <view class="bg"></view>
+      <view class="dialog">
+        <view class="title">温馨提示</view>
+        <view class="content">
+          <view>您已完成所有题目,</view>
+          <view>快去交卷吧!</view>
+        </view>
+        <view class="btns">
+          <view class="btn" @click="noSubmit()">暂不交卷</view>
+          <view class="btn active" @click="submitNow()">立即交卷</view>
+        </view>
+      </view>
+    </view>
+
+    <view class="dialog_wrap" v-if="isLastCount">
+      <view class="bg"></view>
+      <view class="dialog">
+        <view class="title">温馨提示</view>
+        <view class="content">
+          <view
+            >您当前正在测试,还剩{{ lastCount }}道题未完成,离开视为交卷</view
+          >
+        </view>
+        <view class="btns">
+          <view class="btn" @click="noLeave()">暂不离开</view>
+          <view class="btn active" @click="leaveNow()">继续离开</view>
+        </view>
+      </view>
+    </view>
+    <u-popup
+      v-model="showpopups"
+      mode="center"
+      border-radius="24"
+      height="439rpx"
+      width="640rpx"
+      :mask-close-able="false"
+    >
+      <view class="popboxs">
+        <view class="classTops">温馨提示</view>
+        <view class="textStys">
+          {{
+            cgType === 7
+              ? "您还未交卷,确定结束做题吗?"
+              : cgType === 8
+              ? `您还有${lastCount}道题未作答, 现在继续作答,还是下次继续?`
+              : cgType === 6
+              ? `您还有${lastCount}道题未作答, 您确定要交卷吗?`
+              : cgType == 9
+              ? `您已完成所有题目,快去交卷吧!`
+              : ""
+          }}
+        </view>
+        <view class="classFootsty" v-if="cgType === 6">
+          <view class="btnsty btns1" @click="submit">立即交卷</view>
+          <view class="btnsty btns2" @click="showpopups = false">继续做题</view>
+        </view>
+        <view class="classFootsty" v-if="cgType === 7">
+          <view class="btnsty btns1" @click="backPages">下次继续</view>
+          <view class="btnsty btns2" @click="submit">结束做题</view>
+        </view>
+        <view class="classFootsty" v-if="cgType === 8">
+          <view class="btnsty btns1" @click="backPages()">下次继续</view>
+          <view class="btnsty btns2" @click="showpopups = false">继续作答</view>
+        </view>
+        <view class="classFootsty" v-if="cgType === 9">
+          <view class="btnsty btns1" @click="showpopups = false">暂不交卷</view>
+          <view class="btnsty btns2" @click="submit">立即交卷</view>
+        </view>
+      </view>
+    </u-popup>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      showpopups: false,
+      id: "",
+      current: 0,
+      questionList: [],
+      ast: ["A", "B", "C", "D", "E", "F", "G"],
+      judge: ["错误", "正确"],
+      ans: [],
+      ques: [],
+      show: false,
+      showDialog: false,
+      bankList: [],
+      collectList: [],
+      goodsId: "",
+      recordId: "",
+      isSubmit: false,
+      lastTime: 0, //剩余考试时长
+      allTimes: 0, //总考试时长
+      timer: null,
+      wrongList: [],
+      bankType: 0, //试卷类型
+      needBack: false, //是否是考试
+      testOver: false,
+      isLastCount: false, //是否有未答题目
+      lastCount: 0, //剩余没有回答的题目数
+      chapterId: 0,
+      moduleId: 0,
+      showArrow: false, //退出提示
+      isFromVideo: "",
+      gradeId: "",
+      examData: {},
+      orderGoodsId: "",
+      cgType: 0, //对应设计稿弹窗编码
+    };
+  },
+  async onLoad(option) {
+    this.orderGoodsId = option.orderGoodsId || 0;
+    this.current = +option.current || 0;
+    this.id = option.id;
+    this.goodsId = option.goodsid;
+    this.chapterId = option.chapterId || 0;
+    this.moduleId = option.moduleId || 0;
+    this.isFromVideo = option.isFromVideo || "";
+    this.gradeId = option.gradeId || "";
+    let isBack = option.isback;
+
+    let showDialog = uni.getStorageSync("showDialog");
+
+    if (showDialog) {
+      this.showDialog = false;
+    } else {
+      this.showDialog = true;
+      uni.setStorageSync("showDialog", "1");
+    }
+
+    //考试被迫返回
+    if (isBack) {
+      let app = getApp();
+      let globalData = app.globalData;
+
+      for (var k in globalData.bankData) {
+        this[k] = globalData.bankData[k];
+      }
+      this.showArrow = true;
+
+      this.timer = setInterval(() => {
+        if (this.lastTime <= 0) {
+          clearInterval(this.timer);
+          uni.showToast({
+            icon: "none",
+            mask: true,
+            title: "考试时间已到,系统将自动交卷",
+            duration: 10000,
+          });
+
+          this.submit();
+          return;
+        }
+        this.lastTime--;
+      }, 1000);
+    } else {
+      //进入页面
+      await this.bankExam();
+      this.goodsQuestionList();
+    }
+  },
+  onUnload() {
+    if (this.isSubmit) {
+      clearInterval(this.timer);
+      return;
+    }
+    //考试试卷 阻止ios手势返回,自动跳回答题页
+    if (this.needBack) {
+      let app = getApp();
+      app.globalData.bankData = this.$data;
+      clearInterval(this.timer);
+      uni.navigateTo({
+        url:
+          "/pages2/bank/questionBank?id=" +
+          this.id +
+          "&goodsid=" +
+          this.goodsId +
+          "&isback=true&orderGoodsId=" +
+          this.orderGoodsId,
+      });
+    } else {
+      //点击返回按钮确认允许退出,记录答题记录
+      clearInterval(this.timer);
+
+      this.examRecordEdit();
+    }
+  },
+  methods: {
+    /**
+     * 是否有上传图片
+     */
+    hasImgs(bank) {
+      return bank.ansText.imageList.length == 0;
+    },
+    /**
+     * 获取试卷类型2考试,1练习
+     */
+    bankExam() {
+      return new Promise((resolve) => {
+        this.$api.bankExam(this.id).then((res) => {
+          this.bankType = res.data.data.doType;
+          this.examData = res.data.data;
+          if (this.bankType == 2) {
+            this.needBack = true;
+          }
+
+          resolve();
+        });
+      });
+    },
+    /**
+     * 点击后退按钮
+     */
+    clickLeft() {
+      if (this.bankType == 1) {
+        let ansCount = this.questionOverNum(true); //已答题数
+        this.lastCount = this.questionList.length - ansCount; //统计未答完的题数
+
+        //所有题目答完
+        if (this.lastCount == 0) {
+          // this.testOver = true;
+          this.cgType = 7;
+          //未答完
+        } else {
+          this.cgType = 8;
+          // this.isLastCount = true;
+        }
+        this.showpopups = true;
+      } else if (this.bankType == 2) {
+        let ansCount = this.questionOverNum(true); //已答题数
+        this.lastCount = this.questionList.length - ansCount; //统计未答完的题数
+
+        //所有题目答完
+        if (this.lastCount == 0) {
+          this.testOver = true;
+          //未答完
+        } else {
+          this.isLastCount = true;
+        }
+      }
+    },
+    /**
+     * 返回上一页
+     */
+    backPages() {
+      this.needBack = false;
+      uni.navigateBack({
+        delta: 1,
+      });
+    },
+    /**
+     * 获取已经回答的题目数
+     * hasSpecail (是否包含简答和案例)
+     */
+    questionOverNum(hasSpecail) {
+      let count = 0;
+      this.questionList.forEach((item) => {
+        if (item.type == 1 || item.type == 2 || item.type == 3) {
+          if (item.ques) {
+            count++;
+          }
+        } else if (item.type == 4) {
+          //案例题
+          if (hasSpecail) {
+            let isOver = item.jsonStr.every((jsonItem, indexs) => {
+              if (
+                jsonItem.type == 1 ||
+                jsonItem.type == 2 ||
+                jsonItem.type == 3
+              ) {
+                if (item.ques[indexs]) {
+                  return true;
+                } else {
+                  return false;
+                }
+              } else if (jsonItem.type == 5) {
+                if (
+                  item.ques[indexs] &&
+                  (item.ques[indexs].text || item.ques[indexs].imageList.length)
+                ) {
+                  console.log("chil");
+                  return true;
+                } else {
+                  return false;
+                }
+              }
+            });
+
+            if (isOver) {
+              count++;
+              console.log(item, 444);
+            }
+          }
+        } else if (item.type == 5) {
+          //简答题
+          if (hasSpecail) {
+            if (item.ques && (item.ques.text || item.ques.imageList.length)) {
+              console.log(5, item);
+              count++;
+            }
+          }
+        }
+      });
+
+      return count;
+    },
+    /**
+     * 是否做完所有题目
+     */
+    isDoOver() {
+      let questionOverNum = this.questionOverNum(true); //获取已经回答的题目数(包括简答和案例)
+      if (this.questionList.length == questionOverNum) {
+        //全部做完弹窗
+        this.cgType = 9;
+        this.showpopups = true;
+      }
+    },
+    /**
+     * 暂不交卷
+     */
+    noSubmit() {
+      //设为允许退出页面
+      this.needBack = false;
+      uni.navigateBack({
+        delta: 1,
+      });
+    },
+    /**
+     * 不离开
+     */
+    noLeave() {
+      this.isLastCount = false;
+    },
+    /**
+     * 立即离开并交卷
+     */
+    leaveNow() {
+      this.needBack = false;
+      this.isSubmit = true;
+      uni.navigateBack({
+        delta: 1,
+      });
+      let score = 0; //计算总分
+      let reportStatus = 0;
+      let number = 0; //做对的题目数量
+      let doQuestionNum = 0; //做过的题目数量
+      let allScore = 0; //总分
+      let passScore = 0;
+      let doWrongQuestionIds = []; //错题和未做题id(客观题)
+      let doQuestionIds = []; //做过的题目id
+      let lessQuestionNum = 0;
+      let rightQuestionIds = []; //做对的题目id
+      this.questionList.forEach((item, index) => {
+        // passScore = item.passScore
+        if (item.type == 1) {
+          //正确
+          if (item.ques == item.ans) {
+            item.scoreResult = item.score;
+            score += item.score;
+            number++;
+            rightQuestionIds.push(item.questionId);
+          } else {
+            //错误
+            item.scoreResult = 0;
+						if (item.ques) {
+							doWrongQuestionIds.push(item.questionId);
+						}
+          }
+          allScore += item.score;
+          if (item.ques) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        } else if (item.type == 2) {
+          let isRight =
+            item.ans &&
+            item.ans.every((quesItem, quesIndex) => {
+              if (item.ques) {
+                return item.ques[quesIndex] == item.ans[quesIndex];
+              } else {
+                return false;
+              }
+            });
+
+          if (isRight) {
+            score += item.score;
+            number++;
+            item.scoreResult = item.score;
+            rightQuestionIds.push(item.questionId);
+          } else {
+            let hasPart = false;
+            let checkboxScore = 1; //获取单题总分数
+            item.ques &&
+              item.ques.forEach((ques, quesIndex) => {
+                //选错一个全扣
+                if (item.ques) {
+                  if (item.ans.indexOf(item.ques[quesIndex]) == -1) {
+                    checkboxScore = 0;
+                  }
+                } else {
+                  checkboxScore = 0;
+                }
+              });
+            console.log(checkboxScore);
+
+            //没选错
+            if (checkboxScore) {
+              checkboxScore = 0;
+              item.ans.forEach((ans, quesIndex) => {
+                //漏选只能得部分分数
+                if (item.ques) {
+                  if (item.ques.indexOf(item.ans[quesIndex]) == -1) {
+                    checkboxScore = +item.partScore;
+                    hasPart = true;
+                  }
+                } else {
+                  checkboxScore = 0;
+                }
+              });
+            }
+
+            if (!hasPart) {
+              //0分
+              item.scoreResult = 0;
+							if (item.ques) {
+								doWrongQuestionIds.push(item.questionId);
+							}
+            } else {
+              //部分分
+              // number++;
+              lessQuestionNum++;
+              // doWrongQuestionIds.push(item.questionId);
+              item.scoreResult = checkboxScore;
+              score += checkboxScore;
+              // rightQuestionIds.push(item.questionId)
+            }
+          }
+          allScore += item.score;
+          if (item.ques && item.ques.length) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        } else if (item.type == 3) {
+          if (item.ques == item.ans) {
+            item.scoreResult = item.score;
+            score += item.score;
+            number++;
+            rightQuestionIds.push(item.questionId);
+          } else {
+            item.scoreResult = 0;
+						if (item.ques) {
+							doWrongQuestionIds.push(item.questionId);
+						}
+          }
+          allScore += item.score;
+          if (item.ques) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        } else if (item.type == 4) {
+          allScore += item.score;
+          if (item.ques && item.ques.length) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        } else if (item.type == 5) {
+          allScore += item.score;
+          if (item.ques && (item.ques.imageList.length || item.ques.text)) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        }
+      });
+
+      //大于60分及格
+      if (score >= 60) {
+        reportStatus = 1;
+      } else {
+        reportStatus = 0;
+      }
+
+      //交卷
+      this.$api
+        .examRecordEdit({
+          examId: this.id,
+          goodsId: this.goodsId,
+          orderGoodsId: this.orderGoodsId,
+          reportStatus: reportStatus,
+          recordId: this.recordId,
+          rightQuestionNum: number,
+          status: 1,
+					lessQuestionNum:lessQuestionNum,
+          moduleExamId: this.moduleId || 0,
+          chapterExamId: this.chapterId || 0,
+          doQuestionIds: doQuestionIds.join(","),
+          rightQuestionIds: rightQuestionIds.join(","),
+          doQuestionNum: doQuestionNum,
+          performance: score,
+          totalScore: allScore,
+          examTime: parseInt(this.allTimes),
+          doTime: parseInt(this.allTimes) - parseInt(this.lastTime),
+          historyExamJson: JSON.stringify(this.questionList),
+        })
+        .then((res) => {
+          this.isSubmit = true;
+          if (res.data.code == 200) {
+          }
+        });
+
+      //错题集id提交(客观题)
+      this.$api
+        .examWrongRecord({
+          orderGoodsId: this.orderGoodsId,
+          moduleExamId: this.moduleId || 0,
+          chapterExamId: this.chapterId || 0,
+          examId: this.id,
+          goodsId: this.goodsId,
+          questionIds: doWrongQuestionIds,
+          recordId: this.recordId,
+        })
+        .then((res) => {});
+    },
+    /**
+     * 立即交卷
+     */
+    submitNow() {
+      this.showpopups = false;
+      this.needBack = false;
+      this.submit();
+    },
+    /**
+     * 离开页面统计回答正确题数
+     */
+    examRecordEdit() {
+      if (!this.isSubmit) {
+        let number = 0;
+        let score = 0;
+        let doQuestionNum = 0;
+        let doQuestionIds = []; //做过的题目id
+        this.questionList.forEach((item, index) => {
+          if (item.type == 1) {
+            if (item.ques == item.ans) {
+              score += item.score;
+              number++;
+            }
+
+            if (item.ques) {
+              doQuestionNum++;
+              doQuestionIds.push(item.questionId);
+            }
+          } else if (item.type == 2) {
+            let isRight =
+              item.ans &&
+              item.ans.every((quesItem, quesIndex) => {
+                if (item.ques) {
+                  return item.ques[quesIndex] == item.ans[quesIndex];
+                } else {
+                  return false;
+                }
+              });
+
+            if (isRight) {
+              score += item.score;
+              number++;
+            } else {
+              let checkboxScore = 1; //获取单题总分数
+              item.ques &&
+                item.ques.forEach((ques, quesIndex) => {
+                  //选错一个全扣
+                  if (item.ques) {
+                    if (item.ans.indexOf(item.ques[quesIndex]) == -1) {
+                      checkboxScore = 0;
+                    }
+                  } else {
+                    checkboxScore = 0;
+                  }
+                });
+              console.log(checkboxScore);
+
+              //没选错
+              if (checkboxScore) {
+                checkboxScore = 0;
+                item.ans.forEach((ans, quesIndex) => {
+                  //漏选扣一部分,对n题给n X partScore 分
+                  if (item.ques) {
+                    if (item.ques.indexOf(item.ans[quesIndex]) != -1) {
+                      checkboxScore += item.partScore;
+                    }
+                  } else {
+                    checkboxScore = 0;
+                  }
+                });
+              }
+
+              if (checkboxScore <= 0) {
+                //0分
+              } else {
+                //部分分
+                // number++;
+                score += checkboxScore;
+              }
+            }
+            if (item.ques && item.ques.length) {
+              doQuestionNum++;
+              doQuestionIds.push(item.questionId);
+            }
+          } else if (item.type == 3) {
+            if (item.ques == item.ans) {
+              score += item.score;
+              number++;
+            }
+
+            if (item.ques) {
+              doQuestionNum++;
+              doQuestionIds.push(item.questionId);
+            }
+          } else if (item == 4) {
+            if (item.ques.length) {
+              doQuestionNum++;
+              doQuestionIds.push(item.questionId);
+            }
+          } else if (item.type == 5) {
+            if (item.ques && (item.ques.imageList.length || item.ques.text)) {
+              doQuestionNum++;
+              doQuestionIds.push(item.questionId);
+            }
+          }
+        });
+
+        this.$api
+          .examRecordEdit({
+            orderGoodsId: this.orderGoodsId,
+            examId: this.id,
+            goodsId: this.goodsId,
+            recordId: this.recordId,
+            doQuestionIds: doQuestionIds.join(","),
+            rightQuestionNum: number,
+            moduleExamId: this.moduleId || 0,
+            chapterExamId: this.chapterId || 0,
+            status: 0,
+            doQuestionNum: doQuestionNum,
+            historyExamJson: JSON.stringify(this.questionList),
+          })
+          .then((res) => {});
+      }
+    },
+    /**
+     * 记录总题数
+     * hasSpecial (是否包含简答和案例) true 包含  false 不包含
+     */
+    examRecord(hasSpecial) {
+      let questionList = 0;
+      // if(!hasSpecial) {
+      this.questionList.forEach((item, index) => {
+        if (item.type == 1 || item.type == 2 || item.type == 3) {
+          questionList++;
+        }
+      });
+      // } else {
+      // 	questionList = this.questionList.length;
+      // }
+
+      this.$api
+        .examRecord({
+          chapterExamId: this.chapterId || 0,
+          orderGoodsId: this.orderGoodsId,
+          moduleExamId: this.moduleId || 0,
+          examId: this.id,
+          goodsId: this.goodsId,
+          totalQuestionNum: questionList,
+          allQuestionNum: this.questionList.length,
+        })
+        .then((res) => {
+          this.recordId = res.data.data;
+          //获取recordId 初始化先提交题目 以防突然下次继续做题退出报错
+          if (this.bankType == 1) {
+            this.examRecordEdit();
+          }
+        });
+    },
+    /**
+     * @param {Object} second倒计时过滤器
+     */
+    countdown(second) {
+      if (second) {
+        let h = parseInt((second / 60 / 60) % 24); //   计算小时
+        let m = parseInt((second / 60) % 60); //   计算分数
+        let s = parseInt(second % 60); //   计算当前秒数
+
+        if (h < 10) h = "0" + h;
+        if (m < 10) m = "0" + m;
+        if (s < 10) s = "0" + s;
+
+        return h + ":" + m + ":" + s;
+      } else {
+        return "";
+      }
+    },
+		
+		hideDialog() {
+			this.showDialog = false
+		},
+    /**
+     * 请求题目列表
+     */
+    goodsQuestionList() {
+      this.$api
+        .goodsQuestionList({
+          examId: this.id,
+        })
+        .then((res) => {
+          if (!res.data.data.length) {
+            this.hideDialog();
+            uni.showModal({
+              showCancel: false,
+              content: "该试卷暂无题目",
+              success: (k) => {
+                if (k.confirm) {
+									this.isSubmit = true;
+                  uni.navigateBack();
+                }
+              },
+            });
+            return;
+          }
+          this.allTimes = res.data.data[0].answerTime * 60;
+          this.lastTime =
+            res.data.data[0].answerTime && res.data.data[0].answerTime * 60;
+          //考试时间到了自动交卷
+          if (this.lastTime) {
+            this.timer = setInterval(() => {
+              if (this.lastTime <= 0) {
+                clearInterval(this.timer);
+                uni.showToast({
+                  icon: "none",
+                  mask: true,
+                  title: "考试时间已到,系统将自动交卷",
+                  duration: 10000,
+                });
+
+                this.submit();
+                return;
+              }
+              this.lastTime--;
+            }, 1000);
+          } else {
+          }
+          res.data.data.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;
+              item.analysisContent &&
+                (item.analysisContent = item.analysisContent.replace(
+                  /<img/gi,
+                  '<img style="max-width:100%;"'
+                ));
+              item.content &&
+                (item.content = item.content.replace(
+                  /<img/gi,
+                  '<img style="max-width:100%;"'
+                ));
+              return;
+            } else if (item.type == 5) {
+              //简答题
+              item.ansText = {
+                text: "",
+                imageList: [],
+              };
+
+              item.ques = {
+                text: "",
+                imageList: [],
+              };
+              item.analysisContent &&
+                (item.analysisContent = item.analysisContent.replace(
+                  /<img/gi,
+                  '<img style="max-width:100%;"'
+                ));
+              item.content &&
+                (item.content = item.content.replace(
+                  /<img/gi,
+                  '<img style="max-width:100%;"'
+                ));
+            } else if (item.type == 4) {
+              //案例题
+
+              item.ques = [];
+              item.current = 0;
+              let ansArr = [];
+              item.jsonStr.forEach((json, index) => {
+                if (json.type == 1) {
+                  ansArr[index] = json.answerQuestion;
+                  json.content &&
+                    (json.content = json.content.replace(
+                      /<img/gi,
+                      '<img style="max-width:100%;"'
+                    ));
+                } 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;
+                  json.content &&
+                    (json.content = json.content.replace(
+                      /<img/gi,
+                      '<img style="max-width:100%;"'
+                    ));
+                } else if (json.type == 3) {
+                  ansArr[index] = json.answerQuestion;
+                  json.content &&
+                    (json.content = json.content.replace(
+                      /<img/gi,
+                      '<img style="max-width:100%;"'
+                    ));
+                } else if (json.type == 5) {
+                  ansArr[index] = {
+                    text: json.answerQuestion,
+                    imageList: [],
+                  };
+                  json.ansText = {
+                    text: "",
+                    imageList: [],
+                  };
+                  json.content &&
+                    (json.content = json.content.replace(
+                      /<img/gi,
+                      '<img style="max-width:100%;"'
+                    ));
+                }
+              });
+
+              item.analysisContent &&
+                (item.analysisContent = item.analysisContent.replace(
+                  /<img/gi,
+                  '<img style="max-width:100%;"'
+                ));
+              item.content &&
+                (item.content = item.content.replace(
+                  /<img/gi,
+                  '<img style="max-width:100%;"'
+                ));
+              item.ans = ansArr;
+              return;
+            }
+
+            item.analysisContent &&
+              (item.analysisContent = item.analysisContent.replace(
+                /<img/gi,
+                '<img style="max-width:100%;"'
+              ));
+            item.content &&
+              (item.content = item.content.replace(
+                /<img/gi,
+                '<img style="max-width:100%;"'
+              ));
+            item.ans = item.answerQuestion;
+            // }
+          });
+
+          this.questionList = res.data.data;
+
+          this.lastCount = this.questionList.length;
+          this.examRecord();
+          this.getCollectInfo(this.current);
+        });
+    },
+    /**
+     * @param {Object} e单选点击
+     */
+    radioSelect(optionsId, bindex) {
+      if (this.questionList[bindex].ques) return;
+      this.$set(this.questionList[bindex], "ques", optionsId);
+      this.isDoOver();
+
+      // 回答错误
+      if (this.questionList[bindex].ques != this.questionList[bindex].ans) {
+        this.$api
+          .examWrongRecord({
+            orderGoodsId: this.orderGoodsId,
+            examId: this.id,
+            goodsId: this.goodsId,
+            moduleExamId: this.moduleId || 0,
+            chapterExamId: this.chapterId || 0,
+            questionIds: [this.questionList[bindex].questionId],
+            recordId: this.recordId,
+          })
+          .then((res) => {});
+      } 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 => {
+        // 	})
+        // }
+      }
+    },
+
+    /**
+     * @param {Object} e案例单选点击
+     */
+    radioSelectChild(optionsId, ansIndex, bindex) {
+      if (this.questionList[bindex].ques[ansIndex]) return;
+      this.$set(this.questionList[bindex].ques, ansIndex, optionsId);
+      this.isDoOver();
+    },
+
+    /**
+     * @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
+      );
+    },
+
+    isCheckboxChecked(arr) {
+      return arr.some((item) => {
+        if (item.checked) {
+          return true;
+        }
+      });
+    },
+
+    /**
+     * @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);
+        }
+      });
+
+      if (!arr.length) {
+        uni.showToast({
+          title: "请选择答案",
+          icon: "none",
+        });
+        return;
+      }
+
+      this.$set(this.questionList[bindex], "ques", arr);
+      this.isDoOver();
+
+      let isWrong = this.questionList[bindex].ques.some(
+        (quesItem, quesIndex) => {
+          return (
+            this.questionList[bindex].ques[quesIndex] !=
+            this.questionList[bindex].ans[quesIndex]
+          );
+        }
+      );
+      // 回答错误
+      if (isWrong) {
+        this.$api
+          .examWrongRecord({
+            orderGoodsId: this.orderGoodsId,
+            examId: this.id,
+            goodsId: this.goodsId,
+            moduleExamId: this.moduleId || 0,
+            chapterExamId: this.chapterId || 0,
+            questionIds: [this.questionList[bindex].questionId],
+            recordId: this.recordId,
+          })
+          .then((res) => {});
+      } 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 => {
+        // 	})
+        // }
+      }
+    },
+
+    /**
+     * @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);
+          }
+        }
+      );
+
+      if (!arr.length) {
+        uni.showToast({
+          title: "请选择答案",
+          icon: "none",
+        });
+        return;
+      }
+
+      this.$set(this.questionList[bindex].ques, ansIndex, arr);
+      this.isDoOver();
+    },
+
+    /**
+     * @param {Object} index
+     * @param {Object} bindex
+     * 判断题
+     */
+    judgeSelect(index, bindex) {
+      if (this.questionList[bindex].ques) return;
+      this.$set(this.questionList[bindex], "ques", index + "");
+      this.isDoOver();
+      // 回答错误
+      if (this.questionList[bindex].ques != this.questionList[bindex].ans) {
+        this.$api
+          .examWrongRecord({
+            orderGoodsId: this.orderGoodsId,
+            examId: this.id,
+            goodsId: this.goodsId,
+            moduleExamId: this.moduleId || 0,
+            chapterExamId: this.chapterId || 0,
+            questionIds: [this.questionList[bindex].questionId],
+            recordId: this.recordId,
+          })
+          .then((res) => {});
+      } 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 => {
+        // 	})
+        // }
+      }
+    },
+
+    /**
+     * @param {Object} ansindex
+     * @param {Object} childindex
+     * @param {Object} bindex
+     * 案例判断题
+     */
+    judgeSelectChild(ansindex, childindex, bindex) {
+      if (this.questionList[bindex].ques[ansindex]) return;
+      this.$set(this.questionList[bindex].ques, ansindex, childindex + "");
+      this.isDoOver();
+    },
+
+    openFooterTab() {
+      this.show = true;
+    },
+    changeIndex(index) {
+      this.current = index;
+    },
+
+    swiperChange(e) {
+      this.current = e.detail.current;
+      this.getCollectInfo(this.current);
+    },
+
+    /**
+     * @param {Object} current
+     * 获取收藏信息
+     */
+    getCollectInfo(current) {
+      this.$api
+        .getCollectInfo({
+          examId: this.id,
+          questionId: this.questionList[current].questionId,
+          goodsId: this.goodsId,
+          orderGoodsId: this.orderGoodsId,
+        })
+        .then((res) => {
+          if (res.data.code == 500) {
+            this.$set(this.collectList, current, false);
+          } else if (res.data.code == 200) {
+            this.$set(this.collectList, current, res.data.data);
+          }
+        });
+    },
+    pdsubmit() {
+      // if (this.bankType == 1) {
+      let ansCount = this.questionOverNum(true); //已答题数
+      this.lastCount = this.questionList.length - ansCount; //统计未答完的题数
+      //没有答完
+      if (this.lastCount !== 0) {
+        this.cgType = 6;
+        this.showpopups = true;
+        return;
+      }
+      // }
+
+      if (this.bankType == 2) {
+        if (this.lastTime > 0) {
+          let lastTime = this.countdown(this.lastTime);
+          uni.showModal({
+            title: "提示",
+            content: `时间还剩余${lastTime},确定交卷吗?`,
+            confirmText: "交卷",
+            cancelText: "继续答题",
+            success: (res) => {
+              if (res.confirm) {
+                //确定
+                this.submit();
+              } else {
+                //取消
+              }
+            },
+          });
+          return;
+        }
+      }
+      this.submit();
+    },
+    /**
+     * 交卷
+     */
+    submit() {
+      let score = 0; //计算总分
+      let reportStatus = 0;
+      let number = 0; //做对的题目数量
+      let doQuestionNum = 0; //做过的题目数量
+      let allScore = 0; //总分
+      let passScore = 0;
+      let doWrongQuestionIds = []; //错题和未做题id(客观题)
+      let doQuestionIds = []; //做过的题目id
+      let lessQuestionNum = 0;
+      let rightQuestionIds = []; //做对的题目id
+      this.questionList.forEach((item, index) => {
+        passScore = item.passScore;
+        if (item.type == 1) {
+          //正确
+          if (item.ques == item.ans) {
+            item.scoreResult = item.score;
+            score += item.score;
+            number++;
+            rightQuestionIds.push(item.questionId);
+          } else {
+            //错误
+            item.scoreResult = 0;
+						if (item.ques) {
+							doWrongQuestionIds.push(item.questionId);
+						}
+          }
+          allScore += item.score;
+          if (item.ques) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        } else if (item.type == 2) {
+          let isRight =
+            item.ans &&
+            item.ans.every((quesItem, quesIndex) => {
+              if (item.ques) {
+                return item.ques[quesIndex] == item.ans[quesIndex];
+              } else {
+                return false;
+              }
+            });
+
+          if (isRight) {
+            score += item.score;
+            number++;
+            item.scoreResult = item.score;
+            rightQuestionIds.push(item.questionId);
+          } else {
+            let hasPart = false;
+            let checkboxScore = 1; //获取单题总分数
+            item.ques &&
+              item.ques.forEach((ques, quesIndex) => {
+                //选错一个全扣
+                if (item.ques) {
+                  if (item.ans.indexOf(item.ques[quesIndex]) == -1) {
+                    checkboxScore = 0;
+                  }
+                } else {
+                  checkboxScore = 0;
+                }
+              });
+
+            //没选错
+            if (checkboxScore) {
+              checkboxScore = 0;
+              item.ans.forEach((ans, quesIndex) => {
+                //漏选扣一部分,对n题给n X partScore 分
+                if (item.ques) {
+                  if (item.ques.indexOf(item.ans[quesIndex]) != -1) {
+                    checkboxScore += item.partScore;
+                    hasPart = true;
+                  }
+                } else {
+                  checkboxScore = 0;
+                }
+              });
+            }
+
+            if (!hasPart) {
+              //0分
+              item.scoreResult = 0;
+							if (item.ques) {
+								doWrongQuestionIds.push(item.questionId);
+							}
+            } else {
+              //部分分
+              // number++;
+							lessQuestionNum++
+              // doWrongQuestionIds.push(item.questionId);
+              item.scoreResult = checkboxScore;
+              score += checkboxScore;
+              // rightQuestionIds.push(item.questionId)
+            }
+          }
+          allScore += item.score;
+          if (item.ques && item.ques.length) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        } else if (item.type == 3) {
+          if (item.ques == item.ans) {
+            item.scoreResult = item.score;
+            score += item.score;
+            number++;
+            rightQuestionIds.push(item.questionId);
+          } else {
+            item.scoreResult = 0;
+						if (item.ques) {
+							doWrongQuestionIds.push(item.questionId);
+						}
+          }
+          allScore += item.score;
+          if (item.ques) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        } else if (item.type == 4) {
+          allScore += item.score;
+          if (item.ques && item.ques.length) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        } else if (item.type == 5) {
+          allScore += item.score;
+          if (item.ques && (item.ques.imageList.length || item.ques.text)) {
+            doQuestionNum++;
+            doQuestionIds.push(item.questionId);
+          }
+        }
+      });
+
+      //大于及格
+      if (score >= passScore) {
+        reportStatus = 1;
+      } else {
+        reportStatus = 0;
+      }
+
+      //交卷
+      this.$api
+        .examRecordEdit({
+          examId: this.id,
+          goodsId: this.goodsId,
+          reportStatus: reportStatus,
+          recordId: this.recordId,
+          rightQuestionNum: number,
+          orderGoodsId: this.orderGoodsId,
+          status: 1,
+					lessQuestionNum:lessQuestionNum,
+          moduleExamId: this.moduleId || 0,
+          chapterExamId: this.chapterId || 0,
+          doQuestionIds: doQuestionIds.join(","),
+          rightQuestionIds: rightQuestionIds.join(","),
+          doQuestionNum: doQuestionNum,
+          performance: score,
+          totalScore: allScore,
+          examTime: parseInt(this.allTimes),
+          doTime: parseInt(this.allTimes) - parseInt(this.lastTime),
+          historyExamJson: JSON.stringify(this.questionList),
+        })
+        .then((res) => {
+          this.isSubmit = true;
+          if (res.data.code == 200) {
+            uni.showToast({
+              title: "交卷成功",
+              duration: 1000,
+              icon: "none",
+            });
+
+            setTimeout(() => {
+              uni.redirectTo({
+                url:
+                  "/pages2/bank/question_report?goodsId=" +
+                  this.goodsId +
+                  "&chapterId=" +
+                  this.chapterId +
+                  "&moduleId=" +
+                  this.moduleId +
+                  "&examId=" +
+                  this.id +
+                  "&id=" +
+                  this.recordId +
+                  "&orderGoodsId=" +
+                  this.orderGoodsId,
+              });
+            }, 1000);
+          }
+        });
+
+      //错题集id提交(客观题)
+      this.$api
+        .examWrongRecord({
+          examId: this.id,
+          goodsId: this.goodsId,
+          orderGoodsId: this.orderGoodsId,
+          questionIds: doWrongQuestionIds,
+          recordId: this.recordId,
+        })
+        .then((res) => {});
+    },
+
+    /**
+     * @param {Object} state
+     * @param {Object} index
+     * 收藏
+     */
+    collect(state, index) {
+      if (!state) {
+        this.$api
+          .collectQuestion({
+            examId: this.id,
+            questionId: this.questionList[index].questionId,
+            goodsId: this.goodsId || "",
+            orderGoodsId: this.orderGoodsId,
+          })
+          .then((res) => {
+            if (res.data.code == 200) {
+              this.$set(this.collectList, index, true);
+              uni.showToast({
+                title: "收藏成功",
+                duration: 2000,
+                icon: "none",
+              });
+              this.getCollectInfo(index);
+            }
+          });
+      } else {
+        this.$api
+          .deleteCollectQuestion(this.collectList[index].collectQuestionId)
+          .then((res) => {
+            if (res.data.code == 200) {
+              this.$set(this.collectList, index, false);
+              uni.showToast({
+                title: "取消收藏成功",
+                duration: 2000,
+                icon: "none",
+              });
+            }
+          });
+      }
+      return;
+    },
+
+    /**
+     * @param {Object} imgIndex
+     * @param {Object} bankIndex
+     * 删除简答图片
+     */
+    deleteImg(imgIndex, bankIndex) {
+      this.questionList[bankIndex].ansText.imageList.splice(imgIndex, 1);
+    },
+
+    /**
+     * @param {Object} imgIndex
+     * @param {Object} bankIndex
+     * @param {Object} ansIndex
+     * 删除案例题简答图片
+     */
+    deleteImgChild(imgIndex, bankIndex, ansIndex) {
+      this.questionList[bankIndex].jsonStr[ansIndex].ansText.imageList.splice(
+        imgIndex,
+        1
+      );
+    },
+
+    /**
+     * @param {Object} bankindex
+     * 选择上传图片
+     */
+    chooseImg(bankindex) {
+      if (
+        this.questionList[bankindex] &&
+        this.questionList[bankindex].ansText &&
+        this.questionList[bankindex].ansText.imageList.length >= 4
+      ) {
+        uni.showToast({
+          icon: "none",
+          title: "最多选择4张",
+        });
+        return;
+      }
+      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);
+              }
+            },
+          });
+        },
+      });
+    },
+
+    /**
+     * @param {Object} bankindex
+     * @param {Object} ansindex
+     * 案例题选择上传图片
+     */
+    chooseImgChild(bankindex, ansindex) {
+      if (
+        this.questionList[bankindex].jsonStr[ansindex] &&
+        this.questionList[bankindex].jsonStr[ansindex].ansText &&
+        this.questionList[bankindex].jsonStr[ansindex].ansText.imageList
+          .length >= 4
+      ) {
+        uni.showToast({
+          icon: "none",
+          title: "最多选择4张",
+        });
+        return;
+      }
+      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 = {
+          orderGoodsId: this.orderGoodsId,
+          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;
+            },
+          });
+        });
+      });
+    },
+    /**
+     * @param {Object} type
+     * @param {Object} bankindex
+     * 简答题答案确认
+     */
+    submitAns(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.questionList[bankindex], "ques", {
+        imageList: this.questionList[bankindex].ansText.imageList || [],
+        text: this.questionList[bankindex].ansText.text || "",
+      });
+      this.isDoOver();
+    },
+
+    /**
+     * @param {Object} bankindex
+     * @param {Object} ansindex
+     * 案例题简答答案确认
+     */
+    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 || "",
+      });
+      this.isDoOver();
+    },
+
+    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].ans.every((item, i) => {
+            return item == this.questionList[index].ques[i];
+          });
+          //判断
+        } else if (item.type == 3) {
+          return this.questionList[index].ques == this.questionList[index].ans;
+          // } else if (item.type == 5) {
+          // 	if(this.questionList[index].ques.text){
+          // 		return true
+          // 	}else{
+          // 		return false
+          // 	}
+        } 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, i) => {
+            return this.questionList[index].ans.indexOf(item) == -1;
+          });
+          //判断
+        } else if (item.type == 3) {
+          return this.questionList[index].ques != this.questionList[index].ans;
+        } else {
+          return false;
+        }
+      } else {
+        return false;
+      }
+    },
+    isPart(item, index) {
+      if (this.questionList[index].ques) {
+        if (item.type == 2) {
+          let isWrong = this.questionList[index].ques.some((item, i) => {
+            return this.questionList[index].ans.indexOf(item) == -1;
+          });
+
+          let isRight = this.questionList[index].ans.every((item, i) => {
+            return item == this.questionList[index].ques[i];
+          });
+
+          if (!isRight && !isWrong) {
+            return true;
+          }
+        }
+      } else {
+        return false;
+      }
+    },
+    isOver(item, index) {
+      if (this.questionList[index].ques) {
+        if (item.type == 4) {
+          //案例题
+          let isOver = item.jsonStr.every((jsonItem, indexs) => {
+            if (
+              jsonItem.type == 1 ||
+              jsonItem.type == 2 ||
+              jsonItem.type == 3
+            ) {
+              if (item.ques[indexs]) {
+                return true;
+              } else {
+                return false;
+              }
+            } else if (jsonItem.type == 5) {
+              if (
+                item.ques[indexs] &&
+                (item.ques[indexs].text || item.ques[indexs].imageList.length)
+              ) {
+                console.log("chil");
+                return true;
+              } else {
+                return false;
+              }
+            }
+          });
+
+          if (isOver) {
+            return true;
+          } else {
+            return false;
+          }
+        } else if (item.type == 5) {
+          //简答题
+          //每一项都相等
+          if (item.ques && (item.ques.imageList.length || item.ques.text)) {
+            return true;
+          }
+          //判断
+        } else {
+          return false;
+        }
+      } else {
+        return false;
+      }
+    },
+
+    tabSelect(index, bankindex) {
+      this.$set(this.questionList[bankindex], "current", index);
+    },
+
+    showPhoto(contentStr) {
+      if (contentStr && typeof contentStr == "string") {
+        let reg = /<img[^>]*src[=\'\"\s]+([^\'\"]*)[\'\"]?[^>]*>/gi;
+        let strArr = contentStr.match(reg);
+        strArr.forEach((str, index) => {
+          strArr[index] = str.replace(reg, "$1");
+        });
+
+        // 预览图片
+        uni.previewImage({
+          urls: strArr,
+          longPressActions: {
+            itemList: ["发送给朋友", "保存图片", "收藏"],
+            success: function (data) {
+              console.log(
+                "选中了第" +
+                  (data.tapIndex + 1) +
+                  "个按钮,第" +
+                  (data.index + 1) +
+                  "张图片"
+              );
+            },
+            fail: function (err) {
+              console.log(err.errMsg);
+            },
+          },
+        });
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.questionBank {
+  width: 100%;
+  height: 100vh;
+  display: flex;
+  flex-direction: column;
+}
+.swiper {
+  width: 100%;
+  flex: 1;
+}
+.lisSty {
+  margin-bottom: 16rpx;
+  display: flex;
+  align-items: center;
+
+  .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: #36c75a;
+  }
+
+  &.wrong {
+    color: #fff;
+    background: #ff3b30;
+  }
+
+  &.checked {
+    color: #fff;
+    background: #007aff;
+  }
+}
+
+.submit_checkbox {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 120rpx;
+  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;
+
+  &.disabled {
+    opacity: 0.6;
+  }
+}
+.titles {
+  overflow: hidden;
+  margin-bottom: 24rpx;
+}
+.titBox {
+  padding: 41rpx 25rpx 24rpx 25rpx;
+}
+
+.titBox_title {
+  padding: 21rpx;
+}
+
+.tabs {
+  margin: 10rpx;
+  display: flex;
+  .tab {
+    margin: 0 4rpx;
+    padding: 10rpx 13rpx;
+    text-align: center;
+    color: #007aff;
+    font-size: 28rpx;
+    border-radius: 16rpx;
+    background: #fff;
+
+    &.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;
+
+        &.disabled {
+          opacity: 0.6;
+        }
+      }
+    }
+
+    .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: #ff3b30;
+          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%;
+        }
+      }
+    }
+  }
+}
+.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;
+  }
+}
+.firstLetter {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 30rpx;
+}
+.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;
+  height: 100%;
+  padding-top: 8rpx;
+  padding-bottom: 100rpx;
+  overflow-y: scroll;
+}
+.pad_8 {
+  background-color: #fff;
+  margin: 0rpx 8rpx 8rpx;
+  border-radius: 16rpx;
+
+  &.no-margin {
+    margin-top: -16rpx;
+    border-radius: 0 0 16rpx 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;
+
+  .flex_center {
+    flex: 1;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    flex-direction: column;
+    margin: 0 200rpx;
+    font-size: 24rpx;
+    color: #999999;
+
+    .up-icon {
+      margin-bottom: 18rpx;
+      width: 100%;
+      display: flex;
+      justify-content: center;
+      image {
+        width: 58rpx;
+        height: 21rpx;
+      }
+    }
+  }
+  .collect {
+    visibility: hidden;
+    width: 100rpx;
+
+    &.show {
+      visibility: visible;
+    }
+
+    > view {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+
+      image {
+        width: 32rpx;
+        height: 32rpx;
+        margin-bottom: 6rpx;
+      }
+
+      view {
+        font-size: 24rpx;
+        color: #999999;
+      }
+    }
+  }
+}
+.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: #36c75a;
+  }
+
+  &.isWrong {
+    border: 1rpx solid #eeeeee;
+    color: #fff;
+    background: #ff3b30;
+  }
+
+  &.isPart {
+    border: 1rpx solid #eeeeee;
+    color: #fff;
+    background: #FFC53D;
+  }
+
+  &.isOver {
+    border: 1rpx solid #eeeeee;
+    color: #fff;
+    background: blue;
+  }
+}
+.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;
+
+  .pointer {
+    width: 338rpx;
+    height: 240rpx;
+  }
+
+  .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;
+  }
+}
+
+.dialog-arrow {
+  padding-top: 124rpx;
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.8);
+  z-index: 20000;
+
+  .pointer {
+    margin-left: 87rpx;
+    display: block;
+    width: 95rpx;
+    height: 98rpx;
+  }
+
+  .text {
+    padding-left: 177rpx;
+    font-size: 32rpx;
+    color: #ffffff;
+  }
+
+  .btn {
+    width: 242rpx;
+    height: 82rpx;
+    border: 2rpx solid #ffffff;
+    border-radius: 16rpx;
+    text-align: center;
+    line-height: 82rpx;
+    margin: 500rpx auto 0;
+    color: #fff;
+    font-size: 32rpx;
+  }
+}
+
+.dialog_wrap {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 9999999999;
+
+  .bg {
+    background: rgba(0, 0, 0, 0.3);
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+  }
+
+  .dialog {
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    transform: translate3D(-50%, -50%, 0);
+    width: 640rpx;
+    height: 439rpx;
+    background: #ffffff;
+    border-radius: 24rpx;
+
+    .title {
+      font-size: 30rpx;
+      font-weight: bold;
+      color: #333333;
+      line-height: 48rpx;
+      text-align: center;
+      margin-top: 40rpx;
+    }
+
+    .content {
+      margin: 35rpx 35rpx 0;
+      font-size: 30rpx;
+      color: #666666;
+      line-height: 48rpx;
+    }
+
+    .btns {
+      margin-top: 35rpx;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+
+      .btn {
+        width: 200rpx;
+        height: 80rpx;
+        line-height: 80rpx;
+        text-align: center;
+        background: #f5f5f5;
+        border-radius: 40rpx;
+        font-size: 30rpx;
+        color: rgba(0, 122, 255, 1);
+        background: #f5f5f5;
+        margin: 0 20rpx;
+
+        &.active {
+          color: #f5f5f5;
+          background: rgba(0, 122, 255, 1);
+        }
+      }
+    }
+  }
+}
+.popboxs {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.classTops {
+  flex-shrink: 0;
+  padding: 39rpx 0rpx 4rpx;
+  font-weight: bold;
+  color: #333;
+  font-size: 30rpx;
+}
+.textStys {
+  width: 100%;
+  flex: 1;
+  padding: 36rpx;
+}
+.classFootsty {
+  flex-shrink: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 10rpx 0rpx 40rpx;
+  .btnsty {
+    width: 200rpx;
+    height: 80rpx;
+    border-radius: 40rpx;
+    font-weight: bold;
+    font-size: 30rpx;
+    text-align: center;
+    line-height: 80rpx;
+  }
+  .btns1 {
+    background-color: #f5f5f5;
+    color: #007aff;
+  }
+  .btns2 {
+    margin-left: 40rpx;
+    background-color: #007aff;
+    color: #ffffff;
+  }
+}
+</style>

+ 105 - 0
pages5/examCount/index.vue

@@ -0,0 +1,105 @@
+<template>
+	<view class="safeArea">
+		<nav-bar title="模拟考试-一级建造师-管理"></nav-bar>
+		<view class="examWrap">
+			<view class="title">距离管理开考还有</view>
+			<view class="circle">
+				<image class="img" mode="widthFix" src="../static/time-circle.png"></image>
+				<view class="time">08:56</view>
+			</view>
+			
+			<view class="btn" @click="examBank()" :class="{disabled:state}">开始考试</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapGetters } from 'vuex';
+export default {
+	components: {
+	},
+	data() {
+		return {
+			state:1,
+		};
+	},
+	onLoad(){
+	},
+	onShow() {
+	},
+	methods: {
+		examBank() {
+			uni.navigateTo({
+				url:'../examReport/index'
+			})
+		}
+	},
+	onReachBottom() {},
+	computed: { ...mapGetters(['userInfo']) }
+};
+</script>
+<style >
+	page {
+			background: #EAEEF1;
+		}
+</style>
+<style scoped lang="scss">
+.examWrap{
+	padding: 16rpx;
+	
+	.title {
+		margin-top:70rpx;
+		font-size: 32rpx;
+		color: #666666;
+		line-height: 48rpx;
+		text-align: center;
+	}
+	
+	.circle {
+		margin:60rpx auto 0;
+		width:480rpx;
+		height:480rpx;
+		position:relative;
+		background: #fff;
+		border-radius:50%;
+		
+		.img {
+			width:448rpx;
+			height:448rpx;
+			position:absolute;
+			left:50%;
+			top:50%;
+			transform: translate3D(-50%,-50%,0);
+		}
+		
+		.time {
+			width:100%;
+			height:100%;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			position:relative;
+			z-index: 999;
+			font-size: 80rpx;
+			text-align: center;
+			font-weight: bold;
+			color: #333333;
+		}
+	}
+	
+	.btn {
+		margin:330rpx auto 0;
+		width: 528rpx;
+		height: 80rpx;
+		background: #007AFF;
+		border-radius: 40rpx;
+		text-align: center;
+		line-height: 80rpx;
+		color:#fff;
+		
+		&.disabled {
+			background:#ccc;
+		}
+	}
+}
+</style>

+ 228 - 484
pages5/examList/index.vue

@@ -2,163 +2,125 @@
 	<view>
 		<nav-bar title="模考预约" class="nav"></nav-bar>
 		<view class="tabs">
-			<view class="tab" :class="{ active: index == 1 }" data-index="1" @click="tab(1)">
-				<view>全部</view>
-				<u-icon class="icon" :class="index ==1? 'animals':''" name="arrow-down"></u-icon>
+			<view class="tab" :class="{ active: index == 0 }" data-index="1" @click="tab(0)">
+				<view>未考试</view>
 			</view>
-			<view class="tab" :class="{ active: index == 2 }" data-index="2">
-				<view class="dateRange">
-					<picker mode="date" :value="dateFrom" :start="startDate" :end="endDate" @change="bindDateFromChange">
-						<view class="uni-input">{{dateFrom}}</view>
-					</picker>
-					- 
-					<picker mode="date" :value="dateTo" :start="startDate" :end="endDate" @change="bindDateToChange">
-						<view class="uni-input">{{dateTo}}</view>
-					</picker></view>
-				<u-icon class="icon" name="calendar"></u-icon>
+			<view class="tab" :class="{ active: index == 1 }" data-index="2" @click="tab(1)">
+				<view>已结束</view>
 			</view>
-		</view>
-		<view class="scroll">
-			<scroll-view scroll-x="true" class="scroll-x" >
-				<view class="content">
-					<view class="scroll-tag active">AAAAAAAAAAAAAA</view>
-					<view class="scroll-tag">bbbbbbbbbbbb</view>
-					<view class="scroll-tag">ccccccccccc</view>
-					<view class="scroll-tag">AAAAAAAAAAAAAA</view>
-					<view class="scroll-tag">bbbbbbbbbbbb</view>
-					<view class="scroll-tag">ccccccccccc</view>
-					<view class="scroll-tag">AAAAAAAAAAAAAA</view>
-					<view class="scroll-tag">bbbbbbbbbbbb</view>
-					<view class="scroll-tag">ccccccccccc</view>
-				</view>
-				
-			</scroll-view>
-		</view>
-		
-
-		<view class="record">
-			<view class="item" v-for="(item,index) in 5" :key="index">
-				<view class="item__header">建设工程法规及相关知识建设工程</view>
-				<view class="item__body">
-					<view class="title">
-						<image class="img" mode="widthFix" src="/pages5/static/time.png"></image>
-						<text>考试时间</text>
-					</view>
-					<view class="desc">2022年4月15日(周五) 9:00-11:00 </view>
-					<view class="btn" @click="appoint(item)" :class="{active: index % 2 == 0}">预约考试</view>
-				</view>
+			<view class="sort" @click="showSort = true">
+				筛选
 			</view>
 		</view>
 		
 		
-		<view class="notice" @click="noticeModal=true">
-			<u-icon class="icon" color="#fff" name="info-circle"></u-icon>
-			<view class="text">模考说明</view>
-		</view>
-
-		<view class="modal" :style="{top:modalTop+'px'}" v-if="index == 1">
-			<view class="content">
-				<scroll-view scroll-y="true" style="height:100%">
-					<view class="top" :class="activeIndex === 0 ? 'activesty' : ''" @click="testClick(3)">全部</view>
-					<view class="list">
-						<view class="item" :class="activeIndex == listItem.goodsId ? 'activesty' : ''" v-for="(listItem,listIndex) in list" :key="listIndex" @click="testClick(listItem)">
-							{{ listItem.goodsName }}
+		<view class="record">
+			<template v-if="index == 0">
+				<view class="examList" v-for="(item,index) in 5" :key="index">
+					<view class="main">
+						<view class="top" @click="showDetails(item)">
+							<view class="subject">2022年考前一建模拟考试</view>
 						</view>
-					</view>
-				</scroll-view>
-				
-			</view>
-			<view class="modal_wrap" @click="index = 0"></view>
-		</view>
-		
-		<view class="notice_modal" :style="{top:modalTop+'px'}" v-if="index == 2">
-			<view class="content">
-				<scroll-view scroll-y="true" style="height:100%">
-					<view class="top" :class="typeIndex === 0 ? 'activesty' : ''" @click="paperClick(3)">全部试卷类型</view>
-					<view class="list">
-						<view class="item" :class="typeIndex == listItem.paperId ? 'activesty' : ''" v-for="(listItem,listIndex) in list1" :key="listIndex" @click="paperClick(listItem)">{{ listItem.paperName }}</view>
-					</view>
-				</scroll-view>
-			</view>
-			<view class="modal_wrap" @click="index = 0"></view>
-		</view>
-		
-		<u-popup class="notice__modal" v-model="noticeModal" mode="center" border-radius="24" :mask-close-able="false">
-			<view class="notice__content">
-				<view class="body">
-					<scroll-view scroll-y="true" style="height:700rpx">
-						<view class="content">
-							<view class="bold text">模拟考试说明</view>
-							
-							<view>在您注册过程中,您需要完成我们的注册流程并通过点击“同意并继续”的形式在线签署以下协议及政策,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。
+						<view class="item">
+							<view class="left">项目</view>
+							<view class="right">一级建造师</view>
+						</view>
+						<view class="item">
+							<view class="left">专业</view>
+							<view class="right">市政专业</view>
+						</view>
+						<view class="item">
+							<view class="left">科目</view>
+							<view class="right">建设工程经济</view>
+						</view>
+						<view class="item">
+							<view class="left">考试时间</view>
+							<view class="right">
+								2022/4/15  9:00-10:00
 							</view>
-							
 						</view>
-					</scroll-view>
-				</view>
-				<view class="footer">
-					<view class="btn close" @click="noticeModal = false">我知道了</view>
+						<view class="btn-wrap">
+							<view class="btn" :class="{disabled:index%2 == 0}" @click="goExamCount()">去考试</view>
+						</view>
+					</view>
 				</view>
-			</view>
-		</u-popup>
-		
-		<view class="appoint__modal" v-if="appointModal" mode="center" border-radius="24" :mask-close-able="false">
-			<view class="appoint__content">
-				<view class="body">
-						<image class="img" src="/pages5/static/img-header.png" mode="widthFix"></image>
-						<view class="content">
-							<view class="bold center">模拟考试说明</view>
-							
-							<view>
-								您预约的模拟考试,安排如下: 
-							</view>
-							<view>
-								<text class="bold text">模考场次: </text>
-								<text class="text">2022年考前一建模拟考试</text>
-							</view>
-							<view>
-								<text class="bold text">项目:   </text>
-								<text class="text">一级建造师</text>
-							</view>
-							<view>
-								<text class="bold text">专业:</text>
-								<text class="text">市政专业</text>
-							</view>
-							<view>
-								<text class="bold text">科目:</text>
-								<text class="text">建设工程经济</text>
+			</template>
+			
+			<template v-if="index == 1">
+				<view class="examList" v-for="(item,index) in 5" :key="index">
+					<view class="main">
+						<view class="top" @click="showDetails(item)">
+							<view class="subject">2022年考前一建模拟考试</view>
+						</view>
+						<view class="item">
+							<view class="left">项目</view>
+							<view class="right">一级建造师</view>
+						</view>
+						<view class="item">
+							<view class="left">专业</view>
+							<view class="right">市政专业</view>
+						</view>
+						<view class="item">
+							<view class="left">科目</view>
+							<view class="right">建设工程经济</view>
+						</view>
+						<view class="item">
+							<view class="left">考试时间</view>
+							<view class="right">
+								2022/4/15  9:00-10:00
 							</view>
-							<view>
-								<text class="bold text">考试时间:</text>
-								<text class="text">2022年4月15日(周五)  9:00-10:00</text>
+						</view>
+						
+						<view class="btn-wrap">
+							<view class="text">当前报告含主观题需人工阅卷,阅卷完成后显示完整报告</view>
+							<view class="btn border">重新预约</view>
+							<view class="btn btn--half diabled">去考试</view>
+							<view class="btn btn--half border">查看报告</view>
+							<view class="text-half">
+								<view>模考讲解直播时间</view>
+								<view>2022年4月28日 20:00-21:00</view>
+								
 							</view>
-							<view>请准时参加考试哦~</view>
-							
+							<view class="btn btn--half border">去查看</view>
 						</view>
+					</view>
 				</view>
-				<view class="footer">
-					<view class="btn close" @click="appointModal = false;openAppoint=true">我知道了</view>
-				</view>
-			</view>
+			</template>
+			
 		</view>
 		
-		<u-popup class="open__modal" v-model="openAppoint" mode="center" border-radius="24" :mask-close-able="false">
-			<view class="open__content">
-				<view class="body">
-						<view class="content">
-							<view class="bold center">开考提醒</view>
-							
-							<view class="center">
-								开考前10分钟提醒入场,不错过实战机会
-							</view>
-							
+		<view class="modal" :style="{top:modalTop+'px'}" v-if="showSort">
+			<view class="content">
+				<view class="item">
+					<view class="item__title">考试时间</view>
+					<view class="item__box">
+						<view class="text">
+							<picker mode="date" :value="dateFrom" :start="startDate" :end="endDate" @change="bindDateFromChange">
+								<view class="uni-input">{{dateFrom}}</view>
+							</picker>
+							- 
+							<picker mode="date" :value="dateTo" :start="startDate" :end="endDate" @change="bindDateToChange">
+								<view class="uni-input">{{dateTo}}</view>
+							</picker>
 						</view>
+						<u-icon class="icon" name="calendar"></u-icon>
+					</view>
 				</view>
-				<view class="footer">
-					<view class="btn close" @click="openAppoint = false">我知道了</view>
+				
+				<view class="item">
+					<view class="item__title">考试标题</view>
+					<view class="item__box">
+							<picker class="text" mode="selector" :range="rangeArr"  :value="titleName" @change="bindTitleChange">
+								<view style="width:650rpx">{{titleName}}</view>
+							</picker>
+						<u-icon class="icon" name="arrow-down"></u-icon>
+					</view>
 				</view>
+				
 			</view>
-		</u-popup>
+			<view class="modal_wrap" @click="showSort = false"></view>
+		</view>
+		
 	</view>
 </template>
 
@@ -166,9 +128,7 @@
 export default {
 	data() {
 		return {
-			openAppoint:false,
-			appointModal:false,
-			noticeModal:false,
+			showSort:false,
 			index: 0,
 			list: [],
 			list1: [],
@@ -187,12 +147,17 @@ export default {
 			itemIndex:'',
 			modalTop:0,
 			endDate:'',
+			titleName:3,
+			rangeArr: [1,2,3,4,5]
 		};
 	},
 	onLoad(option) {
+		this.index = option.state || 0
+		
 		this.dateFrom = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
 		this.dateTo = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
 		this.endDate = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
+			
 		
 		uni.getSystemInfo({
 			success:(e) => {
@@ -231,7 +196,7 @@ export default {
 			this.addRecord();
 		} else {
 			if(this.itemIndex !== '') {
-				this.refreshByIndex();
+				// this.refreshByIndex();
 			}
 		}
 		
@@ -247,6 +212,16 @@ export default {
 			});
 		},
 		
+		goExamCount() {
+			uni.navigateTo({
+				url:'../examCount/index'
+			})
+		},
+		
+		sort() {
+			
+		},
+		
 		appoint(item) {
 			this.appointModal = true;
 		},
@@ -265,6 +240,10 @@ export default {
 		
 		bindDateToChange(e) {
 			this.dateTo = e.detail.value
+		},
+		
+		bindTitleChange(e) {
+			this.titleName = this.rangeArr[e.detail.value]
 		}
 	}
 };
@@ -285,160 +264,131 @@ page {
 	width: 100%;
 	display: flex;
 	z-index: 10;
+	background: #ffffff;
+	padding:18rpx 0;
+	border-bottom:1px solid #eee;
 	.tab {
 		padding:0 18rpx;
 		flex: 1;
-		display: flex;
-		justify-content: space-between;
-		height: 80rpx;
-		line-height: 80rpx;
 		background: #ffffff;
-		font-size: 24rpx;
+		font-size: 32rpx;
 		color: #999999;
+		text-align: center;
+		position:relative;
 		
-		&:nth-of-type(1) {
+		&:nth-of-type(2) {
 			border-right:1px solid #EEEEEE;
 		}
-		
-		.dateRange {
-			display: flex;
-			justify-content: space-between;
-		}
 
 		&.active {
 			color: #333333;
-			.icon{
-				transform: rotate(180deg);
+			
+			&::before{
+				content:'';
+				position:absolute;
+				width: 24px;
+				height: 4px;
+				background: #007AFF;
+				border-radius: 2px;
+				left:50%;
+				margin-left:-12px;
+				bottom:-18rpx;
 			}
 		}
 	}
-}
-
-.scroll {
-	width:100%;
-	margin-top:80rpx;
-	.scroll-x {
-		
-		.content {
-				display: flex;
-				padding:16rpx;
-				
-				.scroll-tag {
-					padding:11rpx 17rpx;
-					background: #fff;
-					color:#666666;
-					margin-right:16rpx;
-					border-radius:16rpx;;
-					
-					&.active {
-						background: #007AFF;
-						color:#fff;
-					}
-				}
-		}
-		
+	
+	.sort {
+		width:160rpx;
+		text-align: center;
+		font-size: 32rpx;
+		font-weight: 500;
+		color: #999999;
 	}
 }
 
-
 .record {
+	margin-top:80rpx;
 	padding: 16rpx 16rpx;
-	display: flex;
-	flex-wrap: wrap;
-	.item {
-		margin-bottom: 16rpx;
-		width:351rpx;
-		background: #ffffff;
-		border-radius: 16rpx;
-		position: relative;
-		
-		&:nth-of-type(2n) {
-			margin-left:16rpx;
-			
+	.examList {
+		.main {
+			background: #ffffff;
+			border-radius: 16rpx;
+			margin: 20rpx 0;
 		}
-
-		&__header {
-			padding:24rpx 16rpx;
-			background: #F2F6FF;
+		.top {
+			height: 80rpx;
+			text-align: center;
+			line-height: 80rpx;
 			font-size: 30rpx;
-			color:#007AFF;
-			
-			&::before {
-				content:'';
-				display: inline-block;
-				width: 4rpx;
-				height: 32rpx;
-				background: #007AFF;
-				margin-right:10rpx;
-				vertical-align: middle;
+			color:#333333;
+			font-weight: bold;
+			border-bottom: 1px solid #eeeeee;
+		}
+		.item {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-left: 31rpx;
+			height: 80rpx;
+			padding-right: 24rpx;
+			border-bottom: 1px solid #eeeeee;
+			font-size: 24rpx;
+			color: #666666;
+			.right {
+				font-size: 28rpx;
 			}
 		}
 		
-		&__body {
-			padding:16rpx;
+		.btn-wrap {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			padding:24rpx 16rpx ;
+			flex-wrap: wrap;
+			border-bottom:1px solid #EEEEEE;
 			
-			.title {
+			.text {
+				width:100%;
+				color:#F5222D;
 				font-size: 24rpx;
-				color: #666666;
-				line-height: 48rpx;
-				
-				.img {
-					vertical-align: middle;
-					width:32rpx;
-				}
+				text-align: center;
 			}
 			
-			.desc {
-				margin-top:10rpx;
-				font-size: 28rpx;
-				font-weight: bold;
-				color: #666666;
-				line-height: 36rpx;
+			.text-half {
+				color:#666666;
+				font-size: 24rpx;
+				width:320rpx;
+				margin:8rpx;
 			}
 			
 			.btn {
-				margin-top:30rpx;
-				background: #FFFFFF;
-				border-radius: 16rpx;
+				margin:8rpx;
+				width: 528rpx;
 				height: 64rpx;
-				line-height: 62rpx;
+				background: #007AFF;
+				border-radius: 16rpx;
 				text-align: center;
-				font-size: 28rpx;
-					border: 1px solid #D9D9D9;
-					color:#D9D9D9;
+				line-height: 64rpx;
+				color:#fff;
+				
+				&--half {
+					width:320rpx;
+				}
 				
-				&.active {
-					
-					border: 1px solid #007AFF;
+				&.disabled {
+					background:#D9D9D9;
+				}
+				
+				&.border {
+					background:#fff;
 					color:#007AFF;
+					border:1px solid #007AFF;
 				}
 			}
 		}
 	}
 }
 
-.notice {
-	position:fixed;
-	right:0;
-	top:50%;
-	width: 48rpx;
-	height: 200rpx;
-	background: #52C41A;
-	box-shadow: 0px 3rpx 16rpx 0rpx rgba(44, 121, 7, 0.5);
-	border-radius: 24rpx;
-	display: flex;
-	flex-direction: column;
-	align-items: center;
-	justify-content: center;
-	padding:10rpx 0;
-	
-	.text {
-		flex:1;
-		color:#fff;
-		text-align: center;
-	}
-}
-
 
 .modal {
 	bottom:0;
@@ -448,255 +398,49 @@ page {
 	width: 100%;
 
 	.content {
-		height:80%;
 		overflow: hidden;
 		position: relative;
 		z-index: 10;
 		background: #fff;
-		padding: 8rpx 12rpx 20rpx;
-		display: flex;
-		flex-wrap: wrap;
-
-		.top {
-			margin: 0 auto;
-			width: 726rpx;
-			height: 80rpx;
-			background: #f5f5f5;
-			color: #666666;
-			border-radius: 16rpx;
-			text-align: center;
-			line-height: 80rpx;
-			font-size: 32rpx;
-		}
-
-		.list {
-			width:100%;
-			margin-top: 16rpx;
-			display: flex;
-			flex-wrap: wrap;
-			justify-content: space-between;
-
-			.item {
-				padding: 25rpx 20rpx;
-				width: 49%;
-				background: #f5f5f5;
-				border-radius: 16rpx;
-				font-size: 32rpx;
-				color: #666666;
-				margin: 8rpx 0;
-			}
-		}
-	}
-
-	.modal_wrap {
-		position: absolute;
-		left: 0;
-		width: 100%;
-		top: 0;
-		height: 100%;
-		background: rgba(0, 0, 0, 0.3);
-	}
-}
-
-
-.notice__modal {
-	.notice__content {
-		width: 640rpx;
-		height: 818rpx;
-		background: #FFFFFF;
-		display: flex;
-		flex-direction: column;
+		padding: 20rpx 12rpx 16rpx;
 		
-		.body {
-			flex:1;
-			
-			.content {
-				padding:30rpx 40rpx 28rpx;
-				line-height: 40rpx;
+		.item {
+			&__title {
+				padding:16rpx 0;
 				font-size: 28rpx;
-				color:#666;
-				
-				.bold {
-					color:#333;
-					font-size: 32rpx;
-					font-weight: bold;
-				}
-				
-				.center {
-					text-align: center;
-				}
+				color: #999999;
 			}
-		}
-		
-		.footer {
-			height:140rpx;
-			border-top:1px solid #EEEEEE;
-			display: flex;
-			align-items: center;
-			justify-content: center;
 			
-			.btn {
-				margin:0 12rpx;
-				width: 200rpx;
+			&__box {
+				padding:0 16rpx;
+				display: flex;
+				width: 718rpx;
 				height: 80rpx;
-				color:#007AFF;
-				font-size: 30rpx;
-				text-align: center;
-				line-height: 80rpx;
-				background: #F5F5F5;
-				border-radius: 40rpx 40rpx 40rpx 40rpx;
+				background: #FFFFFF;
+				border: 1px solid #EEEEEE;
+				border-radius: 16rpx;
+				align-items: center;
 				
 				
-				&.close {
-					color:#fff;
-					width: 560rpx;
-					height: 80rpx;
-					background: #007AFF;
-					border-radius: 40rpx 40rpx 40rpx 40rpx;
+				.text {
+					flex:1;
+					display: flex;
+					align-items: center;
 				}
 			}
 		}
 	}
-}
 
-.open__modal {
-	.open__content {
-		width: 640rpx;
-		background: #FFFFFF;
-		
-		.body {
-			
-			.content {
-				padding:30rpx 40rpx 28rpx;
-				line-height: 40rpx;
-				font-size: 28rpx;
-				color:#666;
-				
-				.bold {
-					color:#333;
-					font-size: 32rpx;
-					font-weight: bold;
-				}
-				
-				.center {
-					text-align: center;
-				}
-			}
-		}
-		
-		.footer {
-			height:140rpx;
-			border-top:1px solid #EEEEEE;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			
-			.btn {
-				margin:0 12rpx;
-				width: 200rpx;
-				height: 80rpx;
-				color:#007AFF;
-				font-size: 30rpx;
-				text-align: center;
-				line-height: 80rpx;
-				background: #F5F5F5;
-				border-radius: 40rpx 40rpx 40rpx 40rpx;
-				
-				
-				&.close {
-					color:#fff;
-					width: 560rpx;
-					height: 80rpx;
-					background: #007AFF;
-					border-radius: 40rpx 40rpx 40rpx 40rpx;
-				}
-			}
-		}
+	.modal_wrap {
+		position: absolute;
+		left: 0;
+		width: 100%;
+		top: 0;
+		height: 100%;
+		background: rgba(0, 0, 0, 0.3);
 	}
 }
 
-.appoint__modal {
-	position:fixed;
-	left:0;
-	top:0;
-	width:100%;
-	height:100%;
-	background:rgba(0,0,0,0.3);
-	.img {
-		width:280rpx;
-		position:absolute;
-		left:50%;
-		margin-left:-140rpx;
-		top:-70rpx;
-	}
-	.appoint__content {
-		border-radius:20rpx;
-		position:absolute;
-		left:50%;
-		top:50%;
-		transform: translate3D(-50%,-50%,0);
-		width: 640rpx;
-		height: 867rpx;
-		background: #FFFFFF;
-		
-		.body {
-			position: relative;
-			
-			
-			.content {
-				padding:160rpx 40rpx 28rpx;
-				line-height: 60rpx;
-				font-size: 28rpx;
-				color:#666;
-				
-				.bold {
-					color:#333;
-					font-size: 32rpx;
-					font-weight: bold;
-				}
-				
-				.center {
-					text-align: center;
-				}
-				
-				
-				.text {
-					color:#666;
-					font-size: 28rpx;
-				}
-			}
-		}
-		
-		.footer {
-			height:140rpx;
-			border-top:1px solid #EEEEEE;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			
-			.btn {
-				margin:0 12rpx;
-				width: 200rpx;
-				height: 80rpx;
-				color:#007AFF;
-				font-size: 30rpx;
-				text-align: center;
-				line-height: 80rpx;
-				background: #F5F5F5;
-				border-radius: 40rpx 40rpx 40rpx 40rpx;
-				
-				
-				&.close {
-					color:#fff;
-					width: 560rpx;
-					height: 80rpx;
-					background: #007AFF;
-					border-radius: 40rpx 40rpx 40rpx 40rpx;
-				}
-			}
-		}
-	}
-}
 .activesty {
 	background: #007aff !important;
 	color: #fff !important;

+ 648 - 0
pages5/examReport/index.vue

@@ -0,0 +1,648 @@
+<template>
+	<view>
+		<nav-bar title="试卷报告"></nav-bar>
+		<view class="top">
+			<view class="title">{{ reportdata.examName }}</view>
+			<view class="desc">交卷时间:{{ $method.timestampToTime(reportdata.updateTime, false) }}</view>
+
+			<view class="box">
+				<view class="left">
+					<view>
+						<!-- 考试 -->
+							{{
+								((reportdata.rightQuestionNum /
+									reportdata.totalQuestionNum || 0).toFixed(0) *
+									100)
+									
+							}}%
+					<!-- {{ (((reportdata.rightQuestionNum / (reportdata.rightQuestionNum + wrongRecordWrongNum)) || 0) * 100).toFixed(0)}}% -->
+					
+					</view>
+					<view>正确率</view>
+					<view>不含简答/案例题</view>
+				</view>
+				<view class="right">
+					<view class="flex up">
+						<!-- <u-icon name="checkmark" color="#16D48B" size="48" style="margin-right: 14rpx;"></u-icon> -->
+						<image class="right_num"  src="/static/right_num.png" mode="widthFix"></image>
+						<view class="text">正确题数</view>
+						<text class="green">{{ reportdata.rightQuestionNum }}</text>
+					</view>
+					<view class="flex up">
+						<!-- <u-icon name="checkmark" color="#16D48B" size="48" style="margin-right: 14rpx;"></u-icon> -->
+						<image class="out_num"  src="/static/out_num.png" mode="widthFix"></image>
+						<view class="text">少选题数</view>
+						<text class="yellow">{{ reportdata.lessQuestionNum }}</text>
+					</view>
+					<view class="flex down">
+						<!-- <u-icon name="close" color="#FF3B30" size="38" style="margin-right: 26rpx;"></u-icon> -->
+						<image class="wrong_num" src="/static/wrong_num.png" mode="widthFix"></image>
+						<view class="text">错误题数</view>
+						<text class="red">{{ wrongRecordWrongNum }}</text>
+					</view>
+				</view>
+			</view>
+			<view class="dis_fst">
+				<navigator
+					 v-if="wrongRecordWrongNum != 0"
+					:url="
+						'/pages2/bank/questionBankWrongExplain?recordId=' + reportdata.recordId+'&id='+examData.examId
+					"
+				>
+					<view class="btnACs">错题解析</view>
+				</navigator>
+				<navigator
+					:url="
+						'/pages2/bank/questionBankAllExplain?id=' +
+							reportdata.examId +
+							'&goodsid=' +
+							reportdata.goodsId +
+							'&moduleId=' +
+							reportdata.moduleExamId +
+							'&chapterId=' +
+							reportdata.chapterExamId +
+							'&recordId='+ reportdata.recordId
+					"
+				>
+					<view class="btnACs">全部解析</view>
+				</navigator>
+				<view class="btnACs">去做题</view>
+			</view>
+		</view>
+		<view class="bottom">
+			<view class="circle-wrap">
+				<view class="circle-list">
+					<view class="item" v-show="reportdata.totalScore">
+						<view class="title">
+							试卷得分
+							<text>(不含简答和案例题)</text>
+						</view>
+						<canvas class="canvas" canvas-id="Canvas1"></canvas>
+					</view>
+					<view class="item" v-show="reportdata.examTime">
+						<view class="title">答题时长</view>
+						<canvas canvas-id="Canvas2"></canvas>
+					</view>
+					
+					<view class="item" v-show="reportdata.score != -1">
+						<view class="title">试卷得分
+							<text>(含简答和案例题)</text>
+						</view>
+						<canvas canvas-id="Canvas3"></canvas>
+					</view>
+				</view>
+			</view>
+		</view>
+		
+		<view class="notice">
+			<image class="img" mode="widthFix" src="../static/notice1.png"></image>
+			<view class="text">
+				模考讲解直播将在<text class="blue">2022年4月20日20:00</text>开始 开启模考讲解直播提醒,不错过每一个考点
+			</view>
+			<view class="btn" @click="noticeModal = true">开启模考讲解直播提醒</view>
+		</view>
+		
+		<u-popup class="notice__modal" v-model="noticeModal" mode="center" border-radius="24" :mask-close-able="false">
+			<view class="notice__content">
+				<view class="body">
+						<image class="img" src="/pages5/static/notice4.png" mode="widthFix"></image>
+						<view class="content">
+							<view class="bold center">开启模考讲解直播提醒</view>
+							
+							<view class="center text">
+								此科目模考分析将在<text class="blue">4月20日 20:00</text>进行直播讲解,开启直播提醒,不错过名师讲解
+							</view>
+							
+						</view>
+				</view>
+				<view class="footer">
+					<view class="btn close" @click="noticeModal = false">暂不开启</view>
+					<view class="btn" @click="noticeModal = false">开启提醒</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+import { mapGetters } from 'vuex';
+export default {
+	data() {
+		return {
+			id: '',
+			noticeModal:false,
+			recordId:'',
+			reportdata: {},
+			examData:{},
+			examId:'',
+			moduleId:'',
+			goodsId:'',
+			chapterId:'',
+			context1: null,
+			context2: null,
+			nextExamId:'',
+			wrongRecordWrongNum:'',
+			orderGoodsId:'',
+		};
+	},
+	onUnload() {},
+	computed: { ...mapGetters(['userInfo']) },
+	async onShow() {
+		
+	},
+		
+		
+	async onLoad(option) {
+		console.log(option)
+		this.orderGoodsId = option.orderGoodsId
+		this.recordId = option.id;
+		this.examId = option.examId;
+		this.moduleId = option.moduleId || 0;
+		this.chapterId = option.chapterId || 0;
+		this.goodsId = option.goodsId || '';
+		
+		this.examWrongRecordWrongNum();
+		this.bankExamNextExam()
+		await this.bankExam();
+		await this.examReport();
+		
+		uni.getSystemInfo({
+			success: res => {
+				var winW = res.screenWidth;
+				var winH = res.screenHeight;
+				uni.createSelectorQuery()
+					.in(this)
+					.select('.canvas')
+					.boundingClientRect()
+					.exec(async newRes => {
+						var width = newRes[0].width;
+						var height = newRes[0].height;
+						var caculateX = winW / 750;
+						var caculateY = winH / 1334;
+						console.log(caculateX);
+						
+						if(this.reportdata.totalScore) {
+							var context1 = uni.createCanvasContext('Canvas1');
+							this.context1 = context1;
+							context1.setStrokeStyle('#EEEEEE');
+							context1.setLineWidth(caculateX * 20);
+							context1.arc(caculateX * 90, caculateX * 90, caculateX * 80, 0, 2 * Math.PI, true);
+							context1.stroke();
+							context1.beginPath();
+							context1.setStrokeStyle('#32D74B');
+							context1.setFillStyle('#32D74B');
+							context1.setTextAlign('center');
+							context1.setTextBaseline('middle');
+							context1.setLineCap('round');
+							context1.setFontSize(caculateX * 64);
+							context1.fillText(this.reportdata.performance, caculateX * 90, caculateX * 90, caculateX * 180);
+							context1.setFillStyle('#999999');
+							context1.setFontSize(caculateX * 20);
+							context1.fillText(`满分${this.reportdata.totalScore}`, caculateX * 90, caculateX * 130, caculateX * 180);
+							context1.arc(caculateX * 90, caculateX * 90, caculateX * 80, -Math.PI/2, -Math.PI/2 + (this.reportdata.performance / this.reportdata.totalScore) * 2 * Math.PI, false);
+							context1.stroke();
+							context1.draw();
+						}
+						
+						if(this.reportdata.examTime) {
+							var context2 = uni.createCanvasContext('Canvas2');
+							this.context2 = context2;
+							context2.setStrokeStyle('#EEEEEE');
+							context2.setLineWidth(caculateX * 20);
+							context2.arc(caculateX * 90, caculateX * 90, caculateX * 80, 0, 2 * Math.PI, true);
+							context2.stroke();
+							context2.beginPath();
+							context2.setStrokeStyle('#007AFF');
+							context2.setFillStyle('#007AFF');
+							context2.setTextAlign('center');
+							context2.setTextBaseline('middle');
+							context2.setLineCap('round');
+							context2.setFontSize(caculateX * 64);
+							context2.fillText(`${this.reportdata.doTime}'`, caculateX * 90, caculateX * 90, caculateX * 180);
+							context2.setFillStyle('#999999');
+							context2.setFontSize(caculateX * 20);
+							context2.fillText(`限时${this.reportdata.examTime}'`, caculateX * 90, caculateX * 130, caculateX * 180);
+							context2.arc(caculateX * 90, caculateX * 90, caculateX * 80, -Math.PI/2, -Math.PI/2 + (this.reportdata.doTime / this.reportdata.examTime) * 2 * Math.PI, false);
+							context2.stroke();
+							context2.draw();
+						}
+						
+						if(this.reportdata.score != -1) {
+							var context3 = uni.createCanvasContext('Canvas3');
+							this.context3 = context3;
+							context3.setStrokeStyle('#EEEEEE');
+							context3.setLineWidth(caculateX * 20);
+							context3.arc(caculateX * 90, caculateX * 90, caculateX * 80, 0, 2 * Math.PI, true);
+							context3.stroke();
+							context3.beginPath();
+							context3.setStrokeStyle('#32D74B');
+							context3.setFillStyle('#32D74B');
+							context3.setTextAlign('center');
+							context3.setTextBaseline('middle');
+							context3.setLineCap('round');
+							context3.setFontSize(caculateX * 64);
+							context3.fillText((this.reportdata.performance + this.reportdata.score), caculateX * 90, caculateX * 90, caculateX * 180);
+							context3.setFillStyle('#999999');
+							context3.setFontSize(caculateX * 20);
+							context3.fillText(`满分${this.reportdata.totalScore}`, caculateX * 90, caculateX * 130, caculateX * 180);
+							context3.arc(caculateX * 90, caculateX * 90, caculateX * 80, -Math.PI/2, -Math.PI/2 + ((this.reportdata.performance + this.reportdata.score) / this.reportdata.totalScore) * 2 * Math.PI, false);
+							context3.stroke();
+							context3.draw();
+						}
+						
+						
+					});
+			}
+		});
+		
+	},
+	methods: {
+		bankExamNextExam() {
+			this.$api.bankExamNextExam({
+				chapterExamId:this.chapterId,
+				examId:this.examId,
+				goodsId:this.goodsId,
+				orderGoodsId:this.orderGoodsId,
+				moduleExamId:this.moduleId
+			}).then(res => {
+				if(res.data.code == 500) {
+					this.nextExamId = '';
+				} else if(res.data.code == 200) {
+					this.nextExamId = res.data.data.examId;
+				}
+			})
+		},
+		backBank() {
+			uni.navigateTo({
+				url: '/pages2/bank/questionBank?orderGoodsId='+orderGoodsId+'&id=' +this.nextExamId + '&goodsid=' + this.goodsId + '&moduleId=' + this.moduleId + '&chapterId=' + this.chapterId + ''
+			});
+			
+			// uni.navigateBack({
+			// 	delta:1
+			// })
+			// uni.redirectTo({
+			// 	url: '/pages2/bank/my_question'
+			// });
+		},
+		bankExam(){
+			return new Promise(resolve =>{
+				this.$api.bankExam(this.examId).then(res => {
+					this.examData = res.data.data;
+					resolve()
+				})
+			})
+		},
+		/**
+		 * 去做题
+		 */
+		async doRepeat(id, goodsId, moduleId = 0, chapterId = 0) {
+			// await this.getDetail(goodsId);
+			let count = await this.examRecordCount(id, goodsId);
+			let answerNum = await this.getExamDetail(id);
+			//超过答题次数
+			if (answerNum > 0 && count >= answerNum) {
+				this.$u.toast('该试卷只能答题' + answerNum + '次!');
+				return;
+			}
+
+			var pages = getCurrentPages();
+			var prepage = pages[pages.length - 2]; //上一个页面
+			prepage.$vm.isRepeat = true;
+			uni.redirectTo({
+				url: '/pages2/bank/questionBank?orderGoodsId='+this.orderGoodsId+'&id=' + id + '&goodsid=' + goodsId + '&moduleId=' + moduleId + '&chapterId=' + chapterId + ''
+			});
+		},
+		/**
+		 * @param {Object} exam_id
+		 * 获取试卷可以做的次数
+		 */
+		getExamDetail(exam_id) {
+			return new Promise(resolve => {
+				this.$api.getExamDetail(exam_id).then(res => {
+					resolve(res.data.data.answerNum);
+				});
+			});
+		},
+		examWrongRecordWrongNum() {
+			return new Promise(resolve => {
+				this.$api.examWrongRecordWrongNum(this.recordId).then(res => {
+					this.wrongRecordWrongNum = res.data.data || 0;
+					resolve();
+				});
+			});
+		},
+		/**
+		 * 查询试卷历史做题次数
+		 */
+		examRecordCount(examId, goodsId) {
+			return new Promise(resolve => {
+				this.$api
+					.examRecordCount({
+						examId: examId,
+						orderGoodsId: this.orderGoodsId,
+					})
+					.then(res => {
+						resolve(res.data.data);
+					});
+			});
+		},
+		getDetail(id) {
+			return new Promise(resolve => {
+				this.$api.goodsDetail(id).then(res => {
+					this.goodsData = res.data.data;
+					resolve();
+				});
+			});
+		},
+		examReport() {
+			return new Promise(resolve => {
+				this.$api.examReport(this.recordId).then(res => {
+					this.reportdata = res.data.data;
+					resolve()
+				});
+				
+			})
+		}
+	}
+};
+</script>
+<style>
+page {
+	background-color: #eaeef1;
+}
+</style>
+<style lang="scss" scope>
+.disNone {
+	display: none;
+}
+
+.dis_fst {
+	margin-top: 40rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-around;
+}
+
+.btnACs {
+	height: 48rpx;
+	width: 160rpx;
+	text-align: center;
+	line-height: 48rpx;
+	border: 1rpx solid #007aff;
+	border-radius: 16rpx;
+	color: #007aff;
+	font-size: 24rpx;
+}
+.top {
+	margin: 16rpx 16rpx 0;
+	border-radius: 16rpx;
+	padding: 40rpx 24rpx 16rpx;
+	background: #fff;
+	.title {
+		font-size: 32rpx;
+		font-weight: bold;
+		color: #333333;
+	}
+
+	.desc {
+		margin-top: 20rpx;
+		font-size: 24rpx;
+		color: #999999;
+	}
+
+	.box {
+		margin-top: 30rpx;
+		display: flex;
+
+		.left {
+			width: 250rpx;
+			height: 272rpx;
+			background: #f5f5f5;
+			border-radius: 16rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			flex-direction: column;
+			margin-right: 16rpx;
+
+			view {
+				text-align: center;
+
+				&:nth-of-type(1) {
+					font-size: 60rpx;
+					font-weight: bold;
+					color: #007aff;
+				}
+				&:nth-of-type(2) {
+					font-size: 32rpx;
+					font-weight: bold;
+					color: #333333;
+				}
+				&:nth-of-type(3) {
+					font-size: 24rpx;
+					color: #999999;
+				}
+			}
+		}
+
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+
+			.flex {
+				background: #f5f5f5;
+				display: flex;
+				height: 80rpx;
+				align-items: center;
+				padding: 0 40rpx;
+				border-radius: 16rpx;
+
+				image {
+					margin-right: 28rpx;
+					
+					&.right_num {
+						width:26rpx;
+					}
+					
+					&.out_num {
+						width:38rpx;
+						
+					}
+					
+					&.wrong_num {
+						width:30rpx;
+						
+					}
+					
+				}
+
+				.text {
+					flex: 1;
+					font-size: 30rpx;
+					color: #666666;
+				}
+
+				text {
+					font-size: 48rpx;
+					color: #e12626;
+
+					&.red {
+						color: #FF3B30;
+					}
+
+					&.green {
+						color: #36C75A;
+					}
+					
+					&.yellow {
+						color:#FFC53D;
+					}
+				}
+			}
+		}
+	}
+}
+
+.bottom {
+	.circle-wrap {
+		.circle-list {
+			display: flex;
+
+			.item {
+				padding: 20rpx;
+				border-radius: 16rpx;
+				background: #fff;
+				margin: 16rpx;
+				flex: 1;
+
+				.title {
+					font-weight: bold;
+					font-size: 30rpx;
+					line-height: 24rpx;
+					color: #333333;
+
+					text {
+						font-size: 20rpx;
+						color: #999999;
+					}
+				}
+
+				canvas {
+					margin: 36rpx auto 0;
+					width: 180rpx;
+					height: 180rpx;
+				}
+
+				.text {
+					text-align: center;
+					margin-top: 16rpx;
+					font-size: 24rpx;
+					color: #333333;
+				}
+			}
+		}
+	}
+}
+
+.notice {
+	background:#fff;
+	padding:40rpx;
+	
+	.img {
+		width:100%;
+	}
+	
+	.text {
+		text-align: center;
+		font-size: 28rpx;
+		color: #666666;
+		line-height: 48rpx;
+		.blue {
+			color:#007AFF;
+		}
+	}
+	
+	.btn {
+		text-align: center;
+		line-height: 80rpx;
+		margin:40rpx auto 0;
+		width: 528rpx;
+		height: 80rpx;
+		background: #007AFF;
+		border-radius: 40rpx;
+		color:#fff;
+	}
+}
+
+.notice__modal {
+	.notice__content {
+		width: 640rpx;
+		height: 779rpx;
+		background: #FFFFFF;
+		display: flex;
+		flex-direction: column;
+		
+		.body {
+			flex:1;
+			
+			.content {
+				padding:30rpx 40rpx 28rpx;
+				line-height: 40rpx;
+				font-size: 28rpx;
+				color:#666;
+				
+				.img {
+					width:100%;
+				}
+				
+				.bold {
+					color:#333;
+					font-size: 32rpx;
+					font-weight: bold;
+				}
+				
+				.center {
+					text-align: center;
+				}
+				
+				.blue {
+					color:#007AFF;
+				}
+				
+				.text {
+					margin-top:20rpx;
+				}
+			}
+		}
+		
+		.footer {
+			height:140rpx;
+			border-top:1px solid #EEEEEE;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			
+			.btn {
+				margin:0 12rpx;
+				width: 268rpx;
+				height: 80rpx;
+				color:#fff;
+				font-size: 30rpx;
+				text-align: center;
+				line-height: 80rpx;
+				background: #007AFF;
+				border-radius: 40rpx 40rpx 40rpx 40rpx;
+				
+				
+				&.close {
+					color:#007AFF;
+					background: #F5F5F5;
+					border-radius: 40rpx 40rpx 40rpx 40rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 359 - 63
pages5/liveList/index.vue

@@ -1,99 +1,395 @@
 <template>
-	<view class="safeArea">
-		<nav-bar title="我的考试"></nav-bar>
-		<view class="examWrap">
-			<view class="examItem" @click="goAppointment">
-				<view class="item">模拟考试预约</view>
-				<view class="item"><text class="note">去预约模拟考试</text><u-icon name="arrow-right" color="#999999" size="28"></u-icon></view>
+	<view>
+		<nav-bar title="模考预约" class="nav"></nav-bar>
+		<view class="tabs">
+			<view class="tab" :class="{ active: index == 2 }" data-index="2">
+				<view class="dateRange">
+					<picker mode="date" :value="dateFrom" :start="startDate" :end="endDate" @change="bindDateFromChange">
+						<view class="uni-input">{{dateFrom}}</view>
+					</picker>
+					- 
+					<picker mode="date" :value="dateTo" :start="startDate" :end="endDate" @change="bindDateToChange">
+						<view class="uni-input">{{dateTo}}</view>
+					</picker></view>
+				<u-icon class="icon" name="calendar"></u-icon>
 			</view>
-			<view class="examItem" @click="goAppointment">
-				<view class="item">未考试</view>
-				<view class="item"><text class="num">{{yyNum}}</text>个<u-icon name="arrow-right" color="#999999" size="28"></u-icon></view>
+			<view class="tab" :class="{ active: index == 1 }" data-index="1" @click="tab(1)">
+				<view>全部</view>
+				<u-icon class="icon" :class="index ==1? 'animals':''" name="arrow-down"></u-icon>
 			</view>
-			<view class="examItem" @click="goAppointment">
-				<view class="item">已结束</view>
-				<view class="item"><text class="num">{{yyNum}}</text>个<u-icon name="arrow-right" color="#999999" size="28"></u-icon></view>
-			</view>
-			<view class="examItem" @click="goResult">
-				<view class="item">
-					<view>考试成绩和证书</view>
-					<view class="desc"><text class="num">二建模考-法律讲解正在直播中,立即前往查看</text></view>
+			
+		</view>
+		
+
+		<view class="record">
+			<view class="item" v-for="(item,index) in 5" :key="index">
+				<view class="item__header">
+					<view class="note">
+						<image src="../static/living.png" mode="widthFix"></image>
+						直播中
+					</view>
+					<image class="img" src="/static/questionBank.png" ></image>
+				</view>
+				<view class="item__body">
+					<view class="title">
+						二建模考-法律讲解直播-三级标题
+					</view>
+					<view class="desc">直播时间</view>
+					<view class="desc">2022/4/15 20:00-21:00 </view>
 				</view>
-				<view class="item"><u-icon name="arrow-right" color="#999999" size="28"></u-icon></view>
 			</view>
 		</view>
+		
+
+		<view class="modal" :style="{top:modalTop+'px'}" v-if="index == 1">
+			<view class="content">
+				<scroll-view scroll-y="true" style="height:100%">
+					<view class="top" :class="activeIndex === 0 ? 'activesty' : ''" @click="testClick(3)">全部</view>
+					<view class="list">
+						<view class="item" :class="activeIndex == listItem.goodsId ? 'activesty' : ''" v-for="(listItem,listIndex) in list" :key="listIndex" @click="testClick(listItem)">
+							{{ listItem.goodsName }}
+						</view>
+					</view>
+				</scroll-view>
+				
+			</view>
+			<view class="modal_wrap" @click="index = 0"></view>
+		</view>
+		
+		<view class="notice_modal" :style="{top:modalTop+'px'}" v-if="index == 2">
+			<view class="content">
+				<scroll-view scroll-y="true" style="height:100%">
+					<view class="top" :class="typeIndex === 0 ? 'activesty' : ''" @click="paperClick(3)">全部试卷类型</view>
+					<view class="list">
+						<view class="item" :class="typeIndex == listItem.paperId ? 'activesty' : ''" v-for="(listItem,listIndex) in list1" :key="listIndex" @click="paperClick(listItem)">{{ listItem.paperName }}</view>
+					</view>
+				</scroll-view>
+			</view>
+			<view class="modal_wrap" @click="index = 0"></view>
+		</view>
+		
 	</view>
 </template>
 
 <script>
-import { mapGetters } from 'vuex';
 export default {
-	components: {
-	},
 	data() {
 		return {
-			yyNum:0,
+			openAppoint:false,
+			appointModal:false,
+			noticeModal:false,
+			index: 0,
+			list: [],
+			list1: [],
+			recordList: [],
+			goodsData: {},
+			param: {
+				pageNum: 1,
+				pageSize: 10
+			},
+			dateFrom:'',
+			dateTo:'',
+			isRepeat:false,
+			total: 0,
+			activeIndex: 0,
+			typeIndex:0,
+			itemIndex:'',
+			modalTop:0,
+			endDate:'',
 		};
 	},
-	onLoad(){
+	onLoad(option) {
+		this.dateFrom = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
+		this.dateTo = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
+		this.endDate = this.$method.timestampToTime(new Date().getTime() / 1000).replace(/-/g,'/');
+		
+		uni.getSystemInfo({
+			success:(e) => {
+				let info = uni.createSelectorQuery().select(".nav");
+				info.boundingClientRect((navData) => { //data - 各种参数
+				
+					let info = uni.createSelectorQuery().select(".tabs");
+					info.boundingClientRect((tabData) => { //data - 各种参数
+						this.modalTop = navData.height + tabData.height
+						console.log(navData) // 获取元素宽度
+						console.log(tabData) // 获取元素宽度
+					}).exec()
+				}).exec()
+			}
+		})
+	},
+	onPullDownRefresh() {
+		let that = this;
+		this.param = {
+			pageNum: 1,
+			pageSize: 10
+		};
+		this.getExamRecordList();
+		setTimeout(function() {
+			uni.stopPullDownRefresh();
+		}, 500);
+	},
+	onReachBottom() {
+		if (this.recordList.length < this.total) {
+			this.param.pageNum++;
+			this.getExamRecordList();
+		}
 	},
 	onShow() {
-		this.getInfo()
+		if(this.isRepeat) {
+			this.addRecord();
+		} else {
+			if(this.itemIndex !== '') {
+				this.refreshByIndex();
+			}
+		}
+		
 	},
 	methods: {
-		getInfo(){
-			this.$api.getinfoAttached().then(res => {
-				if (res.data.code === 200) {
-					this.yyNum = res.data.data.subscribeSum;
-				}
+		refreshByIndex() {
+			this.$api.examRecordGroupList({
+				pageNum: this.itemIndex+1,
+				pageSize: 1
+			}).then(res => {
+				this.$set(this.recordList,this.itemIndex,res.data.rows[0])
+				this.itemIndex = ''
 			});
 		},
-		goAppointment(){
-			this.$navTo.togo('/pages2/exam/exam_appointment');
+		
+		appoint(item) {
+			this.appointModal = true;
+		},
+		tab(index) {
+			console.log(index,this.index)
+			if(this.index == index) {
+				this.index = 0;
+				return;
+			}
+			this.index = index;
+			console.log(this.index);
+		},
+		bindDateFromChange(e) {
+			this.dateFrom = e.detail.value
 		},
-		goResult(){
-			this.$navTo.togo('/pages2/exam/exam_result');
+		
+		bindDateToChange(e) {
+			this.dateTo = e.detail.value
 		}
-	},
-	onReachBottom() {},
-	computed: { ...mapGetters(['userInfo']) }
+	}
 };
 </script>
-<style >
-	page {
-			background: #EAEEF1;
-		}
+<style>
+page {
+	background: #eaeef1;
+}
 </style>
-<style scoped lang="scss">
-.examWrap{
-	padding: 16rpx;
-	.examItem{
-		padding:24rpx;
-		background: #FFFFFF;
-		box-shadow: 0px 0px 16rpx 4rpx rgba(145, 156, 178, 0.1);
-		border-radius: 16rpx;
+<style lang="scss" scope>
+	.animals{
+		transition: all 0.3s;
+		transform: rotate(180deg);
+	}
+.tabs {
+	position: fixed;
+	padding:18rpx 0;
+	left: 0;
+	width: 100%;
+	display: flex;
+	z-index: 10;
+		background: #ffffff;
+	.tab {
+		padding:0 18rpx;
+		flex: 1;
 		display: flex;
 		justify-content: space-between;
-		font-size: 32rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #333333;
-		margin-bottom: 16rpx;
-		.num{
-			color:#007AFF;
-			text-decoration: underline;
-			margin-right: 5rpx;
+		background: #ffffff;
+		font-size: 24rpx;
+		color: #999999;
+		
+		&:nth-of-type(1) {
+			border-right:1px solid #EEEEEE;
+		}
+		
+		.dateRange {
+			display: flex;
+			justify-content: space-between;
+		}
+
+		&.active {
+			color: #333333;
+			.icon{
+				transform: rotate(180deg);
+			}
 		}
+	}
+}
+
+
+.record {
+	margin-top:80rpx;
+	padding: 16rpx 16rpx;
+	display: flex;
+	flex-wrap: wrap;
+	.item {
+		margin-bottom: 16rpx;
+		width:351rpx;
+		background: #ffffff;
+		border-radius: 16rpx;
+		position: relative;
 		
-		.desc {
-			margin-top:30rpx;
-			font-size: 28rpx;
+		&:nth-of-type(2n) {
+			margin-left:16rpx;
+			
+		}
+
+		&__header {
+			width: 100%;
+			height: 170rpx;
+			position:relative;
+			
+			.note {
+				position:absolute;
+				left:0;
+				top:0;
+				width: 136rpx;
+				height: 40rpx;
+				background: linear-gradient(90deg, #B37FEB, #722ED1);
+				box-shadow: 3rpx 3rpx 6rpx 0rpx rgba(239, 219, 255, 0.6);
+				border-radius: 16rpx 0rpx 8rpx 0rpx;
+				text-align: center;
+				color:#fff;
+				
+				image {
+					width:24rpx;
+					vertical-align: middle;
+				}
+			}
+			
+			.img {
+				width:100%;
+				height:100%;
+			}
 		}
 		
-		.note {
-			font-size: 24rpx;
-			color:#999;
+		&__body {
+			padding:16rpx;
+			
+			.title {
+				font-size: 30rpx;
+				color: #333333;
+				line-height: 48rpx;
+				font-weight: bold;
+			}
+			
+			.desc {
+				margin-top:10rpx;
+				font-size: 24rpx;
+				color: #666666;
+				line-height: 36rpx;
+			}
+			
+			.btn {
+				margin-top:30rpx;
+				background: #FFFFFF;
+				border-radius: 16rpx;
+				height: 64rpx;
+				line-height: 62rpx;
+				text-align: center;
+				font-size: 28rpx;
+					border: 1px solid #D9D9D9;
+					color:#D9D9D9;
+				
+				&.active {
+					
+					border: 1px solid #007AFF;
+					color:#007AFF;
+				}
+			}
+		}
+	}
+}
+
+.notice {
+	position:fixed;
+	right:0;
+	top:50%;
+	width: 48rpx;
+	height: 200rpx;
+	background: #52C41A;
+	box-shadow: 0px 3rpx 16rpx 0rpx rgba(44, 121, 7, 0.5);
+	border-radius: 24rpx;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	padding:10rpx 0;
+	
+	.text {
+		flex:1;
+		color:#fff;
+		text-align: center;
+	}
+}
+
+
+.modal {
+	bottom:0;
+	z-index: 199999999;
+	position: fixed;
+	left: 0;
+	width: 100%;
+
+	.content {
+		height:80%;
+		overflow: hidden;
+		position: relative;
+		z-index: 10;
+		background: #fff;
+		padding: 8rpx 12rpx 20rpx;
+		display: flex;
+		flex-wrap: wrap;
+
+		.top {
+			margin: 0 auto;
+			width: 726rpx;
+			height: 80rpx;
+			background: #f5f5f5;
+			color: #666666;
+			border-radius: 16rpx;
+			text-align: center;
+			line-height: 80rpx;
+			font-size: 32rpx;
+		}
+
+		.list {
+			width:100%;
+			margin-top: 16rpx;
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+
+			.item {
+				padding: 25rpx 20rpx;
+				width: 49%;
+				background: #f5f5f5;
+				border-radius: 16rpx;
+				font-size: 32rpx;
+				color: #666666;
+				margin: 8rpx 0;
+			}
 		}
 	}
+
+	.modal_wrap {
+		position: absolute;
+		left: 0;
+		width: 100%;
+		top: 0;
+		height: 100%;
+		background: rgba(0, 0, 0, 0.3);
+	}
+}
+.activesty {
+	background: #007aff !important;
+	color: #fff !important;
 }
 </style>

BIN
pages5/static/living.png


BIN
pages5/static/notice1.png


BIN
pages5/static/notice2.png


BIN
pages5/static/notice3.png


BIN
pages5/static/notice4.png


BIN
pages5/static/time-circle.png


BIN
pages5/static/wait.png