uniapp实现预约时间选择弹窗组件

news2024/12/24 8:32:44

做了个组件,实现出当日预约时间组件,效果图如下
在这里插入图片描述
废话不多说,直接上代码,代码简单,参数自己任意改

<template>
	<view class="inventory">
		<u-popup :show="show" :round="10" bgColor="#eee" mode="bottom" @close="close">
			<view class="openPopup">
				<view class="title">
					<view class="utitle">
						选择预约时间
					</view>
					<view class="close" @click="close">
						<u-icon name="close" color="#aaa" size="22"></u-icon>
					</view>
				</view>
				<view class="content">
					<view class="left">
						<view class="l_item active">
							{{nowWeek}}
						</view>
					</view>
					<view class="right">
						<scroll-view scroll-y="true" class="scroll-Y" :scroll-into-view="'one'+(oneCategoryActive)">
							<block v-for="(item,index) in selection" >
								<view class="r_item active" v-if="item.active" @click="selectTime(item)" :id="'one'+(index+1)">
									{{item.time}} <u-icon name="checkmark-circle-fill" color="#42c8b4" size="20"></u-icon>
								</view>
								<view class="r_item" v-else @click="selectTime(item)">
									{{item.time}}
								</view>
							</block>
						</scroll-view>
					</view>
				</view>
			</view>
		</u-popup>
	</view>
</template>

<script>
	/**
	 * 自定义时间选择器
	 * 该组件适用于当日的预约时间
	 */
	export default {
		// props: {
		// 	subscribeTime: {
		// 		type: Object,
		// 		default: ()=>{}
		// 	},
		// },
		data() {
			return {
				show: false,
				timer: null,
				tsection:[
					"00:00","00:15","00:30","00:45",
					"01:00","01:15","01:30","01:45",
					"02:00","02:15","02:30","02:45",
					"03:00","03:15","03:30","03:45",
					"04:00","04:15","04:30","04:45",
					"05:00","05:15","05:30","05:45",
					"06:00","06:15","06:30","06:45",
					"07:00","07:15","07:30","07:45",
					"08:00","08:15","08:30","08:45",
					"09:00","09:15","09:30","09:45",
					"10:00","10:15","10:30","10:45",
					"11:00","11:15","11:30","11:45",
					"12:00","12:15","12:30","12:45",
					"13:00","13:15","13:30","13:45",
					"14:00","14:15","14:30","14:45",
					"15:00","15:15","15:30","15:45",
					"16:00","16:15","16:30","16:45",
					"17:00","17:15","17:30","17:45",
					"18:00","18:15","18:30","18:45",
					"19:00","19:15","19:30","19:45",
					"20:00","20:15","20:30","20:45",
					"21:00","21:15","21:30","21:45",
					"22:00","22:15","22:30","22:45",
					"23:00","23:15","23:30","23:45",
					"23:59"
					],
				selection:[],
				nowWeek: '',
				nowDate: '',
				nowTime: '',
				subscribeTime:{time:"立即取餐",active:true},
				oneCategoryActive: 0, //一级分类点击下标
			}
		},

		methods: {
			open(data) {
				this.subscribeTime = data;
				console.log(this.subscribeTime);
				this.getDate();
			},
			close() {
				this.show = false
			},
			upper: function(e) {
			},
			lower: function(e) {
			},
			selectTime(data){
				this.close()
				data.active = true;
				this.$emit("callback",{subscribeTime:data,day:this.nowWeek,time:this.nowDate})
			},
			getDate() {
				console.log(this.subscribeTime)
				this.selection = []
				//获取当前时间
				let myDate = new Date()
				let wk = myDate.getDay()
				let yy = String(myDate.getFullYear())
				let mm = myDate.getMonth() + 1
				let dd = String(myDate.getDate() < 10 ? '0' + myDate.getDate() : myDate.getDate())
				let hou = String(myDate.getHours() < 10 ? '0' + myDate.getHours() : myDate.getHours())
				let min = String(myDate.getMinutes() < 10 ? '0' + myDate.getMinutes() : myDate.getMinutes())
				let sec = String(myDate.getSeconds() < 10 ? '0' + myDate.getSeconds() : myDate.getSeconds())
				let weeks = ['今天(周日)', '今天(周一)', '今天(周二)', '今天(周三)', '今天(周四)', '今天(周五)', '今天(周六)']
				let week = weeks[wk]
				this.nowTime = hou + ':' + min
				this.nowWeek = week
				this.nowDate = yy+'-'+mm+'-'+dd 
				for (let i = 0; i < this.tsection.length; i ++) {  
				    let start = this.tsection[i];  
				    let end = this.tsection[i + 1];  
				    if (this.nowTime <= start) {  
						if(this.subscribeTime){
							if(end == this.subscribeTime["time"]){
								this.selection.push({time:end,active:true})
							}else{
								this.selection.push({time:end,active:false})
							}
						}else{
							this.selection.push({time:end,active:false})
						}
						
				    }  
				}
				if(this.subscribeTime){
					if(this.subscribeTime["time"] == "立即取餐"){
						this.selection.unshift({time:"立即取餐",active:true})
					}else{
						this.selection.unshift({time:"立即取餐",active:false})
					}
				}else{
					this.selection.unshift({time:"立即取餐",active:true})
				}
				this.selection.map((item,index)=>{
					if(item.active){
						this.oneCategoryActive = index+1
					}
				})
				this.show = true;
			}
		}
	}
</script>
<style>
	.scroll-Y {
		height: 520rpx;
		
	}

	.scroll-view_H {
		white-space: nowrap;
		width: 100%;
	}

	.scroll-view-item {
		height: 420rpx;
		line-height: 420rpx;
		text-align: center;
		font-size: 36rpx;
	}

	.scroll-view-item_H {
		display: inline-block;
		width: 100%;
		height: 420rpx;
		line-height: 420rpx;
		text-align: center;
		font-size: 36rpx;
	}
</style>
<style lang="scss" scoped>
	.inventory {
		.openPopup {
			height: 600rpx;

			.title {
				width: 100%;
				height: 80rpx;
				font-size: 32rpx;
				line-height: 80rpx;
				// border-bottom: 2rpx solid #777;
				text-align: center;
				display: flex;
				align-items: center;
				justify-content: center;
				position: relative;

				.close {
					position: absolute;
					right: 30rpx;
					font-size: 30rpx;
					color: #aaa;
				}
			}

			.content {
				height: 520rpx;
				width: 100%;
				display: flex;

				.left {
					width: 35%;

					.l_item {
						width: 100%;
						height: 86rpx;
						line-height: 86rpx;
						text-align: center;
						background-color: #fff;
					}
				}

				.right {
					width: 65%;
					background-color: #fff;
					padding-left: 30rpx;

					.r_item {
						width: 100%;
						height: 80rpx;
						line-height: 80rpx;
						font-size: 34rpx;
						justify-content: space-between;
						border-bottom: 1rpx solid #eee;
						padding: 0 10rpx;
						padding-right: 50rpx;
						background-color: #fff;
						display: flex;
					}
				}
			}

			.active {
				color: #42c8b4;
			}
		}
	}
</style>

在父组件中

<script>
	import 引入组件
	export default {
		components: {
			注册组件
		},
		data(){
			return {
				subscribeTime:{time:"立即取餐",active:true},
				nowWeek:'',
				time:''
			}
		},
		methods: {
			opentime(){
				console.log(this.subscribeTime);
				//打开弹窗
				this.$refs.abtime.open(this.subscribeTime)
			},
			//接收返回参数
			abTimeBack(d){
				console.log(d)
				for (let key in d.subscribeTime) {
					this.subscribeTime[key] = d.subscribeTime[key]
				}
				console.log(this.subscribeTime)
				this.nowWeek = d.day
			}
		}
	}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全国青少年信息素养大赛Scratch图形化编程_初赛_模拟二卷

全国青少年电子信息智能创新大赛Scratch图形化编程_初赛_模拟二卷 一、选择题 第 1 题 单选题 执行下面程序&#xff0c;角色会说&#xff1f;&#xff08; &#xff09; A.34 B.28 C.51 D.42 第 2 题 单选题 默认小猫角色&#xff0c;初始位置在舞台中心&#xff0c;下面…

Vuex模块化管理

如果你的项目是一个小型项目&#xff0c;就用不着使用模块化&#xff1b; 但是&#xff0c;如果你参与的项目是一个中大型项目&#xff0c;那Vuex模块化&#xff0c;必不可少&#xff0c;否则整个文件很臃肿&#xff0c;也很难管理。 通过模块化管理&#xff1a;各自模块下都有…

【Linux环境搭建篇】--- 还不会搭建Linux环境?收藏这一篇就够了

文章目录 前言&#x1f31f;一、Linux背景介绍&#x1f30f;1.1. 发展史&#x1f30f;1.2. 开源 &#x1f31f;二、搭建Linux环境&#x1f31f;三、使用 XShell 远程登陆到 Linux&#x1f31f;四、XShell 下的复制粘贴&#x1f63d;总结 前言 &#x1f467;个人主页&#xff1a…

AF647 Azide,Alexa Fluor 647 Azide,明亮且光稳定的荧光基团

文章编辑来自于&#xff1a;陕西新研博美生物科技有限公司MISS.wu​ Alexa Fluor 647 Azide&#xff0c;Alexa Fluor 647 N3&#xff0c;AF647 Azide&#xff0c;AF 647 N3| AF 647 叠氮&#xff0c;Alexa Fluor 647叠氮 | CAS&#xff1a;N/A | 纯度&#xff1a;95% PA…

vue项目加按钮,两个不同的项目当前页进行互相切换

服务器上两个项目当前页互相切换 直接使用 window.location.href 调整的页面地址 这里一定要注意服务器上项目的前缀名称即可。

【iOS】—— RunLoop和多线程相关问题总结

RunLoop 1. 讲讲RunLoop&#xff0c;项目中有用到过吗&#xff1f; RunLoop 的基本作用&#xff1a;保持程序的持续运行&#xff0c;节省 CPU 的资源&#xff0c;提高程序的性能 &#xff08; 没有事情&#xff0c;就请休眠&#xff0c;不要功耗。有事情&#xff0c;就处理&a…

如何制定数据采集解决方案?

数据采集仍是人工智能&#xff08;AI&#xff09;构建团队的主要瓶颈。原因各不相同&#xff1a;用例数据可能不足&#xff0c;深度学习等新机器学习&#xff08;ML&#xff09;技术需要更多数据&#xff0c;或者团队并未建立获取所需数据的适当流程。但无论如何&#xff0c;对…

xmind latex【记录备忘】

xmind latex 换行 换行必须要有\begin{align}和\end{align}&#xff0c;此时再在里面用\才能换行&#xff0c;如果只写112\224是不能换行的

2023第五届全国生物资源提取与应用创新论坛即将举办

01、会议背景 为进一步加强生物资源提取行业交流与合作&#xff0c;促进业“产学研用”融合&#xff0c;提升行业科技创新水平&#xff0c;增强行业国际竞争力&#xff0c;中国生物发酵产业协会、浙江科技学院、浙江工业职业技术学院、浙江省农业生物资源生化制造协同创新中心&…

JS算法之递归

含义 递归函数是指能够直接或间接调用自身的方法或函数。 // 直接 function do() {do(); }// 间接 function do() {do2(); } function do2() {do() } 每个递归函数必须有基线条件&#xff08;即停止点&#xff0c;一个不再递归调用的条件。&#xff09;否则将无限递归下去。 因…

每天一个电商API分享:淘宝/天猫获取商品销量详情 API(月销总销)

淘宝/天猫获取商品销量详情API&#xff08;月销总销&#xff09;是一种用于获取电商平台上商品销量数据的接口。通过这个API&#xff0c;用户可以方便地获取到商品的月销量以及总销量等详细信息&#xff0c;快速了解商品的销售情况。 随着电商行业的快速发展&#xff0c;不少卖…

pytest study

pytest 测试用例的识别与运行 测试文件&#xff1a;test_*.py 和 *_test.py 以test开头或结尾的文件 测试用例&#xff1a;Test*类包含的所有 test_*的方法&#xff08;测试类不能带有__init__方法&#xff09;&#xff0c; 不在class中的所有test_*的方法 def func(x):r…

RunnerGo性能测试怎么做?

性能测试—计划管理 新建计划&#xff1a; 在左侧导航栏中&#xff0c;选择“性能测试”&#xff0c;点击“计划管理”进入计划管理界面&#xff0c;点击右上角新建计划来新建测试计划。任务类型选择后不可再更改。定时模式下, 该计划内最多只能创建一个场景。 普通任务&…

如何往MySQL中插入100万条数据?

需求 现在有一个 数据量 为100万的数据样本 100w_data.sql 其数据格式如下&#xff0c;截取最后十条数据 999991,XxGdnLZObA999991,XxGdnLZObA,XxGdnLZObA,2020-3-18,1 999992,TBBchSKobC999992,TBBchSKobC,TBBchSKobC,2020-9-8,2 999993,rfwgLkYhUz999993,rfwgLkYhUz,rfwgLk…

APISIX 安全评估

背景 有大佬已经对 [apisix攻击面](https://ricterz.me/posts/2021-07-05-apache-apisix-attack- surface-research.txt)做过总结。 本文记录一下自己之前的评估过程。 分析过程 评估哪些模块&#xff1f; 首先我需要知道要评估啥&#xff0c;就像搞渗透时&#xff0c;我得…

【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现

【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现前言NeRS模型运行下载源码并安装环境安装…

体制内裸辞,她用云端地球实现了自己的乡村梦

追逐田园的“诗与远方” “我最初的梦想&#xff0c;就是有一个亲手打造的、能装进个人喜好的小院子。”为完成自己的梦想&#xff0c;吕春萍毅然放弃了体制内的工作&#xff0c;来到秦岭脚下的桥南镇曹峪村&#xff0c;践行自己的“乡村梦”。 起初&#xff0c;吕春萍做了五…

「开源项目」开源企业级问答系统-Danswer

danswer 基本介绍 开源企业级问答系统&#xff0c;可以对内部文档进行自然语言提问&#xff0c;并返回可靠的答案、引用和参考资料&#xff0c;可以连接到多种常见工具&#xff0c;如Slack、GitHub和Confluence。 在线预览 暂无在线预览地址&#xff0c;不过可以自行部署使用…

【error】svn 清理以下路径失败 原始内容不存在

前言 目前我们这边的内网代码是通过 TortoiseSVN 进行版本管理的&#xff0c;平时用着也挺好的&#xff0c;没碰到什么大问题。 但是&#xff0c;今天碰到了一个比较棘手的问题&#xff0c;在这里做一下记录&#xff0c;以方便自己和有需要的朋友在之后碰到该类问题时有个参考…

[php-cos]ThinkPHP项目集成腾讯云储存对象COS

Cos技术文档 1、安装phpSdk 通过composer的方式安装。 1.1 在composer.json中添加 qcloud/cos-sdk-v5: >2.0 "require": {"php": ">7.2.5","topthink/framework": "^6.1.0","topthink/think-orm": "…