el-date-picker 月份范围选择限制最大范围

本文介绍了如何在Vue日期选择器中限制月份范围,通过监听`onPick`事件和`disabledDate`属性来确保用户只能选择当前选中月份及其前后12个月。详细探讨了不同初始化状态对组件范围显示的影响。
摘要由CSDN通过智能技术生成
需求描述

  月份范围选择时,限制月份范围最大为 12 个月。

思路

  选择了一个月份后,禁用该月份前后 12 个月之外的选项。
  第一步,通过 DatePicker 提供的 pickerOptions.onPick 监听日期选中事件,记录 minDatemaxDate
  第二步,通过 DatePicker 提供的 pickerOptions.disabledDate 禁用 minDate 前后 12 个月之外的月份选项。

需要注意的是,Element 文档指出 onPick 事件只有当 type 的值为 daterangedatetimerange 时才生效 ,但实际中,type 的值为 monthrange 时也会生效。

文档地址
在这里插入图片描述

实现
<template>
	<el-date-picker
		v-model="dateList" 
		@blur="resetMinDate"
		:picker-options="pickerOptions"
		size="small"
		type="monthrange"
		value-format="timestamp"
		range-separator="至"
		start-placeholder="开始月份"
		end-placeholder="结束月份">
	</el-date-picker>
</template>

<script>

export default {
    data() {
        return {
            dateList: [],
            minDate: null,
            maxDate: null,
            pickerOptions: {
                disabledDate: (time) => {
                    if (this.minDate !== null && this.maxDate === null) {
                        let minMonth = this.minDate.getMonth(),
                            lastYear = new Date(this.minDate).setMonth(minMonth - 11),
                            nextYear = new Date(this.minDate).setMonth(minMonth + 11);
                        // 只能选 minDate 前后一年的范围
                        return time.valueOf() < lastYear.valueOf() || time.valueOf() > nextYear.valueOf();
                    }
                    return false;
                },
                onPick: ({minDate, maxDate}) => {
                    this.minDate = minDate;
                    this.maxDate = maxDate;
                }
            },
        }
    },
    methods: {
        resetMinDate() {
            if (this.dateList && this.dateList.length && this.minDate && !this.maxDate) {
		        this.minDate = new Date(this.dateList[0]);
		    } else {
		        this.minDate = null;
		    }
        },
    },
};
</script>

选择月份范围时,需要选择两个月份,其组成的范围才会回显在组件上

这就产生了一个疑问,即选中第一个月份后,使组件失去焦点,然后再打开组件选第二个月份,此时两次选择所组成的范围会回显到组件上吗?

答:不同的情况下,以上操作会有不同的表现

情况1:组件有初始值

  这种情况下,会有月份范围回显到组件上,但并不一定是两次选中的月份组成的范围。确切的说,组件将会回显初始值的第一个月份(minDate)和第二个选中的月份组件的范围。

情况2:组件无初始值

  这种情况下,不会有月份范围回显到组件上,且第二个选中的月份不会有选中效果。选中第二个月份时,onPickminDatenullmaxDate 为选中第二个月份。

效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值