本文介绍: 当在表格里面使用起始日期时,我们需要根据截止日期来对开始日期选择范围限制,根据开始日期对截止日期做选择范围限制,这就需要获取当前开始、截止日期对象才能判断,但是官方提供的disableddate只是一个属性,没办法传参,故导致无法实现对应时间范围限制。在datepicker上面使用element提供的事件focus进行传参,从而当鼠标聚焦日期组件就能获取当前起始和结束日期,然后再在disableddate事件里面去用获取到的时间对日期组件进行选取范围限制。根据以上思路废话不多说,直接代码

1、问题描述

官方文档提供的属性disableddate通过获取当前对象做判断,返回布尔值true或者false实现日期禁用。当在表格里面使用起始日期时,我们需要根据截止日期来对开始日期做选择范围限制,根据开始日期对截止日期做选择范围限制,这就需要获取当前开始、截止日期对象才能判断,但是官方提供的disableddate只是一个属性,没办法传参,故导致无法实现对应时间范围限制

2、解决思路

datepicker上面使用element提供的事件focus进行传参,从而当鼠标聚焦日期组件就能获取到当前起始和结束日期,然后再在disableddate事件里面去用获取到的时间对日期组件进行选取范围限制

3、解决方法

根据以上思路废话不多说,直接代码

// 标签部分
<el-date-picker type="date" placeholder="请选择起始有效期" v-model="scope.row.validityPeriodStart"
 style="width: 100%;" :disabled-date="disabledDateFun" value-format="YYYY-MM-DD"
 @focus="getDate(scope.row.validityPeriodStart, scope.row.validityPeriodEnd)">
</el-date-picker&gt;

<el-date-picker type="date" placeholder="输入截至有效期" v-model="scope.row.validityPeriodEnd"
style="width: 100%;" value-format="YYYY-MM-DD"
@focus="getDate(scope.row.validityPeriodStart, scope.row.validityPeriodEnd)"
:disabled-date="disabledDateFuns"&gt;
</el-date-picker&gt;
// js部分(以vue3 script setup + ts项目为例
<script lang="ts" setup&gt;
// 设置一个对象存储起始、结束日期
let obj: any = reactive({
  date1: '',
  date2: ''
})
// 获取起始时间
const getDate = (date1: any, date2: any) => {
  obj.date1 = date1
  obj.date2 = date2
}

// 根据获取到的截止日期,设置起始日期选择范围
const disabledDateFun = (time: Record<string, any>): boolean => {
  if (time.getTime() > new Date(obj.date2).getTime()) {
    return true;
  } else {
    return false;
  }
}
// 根据获取到的起始日期,设置截止日期选择范围
const disabledDateFuns = (time: Record<string, any>): boolean => {
  if (time.getTime() < new Date(obj.date1).getTime()) {
    return true;
  } else {
    return false;
  }
}
</script>

4、实现效果

在这里插入图片描述
在这里插入图片描述

原文地址:https://blog.csdn.net/bingyue0126/article/details/130289674

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34916.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注