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.
 
 
 
 
 

427 lines
10 KiB

<template>
<view class="arrange-class">
<view class="ac-info">
<view>{{pageInfo.brand_name || ''}}{{pageInfo.stadium_name ||'-'}}</view>
<view>课程名称{{pageInfo.course_name || '-'}}</view>
<view>上课教练{{pageInfo.course_coach || '-'}}</view>
<view>
<text>学员信息{{pageInfo.student_name || ''}}{{pageInfo.student_gender!=''?`${pageInfo.student_gender||''}`:''}} {{userInfo.type==2?(' '+pageInfo.student_phone) : ''}}</text>
<image v-if="userInfo.type==2" src="/subpackage/course/static/images/icon/phone.png" @click="phoneCall(pageInfo.student_phone)"></image>
</view>
<view>剩余课时:{{pageInfo.period_nums_surplus || 0}}节 (共{{pageInfo.period_nums || 0}}节)</view>
</view>
<view class="ac-section">
<view class="as-tit">第{{pageInfo.next_class_number || '-'}}节</view>
<!-- 上课教练 -->
<view class="as-line">
<view class="al-txt"><text>*</text>上课教练</view>
<picker class="al-picker" :value="coachName" :range="coachs" @change="coachBindChange">
<view class="al-view al-box">
<view>{{coachName || '请选择上课教练'}}</view>
<image src="/subpackage/course/static/images/icon/triangle.png"></image>
</view>
</picker>
</view>
<!-- 上课日期 -->
<view class="as-line">
<view class="al-txt"><text>*</text>上课日期</view>
<picker class="al-picker" mode="date" :value="submitInfo.date" :start="startDate" :end="endDate" @change="bindDateChange" >
<view class="al-view al-date">
<view class="ad-txt">{{submitInfo.date}}</view>
<view class="ad-img">
<image src="/subpackage/course/static/images/icon/calendar.png"></image>
</view>
</view>
</picker>
</view>
<!-- 上课时间 -->
<view class="as-line">
<view class="al-txt"><text>*</text>上课时间</view>
<picker class="al-picker" :value="submitInfo.start" :range="timeList" @change="startBindChange">
<view class="al-view al-time">
<view>{{submitInfo.start}}</view>
<image src="/subpackage/course/static/images/icon/triangle.png"></image>
</view>
</picker>
<view class="al-to">至</view>
<picker class="al-picker" :value="submitInfo.end" :range="timeList" @change="endBindChange">
<view class="al-view al-time">
<view>{{submitInfo.end}}</view>
<image src="/subpackage/course/static/images/icon/triangle.png"></image>
</view>
</picker>
</view>
<!-- 上课场地 -->
<view class="as-line" v-if="pageInfo.is_booking_venue == true">
<view class="al-txt"><text>*</text>上课场地<view class="at-type">({{pageInfo.course_venue_type || '-'}})</view></view>
<picker class="al-picker" :value="venueName" :range="venues" @change="venueBindChange">
<view class="al-view al-box">
<view>{{venueName || '请选择场地'}}</view>
<image src="/subpackage/course/static/images/icon/triangle.png"></image>
</view>
</picker>
</view>
</view>
<view class="ac-fixed">
<view hover-class="hover-active" @click="confirmChange">确定</view>
</view>
</view>
</template>
<script>
import util from '@/utils/util';
import boxServer from '../../js/course_server';
import { BOX_API } from '../../js/course_api';
export default {
computed: {
startDate() {
return this.getDate('start');
},
endDate() {
return this.getDate('end');
},
userInfo(){
return uni.getStorageSync('loginInfo') || {};
},
timeList(){
let _list = []
for(let i = 0; i<=24; i++){
_list.push(`${i<10?'0'+i:i}:00`)
}
return _list;
},
coachs(){
let { coachList } = this
let _arr = []
if(coachList.length > 0){
_arr = this.coachList.map(e=>e.name)
}
return _arr || [];
},
venues(){
let { venueList } = this
let _arr = []
if(venueList.length > 0){
_arr = this.venueList.map(e=>e.name)
}
return _arr || [];
},
},
data() {
return {
coachList: [], //教练列表
coachName: "", //上课教练
venueList: [], //场地列表
venueName: "", //选择场地
pageInfo: {},
submitInfo: {
coach_id: "",
date: "",
start: "",
end: "",
venue_id: "",
},
}
},
async onLoad(options){
// let _query = util.jsonPar(options.query);
// this.pageInfo = _query
// this.getStuInfo(options.order_no)
},
methods: {
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
},
//日期
bindDateChange: function(e) {
let _selectDate = e.target.value
this.submitInfo.date = _selectDate
},
startBindChange(e){
console.log(e);
let _list = this.timeList || [];
this.submitInfo.start = _list[e.detail.value] || ''
},
endBindChange(e){
console.log(e);
let _list = this.timeList || [];
this.submitInfo.end = _list[e.detail.value] || ''
},
coachBindChange(e){
console.log(e);
let _list = this.coachs || [];
this.coachName = _list[e.detail.value] || ''
this.submitInfo.coach_id = this.coachList[e.detail.value].id
},
venueBindChange(e){
console.log(e);
let _list = this.venues || [];
this.venueName = _list[e.detail.value] || ''
this.submitInfo.venue_id = this.venueList[e.detail.value].id
},
phoneCall(mobile) {
let _phoneStr = mobile || ''
let _phoneArr = _phoneStr.split(',') || [];
uni.showActionSheet({
itemList: _phoneArr,
success: res =>{
uni.makePhoneCall({
phoneNumber: _phoneArr[res.tapIndex]
})
}
})
},
confirmChange(){
let { pageInfo, submitInfo } = this
let { coach_id, date, start, end, venue_id } = this.submitInfo
if(coach_id==''||date==""||start=="" ||end=="" || (pageInfo.is_booking_venue==true && venue_id==''))return util.showNone("请完善必选项!");
let nowTime = util.formatDate(new Date(),'-') //现在时间 格式为 2020-07-21
if(new Date(nowTime).getTime() > new Date(date).getTime())return util.showNone("上课日期不能小于当前系统日期!");
// 主要比较两个时间段大小,2021-09-01这个日期随便给
if(Date.parse('2021-09-01 '+ start) >= Date.parse('2021-09-01 '+ end))return util.showNone("上课时间的结束时间不能小于起始时间!");
let _data = {
order_no: pageInfo.order_no,
coach_id, //教练ID
date, //日期
start, //开始时间段
end, //结束时间段
}
if(pageInfo.is_booking_venue == true)_data["venue_id"] = venue_id; //场馆ID
util.showLoad();
boxServer.get({
url: BOX_API.student.arrangeStudentAc, //安排上课[私教课]
data: _data,
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
util.showNone("操作成功!");
setTimeout(_=>{ uni.navigateBack() }, 1200)
})
},
// 我的学员-详情
getStuInfo(order_no){
util.showLoad();
boxServer.get({
url: BOX_API.student.stuInfo,
data: {
order_no,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
this.pageInfo = res
this.getArrangeAcCoach(res.order_no);
})
},
// 安排上课[私教课] - 获取教练
getArrangeAcCoach(order_no){
util.showLoad();
boxServer.get({
url: BOX_API.student.arrangeStudentAcCoach,
data: {
order_no,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
this.coachList = res.coachs || []
this.venueList = res.venues || []
})
},
}
}
</script>
<style lang="scss">
@import '~style/public.scss';
page{
background: #F2F2F7;
}
.arrange-class{
position: relative;
padding-bottom: 150rpx;
.ac-info{
padding: 28rpx 22rpx 30rpx;
background-color: #FFFFFF;
>view{
color: #1A1A1A;
font-size: 28rpx;
line-height: 52rpx;
&:first-child{
font-weight: 700;
margin-bottom: 4rpx;
}
&+view{
@include centerFlex(flex-start);
>image{
margin-left: 20rpx;
flex-shrink: 0;
width: 32rpx;
height: 32rpx;
}
}
}
}
.ac-section{
margin: 12rpx 0;
padding: 30rpx 28rpx 50rpx;
background-color: #FFFFFF;
.as-tit{
padding-bottom: 4rpx;
color: #333333;
font-size: 36rpx;
font-weight: 700;
line-height: 50rpx;
}
.as-line{
margin: 20rpx 46rpx 0 6rpx;
@include centerFlex(flex-start);
.al-txt{
position: relative;
margin-right: 18rpx;
flex-shrink: 0;
color: #1A1A1A;
font-size: 28rpx;
line-height: 44rpx;
>text{
color: #EA5061;
font-size: 32rpx;
}
.at-type{
position: absolute;
bottom: -36rpx;
left: 0;
min-width: 130rpx;
text-align: center;
color: #9C9C9F;
font-size: 24rpx;
line-height: 34rpx;
}
}
.al-picker{
flex-grow: 1;
}
.al-view{
flex-grow: 1;
padding-left: 20rpx;
height: 76rpx;
border-radius: 10rpx;
background-color: #F2F2F7;
@include centerFlex(flex-start);
}
.al-box{
>view{
flex-grow: 1;
color: #9C9C9F;
font-size: 28rpx;
line-height: 40rpx;
}
>image{
margin: 0 18rpx;
flex-shrink: 0;
width: 22rpx;
height: 22rpx;
}
}
.al-date{
.ad-txt{
flex-grow: 1;
color: #1A1A1A;
font-size: 28rpx;
line-height: 40rpx;
border-right: 2rpx solid #D8D8D8;
}
.ad-img{
flex-shrink: 0;
height: 76rpx;
padding: 0 16rpx 0 18rpx;
@include centerFlex(center);
>image{
flex-shrink: 0;
width: 34rpx;
height: 34rpx;
}
}
}
.al-time{
>view{
flex-grow: 1;
color: #1A1A1A;
font-size: 28rpx;
line-height: 40rpx;
min-width: 80rpx;
}
>image{
margin: 0 18rpx;
flex-shrink: 0;
width: 22rpx;
height: 22rpx;
}
}
.al-to{
margin: 0 28rpx;
flex-shrink: 0;
color: #B2B2B2;
font-size: 32rpx;
line-height: 44rpx;
}
}
}
.ac-fixed{
position: fixed;
bottom: 0;
left: 0;
padding: 20rpx 0;
width: 750rpx;
background-color: #FFFFFF;
>view{
margin: 0 auto;
padding: 24rpx 0;
width: 670rpx;
border-radius: 44rpx;
background-color: #009874;
color: #FFFFFF;
font-size: 28rpx;
line-height: 40rpx;
text-align: center;
font-weight: 700;
}
}
}
</style>