You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

259 lines
5.7 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<script setup>
/**
* name
* usersa0ChunLuyu
* date2023年5月27日 02:26:36
*/
import {
ref,
computed,
watch
} from 'vue'
import {
$image,
AppointmentListAction,
$response
} from '@/api'
import {
onShow
} from '@dcloudio/uni-app'
import {
useStore
} from '@/store'
const $store = useStore()
const calendar_ref = ref(null)
const calendarRef = (e) => {
calendar_ref.value = e
}
const monthWatch = computed(() => {
if (!calendar_ref.value) return ''
return calendar_ref.value.nowDate.year + '-' + calendar_ref.value.nowDate.month
})
const appointment_list = ref([])
const AppointmentList = async (month) => {
const response = await AppointmentListAction({
hospital: $store.buy_info.hospital,
month
})
$response(response, () => {
appointment_list.value = response.data.list
})
}
const date_show_list = computed(() => {
if (!calendar_ref.value) return []
let date = calendar_ref.value.calendar.fullDate
for (let i in appointment_list.value) {
if (appointment_list.value[i].date === date) {
if(appointment_list.value[i].data.list.length==1){
let info=appointment_list.value[i].data.list
if (info.max_count - info.used_count <= 0) return
$store.buy_info.time = info[0]
}
return appointment_list.value[i].data.list
}
}
return []
})
const dateChange = (date) => {
for (let i in appointment_list.value) {
if (appointment_list.value[i].date === date) {
return appointment_list.value[i].data.list
}
}
return []
}
const timeChoose = (info) => {
if ($store.buy_info.time.id === info.id) {
$store.buy_info.time = {
id: 0,
date: null
}
} else {
if (info.max_count - info.used_count <= 0) return
$store.buy_info.time = info
}
}
const backClick = () => {
uni.navigateBack({
delta: 1
})
}
watch(monthWatch, (month) => {
AppointmentList(month)
})
//设置灰度
const SysGreyType=ref(0)
const GetGreySet=()=>{
uni.getStorage({
key: 'SysGreytype',
success: function (res) {
console.log(res.data);
if(res.data==1){
SysGreyType.value=1
}
}
});
}
onShow(() => {
GetGreySet()
})
</script>
<template>
<view>
<view :class="SysGreyType==1? 'grey' :''">
<uni-calendar :selected="appointment_list" :date="$store.buy_info.date" :ref="calendarRef" />
</view>
<view class="time_wrapper" :class="SysGreyType==1? 'grey' :''">
<view class="time_title_wrapper">请选择预约时间段</view>
<view class="no_time_wrapper" v-if="date_show_list.length === 0">当前选择日期没有可预约的时间段</view>
<view class="time_list_wrapper">
<view @click="timeChoose(i)" class="time_item_wrapper" v-for="(i,k) in date_show_list" :key="k" :class="[
i.max_count - i.used_count <= 0 ? 'op5' : ''
]">
<view class="time_item_bg_wrapper">
<image v-if="$store.buy_info.time.id !== i.id" :src="$image('/storage/assets/mp/combo/未选.png')"></image>
<image v-if="$store.buy_info.time.id === i.id" :src="$image('/storage/assets/mp/combo/选中.png')"></image>
</view>
<view class="time_item_box_wrapper">
<view class="time_item_choose_wrapper">
<image v-if="$store.buy_info.time.id !== i.id" :src="$image('/storage/assets/mp/items/未选中.png')"></image>
<image v-if="$store.buy_info.time.id === i.id" :src="$image('/storage/assets/mp/items/选中.png')"></image>
</view>
<view class="time_item_show_wrapper">{{ i.start_show }} - {{ i.end_show }}</view>
<view class="time_item_line_wrapper"></view>
<view class="time_item_count_wrapper">可预约{{ i.max_count - i.used_count }}人</view>
</view>
</view>
<view @click="backClick()" class="back_button_wrapper">确认</view>
</view>
</view>
<view class="blank_wrapper"></view>
</view>
</template>
<style>
.back_button_wrapper {
width: 580rpx;
height: 90rpx;
background: linear-gradient(-90deg, #23D3AF, #0DC5CF);
border-radius: 45rpx;
margin: 94rpx auto 0;
font-size: 31rpx;
font-weight: 500;
color: #F6FDFD;
line-height: 90rpx;
text-align: center;
}
.op5 {
opacity: .5;
}
.time_item_count_wrapper {
font-size: 24rpx;
font-weight: 400;
color: #AFB0B1;
margin-left: 16rpx;
}
.time_item_show_wrapper {
font-size: 30rpx;
font-weight: 500;
color: #181818;
margin-left: 29rpx;
}
.time_item_line_wrapper {
width: 1rpx;
height: 30rpx;
background: #0BBACF;
margin-left: 36rpx;
}
.time_item_choose_wrapper image {
width: 40rpx;
height: 40rpx;
display: block;
}
.time_item_choose_wrapper {
width: 40rpx;
height: 40rpx;
margin-left: 41rpx;
}
.time_item_box_wrapper {
display: flex;
align-items: center;
position: relative;
z-index: 1;
height: 133rpx;
}
.time_list_wrapper {
margin-top: 20rpx;
}
.time_wrapper {
margin-top: 20rpx;
overflow: hidden;
background: #ffffff;
padding-bottom: 50rpx;
}
.time_title_wrapper {
font-size: 28rpx;
font-weight: 500;
color: #6A6A6A;
line-height: 1;
margin-top: 40rpx;
margin-left: 36rpx;
}
.no_time_wrapper {
font-size: 28rpx;
font-weight: 500;
color: #6A6A6A;
line-height: 1;
margin-top: 40rpx;
text-align: center;
}
.time_item_bg_wrapper image {
width: 699rpx;
height: 133rpx;
display: block;
}
.time_item_bg_wrapper {
position: absolute;
width: 699rpx;
height: 133rpx;
z-index: 0;
}
.time_item_wrapper {
position: relative;
width: 699rpx;
height: 133rpx;
margin: 0 auto;
}
.uni-calendar-item__weeks-box-circle {
opacity: 0;
}
.uni-calendar-item--extra {
color: #5494ff !important;
}
.uni-calendar-item--checked {
color: #ffffff !important;
}
.grey{
filter: grayscale(100%);
}
</style>
<style scoped>
</style>