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.

275 lines
6.4 KiB

<template>
<view class="container">
<image class="cbg" :src="base.imgHost('common_bg.png')"></image>
<scroll-view :scroll-y="true" @scrolltolower="scrollGet" class="list">
<image @click="goBook" class="list-img" :src="base.imgHost('mybook-top.png')"></image>
<view v-if="hasData" style="padding-bottom: 60rpx;">
<view class="list-item" @click="toDetail(item.id)" v-for="item in book_list">
<view class="list-item-top">
<view style="display: flex;justify-content: space-between;align-items: center;">
<!-- <image
:src="item.appointment_config.name==='车辆到闸'?base.imgHost('mybook-icon2.png'):base.imgHost('mybook-icon1.png')">
</image>
{{item.appointment_config.name==='车辆到闸'?'车辆预约':'场地预约'}} -->
<image
:src="base.imgHost('mybook-icon1.png')">
</image>
场地预约
</view>
<view>
<text :class="{'success':item.status===1,'warn':item.status>1}">
{{statusList[item.status]}}
</text>
</view>
</view>
<view class="list-item-middle">
<view>
<image :src="base.imgHost('mybook-icon3.png')" style="width:24rpx;height: 24rpx;"></image>
{{formatTime(item.start_time,item.end_time)}}
</view>
<view>
<image :src="base.imgHost('mybook-icon4.png')" style="width:20rpx;height: 26rpx;"></image>
{{item.appointment_config?item.appointment_config.name:''}}
</view>
<view>
<image :src="base.imgHost('mybook-icon5.png')" style="width:21rpx;height: 23rpx;"></image>
{{item.content?item.content:''}}
</view>
</view>
<view class="list-item-bottom">
<text @click.stop="cancelBook(item)" v-if="item.status<2 && isCanCancel(item.start_time)">取消</text>
<text v-if="item.status<2 && isCanCancel(item.start_time)">|</text>
<text>查看</text>
</view>
</view>
</view>
<view class="nodata" v-else>
<u-empty text="当前没有预约" mode="data"></u-empty>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
components: {},
data() {
return {
hasMobile: false,
hasData: true,
current_page: 1,
total_page: 0,
load_status: '',
book_list: [],
can_appointment:false,
statusList:{
0:'待审核',
1:'通过',
2:'审核不通过',
3:'已取消',
4:'失败'
}
}
},
onLoad() {
this.getBookList()
},
onReachBottom() {
console.log("this.onReachBottom", this.current_page, this.total_page)
},
methods: {
scrollGet() {
if (!this.hasData) {
return
}
this.current_page = this.current_page + 1
if (this.current_page > this.total_page) {
this.base.toast('没有更多了')
return
}
this.getBookList()
},
async getBookList() {
const res = await this.$u.api.scheduleIndex({
page: this.current_page,
page_size: 10
})
this.total_page = res.last_page
if (res.data.length === 0 && this.current_page === 1) {
this.hasData = false
}
this.book_list.push(...res.data)
},
formatTime(val1,val2) {
let val1Day = this.$moment(val1)
let val2Day = this.$moment(val2)
console.log("123",val1Day,val2Day)
if(val1Day.isSame(val2Day,'days')){
return val1Day.format("YYYY-MM-DD") + ' ' + this.$moment(val1).format("HH:mm")+'-' + this.$moment(val2).format("HH:mm")
}else{
return val1 + '至' + val2
}
},
isCanCancel(start_time){
// 当前时间早于 预约开始时间 才能取消
return this.$moment().isBefore(start_time)
},
cancelBook(item){
let that = this
uni.showModal({
title: '确认要取消该预约?',
success: function(res) {
if (res.confirm){
that.$u.api.scheduleCancel({
id:item.id
}).then(res => {
that.base.toast("取消成功")
that.current_page = 1
that.book_list = []
that.getBookList()
})
}
}
})
},
toDetail(id) {
uni.navigateTo({
url: '/packages/mybook/detail?id=' + id
})
},
getUser() {
this.$u.api.user().then(res => {
if (res.user.appointment_total - res.user.pass_appointments > 0) {
this.can_appointment = true
} else {
this.can_appointment = false
}
this.$u.vuex('vuex_user', res.user)
})
},
async goBook(){
uni.navigateTo({
url: '/packages/booksubmit/appointment'
})
// await this.$u.api.user().then(res => {
// if (res.user.appointment_total - res.user.pass_appointments > 0) {
// this.can_appointment = true
// uni.navigateTo({
// url: '/packages/booksubmit/appointment'
// })
// } else {
// this.can_appointment = false
// this.base.toast("您当前没有可预约次数")
// }
// })
}
}
}
</script>
<style scoped lang="scss">
.container {
width: 100%;
height: 100vh;
overflow: hidden;
.cbg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100vh;
}
.nodata {
position: relative;
top: 0;
left: 0;
height: 100vh;
}
.list {
height: 100vh;
padding: 30rpx 0;
position: relative;
top: 0;
left: 0;
overflow: scroll;
&-img {
width: calc(100% - 60rpx);
height: 125rpx;
display: block;
margin: 0 auto;
}
&-item {
margin: 30rpx;
padding: 30rpx;
background-color: #fff;
border-radius: 10rpx;
&-top{
font-size: 32rpx;
color:#b08c6c;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom:1rpx solid #ddd;
padding-bottom: 30rpx;
image{
width:37rpx;
height:37rpx;
margin-right:10rpx;
}
text{
font-size: 24rpx;
color:#fff;
padding:5rpx 20rpx;
display: inline-block;
border-radius: 28rpx 0 28rpx 28rpx;
background-color: #bf976e;
}
.success{
background-color: #00b318;
}
.warn{
background-color: #999;
}
}
&-middle{
padding:30rpx 0;
padding-bottom:10rpx;
border-bottom:1rpx solid #ddd;
&>view{
display: flex;
align-items: center;
margin-bottom:20rpx;
image{
margin-right:10rpx;
}
}
}
&-bottom{
text-align: right;
padding-top:30rpx;
color:#b08c6c;
text{
margin-left:20rpx
}
}
}
}
}
</style>