<template>
|
|
<van-popup
|
|
v-model:show="showBottom"
|
|
round
|
|
position="bottom"
|
|
@close="close"
|
|
:style="{ height: '75%' }"
|
|
>
|
|
|
|
<view class="box">
|
|
|
|
<view class="title">
|
|
{{ title }}
|
|
</view>
|
|
|
|
<view class="date-list">
|
|
<view class="date-item"
|
|
v-for="(item, index) in dateList"
|
|
@click="selectDate(item, index)">
|
|
<view>
|
|
{{ item.format('dddd') }}
|
|
</view>
|
|
<view :class="{act : i == index}">
|
|
{{ item.format('MM-DD') }}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view style="display: flex;justify-content: center;" v-if="loading">
|
|
<van-loading />
|
|
</view>
|
|
|
|
<view class="time-list" v-else-if="timeList.length">
|
|
<view class="time-content">
|
|
<view
|
|
:class="{'time-item' : true,
|
|
no : item.isDelete != 'Y' ||
|
|
isDelete({time : item, date : dateList[i]})}"
|
|
v-for="(item, index) in timeList"
|
|
@click="selectTime({time : item, date : dateList[i]})">
|
|
<view>
|
|
{{ item.timeName }}
|
|
</view>
|
|
<view class="status">
|
|
{{ item.isDelete != 'Y' ? '未开启' :
|
|
isDelete({time : item, date : dateList[i]}) ? '过时' : '空闲'}}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<van-empty v-else image="/static/empty/data.png" image-size="400rpx">
|
|
<template #description>
|
|
<view style="color: white;">
|
|
暂无服务时间数据
|
|
</view>
|
|
</template>
|
|
</van-empty>
|
|
|
|
</view>
|
|
|
|
</van-popup>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name:"selectTime",
|
|
props : ['show', 'title', 'dateList', 'timeList', 'loading'],
|
|
|
|
data() {
|
|
return {
|
|
showBottom : false,
|
|
i : 0
|
|
};
|
|
},
|
|
onShow(){
|
|
this.getAddressList();
|
|
},
|
|
methods : {
|
|
isDelete(e){
|
|
let day = e.date.format('YYYY-MM-DD')
|
|
let selectTime = this.dayjs(`${day} ${e.time.timeName}`)
|
|
let nowTime = this.dayjs()
|
|
|
|
if(selectTime.isBefore(nowTime)){
|
|
return true
|
|
}
|
|
|
|
if(e.time.isDelete != 'Y'){
|
|
return true
|
|
}
|
|
|
|
return false
|
|
},
|
|
selectTime(e){
|
|
if(this.isDelete(e)){
|
|
return
|
|
}
|
|
this.$emit('select', e)
|
|
},
|
|
selectDate(e, index){
|
|
this.i = index
|
|
this.$emit('selectDate', e)
|
|
},
|
|
close(){
|
|
this.$emit('close')
|
|
}
|
|
},
|
|
watch: {
|
|
show: {
|
|
handler (newValue, oldValue) {
|
|
this.showBottom = newValue
|
|
},
|
|
immediate: true
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.box{
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(#57CAA0, #55B16E);
|
|
box-sizing: border-box;
|
|
padding: 40rpx;
|
|
.title{
|
|
font-size: 32rpx;
|
|
text-align: center;
|
|
color: #fff;
|
|
}
|
|
.date-list{
|
|
display: flex;
|
|
width: 100%;
|
|
overflow: hidden;
|
|
overflow-x: scroll;
|
|
padding: 30rpx 0;
|
|
text-align: center;
|
|
color: #fff;
|
|
font-size: 24rpx;
|
|
.date-item{
|
|
flex-shrink: 0;
|
|
padding: 0 10rpx;
|
|
&>view{
|
|
padding: 6rpx 10rpx;
|
|
}
|
|
.act{
|
|
background-color: #fff;
|
|
color: #55B16E;
|
|
border-radius: 10rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.time-list{
|
|
width: 100%;
|
|
font-size: 24rpx;
|
|
overflow: hidden;
|
|
height: calc(100% - 200rpx);
|
|
overflow-y: scroll;
|
|
.time-content{
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
.time-item{
|
|
padding: 10rpx;
|
|
background-color: #fff;
|
|
width: calc(25% - 20rpx);
|
|
box-sizing: border-box;
|
|
margin: 10rpx;
|
|
border-radius: 16rpx;
|
|
|
|
view{
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 40rpx;
|
|
}
|
|
|
|
.status{
|
|
color: #56BD86;
|
|
}
|
|
&.no{
|
|
background-color: #E4E4E4;
|
|
color: #CCCCCC;
|
|
.status{
|
|
color: #EBA44B;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.act{
|
|
background-color: #fff;
|
|
color: #55B16E;
|
|
border-radius: 10rpx;
|
|
}
|
|
}
|
|
}
|
|
</style>
|