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

news/2025/10/23 22:07:51/文章来源:https://www.cnblogs.com/lxjshuju/p/19161757

背景:

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.mzph.cn/news/944720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

66页实验题

import tensorflow as tf from tensorflow.keras.datasets import cifar10 1. 加载并预处理 CIFAR-10 数据集 (x_train, y_train), (x_test, y_test) = cifar10.load_data() 像素值归一化(0-255 → 0-1) x_train = x…

简单云计算算法--20251023

简单云计算算法--2025/10/23 No.1 LCR 158. 库存管理 II 仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。 示例 1: 输入:st…

处理空输入踩的坑

处理一个外部传入的用户输入的时候,一开始只想着处理null,用"?.let{}"的模式处理。结果发现结果异常。 打断点发现传入值不是空,而是"" 由此发现kotlin处理空string的两个函数: isEmpty() Th…

【做题记录】贪心--提高组

A. Monotone Subsequence 有点 Ad-hoc。 第 \(i\) 次查询,直接询问当前未被删去的所有点。如果回答 \(\ge n+1\),那么直接输出;否则将回答的这些点标一个级别 \(i\)。最后一次询问之后还剩下的标为 \(n+1\)。根据鸽…

latex输入公式

输入不换行公式:点击查看代码 \begin{equation}\label{eq:2}u_{exact} = \sin(x) - \frac{1}{4} \sin(4x) + \frac{1}{8} \sin(8x) - \frac{1}{16} \sin(16x) + \frac{1}{24} \sin(24x) - \frac{1}{48} \sin(48x) + …

【为美好CTF献上祝福】 New Star 2025 逆向笔记

Re Week1 Strange Base 乍一看是个正常的 base64 加密点进 base64 函数一看,发现 base64 的表被换了。

XXL-JOB(5)

XXL-JOB(5) 表结构分析 xxl_job_lock:任务调度锁表; xxl_job_group:执行器信息表,维护任务执行器信息; xxl_job_info:调度扩展信息表:用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行…

蛋白表达原理与关键要素解析

一、蛋白表达的基本原理 蛋白表达(Protein Expression) 是指细胞根据遗传信息合成蛋白质的过程。在自然状态下,DNA 上的基因通过 转录(Transcription) 产生信使 RNA(mRNA),随后经过 翻译(Translation) 在核糖…

顾雅南的声音美化课堂

下载地址 https://8ma.co/res/L7AZ255U ◀.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0px } .zsleft { floa…

Ramanujan Master Theorem

:::note[前置知识] 这篇文章需要用到复数以及一些变换。如果你不会复数,可以参考这篇文章。 如果你不会变换,可以参考这篇文章。::: 位移算符 我们定义:\(D\equiv \frac{\mathrm d}{\mathrm dx}\),考虑 \[e^D=\sum…

【周记】2025.10.13~2025.10.19

2025.10.13~2025.10.19 周记不是太好的一周,随便说说两句吧。 ① 这一周非常非常的累...... 我们是周二、周四晚上(还有周六一整天哈)会上信息学竞赛,搞得我疲惫不堪。我们先是学了矩阵乘法,然后又打了一场模拟赛…

C++案例 自定义数组

#include <string> #include <iostream> #include <algorithm> #include <initializer_list> using namespace std;template<class T> class myArray {// 类模板 友元 重载 外部类实现/…

20251023周四日记

20251023周四日记今天心情好多了,项目终于快完事了。 今日: 1.早上买个早点肉夹馍来组里吃,来时正好碰见师姐收签字。更新了财政系统,搜了个nb的VLM综述。和博、耀对接好明天找他们去。 2.中午不老饿的,呆到两点去…

10.23《程序员修炼之道 从小工到专家》第二章 注重实效的途径 - GENGAR

软件开发需遵循多类核心原则,以提升效率、降低风险并保障代码质量。 DRY 原则(Don’t Repeat Yourself)要求系统中每项信息有单一权威表示,可避免重复带来的维护难题。重复主要分四类:强加的重复可通过方法规避,…

玩转单片机之智能车小露——LED闪烁实战

用单片机点亮一颗LED非常简单,让一颗LED闪烁也很简单,比如写一段下面这样的程序: while(1){ // 无限循环LED1 = 0; // 点亮LEDdelay_ms(300); // 延时300msLED1 = 1; // 熄灭LEDdelay_ms(300); // 延…

ord() 函数

ord() 函数以一个字符(长度为 1 的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。 ord() 函数的语法: ord(c)…

2025.10.23总结 - A

今天上了数据结构还有体育,加油

树状数组求逆序对

统计对于每个i<j,求a[i]>a[j]的数量 在每一次更新(update)树状数组时,以元素的值作为树状数组的索引,更新的值为 +1,代表个数。 在每一次获取(query)逆序对数时,存在于树状数组中的元素的索引值都比当前…

大模型 | VLA 初识及在自动驾驶场景中的应用

一、VLA 简介 1.1 VLA 定义 VLA (Vision Language Action)是一种多模态机器学习模型,结合了视觉、语言和动作三种能力,旨在实现从感知输入直接映射到控制动作的完整闭环能力。VLA 强调一体化多模态端到端架构,非感…