Files
dvcp_v2_wechat_app/src/project/qujing/AppLegalLearning/testForm.vue
2023-02-14 18:01:00 +08:00

226 lines
6.1 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 }}</div>
<!-- 单选 -->
<!-- <div class="answer_list" v-if="item.type==0">
<div class="answer_item" v-for="(opt,inx) in item.items" :key="inx"
:class="{'Checked': clickIndex == inx}">
{{ opt.sort }}: {{ opt.content}}
</div>
</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': item.isCheked,'Succeed': showAnalysis && opt.checked == 1, 'Error': showAnalysis && item.isCheked && opt.checked == 0}"
@click="itemClick(inx)">
{{ opt.sort }}: {{ opt.content}}
</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>
</div>
</template>
<script>
export default {
customNavigation: true,
data() {
return {
backgroundNavbar: {
background: "url('https://cdn.cunwuyun.cn/qujing/navbar.png') no-repeat",
backgroundSize: '100% 100%',
},
list: [],
activeIndex: 0, // 当前第几题
endTime: '', // 结束时间
id: '', // 题库id
showConfirm: false,
showNext: false,
clickIndex: '',
showAnalysis: false,
subjectConfigs: [],
}
},
methods: {
getList(id) {
this.$instance.post(`/app/appexaminationinfo/queryDetailById?id=${id}`).then(res=> {
if(res?.data) {
this.list = res.data.questions
this.subjectConfigs = res.data.subjectConfigs
}
})
},
itemClick(i) {
if (this.showAnalysis) return
if(this.list[this.activeIndex].type==0) { // 单选
} else if(this.list[this.activeIndex].type==1) { // 多选
this.list[this.activeIndex].items[i].isCheked = !this.list[this.index].items[i].isCheked
this.list[this.activeIndex].items.map((item) => {
if (item.isCheked) {
// this.showTopBtn = true
}
})
} else if(this.list[this.activeIndex].type==2) { // 判断
this.clickIndex = i
this.showConfirm = true
}
},
// 下一题
nextTopic() {
this.activeIndex ++;
this.clickIndex = ''
this.showAnalysis = false
},
// 确定
confirm() {
this.showAnalysis = true;
if(this.activeIndex < this.list.length - 1) {
this.showNext = true;
this.showConfirm = false;
} else {
uni.navigateTo({url: './result'})
}
},
},
onReachBottom() {
this.current ++;
},
onLoad(o) {
this.getList(o.id)
}
}
</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>