vue3+element-plus el-date-picker日期、年份筛选设置本周、本月、近3年等快捷筛选
一、页面代码:
<template>
<!-- 日期范围筛选框 -->
<el-date-picker
v-model="dateRange"
value-format="YYYY-MM-DD"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:shortcuts="shortcuts"
placement="bottom-start"
:editable="false"
:disabled-date="disabledDate"
@change="changeDate"
class="date-select"
/>
<!-- 年份范围筛选框 -->
<el-date-picker
v-model="yearRange"
value-format="YYYY"
type="yearrange"
range-separator="至"
start-placeholder="开始年份"
end-placeholder="结束年份"
:shortcuts="shortcuts1"
placement="bottom-start"
:editable="false"
:disabled-date="disabledYear"
@change="changeYear"
@clear="changeYear1"
class="date-select"
ref="yearPicker"
/>
</template>
<script setup lang="ts">
import common from '@/utils/common'
const startDate = ref<any>() // 开始时间
const endDate = ref<any>() //结束时间
const dateRange = ref<any>([]) // 日期范围值
const yearPicker = ref() // 年份筛选框ref
const yearRange = ref<any>([]) // 年份范围值
// 日期快捷选项
const shortcuts = [
{
text: '今日',
value: () => {
const end = new Date()
const start = new Date()
return [start, end]
}
},
{
text: '本周',
value: () => {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - start.getDay() + 1)
start.setHours(0, 0, 0, 0) // 将时间设置为当天时间的0点
return [start, end]
}
},
{
text: '本月',
value: () => {
const end = new Date()
const start = new Date(end.getFullYear(), end.getMonth(), 1) // 这个月1号
return [start, end]
}
}
]
// 年份快捷选项
const shortcuts1 = [
{
text: '今年',
value: [new Date(), new Date()]
},
{
text: '近3年',
value: () => {
const end = new Date()
const start = new Date(
new Date().setFullYear(new Date().getFullYear() - 2) // 设置开始时间为当前时间前2年(包含当前年)
)
return [start, end]
}
},
{
text: '近5年',
value: () => {
const end = new Date()
const start = new Date(
new Date().setFullYear(new Date().getFullYear() - 4) // 设置开始时间为当前时间前4年(包含当前年)
)
return [start, end]
}
}
]
// 初始化设置默认7天日期
const initTime = () => {
startDate.value = common.formatDate(
new Date(new Date().getTime() - 6 * 24 * 60 * 60 * 1000),
'yyyy-MM-dd'
)
endDate.value = common.formatDate(new Date(), 'yyyy-MM-dd')
dateRange.value = [startDate.value, endDate.value]
}
// 控制当前日期之后不能选
const disabledDate = (time: any) => {
return time.getTime() > new Date().getTime()
}
// 改变日期
const changeDate = (value: any) => {
if (value) {
dateRange.value = toRaw(value)
startDate.value = dateRange.value[0]
endDate.value = dateRange.value[1]
} else {
dateRange.value = toRaw(value)
startDate.value = ''
endDate.value = ''
}
}
// 控制指定年份不能选(可选2019年到当前年)
const disabledYear = (time: any) => {
const year = time.getFullYear()
return year < 2019 || year > new Date().getFullYear()
}
// 改变年份
const changeYear = (value: any) => {
if (value) {
if (yearPicker.value) {
yearPicker.value.blur()
}
yearRange.value = toRaw(value)
}
}
// 清空时间
const changeYear1 = () => {
yearRange.value = []
}
onMounted(() => {
initTime()
}
</script>
<style lang="less" scoped>
:deep(.el-date-editor) {
width: 240px;
height: 32px;
border-radius: 4px;
font-size: 12px !important;
}
</style>
二、common文件方法:
formatDate: function (date: any, format: any) {
let v = ''
if (typeof date === 'string' || typeof date !== 'object') {
return
}
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
const weekDay = date.getDay()
const ms = date.getMilliseconds()
let weekDayString = ''
if (weekDay === 1) {
weekDayString = '星期一'
} else if (weekDay === 2) {
weekDayString = '星期二'
} else if (weekDay === 3) {
weekDayString = '星期三'
} else if (weekDay === 4) {
weekDayString = '星期四'
} else if (weekDay === 5) {
weekDayString = '星期五'
} else if (weekDay === 6) {
weekDayString = '星期六'
} else if (weekDay === 0) {
weekDayString = '星期日'
}
v = format
// Year
v = v.replace(/yyyy/g, year)
v = v.replace(/YYYY/g, year)
v = v.replace(/yy/g, (year + '').substring(2, 4))
v = v.replace(/YY/g, (year + '').substring(2, 4))
// Month
const monthStr = '0' + month
v = v.replace(/MM/g, monthStr.substring(monthStr.length - 2))
// Day
const dayStr = '0' + day
v = v.replace(/dd/g, dayStr.substring(dayStr.length - 2))
// hour
const hourStr = '0' + hour
v = v.replace(/HH/g, hourStr.substring(hourStr.length - 2))
v = v.replace(/hh/g, hourStr.substring(hourStr.length - 2))
// minute
const minuteStr = '0' + minute
v = v.replace(/mm/g, minuteStr.substring(minuteStr.length - 2))
// Millisecond
v = v.replace(/sss/g, ms)
v = v.replace(/SSS/g, ms)
// second
const secondStr = '0' + second
v = v.replace(/ss/g, secondStr.substring(secondStr.length - 2))
v = v.replace(/SS/g, secondStr.substring(secondStr.length - 2))
// weekDay
v = v.replace(/E/g, weekDayString)
return v
}
相关文章:
vue3+element-plus el-date-picker日期、年份筛选设置本周、本月、近3年等快捷筛选
一、页面代码: <template> <!-- 日期范围筛选框 --> <el-date-picker v-model"dateRange" value-format"YYYY-MM-DD" type"daterange" range-separator"至" start-placeholder"开始日期" end-…...
Vue 技术文档
一、引言 Vue 是一款用于构建用户界面的渐进式 JavaScript 框架,具有易上手、高性能、灵活等特点,能够帮助开发者快速开发出响应式的单页面应用。本技术文档旨在全面介绍 Vue 的相关技术知识,为开发人员提供参考和指导。 二、环境搭建 2.1…...

3 分钟学会使用 Puppeteer 将 HTML 转 PDF
需求背景 1、网页存档与文档管理 需要将网页内容长期保存或归档为PDF,确保内容不被篡改或丢失,适用于法律文档、合同、技术文档等场景。PDF格式便于存储和检索。 2、电子报告生成 动态生成的HTML内容(如数据分析报告、仪表盘)需导出为PDF供下载或打印。PDF保留排版和样…...

速通《Sklearn 与 TensorFlow 机器学习实用指南》
1.机器学习概览 1.1 什么是机器学习 机器学习是通过编程让计算机从数据中进行学习的科学。 1.2 为什么使用机器学习? 使用机器学习,是为了让计算机通过数据自动学习规律并进行预测或决策,无需显式编程规则。 1.3 机器学习系统的类型 1.…...

Ubuntu 下搭建ESP32 ESP-IDF开发环境,并在windows下用VSCode通过SSH登录Ubuntu开发ESP32应用
Ubuntu 下搭建ESP32 ESP-IDF开发环境,网上操作指南很多,本来一直也没有想过要写这么一篇文章。因为我其实不太习惯在linux下开发应用,平时更习惯windows的软件操作,只是因为windows下开发ESP32的应用编译时太慢,让人受…...
[FreeRTOS- 野火] - - - 临界段
一、介绍 临界段最常出现在对一些全局变量进行操作的场景。 1.1 临界段的定义 临界段是指在多任务系统中,一段需要独占访问共享资源的代码。在这段代码执行期间,必须确保没有任何其他任务或中断可以访问或修改相同的共享资源。 临界段的主要目的是防…...
【洛谷P9303题解】AC代码- [CCC 2023 J5] CCC Word Hunt
在CCC单词搜索游戏中,单词可以隐藏在字母网格中,以直线或直角的方式排列。以下是对代码的详细注释和解题思路的总结: 传送门: https://www.luogu.com.cn/problem/P9303 代码注释 #include <iostream> #include <vecto…...

NodeMediaEdge接入NodeMediaServer
如何使用NME接入NMS 简介 NodeMediaEdge是一款部署在监控摄像机网络前端中,拉取Onvif或者rtsp/rtmp/http视频流并使用rtmp/kmp推送到公网流媒体服务器的工具。 通过云平台协议注册到NodeMediaServer后,可以同NodeMediaServer结合使用。使用图形化的管理…...

【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
在Java开发的世界里,选择一个强大的集成开发环境(IDE)是迈向高效编程的第一步。而IntelliJ IDEA无疑是Java开发者中最受欢迎的选择之一。它以其强大的功能、智能的代码辅助和简洁的用户界面,帮助无数开发者快速构建和部署Java项目…...
WebSocket指数避让与重连机制
1. 引言 在现代Web应用中,WebSocket技术已成为实现实时通信的重要手段。与传统的HTTP请求-响应模式不同,WebSocket建立持久连接,使服务器能够主动向客户端推送数据,极大地提升了Web应用的实时性和交互体验。然而,在实…...
DrissionPage WebPage模式:动态交互与高效爬取的完美平衡术
在Python自动化领域,开发者常面临两难选择:Selenium虽能处理动态页面但效率低下,Requests库轻量高效却难以应对JavaScript渲染。DrissionPage的WebPage模式创新性地将浏览器控制与数据包收发融为一体,为复杂网页采集场景提供了全新…...
adb查看、设置cpu相关信息
查内存 adb shell dumpsys meminfo查CPU top -m 10打开 system_monitor adb shell am start -n eu.chainfire.perfmon/.LaunchActivity设置CPU的核心数 在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心,如果是双核,就是cpu0和cpu1,…...

PHP7+MySQL5.6 查立得源码授权系统DNS验证版
# PHP7MySQL5.6 查立得源码授权系统DNS验证版 ## 一、系统概述 本系统是一个基于PHP7和MySQL5.6的源码授权系统,使用DNS TXT记录验证域名所有权,实现对软件源码的授权保护。 系统支持多版本管理,可以灵活配置不同版本的价格和下载路径&#…...
68元开发板,开启智能硬件新篇章——明远智睿SSD2351深度解析
在智能硬件开发领域,开发板的选择至关重要。它不仅关系到项目的开发效率,还直接影响到最终产品的性能与稳定性。而今天,我要为大家介绍的这款明远智睿SSD2351开发板,仅需68元,却拥有远超同价位产品的性能与功能&#x…...

【QQ音乐】sign签名| data参数加密 | AES-GCM加密 | webpack (下)
1.目标 网址:https://y.qq.com/n/ryqq/toplist/26 我们知道了 sign P(n.data),其中n.data是明文的请求参数 2.webpack生成data加密参数 那么 L(n.data)就是密文的请求参数。返回一个Promise {<pending>},所以L(n.data) 是一个异步函数…...
基于netmiko模块实现支持SSH or Telnet的多线程多厂商网络设备自动化巡检脚本
自动化巡检的需求 巡检工作通常包含大量的重复性操作,而这些重复性特征意味着其背后存在明确的规则和逻辑。这种规律性为实现自动化提供了理想的前提条件。 自动化工具 我们这里采用python作为自动化的执行工具。 过程 安装 netmiko pip install netmiko 模块的使…...
不用 apt 的解决方案(从源码手动安装 PortAudio)
第一步:下载并编译 PortAudio 源码 cd /tmp wget http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz tar -xvzf pa_stable_v190600_20161030.tgz cd portaudio# 使用 cmake 构建(推荐): mkdir build &&…...
【前端】JS引擎 v.s. 正则表达式引擎
JS引擎 v.s. 正则表达式引擎 它们的转义符都是\ 经过JS引擎会进行一次转义 经过正则表达式会进行一次转义在一次转义中\\\\\的转义过程: 第一个 \ (转义符) 会“吃掉”第二个 \,结果是得到一个字面量的 \。 第三个 \ (转义符) 会“吃掉”第四个 \&#x…...
开发体育平台,怎么接入最合适的数据接口
一、核心需求匹配:明确平台功能定位 1.实时数据驱动型平台 需重点关注毫秒级延迟与多端同步能力。选择支持 WebSocket 协议的接口,可实现比分推送延迟 < 0.5秒。例如某电竞直播平台通过接入支持边缘计算的接口,将团战数据同步速度提升至…...

3D虚拟工厂
1、在线体验 3D虚拟工厂在线体验 vue3three.jsblender 2、功能介绍 1. 全屏显示功能2. 镜头重置功能3. 企业概况信息模块4. 标签隐藏/显示功能5. 模型自动旋转功能6. 办公楼分层分解展示7. 白天/夜晚 切换8. 场景资源预加载功能9. 晴天/雨天/雾天10. 无人机视角模式11. 行人…...

http传输协议的加密
创建目录存放签证 [rootserver100 ~]# mkdir /etc/nginx/certs [rootserver100 ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/nginx/certs/timinglee.org.key -x509 -days 365 -out /etc/nginx/certs/timinglee.org.crt ..................................…...

半导体晶圆制造洁净厂房的微振控制方案-江苏泊苏系统集成有限公司
半导体晶圆制造洁净厂房的微振控制方案-江苏泊苏系统集成有限公司 微振控制在现行国家标准《电子工业洁净厂房设计规范》GB50472中有关微振控制的规定主要有:洁净厂房的微振控制设施的设计分阶段进行,应包括设计、施工和投产等各阶段的微振测试、厂房建…...
嵌入式(1):STM32 GPIO与AFIO深度解析:从原理到高阶应用实战
写在前面:本文基于STM32官方参考手册与实际项目经验,系统总结GPIO与AFIO的核心技术要点。每行代码都经过实际验证,可直接用于项目开发。 一、GPIO:芯片与世界的桥梁 1.1 GPIO的8种工作模式详解 工作模式等效电路典型应用场景配置…...
Netty 实战篇:Netty RPC 框架整合 Spring Boot,迈向工程化
本文将基于前面构建的 RPC 能力,尝试将其与 Spring Boot 整合,借助注解、自动扫描、依赖注入等机制,打造“开箱即用”的 Netty RPC 框架,提升开发效率与工程规范。 一、为什么要整合 Spring Boot? 手动 new 实例、写注…...
QML视图组件ListView、TableView、GridView介绍
1 MVD模型 Model:模型,包含数据及其结构。View:视图,用于显示数据。Delegate:代理,规定数据在视图中的显示方式。2 ListView 以列表形式展示数据。2.1 属性 model:设置或获取列表视图的数据模型delegate:定义了列表中每一项的外观和行为currentIndex:获取或设置当前选…...

常见压缩算法性能和压缩率对比 LZ4 LZO ZSTD SNAPPY
网传压缩算法对比表 算法压缩率压缩速度解压速度支持流式压缩适用场景LZ4低极快极快是实时数据压缩、日志压缩、内存缓存等Zstandard高快快是文件压缩、网络传输、数据库备份等Brotli很高中等快是静态资源压缩(HTML、CSS、JS)等LZO低极快快是嵌入式系统…...

Spring Boot 应用中实现配置文件敏感信息加密解密方案
Spring Boot 应用中实现配置文件敏感信息加密解密方案 背景与挑战 🚩一、设计目标 🎯二、整体启动流程 🔄三、方案实现详解 ⚙️3.1 配置解密入口:EnvironmentPostProcessor3.2 通用解密工具类:EncryptionTool 四、快速…...

【TTS】基于GRPO的流匹配文本到语音改进:F5R-TTS
论文地址:https://arxiv.org/abs/2504.02407v3 摘要 我们提出了F5R-TTS,这是一种新颖的文本到语音(TTS)系统,它将群体相对策略优化(GRPO)集成到基于流匹配的架构中。 通过将流匹配TTS的确定性输出重新表述为概率高斯分布,我们的方…...

动态规划-152.乘积最大子数组-力扣(LeetCode)
一、题目解析 根据示例nums数组中存在负数,下面分析时需注意 二、算法原理 1、状态表示 此时f[i]表示:以i位置为结尾的所有子数组中的最大乘积,但是由于nums中存在负数,所以还需要g[i]表示:以i位置为结尾的所有子数组…...

1-1 初探Dart编程语言
Dart 是 Google 最初开发的一种开源编程语言,适用于客户端与服务端开发。它配套提供 Dart SDK,其中包含 Dart 编译器、Dart 虚拟机(Dart VM)以及一个名为 dart2js 的工具,可将 Dart 脚本转换为 JavaScript,…...