You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

579 lines
13 KiB

<template>
<view class='wrap'>
<view class="top">
<view class='logintitle'>
<u-image style="margin:0 auto" :fade="false" :src="logintitle" width="702rpx" height="88rpx"></u-image>
<view style="color:#0095e5;text-align: center;font-size: 30rpx;margin: 0 auto;margin-top:20rpx;">
排查身边灾害隐患</view>
</view>
</view>
<view class="answerwrap">
<view class='answertop'>
<view>(答题{{questionIndex+1}}/5)</view>
<view>
<u-image style="display: inline-block;margin-right:5px" :fade="false" width="24rpx" height="24rpx"
:src='timeicon'></u-image>
{{minutes}}:{{seconds}}
</view>
</view>
<view>
<view class='answercenter'>
<view class='answertitle'>
<span
:class="[{'more':question_list[questionIndex]['type_name']==='多选题'}]">{{question_list[questionIndex]?question_list[questionIndex]['type_name']:''}}</span>
<text class="hasspan"
v-html="question_list[questionIndex]?replaceAtSymbolsWithSpan(question_list[questionIndex]['title']):''"></text>
</view>
<view class='answercheck'
v-for="(ans,ansindex) in question_list[questionIndex]?question_list[questionIndex].options:[]">
<view @click="chooseAnswer(ans,ansindex)"
:class="['answeritem',{'active':ans.flag},{'correct':ans.isanswer},{'wrong':ans.iswrong}]">
<span>{{answerNum[ansindex]}}</span>{{ans.title}}
<!-- {{ans.is_correct}}--- -->
<!-- :class="ans.flag?'answeritem active':'answeritem'" -->
</view>
</view>
</view>
</view>
<view class='answerbottom'>
<span></span>正确答案:{{correctAnswer}}
</view>
</view>
<view class='submit'>
<u-button v-if="!answerSubmit" size="mini" :throttle-time="1000" shape="circle" type="default" :custom-style="parStyle"
@click="nextQue">下一题</u-button>
<u-button v-if="answerSubmit" size="mini" :throttle-time="1000" shape="circle" type="default" :custom-style="parStyle"
@click="nextQue">提交</u-button>
</view>
</view>
</template>
<script>
import {
isNull,
toast
} from "@/common/util.js"
export default {
data() {
return {
parStyle: {
'background': 'linear-gradient(to right, #2754a5, #2b83bb)',
'color': '#fff',
'font-size': '28rpx',
'padding': '20rpx 30rpx',
'margin-left': '15rpx',
'margin-top': '80rpx',
'width': '100%',
'height': '80rpx'
},
minutes: 0,
seconds: 0,
timer: null,
question_list: [],
questionIndex: 0,
answercount: 0, //第几次答题
maxCount: 2,
answerNum: ["A", "B", "C", "D", "E", "F", "G", "H"],
myAnswer: [],
correctNum: 0, // 答对的题目数量
correctScore: 0, // 得分
correctAnswer: '', // 正确答案
answerSubmit: false, // 最后一题
hasFlag: false, // 是否选中
showAnswer: false,
timeicon: require('../../static/time.png'),
logintitle: require("../../static/logo3.png"),
isanswer: false, // 控制答案结束前不能点击到下一题
islock: false,
}
},
onShow() {
this.getUserInfo()
},
onLoad() {
let configs = uni.getStorageSync("activeConfig") ? uni.getStorageSync("activeConfig").config : []
let answertime = 15
configs.map(item => {
if (item.key == 'answer_time') {
answertime = parseInt(item.value)
}
})
this.getQuestion()
this.countdown(answertime, (minutes, seconds) => {
this.minutes = minutes.toString().padStart(2, '0')
this.seconds = seconds.toString().padStart(2, '0')
}, () => {
console.log("1--", this.islock)
if (!this.islock) {
this.submitQue()
}
});
},
onUnload() {
clearTimeout(this.timer)
},
methods: {
async getUserInfo() {
const res = await this.$u.api.user()
this.$u.vuex('vuex_user', res);
this.userInfo = res;
if (isNull(res.mobile)) {
uni.redirectTo({
url: '/pages/login/index'
})
}
},
async getQuestion() {
let that = this
const res = await this.$u.api.questions()
this.answercount = res.today_ask_count // 今日是否已答题
let data = res.questions
if (this.answercount) {
uni.redirectTo({
url: '/pages/me/me'
})
return
}
data.map(item => {
let type = 0
item.correctAnswer = []
item.options.map(i => {
i.flag = false
if (i.is_correct === 1) {
type++
item.correctAnswer.push(that.answerNum[i.myindex - 1])
}
})
item.type_name = type > 1 ? '多选题' : '单选题'
console.log("item.type_name",item.type_name)
})
console.log("data",data)
this.question_list = data
},
replaceAtSymbolsWithSpan(str) {
return str.replace(/@/g,
'<span style="display: inline-block;width:40px;border-bottom:1px solid #666;margin: 0 3px;margin-bottom: -2px;"></span>'
);
},
chooseAnswer(ans, ansindex) {
this.hasFlag = false
if (this.question_list[this.questionIndex]['type_name'] === '单选题') {
this.question_list[this.questionIndex]['options'].map(item => {
item.flag = false
})
ans.flag = !ans.flag
this.hasFlag = true
// ans.flag = !ans.flag
} else {
ans.flag = !ans.flag
this.question_list[this.questionIndex]['options'].map(item => {
if (item.flag == true) {
this.hasFlag = true
}
})
}
console.log("hasFlag", this.hasFlag)
},
submitQue() {
let that = this
if (this.myAnswer.length > 0) {
let count = 0
this.myAnswer.map(item => {
if (item.isCorrect === true) {
count++
}
})
this.correctNum = count
this.correctScore = (count / 10) * 100
} else {
this.correctScore = 0
}
this.islock = true
// this.showAnswer = true
console.log("3--", this.islock)
this.$u.api.saveQuestion({
score: this.correctScore,
answers: this.myAnswer
}).then(res=>{
clearTimeout(this.timer)
toast('答题已完成',1500,function(){
setTimeout(function(){
uni.redirectTo({
url:'/pages/me/me'
})
},1500)
})
})
},
nextQue() {
let that = this
// this.isanswer = false
if (this.isanswer) {
return
}
if (!this.hasFlag) {
toast("请先选择答案")
return
}
this.hasFlag = false
if (this.questionIndex > 4) {
this.answerSubmit = true
return
}
let ansid = []
let count = 0
this.question_list[this.questionIndex]['options'].map(item => {
if (item.flag === true) {
ansid.push(item.id)
}
if (!item.flag && item.is_correct === 1) {
count++
}
})
this.myAnswer.push({
question_id: this.question_list[this.questionIndex]['id'],
answer_ids: ansid.join("|"),
isCorrect: count > 0 ? false : true
})
this.correctAnswer = this.question_list[this.questionIndex]['correctAnswer'].join(',')
// 判断选择的是否正确 加样式
this.question_list[this.questionIndex]['options'].map(item => {
if (item.is_correct === 1) {
item.isanswer = true
} else if (item.flag == true && item.is_correct === 0) {
item.iswrong = true
}
})
this.isanswer = true
if (that.answerSubmit) {
that.submitQue()
return
}
setTimeout(function() {
that.correctAnswer = ''
that.isanswer = false
that.questionIndex++
if (that.questionIndex == 4) {
that.answerSubmit = true
// return
}
}, 1500)
},
countdown(duration, onTick, onEnd) {
let remainingTime = duration * 60;
const tick = () => {
if (remainingTime > -1) {
const minutes = Math.floor(remainingTime / 60);
const seconds = remainingTime % 60;
onTick(minutes, seconds);
remainingTime--;
this.timer = setTimeout(tick, 1000);
} else {
console.log("remainingTime", remainingTime)
console.log("2--", this.islock)
onEnd();
}
};
tick();
}
}
}
</script>
<style scoped lang="scss">
.wrap {
/* height: 100%; */
width: 100%;
height: 100vh;
width: 100vw;
background-image: url('../../static/bg.jpg');
background-size: 100% 100%;
background-repeat: no-repeat;
overflow: scroll;
}
.top {
width: 100%;
// height: 440rpx;
/* background-image: url('../../static/bgtop1.png'); */
background-size: 100% 100%;
background-repeat: no-repeat;
margin-bottom:30rpx;
// position: relative;
// top: 0;
// left: 0
}
.logintitle {
padding-top: 90rpx;
}
.bottom {
width: 100%;
height: 533rpx;
/* background-image: url('../../static/bgbottom.png'); */
background-size: 100% 100%;
background-repeat: no-repeat;
position: relative;
bottom: 0;
left: 0
}
.answerwrap {
position: relative;
z-index: 2;
width: 90%;
background-color: #f9f6f6;
border-radius: 40rpx;
margin: 0 auto;
box-shadow: 0px 0px 20px -10px #0095e5;
// margin-top: -40rpx;
}
.answertop {
display: flex;
justify-content: space-between;
background-color: red;
padding: 30rpx;
border-radius: 40rpx 40rpx 0 0;
border: 1px solid #0095e5;
background-color: #0095e5;
color: #fff;
border-bottom: none
}
.answercenter {}
.answertitle {
padding: 30rpx;
line-height: 1.8;
font-family: "";
color: rgba(0, 0, 0, 0.8);
/* font-weight: bold; */
}
.answertitle span {
background-color: #2754a5;
display: inline-block;
padding: 0rpx 20rpx;
color: #fff;
margin-right: 10rpx;
border-radius: 10rpx;
font-weight: normal;
}
.answertitle span.more {
background-color: cadetblue;
}
.borderb {
display: inline-block;
width: 10rpx;
border-bottom: 1px solid #666;
}
.answercheck {
padding: 30rpx;
padding-top: 0rpx;
}
.answeritem {
padding: 20rpx;
background-color: #fff;
border: 4rpx solid #fff;
border-radius: 20rpx;
color: #666666;
}
.answeritem.active,
.answeritem.wrong {
border: 4rpx solid #0095e5;
}
.answeritem.correct {
border: 4rpx solid green;
}
.answeritem span {
display: inline-block;
width: 40rpx;
height: 40rpx;
border: 2px solid #999;
color: #999;
text-align: center;
line-height: 40rpx;
border-radius: 10rpx;
margin-right: 10rpx
}
.answeritem.active span,
.answeritem.wrong span {
border: 2px solid #0095e5;
background-color: #0095e5;
color: #fff;
}
.answeritem.correct span {
border: 2px solid green;
background-color: green;
color: #fff;
}
.answerbottom {
padding: 30rpx;
padding-top: 10rpx;
padding-bottom: 40rpx;
}
.answerbottom span {
display: inline-block;
width: 10rpx;
height: 50rpx;
border-radius: 10rpx;
background-color: green;
vertical-align: middle;
margin-right: 20rpx
}
.submit {
width: 50%;
margin: 30px auto;
// margin-bottom: -250rpx;
position: relative;
z-index: 9
}
.answertip {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
/* padding-top:397rpx;
padding-bottom:300rpx; */
z-index: 9;
}
.answertipitem {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 77%;
}
.answrap {
/* background: url(../../static/answertipbg1.png); */
width: 483rpx;
height: 563rpx;
background-size: 100% 100%;
font-size: 28rpx;
width: 100%;
}
.answrap100 {
/* background: url(../../static/answertipbg.png); */
height: 612rpx;
background-size: 100% 100%;
width: 100%;
}
.ansscore {
padding-top: 120rpx;
text-align: center;
}
.ansflag {
/* background: url(../../static/answer100flag.png); */
width: 119%;
height: 164rpx;
background-size: 100% 100%;
position: absolute;
top: 240rpx;
left: -56rpx;
}
.answrap100 .ansflag {
top: 290rpx;
}
.ansicon {
position: absolute;
left: 235rpx;
top: -20rpx;
}
.ansicon80 {
position: absolute;
left: 165rpx;
top: -80rpx;
}
/* .answer100>view:first-child{
margin-top: 236rpx;
margin-left: 210rpx;
} */
.answerBtn {
/* margin-top: 236rpx;
margin-left: 210rpx; */
/* display:flex;
margin-top:100rpx;
margin-left:80rpx */
text-align: center;
/* margin-top: 120rpx; */
position: absolute;
top: 355rpx;
left: 0rpx;
width: 100%;
}
.answrap100 .answerBtn {
top: 410rpx;
}
.answerBtn view {
box-shadow: 1rpx 7rpx 18rpx 0rpx #2754a5;
color: #333;
padding: 16rpx 60rpx;
margin: 10rpx;
font-size: 28rpx;
border-radius: 10rpx;
display: inline-block;
}
.answerBtn view:last-child {
color: #fff;
background: linear-gradient(90deg, to right, #2754a5, #2b83bb);
}
.answertip span.ansfont {
color: #0095e5;
font-size: 90rpx;
}
.answer80 {
/* background: url(../../static/answer80.png); */
width: 483rpx;
height: 641rpx;
background-size: 100% 100%;
}
</style>