Merge remote-tracking branch 'origin/master'

# Conflicts:
#	newPages/examinationList/index.vue
This commit is contained in:
Lx 2025-04-09 10:57:49 +08:00
commit 1747d849cf
12 changed files with 715 additions and 641 deletions

View File

@ -9,7 +9,7 @@
<u-subsection :list="list" :current="curNow" @change="sectionChange"></u-subsection> <u-subsection :list="list" :current="curNow" @change="sectionChange"></u-subsection>
</view> </view>
<scroll-view style="height: 1200rpx;" scroll-y="true" class="itemContent" @scrolltolower="onReachBottomCus" <scroll-view style="height: 1200rpx;" scroll-y="true" class="itemContent" @scrolltolower="onReachBottomCus"
refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered"> refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered" v-if="appointmentList.length > 0">
<!-- 新增内容容器 --> <!-- 新增内容容器 -->
<view class="box_2 flex-col" v-if="curNow === 0"> <view class="box_2 flex-col" v-if="curNow === 0">
<view class="box_4 flex-col" v-for="item in appointmentList" @click="goDetail(item,'')" :key="item.id"> <view class="box_4 flex-col" v-for="item in appointmentList" @click="goDetail(item,'')" :key="item.id">
@ -82,7 +82,14 @@
</view> </view>
</view> </view>
</scroll-view> </scroll-view>
<view class="box_6 flex-col bottom_"> <view class="empty-container" v-else>
<u-empty
mode="data"
/>
</view>
<view class="box_6 flex-col bottom_">
<view class="text-wrapper_12 flex-col " @click="goAppointment()"> <view class="text-wrapper_12 flex-col " @click="goAppointment()">
<text class="text_19">预约</text> <text class="text_19">预约</text>
</view> </view>
@ -138,10 +145,10 @@
}, },
getList() { getList() {
request({ request({
url: '/app-api/drivingSchool/system/reservationCourse/list', url: '/app-api/reservation-course/page',
method: 'GET', method: 'GET',
params: { params: {
pageNum: this.pageNo, pageNo: this.pageNo,
pageSize: this.pageSize, pageSize: this.pageSize,
ifCancel: false ifCancel: false
}, },
@ -165,7 +172,7 @@
params: { params: {
pageNum: this.pageNo, pageNum: this.pageNo,
pageSize: this.pageSize, pageSize: this.pageSize,
selectType: 'all' selectType: 'my'
}, },
tenantIdFlag: false tenantIdFlag: false
}).then(res => { }).then(res => {
@ -279,4 +286,11 @@
margin: 8rpx 0 0 12rpx; margin: 8rpx 0 0 12rpx;
} }
} }
.empty-container {
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
height: 100vh; /* 或者你需要撑满的高度 */
}
</style> </style>

View File

@ -1,246 +1,281 @@
<template> <template>
<view class="page flex-col"> <view class="page flex-col">
<view class="header"> <view class="header">
<headers titles="预约"> <headers titles="预约">
<uni-icons type="left" color="#000000" size="22px"></uni-icons> <uni-icons type="left" color="#000000" size="22px"></uni-icons>
</headers> </headers>
</view> </view>
<view class="form_"> <view class="form_">
<view class="" style="background-color: white;padding: 10rpx 15rpx;border-radius: 15rpx"> <view class="" style="background-color: white;padding: 10rpx 15rpx;border-radius: 15rpx">
<u-form labelPosition="left" labelWidth="auto" labelAlign="center" :model="appointmentInfo" <u-form labelPosition="left" labelWidth="auto" labelAlign="center" :model="appointmentInfo"
:rules="rules" ref="uForm"> :rules="rules" ref="uForm">
<u-form-item label="课程名称" prop="userInfo.name" @click="showCourse = true" ref="item1"> <u-form-item label="课程名称" prop="courseName" @click="showCourse = true" ref="item1">
<u-input v-model="appointmentInfo.courseName" disabled disabledColor="#ffffff" <u-input v-model="appointmentInfo.courseName" disabled disabledColor="#ffffff"
placeholder="请选择课程" border="none"></u-input> placeholder="请选择课程" border="none"></u-input>
<u-icon slot="right" name="arrow-right"></u-icon> <u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item> </u-form-item>
<u-form-item label="训练类型" prop="userInfo.sex" ref="item1"> <u-form-item label="训练类型" prop="courseType" ref="item1">
<u-input v-model="appointmentInfo.courseType" disabled disabledColor="#ffffff" <u-input v-model="appointmentInfo.courseType" disabled disabledColor="#ffffff"
placeholder="请选择训练类型" border="none"></u-input> placeholder="请选择训练类型" border="none"></u-input>
</u-form-item> </u-form-item>
<u-form-item label="选择科目" prop="userInfo.sex" ref="item1"> <u-form-item label="选择科目" prop="subject" ref="item1">
<u-input v-model="appointmentInfo.subjectStr" disabled disabledColor="#ffffff" <u-input v-model="appointmentInfo.subjectStr" disabled disabledColor="#ffffff"
placeholder="请选择科目" border="none"></u-input> placeholder="请选择科目" border="none"></u-input>
</u-form-item> </u-form-item>
<u-form-item label="教练名称" prop="userInfo.sex" ref="item1"> <u-form-item label="教练名称" prop="coachName" ref="item1">
<u-input v-model="appointmentInfo.coachName" disabled disabledColor="#ffffff" <u-input v-model="appointmentInfo.coachName" disabled disabledColor="#ffffff"
placeholder="请选择教练" border="none"></u-input> placeholder="请选择教练" border="none"></u-input>
</u-form-item> </u-form-item>
</u-form> </u-form>
</view> </view>
</view> </view>
<view class="form_"> <view class="form_">
<view class="" style="background-color: white;padding: 10rpx 15rpx;border-radius: 15rpx"> <view class="" style="background-color: white;padding: 10rpx 15rpx;border-radius: 15rpx">
<u-form labelPosition="left" labelWidth="auto" :model="appointmentInfo" :rules="rules" ref="uForm"> <u-form labelPosition="left" labelWidth="auto" :model="appointmentInfo" :rules="rules" ref="uForm">
<u-form-item label="累计训练时长" prop="userInfo.name" ref="item1"> <u-form-item label="累计训练时长" prop="name" ref="item1">
<u-input v-model="appointmentInfo.trainTime" disabled disabledColor="#ffffff" <u-input v-model="appointmentInfo.trainTime" disabled disabledColor="#ffffff"
border="none"></u-input> border="none"></u-input>
</u-form-item> </u-form-item>
<u-form-item label="日期选择" prop="userInfo.sex" @click="showDate = true;" <u-form-item label="日期选择" prop="dateStr" @click="showDate = true;"
ref="item1"> ref="item1">
<u-input v-model="appointmentInfo.dateStr" disabled disabledColor="#ffffff" <u-input v-model="appointmentInfo.dateStr" disabled disabledColor="#ffffff"
placeholder="请选择日期" border="none"></u-input> placeholder="请选择日期" border="none"></u-input>
<u-icon slot="right" name="arrow-right"></u-icon> <u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item> </u-form-item>
<u-form-item label="时间范围" prop="userInfo.sex" borderBottom @click="showTime = true;" <u-form-item label="时间范围" prop="time" borderBottom @click="showTime = true;"
ref="item1" :borderBottom="false"> ref="item1" :borderBottom="false">
<u-input v-model="appointmentInfo.time" disabled disabledColor="#ffffff" <u-input v-model="appointmentInfo.time" disabled disabledColor="#ffffff"
placeholder="请选择时间范围" border="none"></u-input> placeholder="请选择时间范围" border="none"></u-input>
<u-icon slot="right" name="arrow-right"></u-icon> <u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item> </u-form-item>
</u-form> </u-form>
</view> </view>
</view> </view>
<u-picker :show="showCourse" @close="showCourse = false" keyName="courseName" @cancel="showCourse = false" <u-picker :show="showCourse" @close="showCourse = false" keyName="courseName" @cancel="showCourse = false"
@confirm="confirmCourse" :columns="[courseList]"></u-picker> @confirm="confirmCourse" :columns="[courseList]"></u-picker>
<u-picker :show="showTime" @close="showTime = false" keyName="label" @cancel="showTime = false" <u-picker :show="showTime" @close="showTime = false" keyName="label" @cancel="showTime = false"
@confirm="confirmTime" :columns="[timeColumns]"></u-picker> @confirm="confirmTime" :columns="[timeColumns]"></u-picker>
<u-calendar :show="showDate" @confirm="confirmDate" @close="showDate = false"></u-calendar> <u-calendar :show="showDate" @confirm="confirmDate" @close="showDate = false"></u-calendar>
<view class="section_4 flex-col bottom_"> <view class="section_4 flex-col bottom_">
<view class="text-wrapper_5 flex-col" @click="submit"> <view class="text-wrapper_5 flex-col" @click="submit">
<text class="text_10">开始预约</text> <text class="text_10">开始预约</text>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import headers from "@/components/header/headers.vue"; import headers from "@/components/header/headers.vue";
import request from "@/utils/request"; import request from "@/utils/request";
import {getDictDataByType} from "@/utils/utils"; import {getDictDataByType} from "@/utils/utils";
import {getLocalUserInfo} from "@/utils/auth";
export default { export default {
components: { components: {
headers headers
}, },
data() { data() {
return { return {
rules: {}, // rules constants: {},
constants: {}, appointmentInfo: {
appointmentInfo: { subjectStr: '',
subjectStr: '', courseName: '',
courseName: '', coachName: '',
coachName: '', trainTime: '',
trainTime: '', dateStr: '',
dateStr:'', time: '',
time: '', coachId: '',
coachId:'', }, //
}, // showCourse: false,
showCourse: false, courseList: [], //
courseList: [], // showDate: false,
showDate: false, showTime: false,
showTime: false, tenantId: '',
tenantId: '', subjectColumns: [{
subjectColumns: [{ label: '科目二',
label: '科目二', value: 2
value: 2 },
}, {
{ label: '科目三',
label: '科目三', value: 3
value: 3 },
}, ],
], //
// timeColumns: '',
timeColumns: '', showSubject: false,
showSubject: false rules: {
}; time: [{
}, required: true,
async onLoad() { message: '请选择时间',
this.getLoginUserCourseInfoList() trigger: 'change'
this.timeColumns = await getDictDataByType('school_reserv_time'); }],
console.log('字典', this.timeColumns) courseName: [{
required: true,
message: '请选择课程',
trigger: 'change'
}],
dateStr: [{
required: true,
message: '请选择日期',
trigger: 'change'
}],
coachName: [{
required: true,
message: '请选择教练',
trigger: 'change'
}],
subject: [{
required: true,
message: '请选择科目',
trigger: 'change'
}],
}
};
},
async onLoad() {
this.getLoginUserCourseInfoList()
this.timeColumns = await getDictDataByType('school_reserv_time');
console.log('字典', this.timeColumns)
},
onReady() {
//setRules
this.$refs.uForm.setRules(this.rules)
},
methods: {
goback() {
uni.navigateBack()
}, },
methods: { confirmCourse(e) {
goback() { this.restForm()
uni.navigateBack() this.appointmentInfo.courseId = e.value[0].courseId
}, this.appointmentInfo.courseName = e.value[0].courseName
confirmCourse(e) { this.appointmentInfo.courseType = e.value[0].courseType
this.restForm() this.tenantId = e.value[0].tenantId
this.appointmentInfo.courseId = e.value[0].courseId this.appointmentInfo.userName = e.value[0].userName
this.appointmentInfo.courseName = e.value[0].courseName this.appointmentInfo.userId = e.value[0].userId
this.appointmentInfo.courseType = e.value[0].courseType this.getAllByCourseId(e.value[0].courseId)
this.tenantId = e.value[0].tenantId console.log(e)
this.appointmentInfo.userName = e.value[0].userName this.showCourse = false
this.appointmentInfo.userId = e.value[0].userId },
this.getAllByCourseId(e.value[0].courseId) confirmDate(e) {
console.log(e) console.log(e)
this.showCourse = false this.appointmentInfo.dateStr = e[0]
}, console.log(this.appointmentInfo)
confirmDate(e) { this.showDate = false
console.log(e) },
this.appointmentInfo.dateStr = e[0] confirmTime(e) {
console.log(this.appointmentInfo) console.log(e)
this.showDate = false this.appointmentInfo.time = e.value[0].label
}, console.log(this.appointmentInfo)
confirmTime(e) { this.showTime = false
console.log(e) },
this.appointmentInfo.time = e.value[0].label restForm() {
console.log(this.appointmentInfo) this.appointmentInfo = {
this.showTime = false subjectStr: '',
}, courseName: '',
restForm() { coachName: '',
this.appointmentInfo = { trainTime: '',
subjectStr: '', }
courseName: '', },
coachName: '', //
trainTime: '', getLoginUserCourseInfoList() {
} request({
}, url: '/app-api/small/drive/school-course-order/getCourseByLoginUser',
// method: 'GET'
getLoginUserCourseInfoList() { }).then(res => {
request({ if (res.data.length == 0) {
url: '/app-api/small/drive/school-course-order/getCourseByLoginUser', uni.showModal({
method: 'GET' title: '提示',
}).then(res => { content: '请先报名课程',
if (res.data.length == 0) { showCancel: false,
uni.showModal({ success: function (res) {
title: '提示', if (res.confirm) {
content: '请先报名课程', console.log('用户点击确定');
showCancel: false, uni.navigateBack()
success: function(res) { } else if (res.cancel) {
if (res.confirm) { console.log('用户点击取消');
console.log('用户点击确定');
uni.navigateBack()
} else if (res.cancel) {
console.log('用户点击取消');
}
} }
}); }
});
}
this.courseList = res.data
})
},
//id
async getAllByCourseId(courseId) {
console.log('courseId', courseId)
const res = await request({
url: '/app-api/process/getAllByCourseId',
method: 'GET',
params: {
courseId: courseId
}
})
// 14
// && item.subject != 1 && item.subject != 4
const progress = res.data.filter(item => {
return item.status == 1 && item.subject != 1 && item.subject != 4
})
if (progress.length > 0) {
console.log('正在训练中的科目', progress)
// 14
const subject = progress[0].subject
this.$nextTick(() => {
this.appointmentInfo.subject = subject
this.appointmentInfo.subjectStr = this.subjectColumns.find(item => item.value == subject).label
})
this.appointmentInfo.coachName = progress[0].coachName
this.appointmentInfo.coachId = progress[0].coachId
this.appointmentInfo.trainTime = progress[0].trainTime
console.log('subject', this.appointmentInfo)
} else {
//
uni.showModal({
title: '提示',
content: '只能预约训练科目二和科目三',
showCancel: false,
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
uni.navigateBack()
} else if (res.cancel) {
console.log('用户点击取消');
}
} }
this.courseList = res.data });
}) }
}, },
//id //
async getAllByCourseId(courseId) { getTrainAddress() {
console.log('courseId', courseId) request({
const res = await request({ url: '/app-api/small/address/getList',
url: '/app-api/process/getAllByCourseId', method: 'GET',
method: 'GET', params: {
params: { type: 0,
courseId: courseId subject: this.appointmentInfo.subject,
} tenantId: this.tenantId
}) }
// 14 }).then(res => {
// && item.subject != 1 && item.subject != 4 console.log(res)
const progress = res.data.filter(item => { })
return item.status == 1 && item.subject != 1 && item.subject != 4 },
}) submit() {
if (progress.length > 0) { //
console.log('正在训练中的科目', progress) this.$refs.uForm.validate().then(res => {
// 14 const userInfo = getLocalUserInfo()
const subject = progress[0].subject const data = {
this.$nextTick(() => { ...this.appointmentInfo,
userId: userInfo.id,
this.appointmentInfo.subject = subject userName: userInfo.nickname,
this.appointmentInfo.subjectStr = this.subjectColumns.find(item => item.value == tenantId: this.tenantId,
subject).label reservDay: this.appointmentInfo.dateStr,
}) reservTime: this.appointmentInfo.time,
this.appointmentInfo.coachName = progress[0].coachName subject: this.appointmentInfo.subject,
this.appointmentInfo.coachId = progress[0].coachId }
this.appointmentInfo.trainTime = progress[0].trainTime
console.log('subject', this.appointmentInfo)
} else {
//
uni.showModal({
title: '提示',
content: '只能预约训练科目二和科目三',
showCancel: false,
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
uni.navigateBack()
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
},
//
getTrainAddress() {
request({
url: '/app-api/small/address/getList',
method: 'GET',
params: {
type: 0,
subject: this.appointmentInfo.subject,
tenantId: this.tenantId
}
}).then(res => {
console.log(res)
})
},
submit(){
request({ request({
url: '/app-api/drivingSchool/system/reservationCourse', url: '/app-api/reservation-course/create',
method: 'POST', method: 'PUT',
data: { data: data
...this.appointmentInfo,
tenantId: this.tenantId,
reservDay: this.appointmentInfo.dateStr,
reservTime: this.appointmentInfo.time,
subject: this.appointmentInfo.subject,
}
}).then(res => { }).then(res => {
console.log(res) console.log(res)
uni.showToast({ uni.showToast({
@ -253,27 +288,29 @@
uni.navigateBack() uni.navigateBack()
}, 2000) }, 2000)
}) })
}, }).catch(errors => {
} })
}; },
}
};
</script> </script>
<style lang='scss'> <style lang='scss'>
@import '../common/common.scss'; @import '../common/common.scss';
@import './assets/style/index.rpx.scss'; @import './assets/style/index.rpx.scss';
.bottom_ { .bottom_ {
position: fixed; position: fixed;
bottom: 0; bottom: 0;
} }
.header { .header {
width: 100%; width: 100%;
background: #f4f5f6; background: #f4f5f6;
box-sizing: border-box; box-sizing: border-box;
padding-top: 88px; padding-top: 88px;
} }
.form_ { .form_ {
padding: 10rpx 20rpx; padding: 10rpx 20rpx;
} }
</style> </style>

View File

@ -37,7 +37,7 @@
<view style="width: 90%; height: 1px; background-color: #e0e0e0; margin: 20px 10rpx auto;"></view> <view style="width: 90%; height: 1px; background-color: #e0e0e0; margin: 20px 10rpx auto;"></view>
<view class="text-wrapper_5 flex-row justify-between" v-if="!isTrain"> <view class="text-wrapper_5 flex-row justify-between" v-if="!isTrain">
<text class="text_12">累计训练时长</text> <text class="text_12">累计训练时长</text>
<text class="text_13">{{ appointmentInfo.allDriveTime }}分钟</text> <text class="text_13">{{ appointmentInfo.trainTime }}分钟</text>
</view> </view>
<view class="text-wrapper_6 flex-row justify-between" v-if="isTrain"> <view class="text-wrapper_6 flex-row justify-between" v-if="isTrain">
<text class="text_14">训练地址</text> <text class="text_14">训练地址</text>
@ -56,7 +56,7 @@
<view class="text-wrapper_9 flex-col" v-if="!isTrain"> <view class="text-wrapper_9 flex-col" v-if="!isTrain">
<text class="text_20">审核意见</text> <text class="text_20">审核意见</text>
<text class="text_21"> <text class="text_21">
{{ appointmentInfo.remark == null ? '暂无' : appointmentInfo.remark }} {{ appointmentInfo.refuseReason == null ? '暂无' : appointmentInfo.refuseReason }}
</text> </text>
</view> </view>
</view> </view>
@ -112,11 +112,11 @@ export default {
console.log("匹配的训练时间数据:", data); console.log("匹配的训练时间数据:", data);
this.appointmentInfo.allDriveTime = data ? data.trainTime || "0" : "0"; this.appointmentInfo.trainTime = data ? data.trainTime || "0" : "0";
console.log( console.log(
"this.appointmentInfo.allDriveTime", "this.appointmentInfo.trainTime",
this.appointmentInfo.allDriveTime this.appointmentInfo.trainTime
); );
} catch (error) { } catch (error) {
console.error("获取训练时间失败:", error); console.error("获取训练时间失败:", error);

View File

@ -2,7 +2,7 @@
background-color: rgba(242, 244, 248, 1); background-color: rgba(242, 244, 248, 1);
position: relative; position: relative;
width: 750rpx; width: 750rpx;
height: 4112rpx; //height: 4112rpx;
overflow: hidden; overflow: hidden;
.group_1 { .group_1 {
background-color: rgba(255, 255, 255, 1); background-color: rgba(255, 255, 255, 1);
@ -247,7 +247,7 @@
.group_5 { .group_5 {
background-color: rgba(255, 255, 255, 1); background-color: rgba(255, 255, 255, 1);
border-radius: 8px; border-radius: 8px;
height: 2870rpx; //height: 2870rpx;
width: 686rpx; width: 686rpx;
position: relative; position: relative;
margin: -30rpx 0 0 32rpx; margin: -30rpx 0 0 32rpx;

View File

@ -1,17 +1,9 @@
<template> <template>
<view class="page flex-col"> <view class="page flex-col">
<view class="group_1 flex-row"> <view style="width: 100%;background: #f4f5f6;box-sizing: border-box;padding-top: 88px;">
<headers titles="课程详情">
</view> <uni-icons type="left" color="#000000" size="22px"></uni-icons>
<view class="group_2 flex-row"> </headers>
<image
class="label_1"
referrerpolicy="no-referrer"
src="/static/lanhu_kechengxiangqing/FigmaDDSSlicePNG53ddee177d4f9800624b95a9ec941112.png"
@click="goBack()"
/>
<text class="text_2">课程详情</text>
</view> </view>
<view class="group_3 flex-col"> <view class="group_3 flex-col">
<image <image
@ -41,20 +33,11 @@
<view class="group_5 flex-col"> <view class="group_5 flex-col">
<view class="section_4 flex-row justify-between"> <view class="section_4 flex-row justify-between">
<view class="block_3 flex-col"></view> <view class="block_3 flex-col"></view>
<text class="text_10">报名类型</text> <text class="text_10">课程介绍</text>
</view> </view>
<view class="image-wrapper_2 flex-row"> <view class="u-content">
<image <u-parse :content="courseDetails.remark"></u-parse>
class="image_2"
referrerpolicy="no-referrer"
src="/static/lanhu_kechengxiangqing/FigmaDDSSlicePNG156254d307fe40d6e67828fbe5adb90f.png"
/>
</view> </view>
<image
class="image_3"
referrerpolicy="no-referrer"
src="/static/lanhu_kechengxiangqing/FigmaDDSSlicePNG40a433e56593a25193fc18c2d385444f.png"
/>
</view> </view>
<view class="group_6 flex-row"> <view class="group_6 flex-row">
<view class="image-text_1 flex-col justify-between" @click="zxkf()"> <view class="image-text_1 flex-col justify-between" @click="zxkf()">
@ -75,8 +58,10 @@
import request from "@/utils/request"; import request from "@/utils/request";
import config from "@/config.js" import config from "@/config.js"
import {getLocalUserInfo, getUserInfo} from "@/utils/auth"; import {getLocalUserInfo, getUserInfo} from "@/utils/auth";
import headers from "@/components/header/headers.vue";
export default { export default {
components: {headers},
data() { data() {
return { return {
courseId: undefined, courseId: undefined,
@ -149,4 +134,8 @@ export default {
<style lang='scss'> <style lang='scss'>
@import '../common/common.scss'; @import '../common/common.scss';
@import './assets/style/index.rpx.scss'; @import './assets/style/index.rpx.scss';
.u-content{
margin-top: 20rpx;
padding: 10rpx;
}
</style> </style>

View File

@ -6,7 +6,7 @@
</headers> </headers>
</view> </view>
<view class="group_4 flex-col"> <view class="group_4 flex-col">
<view class="list_1 flex-col"> <view class="list_1 flex-col" v-if="evaluate.length > 0">
<scroll-view style="height: 1400rpx;" scroll-y="true" class="itemContent" <scroll-view style="height: 1400rpx;" scroll-y="true" class="itemContent"
@scrolltolower="onReachBottomCus" refresher-enabled @refresherrefresh="onRefresherrefresh" @scrolltolower="onReachBottomCus" refresher-enabled @refresherrefresh="onRefresherrefresh"
:refresher-triggered="isTriggered"> :refresher-triggered="isTriggered">
@ -38,6 +38,12 @@
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
<view class="empty-container" v-else>
<u-empty
mode="data"
text="评价为空"
/>
</view>
</view> </view>
</view> </view>
</template> </template>
@ -148,4 +154,18 @@
<style lang='scss'> <style lang='scss'>
@import '../common/common.scss'; @import '../common/common.scss';
@import './assets/style/index.rpx.scss'; @import './assets/style/index.rpx.scss';
.empty-container {
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
height: 100vh; /* 或者你需要撑满的高度 */
}
.text-group_1 {
display: inline-block;
max-width: 4em; /* 一个汉字大概占1em3em就是三个字 */
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style> </style>

View File

@ -111,8 +111,13 @@
} else if (options.type === 'kaoshi') { } else if (options.type === 'kaoshi') {
this.title = '考试' this.title = '考试'
// //
this.info.evaluateType = 0 this.info.evaluateType = 1
this.info.busiId = data.batchItemId
} }
this.info.createTime = undefined
this.info.updataTime = undefined
this.info.creator = undefined
this.info.updater = undefined
} else { } else {
Object.assign(this.info, data); Object.assign(this.info, data);
} }
@ -171,4 +176,11 @@
justify-content: center; justify-content: center;
/* 新增:水平居中 */ /* 新增:水平居中 */
} }
.text-group_2 {
display: inline-block;
max-width: 4em; /* 一个汉字大概占1em3em就是三个字 */
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style> </style>

View File

@ -1,120 +1,124 @@
<template> <template>
<view class="page flex-col"> <view class="page flex-col">
<view class="block_1 flex-row"> <view class="block_1 flex-row">
</view> </view>
<view class="block_2 flex-col"> <view class="block_2 flex-col">
<view class="box_3 flex-row"> <view class="box_3 flex-row">
<image <image
class="label_1" class="label_1"
referrerpolicy="no-referrer" referrerpolicy="no-referrer"
src="/static/lanhu_kaoshijieguoluru/FigmaDDSSlicePNGacf527a62cbe7351c6472edd8f5b2814.png" src="/static/lanhu_kaoshijieguoluru/FigmaDDSSlicePNGacf527a62cbe7351c6472edd8f5b2814.png"
@click="handleBack()" @click="handleBack()"
/> />
<text class="text_1">考试结果录入</text> <text class="text_1">考试结果录入</text>
</view> </view>
<view> <view>
<scroll-view <scroll-view
class="scroll-view" class="scroll-view"
scroll-y scroll-y
:style="{ height: scrollHeight + 'px' }" :style="{ height: scrollHeight + 'px' }"
refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered" refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered"
> >
<view <view
class="box_5 flex-col" v-for="(item, index) in examList" class="box_5 flex-col" v-for="(item, index) in examList"
:key="index" :key="index"
:style="{ height: (item.subject != 2 && item.subject != 3) ? '210rpx' : 'auto' }"> :style="{ height: ((item.subject != 2 && item.subject != 3) || getButtonInfo(item).text === '1') ? '230rpx' : 'auto' }">
<view class="block_3 flex-row justify-between"> <view class="block_3 flex-row justify-between">
<view class="text-group_1 flex-col 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-if="item.subject == 1 || item.subject == 4">{{
<text class="text_2" v-else>{{ formatDate(item.startTime) }}</text> formatDate(item.examTime)
}}
<text class="text_3">{{ item.courseName }}</text> </text>
</view> <text class="text_2" v-else>{{ formatDate(item.startTime) }}</text>
<view class="text-group_2 flex-col justify-between">
<text class="text_4" v-if="item.examScore">{{ item.examScore }}</text> <text class="text_3">{{ item.courseName }}</text>
<text class="text_4" v-else>{{ '--' }}</text> </view>
<text class="text_5">{{ getStatusText(item.examStatus) }}</text> <view class="text-group_2 flex-col justify-between">
</view> <text class="text_4" v-if="item.examScore">{{ item.examScore }}</text>
</view> <text class="text_4" v-else>{{ '--' }}</text>
<view class="block_4 flex-row justify-between"> <text class="text_5">{{ getStatusText(item.examStatus) }}</text>
<view class="text-wrapper_1 flex-col"> </view>
<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">
<view class="text-wrapper_4 flex-col" @click="handleButtonClick(item)">
<!-- <text class="text_10" v-if="item.fraction != null && item.ifPass">开始评价</text>
<text class="text_10" v-else-if="item.fraction == null && (item.ifPass == null || item.ifPass == 0)">成绩录入</text>
<text class="text_10" v-else-if="!item.ifEvaluate">查看评价</text> -->
<text class="text_10">{{ getButtonInfo(item).text }}</text>
</view>
</view>
</view>
<!-- <view class="list_1 flex-col">
<view class="list-items_1 flex-col" v-for="(item, index) in examList" :key="index" >
<view class="block_6 flex-row justify-between">
<view class="text-group_3 flex-col justify-between">
<text class="text_11" >{{ formatDate(item.examTime) }}</text>
<text class="text_12" >{{item.courseName}}</text>
</view> </view>
<view class="text-group_4 flex-col justify-between"> <view class="block_4 flex-row justify-between">
<text <view class="text-wrapper_1 flex-col">
class="text_13" <text class="text_6">{{ getCourseTypeText(item.subject) }}</text>
:style="{ color: item.examScore }" </view>
>{{item.examScore}}</text> <view class="text-wrapper_2 flex-col">
<text <text class="text_7">{{ item.courseType }}</text>
class="text_14" </view>
:style="{ color: item.examStatus }" </view>
>{{ getStatusText(item.examStatus) }}</text> <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" v-if="item.fraction != null && item.ifPass">开始评价</text>
<text class="text_10" v-else-if="item.fraction == null && (item.ifPass == null || item.ifPass == 0)">成绩录入</text>
<text class="text_10" v-else-if="!item.ifEvaluate">查看评价</text> -->
<text class="text_10">{{ getButtonInfo(item).text }}</text>
</view>
</view> </view>
</view> </view>
<view class="block_7 flex-row justify-between"> <!-- <view class="list_1 flex-col">
<view class="text-wrapper_5 flex-col"> <view class="list-items_1 flex-col" v-for="(item, index) in examList" :key="index" >
<text class="text_15" >{{getCourseTypeText(item.subject)}}</text> <view class="block_6 flex-row justify-between">
</view> <view class="text-group_3 flex-col justify-between">
<view class="text-wrapper_6 flex-col"> <text class="text_11" >{{ formatDate(item.examTime) }}</text>
<text class="text_16" >{{item.courseType}}</text> <text class="text_12" >{{item.courseName}}</text>
</view> </view>
<view class="text-group_4 flex-col justify-between">
<text
class="text_13"
:style="{ color: item.examScore }"
>{{item.examScore}}</text>
<text
class="text_14"
:style="{ color: item.examStatus }"
>{{ getStatusText(item.examStatus) }}</text>
</view>
</view>
<view class="block_7 flex-row justify-between">
<view class="text-wrapper_5 flex-col">
<text class="text_15" >{{getCourseTypeText(item.subject)}}</text>
</view>
<view class="text-wrapper_6 flex-col">
<text class="text_16" >{{item.courseType}}</text>
</view>
</view>
<view class="text-wrapper_7 flex-row justify-between">
<text class="text_17" >考试地址</text>
<text class="text_18" >山东省济南市历下区</text>
</view> </view>
<view class="text-wrapper_7 flex-row justify-between"> </view>
<text class="text_17" >考试地址</text> </view> -->
<text class="text_18" >山东省济南市历下区</text> </scroll-view>
</view>
</view>
</view> -->
</scroll-view>
</view> </view>
</view> </view>
<view class="block_8 flex-col"> <view class="block_8 flex-col">
<view class="text-wrapper_8 flex-col" @click="onEnterScoreClick()"> <view class="text-wrapper_8 flex-col" @click="onEnterScoreClick()">
<text class="text_19">笔试成绩录入</text> <text class="text_19">笔试成绩录入</text>
<u-picker <u-picker
:show="pickerShow" :show="pickerShow"
:columns="[pickerColumns]" :columns="[pickerColumns]"
keyName="label" keyName="label"
@confirm="onPickerConfirm" @confirm="onPickerConfirm"
@cancel="pickerShow = false" @cancel="pickerShow = false"
/> />
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { getLocalUserInfo } from '../../utils/auth'; import {getLocalUserInfo} from '../../utils/auth';
import request from '@/utils/request.js' import request from '@/utils/request.js'
export default { export default {
data() { data() {
return { return {
@ -144,256 +148,260 @@ export default {
lanhutext7: '山东省济南市历下区' lanhutext7: '山东省济南市历下区'
} }
], ],
userInfo: {}, userInfo: {},
examList: {}, examList: {},
examTwoList: {}, examTwoList: {},
scrollHeight: 0, scrollHeight: 0,
constants: {}, constants: {},
courseList: [], courseList: [],
pickerShow: false, pickerShow: false,
pickerColumns: [], pickerColumns: [],
curNow: 0, curNow: 0,
isTriggered: false, isTriggered: false,
}; };
}, },
onLoad(){ onLoad() {
this.userInfo = getLocalUserInfo() this.userInfo = getLocalUserInfo()
this.getExamList() this.getExamList()
this.getCourseList() this.getCourseList()
}, },
onReady() { onReady() {
// //
this.calculateScrollHeight(); this.calculateScrollHeight();
}, },
methods: { methods: {
handleBack() { handleBack() {
uni.navigateBack({ uni.navigateBack({
delta: 1 delta: 1
}); });
}, },
/** /**
* 下拉刷新数据 * 下拉刷新数据
*/ */
onRefresherrefresh() { onRefresherrefresh() {
this.isTriggered = true this.isTriggered = true
this.pageNo = 1 this.pageNo = 1
this.total = 0 this.total = 0
this.examList = [] this.examList = []
this.getExamList() this.getExamList()
}, },
onEnterScoreClick() { onEnterScoreClick() {
if (this.courseList.length > 0) { if (this.courseList.length > 0) {
this.pickerColumns = this.courseList.map(item => ({ this.pickerColumns = this.courseList.map(item => ({
label: item.courseName, label: item.courseName,
value: item.courseId value: item.courseId
})); }));
this.pickerShow = true; this.pickerShow = true;
} else if (this.courseList.length === 1) { } else if (this.courseList.length === 1) {
this.goToScoreEntry(this.courseList[0]); this.goToScoreEntry(this.courseList[0]);
} else { } else {
this.$u.toast("暂无课程信息"); this.$u.toast("暂无课程信息");
} }
}, },
onPickerConfirm(e) { onPickerConfirm(e) {
const selectedCourseId = e.value[0]; const selectedCourseId = e.value[0];
const selectedCourse = this.courseList.find(item => item.courseId === selectedCourseId.value); const selectedCourse = this.courseList.find(item => item.courseId === selectedCourseId.value);
console.log('courseList', this.courseList); console.log('courseList', this.courseList);
console.log('selectedCourseId', selectedCourseId); console.log('selectedCourseId', selectedCourseId);
console.log('selectedCourse', selectedCourse); console.log('selectedCourse', selectedCourse);
if (selectedCourse) { if (selectedCourse) {
this.getProcess(selectedCourse.courseId).then(processData => { this.getProcess(selectedCourse.courseId).then(processData => {
if (!processData || processData.length === 0) { if (!processData || processData.length === 0) {
uni.showToast({ uni.showToast({
title: '请联系驾校负责人', title: '请联系驾校负责人',
icon: 'none' icon: 'none'
}); });
return; return;
} }
// 14 // 14
const hasSubject1Or4 = processData.some(item => const hasSubject1Or4 = processData.some(item =>
item.subject === 1 || item.subject === 4 item.subject === 1 || item.subject === 4
); );
if (hasSubject1Or4) { if (hasSubject1Or4) {
this.goToScoreEntry(selectedCourse); this.goToScoreEntry(selectedCourse);
} else { } else {
uni.showToast({ uni.showToast({
title: '未找到考试信息', title: '未找到考试信息',
icon: 'none' icon: 'none'
}); });
} }
}); });
} }
this.pickerShow = false; this.pickerShow = false;
}, },
goToScoreEntry(course) { goToScoreEntry(course) {
this.$u.route({ this.$u.route({
url: '/newPages/examinationAdd/index', url: '/newPages/examinationAdd/index',
params: { params: {
courseId: course.value, courseId: course.value,
courseType: course.courseType, courseType: course.courseType,
userId: course.userId, userId: course.userId,
tenantId: course.tenantId, tenantId: course.tenantId,
} }
}); });
}, },
getProcess(courseId) {
return new Promise((resolve, reject) => {
request({
url: '/app-api/process/getAllByUserIdAndCourseId',
method: 'GET',
params: {
userId: this.userInfo.id,
courseId: courseId,
}
}).then(res => {
console.log('res123', 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()
console.log('examList', this.examList)
console.log('res', res)
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
console.log('res111', res)
})
},
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 = 160;
//
this.scrollHeight = screenHeight - topHeight;
},
getButtonInfo(item) {
console.log('item', 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}`
})
}
getProcess(courseId) {
return new Promise((resolve, reject) => {
request({
url: '/app-api/process/getAllByUserIdAndCourseId',
method: 'GET',
params: {
userId: this.userInfo.id,
courseId: courseId,
}
}).then(res => {
console.log('res123', 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()
console.log('examList', this.examList)
console.log('res',res)
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
console.log('res111',res)
})
},
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 = 160;
//
this.scrollHeight = screenHeight - topHeight;
},
getButtonInfo(item) {
console.log('item', item)
if (item.fraction == null ) {
return { text: '成绩录入', type: 'input' }
} else if (!item.ifPass) {
return { text: '成绩录入', type: 'input' }
} else if (item.ifEvaluate) {
return { text: '查看评价', type: 'view' }
} else {
return { text: '开始评价', type: 'evaluate' }
}
},
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) {
uni.navigateTo({
url: `/newPages/evaluation/index?batchId=${item.batchId}&evaluateId=${item.evaluateId || ''}`
})
},
//
goViewEvaluation(item) {
uni.navigateTo({
url: `/newPages/evaluationDetail/index?evaluateId=${item.evaluateId}`
})
}
} }
}; };
</script> </script>

View File

@ -22,14 +22,7 @@
</view> </view>
<view class="box_4 flex-row justify-between"> <view class="box_4 flex-row justify-between">
<view class="image-text_2 flex-row justify-between"> <view class="image-text_2 flex-row justify-between">
<image <u-notice-bar direction="column" duration="10000" bgColor="#e9f1ff" color="black" :text="announcement" icon="/static/lanhu_shouye2gai/FigmaDDSSlicePNGd2c17b5f24182e597acbfa50481040c1.png"></u-notice-bar>
class="label_2"
referrerpolicy="no-referrer"
src="/static/lanhu_shouye2gai/FigmaDDSSlicePNGd2c17b5f24182e597acbfa50481040c1.png"
/>
<text class="text-group_2">
高科技驾考作弊团伙被抓驾校校长教练负责介绍学员
</text>
</view> </view>
<view class="group_3 flex-col justify-between"> <view class="group_3 flex-col justify-between">
<view class="block_5 flex-col"></view> <view class="block_5 flex-col"></view>
@ -92,6 +85,7 @@ export default {
], ],
swiperList: [], swiperList: [],
msg: "1", msg: "1",
announcement:['ceshi1111','测试111111111111111111111111111111111111111111'],
constants: {}, constants: {},
schoolList: [ schoolList: [
// { // {

View File

@ -104,7 +104,7 @@
<view @click="changeStartPay(2)" class="dj-list"> <view @click="changeStartPay(2)" class="dj-list">
<view class="dj-list-left"> <view class="dj-list-left">
<image class="dj-list-left-img" src="../../static/imgs/yfk.png" mode=""></image> <image class="dj-list-left-img" src="../../static/imgs/yfk2.png" mode=""></image>
<view class="dj-list-left-name">线下支付</view> <view class="dj-list-left-name">线下支付</view>
</view> </view>
<view class="dj-list-right"> <view class="dj-list-right">
@ -116,7 +116,7 @@
</view> </view>
<view @click="changeStartPay(1)" class="dj-list"> <view @click="changeStartPay(1)" class="dj-list">
<view class="dj-list-left"> <view class="dj-list-left">
<image class="dj-list-left-img" src="../../static/imgs/qbdd.png" mode=""></image> <image class="dj-list-left-img" src="../../static/imgs/qbdd2.png" mode=""></image>
<view class="dj-list-left-name">微信</view> <view class="dj-list-left-name">微信</view>
</view> </view>
<view class="dj-list-right"> <view class="dj-list-right">
@ -753,7 +753,7 @@ export default {
.bm-page-button-main { .bm-page-button-main {
border-radius: 50rpx; border-radius: 50rpx;
background-color: #4aa76f; background-color: #2C78F5;
color: #fff; color: #fff;
} }
} }
@ -866,7 +866,7 @@ export default {
font-size: 22rpx; font-size: 22rpx;
.bm-page-right-zd { .bm-page-right-zd {
background-color: rgba(94, 255, 153, 0.2); background-color: #dfebff;
} }
.bm-page-right-c2 { .bm-page-right-c2 {
@ -921,8 +921,8 @@ export default {
height: 18px; height: 18px;
border-radius: 50%; border-radius: 50%;
overflow: hidden; overflow: hidden;
border: 1px solid #4aa76f; border: 1px solid #2C78F5;
background: #4aa76f; background: #2C78F5;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -938,7 +938,7 @@ export default {
width: 120px; width: 120px;
height: 35px; height: 35px;
border-radius: 4px; border-radius: 4px;
background: #4aa76f; background: #2C78F5;
color: #fff; color: #fff;
display: flex; display: flex;
align-items: center; align-items: center;
@ -961,7 +961,7 @@ export default {
.clv { .clv {
color: #fff; color: #fff;
background: #4aa76f; background: #2C78F5;
width: 26px; width: 26px;
height: 26px; height: 26px;
border-radius: 50%; border-radius: 50%;

BIN
static/imgs/qbdd2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

BIN
static/imgs/yfk2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B