Skip to content

TimeSelect 时间选择

YhTimeSelect 用于从预定义的时间列表中选择固定时段,适合预约、排班、营业时间等固定时间槽场景。

TimePicker 与 TimeSelect

  • TimePicker:通过滚轮面板选择任意时间点。
  • TimeSelect:从规则生成或自定义数据提供的固定时间选项中选择。

基础用法

通过 startendstep 配置可选时间列表。

当前值:未选择

基础用法

禁用状态

设置 disabled 后整个控件不可交互。

09:00
禁用状态

可清空

设置 clearable 后,在有值时显示清空按钮。

10:30

当前值:10:30

可清空

时间范围联动

通过两个 YhTimeSelect 配合 min-timemax-time 实现范围联动。

已选时间段:-- 至 --

时间范围联动

固定时间范围

使用 startendstep 设置固定的可选时段。

时间段:09:00 - 21:00,每 30 分钟一个选项

固定时间范围

禁用时间段

使用 disabled-hours 标记不可选时间段。

禁用时段:12:00-13:30,18:00-19:00

禁用时间段

minTime 与 maxTime 限制

使用 min-timemax-time 限制可选范围之外的选项。

可选范围:09:00 - 18:00

minTime 与 maxTime 限制

不同尺寸

通过 size 切换 large、默认和 small

不同尺寸

时间格式

设置 format 可以控制规则生成选项的展示标签。

当前值:未选择

时间格式

自定义时间选项

使用 options 传入完整的自定义选项列表,优先级高于 startendstep

当前值:未选择

自定义时间选项

完整功能演示

该示例组合了可编辑过滤、清空、自定义步长和结束时间选项。

当前选择:未选择

完整功能演示

在 Nuxt 中使用

在 Nuxt 中接入 YH-UI 模块后可直接使用 YhTimeSelect。规则生成的选项列表和当前值可以参与 SSR 渲染,弹层定位、输入过滤和滚动同步会在客户端激活后继续工作。

在 Nuxt 中使用

API

Props

名称说明类型默认值
model-value / v-model绑定值stringundefined
disabled是否禁用booleanfalse
editable输入框是否可编辑并支持过滤booleantrue
clearable是否允许清空booleantrue
size输入框尺寸'large' | 'default' | 'small'undefined
placeholder占位文本string''
name原生输入框名称stringundefined
effect下拉面板主题风格'dark' | 'light''light'
prefix-icon已声明的前缀图标属性。当前模板仍固定渲染默认时钟图标,未消费该 propstring | Componentundefined
clear-icon已声明的清空图标属性。当前模板仍固定渲染默认清空图标,未消费该 propstring | Componentundefined
start用于生成选项的开始时间string'09:00'
end用于生成选项的结束时间string'18:00'
step用于生成选项的时间间隔string'00:30'
min-time最小可选时间stringundefined
max-time最大可选时间stringundefined
value-on-clear清空时回传的值,未设置时回退到 undefinedstringundefined
format规则生成选项的展示格式string'HH:mm'
popper-class下拉面板自定义类名stringundefined
popper-style已声明的下拉面板样式属性。当前实现未将该 prop 合并到面板样式中string | Record<string, string>undefined
teleported是否将面板传送到 bodybooleantrue
include-end-time兼容性保留字段。当前实现会始终包含精确的结束时间选项booleanfalse
validate-event值变化和失焦时是否触发表单校验booleantrue
options自定义时间选项列表YhTimeSelectOption[]undefined
disabled-hours禁用时间段列表string[][]undefined
theme-overrides组件级主题覆盖ComponentThemeVarsundefined

Events

名称说明回调参数
update:modelValue绑定值更新时触发(value: string | undefined) => void
change选中值变化时触发(value: string | undefined) => void
focus输入框聚焦时触发(event: FocusEvent) => void
blur输入框失焦时触发(event: FocusEvent) => void
clear点击清空按钮时触发() => void
visible-change面板显示状态变化时触发(visible: boolean) => void

Slots

名称说明参数
prefix输入框前缀内容-
empty没有可用选项时的占位内容-
option自定义选项内容{ option: YhTimeSelectOption }

Expose

名称说明类型
focus让输入框获得焦点() => void
blur让输入框失去焦点() => void
inputRef内部输入框引用Ref<HTMLInputElement | undefined>

类型导出

名称说明
YhTimeSelectPropsTimeSelect props 类型
YhTimeSelectEmitsTimeSelect emits 类型
YhTimeSelectSlotsTimeSelect slots 类型
YhTimeSelectExposeTimeSelect expose 类型
YhTimeSelectSize尺寸联合类型
YhTimeSelectOption时间选项项类型
YhTimeSelectInstance组件实例类型

主题变量

YhTimeSelect 支持 themeOverrides。当前样式文件直接消费以下组件级 CSS 变量,其余边框、背景和文字颜色继续复用全局主题令牌。

变量名说明默认值
--yh-time-select-height控件高度var(--yh-component-size-default, 32px)
--yh-time-select-font-size输入框和选项字体大小var(--yh-font-size-base, 14px)
--yh-time-select-icon-size前后缀图标尺寸14px
--yh-time-select-prefix-margin前缀图标左侧间距12px
--yh-time-select-display-padding展示文本左侧内边距38px

使用场景

预约系统

vue
<template>
  <yh-form :model="form">
    <yh-form-item label="预约日期">
      <yh-date-picker v-model="form.date" />
    </yh-form-item>
    <yh-form-item label="预约时间">
      <yh-time-select
        v-model="form.time"
        start="09:00"
        end="17:00"
        step="00:30"
        :disabled-hours="[['12:00', '13:00']]"
        placeholder="选择预约时间"
      />
    </yh-form-item>
  </yh-form>
</template>

营业时间设置

vue
<template>
  <div style="display: flex; gap: 16px; align-items: center;">
    <yh-time-select
      v-model="openTime"
      :max-time="closeTime"
      start="00:00"
      end="23:59"
      step="00:30"
      placeholder="开门时间"
    />
    <span>-</span>
    <yh-time-select
      v-model="closeTime"
      :min-time="openTime"
      start="00:00"
      end="23:59"
      step="00:30"
      placeholder="关门时间"
    />
  </div>
</template>

排班系统

vue
<template>
  <yh-time-select
    v-model="shiftTime"
    :options="[
      { value: '08:00', label: '早班 (08:00-16:00)' },
      { value: '16:00', label: '中班 (16:00-00:00)' },
      { value: '00:00', label: '夜班 (00:00-08:00)' }
    ]"
    placeholder="选择班次"
  />
</template>

Released under the MIT License.