379 lines
11 KiB
Vue
379 lines
11 KiB
Vue
<template>
|
||
<view class="page flex-col">
|
||
<view style="width: 100%;background: #f4f5f6;box-sizing: border-box;padding-top: 88px;">
|
||
<headers titles="考试结果录入">
|
||
<uni-icons type="left" color="#000000" size="22px"></uni-icons>
|
||
</headers>
|
||
</view>
|
||
<view class="block_2 flex-col">
|
||
<scroll-view
|
||
class="scroll-view"
|
||
scroll-y
|
||
:style="{ height: scrollHeight + 'px' }"
|
||
refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered"
|
||
>
|
||
<view
|
||
class="box_5 flex-col" v-for="(item, index) in examList"
|
||
:key="index"
|
||
:style="{ height: ((item.subject != 2 && item.subject != 3) || getButtonInfo(item).text === '1') ? '230rpx' : 'auto' }">
|
||
<view class="block_3 flex-row justify-between">
|
||
<view class="text-group_1 flex-col justify-between">
|
||
|
||
<text class="text_2" v-if="item.subject == 1 || item.subject == 4">{{
|
||
formatDate(item.examTime)
|
||
}}
|
||
</text>
|
||
<text class="text_2" v-else>{{ formatDate(item.startTime) }}</text>
|
||
|
||
<text class="text_3">{{ item.courseName }}</text>
|
||
</view>
|
||
<view class="text-group_2 flex-col justify-between">
|
||
<text class="text_4" v-if="item.examScore">{{ item.examScore }}</text>
|
||
<text class="text_4" v-else>{{ '--' }}</text>
|
||
<text class="text_5">{{ getStatusText(item.examStatus) }}</text>
|
||
</view>
|
||
</view>
|
||
<view class="block_4 flex-row justify-between">
|
||
<view class="text-wrapper_1 flex-col">
|
||
<text class="text_6">{{ getCourseTypeText(item.subject) }}</text>
|
||
</view>
|
||
<view class="text-wrapper_2 flex-col">
|
||
<text class="text_7">{{ item.courseType }}</text>
|
||
</view>
|
||
</view>
|
||
<view class="text-wrapper_3 flex-row justify-between" v-if="item.subject == 2 || item.subject == 3">
|
||
<text class="text_8">考试地址:</text>
|
||
<text class="text_9">{{ item.addr }}</text>
|
||
</view>
|
||
<view class="block_5 flex-row" v-if="(item.subject == 2 || item.subject == 3) && getButtonInfo(item).text !== '1'">
|
||
<view class="text-wrapper_4 flex-col" @click="handleButtonClick(item)" >
|
||
|
||
<text class="text_10">{{ getButtonInfo(item).text }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
</scroll-view>
|
||
</view>
|
||
<view class="block_8 flex-col">
|
||
<view class="text-wrapper_8 flex-col" @click="onEnterScoreClick()">
|
||
|
||
<text class="text_19">笔试成绩录入</text>
|
||
<u-picker
|
||
:show="pickerShow"
|
||
:columns="[pickerColumns]"
|
||
keyName="label"
|
||
@confirm="onPickerConfirm"
|
||
@cancel="pickerShow = false"
|
||
/>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
</template>
|
||
<script>
|
||
import {getLocalUserInfo} from '../../utils/auth';
|
||
import request from '@/utils/request.js'
|
||
import headers from "@/components/header/headers.vue";
|
||
|
||
export default {
|
||
components: {headers},
|
||
data() {
|
||
return {
|
||
loopData0: [
|
||
{
|
||
lanhutext0: '2025-01-20',
|
||
lanhutext1: '考试名称',
|
||
lanhutext2: '60分',
|
||
lanhufontColor2: 'rgba(251,66,59,1.000000)',
|
||
lanhutext3: '考试未通过',
|
||
lanhufontColor3: 'rgba(251,66,59,1.000000)',
|
||
lanhutext4: '科目二',
|
||
lanhutext5: 'C2',
|
||
lanhutext6: '考试地址:',
|
||
lanhutext7: '山东省济南市历下区'
|
||
},
|
||
{
|
||
lanhutext0: '2025-01-20',
|
||
lanhutext1: '考试名称',
|
||
lanhutext2: '--',
|
||
lanhufontColor2: 'rgba(51,51,51,1.000000)',
|
||
lanhutext3: '待审批',
|
||
lanhufontColor3: 'rgba(51,51,51,1.000000)',
|
||
lanhutext4: '科目二',
|
||
lanhutext5: 'C2',
|
||
lanhutext6: '考试地址:',
|
||
lanhutext7: '山东省济南市历下区'
|
||
}
|
||
],
|
||
userInfo: {},
|
||
examList: {},
|
||
examTwoList: {},
|
||
scrollHeight: 0,
|
||
constants: {},
|
||
courseList: [],
|
||
pickerShow: false,
|
||
pickerColumns: [],
|
||
curNow: 0,
|
||
isTriggered: false,
|
||
};
|
||
},
|
||
onLoad() {
|
||
this.userInfo = getLocalUserInfo()
|
||
this.getExamList()
|
||
this.getCourseList()
|
||
// 监听刷新事件
|
||
uni.$on('refresh', () => {
|
||
this.getExamList()
|
||
})
|
||
},
|
||
onReady() {
|
||
// 动态计算滚动区域高度
|
||
this.calculateScrollHeight();
|
||
},
|
||
methods: {
|
||
handleBack() {
|
||
uni.navigateBack({
|
||
delta: 1
|
||
});
|
||
},
|
||
|
||
/**
|
||
* 下拉刷新数据
|
||
*/
|
||
onRefresherrefresh() {
|
||
this.isTriggered = true
|
||
this.pageNo = 1
|
||
this.total = 0
|
||
this.examList = []
|
||
this.getExamList()
|
||
|
||
},
|
||
|
||
// 点击笔试成绩录入的时候 检查是否已报名课程
|
||
onEnterScoreClick() {
|
||
if (this.courseList.length > 0) {
|
||
this.pickerColumns = this.courseList.map(item => ({
|
||
label: item.courseName,
|
||
value: item.courseId
|
||
}));
|
||
this.pickerShow = true;
|
||
} else if (this.courseList.length === 1) {
|
||
this.goToScoreEntry(this.courseList[0]);
|
||
} else {
|
||
this.$u.toast("暂无课程信息");
|
||
}
|
||
},
|
||
|
||
// 选择课程后检查是否有课程进度信息
|
||
onPickerConfirm(e) {
|
||
const selectedCourseId = e.value[0];
|
||
const selectedCourse = this.courseList.find(item => item.courseId === selectedCourseId.value);
|
||
|
||
if (selectedCourse) {
|
||
this.getProcess(selectedCourse.courseId).then(processData => {
|
||
if (!processData || processData.length === 0) {
|
||
uni.showToast({
|
||
title: '请联系驾校负责人',
|
||
icon: 'none'
|
||
});
|
||
return;
|
||
}
|
||
|
||
// 检查是否存在科目1或科目4的数据
|
||
const hasSubject1Or4 = processData.some(item =>
|
||
item.subject === 1 || item.subject === 4
|
||
);
|
||
|
||
if (hasSubject1Or4) {
|
||
this.goToScoreEntry(selectedCourse);
|
||
} else {
|
||
uni.showToast({
|
||
title: '未找到考试信息',
|
||
icon: 'none'
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
this.pickerShow = false;
|
||
},
|
||
|
||
// 跳转成绩录入界面
|
||
goToScoreEntry(course) {
|
||
this.$u.route({
|
||
url: '/newPages/examinationAdd/index',
|
||
params: {
|
||
courseId: course.value,
|
||
courseType: course.courseType,
|
||
userId: course.userId,
|
||
tenantId: course.tenantId,
|
||
coachId :course.coachUserId,
|
||
}
|
||
});
|
||
},
|
||
|
||
// 获取课程进度
|
||
getProcess(courseId) {
|
||
return new Promise((resolve, reject) => {
|
||
request({
|
||
url: '/app-api/process/getAllByUserIdAndCourseId',
|
||
method: 'GET',
|
||
params: {
|
||
userId: this.userInfo.id,
|
||
courseId: courseId,
|
||
}
|
||
}).then(res => {
|
||
this.processList = res.data;
|
||
resolve(res.data);
|
||
}).catch(err => {
|
||
console.error('查询失败:', err);
|
||
reject(err);
|
||
});
|
||
});
|
||
},
|
||
|
||
// 获取考试信息
|
||
getExamList() {
|
||
request({
|
||
url: '/app-api/process/getExamListByUserId',
|
||
method: 'GET',
|
||
params: {
|
||
userId: this.userInfo.id,
|
||
}
|
||
}).then(res => {
|
||
this.examList = res.data
|
||
// this.getExamTwoList()
|
||
this.isTriggered = false
|
||
})
|
||
},
|
||
/* getExamTwoList() {
|
||
request({
|
||
url: '/app-api/examBatch/selectExamByUserIdAndCoachId',
|
||
method: 'GET',
|
||
params: {
|
||
userId: this.userInfo.id,
|
||
}
|
||
}).then(res => {
|
||
this.examTwoList = res.data
|
||
console.log('examTwoList', this.examTwoList)
|
||
console.log('resTwo', res)
|
||
})
|
||
}, */
|
||
|
||
// 获取课程信息
|
||
getCourseList() {
|
||
request({
|
||
url: '/app-api/small/drive/school-course-order/getCourseByLoginUser',
|
||
method: 'GET'
|
||
}).then(res => {
|
||
this.courseList = res.data
|
||
})
|
||
},
|
||
|
||
// 转换考试状态
|
||
getStatusText(status) {
|
||
const statusMap = {
|
||
0: '未通过',
|
||
1: '已通过',
|
||
9: '已送考',
|
||
'null': '未送考',
|
||
'true': '已通过',
|
||
'false': '未通过',
|
||
};
|
||
return statusMap[status] || '未知状态';
|
||
},
|
||
|
||
// 转换科目
|
||
getCourseTypeText(status) {
|
||
const statusMap = {
|
||
'1': '科目一',
|
||
'2': '科目二',
|
||
'3': '科目三',
|
||
'4': '科目四',
|
||
};
|
||
return statusMap[status] || '未知状态';
|
||
},
|
||
|
||
// 格式化时间
|
||
formatDate(timestamp) {
|
||
const date = new Date(timestamp);
|
||
const year = date.getFullYear();
|
||
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要+1
|
||
const day = String(date.getDate()).padStart(2, '0');
|
||
return `${year}-${month}-${day}`;
|
||
},
|
||
|
||
calculateScrollHeight() {
|
||
// 获取屏幕高度
|
||
const screenHeight = uni.getSystemInfoSync().windowHeight;
|
||
// 获取顶部区域高度
|
||
const topHeight = 88;
|
||
// 计算滚动区域高度
|
||
this.scrollHeight = screenHeight - topHeight;
|
||
},
|
||
|
||
|
||
getButtonInfo(item) {
|
||
if (item.fraction == null) {
|
||
return {text: '成绩录入', type: 'input'}
|
||
} else if (!item.ifPass) {
|
||
return {text: '考试未通过', type: 'failed'}
|
||
} else if (!item.ifEvaluate) {
|
||
return {text: '开始评价', type: 'evaluate'}
|
||
}else {
|
||
return {text: '1', type: 'evaluate'}
|
||
}
|
||
// else if (item.ifEvaluate) {
|
||
// return { text: '查看评价', type: 'view' }
|
||
// }
|
||
},
|
||
|
||
//
|
||
handleButtonClick(item) {
|
||
const buttonInfo = this.getButtonInfo(item)
|
||
|
||
switch (buttonInfo.type) {
|
||
case 'input':
|
||
this.goScoreInput(item)
|
||
break
|
||
case 'evaluate':
|
||
this.goEvaluate(item)
|
||
break
|
||
case 'view':
|
||
this.goViewEvaluation(item)
|
||
break
|
||
default:
|
||
|
||
}
|
||
},
|
||
|
||
// 跳转到成绩录入页面
|
||
goScoreInput(item) {
|
||
uni.navigateTo({
|
||
url: `/newPages/examinationAdd/index?id=${item.batchItemId}&batchId=${item.batchId}&batchId=${item.batchId}&tenantId=${item.tenantId}&courseType=${item.courseType}&subject=${item.subject}&courseId=${item.courseId}&coachId=${item.coachId}`
|
||
});
|
||
},
|
||
// 跳转到开始评价页面
|
||
goEvaluate(item) {
|
||
item = JSON.stringify(item)
|
||
uni.navigateTo({
|
||
url: `/newPages/evaluateAdd/index?data=${item}&type=kaoshi&controls=add`
|
||
})
|
||
},
|
||
|
||
// 跳转到查看评价页面
|
||
goViewEvaluation(item) {
|
||
uni.navigateTo({
|
||
url: `/newPages/evaluationDetail/index?evaluateId=${item.evaluateId}`
|
||
})
|
||
}
|
||
|
||
}
|
||
};
|
||
</script>
|
||
<style lang='scss'>
|
||
@import '../common/common.scss';
|
||
@import './assets/style/index.rpx.scss';
|
||
</style>
|