This commit is contained in:
2023-08-21 09:10:50 +08:00
parent a90c28f6fd
commit 7c54101dd6
12 changed files with 272 additions and 101 deletions

View File

@@ -15,18 +15,20 @@
</view>
<view class="flex m14lr ai-c mt20" v-for="(item,index) in quesItem.optionList"
:key="item.op" @tap="answerQues(item.opValue,index)">
<template
v-if="quesItem.clickAnswer&&quesItem.trueAnswer.includes(item.opValue)">
<u-icon class="mr15" name="checkmark-circle-fill" color="#05C341" size="32"></u-icon>
</template>
<template
v-else-if="quesItem.clickAnswer&&quesItem.clickAnswer.includes(item.opValue)&&!quesItem.trueAnswer.includes(item.opValue)">
<u-icon class="mr15" name="close-circle-fill" color="red" size="32"></u-icon>
</template>
<template v-else-if="!item.chooseOption">
<view class="option_item">{{item.op}}</view>
</template>
<text class="fs18">{{item.opDesc}}</text>
<template v-if="item.opDesc">
<template
v-if="quesItem.clickAnswer&&quesItem.trueAnswer.includes(item.opValue)">
<u-icon class="mr15" name="checkmark-circle-fill" color="#05C341" size="32"></u-icon>
</template>
<template
v-else-if="quesItem.clickAnswer&&quesItem.clickAnswer.includes(item.opValue)&&!quesItem.trueAnswer.includes(item.opValue)">
<u-icon class="mr15" name="close-circle-fill" color="red" size="32"></u-icon>
</template>
<template v-else-if="!item.chooseOption">
<view class="option_item">{{item.op}}</view>
</template>
<text class="fs18">{{item.opDesc}}</text>
</template>
</view>
<view class="m14lr mt30"
v-if="quesItem.clickAnswer&&!quesItem.trueAnswer.includes(quesItem.clickAnswer) || tCurrent===1">
@@ -43,7 +45,7 @@
<view style="width: 220rpx;">
<button v-if="type==='practice'" class="btn">四步学科一</button>
<view v-else class="btn" style="text-align: center;" @tap="submitPaper">
<u-count-down ref="countDown_1" :time="1 * 60 * 60 * 1000" format="HH:mm:ss"></u-count-down>
<u-count-down ref="countDown_1" :time=" 1*60*60 * 1000" format="HH:mm:ss" @change="timeChange"></u-count-down>
<text>交卷</text>
</view>
</view>
@@ -90,15 +92,15 @@
<text>确认交卷</text>
<view class="mt20 flex ai-c jc-sb">
<view class="text-center">
<text style="color:#FF6E02">99</text>
<text style="color:#FF6E02">{{questionList.length-rightList.length-wrongList.length}}</text>
<view class="cor-333">未答题数</view>
</view>
<view class="text-center">
<u-count-down ref="countDown_3" class="balckColor" :time="1 * 60 * 60 * 1000" format="HH:mm:ss"></u-count-down>
<u-count-down ref="countDown_3" class="balckColor" :time="1*60*60 * 1000" format="HH:mm:ss"></u-count-down>
<view>剩余时间</view>
</view>
<view class="text-center">
<text style="color:#333">9</text>
<text style="color:#333">{{(rightList.length/questionList.length * 100).toFixed(0)}}</text>
<view class="cor-333">考试得分</view>
</view>
</view>
@@ -186,7 +188,15 @@
</template>
<script>
import {
mapState,
mapActions
} from 'pinia' //引入映射函数
import storage from '@/jtools/storage';
import useQuestionStore from '@/jtools/store/question' //引入store
import {
submitTest
} from '@/jtools/api/question';
export default {
props:{
tabsList:{
@@ -203,6 +213,13 @@ export default {
isShowAll:{
type:Boolean,
default:true
},
subject:{
type:[String,Number],
default:1,
},
navTitle:{
type:String
}
},
data() {
@@ -218,19 +235,34 @@ export default {
qIndex:0,
rightList:[],
wrongList:[],
collectList:storage.get('collectList') || [],
collectList:storage.get(`collectList_subject${this.subject}`) || [],
questionList: [{isCollect:true}],//数据源
swiperList: [], // 轮播图数据列表
swiperIndex: 0, // 轮播图当前位置
isChange: false, // 是否切换
topicIndex: 0, // 题目位置
duration: 200, // 动画过渡时长
time:0,
}
},
onLoad() {
this.renderSwiper(0)
},
computed: {
...mapState(useQuestionStore, ["currentIndex_subject1","currentIndex_subject2"]) //映射函数取出tagslist
},
methods: {
...mapActions(useQuestionStore,['getCurrentIndex']),
timeChange(e){
this.time=e
if(e.hours==0&&e.minutes==0&&e.seconds==0&&e.milliseconds==0){
uni.showToast({
title:"考试结束,将为您自动交卷~",
icon:'none'
})
setTimeout(()=>{
this.toSubmit()
},1000)
}
},
//获取正确选项
getRightOp(val){
let rightOp=''
@@ -278,8 +310,20 @@ export default {
},
//交卷
toSubmit(){
uni.navigateTo({
url:"/pages/questionBank/examResult"
const restTime=this.time.hours*60*60+this.time.minutes*60+this.time.seconds
const score=(this.rightList.length/this.questionList.length * 100).toFixed(0)
submitTest({
"carTypeId": storage.get('carType') || '1001',
"score": score,
"testTime": 60*60-restTime,
}).then(resp=>{
const doNotNum=this.questionList.length-this.rightList.length-this.wrongList.length
const list = JSON.stringify(this.wrongList)
if(resp.code==='0000'){
uni.navigateTo({
url:"/pages/questionBank/examResult?doNotNum="+doNotNum+"&wrongList="+list+"&score="+score+"&subject="+this.subject
})
}
})
},
//查看考试结果
@@ -307,7 +351,7 @@ export default {
icon:'none'
})
}
storage.set('collectList',this.collectList)
storage.set(`collectList_subject${this.subject}`,this.collectList)
},
cancel(){
this.tipShow=false
@@ -360,6 +404,7 @@ export default {
// 轮播图当前位置小于原来时则表示为上一题
this.topicIndex--;
}
this.getCurrentIndex(this.topicIndex,this.subject)
// 更新轮播图位置数值,为更新时让 Vue 能监听到数据有改变
this.swiperIndex = e.detail.current;
},
@@ -385,6 +430,7 @@ export default {
// 选择题目
pickerTopic(index) {
this.topicIndex = index;
this.getCurrentIndex(this.topicIndex,this.subject)
this.renderSwiper(index);
},
isArrEqual(arr1, arr2){
@@ -392,8 +438,8 @@ export default {
},
//答题
answerQues(op, index) {
const falseList =storage.get('wrongList') || []
const trueList =storage.get('rightList') || []
const falseList =storage.get(`wrongList_subject${this.subject}`) || []
const trueList =storage.get(`rightList_subject${this.subject}`) || []
if (!this.questionList[this.topicIndex].clickAnswer) {
this.questionList[this.topicIndex].optionList[index].chooseOption =`${this.questionList[this.topicIndex].optionList[index].chooseOption?this.questionList[this.topicIndex].optionList[index].chooseOption:''}${op}`
this.questionList[this.topicIndex].clickAnswer = `${this.questionList[this.topicIndex].optionList[index].clickAnswer?this.questionList[this.topicIndex].optionList[index].clickAnswer:''}${op}`
@@ -402,12 +448,14 @@ export default {
const arr1=this.questionList[this.topicIndex].clickAnswer.split('')
const arr2=this.questionList[this.topicIndex].trueAnswer.split('')
if(this.isArrEqual(arr1,arr2)){
//判断选择的答案和实际的答案是否相同如果相同判断如果该题的ID在不在正确的数组中不在则Push(存储的的同理)
//如果这道题在错误的数组中则把这道题在错误数组中删掉
if(!this.rightList.includes(this.questionList[this.topicIndex].questionId)){
this.rightList.push(this.questionList[this.topicIndex].questionId)
}
if(!trueList.includes(this.questionList[this.topicIndex].questionId)){
trueList.push(this.questionList[this.topicIndex].questionId)
storage.set('rightList',trueList)
storage.set(`rightList_subject${this.subject}`,trueList)
}
if(this.wrongList.includes(this.questionList[this.topicIndex].questionId)){
const wIndex=this.wrongList.indexOf(this.questionList[this.topicIndex].questionId)
@@ -416,8 +464,9 @@ export default {
if(falseList.includes(this.questionList[this.topicIndex].questionId)){
const wIndex=falseList.indexOf(this.questionList[this.topicIndex].questionId)
falseList.splice(wIndex,1)
storage.set('wrongList',falseList)
storage.set(`wrongList_subject${this.subject}`,falseList)
}
//答对题目 如果不是最后一题,跳下一题
if(this.topicIndex<this.questionList.length-1){
this.topicIndex ++;
this.qIndex=this.topicIndex
@@ -443,12 +492,12 @@ export default {
}
if(!falseList.includes(this.questionList[this.topicIndex].questionId)){
falseList.push(this.questionList[this.topicIndex].questionId)
storage.set('wrongList',falseList)
storage.set(`wrongList_subject${this.subject}`,falseList)
}
if(trueList.includes(this.questionList[this.topicIndex].questionId)){
const rIndex=trueList.indexOf(this.questionList[this.topicIndex].questionId)
trueList.splice(rIndex,1)
storage.set('wrongList',trueList)
storage.set(`rightList_subject${this.subject}`,trueList)
}
}
}
@@ -459,17 +508,23 @@ export default {
this.renderSwiper(0)
},
getQuestionList(val) {
console.log(val);
this.questionList=val.map(item=>{
const arr = JSON.parse(val)
this.questionList=[]
arr.forEach(item=>{
let isCollect=false
if(this.collectList.includes(item.questionId)){
isCollect=true
}
return {
this.questionList.push({
isCollect:isCollect,
...item
}
})
})
if(this.navTitle==='顺序答题'){
this.pickerTopic(this[`currentIndex_subject${this.subject}`])
}else{
this.renderSwiper(0)
}
}
}
}