qa-prevention-xgf-app/pages/train_management/exam_record.vue

458 lines
11 KiB
Vue

<template>
<view class="content">
<view class="content__titletop">
<view class="content__title">试卷名称-综合素质测评</view>
<view class="content__subtitle">(满分: 100)</view>
</view>
<view class="content__info">
<text>姓名: 测试者</text>
<text>分数: 85</text>
<text>考试时间: 2024-12-30</text>
</view>
<view class="content__sign">
<view style="margin-right: 10rpx">签字: </view>
<u-image
width="120rpx"
height="70rpx"
model="widthFix"
src="https://img.alicdn.com/img/i1/131787161/O1CN01z67Qvv22lnCzgPob4_!!0-saturn_solar.jpg_.webp"
/>
</view>
<view class="counter">
<text style="color: orange">{{ activeIndex || 1 }}</text>/{{ totalCount }}
</view>
<scroll-view ref="scrollViewRef" scroll-y="true" :scroll-top="0" class="question_list" @scrolltolower="handleScrollToLower" @scroll="handleScroll">
<view
class="question_item"
v-for="(item, index) in questionList"
:key="index"
>
<text class="tag_title">
{{ handleCalcQuestType(item.questionType) }}
</text>
{{ index + 1 }}.
<text>{{ item.stem }}</text>
<view class="question_options__item">
<view
v-for="(option, index) in item.options"
:key="index"
:class="
option.label === item.answer
? 'options question_options_active'
: 'options'
"
>
<text class="option_item">
{{ option.label }}. {{ option.value }}
</text>
</view>
</view>
<view class="question_answer">
正确答案:
<text style="display: inline-block; margin-left: 10rpx">
{{ item.answer }}
</text>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
pageSize: 10,
currentPage: 1,
totalPage: 0,
questionList: [],
// 新增当前激活的题目索引
activeIndex: 0,
// 新增总题目数(根据实际数据)
totalCount: 0,
questionTypeMap: {
0: '单选题',
1: '多选题',
2: '判断题',
3: '填空题',
4: '简答题'
}
}
},
onShow() {
this.resetList()
},
mounted() {
},
methods: {
async getData() {
this.questionList = [
{
questionType: 0,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'D'
},
{
questionType: 1,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'A'
},
{
questionType: 0,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'D'
},
{
questionType: 0,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'D'
},
{
questionType: 0,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'D'
},
{
questionType: 0,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'D'
},
{
questionType: 0,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'D'
},
{
questionType: 1,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'A'
},
{
questionType: 0,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'D'
},
{
questionType: 0,
stem: '离开特种作业岗位达 ( ) 个月以上的特种作业人员应当重新进行实操审核,经确人合格后方可上岗作业.',
options: [
{
label: 'A',
value: '6'
},
{
label: 'B',
value: '9'
},
{
label: 'C',
value: '12'
},
{
label: 'D',
value: '15'
}
],
answer: 'D'
},
]
this.totalPage = 2
this.totalCount = this.questionList.length
},
resetList() {
this.pageSize = 10
this.currentPage = 1
this.questionList = []
this.getData()
},
handleScrollToLower() {
this.currentPage++
if (this.totalPage >= this.currentPage) this.getData()
},
handleScroll(event) {
const query = uni.createSelectorQuery().in(this)
query.selectAll('.question_item').boundingClientRect()
query.select('.question_list').boundingClientRect()
query.exec((res) => {
const items = res[0]
const list = res[1]
if (!items || !list) return
// 计算当前可见项
const scrollTop = list.top * -1
const currentItem = items.findIndex(item =>
item.top - scrollTop >= 0
)
console.log('list.top :>> ', list.top);
if (currentItem !== -1 && currentItem !== this.activeIndex) {
this.activeIndex = currentItem + 1 // +1 因为索引从0开始
}
})
},
handleCalcQuestType(type) {
return `(${this.questionTypeMap[type]})`
},
}
}
</script>
<style scoped lang="scss">
.content {
padding: 17rpx;
.content__titletop {
text-align: center;
.content__title {
font-size: 34rpx;
font-weight: 600;
}
.content__subtitle {
margin-top: 8rpx;
font-size: 24rpx;
}
}
.content__info {
font-size: 34rpx;
margin-top: 36rpx;
display: flex;
justify-content: space-between;
align-items: center;
}
.content__sign {
margin-top: 18rpx;
font-size: 34rpx;
display: flex;
align-items: center;
}
.counter {
font-size: 28rpx;
margin: 15rpx 0;
text-align: end;
}
.question_list {
height: calc(100vh - 123px);
.question_item {
margin-bottom: 20rpx;
.tag_title {
font-size: 34rpx;
background-color: #94f0bd;
color: #5ac725;
border-radius: 8rpx;
padding: 2rpx 8rpx;
margin-right: 10rpx;
}
.question_options__item {
padding: 16rpx;
margin-top: 14rpx;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 12rpx;
.options {
padding: 8rpx 0 8rpx 10rpx;
width: 100%;
.option_item {
display: inline-block;
margin-left: 22rpx;
}
}
.question_options_active {
background-color: rgb(216, 216, 216);
color: #fff;
}
}
.question_answer {
font-size: 34rpx;
margin-left: 22rpx;
color: #acafb3;
}
}
}
}
</style>