From d196e97a2ff77767268d3e55f07c37c8ce06258c Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Wed, 02 Mar 2022 15:56:16 +0800
Subject: [PATCH] 考试相关添加,页面等

---
 components/dyw-answer/answer.vue          |  592 +++++----------
 /dev/null                                 |  199 -----
 common/axios.js                           |    2 
 pages/business/business - 副本.vue          |   30 
 components/dyw-answer/answer - 副本 (2).vue |  999 ++++++++++++++++++++++++++
 pages.json                                |    4 
 common/api/exam.js                        |    8 
 pages/exam/examTextPage.vue               |  184 +---
 common/api/examFunc.js                    |   45 
 pages/exam/examResultPage.vue             |  126 +++
 store/state.js                            |    1 
 pages/exam/startexam.vue                  |   71 -
 12 files changed, 1,488 insertions(+), 773 deletions(-)

diff --git a/common/api/exam.js b/common/api/exam.js
index ce29663..235a6a5 100644
--- a/common/api/exam.js
+++ b/common/api/exam.js
@@ -13,4 +13,12 @@
         method: 'POST',
         data: params
     })
+}
+
+export const submitExam = (params) => {
+    return request({
+        url: '/simulateExamRecord/saveSimulateExam',
+        method: 'POST',
+        data: params
+    })
 }
\ No newline at end of file
diff --git a/common/api/examFunc.js b/common/api/examFunc.js
index c0de7bd..cbe77f3 100644
--- a/common/api/examFunc.js
+++ b/common/api/examFunc.js
@@ -10,27 +10,48 @@
 	let questionList = []
 
 	let queTypeArr = []
-	
+
 	quesModules.forEach((item, index) => {
 		
+		
+
 		let quesType = item.choicesType
 		
-		queTypeArr.push(quesType)
-		
-		item.template = item.choicesType
-		
+		// 是否答题了
+		item.selectedFlag = false
+		// 答题的结果
 		item.tempAnswer = ""
-		
+		// 题目是否做对
+		item.correctOrError = false
+
+
+		queTypeArr.push(quesType)
+
+		item.template = item.choicesType
+
+		if (item.template == 1) {
+			item.dualChooseArr = []
+		}
+
+
 		item.options = item.examSubjectOptions
+
+		if (item.template == 2) {
+			item.rightAnswer = item.answer
+		}
 		
-		item.options.forEach(it => {
-			it.newOptLetter = it.optionName
-			it.optContent = it.optionContent
-			it.optLetter = it.newOptLetter
-		})
+		if (item.template == 0 || item.template == 1) {
+			item.options.forEach(it => {
+				it.newOptLetter = it.optionName
+				it.optContent = it.optionContent
+				it.optLetter = it.newOptLetter
+			})
+			item.options.reverse()
+		}
+
 		
 		questionList.push(item)
-		
+
 	})
 
 	store.state.queTypeArr = unique(queTypeArr)
diff --git a/common/axios.js b/common/axios.js
index a12765d..97852e0 100644
--- a/common/axios.js
+++ b/common/axios.js
@@ -8,7 +8,7 @@
 import axios from "axios";
 
 const service = axios.create({
-  baseURL: "http://192.168.0.198:81", //正常接口
+  baseURL: "http://192.168.0.114:81", //正常接口
   timeout: 600000, // request timeout
 });
 
diff --git "a/components/dyw-answer/answer - \345\211\257\346\234\254 \0502\051.vue" "b/components/dyw-answer/answer - \345\211\257\346\234\254 \0502\051.vue"
new file mode 100644
index 0000000..2b60937
--- /dev/null
+++ "b/components/dyw-answer/answer - \345\211\257\346\234\254 \0502\051.vue"
@@ -0,0 +1,999 @@
+<template>
+	<!-- 此组件用于显示整套试卷· 
+	试卷类型包含
+	exam 理论考试
+	paper 模拟考试 知识点练习 -->
+	<view>
+		<!-- 大标题 -->
+		<view class="header" id="header">
+			<!-- 			<span class="header-button" @click='leave' v-if='!isReviewed && examType=='know' '>暂离</span> -->
+			<span v-if="examType=='exam'"> {{examDetail.exam.name}}</span>
+			<span v-if="(examType=='paper' )|| (examType=='know') || (examType=='course')">
+				{{examDetail.paper.name}}</span>
+			<span class="header-button" @click='handleSubmit(1)' v-if='!isReviewed'>交卷</span>
+			<!-- <span class="scoreText" v-else>得分:{{examDetail.score}}</span> -->
+		</view>
+		<!-- 小标题栏 -->
+		<view id="subHeader">
+			<view class="sub-header" v-if='questionList.length > 0'>
+				<u-tag class="typeTag" :text="answerStatusName" mode="dark" shape="circle" />
+				<view v-if="examDetail.exam.examTime<=0">不限时</view>
+				<u-count-down v-if="(!isReviewed)&&(examType=='exam')&& (examDetail.exam.examTime>0)"
+					:timestamp="examDetail.exam.examTime / 1000" :show-days="false" @end="end" @change="change">
+				</u-count-down>
+				<clock v-if="(!isReviewed)&&(examType=='paper' || (examType=='course'))" ref="myClock"
+					:timeOrigin="parseInt(examDetail.time)">
+				</clock>
+				<span v-if="examType=='exam'">第
+					{{currentIndex+1}}/{{examDetail.exam.totalQuestion}} 题</span>
+				<span v-if="(examType=='paper' )|| (examType=='know')">第
+					{{currentIndex+1}}/{{examDetail.totalQuestion}} 题</span>
+			</view>
+		</view>
+
+		<!-- 答题区域 -->
+		<swiper class="content" :duration='duration' :current=currentIndex @change='handleSwiperChanged'
+			v-if='questionList.length > 0' :style="{'height':swiperHeight}">
+			<template v-for='item in questionList'>
+				<swiper-item class="content-item">
+					<scroll-view scroll-y :style="{'height':swiperHeight}">
+						<!-- 显示题目的题干 -->
+						<view class="content-title">
+							<rich-text :nodes="item.subjectName"></rich-text>
+						</view>
+						<!-- 以下显示选项 -->
+						<!-- type == 0 单选题 -->
+						<view class="content-solutions" v-if='item.template == 0'>
+							<template v-for='subItem in item.options'>
+								<view
+									:class="[isReviewed && subItem.optAnswer == 1 ? 'right': '',isReviewed && (item.wrongArr.indexOf(subItem.optLetter) >-1)  ? 'wrong': '']"
+									class="content-solutions-item" @click='chooseSolution(item,subItem)'>
+									<view v-if="(!isReviewed) && (examType=='exam') "
+										class="content-solutions-item-single">
+										{{subItem.newOptLetter}}
+									</view>
+									<view v-else class="content-solutions-item-single">{{subItem.optLetter}}</view>
+									<!-- 此处注意optLetter与newOptLetter的区别,newOptLetter是ABCD顺序的,而optLetter乱序的,两者无直接关系 -->
+									<view
+										:class="item.tempAnswer == subItem.optLetter? 'content-solutions-item-select' : ''"
+										class="content-solutions-item-content">{{subItem.optContent}}</view>
+								</view>
+							</template>
+						</view>
+
+						<!-- type == 1 多选题 -->
+						<view class="content-solutions" v-if='item.template == 1'>
+							<template v-for='subItem in item.options'>
+								<view
+									:class="[isReviewed && subItem.optAnswer == 1 ? 'right': '',isReviewed && (item.wrongArr.indexOf(subItem.optLetter) >-1)  ? 'wrong': '']"
+									class="content-solutions-item" @click='chooseMutiSolution(item,subItem)'>
+									<view v-if="(!isReviewed) && (examType=='exam') "
+										class="content-solutions-item-single">
+										{{subItem.newOptLetter}}
+									</view>
+									<view v-else class="content-solutions-item-single">{{subItem.optLetter}}</view>
+									<!-- TODO 是否被选中的条件判断不对 -->
+									<view
+										:class="item.tempAnswer.indexOf(subItem.optLetter) >-1 ? 'content-solutions-item-select' : ''"
+										class="content-solutions-item-content">{{subItem.optContent}}
+									</view>
+								</view>
+							</template>
+						</view>
+
+						<!-- type == 2 判断题 -->
+						<view class="content-solutions" v-if='item.template == 2'>
+							<template v-for='subItem in item.options'>
+								<view class="content-solutions-judge">
+									<view v-for="(judgeItem,judgeIndex) in judgeArr"
+										:class="[item.tempAnswer == judgeItem.value? 'content-solutions-item-select' : '',isReviewed && (item.rightAnswer==judgeItem.name)  ? 'right': '',isReviewed && (item.wrongArr ==judgeItem.value)  ? 'wrong': '']"
+										class="content-solutions-judge-item"
+										@click='judgeSolution(item,judgeItem.value)'>{{judgeItem.name}}</view>
+								</view>
+							</template>
+						</view>
+
+						<!-- type == 4 填空题 -->
+						<view class="content-solutions" v-if='item.template == 4'>
+							<template v-if="!isReviewed">
+								<view class="content-solutions-item" v-for='(subItem,subIndex) in item.options'
+									:keys="subIndex"
+									:class="[isReviewed && item.answerStatus!=4 &&(item.blankString != item.rightAnswer)? 'wrong':'']">
+									<view class="content-solutions-item-single">{{subIndex+1}}</view>
+									<input :disabled="isReviewed" type="text" class="content-solutions-blank"
+										v-model="item.blankArr[subIndex]" placeholder="请在此处输入答案" />
+								</view>
+							</template>
+							<template v-else>
+								<view class="content-solutions-item">
+									<view class="content-solutions-item-single"></view>
+									<!-- TODOvalue的绑定值不对 :value="item.blankArr[subIndex].replace(/&quot\;/g, '')" -->
+									<input :disabled="isReviewed" :value="(item.blankArr).join(',')" type="text"
+										class="content-solutions-blank" />
+								</view>
+							</template>
+						</view>
+						<!-- type == 5 简答题 -->
+						<view class="content-solutions" v-if='item.template == 5'>
+							<textarea v-if="!isReviewed" @input="textInput" :disabled="isReviewed" placeholder="请输入您的答案"
+								auto-height />
+							<textarea v-else :disabled="isReviewed" :value="item.tempAnswer.replace(/&quot\;/g, '')"
+								auto-height />
+						</view>
+
+						<view class="explain" v-if='isReviewed'>
+							<u-tag v-show="item.answerStatus==1" text="未答" type="error" />
+							<u-tag v-show="item.answerStatus==2" text="正确" type="success" />
+							<u-tag v-show="item.answerStatus==3" text="错误" type="error" />
+							<u-tag v-show="item.answerStatus==4" text="未评分" type="warning" />
+							<u-tag v-show="item.answerStatus==5" text="已评分" type="warning" />
+							<u-tag v-show="item.answerStatus==6" text="已答" type="warning" />
+							<view class="explain-title">正确答案:</view>
+							<!-- <span class="text">{{item.rightAnswer}}</span> -->
+							<u-parse :html="item.rightAnswer"></u-parse>
+							<view class="explain-title">试题解析:</view>
+							<!-- <view class="explain-content">{{item.queAnalysis | analysisFilter }}</view> -->
+							<u-parse :html="item.queAnalysis?item.queAnalysis:'暂无'"></u-parse>
+							<view class="noteArea">
+								<view class="noteAreaTitle">
+									<view class="explain-title">我的笔记:</view>
+									<view v-if="eidtOrFinishValue=='编辑笔记'" class="funcGroup" @click="editBtnFunc(item)">
+										<u-icon class="funcBtn" name="edit-pen"></u-icon>
+										<span>编辑笔记</span>
+									</view>
+									<view v-else class="funcGroup" @click="finishBtnFunc(item)">
+										<u-icon class="funcBtn" name="edit-pen"></u-icon>
+										<span>完成</span>
+									</view>
+								</view>
+								<!-- 只有回答过的题目才能编辑笔记!!! -->
+								<text-editor :noteId="item.id" :textContent="item.theoryExamAnswer.queNote"
+									:isreadOnly="isreadOnly" @editorInput='updateEditorText'>
+								</text-editor>
+							</view>
+						</view>
+					</scroll-view>
+				</swiper-item>
+			</template>
+		</swiper>
+
+		<!-- 底部栏 -->
+		<view class="footer" id="footer">
+			<view class="footer-back" @click='handleChangeCurrentSwiper(-1)'>上一题</view>
+			<view class="footer-card" @click="showQuestion = !showQuestion">答题卡</view>
+			<view class="footer-right" @click='handleChangeCurrentSwiper(1)'>下一题</view>
+		</view>
+
+		<!-- 答题卡弹出层 -->
+		<modal v-model="showQuestion">
+			<view class='question-modal' :style="{'height': modalHeight}">
+				<view class="question-modal-header" id="questionHeader">
+					答题卡
+				</view>
+				<scroll-view scroll-y class="question-modal-body" :style="{'height': modalContentHeight}">
+					<template v-for="(subItem,subIndex) in queTypeArr">
+						<view class="queTypeName" v-show="queTypeStore[subIndex]>=0">{{subItem.name}}</view>
+						<!-- <u-tag :text="subItem.name"  v-show="queTypeStore[subIndex]>0" mode="dark" /> -->
+						<view class="queTypeArea">
+
+							<template v-for="(item, index) in questionList">
+								<view v-show="item.template == subItem.value">
+
+									<!-- 1.复习状态且回答正确 -->
+									<!-- <view v-if='item.tempAnswer && item.answer==item.tempAnswer && isReviewed' -->
+									<view v-if='isReviewed && item.answerStatus == "2"'
+										class="question-modal-body-item question-modal-body-item-right"
+										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
+									<!-- 2.复习状态且回答错误 -->
+									<view
+										v-else-if='isReviewed && (item.answerStatus == "1" ||item.answerStatus == "3" )'
+										class="question-modal-body-item question-modal-body-item-failed"
+										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
+									<!-- 3.复习状态且简答题未评分或者已评分 -->
+									<view
+										v-else-if='isReviewed && (item.answerStatus == "4" ||item.answerStatus == "5")'
+										class="question-modal-body-item question-modal-body-item-unScored"
+										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
+									<!-- 3.非复习状态且已经作答 -->
+									<view v-else-if='!isReviewed && item.tempAnswer && item.tempAnswer.length != 0'
+										class="question-modal-body-item question-modal-body-item-select"
+										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
+									<!-- 4.非复习状态且未作答 -->
+									<view v-else class="question-modal-body-item question-modal-body-item-unselect"
+										@click="handleJumpSwiper(index)">
+										{{index + 1 }}
+									</view>
+									<!-- <u-line color="red" border-style="info"></u-line> -->
+								</view>
+							</template>
+						</view>
+					</template>
+				</scroll-view>
+				<view class="question-modal-foot" id="questionHeader">
+					<view v-if="!isReviewed" class="ansBlock">
+						<view class="blockItem">
+							<view class="block-ansed"></view>
+							<view class="">已答</view>
+						</view>
+						<view class="blockItem">
+							<view class="block-unansed"></view>
+							<view class="">未答</view>
+						</view>
+					</view>
+
+					<view v-else class="ansBlock">
+						<view class="blockItem">
+							<view class="block-right"></view>
+							<view class="">答对</view>
+						</view>
+						<view class="blockItem">
+							<view class="block-wrong"></view>
+							<view class="">答错</view>
+						</view>
+						<view class="blockItem">
+							<view class="block-unScored"></view>
+							<view class="">未评分</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</modal>
+		<u-toast ref="uToast" />
+	</view>
+</template>
+
+<script>
+	import Modal from './modal.vue'
+	import clock from '@/components/clock/clock.vue';
+	export default {
+		data() {
+			return {
+				isreadOnly: true,
+				quesModules: [],
+				areaText: ``, //保存简答题答案
+				judgeArr: [{
+						name: '正确',
+						value: '1'
+					},
+					{
+						name: '错误',
+						value: '0'
+					}
+				],
+				queTypeArr: [{
+						name: '单选题',
+						value: '0',
+						be: false,
+					},
+					{
+						name: '多选题',
+						value: '1',
+						be: false,
+					},
+					{
+						name: '判断题',
+						value: '2',
+						be: false,
+					},
+					{
+						name: '填空题',
+						value: '4',
+						be: false,
+					},
+					{
+						name: '简答题',
+						value: '5',
+						be: false,
+					}
+				],
+				currentIndex: 0,
+				swiperHeight: '667px',
+				modalHeight: '500px',
+				modalContentHeight: '400px',
+				showQuestion: false,
+				articleEditorValue: '',
+				eidtOrFinishValue: '编辑笔记',
+				// eidtOrFinish: true,
+				editorText: '',
+				editor: 'editor',
+			}
+		},
+		filters: {
+			// 判断答案状态
+			analysisFilter(item) {
+				if (item == null) {
+					return "暂无解析"
+				} else {
+					return item
+				}
+			}
+		},
+		watch: {
+			// 监听currentIndex的变化,改变则提交答案 相同
+			currentIndex(newVal, oldVal) {
+				let that = this
+				if (!this.isReviewed) {
+					// 对各题型的答案进行处理
+					switch (that.questionList[oldVal].template) {
+						case 0:
+							// 选择题
+							break;
+						case 1:
+							// 多选题
+							// that.questionList[that.currentIndex].tempAnswer = that.questionList[that.currentIndex]
+							// 	.dualChooseArr.join(',')
+							break;
+						case 2:
+							// 判断题
+							break;
+						case 4:
+							// 填空题
+							that.questionList[oldVal].tempAnswer = that.questionList[oldVal].blankArr.join(
+								'||~||') // 数组拼接为字符串
+							break;
+						case 5:
+							that.questionList[oldVal].tempAnswer = JSON.stringify(that.areaText)
+							// console.log('000:',that.questionList[oldVal].tempAnswer);
+							break;
+						default:
+					}
+
+					// if (this.examType == 'exam') {
+					// 	// 保存答案
+					// 	var answerObj = {
+					// 		examRecordId: this.questionList[oldVal].recordId,
+					// 		paperQueId: this.questionList[oldVal].id,
+					// 		answer: this.questionList[oldVal].tempAnswer,
+					// 		template: this.questionList[oldVal].template
+					// 	}
+
+					// 	// 进行答题的api请求
+					// 	console.log('answerObj:', oldVal, answerObj);
+					// 	this.$api.answerExam(answerObj)
+					// 		.then(res => {
+					// 			console.log(res);
+					// 		})
+					// } else if (this.examType == 'paper' || this.examType == 'know') {
+					// 	var answerObj = {
+					// 		exerciseId: this.examDetail.exerciseId,
+					// 		paperQueId: this.questionList[oldVal].id,
+					// 		answer: this.questionList[oldVal].tempAnswer,
+					// 		template: this.questionList[oldVal].template
+					// 	}
+
+					// 	// 进行答题的api请求
+					// 	console.log('answerObj:', oldVal, answerObj);
+					// 	this.$api.answerPaper(answerObj)
+					// 		.then(res => {
+					// 			console.log(res);
+					// 		})
+					// } else {
+					// 	return
+					// }
+					// immediate: true,
+				}
+			}
+		},
+		computed: {
+			// swiperHeight(){
+			// 	uni.getSystemInfo({
+			// 		success(res) {
+			// 			console.log(res);
+			// 			return res.windowHeight+'px'
+			// 		}
+			// 	})
+			// },
+			examDetail() {
+				return this.$store.state.examDetail
+			},
+			questionList() {
+				console.log(this.$store.state.questionList, 77777)
+				return this.$store.state.questionList
+			},
+			queTypeStore() {
+				return this.$store.state.queTypeArr
+			},
+			max() {
+				return this.questionList.length - 1
+			},
+			answerStatusName() {
+				console.log(this.questionList[this.currentIndex].template, 63636636366)
+				switch (this.questionList[this.currentIndex].template) {
+					case 0:
+						return '单选题'
+						break;
+					case 1:
+						return '多选题'
+						break;
+					case 2:
+						return '判断题'
+						break;
+					case 4:
+						return '填空题'
+						break;
+					case 5:
+						return '简答题'
+						break;
+					default:
+						return '考试题'
+				}
+			}
+		},
+		props: {
+			isReviewed: {
+				type: Boolean,
+				default: false
+			},
+			examType: {
+				type: String,
+				default: "exam"
+			},
+			duration: {
+				type: [String, Number],
+				default: 300
+			},
+		},
+		mounted() {
+			var that = this
+			this.setAnswerHeight()
+			if ((!this.isReviewed) && ((this.examType == 'paper') || (this.examType == 'course'))) {
+				this.$refs.myClock.start();
+			}
+		},
+		components: {
+			Modal,
+			clock
+		},
+		methods: {
+			/*设置题目的高度*/
+			setAnswerHeight() {
+				let that = this
+				let tempHeight = 0
+				uni.getSystemInfo({
+					//获取手机屏幕高度信息,让swiper的高度和手机屏幕一样高                
+					success: function(res) {
+						console.log(res, '010101010')
+						tempHeight = res.windowHeight;
+						that.modalHeight = res.windowHeight - uni.upx2px(200) + 'px';
+						that.modalContentHeight = res.windowHeight - uni.upx2px(380) + 'px';
+						uni.createSelectorQuery().in(that).select("#header").fields({
+							size: true,
+							scrollOffset: true
+						}, (data) => {
+							console.log('data', data);
+							tempHeight -= data.height;
+							uni.createSelectorQuery().in(that).select("#subHeader").fields({
+								size: true,
+								scrollOffset: true
+							}, (data) => {
+								tempHeight -= data.height;
+								uni.createSelectorQuery().in(that).select("#footer").fields({
+									size: true,
+									scrollOffset: true
+								}, (data) => {
+									tempHeight -= data.height;
+									that.swiperHeight = tempHeight + 'px';
+								}).exec();
+							}).exec();
+						}).exec();
+					}
+				});
+			},
+			/* 跳转指定题目 */
+			handleJumpSwiper(index) {
+				this.currentIndex = index
+				this.showQuestion = false
+			},
+			change(timestamp) {
+				// var that = this
+				if (timestamp == 30) {
+					this.$refs.uToast.show({
+						title: '考试只剩余30s,请注意时间',
+						type: 'warning',
+						duration: 2000,
+						position: 'top'
+					})
+				}
+				// this.$forceUpdate()
+			},
+			end() {
+				this.$refs.uToast.show({
+					title: '考试时间结束,已自动交卷',
+					type: 'warning'
+				})
+				setTimeout(() => {
+					this.handleSubmit(0)
+				}, 2000)
+			},
+			textInput(e) {
+				this.areaText = e.detail.value
+				// console.log(e.detail.value)
+			},
+			/* 滑动题目 */
+			handleSwiperChanged(event) {
+				this.currentIndex = event.detail.current
+			},
+			/* 调用上一页,下一页 */
+			handleChangeCurrentSwiper(operation) {
+				let max = this.questionList.length - 1
+				let min = 0
+				// 进行翻页
+				if ((this.currentIndex > min && operation < 0) || (this.currentIndex < max && operation > 0)) {
+					this.currentIndex += operation
+					// console.log(this.currentIndex)
+				}
+			},
+			/* 选择答案(单选)*/
+			chooseSolution(item, subItem) {
+				if (!this.isReviewed) {
+					// tempAnswer为学生答案
+					item.tempAnswer = subItem.optLetter
+					// 强制刷新更新视图
+					this.$forceUpdate()
+					// this.questionList[this.currentIndex].tempAnswer = subItem.optLetter
+					if (this.currentIndex < this.max) {
+						setTimeout(() => {
+							this.currentIndex += 1
+						}, 300)
+					}
+					// this.onAnswerChange(item)
+				}
+			},
+			/* 选择答案(多选)*/
+			chooseMutiSolution(item, subItem) {
+				console.log(item, 123)
+				if (!this.isReviewed) {
+					let answerIndex = item.dualChooseArr.indexOf(subItem.optLetter)
+					if (answerIndex > -1) {
+						// 该选项已经在数组中了
+						item.dualChooseArr.splice(answerIndex, 1)
+					} else {
+						// 该选项不在数组中
+						item.dualChooseArr.push(subItem.optLetter)
+					}
+					item.tempAnswer = item.dualChooseArr.join(',')
+					// this.onAnswerChange(answerIndex)
+					// 强制刷新更新视图
+					this.$forceUpdate()
+				}
+			},
+			/* 判断题答案 */
+			judgeSolution(item, value) {
+				if (!this.isReviewed) {
+					// tempAnswer为学生答案
+					item.tempAnswer = value
+					// 强制刷新更新视图
+					this.$forceUpdate()
+					if (this.currentIndex < this.max) {
+						setTimeout(() => {
+							this.currentIndex += 1
+						}, 300)
+					}
+					// this.onAnswerChange(item)
+				}
+			},
+
+			/* 题目答案变化 */
+			onAnswerChange(item) {
+				let result = JSON.parse(JSON.stringify(item))
+				this.$emit('onChange', item)
+			},
+			/* 交卷  相同 */
+			handleSubmit(submitORimeEnd) {
+				/*submitORimeEnd == 1,submit
+				  submitORimeEnd == 0,stimeEnd*/
+				if (this.currentIndex == 0) {
+					this.currentIndex++
+				} else {
+					this.currentIndex = 0
+				}
+				if (submitORimeEnd) {
+					// this.$emit('submit', this.questionList)
+					this.$emit('submit')
+				} else {
+					this.$emit('timeEnd')
+				}
+			},
+
+			// 点击编辑笔记
+			editBtnFunc(item) {
+				if (item.theoryExamAnswer.id == undefined) {
+					this.$refs.uToast.show({
+						title: '未作答的题目不可编辑笔记!',
+						type: 'error',
+						// url: '/pages/user/index'
+					})
+					return
+				}
+				this.isreadOnly = !this.isreadOnly
+				this.eidtOrFinishValue = '完成'
+			},
+			// 完成编辑
+			finishBtnFunc(item) {
+				var that = this
+				this.isreadOnly = !this.isreadOnly
+				this.eidtOrFinishValue = '编辑笔记'
+				console.log('保存笔记内容', item, that.editorText);
+				this.$api.examNote(item.theoryExamAnswer.id, that.editorText)
+					.then(res => {
+						console.log('更新笔记成功', res)
+					})
+			},
+			updateEditorText(text) {
+				// 从子组件获取输入框输入内容
+				this.editorText = text
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #FFFFFF;
+	}
+
+	#header,
+	#subHeader {
+		height: 100rpx;
+	}
+
+	.header {
+		width: 750rpx;
+		// position: fixed;
+		margin-top: 30rpx;
+		position: relative;
+		text-align: center;
+		line-height: 100rpx;
+		font-size: 36rpx;
+		font-weight: 600;
+		color: #103289;
+		letter-spacing: 10rpx;
+		background-color: #FFFFFF;
+
+		&-button {
+			width: 80rpx;
+			height: 40rpx;
+			line-height: 40rpx;
+			position: absolute;
+			top: 20rpx;
+			right: 40rpx;
+			padding: 10rpx 20rpx;
+			border-radius: 15rpx;
+			letter-spacing: 2rpx;
+			font-weight: 500;
+			color: #FFFFFF;
+			background-color: #103289;
+		}
+
+		.scoreText {
+			color: #00b060;
+			font-size: 35rpx;
+		}
+	}
+
+	.sub-header {
+		width: 750rpx;
+		// position: fixed;
+		// margin-top: 130rpx;
+		padding: 30rpx 20rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		color: #000;
+		font-size: 33rpx;
+		font-weight: bold;
+		background-color: #FFFFFF;
+	}
+
+	.content {
+		// margin-top: 130rpx;
+		letter-spacing: 3rpx;
+
+		.typeTag {
+			margin-right: 20rpx;
+		}
+
+		&-item-explain {
+			padding-bottom: 20rpx;
+			font-size: 30rpx;
+			color: #8799a3;
+			letter-spacing: 5rpx;
+			border-top: 1px solid rgba(0, 0, 0, 0.1);
+
+			&-result {
+				padding: 20rpx 0;
+
+				span {
+					padding-left: 20rpx;
+					color: #39b54a;
+				}
+			}
+
+			&-content {
+				padding: 20rpx 0;
+			}
+		}
+
+		&-item {
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+
+		&-title {
+			margin-bottom: 30rpx;
+			font-size: 32rpx;
+			line-height: 55rpx;
+			color: #000
+		}
+
+		&-solutions {
+			width: 100%;
+			padding-bottom: 20rpx;
+
+			&-item {
+				margin: 40rpx 0;
+				border: 5rpx solid #103289;
+				border-radius: 20rpx;
+				display: flex;
+				align-items: center;
+				font-size: 30rpx;
+				background-color: #103289;
+
+				&-check-content {
+					padding: 35rpx 20rpx;
+					width: 100%;
+					border-radius: 15rpx;
+					color: #103289;
+					background-color: #FFFFFF;
+				}
+
+				&-single {
+					width: 80rpx;
+					text-align: center;
+					color: #FFFFFF;
+				}
+
+				&-content {
+					padding: 35rpx 20rpx;
+					width: 630rpx;
+					border-top-right-radius: 15rpx;
+					border-bottom-right-radius: 15rpx;
+					color: #000;
+					background-color: #FFFFFF;
+				}
+
+				&-select {
+					color: #FFFFFF;
+					background-color: #103289;
+				}
+			}
+
+			&-judge {
+				display: flex;
+				justify-content: space-around;
+				background-color: #FFFFFF;
+				padding: 20rpx;
+				text-align: center;
+				font-size: 30rpx;
+
+				.content-solutions-judge-item {
+					border: 5rpx solid #103289;
+					border-radius: 60rpx;
+					width: 300rpx;
+					padding: 35rpx 20rpx; // 控制单元格的高度
+				}
+
+				.content-solutions-judge-select {
+					color: #FFFFFF;
+					background-color: #103289;
+				}
+
+			}
+
+			&-blank {
+				// border: 5rpx solid #103289;
+				height: 60rpx;
+				width: 90%;
+				// border-radius: 20rpx;
+				background-color: #FFFFFF;
+				padding: 20rpx;
+			}
+
+			&-fillItem {
+				border: 5rpx solid #103289;
+				border-radius: 20rpx;
+				background-color: #FFFFFF;
+				padding: 20rpx;
+			}
+		}
+
+		.explain {
+			border-top: solid #999999 1px;
+			padding-top: 10rpx;
+			font-size: 28rpx;
+			color: #666666;
+
+			.explainResult {
+				color: #103289;
+			}
+
+			.explain-title {
+				font-weight: bold;
+			}
+
+			.noteArea {
+				border-top: 2rpx solid #103289;
+				padding-top: 10rpx;
+
+				// background-color: #0077AA;
+				.noteAreaTitle {
+					display: flex;
+					justify-content: space-between;
+				}
+			}
+		}
+	}
+
+	.footer {
+		width: 750rpx;
+		height: 100rpx;
+		padding: 30rpx 20rpx;
+		position: fixed;
+		bottom: 0;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		font-size: 30rpx;
+		box-sizing: border-box;
+		color: #4c8af3;
+		box-shadow: 0 0 5px 1px #eee;
+		background-color: #FFFFFF;
+
+		&-card {
+			padding: 10rpx 20rpx;
+			border: 1px solid #103289;
+			border-radius: 15rpx;
+			color: #FFFFFF;
+			background-color: #103289;
+		}
+	}
+
+	.question-modal {
+		width: 700rpx;
+		padding: 40rpx;
+		background-color: #FFFFFF;
+
+		&-header {
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			font-size: 35rpx;
+			color: #333333;
+			border-bottom: 1rpx solid #F0F0F0;
+		}
+
+		&-body {
+
+			// margin-bottom: 100rpx;
+			.queTypeName {
+				font-size: 32rpx;
+				font-weight: bold;
+
+			}
+
+			.queTypeArea {
+				display: flex;
+				flex-direction: row;
+				flex-wrap: wrap;
+				margin-bottom: 20rpx;
+
+				.question-modal-body-item {
+					width: 80rpx;
+					height: 80rpx;
+					margin: 10rpx 22rpx;
+					line-height: 80rpx;
+					font-size: 35rpx;
+					text-align: center;
+					border-radius: 50%;
+					color: #ffffff;
+					// background-color: #0077AA;
+				}
+			}
+
+			&-item-unselect {
+				// color: #FFFFFF;
+				background-color: #bbbbbb;
+			}
+
+			&-item-select {
+				// color: #FFFFFF;
+				background-color: #103289;
+			}
+
+			&-item-failed {
+				color: #FFFFFF;
+				background-color: #982121;
+			}
+
+			&-item-right {
+				color: #FFFFFF;
+				background-color: #39b54a;
+			}
+
+			&-item-unScored {
+				color: #FFFFFF;
+				background-color: #ff9f73;
+			}
+		}
+
+		.question-modal-foot {
+			height: 100rpx;
+			border-top: 1rpx solid #F0F0F0;
+			// position: fixed;
+			// margin-bottom: 0rpx;
+			margin-top: -60rpx;
+
+			.ansBlock {
+				display: flex;
+				justify-content: center;
+
+				// align-items: center;
+				.blockItem {
+					display: flex;
+					align-items: center;
+					margin: 20rpx;
+				}
+
+				.block-ansed {
+					width: 80rpx;
+					height: 80rpx;
+					border-radius: 50%;
+					background: #103289;
+					margin: 0 10rpx;
+				}
+
+				.block-unansed {
+					width: 80rpx;
+					height: 80rpx;
+					border-radius: 50%;
+					// border: solid #ffffff 1px;
+					background: #bbbbbb;
+					margin: 0 10rpx;
+				}
+
+				.block-right {
+					width: 80rpx;
+					height: 80rpx;
+					border-radius: 50%;
+					background: #39b54a;
+					margin: 0 10rpx;
+				}
+
+				.block-wrong {
+					width: 80rpx;
+					height: 80rpx;
+					border-radius: 50%;
+					background: #982121;
+					margin: 0 10rpx;
+				}
+
+				.block-unScored {
+					width: 80rpx;
+					height: 80rpx;
+					border-radius: 50%;
+					background: #ff9f73;
+					margin: 0 10rpx;
+				}
+			}
+
+		}
+	}
+
+	.right {
+		border: 8rpx solid #39b54a;
+	}
+
+	.wrong {
+		border: 8rpx solid #d81717;
+	}
+</style>
diff --git a/components/dyw-answer/answer.vue b/components/dyw-answer/answer.vue
index 9ea969b..5925787 100644
--- a/components/dyw-answer/answer.vue
+++ b/components/dyw-answer/answer.vue
@@ -3,36 +3,32 @@
 	试卷类型包含
 	exam 理论考试
 	paper 模拟考试 知识点练习 -->
-	<view>
+	<view class="container">
 		<!-- 大标题 -->
-		<view class="header" id="header">
-			<!-- 			<span class="header-button" @click='leave' v-if='!isReviewed && examType=='know' '>暂离</span> -->
-			<span v-if="examType=='exam'"> {{examDetail.exam.name}}</span>
-			<span v-if="(examType=='paper' )|| (examType=='know') || (examType=='course')">
-				{{examDetail.paper.name}}</span>
-			<span class="header-button" @click='handleSubmit(1)' v-if='!isReviewed'>交卷</span>
-			<!-- <span class="scoreText" v-else>得分:{{examDetail.score}}</span> -->
-		</view>
+
+		<u-navbar class="header" id="header" height="44" back-icon-color="#fff" title="模拟考试" title-color="#fff"
+			:background="{background: '#103289'}" :custom-back="exitExam">
+			<u-button class="slot-wrap-right" type="primary" size="mini" @click="handleSubmit(1)">交卷
+			</u-button>
+		</u-navbar>
+
 		<!-- 小标题栏 -->
 		<view id="subHeader">
 			<view class="sub-header" v-if='questionList.length > 0'>
 				<u-tag class="typeTag" :text="answerStatusName" mode="dark" shape="circle" />
 				<view v-if="examDetail.exam.examTime<=0">不限时</view>
-				<u-count-down v-if="(!isReviewed)&&(examType=='exam')&& (examDetail.exam.examTime>0)"
-					:timestamp="examDetail.exam.examTime / 1000" :show-days="false" @end="end" @change="change">
+
+				<u-count-down v-if="examDetail.exam.examTime" :timestamp="examDetail.exam.examTime / 1000"
+					:show-days="false" @end="end" @change="change">
 				</u-count-down>
-				<clock v-if="(!isReviewed)&&(examType=='paper' || (examType=='course'))" ref="myClock"
-					:timeOrigin="parseInt(examDetail.time)">
-				</clock>
-				<span v-if="examType=='exam'">第
+
+				<span>第
 					{{currentIndex+1}}/{{examDetail.exam.totalQuestion}} 题</span>
-				<span v-if="(examType=='paper' )|| (examType=='know')">第
-					{{currentIndex+1}}/{{examDetail.totalQuestion}} 题</span>
 			</view>
 		</view>
 
 		<!-- 答题区域 -->
-		<swiper class="content" :duration='duration' :current=currentIndex @change='handleSwiperChanged'
+		<swiper class="content" :duration='duration' :current='currentIndex' @change='handleSwiperChanged'
 			v-if='questionList.length > 0' :style="{'height':swiperHeight}">
 			<template v-for='item in questionList'>
 				<swiper-item class="content-item">
@@ -43,115 +39,76 @@
 						</view>
 						<!-- 以下显示选项 -->
 						<!-- type == 0 单选题 -->
-						<view class="content-solutions" v-if='item.template == 0'>
+						<view class="content-solutions" v-if='item.choicesType == 0'>
 							<template v-for='subItem in item.options'>
-								<view
-									:class="[isReviewed && subItem.optAnswer == 1 ? 'right': '',isReviewed && (item.wrongArr.indexOf(subItem.optLetter) >-1)  ? 'wrong': '']"
-									class="content-solutions-item" @click='chooseSolution(item,subItem)'>
-									<view v-if="(!isReviewed) && (examType=='exam') "
-										class="content-solutions-item-single">
-										{{subItem.newOptLetter}}
+								<view class="content-solutions-item"
+									@click="!item.selectedFlag && chooseSolution(item,subItem)">
+									<view class="content-solutions-item-single">
+										{{subItem.optionName}}
 									</view>
-									<view v-else class="content-solutions-item-single">{{subItem.optLetter}}</view>
-									<!-- 此处注意optLetter与newOptLetter的区别,newOptLetter是ABCD顺序的,而optLetter乱序的,两者无直接关系 -->
+
 									<view
-										:class="item.tempAnswer == subItem.optLetter? 'content-solutions-item-select' : ''"
-										class="content-solutions-item-content">{{subItem.optContent}}</view>
+										:class="item.tempAnswer == subItem.optionName? 'content-solutions-item-select' : ''"
+										class="content-solutions-item-content">{{subItem.optionContent}}</view>
 								</view>
 							</template>
 						</view>
 
 						<!-- type == 1 多选题 -->
-						<view class="content-solutions" v-if='item.template == 1'>
+						<view class="content-solutions" v-if='item.choicesType == 1'>
 							<template v-for='subItem in item.options'>
-								<view
-									:class="[isReviewed && subItem.optAnswer == 1 ? 'right': '',isReviewed && (item.wrongArr.indexOf(subItem.optLetter) >-1)  ? 'wrong': '']"
-									class="content-solutions-item" @click='chooseMutiSolution(item,subItem)'>
-									<view v-if="(!isReviewed) && (examType=='exam') "
-										class="content-solutions-item-single">
-										{{subItem.newOptLetter}}
+								<view class="content-solutions-item"
+									@click='!item.selectedFlag && chooseMutiSolution(item,subItem)'>
+									<view class="content-solutions-item-single">
+										{{subItem.optionName}}
 									</view>
-									<view v-else class="content-solutions-item-single">{{subItem.optLetter}}</view>
-									<!-- TODO 是否被选中的条件判断不对 -->
+
 									<view
-										:class="item.tempAnswer.indexOf(subItem.optLetter) >-1 ? 'content-solutions-item-select' : ''"
-										class="content-solutions-item-content">{{subItem.optContent}}
-									</view>
+										:class="item.tempAnswer.indexOf(subItem.optionName) > -1 ? 'content-solutions-item-select' : ''"
+										class="content-solutions-item-content">{{subItem.optionContent}}</view>
 								</view>
 							</template>
+							<u-button v-show="!item.selectedFlag" type="primary" shape="circle"
+								:custom-style="{backgroundColor: '#103289'}" @click="confirm(item)">确认答案
+							</u-button>
 						</view>
 
 						<!-- type == 2 判断题 -->
-						<view class="content-solutions" v-if='item.template == 2'>
-							<template v-for='subItem in item.options'>
+						<view class="content-solutions" v-if='item.choicesType == 2'>
+							<template v-for="(judgeItem,judgeIndex) in judgeArr">
 								<view class="content-solutions-judge">
-									<view v-for="(judgeItem,judgeIndex) in judgeArr"
-										:class="[item.tempAnswer == judgeItem.value? 'content-solutions-item-select' : '',isReviewed && (item.rightAnswer==judgeItem.name)  ? 'right': '',isReviewed && (item.wrongArr ==judgeItem.value)  ? 'wrong': '']"
+									<view
+										:class="[item.tempAnswer == judgeItem.name? 'content-solutions-item-select' : '']"
 										class="content-solutions-judge-item"
-										@click='judgeSolution(item,judgeItem.value)'>{{judgeItem.name}}</view>
+										@click="!item.selectedFlag && judgeSolution(item, judgeItem.name)">
+										{{judgeItem.name}}
+									</view>
 								</view>
 							</template>
 						</view>
 
-						<!-- type == 4 填空题 -->
-						<view class="content-solutions" v-if='item.template == 4'>
-							<template v-if="!isReviewed">
-								<view class="content-solutions-item" v-for='(subItem,subIndex) in item.options'
-									:keys="subIndex"
-									:class="[isReviewed && item.answerStatus!=4 &&(item.blankString != item.rightAnswer)? 'wrong':'']">
-									<view class="content-solutions-item-single">{{subIndex+1}}</view>
-									<input :disabled="isReviewed" type="text" class="content-solutions-blank"
-										v-model="item.blankArr[subIndex]" placeholder="请在此处输入答案" />
-								</view>
-							</template>
-							<template v-else>
-								<view class="content-solutions-item">
-									<view class="content-solutions-item-single"></view>
-									<!-- TODOvalue的绑定值不对 :value="item.blankArr[subIndex].replace(/&quot\;/g, '')" -->
-									<input :disabled="isReviewed" :value="(item.blankArr).join(',')" type="text"
-										class="content-solutions-blank" />
-								</view>
-							</template>
-						</view>
-						<!-- type == 5 简答题 -->
-						<view class="content-solutions" v-if='item.template == 5'>
-							<textarea v-if="!isReviewed" @input="textInput" :disabled="isReviewed" placeholder="请输入您的答案"
-								auto-height />
-							<textarea v-else :disabled="isReviewed" :value="item.tempAnswer.replace(/&quot\;/g, '')"
-								auto-height />
-						</view>
+						<view class="explain" v-if="item.selectedFlag">
+							<view>
+								<view style="display: flex; justify-content: flex-start; align-items: center;">
 
-						<view class="explain" v-if='isReviewed'>
-							<u-tag v-show="item.answerStatus==1" text="未答" type="error" />
-							<u-tag v-show="item.answerStatus==2" text="正确" type="success" />
-							<u-tag v-show="item.answerStatus==3" text="错误" type="error" />
-							<u-tag v-show="item.answerStatus==4" text="未评分" type="warning" />
-							<u-tag v-show="item.answerStatus==5" text="已评分" type="warning" />
-							<u-tag v-show="item.answerStatus==6" text="已答" type="warning" />
-							<view class="explain-title">正确答案:</view>
-							<!-- <span class="text">{{item.rightAnswer}}</span> -->
-							<u-parse :html="item.rightAnswer"></u-parse>
-							<view class="explain-title">试题解析:</view>
-							<!-- <view class="explain-content">{{item.queAnalysis | analysisFilter }}</view> -->
-							<u-parse :html="item.queAnalysis?item.queAnalysis:'暂无'"></u-parse>
-							<view class="noteArea">
-								<view class="noteAreaTitle">
-									<view class="explain-title">我的笔记:</view>
-									<view v-if="eidtOrFinishValue=='编辑笔记'" class="funcGroup" @click="editBtnFunc(item)">
-										<u-icon class="funcBtn" name="edit-pen"></u-icon>
-										<span>编辑笔记</span>
+									<u-tag style="margin: 0 20rpx;" v-show="item.correctOrError" text="正确"
+										type="success" />
+									<u-tag style="margin: 0 20rpx;" v-show="!item.correctOrError" text="错误"
+										type="error" />
+
+									<view>
+										答案
+										<text style="margin: 0 20rpx;">{{item.answer}}</text>
 									</view>
-									<view v-else class="funcGroup" @click="finishBtnFunc(item)">
-										<u-icon class="funcBtn" name="edit-pen"></u-icon>
-										<span>完成</span>
+									<view>
+										您选择
+										<text style="margin: 0 20rpx;">{{item.tempAnswer}}</text>
 									</view>
+
 								</view>
-								<!-- 只有回答过的题目才能编辑笔记!!! -->
-								<text-editor :noteId="item.id" :textContent="item.theoryExamAnswer.queNote"
-									:isreadOnly="isreadOnly" @editorInput='updateEditorText'>
-								</text-editor>
 							</view>
 						</view>
+
 					</scroll-view>
 				</swiper-item>
 			</template>
@@ -175,53 +132,30 @@
 						<view class="queTypeName" v-show="queTypeStore[subIndex]>=0">{{subItem.name}}</view>
 						<!-- <u-tag :text="subItem.name"  v-show="queTypeStore[subIndex]>0" mode="dark" /> -->
 						<view class="queTypeArea">
-
 							<template v-for="(item, index) in questionList">
-								<view v-show="item.template == subItem.value">
-
-									<!-- 1.复习状态且回答正确 -->
-									<!-- <view v-if='item.tempAnswer && item.answer==item.tempAnswer && isReviewed' -->
-									<view v-if='isReviewed && item.answerStatus == "2"'
-										class="question-modal-body-item question-modal-body-item-right"
-										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
-									<!-- 2.复习状态且回答错误 -->
-									<view
-										v-else-if='isReviewed && (item.answerStatus == "1" ||item.answerStatus == "3" )'
-										class="question-modal-body-item question-modal-body-item-failed"
-										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
-									<!-- 3.复习状态且简答题未评分或者已评分 -->
-									<view
-										v-else-if='isReviewed && (item.answerStatus == "4" ||item.answerStatus == "5")'
-										class="question-modal-body-item question-modal-body-item-unScored"
-										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
-									<!-- 3.非复习状态且已经作答 -->
-									<view v-else-if='!isReviewed && item.tempAnswer && item.tempAnswer.length != 0'
-										class="question-modal-body-item question-modal-body-item-select"
-										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
-									<!-- 4.非复习状态且未作答 -->
-									<view v-else class="question-modal-body-item question-modal-body-item-unselect"
+								<view v-show="item.choicesType == subItem.value">
+									<!-- 未作答 -->
+									<view v-if="item.tempAnswer == ''"
+										class="question-modal-body-item question-modal-body-item-unselect"
 										@click="handleJumpSwiper(index)">
 										{{index + 1 }}
 									</view>
-									<!-- <u-line color="red" border-style="info"></u-line> -->
+									<!-- 回答正确 -->
+									<view v-else-if='item.tempAnswer == item.answer'
+										class="question-modal-body-item question-modal-body-item-right"
+										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
+									<!-- 回答错误 -->
+									<view v-else-if='item.tempAnswer != item.answer'
+										class="question-modal-body-item question-modal-body-item-failed"
+										@click="handleJumpSwiper(index)">{{index + 1 }}</view>
 								</view>
 							</template>
 						</view>
 					</template>
 				</scroll-view>
 				<view class="question-modal-foot" id="questionHeader">
-					<view v-if="!isReviewed" class="ansBlock">
-						<view class="blockItem">
-							<view class="block-ansed"></view>
-							<view class="">已答</view>
-						</view>
-						<view class="blockItem">
-							<view class="block-unansed"></view>
-							<view class="">未答</view>
-						</view>
-					</view>
 
-					<view v-else class="ansBlock">
+					<view class="ansBlock">
 						<view class="blockItem">
 							<view class="block-right"></view>
 							<view class="">答对</view>
@@ -231,10 +165,11 @@
 							<view class="">答错</view>
 						</view>
 						<view class="blockItem">
-							<view class="block-unScored"></view>
-							<view class="">未评分</view>
+							<view class="block-unansed"></view>
+							<view class="">未答</view>
 						</view>
 					</view>
+
 				</view>
 			</view>
 		</modal>
@@ -250,7 +185,6 @@
 			return {
 				isreadOnly: true,
 				quesModules: [],
-				areaText: ``, //保存简答题答案
 				judgeArr: [{
 						name: '正确',
 						value: '1'
@@ -309,14 +243,14 @@
 			}
 		},
 		watch: {
+
 			// 监听currentIndex的变化,改变则提交答案 相同
 			currentIndex(newVal, oldVal) {
 				let that = this
-				if (!this.isReviewed) {
-					// 对各题型的答案进行处理
-					switch (that.questionList[oldVal].template) {
+				// 对各题型的答案进行处理
+				if (that.questionList[oldVal].selectedFlag) {
+					switch (that.questionList[oldVal].choicesType) {
 						case 0:
-							// 选择题
 							break;
 						case 1:
 							// 多选题
@@ -326,51 +260,9 @@
 						case 2:
 							// 判断题
 							break;
-						case 4:
-							// 填空题
-							that.questionList[oldVal].tempAnswer = that.questionList[oldVal].blankArr.join(
-								'||~||') // 数组拼接为字符串
-							break;
-						case 5:
-							that.questionList[oldVal].tempAnswer = JSON.stringify(that.areaText)
-							// console.log('000:',that.questionList[oldVal].tempAnswer);
-							break;
+
 						default:
 					}
-
-					if (this.examType == 'exam') {
-						// 保存答案
-						var answerObj = {
-							examRecordId: this.questionList[oldVal].recordId,
-							paperQueId: this.questionList[oldVal].id,
-							answer: this.questionList[oldVal].tempAnswer,
-							template: this.questionList[oldVal].template
-						}
-
-						// 进行答题的api请求
-						console.log('answerObj:', oldVal, answerObj);
-						this.$api.answerExam(answerObj)
-							.then(res => {
-								console.log(res);
-							})
-					} else if (this.examType == 'paper' || this.examType == 'know') {
-						var answerObj = {
-							exerciseId: this.examDetail.exerciseId,
-							paperQueId: this.questionList[oldVal].id,
-							answer: this.questionList[oldVal].tempAnswer,
-							template: this.questionList[oldVal].template
-						}
-
-						// 进行答题的api请求
-						console.log('answerObj:', oldVal, answerObj);
-						this.$api.answerPaper(answerObj)
-							.then(res => {
-								console.log(res);
-							})
-					} else {
-						return
-					}
-					// immediate: true,
 				}
 			}
 		},
@@ -378,7 +270,6 @@
 			// swiperHeight(){
 			// 	uni.getSystemInfo({
 			// 		success(res) {
-			// 			console.log(res);
 			// 			return res.windowHeight+'px'
 			// 		}
 			// 	})
@@ -387,7 +278,6 @@
 				return this.$store.state.examDetail
 			},
 			questionList() {
-				console.log(this.$store.state.questionList, 77777)
 				return this.$store.state.questionList
 			},
 			queTypeStore() {
@@ -397,8 +287,7 @@
 				return this.questionList.length - 1
 			},
 			answerStatusName() {
-				console.log(this.questionList[this.currentIndex].template, 63636636366)
-				switch (this.questionList[this.currentIndex].template) {
+				switch (this.questionList[this.currentIndex].choicesType) {
 					case 0:
 						return '单选题'
 						break;
@@ -420,14 +309,6 @@
 			}
 		},
 		props: {
-			isReviewed: {
-				type: Boolean,
-				default: false
-			},
-			examType: {
-				type: String,
-				default: "exam"
-			},
 			duration: {
 				type: [String, Number],
 				default: 300
@@ -436,15 +317,18 @@
 		mounted() {
 			var that = this
 			this.setAnswerHeight()
-			if ((!this.isReviewed) && ((this.examType == 'paper') || (this.examType == 'course'))) {
-				this.$refs.myClock.start();
-			}
+
 		},
 		components: {
 			Modal,
 			clock
 		},
 		methods: {
+			exitExam() {
+				uni.redirectTo({
+					url: '/pages/exam/startexam'
+				});
+			},
 			/*设置题目的高度*/
 			setAnswerHeight() {
 				let that = this
@@ -452,15 +336,14 @@
 				uni.getSystemInfo({
 					//获取手机屏幕高度信息,让swiper的高度和手机屏幕一样高                
 					success: function(res) {
-						console.log(res, '010101010')
 						tempHeight = res.windowHeight;
 						that.modalHeight = res.windowHeight - uni.upx2px(200) + 'px';
-						that.modalContentHeight = res.windowHeight - uni.upx2px(380) + 'px';
+
+						that.modalContentHeight = res.windowHeight - uni.upx2px(360) + 'px';
 						uni.createSelectorQuery().in(that).select("#header").fields({
 							size: true,
 							scrollOffset: true
 						}, (data) => {
-							console.log('data', data);
 							tempHeight -= data.height;
 							uni.createSelectorQuery().in(that).select("#subHeader").fields({
 								size: true,
@@ -505,10 +388,6 @@
 					this.handleSubmit(0)
 				}, 2000)
 			},
-			textInput(e) {
-				this.areaText = e.detail.value
-				// console.log(e.detail.value)
-			},
 			/* 滑动题目 */
 			handleSwiperChanged(event) {
 				this.currentIndex = event.detail.current
@@ -520,62 +399,79 @@
 				// 进行翻页
 				if ((this.currentIndex > min && operation < 0) || (this.currentIndex < max && operation > 0)) {
 					this.currentIndex += operation
-					// console.log(this.currentIndex)
 				}
 			},
 			/* 选择答案(单选)*/
 			chooseSolution(item, subItem) {
-				if (!this.isReviewed) {
-					// tempAnswer为学生答案
-					item.tempAnswer = subItem.optLetter
-					// 强制刷新更新视图
-					this.$forceUpdate()
-					// this.questionList[this.currentIndex].tempAnswer = subItem.optLetter
-					if (this.currentIndex < this.max) {
-						setTimeout(() => {
-							this.currentIndex += 1
-						}, 300)
-					}
-					// this.onAnswerChange(item)
+				// tempAnswer为学生答案
+				item.tempAnswer = subItem.optionName
+				item.selectedFlag = true
+				if (item.tempAnswer == item.answer) item.correctOrError = true
+				// 强制刷新更新视图
+				this.$forceUpdate()
+				if (this.currentIndex < this.max) {
+					setTimeout(() => {
+						this.currentIndex += 1
+					}, 300)
 				}
 			},
 			/* 选择答案(多选)*/
 			chooseMutiSolution(item, subItem) {
-				if (!this.isReviewed) {
-					let answerIndex = item.dualChooseArr.indexOf(subItem.optLetter)
-					if (answerIndex > -1) {
-						// 该选项已经在数组中了
-						item.dualChooseArr.splice(answerIndex, 1)
-					} else {
-						// 该选项不在数组中
-						item.dualChooseArr.push(subItem.optLetter)
-					}
-					item.tempAnswer = item.dualChooseArr.join(',')
-					// this.onAnswerChange(answerIndex)
-					// 强制刷新更新视图
-					this.$forceUpdate()
+				let answerIndex = item.dualChooseArr.indexOf(subItem.optionName)
+				if (answerIndex > -1) {
+					// 该选项已经在数组中了
+					item.dualChooseArr.splice(answerIndex, 1)
+				} else {
+					// 该选项不在数组中
+					item.dualChooseArr.push(subItem.optionName)
+				}
+				item.tempAnswer = item.dualChooseArr.join(',')
+				// 强制刷新更新视图
+
+			},
+			// 多选题中的答案确认
+			confirm(item) {
+				let one = item.answer.split(',')
+				let two = item.tempAnswer.split(',')
+				let flag = true
+				if (one.length == two.length) {
+
+					one.forEach((item) => {
+						if (two.indexOf(item) == -1) {
+							flag = false
+							return
+						}
+					})
+				} else {
+					flag = false
+				}
+
+
+				item.selectedFlag = true
+
+				if (flag != false) item.correctOrError = true
+
+				this.$forceUpdate()
+
+				if (this.currentIndex < this.max) {
+					setTimeout(() => {
+						this.currentIndex += 1
+					}, 300)
 				}
 			},
 			/* 判断题答案 */
 			judgeSolution(item, value) {
-				if (!this.isReviewed) {
-					// tempAnswer为学生答案
-					item.tempAnswer = value
-					// 强制刷新更新视图
-					this.$forceUpdate()
-					if (this.currentIndex < this.max) {
-						setTimeout(() => {
-							this.currentIndex += 1
-						}, 300)
-					}
-					// this.onAnswerChange(item)
+				// tempAnswer为学生答案
+				item.tempAnswer = value
+				item.selectedFlag = true
+				if (item.tempAnswer == item.answer) item.correctOrError = true
+				// 强制刷新更新视图
+				this.$forceUpdate()
+				if (this.currentIndex < this.max) {
+					setTimeout(() => {
+						this.currentIndex += 1
+					}, 300)
 				}
-			},
-
-			/* 题目答案变化 */
-			onAnswerChange(item) {
-				let result = JSON.parse(JSON.stringify(item))
-				this.$emit('onChange', item)
 			},
 			/* 交卷  相同 */
 			handleSubmit(submitORimeEnd) {
@@ -592,97 +488,82 @@
 				} else {
 					this.$emit('timeEnd')
 				}
-			},
-
-			// 点击编辑笔记
-			editBtnFunc(item) {
-				if (item.theoryExamAnswer.id == undefined) {
-					this.$refs.uToast.show({
-						title: '未作答的题目不可编辑笔记!',
-						type: 'error',
-						// url: '/pages/user/index'
-					})
-					return
-				}
-				this.isreadOnly = !this.isreadOnly
-				this.eidtOrFinishValue = '完成'
-			},
-			// 完成编辑
-			finishBtnFunc(item) {
-				var that = this
-				this.isreadOnly = !this.isreadOnly
-				this.eidtOrFinishValue = '编辑笔记'
-				console.log('保存笔记内容', item, that.editorText);
-				this.$api.examNote(item.theoryExamAnswer.id, that.editorText)
-					.then(res => {
-						console.log('更新笔记成功', res)
-					})
-			},
-			updateEditorText(text) {
-				// 从子组件获取输入框输入内容
-				this.editorText = text
-			},
+			}
 		}
 	}
 </script>
 
 <style lang="scss">
+	.slot-wrap-right {
+		position: absolute;
+		top: 0;
+		left: auto;
+		right: 10px;
+		bottom: 0;
+		margin: auto;
+		color: #fff;
+		letter-spacing: 4rpx;
+		/* 如果您想让slot内容占满整个导航栏的宽度 */
+		/* flex: 1; */
+		/* 如果您想让slot内容与导航栏左右有空隙 */
+		/* padding: 0 30rpx; */
+	}
+
 	page {
 		background-color: #FFFFFF;
 	}
 
 	#header,
 	#subHeader {
-		height: 100rpx;
+		width: 100%;
+		height: 88rpx;
+		line-height: 88rpx;
 	}
 
 	.header {
-		width: 750rpx;
-		// position: fixed;
-		margin-top: 30rpx;
 		position: relative;
 		text-align: center;
-		line-height: 100rpx;
-		font-size: 36rpx;
-		font-weight: 600;
-		color: #103289;
-		letter-spacing: 10rpx;
-		background-color: #FFFFFF;
-
-		&-button {
-			width: 80rpx;
-			height: 40rpx;
-			line-height: 40rpx;
-			position: absolute;
-			top: 20rpx;
-			right: 40rpx;
-			padding: 10rpx 20rpx;
-			border-radius: 15rpx;
-			letter-spacing: 2rpx;
-			font-weight: 500;
-			color: #FFFFFF;
-			background-color: #103289;
-		}
-
-		.scoreText {
-			color: #00b060;
-			font-size: 35rpx;
-		}
+		letter-spacing: 2rpx;
 	}
 
 	.sub-header {
-		width: 750rpx;
+
 		// position: fixed;
 		// margin-top: 130rpx;
-		padding: 30rpx 20rpx;
+		padding: 0 20rpx;
 		display: flex;
 		align-items: center;
 		justify-content: space-between;
 		color: #000;
-		font-size: 33rpx;
+		font-size: 32rpx;
 		font-weight: bold;
 		background-color: #FFFFFF;
 	}
+
+	.footer {
+		width: 100%;
+		height: 88rpx;
+		padding: 30rpx 20rpx;
+		position: fixed;
+		bottom: 0;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		font-size: 30rpx;
+		box-sizing: border-box;
+		color: #4c8af3;
+		box-shadow: 0 0 5px 1px #eee;
+		background-color: #FFFFFF;
+
+		&-card {
+			padding: 10rpx 20rpx;
+			border: 1px solid #103289;
+			border-radius: 15rpx;
+			color: #FFFFFF;
+			background-color: #103289;
+		}
+	}
+
 
 	.content {
 		// margin-top: 130rpx;
@@ -808,58 +689,17 @@
 
 		.explain {
 			border-top: solid #999999 1px;
-			padding-top: 10rpx;
+			padding: 10rpx;
 			font-size: 28rpx;
 			color: #666666;
-
-			.explainResult {
-				color: #103289;
-			}
-
-			.explain-title {
-				font-weight: bold;
-			}
-
-			.noteArea {
-				border-top: 2rpx solid #103289;
-				padding-top: 10rpx;
-
-				// background-color: #0077AA;
-				.noteAreaTitle {
-					display: flex;
-					justify-content: space-between;
-				}
-			}
 		}
+
 	}
 
-	.footer {
-		width: 750rpx;
-		height: 100rpx;
-		padding: 30rpx 20rpx;
-		position: fixed;
-		bottom: 0;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		font-size: 30rpx;
-		box-sizing: border-box;
-		color: #4c8af3;
-		box-shadow: 0 0 5px 1px #eee;
-		background-color: #FFFFFF;
-
-		&-card {
-			padding: 10rpx 20rpx;
-			border: 1px solid #103289;
-			border-radius: 15rpx;
-			color: #FFFFFF;
-			background-color: #103289;
-		}
-	}
 
 	.question-modal {
 		width: 700rpx;
-		padding: 40rpx;
+		padding: 0 40rpx;
 		background-color: #FFFFFF;
 
 		&-header {
@@ -926,11 +766,10 @@
 		}
 
 		.question-modal-foot {
-			height: 100rpx;
+			height: 40rpx;
 			border-top: 1rpx solid #F0F0F0;
 			// position: fixed;
 			// margin-bottom: 0rpx;
-			margin-top: -60rpx;
 
 			.ansBlock {
 				display: flex;
@@ -943,46 +782,31 @@
 					margin: 20rpx;
 				}
 
-				.block-ansed {
-					width: 80rpx;
-					height: 80rpx;
-					border-radius: 50%;
-					background: #103289;
-					margin: 0 10rpx;
-				}
-
-				.block-unansed {
-					width: 80rpx;
-					height: 80rpx;
-					border-radius: 50%;
-					// border: solid #ffffff 1px;
-					background: #bbbbbb;
-					margin: 0 10rpx;
-				}
-
 				.block-right {
-					width: 80rpx;
-					height: 80rpx;
+					width: 40rpx;
+					height: 40rpx;
 					border-radius: 50%;
 					background: #39b54a;
 					margin: 0 10rpx;
 				}
 
 				.block-wrong {
-					width: 80rpx;
-					height: 80rpx;
+					width: 40rpx;
+					height: 40rpx;
 					border-radius: 50%;
 					background: #982121;
 					margin: 0 10rpx;
 				}
 
-				.block-unScored {
-					width: 80rpx;
-					height: 80rpx;
+				.block-unansed {
+					width: 40rpx;
+					height: 40rpx;
 					border-radius: 50%;
-					background: #ff9f73;
+					// border: solid #ffffff 1px;
+					background: #bbbbbb;
 					margin: 0 10rpx;
 				}
+
 			}
 
 		}
diff --git a/pages.json b/pages.json
index 5a8874d..14ad3b7 100644
--- a/pages.json
+++ b/pages.json
@@ -648,8 +648,8 @@
 			}
 		},
 		{
-			"path": "pages/exam/examReviewPage",
-			"name": "examReviewPage",
+			"path": "pages/exam/examResultPage",
+			"name": "examResultPage",
 			"style": {
 				"navigationStyle": "custom",
 				"navigationBarTitleText": "",
diff --git "a/pages/business/business - \345\211\257\346\234\254.vue" "b/pages/business/business - \345\211\257\346\234\254.vue"
new file mode 100644
index 0000000..3b48f0a
--- /dev/null
+++ "b/pages/business/business - \345\211\257\346\234\254.vue"
@@ -0,0 +1,30 @@
+<template>
+	<view class="container">
+		<u-empty text="功能研发中" mode="favor" margin-top="400"></u-empty>
+		<!-- 底部导航条 -->
+		<u-tabbar :list="tabbar" :mid-button="false"></u-tabbar>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				tabbar: this.$store.state.tabbar,
+			};
+		},
+		onLoad() {
+
+		},
+		mounted() {
+			
+		},
+		methods: {
+	
+		}
+	};
+</script>
+
+<style lang="scss">
+
+</style>
diff --git a/pages/exam/examResultPage.vue b/pages/exam/examResultPage.vue
new file mode 100644
index 0000000..3648fbf
--- /dev/null
+++ b/pages/exam/examResultPage.vue
@@ -0,0 +1,126 @@
+<template>
+	<view class="content">
+
+		<u-navbar height="44" back-icon-color="#fff" title="考试结果" :is-back="false" title-color="#fff"
+			:background="{background: '#103289'}">
+		</u-navbar>
+
+		<view class="finishText">
+			<view class="box">
+				<text class="title">考试名称:</text>
+				<text class="val">模拟考试</text>
+			</view>
+			<view class="box">
+				<text class="title">总题数:</text>
+				<text class="val">{{totalQueNum}}题</text>
+			</view>
+			<view class="box">
+				<text class="title">答对:</text>
+				<text class="val">{{rightQueNum}}题</text>
+			</view>
+			<view class="box">
+				<text class="title">答错:</text>
+				<text class="val">{{wrongQueNum}}题</text>
+			</view>
+			<view class="box">
+				<text class="title">未答:</text>
+				<text class="val">{{noneQueNum}}题</text>
+			</view>
+			<view class="box">
+				<text class="title">得分:</text>
+				<text class="val">{{score}}分</text>
+			</view>
+		</view>
+
+		<view class="btnArea">
+			<u-button class="btnClass" type="primary" :ripple="true" shape="circle" @click="backToHome">返回首页
+			</u-button>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {},
+		data() {
+			return {
+				totalQueNum: '',
+				rightQueNum: '',
+				wrongQueNum: '',
+				noneQueNum: '',
+				score: '',
+
+			}
+		},
+		methods: {
+			backToHome() {
+				uni.switchTab({
+					url: '/pages/home/home',
+				})
+			}
+		},
+		computed: {
+
+		},
+		onLoad(options) {
+			console.log(options, 77777)
+			this.totalQueNum = options.totalQueNum
+			this.rightQueNum = options.rightQueNum
+			this.wrongQueNum = options.wrongQueNum
+			this.noneQueNum = options.noneQueNum
+			this.score = options.score
+		}
+
+	}
+</script>
+
+<style lang="scss" scoped>
+	.finishText {
+		// margin: 100rpx 200rpx;
+		margin: 50rpx 10%;
+		padding: 5%;
+		width: 80%;
+		font-size: 32rpx;
+		display: flex;
+		flex-direction: column;
+		background: #f8f8f8;
+		box-shadow: 0 0 20px 2px #dddddd;
+		border-radius: 5px;
+		letter-spacing: 0.2rpx;
+		
+		text {
+			color: #103289;
+			font-weight: bold;
+		}
+		
+		.box {
+			flex: 1;
+			display: flex;
+			
+			.title {
+				flex: 1;
+				text-align-last: justify;
+			}
+				
+			.val {
+				flex: 1;
+			}
+		}
+	}
+
+	.btnArea {
+		display: flex;
+		margin-top: 50rpx;
+
+		.btnClass {
+			width: 300rpx;
+		}
+	}
+
+	.infoArea {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+</style>
diff --git a/pages/exam/examReviewPage.vue b/pages/exam/examReviewPage.vue
deleted file mode 100644
index b85b304..0000000
--- a/pages/exam/examReviewPage.vue
+++ /dev/null
@@ -1,199 +0,0 @@
-<template>
-	<view>
-		<nav-bar-sub></nav-bar-sub>
-		<!-- 用于提示是否确认退出考试 -->
-		<!-- <u-modal v-model="show" :content="content" :show-cancel-button="true" @confirm="handleConfirm"></u-modal> -->
-		<!-- 渲染题目 -->
-		<Answer :isReviewed='isReview' examType="exam" @submit='handleCommit' @timeEnd='handleConfirm'
-			@onChange='onChange'></Answer>
-	</view>
-
-</template>
-
-<script>
-	import Answer from '@/components/dyw-answer/answer.vue';
-	export default {
-		data() {
-			return {
-				// show: false,
-				// content: '是否确认交卷',
-				isReview: true,
-				confirmSubmitContent: '',
-				questionList: [],
-				examType: '', //考试类型
-			}
-		},
-		onLoad(option) {
-			var that = this
-			this.$api.checkGrade(option.recordId)
-				.then(res => {
-					console.log(res.values);
-					that.$store.state.examDetail = res.values
-					var quesModules = res.values.modules
-					// 提取出所有的题目
-					for (let i = 0; i < quesModules.length; i++) {
-						for (let j = 0; j < quesModules[i].questions.length; j++) {
-							// 解决theoryExamAnswer可能为null的问题,把它赋值为字符串
-							if (quesModules[i].questions[j].theoryExamAnswer == null) {
-								quesModules[i].questions[j].unAnswered = true //标记此题未答
-							}
-							quesModules[i].questions[j].template = quesModules[i].template //防止template初始值是null
-							quesModules[i].questions[j].tempAnswer = ''
-							quesModules[i].questions[j].rightAnswer = ''
-							// quesModules[i].questions[j].recordId = that.$store.state.examDetail.recordId //搬移recordId的位置
-							// 遍历选项得出正确答案和用户答案
-							if (quesModules[i].questions[j].template == 1 || quesModules[i].questions[j].template ==
-								2) {
-								// 单选题与多选题
-								if (quesModules[i].questions[j].unAnswered) {
-									quesModules[i].questions[j].theoryExamAnswer = {
-										optAnswer: "未作答"
-									}
-								}
-
-								// 用户答案
-								quesModules[i].questions[j].tempAnswer = quesModules[i].questions[j]
-									.theoryExamAnswer.optAnswer
-
-								// 赋值选择题正确答案
-								for (let k = 0; k < quesModules[i].questions[j].options.length; k++) {
-									// 获取选择题的正确答案
-									if (quesModules[i].questions[j].options[k].optAnswer == 1) {
-										if (quesModules[i].questions[j].rightAnswer == '') {
-											quesModules[i].questions[j].rightAnswer = quesModules[i].questions[j]
-												.options[k].optLetter
-										} else {
-											quesModules[i].questions[j].rightAnswer += ',' + quesModules[i]
-												.questions[j].options[k].optLetter
-										}
-									}
-								}
-
-								// 判断题目错选了哪一项
-								var rightArr = quesModules[i].questions[j].rightAnswer.split(',')
-								var userArr = quesModules[i].questions[j].tempAnswer.split(',')
-								quesModules[i].questions[j].wrongArr = [] // 保存选中的错误的选项
-
-								for (var item of userArr) {
-									// 用户的该答案不在正确答案数组在
-									if (rightArr.indexOf(item) < 0) {
-										quesModules[i].questions[j].wrongArr.push(item)
-									}
-								}
-
-							} else if (quesModules[i].questions[j].template == 3) {
-								// 3.判断题
-								quesModules[i].questions[j].wrongArr = ''
-								if (quesModules[i].questions[j].unAnswered) {
-									quesModules[i].questions[j].theoryExamAnswer = {
-										optAnswer: "未作答"
-									}
-								}
-								// 题目已经作答 获取用户判断题答案 0错误 1正确
-								quesModules[i].questions[j].tempAnswer = quesModules[i].questions[j]
-									.theoryExamAnswer.optAnswer
-
-								// 为判断题的答案赋值
-								if (quesModules[i].questions[j].options[0].optAnswer == 0) {
-									quesModules[i].questions[j].rightAnswer = "错误"
-								} else {
-									quesModules[i].questions[j].rightAnswer = "正确"
-								}
-								
-								// 判断题目错选了哪一项
-								if (quesModules[i].questions[j].tempAnswer != quesModules[i].questions[j].options[0]
-									.optAnswer) {
-									quesModules[i].questions[j].wrongArr = quesModules[i].questions[j].tempAnswer
-								}
-
-							} else if (quesModules[i].questions[j].template == 4) {
-								// 4.填空题
-								if (!quesModules[i].questions[j].unAnswered) {
-									// 题目已经作答 获取用户填空题答案
-									quesModules[i].questions[j].blankArr = quesModules[i].questions[j]
-										.theoryExamAnswer
-										.shortAnswer.split("||~||")
-										quesModules[i].questions[j].blankString = quesModules[i].questions[j].blankArr.join(',')
-								} else {
-									// 题目未作答
-									quesModules[i].questions[j].blankArr = [] //新建blankArr属性,临时保存填空题答案
-									quesModules[i].questions[j].blankString = '' //新建blankArr属性,临时保存填空题答案
-									quesModules[i].questions[j].theoryExamAnswer = {}
-									for (let m = 0; m < quesModules[i].questions[j].options.length; m++) {
-										quesModules[i].questions[j].theoryExamAnswer.shortAnswer += "暂未作答||~||"
-									}
-								}
-
-								// 为填空题附上正确答案
-								for (let k = 0; k < quesModules[i].questions[j].options.length; k++) {
-									// 把null赋值为空字符串
-									if (quesModules[i].questions[j].rightAnswer == '') {
-										quesModules[i].questions[j].rightAnswer = quesModules[i].questions[j]
-											.options[
-												k].optContent
-									} else {
-										quesModules[i].questions[j].rightAnswer += ',' + quesModules[i].questions[
-												j]
-											.options[k].optContent
-									}
-								}
-							} else {
-								// 5.简答题
-								if (!quesModules[i].questions[j].unAnswered) {
-									// 题目已经作答 获取用户的简答题答案
-									quesModules[i].questions[j].tempAnswer = quesModules[i].questions[j]
-										.theoryExamAnswer
-										.shortAnswer
-								} else {
-									quesModules[i].questions[j].theoryExamAnswer = {}
-									quesModules[i].questions[j].theoryExamAnswer.shortAnswer = "暂未作答"
-								}
-
-								// 正确答案
-								quesModules[i].questions[j].rightAnswer = quesModules[i].questions[j].queAnswer
-							}
-							that.questionList.push(quesModules[i].questions[j])
-						}
-					}
-					that.$store.state.questionList = that.questionList
-					console.log('questionList:', that.questionList);
-				})
-			console.log('考题列表:', this.questionList);
-		},
-		components: {
-			Answer
-		},
-		methods: {
-			/* 提交答案 显示再次确认*/
-			handleCommit(questionList) {
-				// 显示是否确认交卷
-				this.show = true;
-			},
-
-			// 已确认进行答案提交
-			handleConfirm() {
-				// uni.setStorageSync('questionList', questionList)
-				// 进行交卷的api请求
-				this.$api.commitExam(this.$store.state.examDetail.exam.id, this.$store.state.examDetail.recordId)
-					.then(res => {
-						console.log('交卷:', res);
-					})
-
-				uni.redirectTo({
-					url: '/pages/exam/examResultPage',
-				})
-			},
-			/* 题目答案变化
-			 */
-			onChange(answer) {
-				console.log(answer)
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		background-color: #FFFFFF;
-	}
-</style>
diff --git a/pages/exam/examTextPage.vue b/pages/exam/examTextPage.vue
index a21fcf4..316e990 100644
--- a/pages/exam/examTextPage.vue
+++ b/pages/exam/examTextPage.vue
@@ -5,8 +5,7 @@
 		<u-modal v-model="show" :content="content" :show-cancel-button="true" @confirm="handleConfirm"></u-modal>
 
 		<!-- 渲染题目 -->
-		<Answer :isReviewed='isReview' :examType="examType" @submit='handleCommit' @timeEnd='handleConfirm'
-			@onChange='onChange'></Answer>
+		<Answer @submit='handleCommit' @timeEnd='handleConfirm' @onChange='onChange'></Answer>
 
 		<u-toast ref="uToast" />
 	</view>
@@ -15,7 +14,8 @@
 <script>
 	import Answer from '@/components/dyw-answer/answer.vue';
 	import {
-		enterExam
+		enterExam,
+		submitExam
 	} from '@/common/api/exam'
 	import {
 		ModifyQuesList
@@ -25,88 +25,36 @@
 			return {
 				show: false,
 				content: '是否确认交卷',
-				isReview: false,
 				questionList: [],
-				examType: 'exam', //考试类型
 			}
 		},
 		onLoad(option) {
+			this.$store.state.questionList = []
 
-			this.examType = option.examType
-			
 			var that = this
-			if (option.examType == 'exam') {
-				// 理论考试
-				enterExam({
-					idCardNo: option.id
-				}).then(res => {
-					var examObj = res.data.data.simulateExamRecord
+			// 理论考试
+			enterExam({
+				idCardNo: option.id
+			}).then(res => {
+				var examObj = res.data.data.simulateExamRecord
 
-					examObj.exam = {
-						name: '测试考试',
-						examScore: 100,
-						examTime: res.data.data.simulateExamRecord.answerTime,
-						checkFace: 1,
-						...option
-					}
-					
-					
+				examObj.exam = {
+					name: '模拟考试',
+					examScore: 100,
+					examTime: res.data.data.simulateExamRecord.answerTime,
+					checkFace: 1,
+					...option
+				}
 
-					examObj.exam.totalQuestion = res.data.data.examSubjectInfo.length
-					examObj.totalQuestion = res.data.data.examSubjectInfo.length
-					that.$store.state.examDetail = examObj
+				examObj.exam.totalQuestion = res.data.data.examSubjectInfo.length
+				examObj.totalQuestion = res.data.data.examSubjectInfo.length
+				that.$store.state.examDetail = examObj
 
-					// 提取出所有的题目
-					ModifyQuesList(res.data.data.examSubjectInfo)
-				})
-			} else if (option.examType == 'paper') {
-				// 模拟考试
-				this.$api.paperStart(option.paperId)
-					.then(res => {
-						console.log('paperStart:', res);
-						that.$store.state.examDetail = res.values
-						console.log('paper examDetail:', res.values);
-						var quesModules = res.values.modules
-						that.$api.ModifyQuesList(quesModules)
-						console.log(that.$store.state.pracDetail);
-						console.log(that.$store.state.pracQuesList);
-					})
-			} else if (option.examType == 'know') {
-				// 知识点练习
-				const knowSearch = JSON.parse(decodeURIComponent(option.knowSearch));
-				console.log(knowSearch);
-				this.$api.startKnow(knowSearch)
-					.then(res => {
-						if (res.status == 1) {
-							// 获取知识点失败
-							this.$refs.uToast.show({
-								title: res.message,
-								type: 'error',
-								// icon: false,
-								url: '/pages/exam/pracIndexKnow'
-							})
-						} else {
-							console.log('开始知识点练习的请求结果:', res);
-							that.$store.state.examDetail = res.values
-							var quesModules = res.values.modules
-							that.$api.ModifyQuesList(quesModules)
-							console.log(that.$store.state.pracDetail);
-							console.log(that.$store.state.pracQuesList);
-						}
-					})
-			} else if (option.examType == 'course') {
-				this.$api.startTheory(that.$store.state.access_token, option.paperId)
-					.then(res => {
-						that.$store.state.examDetail = res.values
-						var quesModules = res.values.modules
-						that.$api.ModifyQuesList(quesModules)
-					})
-			} else {
-				console.log("考试类型错误,请输入正确的类型");
-				// return false
-			}
+				that.$store.state.paperDetail = res.data.data.simulateExamRecord
+				// 提取出所有的题目
+				ModifyQuesList(res.data.data.examSubjectInfo)
+			})
 
-			console.log('考题列表:', this.questionList);
 		},
 		components: {
 			Answer
@@ -120,52 +68,58 @@
 
 			// 已确认进行答案提交
 			handleConfirm() {
-				// 进行交卷的api请求
 				let that = this
-				if (this.examType == 'exam') {
-					this.$api.commitExam(this.$store.state.examDetail.exam.id, this.$store.state.examDetail.recordId)
-						.then(res => {
-							console.log('交卷:', res);
-							that.$u.route('/pages/exam/examResultPage', {
-								recordId: that.$store.state.examDetail.recordId,
-								examType: 'exam'
-							})
-						})
-				} else if ((this.examType == 'paper') || (this.examType == 'know')) {
-					this.$api.commitPaper(this.$store.state.examDetail.exerciseId)
-						.then(res => {
-							console.log('交卷:', res);
-							that.$u.route('/pages/exam/examResultPage', {
-								exerciseId: that.$store.state.examDetail.exerciseId,
-								examType: 'paper',
-							})
-						})
-				} else if (this.examType == 'store') {
-					this.$api.commitExam(this.$store.state.examDetail.exam.id, this.$store.state.examDetail.recordId)
-						.then(res => {
-							console.log('交卷:', res);
-							that.$u.route('/pages/exam/examResultPage', {
-								recordId: that.$store.state.examDetail.recordId,
-								examType: 'exam'
-							})
-						})
-				} else if (this.examType == 'course') {
-					this.$api.commitCourse(this.$store.state.access_token, this.$store.state.examDetail.exerciseId)
-						.then(res => {
-							console.log('交卷:', res);
-							that.$u.route('/pages/exam/examResultPage', {
-								exerciseId: that.$store.state.examDetail.exerciseId,
-								examType: 'course',
-							})
-						})
-				} else {
-					console.log("提交的考试类型出错");
+				let totalQueNum = 0
+				let rightQueNum = 0
+				let wrongQueNum = 0
+				let noneQueNum = 0
+				let score = 0
+
+				let sendData = {
+					simulateExamId: this.$store.state.paperDetail.id,
+					examResultVOS: []
 				}
+
+				this.$store.state.questionList.forEach(item => {
+					if (item.selectedFlag == true) {
+
+						let obj = {
+							subjectChoicesId: item.id,
+							value: item.tempAnswer,
+							grade: item.score
+						}
+
+						if (item.correctOrError == false) {
+							obj.grade = 0
+							wrongQueNum += 1
+						} else {
+							rightQueNum += 1
+							score += item.score
+						}
+
+						sendData.examResultVOS.push(obj)
+
+					} else {
+						noneQueNum += 1
+					}
+					totalQueNum += 1
+				})
+
+				// 进行交卷的api请求
+				that.$u.route('/pages/exam/examResultPage', {
+					recordId: that.$store.state.examDetail.recordId,
+					totalQueNum: totalQueNum,
+					rightQueNum: rightQueNum,
+					wrongQueNum: wrongQueNum,
+					noneQueNum: noneQueNum,
+					score: score
+				})
+
+				submitExam(sendData).then(res => {})
 			},
 			/* 题目答案变化
 			 */
 			onChange(answer) {
-				console.log(answer)
 			}
 		}
 	}
diff --git a/pages/exam/startexam.vue b/pages/exam/startexam.vue
index 2f669b1..741e7ad 100644
--- a/pages/exam/startexam.vue
+++ b/pages/exam/startexam.vue
@@ -13,15 +13,13 @@
 		<view class="tipsArea">
 			<ul>
 				<li>1、答题时要注意“剩余时间”提示,当剩余时间为0时,系统将自动交卷。</li>
-				<li>2、答题完成后,点击“我要交卷”按钮进行交卷,否则考试无效。</li>
-				<li>3、如果你准备好了,就点击“进入考场”吧,预祝取得好的成绩。</li>
+				<li>2、答题完成后,点击“交卷”按钮进行交卷,否则考试无效。</li>
+				<li>3、答题时需注意模拟考试不能修改答案。</li>
+				<li>4、如果你准备好了,就点击“进入考场”吧,预祝取得好的成绩。</li>
 			</ul>
 		</view>
 		<view class="btnArea">
-			<!-- checkFace==1 不需要人脸识别,checkFace==2 需要人脸识别 -->
-			<u-button v-if="needCheckFace==2 && !passFace " class="btnClass" type="primary" :ripple="true"
-				shape="circle" @click="checkFace">开始人脸识别</u-button>
-			<u-button v-if="needCheckFace==1 || passFace" class="btnClass" type="success" :ripple="true" shape="circle"
+			<u-button class="btnClass" type="success" :ripple="true" shape="circle"
 				@click="enterExam">进入考试</u-button>
 			<u-button class="btnClass" type="error" :ripple="true" shape="circle" @click="exitExam">退出考试</u-button>
 		</view>
@@ -33,86 +31,46 @@
 	export default {
 		data() {
 			return {
-				examItem: {},
-				examNote: `
-				1、答题时要注意“剩余时间”提示,当剩余时间为0时,系统将自动交卷。
-				2、答题完成后,点击“我要交卷”按钮进行交卷,否则考试无效。
-				3、如果你准备好了,就点击“进入考场”吧,预祝取得好的成绩。`,
-				passFace: false,
-
+				examItem: {}
 			}
 		},
 		methods: {
 			enterExam() {
 				// 进入考试
-				// uni.navigateTo({
-				// 	url: '/pages/exam/examTextPage'
-				// })
-
 				this.$u.route('/pages/exam/examTextPage', {
 					id: this.examItem.id,
 					examType: 'exam',
 				})
-
 			},
 			exitExam() {
 				// 退出考试
 				uni.navigateBack({
 					delta: 1
 				})
-			},
-			checkFace() {
-				var that = this
-				this.$api.uploadImg2('face')
-					.then(res => {
-						console.log('faceRes', res)
-						if (res.data.indexOf('操作成功') >= 0) {
-							this.passFace = true
-						}
-					})
-			},
+			}
 		},
 		computed: {
-			needCheckFace: function() {
-				// checkFace==1 不需要人脸识别,checkFace==2 需要人脸识别
-				// H5 平台不需要检测人脸
-				// #ifdef  H5 
-				return 1
-				// #endif
-
-				// #ifdef APP-PLUS || MP-WEIXIN
-				return this.examItem.checkFace
-				// #endif
-			}
 		},
 		onLoad(options) {
 			// 页面跳转 传递对象 传对象
 			options = {
 				id: '360198198812130014',
-				name: '测试考试',
+				name: '保安员模拟考试',
 				examScore: 100,
-				examTime: 90,
+				examTime: 60,
 				checkFace: 1
 			}
 			this.examItem = options
-			console.log("考试信息:", this.examItem);
-
 		}
 	}
 </script>
 
 <style lang="scss">
-	page {
-		font-size: 31rpx;
-
-		ul li {
-			list-style: none;
-		}
-	}
-
 	.tipsArea {
 		padding: 0 40rpx;
 		margin-left: -30rpx;
+		line-height: 64rpx;
+		
 	}
 
 	.subTitle {
@@ -124,19 +82,12 @@
 	}
 
 	.examContent {
-		line-height: 50rpx;
+		line-height: 56rpx;
 		margin-left: 180rpx;
 
 		text {
 			font-weight: bold;
 		}
-	}
-
-	ol {
-		// padding: 80rpx;
-		// background-color: #0077AA;
-		margin: 0 30rpx;
-		line-height: 50rpx;
 	}
 
 	.btnArea {
diff --git a/store/state.js b/store/state.js
index db93dc9..1ebdbd6 100644
--- a/store/state.js
+++ b/store/state.js
@@ -4,6 +4,7 @@
 const state = {
 	examDetail: {}, // 考试详情
 	questionList: [], // 考试考题列表
+	paperDetail: {},
 	queTypeArr:[0,0,0,0,0],
 	loging: false,
 	message: {

--
Gitblit v1.9.3