element两个日期选择器怎样进行联动

element两个日期选择器怎样进行联动

展示效果

在这里插入图片描述

解决方法

<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="80px">
      <el-form-item label="开始时间" prop="startTime">
        <el-date-picker clearable size="small"
          v-model="queryParams.startTime"
          type="date"
          value-format="yyyy-MM-dd"
          placeholder="选择开始时间"
          :picker-options="startNoTime">
        </el-date-picker>
      </el-form-item>
      <el-form-item label="结束时间" prop="endTime">
        <el-date-picker clearable size="small"
                        v-model="queryParams.endTime"
                        type="date"
                        value-format="yyyy-MM-dd"
                        placeholder="选择结束时间"
                        :picker-options="endNoTime">
        </el-date-picker>
      </el-form-item>
</el-form>
data() {
	return {
	  queryParams: {
        pageNum: 1,
        pageSize: 10,
        startTime: null,
        endTime: null,
	  },
	  // 开始时间限制范围
      startNoTime: {
        disabledDate(date) {
          // 可选当天以及当天之前的日期
          return date.getTime() > Date.now()
        }
      },
      // 结束时间限制范围
      endNoTime: {
        disabledDate(date) {
          // 可选当天以及当天之前的日期
          return date.getTime() > Date.now()
        }
      },
	}
},
watch: {
    "queryParams.startTime": {
      handler(val) {
        this.endNoTime = {
          disabledDate(time) {
            const time1 = new Date(val).getTime() - 8.64e7;
            // 结束时间禁止选择当天以后日期并且不能选择开始时间之前的
            return time.getTime() < time1 || time.getTime() > Date.now()
          }
        }
      }
    },
    "queryParams.endTime": {
      handler(val) {
        this.startNoTime = {
          disabledDate(time) {
            const time1 = new Date(val).getTime() - 8.64e7;
            // 结束时间禁止选择当天以后日期并且不能选择开始时间之前的
            return time.getTime() > time1 || time.getTime() > Date.now()
          }
        }
      }
    },
  },
可以使用Vue3中的Composition API来实现一个有联动日期选择器组。 首先,需要引入日期选择器组件: ```html <template> <div> <label>开始日期:</label> <DatePicker v-model="startDate" :disabled-date="disabledStartDate" @change="handleStartDateChange" /> <label>结束日期:</label> <DatePicker v-model="endDate" :disabled-date="disabledEndDate" @change="handleEndDateChange" /> </div> </template> <script> import { ref, watch } from 'vue'; import { DatePicker } from 'element-plus'; export default { components: { DatePicker, }, setup() { const startDate = ref(null); const endDate = ref(null); // 禁止选择开始日期之前的日期 const disabledStartDate = time => { if (endDate.value) { return time.getTime() > endDate.value.getTime(); } }; // 禁止选择结束日期之后的日期 const disabledEndDate = time => { if (startDate.value) { return time.getTime() < startDate.value.getTime(); } }; // 监听开始日期的变化 const handleStartDateChange = val => { endDate.value = null; }; // 监听结束日期的变化 const handleEndDateChange = val => { startDate.value = null; }; // 监听开始日期和结束日期的变化 watch([startDate, endDate], ([newStartDate, newEndDate]) => { if (newStartDate && newEndDate && newStartDate.getTime() > newEndDate.getTime()) { [startDate.value, endDate.value] = [endDate.value, startDate.value]; } }); return { startDate, endDate, disabledStartDate, disabledEndDate, handleStartDateChange, handleEndDateChange, }; }, }; </script> ``` 在这个组件中,我们引入了Element Plus中的DatePicker组件,并使用了Vue3中的Composition API来实现联动效果。 具体来说,我们通过ref函数创建了startDate和endDate两个响应式变量,并在模板中使用v-model指令来绑定它们。 我们还分别实现了disabledStartDate和disabledEndDate两个方法来禁止选择不合法的日期。这里需要注意的是,当选择完开始日期之后,要将结束日期重置为null,以避免选择一个无效的结束日期。 最后,我们使用watch函数来监听startDate和endDate的变化,并在它们发生变化时,交换它们的值,以确保开始日期早于结束日期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值