## UNIAPP---- 开始时间与结束时间上下滑动选择组件(时间数据结构是对象数组)

## UNIAPP---- 开始时间与结束时间上下滑动选择组件(时间数据结构是对象数组)

在这里插入图片描述
时间数据结构:
在这里插入图片描述

组件:

<template>
	<!-- 选择开始时间和结束时间 上下滑动框 -->
	<view class="display ">
		<view class="fontSize12 colorColor widP20 FontLeft  paddT20 marT6">
			开始时间
		</view>
		<view class="fontSize16 widP25 marL40 ">
			<view class="colorColor marB20">{{preTimeS}}</view>
			<swiper class="scroll-Y" vertical @change='selActive($event,1)'>
				<swiper-item v-for="(item,index) in timeAllS" :key="index">
					{{item.time}}
				</swiper-item>

			</swiper>
			<view class="colorColor marT20">{{nextTimeS}}</view>
		</view>
		<view class="fontSize16 widP25 FontRight">
			<view class="colorColor marB20">{{preTimeE}}</view>
			<swiper class="scroll-Y" vertical @change='selActive($event,2)'>
				<swiper-item v-for="(item,index) in timeAllE" :key="index">
					{{item.time}}
				</swiper-item>

			</swiper>
			<view class="colorColor marT20">{{nextTimeE}}</view>
		</view>
		<view class="fontSize12 colorColor widP20 FontRight marL40 paddT20 marT6 ">
			结束时间
		</view>
	</view>

</template>

<script>
	export default {
		data() {
			return {
				//time 为时间的字段
				timeAllE: [], //结束时间数组 
				preTimeS: '', //开始时间的 前一个
				nextTimeS: '', //开始时间的 后一个
				preTimeE: '', //结束时间的 前一个
				nextTimeE: '', //结束时间的 后一个

			}
		},
		props: {
			timeAllS: [Array],//传递时间数据
			
		},
		mounted() {
			// this.getTime();
		},
		methods: {
			getimeChose() {
				this.getTime();
				let pars = {
					starTime: this.timeAllS[0],
					endTime: this.timeAllE[0],
				}

				return pars;
			},

			// 渲染上一个时间和下一个时间(时间数据是一维数组时)
			getTime() {
				let timeAllS = this.timeAllS;
				this.timeAllE = this.timeAllE.concat(timeAllS);
				this.timeAllE.shift(); //删除第一条数据
				this.preTimeS = '';
				this.preTimeE = '';
				this.nextTimeS = timeAllS[1].time;
				this.nextTimeE = this.timeAllE[1].time;
			},

			// 获取具体选中哪个 tag 1:开始时间 2:结束时间 
			// (判断开始时间 结束时间在整体提交的时候判断)
			selActive(e, tag) {
				let idx = e.detail.current,
					timeAllS = this.timeAllS,
					timeAllE = this.timeAllE;

				if (tag == 1) { //开始时间 的前后时间值			
					idx > 0 ? this.preTimeS = timeAllS[idx - 1].time : this.preTimeS = '';
					timeAllS.length != idx + 1 ? this.nextTimeS = timeAllS[idx + 1].time : this.nextTimeS = '';
				} else { //结束时间 的前后时间值
					idx > 0 ? this.preTimeE = timeAllE[idx - 1].time : this.preTimeE = '';
					timeAllE.length != idx + 1 ? this.nextTimeE = timeAllE[idx + 1].time : this.nextTimeE = '';
				}

				let pars = {
					tag: tag,
					idx: idx
				}
				this.$emit("selActive", pars)

			}
		}
	}
</script>

<style>
	.scroll-Y {
		height: 48rpx;
	}
</style>

组件调用:

<swiperTime ref="swiperTime" :timeAllS='timeAllS' @selActive="selActive"></swiperTime>
onLoad(options) {		
	setTimeout(() => {
		this.getTimez();
	}, 1000)		
},
methods: {
	// 获取选中的开始时间和结束时间 tag=1
	selActive(e) {
		let idx = e.idx;
		e.tag == 1 ? this.starTime = this.timeAllS[idx].time : this.endTime = this.timeAllS[idx + 1].time;
		this.choseTime = {
			starTime: this.timeAllS[idx],
			endTime: this.timeAllS[idx + 1]
		}
		this.time = this.starTime + '~' + this.endTime;
	},
	// 获取一进入页面后选中的时间 tag=1
	getTimez() {
		let t = this.$refs.swiperTime.getimeChose();
		this.choseTime = t;
		this.starTime = t.starTime.time;
		this.endTime = t.endTime.time;
		this.time = this.starTime + '~' + this.endTime;
	},
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值