element monthrange 控制最多只能选一年的时间

该博客介绍了如何使用Element UI的el-date-picker组件实现月范围选择,并通过JavaScript动态设置日期范围的限制,包括minTime和maxTime的计算。着重于pickerOptions中disabledDate和onPick方法的运用,以确保日期选择符合业务需求。

dom

<el-date-picker
   v-model="time"
   type="monthrange"
   value-format="yyyy-MM"
   range-separator=""
   start-placeholder="开始月份"
   end-placeholder="结束月份"
   :picker-options="pickerOptions"
 >
 </el-date-picker>
 data() {
    let minTime = null;
    let maxTime = null;
    return {
      pickerOptions: {
        disabledDate(time) {
          if (minTime) {
            return time.getTime() < minTime || time.getTime() > maxTime;
          }
        },
        onPick(time) {
            // 选择了两个时间放开删除限制
          if (time.maxDate && time.minDate) {
            minTime = null;
            maxTime = null;
          // 如果选择了一个时间
          } else if (!time.maxDate) {
            // 31104000000是一年的时间戳  2592000000是一个月的时间戳
            minTime = time.minDate.getTime() - 31104000000 + 2592000000;
            maxTime = time.minDate.getTime() + 31104000000;
          } else {
            // 放开限制,方便再次选择
            minTime = null;
            maxTime = null;
          }
        }
      }
    };
Vue3 中的 Element UI (el-date-picker) 的月范围择器 `type="monthrange"` 默认允许用户择两个连续的月份,如果你想限制用户只能一年内的日期范围,你需要自定义一些逻辑或者修改组件的行为。 首先,Element UI 提供的这个类型本身并不直接支持这种受限的择,它主要是为了处理跨年择。如果你想要做到这一点,你可以尝试以下几种方案: 1. **前端处理**:在 `value` 变化时,检查新择的月份是否超出了一年范围,并相应地阻止提交或设置回默认值。 ```javascript <template> <el-date-picker v-model="selectedDates" type="monthrange" :picker-options="customPickerOptions" @change="handleDateChange" ></el-date-picker> </template> <script setup> import { ref } from 'vue'; const selectedDates = ref([]); function handleDateChange(value) { if (!isValidDateRange(value)) { // 可能的逻辑:清除择、提示错误等 selectedDates.value = []; } } // 自定义的 pickerOptions const customPickerOptions = { beforeClose: function (picker, value) { if (!isValidDateRange(value)) { picker.clear(); } }, }; function isValidDateRange(range) { const currentYear = new Date().getFullYear(); return range[0].getFullYear() >= currentYear && range[1].getFullYear() <= currentYear; } </script> ``` 2. **后端验证**:如果可能的话,在提交表单之前,将用户择发送到服务器,让服务器检查并返回是否有效。 3. **库扩展**:如果上面的方法不够理想,可以考虑对 Element UI 进行一些定制化的扩展,但这通常需要深入了解其源码并可能导致维护成本增加。 请注意,以上都是示例性的解决方案,实际应用中可能需要根据项目需求做适当的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值