2025-03-15 17:32:23 +08:00
|
|
|
|
<template>
|
2025-04-08 17:00:07 +08:00
|
|
|
|
<view class="page flex-col">
|
|
|
|
|
<view class="header">
|
|
|
|
|
<headers titles="预约">
|
|
|
|
|
<uni-icons type="left" color="#000000" size="22px"></uni-icons>
|
|
|
|
|
</headers>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="form_">
|
|
|
|
|
<view class="" style="background-color: white;padding: 10rpx 15rpx;border-radius: 15rpx">
|
|
|
|
|
<u-form labelPosition="left" labelWidth="auto" labelAlign="center" :model="appointmentInfo"
|
|
|
|
|
:rules="rules" ref="uForm">
|
|
|
|
|
<u-form-item label="课程名称" prop="courseName" @click="showCourse = true" ref="item1">
|
|
|
|
|
<u-input v-model="appointmentInfo.courseName" disabled disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择课程" border="none"></u-input>
|
|
|
|
|
<u-icon slot="right" name="arrow-right"></u-icon>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
<u-form-item label="训练类型" prop="courseType" ref="item1">
|
|
|
|
|
<u-input v-model="appointmentInfo.courseType" disabled disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择训练类型" border="none"></u-input>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
<u-form-item label="选择科目" prop="subject" ref="item1">
|
|
|
|
|
<u-input v-model="appointmentInfo.subjectStr" disabled disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择科目" border="none"></u-input>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
<u-form-item label="教练名称" prop="coachName" ref="item1">
|
|
|
|
|
<u-input v-model="appointmentInfo.coachName" disabled disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择教练" border="none"></u-input>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
</u-form>
|
2025-04-01 17:52:14 +08:00
|
|
|
|
|
2025-04-08 17:00:07 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="form_">
|
|
|
|
|
<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-item label="累计训练时长" prop="name" ref="item1">
|
|
|
|
|
<u-input v-model="appointmentInfo.trainTime" disabled disabledColor="#ffffff"
|
|
|
|
|
border="none"></u-input>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
<u-form-item label="日期选择" prop="dateStr" @click="showDate = true;"
|
|
|
|
|
ref="item1">
|
|
|
|
|
<u-input v-model="appointmentInfo.dateStr" disabled disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择日期" border="none"></u-input>
|
|
|
|
|
<u-icon slot="right" name="arrow-right"></u-icon>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
<u-form-item label="时间范围" prop="time" borderBottom @click="showTime = true;"
|
|
|
|
|
ref="item1" :borderBottom="false">
|
|
|
|
|
<u-input v-model="appointmentInfo.time" disabled disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择时间范围" border="none"></u-input>
|
|
|
|
|
<u-icon slot="right" name="arrow-right"></u-icon>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
</u-form>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<u-picker :show="showCourse" @close="showCourse = false" keyName="courseName" @cancel="showCourse = false"
|
|
|
|
|
@confirm="confirmCourse" :columns="[courseList]"></u-picker>
|
|
|
|
|
<u-picker :show="showTime" @close="showTime = false" keyName="label" @cancel="showTime = false"
|
|
|
|
|
@confirm="confirmTime" :columns="[timeColumns]"></u-picker>
|
|
|
|
|
<u-calendar :show="showDate" @confirm="confirmDate" @close="showDate = false"></u-calendar>
|
|
|
|
|
<view class="section_4 flex-col bottom_">
|
|
|
|
|
<view class="text-wrapper_5 flex-col" @click="submit">
|
|
|
|
|
<text class="text_10">开始预约</text>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-03-15 17:32:23 +08:00
|
|
|
|
</template>
|
|
|
|
|
<script>
|
2025-04-08 17:00:07 +08:00
|
|
|
|
import headers from "@/components/header/headers.vue";
|
|
|
|
|
import request from "@/utils/request";
|
|
|
|
|
import {getDictDataByType} from "@/utils/utils";
|
|
|
|
|
import {getLocalUserInfo} from "@/utils/auth";
|
2025-04-01 17:52:14 +08:00
|
|
|
|
|
2025-04-08 17:00:07 +08:00
|
|
|
|
export default {
|
|
|
|
|
components: {
|
|
|
|
|
headers
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
constants: {},
|
|
|
|
|
appointmentInfo: {
|
|
|
|
|
subjectStr: '',
|
|
|
|
|
courseName: '',
|
|
|
|
|
coachName: '',
|
|
|
|
|
trainTime: '',
|
|
|
|
|
dateStr: '',
|
|
|
|
|
time: '',
|
|
|
|
|
coachId: '',
|
|
|
|
|
}, // 预约信息
|
|
|
|
|
showCourse: false,
|
|
|
|
|
courseList: [], //报名的课程信息
|
|
|
|
|
showDate: false,
|
|
|
|
|
showTime: false,
|
|
|
|
|
tenantId: '',
|
|
|
|
|
subjectColumns: [{
|
|
|
|
|
label: '科目二',
|
|
|
|
|
value: 2
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: '科目三',
|
|
|
|
|
value: 3
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
//时间段数组 查询字典
|
|
|
|
|
timeColumns: '',
|
|
|
|
|
showSubject: false,
|
|
|
|
|
rules: {
|
|
|
|
|
time: [{
|
|
|
|
|
required: true,
|
|
|
|
|
message: '请选择时间',
|
|
|
|
|
trigger: 'change'
|
|
|
|
|
}],
|
|
|
|
|
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()
|
|
|
|
|
},
|
|
|
|
|
confirmCourse(e) {
|
|
|
|
|
this.restForm()
|
|
|
|
|
this.appointmentInfo.courseId = e.value[0].courseId
|
|
|
|
|
this.appointmentInfo.courseName = e.value[0].courseName
|
|
|
|
|
this.appointmentInfo.courseType = e.value[0].courseType
|
|
|
|
|
this.tenantId = e.value[0].tenantId
|
|
|
|
|
this.appointmentInfo.userName = e.value[0].userName
|
|
|
|
|
this.appointmentInfo.userId = e.value[0].userId
|
|
|
|
|
this.getAllByCourseId(e.value[0].courseId)
|
|
|
|
|
console.log(e)
|
|
|
|
|
this.showCourse = false
|
|
|
|
|
},
|
|
|
|
|
confirmDate(e) {
|
|
|
|
|
console.log(e)
|
|
|
|
|
this.appointmentInfo.dateStr = e[0]
|
|
|
|
|
console.log(this.appointmentInfo)
|
|
|
|
|
this.showDate = false
|
|
|
|
|
},
|
|
|
|
|
confirmTime(e) {
|
|
|
|
|
console.log(e)
|
|
|
|
|
this.appointmentInfo.time = e.value[0].label
|
|
|
|
|
console.log(this.appointmentInfo)
|
|
|
|
|
this.showTime = false
|
2025-04-01 17:52:14 +08:00
|
|
|
|
},
|
2025-04-08 17:00:07 +08:00
|
|
|
|
restForm() {
|
|
|
|
|
this.appointmentInfo = {
|
|
|
|
|
subjectStr: '',
|
|
|
|
|
courseName: '',
|
|
|
|
|
coachName: '',
|
|
|
|
|
trainTime: '',
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 查询所有报名科目
|
|
|
|
|
getLoginUserCourseInfoList() {
|
|
|
|
|
request({
|
|
|
|
|
url: '/app-api/small/drive/school-course-order/getCourseByLoginUser',
|
|
|
|
|
method: 'GET'
|
|
|
|
|
}).then(res => {
|
|
|
|
|
if (res.data.length == 0) {
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '提示',
|
|
|
|
|
content: '请先报名课程',
|
|
|
|
|
showCancel: false,
|
|
|
|
|
success: function (res) {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
console.log('用户点击确定');
|
|
|
|
|
uni.navigateBack()
|
|
|
|
|
} else if (res.cancel) {
|
|
|
|
|
console.log('用户点击取消');
|
2025-04-03 16:47:39 +08:00
|
|
|
|
}
|
2025-04-08 17:00:07 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
// 找出正在训练中的科目并且科目不是1和4
|
|
|
|
|
// && 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)
|
|
|
|
|
// 找出正在训练中的科目并且科目不是1和4
|
|
|
|
|
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('用户点击取消');
|
|
|
|
|
}
|
2025-04-03 16:47:39 +08:00
|
|
|
|
}
|
2025-04-08 17:00:07 +08:00
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 查询训练地址
|
|
|
|
|
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() {
|
|
|
|
|
// 获取当前登陆人
|
|
|
|
|
this.$refs.uForm.validate().then(res => {
|
|
|
|
|
const userInfo = getLocalUserInfo()
|
|
|
|
|
const data = {
|
|
|
|
|
...this.appointmentInfo,
|
|
|
|
|
userId: userInfo.id,
|
|
|
|
|
userName: userInfo.nickname,
|
|
|
|
|
tenantId: this.tenantId,
|
|
|
|
|
reservDay: this.appointmentInfo.dateStr,
|
|
|
|
|
reservTime: this.appointmentInfo.time,
|
|
|
|
|
subject: this.appointmentInfo.subject,
|
|
|
|
|
}
|
2025-04-03 16:47:39 +08:00
|
|
|
|
request({
|
2025-04-08 17:00:07 +08:00
|
|
|
|
url: '/app-api/reservation-course/create',
|
|
|
|
|
method: 'PUT',
|
|
|
|
|
data: data
|
2025-04-03 16:47:39 +08:00
|
|
|
|
}).then(res => {
|
|
|
|
|
console.log(res)
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '预约成功',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
})
|
|
|
|
|
setTimeout(() => {
|
2025-04-03 17:33:17 +08:00
|
|
|
|
uni.$emit('refresh');
|
2025-04-03 16:47:39 +08:00
|
|
|
|
uni.navigateBack()
|
|
|
|
|
}, 2000)
|
|
|
|
|
})
|
2025-04-08 17:00:07 +08:00
|
|
|
|
}).catch(errors => {
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
};
|
2025-03-15 17:32:23 +08:00
|
|
|
|
</script>
|
|
|
|
|
<style lang='scss'>
|
2025-04-08 17:00:07 +08:00
|
|
|
|
@import '../common/common.scss';
|
|
|
|
|
@import './assets/style/index.rpx.scss';
|
2025-04-03 16:47:39 +08:00
|
|
|
|
|
2025-04-08 17:00:07 +08:00
|
|
|
|
.bottom_ {
|
|
|
|
|
position: fixed;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
}
|
2025-04-03 16:47:39 +08:00
|
|
|
|
|
2025-04-08 17:00:07 +08:00
|
|
|
|
.header {
|
|
|
|
|
width: 100%;
|
|
|
|
|
background: #f4f5f6;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
padding-top: 88px;
|
|
|
|
|
}
|
2025-04-03 16:47:39 +08:00
|
|
|
|
|
2025-04-08 17:00:07 +08:00
|
|
|
|
.form_ {
|
|
|
|
|
padding: 10rpx 20rpx;
|
|
|
|
|
}
|
2025-03-15 17:32:23 +08:00
|
|
|
|
</style>
|