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.

344 lines
8.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="containers">
<view class="steps">
<uni-steps :options="steps" :active="stepActive" active-color="#4f607e" />
</view>
<view class="expire" v-if="studyInfo.expire_day">
<view>通过测验后,{{studyInfo.expire_day}}天内可不再重复学习。</view>
<view class="en-text">After passing the test, you don't need to repeat learning within {{studyInfo.expire_day}} days.</view>
</view>
<view class="asks">
<view v-for="(item,index) in askList" :key="index">
<view class="question-title">
<view>{{index+1}}{{item.title}}({{item.type==1?'单选':'多选'}}{{item.type==1?'Single Choice':'Multiple Choice'}})</view>
</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">
<view class="submit-text">
<text>需要正确率达{{rate}}%</text>
<text class="en-text">Need {{rate}}% accuracy rate</text>
</view>
<view class="submit-btn" @click="submitAnswer">
<text>提交</text>
<text class="en-text">Submit</text>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
type: 1,
steps: [{
title: '填报\nRegistration'
}, {
title: '测验\nTest'
}, {
title: '完成\nComplete'
}],
stepActive: 1,
studyInfo: {},
rate: 0,
askList: [],
correctNum: {},
answerList: [],
result: {}, //单选
resultArr: [], // 多选
formData: {},
askData:{},
askContent:[],
}
},
onLoad(options) {
let that = this
this.type = options.type
this.askData.type = parseInt(options.type)
// for(let i=0;i<20;i++){
// this.resultArr.push([])
// }
this.getFormdata()
this.getStudy()
},
methods: {
getFormdata(){
// let res = uni.getStorageSync('formdata')
// this.formData = res
let res = uni.getStorageSync('studydata')
this.askData = 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)
that.askData.ask = res.asks
that.askData.expire_day = res.expire_day
for(let i=0;i<res.asks.length;i++){
that.resultArr.push([])
}
},
utilFail: function(res) {}
})
},
//
radioAnswer(e, index) {
this.correctNum[index] = e.detail.data.result
this.askContent[index] = e.detail.data.content
},
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) {
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() {
let correctLength = 0
console.log("this.correctNum",this.correctNum)
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("/The accuracy rate does not meet the standard")
} else {
this.submitForm()
}
},
submitForm() {
let that = this
this.resultArr.map((k,index)=>{
if(k.length>0){
this.askContent[index] = k
}
})
this.askData.content = this.askContent
console.log(this.result,this.resultArr,'---',this.askContent)
console.log("askdata",this.askData)
that.submitStudy()
return
this.util.request({
api: '/api/mobile/visit/visit-save',
method: "POST",
data: that.formData,
utilSuccess: function(res) {
uni.showToast({
title: res.msg,
duration: 2000,
icon: 'none'
})
that.newsSubscription()
},
utilFail: function(res) {
console.log(res)
uni.showToast({
title: res,
duration: 2000,
icon: 'none'
})
}
})
},
submitStudy() {
let that = this
console.log("that.askData",that.askData)
// return
this.util.request({
api: '/api/mobile/visit/ask-save',
method: "POST",
data: that.askData,
utilSuccess: function(res) {
if(uni.getStorageSync('studydata')){
uni.removeStorageSync('studydata')
}
uni.showToast({
title: '提交成功',
duration: 1500,
icon: 'none'
})
setTimeout(function(){
uni.redirectTo({
url: '/pages/index/index'
})
},1500)
},
utilFail: function(res) {
uni.showToast({
title: res,
duration: 2000,
icon: 'none'
})
}
})
},
newsSubscription() {
uni.getSetting({
withSubscriptions: true, //是否获取用户订阅消息的订阅状态默认false不返回
success(res) {
if (res.authSetting['scope.subscribeMessage']) {
uni.removeStorageSync('formdata')
uni.redirectTo({
url: '/pages/visit/successform'
})
} else {
// 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
uni.requestSubscribeMessage({
tmplIds: ['OfDFwAIZyXqvPgmc_czIXhveVtp3n_ftyWJEks1DSi4',
'r8n41lmkGeob15YBuuxhG7MbpgVSsUxKnK9ORPtr5VY'],
success(res) {
console.log("res", res)
uni.showToast({
title:'订阅成功'
})
uni.removeStorageSync('formdata')
uni.redirectTo({
url: '/pages/visit/successform'
})
}
})
}
}
});
},
}
}
</script>
<style scoped>
.containers {
background-color: #fff;
padding: 20rpx;
padding-bottom: 60rpx;
position: relative;
overflow: hidden;
}
.asks {
min-height: 80vh;
overflow-y: auto;
padding-bottom:60rpx
}
.asks>view,
.asks>view>view {
margin-bottom: 20rpx
}
.containers>.submitBtn {
position: fixed;
bottom: 0;
width: 100%;
left:0
}
.containers>.submitBtn .submit-text {
display: flex;
padding: 28rpx 20rpx;
width: 70%;
background-color: #f8f8f8;
border-radius: 10rpx 0 0 10rpx;
}
.containers>.submitBtn .submit-btn {
width: 30%;
background-color: #4f607e;
color: #fff;
display: flex;
border-radius: 0 10rpx 10rpx 0;
padding: 28rpx 10rpx;
cursor: pointer;
}
.steps {
margin-bottom: 40rpx
}
.expire{
text-align: center;
font-size: 40rpx;
/* padding: 10px; */
margin-bottom: 40rpx;
display: flex;
flex-direction: column;
}
.expire .en-text {
font-size: 28rpx;
color: #999;
margin-top: 8rpx;
}
.question-title {
margin-bottom: 20rpx;
}
.question-title .en-text {
font-size: 24rpx;
color: #999;
margin-top: 6rpx;
}
.submit-text {
display: flex;
flex-direction: column;
justify-content: center;
padding-left: 20rpx;
}
.submit-text .en-text {
font-size: 22rpx;
color: #666;
margin-top: 4rpx;
}
.submit-btn {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.submit-btn .en-text {
font-size: 20rpx;
opacity: 0.9;
margin-top: 2rpx;
}
</style>