Skip to content

TimeSelect 时间选择

xy-time-select 用于固定步长时间点选择,如预约时段、营业窗口、配送时间等"整点或半点"场景。当你需要自由输入时分秒时用 xy-time-picker;需要日期时用 xy-date-picker

实例级样式收口

  • 后台项目如果只是想收口时间下拉面板的背景、边框、阴影和密度,优先使用 popper-classpopper-style,不要在页面层 deep 到 trigger、dropdown 和 option 的内部类名。
  • TimeSelect 本质上也是筛选条/表单里的输入浮层,建议与 Select、DatePicker 保持同一套收口方式。

基础用法

默认以 09:00 - 18:0030 分钟步长生成选项,回写格式默认为 HH:mm

当前时间:09:30

开始 / 结束时间联动

通过 min-timemax-time 可以快速搭出开始时间与结束时间的相互约束。

区间:09:00 - 10:30

时间格式与包含结束时间

format 可以把展示值切到 12 小时制,include-end-time 适合保留最后一个截止时间点。

展示与回传:09:00 AM

表单场景

放在 xy-form-item 内部时,TimeSelect 会接入 change / blur 校验链路。

受控回填与快捷打开

通过 expose 的 open / close 和外部回填值,可以接进筛选栏快捷操作、默认时间回填和批量预约流程。

当前选中:13:30

组件边界与场景选择

  • TimeSelect:固定步长时间点选择,值是离散时间字符串。适合预约时段、营业窗口、配送时间这类只需要从预设列表选一个时间点的场景。
  • TimePicker:时分秒自由输入选择,值是时间字符串或时间范围数组。适合需要精确到秒、分钟,或有复杂禁用规则的场景。
  • DatePicker:日期粒度选择,值是日期字符串。需要"哪一天"而非"几点"时用 DatePicker。
  • 如果你需要"预约 10:00 / 10:30 / 11:00"这类固定时间点,用 TimeSelect;如果需要自由输入任意时间或禁用特定时分秒,用 TimePicker。

值形态

model-value 类型

  • TimeSelectValue = string | null
  • 值始终是单个时间字符串(如 '09:30'),不支持范围模式和多选
  • format 同时控制展示格式和输出值格式,默认 'HH:mm'
  • 清空后值为 null

start / end / step 的行为

  • start:列表起始时间,默认 '09:00'
  • end:列表截止时间,默认 '18:00'
  • step:步长间隔,默认 '00:30'(30 分钟)
  • include-end-time:默认 false,如果设为 true,会额外把 end 时间点也纳入选项列表
  • 这三个属性只影响选项列表的生成,不会自动清空已有的 model-value

min-time / max-time 的行为

  • min-time / max-time:控制选项的禁用态,不在可选范围内的选项会被标记为 disabled
  • 它们不会自动清空已有值——如果当前 model-value 被新约束排除,它仍然是选中状态但会在 UI 上体现为禁用
  • 典型用法:开始时间选择后,将 max-time 绑定为开始时间,实现"结束时间不能早于开始时间"

行为约定与优先级

  • ArrowDown / ArrowUp / Home / End 在菜单项之间移动。
  • Enter / Space 在打开状态下选择当前高亮项。
  • Escape 关闭面板并把焦点还给触发器。
  • min-time / max-time 只控制禁用态,不会自动清空当前已有值。
  • clearable 会清空值(回到 null)。
  • validate-event 控制是否在 change / blur 时触发表单校验,默认 true

命名映射

Vue 模板中 props 和 events 使用 kebab-case,源码 / TS 类型层使用 camelCase,两者由 Vue 自动转换,等价:

Props 映射

模板写法(kebab-case)源码 / TS 写法(camelCase)
model-valuemodelValue
min-timeminTime
max-timemaxTime
include-end-timeincludeEndTime
validate-eventvalidateEvent
append-toappendTo
popper-classpopperClass
popper-stylepopperStyle

其余属性(placeholderdisabledclearablesizestartendstepformatteleportedplacement)为单词形式,模板与源码写法一致。

Events 映射

模板写法(kebab-case)源码 emit 写法(camelCase)
update:model-valueupdate:modelValue
visible-changevisibleChange

其余事件(changeclearfocusblur)为单单词,模板与源码写法一致。

下方 API 表格统一按模板层推荐写法列出。

API

TimeSelect Attributes

属性说明类型默认值
model-value当前选中值string | nullnull
placeholder占位提示string'请选择时间'
disabled是否禁用booleanfalse
clearable是否允许清空booleanfalse
size组件尺寸ComponentSize跟随全局配置
start开始时间string'09:00'
end结束时间string'18:00'
step步长string'00:30'
min-time最小可选时间string
max-time最大可选时间string
include-end-time是否把结束时间纳入选项booleanfalse
format展示与回传格式string'HH:mm'
validate-event是否触发表单校验booleantrue
teleported是否把面板传送到 bodybooleantrue
append-to面板挂载目标string | HTMLElement'body'
placement面板弹出位置Placement'bottom-start'
popper-class面板自定义类名string''
popper-style面板自定义样式StyleValueundefined

TimeSelect Events

事件说明参数
update:model-value选中值变化时触发TimeSelectValueChangeHandler
change选中时间项或点击清空后触发TimeSelectValueChangeHandler
clear点击清空按钮时触发
visible-change面板显隐变化时触发TimeSelectVisibleChangeHandler
focus打开面板时触发
blur面板关闭时触发

TimeSelect Exposes

暴露项说明类型
focus聚焦触发器TimeSelectInstance["focus"]
blur关闭并让触发器失焦TimeSelectInstance["blur"]
open打开下拉面板TimeSelectInstance["open"]
close关闭下拉面板TimeSelectInstance["close"]