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

  • 默认picker-options 是配置的对象,如果代码中只存在一个开始时间或者一个结束时间,可以直接设置成对象进行配置

  • 我这里的应用场景是在表格中存在多个时间的配置项

    • 使用到了dayjs作为时间判断,也可以自行根据js来实现判断
    • 需要将picker-options 做成函数,应为表格每一行中都存在一个开始和结束时间,需要把每一行的开始和结束时间传递过去进行判断
    • 所以可以将picker-options当作函数,参数传递为对应需要进行处理开始和结束时间,返回值 picker-options 配置的参数
    • selectableRAnge 可以支持到时分秒的判断,例如结束时间的配置,需要拿到开始时间的时分秒,设置为自己时间可选范围的区间
  • 以下是代码部分
    *

    javascript 复制代码
    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}`]
                }
              })()
            }
          },
        }
      },
相关推荐
雾岛听风6917 小时前
JavaScript基础语法速查手册
开发语言·前端·javascript
前端那点事7 小时前
Vue前端SEO优化全攻略(实操落地版,新手也能上手)
前端·vue.js
用户2367829801688 小时前
从零实现 GIF 制作工具:LZW 压缩与 Median Cut 色彩量化
前端·javascript
棉猴8 小时前
Python海龟绘图之绘制文本
javascript·python·html·write·turtle·海龟绘图·输出文本
计算机学姐8 小时前
基于微信小程序的校园失物招领管理系统【uniapp+springboot+vue】
java·vue.js·spring boot·mysql·信息可视化·微信小程序·uni-app
Highcharts.js8 小时前
线形比赛积分增长或竞赛图|Highcharts企业图表代码示列
开发语言·前端·javascript·折线图·highcharts·竞赛图
让学习成为一种生活方式8 小时前
大肠杆菌合成扑热息痛--对乙酰氨基酚--文献精读227
开发语言·前端·javascript
多秋浮沉度华年9 小时前
electron 初始使用记录
javascript·arcgis·electron
fix一个write十个9 小时前
从零搭建音视频通话太痛苦?这个 Vue3 CallKit 让你 5 分钟搞定 1v1 + 群聊通话
前端·vue.js·github
竹林8189 小时前
用 wagmi v2 + WebSocket 硬磕 NFT 上架失败:一个前端开发者踩过的实时状态同步坑
javascript·next.js