猫妈狗爸伴宠师小程序前端代码
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.
 
 
 
 

189 lines
3.6 KiB

<template>
<!-- <view>伴宠师认证</view> -->
<view class="page">
<view class="box">
<view class="content bg-fff">
<view class="group" v-for="(group, gIdx) in list" :key="`group-${gIdx}`">
<view class="label size-22 level" :style="{borderRadius:'10rpx'}">
{{ group.title }}
</view>
<view class="">
<questionCard
v-for="(item, qIdx) in group.children"
:key="`${gIdx}-question-${qIdx}`"
:index="qIdx"
:data="item"
:type="item.type"
mode="display"
></questionCard>
</view>
</view>
</view>
</view>
<view class="footer-btn flex-colc">
<view class="size-22 color-777 tips-rest">
<!-- todo -->
剩余考试机会:<text class="highlight">{{ restTimes }}</text>次
</view>
<view class="btn" @click="onClick">
重新考试
</view>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue'
import { onShow } from '@dcloudio/uni-app'
import { getQuestionList, getQuestionOptions, answeBaseByQuestionId, answeTrainByQuestionId } from '@/api/examination'
import questionCard from '../components/questionCard.vue';
const list = ref([
{
title: '选择题',
children: [],
},
{
title: '主观题',
children: [],
},
])
const initList = async () => {
try {
let groups = [
{ title: '选择题', children: [], },
{ title: '主观题', children: [], },
]
let questions = await getQuestionList()
for (let i = 0; i < questions.length; i++) {
const { id, title, type } = questions[i]
let data = { id, title, type }
if (type === '基本') {
const options = (await getQuestionOptions({ questionId: id })).map(item => ({ id: item.id, title: item.title}))
data.options = options
// todo: 替换成批量查询接口
const { answer, answerId } = await answeBaseByQuestionId({ questionId: id })
if (answer.isTrue) {
continue
}
data.answer = answer.id
data.value = answerId
data.isTrue = answer.isTrue
groups[0].children.push(data)
} else {
// todo: 替换成批量查询接口
const { answer, remark } = await answeTrainByQuestionId({ questionId: id })
if (!remark) {
continue
}
data.answer = remark
data.value = answer
groups[1].children.push(data)
}
}
list.value = groups.filter(group => group.children.length > 0)
console.log('--list', list.value)
} catch (err) {
console.log('--initList--err', err)
}
}
const restTimes = ref()
onShow(() => {
// todo: fetch
restTimes.value = 3
initList()
})
const onClick = () => {
uni.reLaunch({
url: "/otherPages/authentication/examination/start"
// todo: check
// url: "/otherPages/authentication/list/index"
})
}
</script>
<style lang="scss" scoped>
$bar-height: 163rpx;
.page {
padding-bottom: $bar-height;
}
.box {
// background-image: linear-gradient(to bottom, #ffbf60, #f2f2f2);
padding: 16rpx;
.step {
width: 720rpx;
height: 32rpx;
border-radius: 32rpx;
background-color: #D9D9D9;
.in {
width: 50%;
height: 32rpx;
background-color: #ffbf60;
border-radius: 32rpx;
}
}
}
.content {
border-radius: 20rpx;
padding: 15rpx 20rpx;
.label {
width: 86rpx;
padding: 5rpx 15rpx;
color: #fff;
background-color: #FFBF60;
justify-content: center;
}
}
.group + .group {
margin-top: 68rpx;
}
.level {
display: flex;
}
.footer-btn {
height: $bar-height;
}
.tips {
&-rest {
color: #707070;
font-size: 22rpx;
margin: 9rpx 0 13rpx 0;
.highlight {
color: #FF8DC6;
}
}
}
</style>