Files
dvcp_v2_wechat_app/src/project/qujing/AppLegalLearning/testForm.vue
shijingjing 48003ffaa3 考试
2023-02-15 09:50:44 +08:00

278 lines
8.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="testForm">
<u-navbar title="法治学习" :background="backgroundNavbar"></u-navbar>
<div class="testForm_info" >
<div v-for="(item,index) in list" :key="index">
<div v-if="activeIndex === index">
<div class="type">
<div class="type_left">{{ item.type==0? '单选题':item.type==1? '多选题': '判断题' }}</div>
<div><span class="col_blue">{{ activeIndex + 1 }}</span>/{{ list.length }}</div>
</div>
<div class="topic">
<div>
<div >
<!-- 题目 -->
<div>{{ item.title }}{{score}}</div>
<!-- 单选,判断 -->
<div class="answer_list" v-if="item.type==0 || item.type==2">
<div class="answer_item" v-for="(opt,inx) in item.items" :key="inx"
:class="{'Checked': clickIndex === inx, 'Succeed': showAnalysis && opt.checked == 1, 'Error': showAnalysis && clickIndex === inx && opt.checked == 0}"
@click="itemClick(inx)">
{{ opt.sort }}: {{ opt.content}}
</div>
</div>
<!-- 多选 -->
<div class="answer_list" v-if="item.type==1">
<div class="answer_item" v-for="(opt,inx) in item.items" :key="inx"
:class="{'Checked': opt.isChecked,'Succeed': showAnalysis && opt.checked == 1, 'Error': showAnalysis && opt.isChecked && opt.checked == 0}"
@click="itemClick(inx)">
{{ opt.sort }}: {{ opt.content}} {{opt.isChecked}}
</div>
</div>
</div>
</div>
</div>
<div class="type mar-top" v-if="showAnalysis">
<div class="type_left">答案解析</div>
</div>
<div class="topic mar-top" v-if="showAnalysis">
<div><span>正确答案</span></div>
<div style="margin-top: 8px" v-html="list[activeIndex].analysis"></div>
</div>
</div>
</div>
<div class="btn" @click="nextTopic" v-if="activeIndex < list.length - 1 && showNext">下一题</div>
<div class="btn" v-show="showConfirm" @click="confirm">确定</div>
<div class="btn" v-show="showTiJiao" @click="submit">提交</div>
</div>
</div>
</template>
<script>
import dayjs from "dayjs"
export default {
customNavigation: true,
data() {
return {
backgroundNavbar: {
background: "url('https://cdn.cunwuyun.cn/qujing/navbar.png') no-repeat",
backgroundSize: '100% 100%',
},
list: [],
activeIndex: 0, // 当前第几题
activeAnswer:undefined,
endTime: '', // 结束时间
id: '', // 题库id
showConfirm: false,
showNext: false,
showTiJiao: false,
clickIndex: '',
showAnalysis: false,
subjectConfigs: [],
score: 0,
assessments: [], // 不合格的分数段
status: 1, // 考试结果0未通过、1通过
startTime: '',
nowTime: '', // 时间戳
studyDuration: 0,
assessmentType: ''
}
},
methods: {
getList(id) {
this.$instance.post(`/app/appexaminationinfo/queryDetailById?id=${id}`).then(res=> {
if(res?.data) {
res.data.questions.forEach(item => {
item.items.forEach(item1 =>{
item1.isChecked = false
})
});
this.list = res.data.questions
this.subjectConfigs = res.data.subjectConfigs
this.assessments = res.data.assessments
}
})
},
itemClick(i) {
if (this.showAnalysis) return
this.showConfirm = true
if(this.list[this.activeIndex].type==0 || this.list[this.activeIndex].type==2){ // 单选判断
this.clickIndex = i
}
if(this.list[this.activeIndex].type==1) { // 多选
this.list[this.activeIndex].items[i].isChecked=!this.list[this.activeIndex].items[i].isChecked
}
},
// 下一题
nextTopic() {
this.activeIndex ++;
this.clickIndex = ''
this.showAnalysis = false
},
// 确定
confirm() {
this.showAnalysis = true;
// 单选判断
if(this.list[this.activeIndex].type==0 || this.list[this.activeIndex].type==2){
if(this.list[this.activeIndex].items[this.clickIndex].checked==1) {
this.score=this.score + this.subjectConfigs[this.list[this.activeIndex].type].eachScore
}
}
if(this.list[this.activeIndex].type==1) { // 多选
if(this.list[this.activeIndex].items.every(item=>item.checked===item.isChecked)){
this.score=this.score + this.subjectConfigs[this.list[this.activeIndex].type].eachScore
}
}
if(this.activeIndex < this.list.length - 1) {
this.showNext = true;
this.showConfirm = false;
} else {
this.showTiJiao = true;
}
},
// 提交
submit() {
// 分数段
// switch(this.assessments) {
// case 1: console.log(1);
// break;
// case 2:
// }
// 用时
const endTime = new Date().getTime()
this.studyDuration = Math.ceil((endTime - this.nowTime) / 1000 / 60)
// 是否合格
const buhege = this.assessments.filter(e=> e.assessmentType == 3)
if(buhege.upCondition == 3) { // 3小于等于、4小于
if(this.score <= buhege.upScore) {
this.status = 0
}
} else if(buhege.upCondition == 4) {
if(this.score < buhege.upScore) {
this.status = 0
}
}
// this.$instance.post(`/app/appexaminationinfo/commit`,{
// assessmentType: this.assessmentType,
// examinationId: this.id,
// startTime: this.startTime,
// status: this.status,
// studyDuration: this.studyDuration,
// }).then(res=> {
// if(res?.code == 0) {
// uni.navigateTo({url: './result'})
// }
// })
},
},
onReachBottom() {
this.current ++;
},
onLoad(o) {
this.getList(o.id)
this.startTime = dayjs().format("YYYY-MM-DD HH:mm:ss")
this.nowTime = new Date().getTime()
}
}
</script>
<style lang="scss" scoped>
.testForm {
.testForm_info {
background: url("https://cdn.cunwuyun.cn/qujing/bg.png") no-repeat;
background-size: 100% auto;
padding: 80px 32px 0 32px;
box-sizing: border-box;
.type {
display: flex;
justify-content: space-between;
font-size: 28px;
color: #333333;
.type_left {
font-weight: 600;
}
.col_blue {
color: #2D7DFF;
}
}
.topic {
background: #FFF;
margin-top: 32px;
padding: 24px;
margin-top: 80px;
border-radius: 16px;
box-shadow: 0 0 8px 0 rgba(0,0,0,0.02);
.answer_list {
margin-top: 32px;
.answer_item {
background: #FBFCFE;
border: 1px solid #CCCCCC;
border-radius: 16px;
padding: 28px 24px;
box-sizing: border-box;
margin-bottom: 24px;
.myChoice {
width: 136px;
height: 48px;
background: #FFFFFF;
border: 1px solid #E23C3C;
border-radius: 8px;
}
}
.Checked {
border: 2px solid #2D7EFE;
color: #2D7DFF;
background: #EAF2FF;
}
.Succeed {
border: 2px solid #3BBC37;
color: #3BBC37;
background: #F5FCF5;
}
.Error {
border: 2px solid #E23C3C;
color: #E23C3C;
background: #FDF4F4;
}
}
}
.mar-top {
margin-top: 32px;
}
.btn {
position: fixed;
left: 50%;
bottom: 0;
transform: translate(-50%, -50%);
width: 320px;
height: 88px;
line-height: 88px;
text-align: center;
background: #2D7DFF;
border-radius: 44px;
font-weight: 500;
font-size: 34px;
color: #FFFFFF;
}
}
}
</style>