为elementui的el-date-picker时间选择器添加快捷选项

devtools/2024/9/23 0:57:53/

1、效果图

2、实现方法

直接在elementui的时间选择器上修改,添加shorcuts选项,但是样式要自己修改。

有几个注意点:

1)如图我是选中后有显示背景颜色的,也就意味着要给选中的选项添加类名,elementui没有这个功能,需要我们自己实现。

2)选中时间后,给对应的快捷选项也选中。比如我在时间选择器中选择了近7天,那么对应快捷选项也要选中。

3、代码

shortCuts:

 shortcuts: [{text: "今日",onClick(picker) {const [start, end] = getToday();picker.$emit("pick", [start, end]);},},{text: "昨日",onClick(picker) {const [start, end] = getYesterday();picker.$emit("pick", [start, end]);},},{text: "本周",onClick(picker) {const [start, end] = getWeek();picker.$emit("pick", [start, end]);},},{text: "上周",onClick(picker) {const [start, end] = getLastWeek();picker.$emit("pick", [start, end]);},},{text: "本月",onClick(picker) {const [start, end] = getMonth();picker.$emit("pick", [start, end]);},},{text: "上月",onClick(picker) {const [start, end] = getLastMonth();picker.$emit("pick", [start, end]);},},{text: "近7天",onClick(picker) {const [start, end] = getPassedSeven();picker.$emit("pick", [start, end]);},},{text: "近14天",onClick(picker) {const [start, end] = getPassedFourteen();picker.$emit("pick", [start, end]);},},{text: "近30天",onClick(picker) {const [start, end] = getPassedThirty();picker.$emit("pick", [start, end]);},},{text: "近60天",onClick(picker) {const [start, end] = getPassedSixty();picker.$emit("pick", [start, end]);},},{text: "近90天",onClick(picker) {const [start, end] = getPassedNinety();picker.$emit("pick", [start, end]);},},]

获取各个时间的函数:

export function getToday() {const start = new Date();start.setHours(0, 0, 0, 0);const end = new Date();end.setHours(23, 59, 59, 0);return [start, end];
}export function getYesterday() {const start = new Date();start.setDate(start.getDate() - 1);start.setHours(0, 0, 0, 0); const end = new Date();end.setDate(end.getDate() - 1);end.setHours(23, 59, 59, 0); return [start, end];
}export function getWeek() {const start = new Date();const end = new Date();end.setHours(23, 59, 59, 0);const dayOfWeek = start.getDay() || 7;start.setDate(start.getDate() - dayOfWeek + 1);start.setHours(0, 0, 0, 0);return [start, end];
}export function getLastWeek() {const start = new Date();start.setDate(start.getDate() - 6 - (start.getDay() || 7));start.setHours(0, 0, 0, 0);const end = new Date(start);end.setDate(start.getDate() + 6); // 获取本周的最后一天end.setHours(23, 59, 59, 0);return [start, end];
}export function getMonth() {const start = new Date();start.setDate(1); start.setHours(0, 0, 0, 0);const end = new Date(); end.setHours(23, 59, 59, 0); return [start, end];
}export function getPassedSeven() {const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 6);start.setHours(0, 0, 0, 0); const end = new Date();end.setHours(23, 59, 59, 0); return [start, end];
}export function getPassedFourteen() {const start = new Date();start.setHours(0, 0, 0, 0);const end = new Date();end.setHours(23, 59, 59, 0);start.setTime(start.getTime() - 3600 * 1000 * 24 * 13);return [start, end];
}export function getPassedThirty() {const end = new Date();end.setHours(23, 59, 59, 0);const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 29);start.setHours(0, 0, 0, 0); return [start, end];
}export function getPassedSixty() {const end = new Date();end.setHours(23, 59, 59, 0);const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 59);start.setHours(0, 0, 0, 0);return [start, end];
}export function getPassedNinety() {const end = new Date();end.setHours(23, 59, 59, 0); const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 89);start.setHours(0, 0, 0, 0);return [start, end];
}export function getLastMonth() {const today = new Date();const lastMonth = new Date(today.getFullYear(),today.getMonth() - 1,1);const firstDay = new Date(lastMonth.getFullYear(),lastMonth.getMonth(),1);const lastDay = new Date(lastMonth.getFullYear(),lastMonth.getMonth() + 1,0);firstDay.setHours(0, 0, 0, 0);lastDay.setHours(23, 59, 59, 0);return [firstDay, lastDay]
}

设置active的类名:

export function setShortCutsClass(text) {const data = document.getElementsByClassName('el-picker-panel__shortcut');for (let i of data) {if (i.innerText === '今日') {i.style.background = '#edf4fb';i.style.color = '#606266'}if (i.innerText === text) {i.classList.add('el-picker-panel__shortcut-active');} else {i.classList.remove('el-picker-panel__shortcut-active');}}
}

在时间选择器的change事件中选中时间后把对应的快捷选项设置为active:

setTimeShortClass(val) {Object.keys(this.timeMap).forEach((name) => {if (Date.parse(val[0]) === Date.parse(this.timeMap[name]()[0]) &&Date.parse(val[1]) === Date.parse(this.timeMap[name]()[1])) {setShortCutsClass(name);}});
},timeMap: {今日: getToday,昨日: getYesterday,本周: getWeek,上周: getLastWeek,本月: getMonth,上月: getLastMonth,近7天: getPassedSeven,近14天: getPassedFourteen,近30天: getPassedThirty,近60天: getPassedSixty,近90天: getPassedNinety,}


http://www.ppmy.cn/devtools/109918.html

相关文章

500以内蓝牙耳机最良心推荐,四款高人气机型深度测评!

随着无线技术的不断进步和消费者对便携音乐体验的日益追求,蓝牙耳机已成为市场上极为热门的个人电子设备之一,面对琳琅满目的产品选择,如何找到既符合预算又具有高性价比的蓝牙耳机成了许多用户的难题,今天我盘点了500以内蓝牙耳机…

创建系统镜像:打包你的Linux环境

如何 将当前Linux 环境 打包成为一个 系统镜像虚拟光盘 在信息技术领域,有时候我们可能需要将当前的Linux系统环境打包成一个虚拟镜像光盘,以便在其他机器上快速部署或进行备份。本文将介绍如何使用Bash脚本自动化这个过程,将你的系统环境打…

Vue入门学习笔记-从入门到模版语法

前言 建议: 建议学习HTML5CSS3JavaScript之后在学VueHTML和JavaScript需要着重学习,如果还学了jQuery更好Vue本身是基于JavaScript开发的框架,完全兼容JavaScript语法本学习笔记着重记录Vue语法和使用的相关特性,目的是为了后端开…

【MySQL】MySQL表的增删改查(进阶篇)——之约束条件

前言: 🌟🌟本期讲解关于MySQL表增删查改进阶篇,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/cF0Mf 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 目录 …

ISO 21434与网络安全管理系统(CSMS)的协同作用

ISO/SAE 21434与CSMS(网络安全管理系统)之间的关系主要体现在以下几个方面: 提供指导框架:ISO/SAE 21434《道路车辆—网络安全工程》是一项国际标准,它为汽车行业提供了实施网络安全管理系统的国际认可的方法和最佳实…

VS配置PCL环境-获取文件目录下所有.lib文件名称

1、打开CMD,切换目录到lib文件所在目录 例如 D:\PCL\3rdParty\Boost\lib 命令提示符输入: C:\Users\admin>D: D:\>cd D:\PCL\3rdParty\Boost\lib 2、提取当前目录所有.lib文件名到0.txt (此处用Boost举例) 输入&#x…

2024最新!Facebook手机版和网页版改名教程!

Facebook作为全球最大的社交平台之一,允许用户自定义名字和昵称。在Facebook更新姓名可以帮助您更好的展现账号形象。本文将为您提供详细的步骤指导,帮助您在手机APP和网页版上轻松完成Facebook改名操作。 Facebook手机版改名 打开Facebook APP并登录账号…

Linux基础指令(三)详解

more补充1(echo和>)重定向补充2>>(追加重定向)补充3补充4制造大文件more 命令的使用 less(自由查找)head (查看头部的内容)tail(查看尾部的内容)查找中间部分方法方法一(思路)方法二 wc(统计文本行数)date(显示时间)时间戳cal(日历)find(查找文件)grep(读取文件中带有…