<template>
|
<view class="box">
|
<view class="box_bgimage" :style="{ backgroundImage: 'url(' + bg + ')' }">
|
<text class="box_bgimage_a">{{ title }}</text>
|
<text class="box_bgimage_b">{{ content }}</text>
|
</view>
|
<view class="box_list">
|
<view class="box_list_answer" v-if="list && list.length > 0">
|
<view v-if="status == 1 || status == 2" class="score_static">
|
<text class="name">本次得分:</text>
|
<text class="num" :class="{ warry: status == 2 }">{{ score }}分</text>
|
</view>
|
<!-- 单选/判断 -->
|
<view v-for="(item, index) in list" :key="index" class="list_item">
|
<view class="box_list_answer_name">
|
<text>{{ index + 1 }}、{{ item.title }}</text>
|
<text v-if="item.score"> ({{ item.score }}分)</text>
|
<text style="color: #ed4545">*</text>
|
</view>
|
<template v-if="item.type == 1 || item.type == 0">
|
<view
|
class="box_list_answer_item"
|
v-for="(line, lIndex) in item.options"
|
:key="lIndex"
|
@click="select(line, index)"
|
>
|
<image
|
src="@/static/video@2x.png"
|
v-if="!item.selAnswer || item.selAnswer !== line.code"
|
/>
|
<image
|
src="@/static/video_sel@2x.png"
|
v-if="
|
(item.selAnswer &&
|
item.answer === item.selAnswer &&
|
item.selAnswer == line.code) ||
|
(item.selAnswer == line.code && status != '2') ||
|
(item.answer === item.selAnswer &&
|
item.selAnswer == line.code)
|
"
|
/>
|
<image
|
src="@/static/video_error@2x.png"
|
v-if="
|
item.selAnswer &&
|
item.selAnswer == line.code &&
|
item.answer !== item.selAnswer &&
|
status == '2'
|
"
|
/>
|
<text v-if="!item.selAnswer || item.selAnswer !== line.code"
|
><text class="mr24">{{ line.code }}</text>
|
{{ line.value }}</text
|
>
|
<text
|
v-if="
|
(item.selAnswer &&
|
item.answer === item.selAnswer &&
|
item.selAnswer == line.code) ||
|
(item.selAnswer == line.code && status != '2') ||
|
(item.answer === item.selAnswer &&
|
item.selAnswer == line.code)
|
"
|
style="color: rgba(77, 153, 168, 1)"
|
><text class="mr24" style="color: rgba(77, 153, 168, 1)">{{
|
line.code
|
}}</text>
|
{{ line.value }}</text
|
>
|
<text
|
v-if="
|
item.selAnswer &&
|
item.selAnswer == line.code &&
|
item.answer !== item.selAnswer &&
|
status == '2'
|
"
|
style="color: rgba(237, 69, 69, 1)"
|
><text class="mr24" style="color: rgba(237, 69, 69, 1)">{{
|
line.code
|
}}</text>
|
{{ line.value }}</text
|
>
|
</view>
|
<view
|
class="box_list_answer_tips"
|
style="margin-bottom: 0rpx"
|
v-if="
|
item.selAnswer &&
|
item.answer !== item.selAnswer &&
|
status != '0'
|
"
|
>
|
<view class="line">
|
<image src="@/static/ic_wrong@2x.png" />
|
<text>回答错误</text>
|
</view>
|
<view class="line">正确答案:{{ item.answer }}</view>
|
</view>
|
<view
|
class="box_list_answer_tips"
|
v-if="
|
item.selAnswer &&
|
item.answer === item.selAnswer &&
|
status != '0'
|
"
|
>
|
<view class="line">
|
<image src="@/static/ic_success@2.png" />
|
<text class="success">回答正确</text>
|
</view>
|
</view>
|
</template>
|
<template v-if="item.type == 2">
|
<view
|
class="box_list_answer_item"
|
v-for="(line, lIndex) in item.options"
|
:key="lIndex"
|
@click="changeBox(index, lIndex)"
|
>
|
<image src="@/static/checkbox@2x.png" v-if="!line.checked" />
|
<image
|
src="@/static/checkbo1x_sel@2x.png"
|
v-if="
|
(line.checked && status != '2') ||
|
(item.selAnswer === item.answer && line.checked)
|
"
|
/>
|
<image
|
src="@/static/checkbox_wrong@2x.png"
|
v-if="
|
line.checked &&
|
item.selAnswer !== item.answer &&
|
status == '2'
|
"
|
/>
|
<text v-if="!line.checked"
|
><text class="mr24">{{ line.code }}</text>
|
{{ line.value }}</text
|
>
|
<text
|
v-if="
|
(line.checked && status != '2') ||
|
(item.selAnswer === item.answer && line.checked)
|
"
|
style="color: rgba(77, 153, 168, 1)"
|
><text class="mr24" style="color: rgba(77, 153, 168, 1)">{{
|
line.code
|
}}</text>
|
{{ line.value }}</text
|
>
|
<text
|
v-if="
|
line.checked &&
|
item.selAnswer !== item.answer &&
|
status == '2'
|
"
|
style="color: rgba(237, 69, 69, 1)"
|
><text class="mr24" style="color: rgba(237, 69, 69, 1)">{{
|
line.code
|
}}</text>
|
{{ line.value }}</text
|
>
|
</view>
|
<view
|
class="box_list_answer_tips"
|
v-if="
|
item.selAnswer &&
|
item.answer !== item.selAnswer &&
|
status != '0'
|
"
|
>
|
<view class="line">
|
<image src="@/static/ic_wrong@2x.png" />
|
<text>回答错误</text>
|
</view>
|
<view class="line">正确答案:{{ item.answer }}</view>
|
</view>
|
<view
|
class="box_list_answer_tips"
|
v-if="
|
item.selAnswer &&
|
item.answer === item.selAnswer &&
|
status != '0'
|
"
|
>
|
<view class="line">
|
<image src="@/static/ic_success@2.png" />
|
<text class="success">回答正确</text>
|
</view>
|
</view>
|
</template>
|
</view>
|
<view class="empty"></view>
|
<view
|
v-if="status == '0'"
|
class="box_list_answer_btn"
|
:class="{ disable: !answerIng }"
|
@click="onSubmit()"
|
>提交</view
|
>
|
<view v-if="status == '1'" class="box_list_answer_btn" @click="next()"
|
>恭喜你答题成功,去申请</view
|
>
|
<view
|
v-if="status == '2'"
|
style="background-color: #db534c"
|
class="box_list_answer_btn"
|
@click="handleAgain"
|
>答题失败,再来一次</view
|
>
|
<!-- 多选 -->
|
<!-- <template v-else-if="list[i].type === 2">
|
<view class="box_list_answer_item" v-for="(item, index) in list[i].options" :key="index"
|
@click="selectMultiple(item.code)">
|
<image src="@/static/checkbox_wrong@2x.png"
|
v-if="success && multiple.toString().indexOf(item.code) !== -1" />
|
<image src="@/static/checkbox@2x.png"
|
v-else-if="!multiple || multiple.toString().indexOf(item.code) === -1" />
|
<image src="@/static/checkbo1x_sel@2x.png"
|
v-else-if="multiple.toString().indexOf(item.code) !== -1" />
|
<text style="color: rgba(237, 69, 69, 1)"
|
v-if="success && multiple.toString().indexOf(item.code) !== -1">{{item.code}} {{item.value}}</text>
|
<text v-else-if="!multiple || multiple.toString().indexOf(item.code) === -1">{{item.code}} {{item.value}}</text>
|
<text style="color: rgba(77, 153, 168, 1)"
|
v-else-if="multiple.toString().indexOf(item.code) !== -1">{{item.code}} {{item.value}}</text>
|
</view>
|
</template> -->
|
</view>
|
</view>
|
</view>
|
</template>
|
|
<script>
|
import { getProblemsVO, getSystemDictData, saveProblemsVO } from '@/api'
|
export default {
|
name: 'answer',
|
|
data() {
|
return {
|
list: [],
|
bg: require("@/static/banner_dati.png"),
|
title: '',
|
content: '',
|
|
status: '0',
|
score: 0
|
}
|
},
|
computed: {
|
answerIng() {
|
let count = 0
|
this.list.forEach(item => {
|
if (item.selAnswer || item.selAnswer == 0) {
|
count++
|
}
|
})
|
return count === this.list.length
|
}
|
},
|
onLoad() {
|
this.getProblems()
|
this.getInfo()
|
},
|
|
methods: {
|
getInfo() {
|
// title
|
getSystemDictData({
|
dictCode: 'SYSTEM',
|
label: 'THEME'
|
}).then(res => {
|
if (res.code === 200) {
|
this.title = res.data.code
|
}
|
})
|
// this.$u.api.getSystemDictData({
|
getSystemDictData({
|
dictCode: 'SYSTEM',
|
label: 'DESCRIPTION'
|
}).then(res => {
|
if (res.code === 200) {
|
this.content = res.data.code
|
}
|
})
|
},
|
getProblems() {
|
getProblemsVO({ useType: 1 })
|
.then(res => {
|
if (res.code === 200) {
|
res.data.forEach(item => {
|
// 判断
|
if (item.type === 0) {
|
item.options = [{ code: '正确' }, { code: '错误' }]
|
}
|
// 单选/多选
|
if (item.type === 1 || item.type === 2) {
|
item.options = JSON.parse(item.options)
|
}
|
if (item.type === 2) {
|
item.options.forEach(i => {
|
i.checked = false
|
})
|
}
|
item.status = '0'
|
item.selAnswer = null
|
})
|
this.list = res.data
|
}
|
// res.param.problemsDOList.forEach(item => {
|
// item.options = JSON.parse(item.options)
|
// })
|
// this.list = res.param.problemsDOList
|
// console.log(this.list)
|
})
|
},
|
// 单选选择中题目
|
select(line, i) {
|
if (this.status != '0') return
|
this.list.forEach((item, index) => {
|
if (index === i) {
|
item.selAnswer = line.code
|
}
|
})
|
// this.problemIndex = index
|
},
|
changeBox(index, jeck) {
|
if (this.status != '0') return
|
this.list.forEach((item, i) => {
|
if (index === i) {
|
item.options.forEach((item2, j) => {
|
if (j === jeck) {
|
item2.checked = !item2.checked
|
}
|
})
|
item.selAnswer = item.options.filter(a => a.checked).map(b => b.code).sort().join(',')
|
}
|
})
|
},
|
sort(arr) {
|
arr.sort(function (a, b) {
|
return a.localeCompare(b)
|
})
|
},
|
// 多选
|
selectMultiple(key) {
|
if (!this.multiple) {
|
this.multiple = key
|
return
|
}
|
let arr = this.multiple.split(',')
|
if (this.multiple.indexOf(key) !== -1) {
|
arr.forEach((item, index) => {
|
if (key === item) {
|
arr.splice(index, 1)
|
}
|
})
|
this.sort(arr)
|
this.multiple = arr.join(',')
|
} else {
|
arr.push(key)
|
this.sort(arr)
|
this.multiple = arr.join(',')
|
}
|
},
|
// 下一题
|
onSubmit() {
|
if (!this.answerIng) return
|
const { list } = this
|
// 验证所有题目都有选项
|
let count = 0
|
list.forEach(item => {
|
if (!item.selAnswer) {
|
count++
|
}
|
})
|
if (count > 0) {
|
return uni.showToast({
|
title: '请先完成所有答题在提交',
|
icon: 'none'
|
})
|
}
|
// 判断对错
|
let flag = 0
|
list.forEach(item => {
|
if (item.selAnswer !== item.answer) {
|
flag++
|
} else {
|
this.score += item.score
|
}
|
})
|
if (flag > 0) {
|
this.status = '2'
|
return uni.showToast({
|
title: '答题失败,再来一次',
|
icon: 'none'
|
})
|
} else {
|
this.status = '1'
|
}
|
},
|
handleAgain() {
|
this.status = '0'
|
this.score = 0
|
this.getProblems()
|
},
|
next() {
|
saveProblemsVO({
|
openId: this.$store.state.openId,
|
useType: '1',
|
content: '',
|
score: this.score
|
}).then(res => {
|
this.score = 0
|
uni.navigateTo({
|
url: `/pages/appointment/appointment?answerId=${res.data}`
|
})
|
})
|
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
.box {
|
width: 100%;
|
height: 100vh;
|
background: $uni-color-primary;
|
.box_bgimage {
|
width: 100%;
|
padding: 0 40rpx;
|
box-sizing: border-box;
|
height: 223rpx;
|
display: flex;
|
flex-direction: column;
|
align-items: flex-start;
|
justify-content: center;
|
background-repeat: no-repeat;
|
background-size: cover;
|
.box_bgimage_a {
|
font-size: 54rpx;
|
font-weight: bold;
|
color: #ffffff;
|
text-shadow: 0rpx 4rpx 8rpx rgba(0, 0, 0, 0.19);
|
}
|
.box_bgimage_b {
|
font-size: 26rpx;
|
font-weight: 400;
|
color: #ffffff;
|
text-shadow: 0rpx 2rpx 4rpx rgba(0, 0, 0, 0.24);
|
margin-top: 18rpx;
|
}
|
}
|
.box_list {
|
width: 100%;
|
height: calc(100vh - 253rpx);
|
padding: 0 30rpx 30rpx 30rpx;
|
box-sizing: border-box;
|
.box_list_answer {
|
width: 100%;
|
height: 100%;
|
overflow-y: auto;
|
background: #ffffff;
|
border-radius: 16rpx;
|
padding: 30rpx;
|
box-sizing: border-box;
|
position: relative;
|
.box_list_answer_name {
|
font-size: 30rpx;
|
font-weight: 400;
|
color: #222222;
|
margin-bottom: 32rpx;
|
}
|
.box_list_answer_tips {
|
width: 100%;
|
padding: 22rpx 30rpx;
|
box-sizing: border-box;
|
background: #f7f7f7;
|
border-radius: 8rpx;
|
margin-bottom: 24rpx;
|
.line {
|
display: flex;
|
align-items: center;
|
font-size: 28rpx;
|
color: #333333;
|
margin-bottom: 20rpx;
|
&:nth-last-child(1){
|
margin-bottom: 0;
|
}
|
}
|
image {
|
width: 28rpx;
|
height: 28rpx;
|
}
|
text {
|
font-size: 28rpx;
|
font-weight: 400;
|
color: #e42d2d;
|
margin-left: 16rpx;
|
}
|
.success {
|
color: $uni-color-primary;
|
}
|
}
|
}
|
.score_static {
|
display: flex;
|
font-size: 32rpx;
|
margin-bottom: 40rpx;
|
.name {
|
font-weight: 600;
|
}
|
.num {
|
color: $uni-color-primary;
|
}
|
.warry {
|
color: #ed4545;
|
}
|
}
|
.list_item {
|
margin-bottom: 46rpx;
|
}
|
.box_list_answer_item {
|
width: 100%;
|
display: flex;
|
align-items: center;
|
margin-bottom: 30rpx;
|
image {
|
width: 36rpx;
|
height: 36rpx;
|
margin-right: 20rpx;
|
}
|
text {
|
font-size: 28rpx;
|
font-weight: 400;
|
color: #333333;
|
}
|
}
|
.des {
|
background: #cccccc !important;
|
border: none !important;
|
}
|
.empty {
|
height: 160rpx;
|
width: 100%;
|
}
|
.box_list_answer_btn {
|
position: fixed;
|
bottom: 120rpx;
|
left: 60rpx;
|
width: 630rpx;
|
height: 88rpx;
|
line-height: 88rpx;
|
text-align: center;
|
background: $uni-color-primary;
|
box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(77, 153, 168, 0.3);
|
border-radius: 44rpx;
|
font-size: 30rpx;
|
color: #ffffff;
|
}
|
.disable {
|
background-color: #cccccc;
|
}
|
}
|
}
|
</style>
|