Skip to content

RangePicker 日期范围

选择一段连续的日期区间。双面板显示当前月与下一月,起 / 止两次点击完成选择,hover 期间高亮预览区间。复用 DatePicker 同款 dayjs 工具层与 valueFormat 三档。

基本使用

v-model[start, end] 数组,类型与 valueFormat 对应。两次点击日期完成选择。

显示已选区间

modelValue 同时支持 [string, string][Date, Date][number, number],按 format 自动解析。

自定义格式

format 控制输入框显示,valueFormat 决定 v-model 输出形态。

自动调换

如果点击 end < start,组件会自动把两端调换,输出始终满足 start <= end

禁用日期

disabled-date(current: Dayjs) => boolean 与 DatePicker 一致,对 start / end 都生效。

独立禁用起止侧

disabledStartDate / disabledEndDate 仅作用于对应侧(phase=start / phase=end),优先级高于通用 disabledDate;单侧未配置时回落到 disabledDate。先点起始切到 end 阶段后,结束侧的禁用样式才会出现。

两端独立禁用 disabled

disabled 支持元组 [boolean, boolean],分别锁两端 input。例如「开始日期可选 / 结束日期锁定」常见于编辑订单中的「下单时间不可改、退款时间待选」场景。锁定端:input 禁用、点击不打开面板。当两端都锁定时清除按钮自动隐藏。

两端独立允许为空 allowEmpty

allowEmpty[boolean, boolean],分别配置「开始日期可空 / 结束日期可空」。两端默认 false,需要全部选择后才能提交。设为 [true, false] 即可实现「开始日期可空 / 结束日期必填」之类的不对称需求。

自定义分隔符与占位

三种尺寸

表单联动

放进 c-form-item 内时,status 会自动跟随 FormItem 的校验状态。

弹层容器

把面板挂到 document.body 或自定义容器,避开 overflow 滚动裁切。

showTime 时间选择

show-timetrue 或对象时启用时间选择,两侧面板各挂时分秒三列;点日期不立即提交,footer 出现「确定」按钮,起止齐全后可点。

传对象可配置默认时刻与步进,未传 defaultStartTime / defaultEndTime 时默认 00:00:00 / 23:59:59

presets 预设快捷项

presets 传入快捷项数组后,面板左侧出现 rail;空数组不渲染。每项 value 可为元组或返回元组的函数,非严格解析,end < start 时自动调换。

show-time 共存时,点击预设仅写入 pending,可继续微调时间,最后通过「确定」提交。

Variants

录入组件统一 variant 形态。四档:outlined(默认)/ filled / borderless / underlined

API

Props

参数类型默认值说明
modelValue[DateValue, DateValue] | null--起止区间,支持 v-model
formatstringYYYY-MM-DD输入框显示与字符串解析格式
valueFormat'string' | 'date' | 'number''string'v-model 输出形态:按 format 字符串 / Date 实例 / 毫秒时间戳
placeholder[string, string]['开始日期','结束日期']起止两端占位文案
separatorstring~起止之间的分隔符
disabledboolean | [boolean, boolean]false是否禁用;元组形态分别锁两端 input。两端都锁定时 clear 自动隐藏
allowEmptyboolean | [boolean, boolean]false是否允许该端为空;元组分别配置两端。两端都不允许时必须选完整范围才能 ok 提交
clearablebooleantrue是否显示清除按钮
size'small' | 'default' | 'large''default'输入框尺寸
status'' | 'error' | 'warning' | ...''校验状态;置于 FormItem 时自动继承
disabledDate(current: Dayjs) => boolean--不可选日期回调,对 start / end 都生效
disabledStartDate(current: Dayjs) => boolean--仅作用于起始侧(phase=start),优先级高于 disabledDate
disabledEndDate(current: Dayjs) => boolean--仅作用于结束侧(phase=end),优先级高于 disabledDate
placement'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight''bottomLeft'浮层方位
popupClassNamestring--浮层根元素自定义 class
popupAppendToBodybooleanfalse是否把浮层 Teleport 到 document.body
getPopupContainer(trigger: HTMLElement | null) => HTMLElement | null--自定义浮层挂载点
autoFocusbooleanfalse挂载后自动 focus 起始输入框
inputReadOnlybooleantrue输入框只读
transitionNamestringccui-range-picker-fade浮层过渡名
weekStart0 | 10周起始:0 周日开头,1 周一开头
presetsRangePresetItem[][]左侧快捷项;每项 { label, value }value 可为元组或返回元组的函数;空数组不渲染 rail
showTimeboolean | RangeTimeShowConfigfalse启用时间选择;对象支持 format / defaultStartTime / defaultEndTime / hourStep / minuteStep / secondStep / disabledHours / disabledMinutes / disabledSeconds / hideDisabledOptions

Events

事件名回调签名触发时机
update:modelValue(value: [DateValue, DateValue] | null)区间提交或清除时
change(value, dateStrings: [string, string])区间提交或清除时(带格式化字符串)
open-change(open: boolean)浮层打开 / 关闭时
focus--输入框聚焦
blur--输入框失焦

已知限制(未交付)

  • 键盘导航:方向键 / Enter 切换尚未实现。
  • 响应式单面板:移动端 PC 双面板会溢出,自动切单面板留给后续。

Released under the MIT License.