element-ui日期选择器禁选日期范围

624 阅读1分钟

element-ui日期选择器禁选日期范围

业务场景

要求多选日期并且可选日期为后端返回的日期,其余日期需要禁选。后端返回一个数组,可选的日期都在这个数组中,除了在这个数组中的日期全部禁用。

实现方法

element-ui的日期选择器组件提供了一个picker-options属性:

image.png

image.png

Picker Options中的disabledDate可以用来设置日期的禁用状态,他是一个函数,默认参数为当前的日期(近几年的所有日期):

image.png

disabledDate函数需要返回一个Bollean类型的值,当值为true就把该日期禁选。

我当前是2023年往前是2020年往后至2029年。

拿到日期后,就可以拿这些日期去后端返回的“日期数组”里面去找,如果数组里面没有这个日期就禁选这个日期。

判断一个值是否在数组中可以使用includesindexOf来进行判断。

注意点

后端传的数组的时间需要与disabledDate参数的日期开始时间一致,否则无法判断。

我这里disabledDate参数的日期的开始时间为00:00:00

image.png

new Date('2023-07-11'):生成的日期的开始时间是08:00:00的:

image.png

所以我需要将后端返回的日期的时间改为一样的时间,可以通过Date.prototype.setHours() 设置new Date() 生成的日期的时间为00:00:00Date.prototype.setHours(0)

具体代码

模板:

<template>
    <el-date-picker type="dates"
        v-model="selectedDates"
        :picker-options="pickerOptions"
        placeholder="选择一个或多个日期"
    </el-date-picker>
</template>

js:

<script>
export default {
    name: 'xxx',
    data () {
        return {
              //   选中的日期
              selectedDates: null,
              //   后端返回的可选的日期
              dates: [],
              //   星期配置加载动画
              weekLoading: false,
              //   日期选择器的选项
              pickerOptions: {
                disabledDate: (date) => {
                  return !this.dates.includes(date.getTime())
                }
              }
        }
    },
    methods: {
        getDates () {
              let serverDates = [
                  '2023-07-11', 
                  '2023-07-12', 
                  '2023-07-13', 
                  '2023-07-14', 
                  '2023-07-15', 
                  '2023-07-16'
              ]
              that.dates = serverDates.map(item => {
                return new Date(item).setHours(0)
              })
        }
    }
}
</script>