el-date-picker picker-options属性中disabledDate设置时间的禁用和启用,并且支持到时分秒的禁用和启用

  • 默认picker-options 是配置的对象,如果代码中只存在一个开始时间或者一个结束时间,可以直接设置成对象进行配置
  • 我这里的应用场景是在表格中存在多个时间的配置项
    • 使用到了dayjs作为时间判断,也可以自行根据js来实现判断
    • 需要将picker-options 做成函数,应为表格每一行中都存在一个开始和结束时间,需要把每一行的开始和结束时间传递过去进行判断
    • 所以可以将picker-options当作函数,参数传递为对应需要进行处理开始和结束时间,返回值 picker-options 配置的参数
    • selectableRAnge 可以支持到时分秒的判断,例如结束时间的配置,需要拿到开始时间的时分秒,设置为自己时间可选范围的区间
  • 以下是代码部分
    • data() {
          return {
            // 结束时间的禁用
            endPickerOptions: function (item) {
              return {
                disabledDate: function (time) {
                  if(!item.startTime) return false
                  // 比较是否为同一天,如果组件中需要选择时分秒,则会出现开始时间和结束时间同一天无法选择的问题,需要加上判断,不需要时分秒可以去掉这行,开始和结束判断一样
                  if(item.startTime && item.endTime && dayjs(item.startTime).format('YYYY-MM-DD') === dayjs(item.endTime).format('YYYY-MM-DD')) {
                    return false
                  }
                  return time.getTime() < item.startTime
                },
                selectableRange: (() => {
                  if(!item.startTime) return [`00:00:00 - 23:59:59`]
                  if(item.startTime) {
                    let date = new Date(item.startTime);
                    let hour = date.getHours();
                    let minute = date.getMinutes();
                    let second = date.getSeconds();
                    // 大于一天的话,时分秒可以随意选择
                    if(item.endTime - item.startTime > 3600 * 24) return [`00:00:00 - 23:59:59`]
                    return [`${hour}:${minute}:${second} - 23:59:59`]
                  }
                })()
              }
            },
            // 开始时间的禁用
            startPickerOptions(item) {
              return {
                disabledDate: function (time) {
                  if(!item.endTime) return false
                  if(item.startTime && item.endTime && dayjs(item.startTime).format('YYYY-MM-DD') === dayjs(item.endTime).format('YYYY-MM-DD')) {
                    return false
                  }
                  return time.getTime() > item.endTime
                },
                selectableRange: (() => {
                  if(!item.endTime) return [`00:00:00 - 23:59:59`]
                  if(item.endTime) {
                    let date = new Date(item.endTime);
                    let hour = date.getHours();
                    let minute = date.getMinutes();
                    let second = date.getSeconds();
                    // 大于一天的话,时分秒可以随意选择
                    if(item.endTime - item.startTime > 3600 * 24) return [`00:00:00 - 23:59:59`]
                    return [`00:00:00 - ${hour}:${minute}:${second}`]
                  }
                })()
              }
            },
          }
        },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值