针对 el-date picker pickerOptions 快捷选项的超级方法

提供快捷的配置,支持原子组合,高级用法支持用户自定义配置项
demo

import { generateShortCuts } from './date-shortcuts.js'
...
pickerOptions: {shortcuts: generateShortCuts({type: 'day'})
}
...

date-shortcuts 文件

import moment from 'moment'
// 日期快捷配置
export const dateConfig = {day: [{text: '今天',value: 'currentDay',diff: 0},{text: '昨天',value: 'lastDay',diff: 'lastDay'},{text: '近3天',value: 'threeDay',diff: 3},{text: '近7天',value: 'sevenDay',diff: 7},{text: '近15天',value: 'fifteenDay',diff: 15},{text: '近30天',value: 'thirtyDay',diff: 30},{text: '近60天',value: 'sixtyDay',diff: 60},{text: '近90天',value: 'ninetyDay',diff: 90}],week: [{text: '本周',value: 'currentWeek',diff: 0},{text: '上周',value: 'lastWeek',diff: 1},{text: '上上周',value: 'beforeLastWeek',diff: 2}],month: [{text: '当月',value: 'currentMonth',diff: 0},{text: '上月',value: 'lastMonth',diff: 'lastMonth'},{text: '近3月',value: 'beforeThreeMonth',diff: 'beforeThreeMonth'},{text: '一月',value: 'oneMonth',diff: 1},{text: '二月',value: 'twoMonth',diff: 2},{text: '三月',value: 'threeMonth',diff: 3},{text: '四月',value: 'fourMonth',diff: 4},{text: '五月',value: 'fiveMonth',diff: 5},{text: '六月',value: 'sixMonth',diff: 6},{text: '七月',value: 'sevenMonth',diff: 7},{text: '八月',value: 'eightMonth',diff: 8},{text: '九月',value: 'nineMonth',diff: 9},{text: '十月',value: 'tenMonth',diff: 10},{text: '十一月',value: 'elevenMonth',diff: 11},{text: '十二月',value: 'twelveMonth',diff: 12}],quarter: [{text: '本季度',value: 'currentQuarter',diff: 0},{text: '上季度',value: 'lastQuarter',diff: 'lastQuarter'},{text: '第一季度',value: 'oneQuarter',diff: 1},{text: '第二季度',value: 'twoQuarter',diff: 2},{text: '第三季度',value: 'threeQuarter',diff: 3},{text: '第四季度',value: 'fourQuarter',diff: 4}],year: [{text: '今年',value: 'currentYear',diff: 0},{text: '近半年',value: 'halfYear',diff: 0.5},{text: '近1年',value: 'oneYear',diff: 1},{text: '近2年',value: 'twoYear',diff: 2},{text: '近3年',value: 'threeYear',diff: 3}],defaultDay: [ // 默认天配置{text: '今天',value: 'currentDay',diff: 0},{text: '昨天',value: 'lastDay',diff: 'lastDay'},{text: '本周',value: 'currentWeek',diff: 0},{text: '上周',value: 'lastWeek',diff: 1},{text: '当月',value: 'currentMonth',diff: 0},{text: '上月',value: 'lastMonth',diff: 'lastMonth'},{text: '近30天',value: 'thirtyDay',diff: 30},{text: '近半年',value: 'halfYear',diff: 0.5}],defaultMonth: [ // 默认月配置{text: '近半年',value: 'halfYear',diff: 0.5},{text: '近3月',value: 'beforeThreeMonth',diff: 'beforeThreeMonth'},{text: '上月',value: 'lastMonth',diff: 'lastMonth'},{text: '当月',value: 'currentMonth',diff: 0}]
}// y,d 转大写
export const transFormat = (fmt) => {return fmt.replace(/y/g, 'Y').replace(/d/g, 'D')
}
// picker 点击事件调用方法
export const onClickPicker = (params) => {let { picker, option, format } = paramspicker.visible = truelet fmt = transFormat(format)let s = moment()let e = moment()let { value, diff } = optionif (value.includes('Day')) {if (typeof diff === 'number') {s = diffDay(diff)} else {if (diff === 'lastDay') {s = moment().subtract(1, 'day')e = moment().subtract(1, 'day')}}} else if (value.includes('Week')) {if (diff) {const weekRange = diffWeek(diff)s = weekRange[0]e = weekRange[1]} else {s = moment().startOf('week')}} else if (value.includes('Month')) {if (diff) {if (typeof diff === 'number') {const monthRange = diffMonth(diff)s = monthRange[0]e = monthRange[1]} else {if (diff === 'lastMonth') {s = moment().subtract(1, 'month').startOf('month')e = moment().subtract(1, 'month').endOf('month')} else if (diff === 'beforeThreeMonth') {s = moment().subtract(3, 'month').startOf('month')} else if (diff === 'checkMonth') {return option.onClick()}}} else {s = moment().startOf('month')}} else if (value.includes('Quarter')) {const currentQuarter = moment().quarter()if (diff) {if (typeof diff === 'number') {const quarterRange = diffQuarter(diff)s = quarterRange[0]e = quarterRange[1]} else {if (diff === 'lastQuarter') {s = moment().quarter(currentQuarter - 1).startOf('quarter')e = moment().quarter(currentQuarter - 1).endOf('quarter')}}} else {s = moment().quarter(currentQuarter).startOf('quarter')}} else if (value.includes('Year')) {s = diffYear(diff)}let start = s.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).format(fmt)let end = e.set({ hour: 23, minute: 59, second: 59, millisecond: 59 }).format(fmt)picker.$emit('pick', [start, end])
}// 此刻点击
export const onClickCurrentPicker = (picker, format) => {const currentTime = moment().format(format)picker.$emit('pick', [currentTime, currentTime])
}
// 计算天方法
export const diffDay = (diff) => {return diff ? moment().subtract(diff, 'day') : moment().startOf('day')
}
// 计算周方法
export const diffWeek = (diff) => {return [moment().subtract(diff, 'weeks').startOf('week'), moment().subtract(diff, 'weeks').endOf('week')]
}
// 计算月方法
export const diffMonth = (diff) => {return [moment().month(diff - 1).startOf('month'), moment().month(diff - 1).endOf('month')]
}
// 计算季度
export const diffQuarter = (diff) => {return [moment().quarter(diff).startOf('quarter'), moment().quarter(diff).endOf('quarter')]
}
// 计算年方法
export const diffYear = (diff) => {return diff ? moment().subtract(diff, 'years') : moment().startOf('year')
}
/*** 生成日期快捷配置* @param {*} 对象包含以下参数* @type: String 非必填(默认 defaultDay): defaultDay, defaultMonth, day, week, month, quarter, year 可以自由组合,以 - 连接,如:day-month;* @includes: Array 非必填(默认[]): 展示那些快捷方式,不填展示类型映射的所有快捷方式* @excludes: Array 非必填(默认[]): 排除那些快捷方式* @custom: Array 非必填(默认[]): 自定义,格式[{text: 'hello', onClick: function}]* @format:String 非必填(默认YYYY-MM-DD HH:mm:ss):格式化* @showCurrent: Boolean 非必填(默认 true):控制“此刻”显示*/
export const generateShortCuts = (params) => {let shortcuts = []let { type = 'defaultDay', showCurrent = true, format = 'YYYY-MM-DD HH:mm:ss' } = paramstry {shortcuts = getPreConfig(params)if (showCurrent) {shortcuts.push({text: '此刻',onClick: (picker) => onClickCurrentPicker(picker, format)})}if (type.includes('defaultDay')) {shortcuts.push({text: '选择月',onClick: (picker) => {picker.visible = truepicker.shortcuts = [{text: '返回',onClick: (picker) => {picker.visible = truepicker.shortcuts = generateShortCuts(params)let shortcutElements = document.querySelectorAll('.el-picker-panel__shortcut')shortcutElements.forEach(element => {element.style.lineHeight = '28px' // 设置行高为 28px,恢复行高})}}].concat(getPreConfig({ type: 'month', excludes: ['currentMonth', 'lastMonth', 'beforeThreeMonth'] }))let shortcutElements = document.querySelectorAll('.el-picker-panel__shortcut')shortcutElements.forEach(element => {element.style.lineHeight = '26px' // 设置行高为 26px,避免"十二月"被遮盖})}})}return shortcuts} catch (e) {console.warn(`generateShortCuts catch ${e}`)return shortcuts}
}// 计算配置
export const getPreConfig = (params) => {let { type = 'defaultDay', includes = [], excludes = [], custom = [], format = 'YYYY-MM-DD HH:mm:ss' } = params || {}let config = []let shortcuts = []let sortConfigs = []let types = type.split('-')types.forEach(type => {if (dateConfig[type]) {config = config.concat(dateConfig[type])} else {console.warn(`${type} not exit for dateConfig`)}})if (excludes.length) config = config.filter(item => !excludes.includes(item.value))if (includes.length) {includes.forEach(item => {let target = config.find(shortItem => shortItem.value === item)if (target) sortConfigs.push(target)})} else {sortConfigs = config}sortConfigs.forEach(item => {shortcuts.push({text: item.text,onClick: (picker) => onClickPicker({ picker, option: item, format })})})return shortcuts.concat(custom)
}

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

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

相关文章

13_Linux开机流程:以Red Hat Enterprise Linux 7(RHEL 7)为例

系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客 文章目录 启动级别的设置启动流程详解RHEL7开机启动顺序 在Red Hat Enterprise Linux 7(RHEL 7)中,系统的启动流程和启动级别的管理方式与旧版本有所不同。本文将详细介绍…

智慧楼宇平台,构筑未来智慧城市的基石

随着城市化进程的加速,城市面临着前所未有的挑战。人口密度的增加、资源的紧张、环境的恶化以及对高效能源管理的需求,都在推动着我们寻找更加智能、可持续的城市解决方案。智慧楼宇作为智慧城市建设的重要组成部分,正逐渐成为推动城市可持续…

MATLAB电化学特性评估石墨和锂电

🎯要点 模拟对比石墨电池的放电电压曲线与实验数据定性差异。对比双箔、多相多孔电极理论和锂电有限体积模型实现。通过孔隙电极理论模型了解粗粒平均质量和电荷传输以及孔隙率的表征意义。锂电中锂离子正向和逆向反应速率与驱动力的指数以及电解质和电极表面的锂浓…

【Linux 从基础到进阶】高负载系统的优化与维护

高负载系统的优化与维护 在处理高负载系统时,优化与维护是确保系统稳定性、性能和可扩展性的关键因素。高负载系统通常涉及大量的并发请求、数据处理和资源消耗。为了避免性能瓶颈和服务中断,系统管理员必须从硬件资源、操作系统设置、应用程序优化等多…

word下宏命令添加右键菜单调用大语言模型

word开发者模式下,直接选visual basic,把代码粘贴进去,CrateSelectedTextWithAI()函数下把apikey换成你自己的密钥,我这个密钥不可用。这里调用的是月之暗面的模型(有一定免费额度),其他模型的没…

Docker 部署 EMQX 一分钟极速部署

部署 EMQX ( Docker ) [Step 1] : 拉取 EMQX 镜像 docker pull emqx/emqx:latest[Step 2] : 创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器 # 创建目录 mkdir -p /data/emqx/{etc,data,log}# 创建容器 docker run -d --name emqx -p 1883:1883 -p 1808…

【贪心算法】(第十篇)

目录 加油站(medium) 题目解析 讲解算法原理 编写代码 单调递增的数字(medium) 题目解析 讲解算法原理 编写代码 加油站(medium) 题目解析 1.题目链接:. - 力扣(LeetCode&a…

「Qt Widget中文示例指南」如何实现半透明背景?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文将为大家展示如…

《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优

1. 题记 有关Linux关键内核参数的调整,我前面的调优文章其实就有涉及到,只是比较零散,本篇集中深入介绍Linux常用关键内核参数及其调优,Linux调优80%以上都涉及到内核的这些参数的调整。 2. 文件系统相关参数 fs.file-max 参数…

Excel 对数据进行脱敏

身份证号脱敏:LEFT(A2,6)&REPT("*",6)&RIGHT(A2,6) 手机号脱敏:LEFT(B2,3)&REPT("*",5)&RIGHT(B2,3) 姓名脱敏:LEFT(C2,1)&REPT("*",1)&RIGHT(C2,1) 参考: excel匹配替换…

STM32F103C8T6 IO 操作

1.开启相关时钟 在 STM32 微控制器中,开启 GPIO 端口的时钟是确保 IO 口可以正常工作的第一步。 查找 RCC 寄存器使能时钟 在 STM32 中,时钟控制的寄存器通常位于 RCC (Reset and Clock Control) 模块中。不同的 STM32 系列(如 STM32F1、STM…

【Flutter】Dart:异步

在现代应用开发中,异步编程是不可或缺的部分,尤其是在开发用户界面、网络请求、文件操作等涉及长时间执行的操作时,异步能避免阻塞主线程,从而提升应用的响应速度和用户体验。在 Dart 中,异步编程主要依靠 Future 和 S…

【单元测试】深入解剖单元测试的思维逻辑

目录 一、前言二、准备环境三、 常用的mock语句3.1 模拟指定类的对象实例,用于模拟依赖对象(类成员)3.2 定义被测试对象3.3 模拟枚举类型/静态方法3.4 模拟依赖方法3.5 模拟构造方法3.6 验证方法调用次数3.7 验证返回值3.8 验证异常对象 四、…

10. 异常处理器

一、通过 注解 注册异常处理器 <?php namespace App\Exception\Handler;use App\Exception\FooException; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use Swow\Psr7\Message\ResponsePlusInterface; use Throwable;use…

第十六周:机器学习笔记

第十六周周报 摘要Abstratc一、机器学习1. Pointer Network&#xff08;指针网络&#xff09;2. 生成式对抗网络&#xff08;Generative Adversarial Networks | GAN&#xff09;——&#xff08;上&#xff09;2.1 Generator&#xff08;生成器&#xff09;2.2 Discriminator&…

ssm企业库存管理微信小程序-计算机毕业设计源码82704

摘 要 本文基于SSM框架&#xff0c;设计与实现了一个企业库存管理微信小程序。该小程序主要包括用户登录、库存查询、入库操作、出库操作等功能模块。在设计过程中&#xff0c;采用了前后端分离的架构&#xff0c;前端使用了微信小程序原生开发工具进行开发&#xff0c;后端使用…

【C++篇】探索STL之美:熟悉使用String类

CSDN 文章目录 前言 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&…

【跨平台】ReactNative 入门初探

【跨平台】ReactNative 入门初探 环境搭建与资料基础知识JS/TS Html基础React 基础异步编程处理PromiseGeneratorasync UI 组件定义和使用style宽度和高度FlexBox触摸组件常用交互 Redux基础概念 与安卓通信参考相关类注解等 构建打包示例常用参数自定义RN插件 环境搭建与资料 …

no.977有序数组的平方 python

一、题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c…

.NETCore Blazor使用localStorage存储登录信息

目录 1. JWT 登录并存储到 localStorage 2. 读取 JWT 3. 删除 JWT&#xff08;用户退出&#xff09; 4. 修改 JWT 5. 处理 JWT 过期 总结 在使用 JWT&#xff08;JSON Web Token&#xff09;进行身份验证时&#xff0c;除了生成和存储 JWT&#xff0c;还需要处理读取、删…