element-ui 通过按钮式触发日期选择器

element ui

  • 写在前面
  • 1. 自定义的日期时间组件CustomDatePicker.vue
  • 2. 页面效果
  • 总结
  • 写在最后

写在前面

需求:elementui中日期时间选择器,目前只能通过点击input输入框触发日期选择器,我希望能通过其他方式触发日期选择器同时把input输入框去掉,如点击按钮

1. 自定义的日期时间组件CustomDatePicker.vue

<template><div class="date-input"><el-inputv-model="startDateStr":placeholder="$t('task.taskStartTime')"type="text"clearableclass="date-input-field"@input="validateDate"/><span class="line"></span><el-inputv-model="endDateStr":placeholder="$t('task.taskFinishTime')"type="text"clearableclass="date-input-field"@blur="validateDate"/><div class="icon-container" @click="toggleDatePicker"><i class="el-icon-date" style="font-size: 24px;"></i></div><el-date-pickerstyle="position: absolute;z-index: -100;top: 15px;left: -178px;transform: scale(0.1);"size="mini"v-model="selectedDateRange":editable="false"type="datetimerange"@change="onDateChange"ref="timePick"value-format="yyyy-MM-dd HH:mm:ss"/></div>
</template><script>export default {props: {// 父组件传过来的值  customTimePicker: {  type: Array,  default: () => {return [new Date(), new Date()]}  },  },data() {return {selectedDateRange: [],startDateStr: "",endDateStr: "",error: ''};},created(){console.log('====> customTimePicker', this.customTimePicker);},watch: {customTimePicker: {handler(newVal) {console.log('customTimePicker==>newVal', newVal);if (newVal && newVal.length === 2) {this.selectedDateRange = [...newVal];this.startDateStr = newVal[0];this.endDateStr = newVal[1];}},deep: true},selectedDateRange: {handler(newVal, oldVal) {if (newVal && newVal.length === 2) {if(oldVal && newVal.toString() === oldVal.toString()) {return;} else {this.startDateStr = newVal[0].toString().replace('T', ' ');this.endDateStr = newVal[1].toString().replace('T', ' ');this.$emit('input', newVal);}}},deep: true},startDateStr(newVal, oldVal) {if(oldVal && newVal.toString() === oldVal.toString()) {return;} else {this.selectedDateRange[0] = newVal.toString().replace('T', ' ');this.$emit('input', this.selectedDateRange);}},endDateStr(newVal, oldVal) {if(oldVal && newVal.toString() === oldVal.toString()) {return;} else {this.selectedDateRange[1] = newVal.toString().replace('T', ' ');this.$emit('input', this.selectedDateRange);}}},methods: {validateDate() {const value = this.startDateStr;if (value.trim() === '') {this.error = '';this.$emit('updateError', this.error);return;}// 验证格式const regex = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/;const match = value.match(regex);if (!match) {this.$message.error('Invalid date format. Please use yyyy-MM-dd HH:mm:ss.');//this.error = 'Correct format is yyyy-MM-dd HH:mm:ss';// this.$emit('updateError', this.error);return;}// 解析日期const [year, month, day, hours, minutes, seconds] = match.slice(1).map(Number);// 检查年份是否在合理范围内if (year < 1900 || year > 2100) {this.$message.error('Invalid year. Please enter a year between 1900 and 2100.');// this.error = 'please input valid year';// this.$emit('updateError', this.error);return;}// 检查月份是否在1到12之间if (month < 1 || month > 12) {this.$message.error('Invalid month. Please enter a month between 1 and 12.');// this.error = 'please input valid month';// this.$emit('updateError', this.error);return;}// 检查日期是否在1到当月的最大天数之间const daysInMonth = new Date(year, month, 0).getDate();if (day < 1 || day > daysInMonth) {this.$message.error('Invalid day. Please enter a day between 1 and the maximum number of days in the selected month.');// this.error = 'please input valid day';// this.$emit('updateError', this.error);return;}// 检查小时是否在0到23之间if (hours < 0 || hours > 23) {this.$message.error('Invalid hour. Please enter an hour between 0 and 23.');// this.error = 'please input valid hour';// this.$emit('updateError', this.error);return;}// 检查分钟是否在0到59之间if (minutes < 0 || minutes > 59) {this.$message.error('Invalid minute. Please enter a minute between 0 and 59.');// this.error = 'please input valid minute';// this.$emit('updateError', this.error);return;}// 检查秒是否在0到59之间if (seconds < 0 || seconds > 59) {this.$message.error('Invalid second. Please enter a second between 0 and 59.');// this.error = 'please input valid second';// this.$emit('updateError', this.error);return;}// 创建日期对象const date = new Date(year, month - 1, day, hours, minutes, seconds);// 检查日期是否有效if (isNaN(date.getTime())) {this.$message.error('Invalid date. Please enter a valid date.');// this.error = 'please input valid date';// this.$emit('updateError', this.error);return;}this.error = '';this.$emit('updateError', this.error);},toggleDatePicker() {//触发日期框展开//  document//     	.querySelector(".time-date-picker")//     	.querySelector("input")//     	.focus();this.$refs.timePick.focus();},onDateChange(date) {this.startDateStr = date[0];this.endDateStr = date[1];this.$set(this, 'selectedDateRange', [this.startDateStr, this.endDateStr])this.$emit('input', this.selectedDateRange);},},
};
</script><style scoped>
.date-input {display: flex;align-items: center;position: relative; /* 为绝对定位的日期选择器提供相对定位 */
}.date-input-field {width: 18%;/* flex-grow: 1; /* 让输入框占满剩余空间 *//* margin: 0; /* 删除外边距 */z-index: 10;
}.icon-container {display: flex;align-items: center;justify-content: center;/*width: 30px; /* 正方形框的宽度 *//*height: 30px; /* 正方形框的高度 *//*border: 1px solid #ccc; /* 正方形框的边框 */cursor: pointer;/*background-color: #f9f9f9; /* 可以选择性添加背景色 */background: transparent;color: #008ed0;/*border: 1px solid #008ed0;
}.icon {font-size: 16px; /* 调整图标大小 */font-weight: bold; /* 粗体字 */margin: 0; /* 删除图标的外边距 */
}
/*
.timePickCSS {position: absolute;top: 100%;left: 0;z-index: 1000;
}
*/
.line {display: inline-block;width: 10px;height: 2px;background-color: #005987;
}
</style>

2. 页面效果

在这里插入图片描述

总结

写这篇博客主要的目的是让自己更深刻,有回忆点,然后就是分享自己的做法;有需要的根据自己的需求进行修改

写在最后

如果此文对您有所帮助,请帅戈靓女们务必不要吝啬你们的Zan,感谢!!不懂的可以在评论区评论,有空会及时回复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550381.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【IoT-NTN】系统消息SIB32信令分析

3GPP卫星通信发展迅速&#xff0c; TS36.331 R17中新增SIB32携带星历信息&#xff0c;本文对SIB32的信令内容进行了分析。 SystemInformationBlockType32 概述 SystemInformationBlockType32 是用于提供预测非连续覆盖的卫星辅助信息的系统信息块。这个信息块仅在非地面网络&…

初学者如何快速入门Python(详细攻略),从0到精通,不信你学不会!

近年来&#xff0c;人工智能领域的飞速发展极大地改变了各个行业的面貌。当前最新的技术动态&#xff0c;如大型语言模型和深度学习技术的发展&#xff0c;展示了深度学习和机器学习技术的强大潜力&#xff0c;成为推动创新和提升竞争力的关键。特别是PyTorch&#xff0c;凭借其…

刚面试完的前端面试题

今天晚上参加了一场长达40多分钟的技术面。我觉得面试官非常专业&#xff0c;问的问题也都是很棒的&#xff01;自己很多知识都需要学习。所以我决定回想并记录下来。回答不对的地方欢迎大家指正&#xff01; 我自己在小本本上回忆出来的大概就是26道题。后期我会持续更新我学习…

【测试-BUG篇】软件测试的BUG知识你了解多少呢?

文章目录 1. 软件测试的生命周期2. BUG3. BUG的生命周期4. 与开发人员起争执怎么办 1. 软件测试的生命周期 &#x1f34e;软件测试 贯穿整个软件的生命周期&#xff1b; &#x1f34e;软件测试的生命周期是指测试流程&#xff1b; ①需求分析 用户角度&#xff1a;软件需求是…

资源管理5步法:优化你的项目管理

作为项目经理&#xff0c;负责交付项目是一项复杂且要求严格的任务。在缺乏必要的专业知识、工具、设备以及资金支持的情况下&#xff0c;成功完成项目几乎是不可能的。 因此&#xff0c;项目资源的规划与分配是项目启动前至关重要的环节。若未能妥善规划&#xff0c;将可能导…

测试卡(1)灰卡

#灵感# 灰卡为什么是18%&#xff1f;文章分为三部分&#xff0c;前部分&#xff0c;解释灰卡的定义&#xff0c;后部分是 市场买的18%灰卡的说明书&#xff0c;其中穿插了网络上搜到的灰卡使用案例。 目录 18% 中性灰卡应用说明 1&#xff09; 曝光水平 例子&#xff1a;用灰…

有些硬盘录像机接入视频汇聚平台EasyCVR后通道不显示/显示不全,该如何处理?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能&#xff0c;还支持多种主流标准协议&#xff0c;如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T 1400协…

初识Linux以及Linux的基本命令

千呼万唤始出来&#xff0c;Linux系列的文章从今天起开始不定期更新&#xff0c;闲话少叙&#xff0c;我们直接进入正题 初识Linux 这一部分我不打算给大家讲Linux的发展史啥的&#xff0c;直接从系统方面开始介绍 首先&#xff0c;我们平时用win10或win11所看到的桌面以及各…

Pycharm 本地搭建 stable-diffusion-webui

一、下载工程源码 Github官方连接 https://github.com/AUTOMATIC1111/stable-diffusion-webui 二、Pycharm打开工程 1、设置环境 文件-设置-项目-Python解析器-添加解释器-添加本地解释器 Conda环境-创造新环境-Python版本3.10 注意一定要选择Python3.10版本&#xff0c;否…

985官宣:19名本科生,获国自然项目!

9月24日&#xff0c;据复旦大学教务处消息&#xff0c;国家自然科学基金委公布了2024年国家自然科学基金青年学生基础研究项目&#xff08;本科生&#xff09;立项情况&#xff0c;复旦大学共有19名基础学科专业本科生获得国家自然科学基金委资助。 此前&#xff0c;据武汉大学…

浮点数的这些特性你了解吗

问题1:下面的代码&#xff0c;输出结果是什么&#xff1a; public class CaclTest{public void test1(){float f 1.0F / 0.0F;System.out.println("f:" f)}public static void main(String[] args){CaclTest ct new CaclTest();ct.test1();}} A. 运行抛出异常:j…

vue3监听子组件的生命周期

1.Vue3使用vue&#xff0c;vue2使用hook template:<compG vue:mounted"doSomething"></compG>script://监听子组件生命周期let doSomething (e: any) > {console.log("没有啊11", e);}; 2.打印结果

誉天Linux云计算课程学什么?为什么保障就业?

一个IT工程师相当于干了哪些职业? 其中置顶回答生动而形象地描绘道&#xff1a; 一个IT工程师宛如一个超级多面手&#xff0c;相当于——加班狂程序员测试工程师实施工程师网络工程师电工装卸工搬运工超人。 此中酸甜苦辣咸&#xff0c;相信很多小伙伴们都深有体会。除了典…

macOS 开发环境配置与应用开发

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【LeetCode】动态规划—931. 下降路径最小和(附完整Python/C++代码)

动态规划—931. 下降路径最小和 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化4.1 空间复杂度优化 5. 小总结 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 在算法的学习…

MWORKS.Sysplorer 2024b重磅推出同元基础库

一、引言 MWORKS.Sysplorer 是多领域建模与仿真平台&#xff0c;集成了Modelica标准库。该库由Modelica协会开发&#xff0c;是一款开源的通用基础模型库&#xff0c;支持机电、流体、控制等多个专业领域的建模与仿真。随着Modelica标准库的不断发展与更新&#xff0c;目前最新…

【设计模式-中介者模式】

定义 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为设计模式&#xff0c;通过引入一个中介者对象&#xff0c;来降低多个对象之间的直接交互&#xff0c;从而减少它们之间的耦合度。中介者充当不同对象之间的协调者&#xff0c;使得对象之间的通信变得简单且…

双十一不被割韭菜!2024双十一总结五款好物分享!

每年双十一购物节来临之际&#xff0c;随着心仪商品缓缓填满购物车&#xff0c;那份对即将收获的期待与内心的喜悦&#xff0c;自然而然地溢于言表。在这个优惠纷呈的购物盛宴中&#xff0c;寻找那些既符合个人需求又具备高品质的宝贝&#xff0c;成为了一项既充满乐趣又考验眼…

大语言模型在构建UNSPSC 分类数据中的应用

UNSPSC 是联合国标准产品和服务代码。UNSPSC由联合国开发计划署&#xff08;UNDP&#xff09;和Dun & Bradstreet公司&#xff08;D & B&#xff09;于1998年联合制定&#xff0c;自2003年以来一直由GS1 US管理。GS1 US 将在 2024 年底前将 UNSPSC 的管理权移交给 UNDP…

胤娲科技:揭秘AI记忆宫殿—LLM如何用动画玩转乔丹打篮球的秘密

当AI遇上“乔丹打篮球”&#xff0c;真相竟然藏在动画里&#xff1f; 想象一下&#xff0c;你向一位AI大模型轻声询问&#xff1a;“迈克尔・乔丹从事的体育运动是……”几乎在瞬间&#xff0c;它就自信满满地回答&#xff1a;“篮球&#xff01;” 这一刻&#xff0c;你是否曾…