elementui日期时间选择框自定义组件

1.需求场景

业务中需要,日期选择框方便客户对日期的选择(比如近5天,本周,本月,本年等等),并按小时展示。

2.组件代码MyDateTimeChange.vue

<template><el-date-pickerv-model="internalValue":default-time="['00:00:00', '23:59:59']"size="small":style="{width:width,height:height}"type="datetimerange"range-separator="-":start-placeholder="$t('datepicker.startDate')":end-placeholder="$t('datepicker.endDate')":picker-options="pickerOptions":value-format="customFormat":format="format":clearable="clearable"@change="dateChanged"></el-date-picker>
</template><script>export default {name: "MyDateChange",props: {width: {type: String,default: ''},height:{type:String,default:'41px'},customFormat:{type:String,default: 'yyyy-MM-dd'},value:{type:Array,},format:{type:String,default: 'yyyy-MM-dd'},clearable: {type: Boolean,default: false},},data() {const _this = thisreturn {pickerOptions: {shortcuts: [{text: this.$t('datepicker.today'),onClick(picker) {const start = _this.getFirstTime(new Date());const end = _this.getEndTime(new Date());//start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);picker.$emit('pick', [start, end]);}},{text: this.$t('datepicker.thisWeek'),onClick: (picker) => {const start = _this.getFirstTime(this.getStartOfWeek());const end = _this.getEndTime(new Date());//start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);picker.$emit('pick', [start, end]);}}, {text: this.$t('datepicker.thisMonth'),onClick: (picker) => {const start = _this.getFirstTime(this.getStartOfMonth());const end = _this.getEndTime(new Date());//start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);picker.$emit('pick', [start, end]);}},{text: this.$t('datepicker.thisYear'),onClick: (picker) => {const start = _this.getFirstTime(this.getFirstDayOfYear());const end = _this.getEndTime(new Date());//start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);picker.$emit('pick', [start, end]);}},{text: this.$t('datepicker.recentSeven'),onClick(picker) {const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);_this.getFirstTime(start);const end = _this.getEndTime(new Date());picker.$emit('pick', [start, end]);}},{text: this.$t('datepicker.recentFifteen'),onClick(picker) {const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 15);_this.getFirstTime(start);const end = _this.getEndTime(new Date());picker.$emit('pick', [start, end]);}},{text: this.$t('datepicker.recentThirty'),onClick(picker) {const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);_this.getFirstTime(start);const end = _this.getEndTime(new Date());picker.$emit('pick', [start, end]);}}]},dateRange: '',submitButtonLoading: false,internalValue:this.value};},watch:{value: {handler(val) {this.$set(this,"internalValue",val);return val}}},methods: {getFirstTime(day){day.setHours(0);day.setMinutes(0);day.setSeconds(0);day.setMilliseconds(0);return day;},getEndTime(day){day.setHours(23);day.setMinutes(59);day.setSeconds(59);day.setMilliseconds(999);return day;},getStartOfWeek() {let today = new Date();let day = today.getDay(); // 获取今天是星期几 (0 是周日,1 是周一,以此类推)let startOfWeek = new Date(today); // 复制今天的日期// 将日期设置为本周的第一天 (星期日)startOfWeek.setDate(today.getDate() - day);return startOfWeek;},getStartOfMonth() {const today = new Date();const year = today.getFullYear();const month = today.getMonth(); // 获取当前月份,注意月份是从 0 开始的(0 表示一月)// 设置日期为本月的第一天const firstDay = new Date(year, month, 1);return firstDay;},getFirstDayOfYear() {const today = new Date();const year = today.getFullYear();// 设置日期为今年的第一天const firstDayOfYear = new Date(year, 0, 1); // 月份从0开始,0表示一月return firstDayOfYear;},dateChanged(newDate) {this.internalValue = newDate; // 更新内部数据this.$emit('input', newDate); // 触发父组件的更新}},};</script>
<style lang="css">
/*去掉了选择日期时间页面的分和秒*/
.el-time-spinner__wrapper{width: 100% !important;
}
.el-scrollbar:nth-of-type(2){display: none;
}
/*去掉了选择日期时间页面的清空按钮*/
.el-picker-panel__footer .el-picker-panel__link-btn.el-button--text  {display: none;
}
</style>

3.使用

import MyDateTimeChange from "@/components/xxx/MyDateTimeChange";......
<el-form-item :label="$t('OpenapiLogStatistics.time')"><my-date-time-change v-model="dateRange" format="yyyy-MM-dd HH" custom-format="yyyy-MM-dd HH:mm:ss" width="340px" height="32px"></my-date-time-change></el-form-item>
......data() {return {dateRange: [getNowFormatDate("-")+' 00:00:00',getNowFormatDate("-")+' 23:59:59'],}
}......
// 添加日期范围
export function addDateRange(params, dateRange, propName) {let search = params;search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};dateRange = Array.isArray(dateRange) ? dateRange : [];if (typeof (propName) === 'undefined') {search.params['beginTime'] = dateRange[0];search.params['endTime'] = dateRange[1];} else {search.params['begin' + propName] = dateRange[0];search.params['end' + propName] = dateRange[1];}return search;
}/*** 默认生成日期格式 yyyyMMdd* @param seperator1 分隔符* @returns 返回日期字符串*/
export function getNowFormatDate(seperator1) {seperator1 = seperator1||''let date = new Date();let year = date.getFullYear();let month = date.getMonth() + 1;let strDate = date.getDate();if (month >= 1 && month <= 9) {month = "0" + month;}if (strDate >= 0 && strDate <= 9) {strDate = "0" + strDate;}return year + seperator1 + month + seperator1 + strDate;
}......methods:{getQueryParams() {if (this.dateRange) {return this.addDateRange(this.queryParams, this.dateRange)}this.queryParams.params=[];return this.queryParams;},}

4.效果

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

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

相关文章

鸿蒙开发之ArkUI组件常用组件图片和文本

ArkUI即方舟开发框架是HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界面开发。 开发文档地址 &…

国赛大纲解读

1. 第一部分,是针对5G基础知识的掌握,第二部分是人工智能基本算法的掌握,就是人工智能的应用,用5G+人工智能(AI算法)进行网络优化的问题,要有网络优化的基础知识,比如说:某个区域的覆盖问题,覆盖特别差,但有数据,覆盖电频,srp值这些数据给你,根据数据来判断是…

设计模式——行为型——策略模式Strategy

Q&#xff1a;策略模式的特点 A&#xff1a; 具体算法从具体的业务方法中独立出来策略模式是同行为的不同实现 Q&#xff1a;什么时候使用策略模式 A&#xff1a;多个if-else使用策略模式 收费对象类 public class CashContext {private CashStrategy cashStrategy;public…

【C++入门】 初见,单推,与C++的第一次约会

关注小庄 顿顿解馋(ᕑᗢᓫ∗)˒ 引言&#xff1a;本篇博客我们开始与C的第一次约会&#xff0c;C是兼容c的&#xff0c;本篇博客我们将了解到C关键字有哪些&#xff0c;C命名空间&#xff0c;C输入与输出和缺省参数的内容&#xff0c;请放心食用 ~ 文章目录 一 &#x1f3e0; C…

文献阅读工具-->Adobe pdf + 有道词典

Adobe pdf 有道词典 最近一直在考虑用什么文献阅读工具&#xff0c;痛点无非就是想用翻译功能&#xff0c;Adobe pdf的添加注释已经很好用了&#xff0c;使用了zotero&#xff0c;感觉不行&#xff08;不能直接对原文件修改&#xff0c;有副本&#xff0c;麻烦&#xff09;。…

excel匹配替换脱敏身份证等数据

假如excel sheet1中有脱敏的身份证号码和姓名&#xff0c;如&#xff1a; sheet2中有未脱敏的数据数据 做法如下&#xff1a; 1、在sheet2的C列用公式 LEFT(A2,6)&REPT("*",8)&RIGHT(A2,4) 做出脱敏数据&#xff0c;用来与sheet1的脱敏数据匹配 2、在sheet…

AWS基础网络产品及协同架构-Networking

简介 一个完整的AWS网络架构图&#xff0c;包含了如下能力&#xff1a; Users (用户): 表示使用AWS服务的用户或系统。 SaaS (软件即服务): 表示在AWS上运行的软件服务&#xff0c;如企业微信可能作为SaaS提供。 example.com?: 这可能是一个示例域名&#xff0c;用于展示如何…

快速上手Spring Cloud 十:Spring Cloud与微前端

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

分享多种mfc100u.dll丢失的解决方法(一键修复DLL丢失的方法)

在使用电脑过程中&#xff0c;我们经常会遇到一些陌生的DLL文件&#xff0c;例如mfc100u.dll。这些DLL文件是动态链接库&#xff08;Dynamic Link Libraries&#xff09;的缩写&#xff0c;它们包含了可以被多个程序共享的代码和数据。今天&#xff0c;我们将深入探讨mfc100u.d…

深度学习:基于PyTorch的模型解释工具Captum

深度学习&#xff1a;基于PyTorch的模型解释工具Captum 引言简介示例安装解释模型的预测解释文本模型情绪分析问答 解释视觉模型特征分析特征消融鲁棒性 解释多模态模型 引言 当我们训练神经网络模型时&#xff0c;我们通常只关注模型的整体性能&#xff0c;例如准确率或损失函…

Pillow教程06:将图片中出现的黄色和红色,改成绿色

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

浅析扩散模型与图像生成【应用篇】(十三)——GLIDE

13. GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models 该文提出一种基于文本引导的扩散模型用于图像的生成和编辑&#xff0c;可以根据给定的文字描述来生成或编辑图像。在ADM中我们曾介绍了一种基于分类器引导的图像生成模型&a…

鸿蒙HarmonyOS应用开发之使用Node-API实现跨语言交互开发流程

使用Node-API实现跨语言交互&#xff0c;首先需要按照Node-API的机制实现模块的注册和加载等相关动作。 ArkTS/JS侧&#xff1a;实现C方法的调用。代码比较简单&#xff0c;import一个对应的so库后&#xff0c;即可调用C方法。 Native侧&#xff1a;.cpp文件&#xff0c;实现模…

gin基础学习笔记--Log

1. 日志文件 package mainimport ("io""os""github.com/gin-gonic/gin" )func main() {gin.DisableConsoleColor()// logging to a filef, _ : os.Create("gin.log")gin.DefaultWriter io.MultiWriter(f)// 如果需要同时将日志写入文…

【快捷部署】008_Docker(25.0.5)

&#x1f4e3;【快捷部署系列】008期信息 编号选型版本操作系统部署形式部署模式复检时间008Docker25.0.5Ubuntu 20.04apt-2024-03-27 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff1a;cxyt…

机器人是怎么计时的(通用定时器 - 时基单元)

目录 一&#xff0c;引言 二&#xff0c;机器人的“大脑” 三&#xff0c;时基单元介绍 1&#xff0c;定时器框图 2&#xff0c;时基单元 &#xff08;1&#xff09;预分频器 &#xff08;2&#xff09;CNT计数器 &#xff08;3&#xff09;自动重装载寄存器 四&#…

如何在jupyter使用新建的虚拟环境以及改变jupyter启动文件路径。

对于刚刚使用jupyter的新手来说&#xff0c;经常不知道如何在其中使用新建的虚拟环境内核&#xff0c;同时&#xff0c;对于默认安装的jupyter&#xff0c;使用jupyter notebook命令启动 jupyter 以后往往默认是C盘的启动路径&#xff0c;如下图所示&#xff0c;这篇教程将告诉…

深入在线文档系统的 MarkDown/Word/PDF 导出能力设计

深入在线文档系统的 MarkDown/Word/PDF 导出能力设计 当我们实现在线文档的系统时&#xff0c;通常需要考虑到文档的导出能力&#xff0c;特别是对于私有化部署的复杂ToB产品来说&#xff0c;文档的私有化版本交付能力就显得非常重要&#xff0c;此外成熟的在线文档系统还有很…

中伟视界:智能识别!电动车戴头盔系统,保障您的安全出行

电动车AI头盔识别系统是一种利用人工智能技术提高道路安全的创新应用。该系统的核心目的是确保电动车驾驶者遵守交通安全规则&#xff0c;特别是佩戴头盔这一基本安全措施。通过自动识别驾驶者是否佩戴头盔&#xff0c;这一系统能够鼓励更为安全的骑行行为&#xff0c;减少交通…

Android客户端自动化UI自动化airtest从0到1搭建macos+demo演示

iOS客户端自动化UI自动化airtest从0到1搭建macosdemo演示-CSDN博客 一、基础环境 1. 安装jdk 选择jdk8 如果下载高版本 可能不匹配会失败 下载.dmg文件 苹果电脑 &#xff5c; macOS &#xff5c; jdk1.8 &#xff5c; 环境变量配置_jdk1.8 mac-CSDN博客 Java Downloads …