当前位置: 首页 > news >正文

vue3+elementPlus el-date-picker 自定义禁用状态hook 建立结束时间不能小于开始时间

背景:

elementPlus的el-date-picker中,相较于了element,升级了写法,
如果为每一个开始时间、结束时间设置禁用状态,在全局中会造成代码冗余。
所以在vue3中采用自定义hook的方式,实现代码复用。

1、实现如下效果:

开始时间:今天过后日期不可选,如p1所示;
结束时间:必须大于开始时间,精确到时分秒,如p2所示。

开始时间

结束时间

2、编写hook(useDisabledDate.ts)

export function useDisabledDate() {// 开始时间与结束时间,采用赋值的方式const forDisStartTime = ref()const forDisEndTime = ref()// 不可用的开始时间,如图1所示const disabledStartTime = (data: Date) => {return data.getTime() > new Date().getTime()}// 结束时间--日期const disabledEndTimeDate = (data: Date) => {if (forDisStartTime.value) {const hours = new Date(forDisStartTime.value).getHours(),seconds = new Date(forDisStartTime.value).getSeconds(),minutes = new Date(forDisStartTime.value).getMinutes()if (hours == 0 && minutes == 0 && seconds == 0) return data.getTime() < new Date(forDisStartTime.value).getTime() - 1000else return data.getTime() < new Date(forDisStartTime.value).getTime() - 8.64e7}}
// 结束时间--时const disabledEndTimeHours = () => {const hours = new Date(forDisStartTime.value as Date).getHours(),sY = new Date(forDisStartTime.value).getFullYear(),sM = new Date(forDisStartTime.value).getMonth(),sD = new Date(forDisStartTime.value).getDate(),eY = new Date(forDisEndTime.value).getFullYear(),eM = new Date(forDisEndTime.value).getMonth(),eD = new Date(forDisEndTime.value).getDate()const arrs = []if (sY == eY && sM == eM && sD == eD) {for (let i = 0; i < 24; i++) {if (hours <= i) continuearrs.push(i)}}return arrs}// 结束时间--分const disabledEndTimeMinutes = () => {const minutes = new Date(forDisStartTime.value as Date).getMinutes(),sY = new Date(forDisStartTime.value).getFullYear(),sM = new Date(forDisStartTime.value).getMonth(),sD = new Date(forDisStartTime.value).getDate(),eY = new Date(forDisEndTime.value).getFullYear(),eM = new Date(forDisEndTime.value).getMonth(),eD = new Date(forDisEndTime.value).getDate()const arrs = []if (sY == eY && sM == eM && sD == eD) {for (let i = 0; i < 60; i++) {if (minutes <= i) continuearrs.push(i)}}return arrs}// 结束时间--秒const disabledEndTimeSeconds = () => {const seconds = new Date(forDisStartTime.value).getSeconds(),sY = new Date(forDisStartTime.value).getFullYear(),sM = new Date(forDisStartTime.value).getMonth(),sD = new Date(forDisStartTime.value).getDate(),eY = new Date(forDisEndTime.value).getFullYear(),eM = new Date(forDisEndTime.value).getMonth(),eD = new Date(forDisEndTime.value).getDate()const arrs = []if (sY == eY && sM == eM && sD == eD) {for (let i = 0; i < 60; i++) {if (seconds <= i) continuearrs.push(i)}}return arrs}return {forDisStartTime,forDisEndTime,disabledStartTime,disabledEndTimeDate,disabledEndTimeHours,disabledEndTimeMinutes,disabledEndTimeSeconds}
}

3、在.vue文件中使用该hook

<script setup lang="ts">
// 引入
import { useDisabledDate } from '@/hooks/useDisabledDate'
const formItem = reactive({beginTime: '',endTime: ''
})
// #region disabled-date
const {forDisStartTime,forDisEndTime,disabledStartTime,disabledEndTimeDate,disabledEndTimeHours,disabledEndTimeMinutes,disabledEndTimeSeconds
} = useDisabledDate()
// 赋值开始时间
watch(() => formItem.beginTime,(newTime) => {forDisStartTime.value = newTime},{ immediate: true }
)
// 赋值结束时间
watch(() => formItem.endTime,(newTime) => {forDisEndTime.value = newTime},{ immediate: true }
)
// #endregion
</script>
http://www.hskmm.com/?act=detail&tid=37667

相关文章:

  • [优先队列] P3611 [USACO17JAN] Cow Dance Show S 题解
  • 搜维尔科技将携手Xsens|Haption|Tesollo|Manus亮相IROS 2025国际智能机器人与系统会议
  • 【做题记录】贪心--提高组
  • 如何炫酷地使用集合划分容斥
  • 简单云计算算法--20251023
  • 处理空输入踩的坑
  • latex输入公式
  • 【为美好CTF献上祝福】 New Star 2025 逆向笔记
  • XXL-JOB(5)
  • 蛋白表达原理与关键要素解析
  • Ramanujan Master Theorem
  • 顾雅南的声音美化课堂
  • C++案例 自定义数组
  • 【周记】2025.10.13~2025.10.19
  • 背包
  • 10.23《程序员修炼之道 从小工到专家》第二章 注重实效的途径 - GENGAR
  • 玩转单片机之智能车小露——LED闪烁实战
  • ord() 函数
  • 2025.10.23总结 - A
  • 大模型 | VLA 初识及在自动驾驶场景中的应用
  • ExPRT.AI如何预测下一个将被利用的漏洞
  • Redis中的分布式锁之SETNX底层实现
  • 攻击模拟
  • 2025家纺摄影公司推荐,南通鼎尚摄影专注产品视觉呈现
  • AI元人文构想的跨学科研究:技术实现与人文影响分析——对自由与责任的再框架化(DeepSeek基于Ai元人文系列文章研究)
  • Python---简易编程解决工作问题
  • 日总结 16
  • 比赛题解 总结
  • DM8 安装包 for linux_x86
  • MPK(Mirage Persistent Kernel)源码笔记(1)--- 基础原理