vue3+uniapp 今天及未来六天日期的时间段预约选择,时间段预约当前时间之前禁用选择

可用于订单预约时间段选择、服务时间段选择、

uv-picker标签报错可自行删除,以及其他倒入文件和接口请求

复制代码
<template>
	<view class="container">
	<!-- 	<uni-nav-bar @clickLeft="blackfack()" backgroundColor="hsla(0, 0%, 0%, 0)"  
		:style="'padding-top:'+paddingTop+'px;'" :border="false" fixed 
		left-icon="left" title="修改订单" /> -->
		<uni-nav-bar :backgroundColor="rgba" :statusBar="true" :border="false" fixed left-icon="left" title="修改订单" @clickLeft="blackfack"/>
		
		
		<view class="beijing"></view>
		<view class="sdign">
			<view class="faultPhenomenon fontSize36">
				<view class="fault_item" style="padding-bottom: 30rpx;border-bottom: 1px solid #eeeeee;">
					<view class="">
						服务产品
					</view>
					<!-- @click="openPicker_fwcp()" -->
					<view class="" >
						{{orderInfoNew.productName}}
						<!-- <uni-icons color="#cccccc" type="right"></uni-icons> -->
					</view>
				</view>
				<view class="fault_item" style="padding-top: 30rpx;">
					<view class="xinghao">
						服务品类
					</view>
					<view class="" @click="openPicker_fwpl()">
						{{orderInfoNew.categoryName}}
						<uni-icons color="#cccccc" type="right"></uni-icons>
					</view>
				</view>
				
			</view>
			
			<view class="faultPhenomenon fontSize36">
				<!-- <view class="fault_item" style="padding-bottom: 30rpx;border-bottom: 1px solid #eeeeee;">
					<view class="">
						联系电话
					</view>
					<view class="">
						{{orderInfoNew.contactPhone?orderInfoNew.contactPhone:orderInfoNew.customerPhone}}
					</view>
				</view> -->
				<view @click="toggle('bottom')" class="fault_item" style="padding-bottom: 30rpx;border-bottom: 1px solid #eeeeee;">
					<view class="xinghao">
						上门时间
					</view>
					<view class="" style="flex: 1;text-align: right;">
						{{dateEcho?dateEcho:orderInfoNew.appointmentDate}} {{orderInfoNew.appointmentTimeRange?orderInfoNew.appointmentTimeRange:""}}
						<uni-icons color="#cccccc" type="right"></uni-icons>
					</view>
				</view>
				<view class="fault_item" style="text-align: left;padding-top: 30rpx;flex-direction: column;justify-content: flex-start;">
					<view class="xinghao">
						服务地址
					</view>
					<view class="address_v" style="flex: 1;display: flex;">
						<view class="color666 fontSize34" style="flex: 1;min-height: 60px;">{{orderInfoNew.fullAddress?orderInfoNew.fullAddress:"请点击定位选择客户地址"}}</view>
						<view class="colorYellow" @click="goAddress()">
							<uni-icons color="#FF6B15" size="18" type="location-filled"></uni-icons>定位
						</view>
					</view>
				</view>
				<view class="fault_item" style="text-align: left;padding-top: 30rpx;flex-direction: column;justify-content: flex-start;">
					<view class="">
						门牌地址
					</view>
					<view class="address_v" style="flex: 1;display: flex;">
						<textarea name="" class="color666 fontSize34" style="height: 60px;" id="" v-model="orderInfoNew.detailedAddress" placeholder="门牌地址"></textarea>
					</view>
				</view>
			</view>
		</view>
		<!-- 服务产品弹窗 -->
		<uv-picker ref="picker_fwcp" round="15" title="服务产品" confirmColor="#FF6B15" :columns="cancelList_fwcp" keyName="text" @confirm="confirm_fwcp"></uv-picker>
		<!-- 服务品类弹窗 -->
		<uv-picker ref="picker_fwpl" round="15" title="服务品类" confirmColor="#FF6B15" :columns="cancelList_fwpl" keyName="name" @confirm="confirm_fwpl"></uv-picker>
		<!-- 选择上门普通弹窗 -->
		<uni-popup borderRadius="15px 15px 0px 0px" style="width: 100%;" :mask-click="false" ref="popup" background-color="#fff">
			<view class="popup-content" :class="{ 'popup-height': toggleType === 'left' || toggleType === 'right' }">
				<view class="fontSize36 textAlignCenter fontBold">选择上门时间</view>
				<uni-icons @click="close" class="closeempty" size="24" color="#666666" type="closeempty"></uni-icons>
				
				<view class="smView">
					<!-- 左侧日期 -->
					<view class="smView_left" >
						<view v-for="(item, index) in time.leftDay" :key="index"
						 class="smView_left_day fontSize34 "
						 @click="leftdaySe(item.date, index, item.dataymd)"
						 :class="{'smView_left_day_select':dayLeftSe_index == index}">
							{{item.date}}({{item.weekDay}})
						</view>
					</view>
					<!-- 右侧时间 -->
					<view class="smView_right_f" style="height: 100%;overflow-y: scroll;flex: 1;">
						<view class="smView_right fontSize34" ref="contentRef">
							<view class="smView_rightA" v-for="(item, index) in time.list" :key="index">
								<view class="color666">{{item.name}}</view>
								<view class="smView_rightB">
									<view v-for="(itemB, indexB) in item.itemList" :key="indexB"
									 class="fontSize36 smView_right_time "
									 :style="{ color: timeDuanif(itemB.text) ? '' : '#ccc' }"
									 :class="{'smView_right_time_select':timeRightSe_value == itemB.value, 'smView_rightC':timeDuanif(itemB.text)}"
									 @click="timeDuanif(itemB.text)?timeRightSe(itemB.text, itemB.value, index, indexB):''">
										{{itemB.text}}
										<uni-icons v-if="timeRightSe_value == itemB.value" class="checkmarkempty" type="checkmarkempty" color="#FF6B15"></uni-icons>
									</view>
								</view>
							</view>
						</view>
					</view>
					
				</view>
				
				<button class="popup-login-btn " @click="timeSave">确定</button>
			</view>
		</uni-popup>
		
		<!-- :style="'padding-bottom:'+safeBottom" -->
		<view class="flexBottom" >
			<button @click="save()" class="login-btn">确定修改</button>
		</view>
	</view>
</template>


<script setup>
	import {
		reactive,
		ref,
		getCurrentInstance,
	} from "vue";
	import {
		onLoad,onPageScroll,onUnload
	} from '@dcloudio/uni-app'
	import utils from "@/common/utils.js"
	
	const globalProperties = getCurrentInstance().appContext.config.globalProperties; // 获取全局挂载
	const paddingTop = ref(44)
	
	const rgba= ref('rgba(0,0,0,0)') 
	const safeBottom = ref(0)
	
	const picker_fwcp = ref(false)
	const picker_fwpl = ref(false)
	const toggleType = ref("")
	const popup = ref(false)//故障现象弹窗
	//服务产品数据
	const cancelList_fwcp = ref([[{
		text:"取消订单原因1",
		id:1
	},{
		text:"取消订单原因2",
		id:2
	},{
		text:"取消订单原因3",
		id:3
	}]])  
	//服务品类数据
	const cancelList_fwpl = ref([])  
	const tab = reactive({
		tabList: [{
			name: "维修服务"
		}, {
			name: "配件材料"
		}, {
			name: "增值服务"
		}],
	})
	//确定选择的上门时间
	const itemSe_text = ref("")
	//上门时间左侧日期选择的index
	const dayLeftSe_index = ref(0)
	//上门时间右侧选择的value
	const timeRightSe_value = ref(null)
	//上门时间左侧日期选择的text
	const dayLeftSe_text = ref("")
	//上门时间右侧选择的text
	const timeRightSe_text = ref("")
	//上门时间右侧
	const time = reactive({
		leftDay: [],
		list: [{
			name: "上午",
			itemList: [{
				text: "04:00-04:59",
				start: "04:00:00",
				end: "04:59:59",
				value: "5"
			}, {
				text: "05:00-05:59",
				start: "05:00:00",
				end: "05:59:59",
				value: "6"
			}, {
				text: "06:00-06:59",
				start: "06:00:00",
				end: "06:59:59",
				value: "7"
			}, {
				text: "07:00-07:59",
				start: "07:00:00",
				end: "07:59:59",
				value: "8"
			}, {
				text: "08:00-08:59",
				start: "08:00:00",
				end: "08:59:59",
				value: "9"
			}, {
				text: "09:00-09:59",
				start: "09:00:00",
				end: "09:59:59",
				value: "10"
			}, {
				text: "10:00-10:59",
				start: "10:00:00",
				end: "10:59:59",
				value: "11"
			}, {
				text: "11:00-11:59",
				start: "11:00:00",
				end: "11:59:59",
				value: "12"
			}]
		}, {
			name: "下午",
			itemList: [{
				text: "12:00-12:59",
				start: "12:00:00",
				end: "12:59:59",
				value: "13"
			}, {
				text: "13:00-13:59",
				start: "13:00:00",
				end: "13:59:59",
				value: "14"
			}, {
				text: "14:00-14:59",
				start: "14:00:00",
				end: "14:59:59",
				value: "15"
			}, {
				text: "15:00-15:59",
				start: "15:00:00",
				end: "15:59:59",
				value: "16"
			}, {
				text: "16:00-16:59",
				start: "16:00:00",
				end: "16:59:59",
				value: "17"
			}, {
				text: "17:00-17:59",
				start: "17:00:00",
				end: "17:59:59",
				value: "18"
			}]
		}, {
			name: "夜间",
			itemList: [{
				text: "18:00-18:59",
				start: "18:00:00",
				end: "18:59:59",
				value: "19"
			}, {
				text: "19:00-19:59",
				start: "19:00:00",
				end: "19:59:59",
				value: "20"
			}, {
				text: "20:00-20:59",
				start: "20:00:00",
				end: "20:59:59",
				value: "21"
			},{
				text: "21:00-21:59",
				start: "21:00:00",
				end: "21:59:59",
				value: "22"
			}, {
				text: "22:00-22:59",
				start: "22:00:00",
				end: "22:59:59",
				value: "23"
			}, {
				text: "23:00-23:59",
				start: "23:00:00",
				end: "23:59:59",
				value: "24"
			}]
		}],
	})
	const dataymd = ref("")
	const timeRightSe_index = ref()
	const timeRightSe_indexB = ref()
	const fullAddress = ref("")//服务地址
	const address_mp = ref("")//门牌地址
	const longitude = ref("")
	const latitude = ref("")
	const orderInfo = ref({})
	const orderInfoNew = ref({})
	const offDataymd = ref(false)//true上门时间有改动,false无改动
	const dateEcho = ref("")//只用于页面显示 处理2025-04-16 06:00-:06:59
	const regeoInfo = ref("")
	const positionInfo = ref(null)
	const contentRef = ref(null)

	onUnload(() => {
	    // 页面卸载时移除监听
	    uni.$off('dataEventSQ_edit_orders');
	})
	onLoad(() => {
		let gewin = uni.getWindowInfo();//获取窗口信息
		paddingTop.value = gewin.statusBarHeight + 2;
		//设置ios 底部安全距离
		safeBottom.value = gewin.safeAreaInsets.bottom>0?gewin.safeAreaInsets.bottom+"px":"30rpx";
		//获取左侧日期并整合
		time.leftDay = getFormattedDates();
		dataymd.value = time.leftDay[0].dataymd;
		//编辑接受数据
		uni.$once('dataEventSQ_edit_orders', (data) => {
			orderInfo.value = JSON.parse(JSON.stringify(data.orderInfo));
			orderInfoNew.value = JSON.parse(JSON.stringify(data.orderInfo));
			regeoInfo.value={
				addressComponent:{
					adcode: orderInfo.value.districtId && orderInfo.value.districtId != '0' ? orderInfo.value.districtId : "",
					township: orderInfo.value.streetName ? orderInfo.value.streetName : "",
					provinceId: orderInfo.value.provinceId ? orderInfo.value.provinceId : "",
					cityId: orderInfo.value.cityId ? orderInfo.value.cityId : "",
				}
			}
			let arrs = orderInfo.value.appointmentDate.split("-");
			let newdate = `${parseInt(arrs[1])}月${parseInt(arrs[2])}日`;
			dateEcho.value = newdate
			categoryPullDown()
		});
		
	})
	//监听页面滚动
	onPageScroll((e) => {
	    handleScroll(e.scrollTop)
	})
	//设置导航栏背景样式
	const handleScroll= (top) => {
		// 获取当前的滚动距离 top
	    if (top > 5) {
			let opacity = top / 300
			opacity = opacity > 1 ? 1 : opacity
		
			// 根据滚动距离设置导航栏背景色
			let alpha = Math.min(top / 100, 1); // 控制透明度的变化,200为阈值
			rgba.value =`rgba(255, 255, 255, ${alpha})`
			
			//rgba.value = `rgba(255, 255, 255, 1)`;
	    } else {
			rgba.value = 'rgba(0,0,0,0)'
	    }
	}
	// 获取元素位置的方法  H5有效app无效
	const getElementPosition = () => {
		try {
			uni.createSelectorQuery()
			  .select('.smView_right_f .smView_right .smView_rightA .smView_rightB .smView_rightC')
			  .boundingClientRect(rect => {
			    if (rect) {
			      positionInfo.value = {
			        left: rect.left,
			        right: rect.right,
			        top: rect.top,
			        bottom: rect.bottom,
			        width: rect.width,
			        height: rect.height
			      };
			      console.log('元素位置信息:', rect.top);
						// // 获取内容区域的DOM节点
						const contentEl = contentRef.value.$el || contentRef.value;
						const systemInfo = uni.getSystemInfoSync();
						const pixelRatio = systemInfo.pixelRatio;//获取设备像素比
						// 向上滚动100px
						contentEl.scrollTop = positionInfo.value.top / pixelRatio;
			    } else {
			      console.log('未找到匹配的元素');
			      positionInfo.value = null;
			    }
			  })
			  .exec();
		} catch (error) {
			//TODO handle the exception
		}
	}
	//查询数据字典 服务品类
	const getListByType= () => {
		globalProperties.$api.getListByType({
			types: ["engineer_reason_for_order_cancellation"]
		}).then(response => {
			let arr = response.data.dictionaryList.engineer_reason_for_order_cancellation;
			cancelList.value = arr?[arr]:[]
		}).catch(error => {
			
		});
	}
	
	//查询服务品类下拉数据
	const categoryPullDown= () => {
		globalProperties.$api.categoryPullDown({
			id: orderInfo.value.productId
		}).then(response => {
			console.log(response.data)
			cancelList_fwpl.value = [response.data] || []
		}).catch(error => {
			
		});
	}
	//上门时间确定修改
	const timeSave = ()=> {
		if(timeRightSe_value.value == null) return globalProperties.$test.toast('请选择上门时间!', 3000);
		itemSe_text.value = dayLeftSe_text.value +" "+ timeRightSe_text.value
		orderInfoNew.value.appointmentDate = dayLeftSe_text.value 
		orderInfoNew.value.appointmentTimeRange = timeRightSe_text.value 
		dateEcho.value = "" 
		offDataymd.value = true
		close()
	}
	//上门时间    右侧时间选择
	const timeRightSe = (text, value, index, indexB)=> {
		//设置可以取消选择右侧时间段。时间段为空代表尽快
		// if(timeRightSe_index.value == index && timeRightSe_indexB.value == indexB){
		// 	//设置右侧时间
		// 	timeRightSe_text.value = ""
		// 	timeRightSe_value.value = ""
			
		// 	timeRightSe_index.value = ""
		// 	timeRightSe_indexB.value = ""
		// }else{
			//设置右侧时间
			timeRightSe_text.value = text
			timeRightSe_value.value = value
			
			timeRightSe_index.value = index;
			timeRightSe_indexB.value = indexB;
		//}
		
	}
	//上门时间    左侧日期选择
	const leftdaySe = (text, index, dataymds)=> {
		if(dayLeftSe_index.value == index) return
		//重置清除右侧时间选择
		timeRightSe_value.value = null;
		timeRightSe_text.value = ""
		timeRightSe_index.value = ""
		timeRightSe_indexB.value = ""
		
		//设置左侧日期
		dayLeftSe_index.value = index;
		dayLeftSe_text.value = text
		dataymd.value = dataymds;
		
	}
	//选择时间-右侧时间段验证是否可选,当日当前时间点前的时间段不可选
	const timeDuanif = (timeSlots) => {
		if(dayLeftSe_index.value != 0){
			return true
		}
		var currentTime = new Date();
		currentTime.setHours(currentTime.getHours() + 0.5);  // 当前时间加0.5小时
	
		// 获取当前时间加一个小时的字符串
		var currentTimeStr = currentTime.getHours().toString().padStart(2, "0") + ":" + currentTime.getMinutes().toString().padStart(2, "0");
	
		// 过滤掉时间段小于当前时间加一个小时的时间段
		var [startTime, endTime] = timeSlots.split("-");
		return startTime >= currentTimeStr ? true : false;  // 只保留大于等于当前时间的时间段
	}
	
	// 获取指定日期的星期几
	const getWeekDay = (date) => {
	    const daysOfWeek = ['日', '一', '二', '三', '四', '五', '六'];
	    const weekDay = new Date(date).getDay();
	    return `周${daysOfWeek[weekDay]}`;
	}
	
	  // 获取当前日期及之后6天的日期,包含周几
	const getFormattedDates = () => {
	    const today = new Date();
	    const formattedDates = [];
	    
	    // 获取今天
	    formattedDates.push({
			year: today.getFullYear(),
			date: formatDate(today),
			dataymd: today.getFullYear()+"-"+formatDate(today),
			weekDay: '今天'
	    });
	    
	    // 获取明天
	    const tomorrow = new Date(today);
	    tomorrow.setDate(today.getDate() + 1);
	    formattedDates.push({
			year: tomorrow.getFullYear(),
			date: formatDate(tomorrow),
			dataymd: tomorrow.getFullYear()+"-"+ formatDate(tomorrow),
			weekDay: '明天'
	    });
	
	    // 获取之后5天
	    for (let i = 2; i <= 6; i++) {
			const nextDay = new Date(today);
			nextDay.setDate(today.getDate() + i);
			formattedDates.push({
				year: nextDay.getFullYear(),
				date: formatDate(nextDay),
				dataymd: nextDay.getFullYear()+"-"+formatDate(nextDay),
				weekDay: getWeekDay(nextDay)
			});
	    }
		
	    return formattedDates;
	}
	
	  // 格式化日期为 "月日" 形式
	const formatDate = (date) => {
	    const month = date.getMonth() + 1;  // 月份从0开始,所以下标要加1
	    const day = date.getDate();
	    return `${month}月${day}日`;
	}
	//选择服务地址
	const goAddress =()=> {
		// 地图选点
		uni.chooseLocation({
		  success: function (res) {
				console.log(res)
				getRegeo(res.longitude, res.latitude)
				orderInfoNew.value.fullAddress = res.address+","+res.name;
				
				let lat = res.latitude;
				let lon = res.longitude;
				try {
					orderInfoNew.value.longitude = utils.formatCoordinate(lon);
					orderInfoNew.value.latitude = utils.formatCoordinate(lat);
				} catch (error) {
					orderInfoNew.value.longitude = res.longitude;
					orderInfoNew.value.latitude = res.latitude;
				}
				
				fullAddress.value = res.address+","+res.name;
				longitude.value = res.longitude;
				latitude.value = res.latitude;
			// that.setData({
			//   longitude: res.longitude,
			//   latitude: res.latitude,
			//   poiName: res.name,
			//   address:res.address,
			// })
		  },
		  fail: function (err) {
			console.log(err)
		  }
		})
	}
	
	//地址逆解析
	const getRegeo = (longitude, latitude) => {
		utils.getRegeo(longitude, latitude).then(info => {
			regeoInfo.value = info.data.regeocode
			console.log(info.data.regeocode)
			uni.hideLoading();
		})
	}
	//上门时间关闭提示窗
	const close = (e) => {
		popup.value.close()
	}
	
	//上门时间打开提示窗
	const toggle = (type) => {
		//处理左侧日期列表默认选择事件
		if(!dayLeftSe_index.value){
			dayLeftSe_index.value = 0
			dayLeftSe_text.value = time.leftDay[0].date
		}
		toggleType.value = type
		// open 方法传入参数 等同在 uni-popup 组件上绑定 type属性
		popup.value.open(type)
		setTimeout(()=>{
			getElementPosition()
		},200)
	}
	//选择服务产品
	const openPicker_fwcp =(e)=> {
		picker_fwcp.value.open()
	}
	//选择服务品类
	const openPicker_fwpl =(e)=> {
		picker_fwpl.value.open()
	}
	//服务产品确定
	const confirm_fwcp =(e)=> {
		console.log('confirm', e);
		picker_fwcp.value.close()
	}
	//服务品类确定
	const confirm_fwpl =(e)=> {
		console.log('confirm', e);
		orderInfoNew.value.categoryId = e.value[0].id;//品类一级ID
		orderInfoNew.value.categoryName = e.value[0].name;//品类一级名称
		picker_fwpl.value.close()
	}
	//qu确定修改
	const save = () =>{
		if(!orderInfoNew.value.appointmentDate) return globalProperties.$test.toast('请选择上门日期!', 3000);
		if(!orderInfo.value.appointmentTimeRange && !timeRightSe_text.value) return globalProperties.$test.toast('请选择上门时间段!', 3000);
		if(!orderInfoNew.value.fullAddress) return globalProperties.$test.toast('请选择服务地址!', 3000);
		
		//处理上门日期
		var reservationDate = dataymd.value.replace(/月/g, '-').replace(/日/g, '');
		let arr = reservationDate.split("-");
		if(arr[1] < 10){ arr[1] = "0" + arr[1] }
		if(arr[2] < 10){ arr[2] = "0" + arr[2] }
		reservationDate = arr.join('-'); 
	
		//处理特殊区 东莞区(dCode传"")
		let pCode = "";
		let cCode = "";
		let dCode = "";
		if(regeoInfo.value.addressComponent.adcode == ""){//处理没区的,没区的用接口反的省市id
			pCode = orderInfo.value.provinceId;
			cCode = orderInfo.value.cityId;
			dCode = "";
		}else{
			pCode = regeoInfo.value.addressComponent.adcode.slice(0, 2)+'0000';
			cCode = regeoInfo.value.addressComponent.adcode.slice(0, 4)+'00';
			dCode = "";
			if(cCode != regeoInfo.value.addressComponent.adcode){
				dCode = regeoInfo.value.addressComponent.adcode
			}
		}
		let newTimeRange = offDataymd.value ? timeRightSe_text.value : orderInfoNew.value.appointmentTimeRange ? orderInfoNew.value.appointmentTimeRange : "";//预约时间段 例如:11:00-11:59,没有预约时间段就代表尽快
		if(!newTimeRange){
			 return globalProperties.$test.toast('请选择上门时间段!', 3000);
		}
	
		globalProperties.$api.modifyOrder({
			engineerOrderId: orderInfo.value.engineerOrderId,//工程师订单ID
			orderHeaderId: orderInfo.value.orderHeaderId,//订单头ID
			oldModifyOrder: {
				categoryId: orderInfo.value.categoryId?orderInfo.value.categoryId:"",//品类一级ID
				categoryName: orderInfo.value.categoryName?orderInfo.value.categoryName:"",//品类一级名称
				fullAddress: orderInfo.value.fullAddress?orderInfo.value.fullAddress:"",//详细地址
				detailedAddress: orderInfo.value.detailedAddress?orderInfo.value.detailedAddress:"",//门牌地址 false
				latitude: orderInfo.value.latitude?orderInfo.value.latitude:"-1",//纬度,精确到小数点后 8 位
				longitude: orderInfo.value.longitude?orderInfo.value.longitude:"-1",//经度,精确到小数点后 8 位
				appointmentDate: orderInfo.value.appointmentDate?orderInfo.value.appointmentDate:"",//预约日期
				appointmentTimeRange: orderInfo.value.appointmentTimeRange?orderInfo.value.appointmentTimeRange:""
			},
			newModifyOrder: { //新数据
				provinceId: pCode,//省份ID(行政区域代码)true
				cityId: cCode,//市ID(行政区域代码)false	
				districtId: dCode,//区级行政ID(行政区域代码)false	
				streetName: regeoInfo.value.addressComponent.township?regeoInfo.value.addressComponent.township:"",//	街道名称		false	
			    categoryId: orderInfoNew.value.categoryId,//品类一级ID
			    categoryName: orderInfoNew.value.categoryName,//品类一级名称
			    fullAddress: orderInfoNew.value.fullAddress,//详细地址
			    detailedAddress: orderInfoNew.value.detailedAddress,//门牌地址 false
			    latitude: orderInfoNew.value.latitude,//纬度,精确到小数点后 8 位
			    longitude: orderInfoNew.value.longitude,//经度,精确到小数点后 8 位
			    appointmentDate: offDataymd.value ? reservationDate : orderInfoNew.value.appointmentDate,//预约日期
			    appointmentTimeRange: newTimeRange//预约时间段 例如:11:00-11:59,没有预约时间段就代表尽快
			},
			
		}).then(response => {
			uni.showToast({
				title: '订单修改成功!',
				icon: 'success',
				mask:true,
				duration: 1000,
			})
			setTimeout(() => {
				uni.navigateBack({
					delta: 1
				})
			}, 1000);
		}).catch(error => {
			uni.showToast({
				title: error || '订单修改失败!',
				icon: 'none',
				duration: 3000,
			})
		});
		
	}
	const blackfack = () =>{
		uni.navigateBack({
			delta: 1
		})
	}
</script>

<style lang="scss" scoped>
	
	.flexBottom{
		width: 100%;
		padding: 30rpx;
		box-sizing: border-box;
		background-color: #fff;
		position: fixed;
		left: 0;
		bottom: 0;
		z-index: 95;
		display: flex;
		justify-content: space-between;
		align-items: center;
	}
	.fl_left{
		display: flex;
		flex-direction: column;
		flex: 1;
	}
	.login-btn {
		width: 100%;
		height: 90rpx;
		line-height: 90rpx;
		background: linear-gradient(90deg, #FF6B15 0%, #FF8C3E 100%);
		color: white;
		border-radius: 32px;
		font-size: 16px;
		border: none;
	}
	uni-button:after{
		border: 0px solid #fff !important;
	}
	
	.beijing{
		background-image: url("/static/img/shangmenyanzhengBJ.png");
		background-size: 100% 100%;
		position: absolute;
		top: 0;
		left: 0;
		height: 300rpx;
		width: 100%;
		z-index: 1;
	}
	.sdign{
		position: relative;
		z-index: 2;
		text-align: center;
		display: flex;
		flex-direction: column;
		align-items: center;
	}
	.faultPhenomenon{
		width: calc(100% - 60rpx);
		border-radius: 20rpx;
		padding: 30rpx;
		box-sizing: border-box;
		background-color: aqua;
		margin-top: 30rpx;
		background: #FFFFFF;
		box-shadow: 0rpx 4rpx 10rpx 0rpx rgba(0,0,0,0.04);
	}
	.faultPhenomenon:last-child{
		margin-bottom: 100px;
	}
	.fault_item{
		display: flex;
		justify-content: space-between;
	}
	.address_v{
		background-color: #F8F8F8;
		padding: 20rpx;
		box-sizing: border-box;
		border-radius: 10rpx;
		margin-top: 20rpx;
		color: #999999;
	}
	@mixin flex {
		/* #ifndef APP-NVUE */
		display: flex;
		/* #endif */
		flex-direction: row;
	}
	
	@mixin height {
		/* #ifndef APP-NVUE */
		height: 100%;
		/* #endif */
		/* #ifdef APP-NVUE */
		flex: 1;
		/* #endif */
	}
	.uni-popup ::v-deep .uni-popup__wrapper{
		width: 100% !important;
		border-top-right-radius: 15px;
		border-top-left-radius: 15px;
	}
	.popup-content {
		display: flex;
		flex-direction: column;
		position: relative;
		padding: 15px 15px 15px 0;
		background-color: #fff;
		border-top-right-radius: 15px;
		border-top-left-radius: 15px;
	}
	.popup-login-btn{
		width: calc(100% - 15px);
		margin-left: 15px;
		height: 90rpx;
		line-height: 90rpx;
		background: linear-gradient(90deg, #FF6B15 0%, #FF8C3E 100%);
		color: white;
		border-radius: 32px;
		font-size: 16px;
		border: none;
		margin-top: 50rpx;
	}
	
	.popup-height {
		@include height;
		width: 200px;
	}
	.closeempty{
		position: absolute;
		top: 30rpx;
		right: 30rpx;
	}
	.smView{
		display: flex;
		margin-top: 30rpx;
		height: 45vh;
	}
	.smView_left{
		width: 270rpx;
		background-color: #efefef;
		height: 100%;
		overflow-y: scroll;
		
	}
	.smView_left_day{
		text-align: center;
		height: 60rpx;
		line-height: 60rpx;
		padding-top: 13rpx;
		padding-bottom: 13rpx;
	}
	.smView_right{
		background-color: #fff;
		flex: 1;
		height: 100%;
		padding: 20rpx;
		box-sizing: border-box;
		overflow-y: scroll;
	}
	.smView_right_time{
		padding: 20rpx;
		box-sizing: border-box;
		display: flex;
		align-items: center;
		justify-content: space-between;
	}
	.smView_left_day_select{
		background-color: #fff;
	}
	.smView_right_time_select{
		color: #FF6B15;
		font-weight: bold;
	}
	
</style>
相关推荐
滴水未满7 小时前
uniapp的页面
前端·uni-app
2501_916007479 小时前
如何查看 iOS 设备系统与硬件信息,iOS系统信息显示工具
android·ios·小程序·https·uni-app·iphone·webview
2501_9160074711 小时前
iOS APP 开发,从项目创建、证书与描述文件配置、安装测试和IPA 上传
android·ios·小程序·https·uni-app·iphone·webview
滴水未满11 小时前
uniapp的工程
前端·uni-app
云上凯歌1 天前
01_AI工具平台项目概述.md
人工智能·python·uni-app
郑州光合科技余经理1 天前
O2O上门预约小程序:全栈解决方案
java·大数据·开发语言·人工智能·小程序·uni-app·php
2501_916008891 天前
在不越狱前提下导出 iOS 应用文件的过程,访问应用沙盒目录,获取真实数据
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915106321 天前
Android和IOS 移动应用App图标生成与使用 Assets.car生成
android·ios·小程序·https·uni-app·iphone·webview
木子啊1 天前
UNIAPP移动端瀑布流列表,支持APP、微信小程序、H5
uni-app·瀑布流·两列排序