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.

211 lines
4.3 KiB

<template>
<view class="containers">
<view class="steps">
<uni-steps :options="steps" :active="stepActive" active-color="#044ed7" />
</view>
<view class="asks">
<view v-for="(item,index) in askList">
<view>{{index}}{{item.title}}({{item.type==1?'单选':'多选'}})</view>
<view v-if="item.type==1">
<uni-data-checkbox v-model="result[index]" @change="e=>radioAnswer(e,index)"
:localdata="item.answer" :wrap='true' :map="{text:'content',value:'content'}" />
</view>
<view v-if="item.type==2">
<uni-data-checkbox v-model="resultArr[index]" @change="e=>chenckAnswer(e,item,index)"
:localdata="item.answer" :wrap='true' multiple :map="{text:'content',value:'content'}" />
</view>
</view>
</view>
<view disabled class="justify-between submitBtn">
<text>需要正确率达{{rate}}%</text>
<text @click="submitAnswer"></text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
type: 1,
steps: [{
title: '填报'
}, {
title: '测验'
}, {
title: '完成'
}],
stepActive: 1,
studyInfo: {},
rate: 0,
askList: [],
correctNum: {},
answerList: [],
result: {},
resultArr: [
[],
[],
[],
[],
[],
[],
[],
[],
[]
],
formData: {}
}
},
onLoad(options) {
let that = this
this.type = options.type
this.getFormdata()
this.getStudy()
},
methods: {
getFormdata(){
let res = uni.getStorageSync('formdata')
this.formData = res
},
async getStudy() {
let that = this
this.util.request({
api: '/api/mobile/visit/get-ask',
data: {
type: that.type
},
utilSuccess: function(res) {
that.studyInfo = res
that.askList = res.asks
that.rate = parseInt(res.rate)
},
utilFail: function(res) {}
})
},
// 获取选择的答案
radioAnswer(item, index) {
this.correctNum[index] = item.detail.data.result
},
chenckAnswer(e, item, index) {
let answer = item.answer
let correctLength = 0
let data = e.detail.data
for (var k of answer) {
if (k.result == 1) {
correctLength++
}
}
// 多选少于正确答案数量 返回0 错误
if (data.length < correctLength) {
console.log(correctLength)
this.correctNum[index] = 0
return
} else {
for (var m of data) {
if (m.result == 0) {
this.correctNum[index] = 0
} else {
this.correctNum[index] = 1
}
}
}
},
// 匹配答案正确率
submitAnswer() {
console.log(this.correctNum)
let correctLength = 0
for (var key in this.correctNum) {
if (this.correctNum[key] == 1) {
correctLength++
}
}
let per = parseFloat(correctLength / this.askList.length) * 100
if (per < this.rate) {
this.util.alert("正确率不达标")
} else {
this.submitForm()
}
},
submitForm() {
let that = this
this.util.request({
api: '/api/mobile/visit/visit-save',
method: "POST",
data: that.formData,
utilSuccess: function(res) {
uni.showToast({
title: res.errmsg,
duration: 2000,
icon: 'none'
})
},
utilFail: function(res) {
uni.showToast({
title: res.errmsg,
duration: 2000,
icon: 'none'
})
}
})
}
}
}
</script>
<style scoped>
.containers {
background-color: #fff;
min-height: 100vh;
padding: 20rpx;
padding-bottom: 60rpx;
position: relative;
}
.asks {}
.asks>view,
.asks>view>view {
margin-bottom: 20rpx
}
.containers>.submitBtn {
position: absolute;
bottom: 60rpx;
margin: 20rpx;
width: 90%;
}
.containers>.submitBtn text {
display: inline-block;
padding: 0 10px;
text-align: center;
width: 70%;
background-color: #f8f8f8;
font-size: 36rpx;
border-radius: 10rpx;
padding: 28rpx;
}
.containers>.submitBtn text:first-child {
border-radius: 10rpx 0 0 10rpx;
}
.containers>.submitBtn text:last-child {
width: 30%;
background-color: #044ed7;
color: #fff;
display: inline-block;
border-radius: 0 10rpx 10rpx 0;
}
.steps {
margin-bottom: 40rpx
}
</style>