当前位置: 首页 > news >正文

DateRangePicker 日期范围选择器

DateRangePicker 日期范围选择器,基于 el-date-picker 封装,默认按月选择,自动补齐首尾日期。

快速使用

<DateRangePicker v-model="dateRange"/><DateRangePicker v-model="dateRange"type="daterange"/><DateRangePicker v-model="dateRange"type="yearrange"/>

Props

modelValue Array v-model 绑定值,格式['YYYY-MM-DD','YYYY-MM-DD']typeString 选择类型:'monthrange'(默认)|'daterange'|'yearrange'valueFormat String 输出日期格式,默认'YYYY-MM-DD'clearable Boolean 是否可清空,默认falseautoDefault Boolean 无值时自动填入本年度,默认 true;设为false则不填 startPlaceholder String 开始日期占位,默认'开始日期'endPlaceholder String 结束日期占位,默认'结束日期'

默认行为

- 默认选中本年度(1月1日 ~12月31日) - 月模式:选中"1月→3月"自动返回['2026-01-01','2026-03-31']- 年模式:选中"2024→2025"自动返回['2024-01-01','2025-12-31']- 不可清空(可传入 clearable 开启) - 支持$attrs透传(disabledDate、size 等原生属性)
<template><el-date-picker v-model="innerValue":type="type":value-format="innerValueFormat":clearable="clearable"range-separator="-":start-placeholder="startPlaceholder":end-placeholder="endPlaceholder"v-bind="$attrs"/></template><script setup>import{computed, onMounted}from'vue';defineOptions({name:'DateRangePicker'});const props=defineProps({modelValue:{type: Array, default:()=>[]}, // 类型:monthrange(默认按月)|daterange(按日)|yearrange(按年)type:{type: String, default:'monthrange'}, valueFormat:{type: String, default:'YYYY-MM-DD'}, clearable:{type: Boolean, default:false}, autoDefault:{type: Boolean, default:true}, // 是否自动填入本年度默认值 startPlaceholder:{type: String, default:'开始日期'}, endPlaceholder:{type: String, default:'结束日期'},});const emit=defineEmits(['update:modelValue']);const now=new Date();const currentYear=now.getFullYear();// 默认值:本年度1月1日 ~12月31日 const defaultRange=computed(()=>{ if(props.type==='yearrange')return [`${currentYear}`,`${currentYear}`];return [`${currentYear}-01-01`,`${currentYear}-12-31`];});onMounted(()=>{ if(props.autoDefault&&(!props.modelValue||props.modelValue.length<2)){emit('update:modelValue',[...defaultRange.value]);}});// 内部传给 el-date-picker 的formatconst innerValueFormat=computed(()=>{ if(props.type==='monthrange')return 'YYYY-MM';if(props.type==='yearrange')return 'YYYY';return props.valueFormat;});//获取某月的最后一天 const lastDayOfMonth=(year,month)=>new Date(year,month,0).getDate();const innerValue=computed({ get(){ if(!props.modelValue||props.modelValue.length<2){ if(!props.autoDefault)return null;//默认本年度 if(props.type==='monthrange')return [`${currentYear}-01`,`${currentYear}-12`];if(props.type==='yearrange')return [`${currentYear}`,`${currentYear}`];return [`${currentYear}-01-01`,`${currentYear}-12-31`];} if(props.type==='monthrange'){//YYYY-MM-DD → YYYY-MM return props.modelValue.map(v=>(v||'').substring(0,7));}if(props.type==='yearrange'){// YYYY-MM-DD → YYYYreturnprops.modelValue.map(v=>(v||'').substring(0,4));}returnprops.modelValue;}, set(val){if(!val||val.length<2){emit('update:modelValue',[]);return;}if(props.type==='monthrange'){// val=['2024-01','2024-03']['2024-01-01','2024-03-31']const[endYear, endMonth]=val[1].split('-').map(Number);const start=`${val[0]}-01`;const end=`${val[1]}-${String(lastDayOfMonth(endYear, endMonth)).padStart(2,'0')}`;emit('update:modelValue',[start, end]);}elseif(props.type==='yearrange'){// val=['2024','2025']['2024-01-01','2025-12-31']emit('update:modelValue',[`${val[0]}-01-01`,`${val[1]}-12-31`]);}else{emit('update:modelValue', val);}}});</script>
http://www.jsqmd.com/news/1102825/

相关文章:

  • ICM-45605与STM32F756ZG在运动测量中的优化实践
  • 传感器驱动调试:时序、DMA 和数据采集的实际问题
  • 边缘推理功耗优化:从模型裁剪到硬件休眠的全链路节能工程
  • STM32与BNO055实现高精度方向跟踪与环境监测
  • 存在的内部结构空间区域
  • ChatGPT写Python/JS/SQL代码到底靠不靠谱?——基于1,842行真实业务代码的准确性、可维护性、安全性三维度压测报告
  • 3秒搞定图片格式转换:Save Image as Type让你的浏览器右键菜单更强大
  • Markn:智能实时预览技术如何革命性提升Markdown文档编写效率
  • 人人都在聊的数字化,到底是什么?普通人不用焦虑,这样轻松应对
  • Web安全入门:从SQL注入到CSP,构建纵深防御体系
  • 贾子成败定理(KSFT)深度评析报告
  • melo 音乐实测:零基础用 AI 怎么做一首歌完整实操记录
  • Metasploit渗透测试框架:从核心概念到实战演练的完整指南
  • 水电站集成事故配压阀SGP-150
  • WaveTools鸣潮工具箱:一键解锁游戏性能与数据管理的终极解决方案
  • 三步搞定国家中小学智慧教育平台电子课本下载:免费PDF教材获取终极方案
  • 第90题 氧化镓(β-Ga₂O₃)单晶衬底生长与功率器件适配
  • WechatBakTool:微信聊天记录备份与恢复的终极指南
  • 基于Si4732与MKV42F的高保真无线音频接收系统设计
  • Java毕设项目:基于 SpringBoot 的保险公司业务台账与数据分析系统的设计与实现 基于 SpringBoot 的金融保险数据统计与业务运维系统 (源码+文档,讲解、调试运行,定制等)
  • 解锁鸣潮游戏新体验:3分钟掌握WaveTools画质优化与抽卡管理
  • 基于unity开发小游戏的AI计划制定Skill
  • ICM-45605与PIC32MZ2048EFH144在工业IMU系统中的应用
  • Mythos漏洞挖掘模型:可规模化自主发现RCE的AI安全新范式
  • 13DOF传感器与PIC18微控制器的嵌入式导航方案
  • MC74HC165A与PIC18F25J50实现高效数字输入扩展
  • Si4732与PIC32MZ构建高性能SDR收音机系统
  • KMX63与PIC18F2515实现低成本手势交互设计
  • STM32与LTC6904实现高精度方波信号生成方案
  • 长期低热,背后隐藏何因?