Skip to content

Calendar 日历选择器

提供单选、多选、范围、周/月、日期时间等日历选择能力。

性能提示

min-datemax-date 不建议设置差距过大,避免大量日期计算影响性能。若业务需要较大时间跨度,建议配合 switch-mode(如 month / year-month)减少一次性渲染压力。

组件类型

单个日期选择

html
<wd-cell-group border>
  <wd-cell title="单个日期选择" :value="formatValue(value1, 'date')" is-link @click="show1 = true" />
</wd-cell-group>
<wd-calendar v-model="value1" v-model:visible="show1" @confirm="handleConfirm" />

多个日期选择

html
<wd-cell-group border>
  <wd-cell title="多个日期选择" :value="formatValue(value2, 'dates')" is-link @click="show2 = true" />
</wd-cell-group>
<wd-calendar type="dates" v-model="value2" v-model:visible="show2" />

范围选择

html
<wd-cell-group border>
  <wd-cell title="日期范围选择" :value="formatValue(value3, 'daterange')" is-link @click="show3 = true" />
</wd-cell-group>
<wd-calendar type="daterange" v-model="value3" v-model:visible="show3" />

日期时间类型

html
<wd-cell-group border>
  <wd-cell title="日期时间选择" :value="formatValue(value4, 'datetime')" is-link @click="show4 = true" />
</wd-cell-group>
<wd-calendar type="datetime" v-model="value4" v-model:visible="show4" />
html
<wd-cell-group border>
  <wd-cell title="日期时间范围选择" :value="formatValue(value5, 'datetimerange')" is-link @click="show5 = true" />
</wd-cell-group>
<wd-calendar type="datetimerange" v-model="value5" v-model:visible="show5" />

周与月类型

html
<wd-cell-group border>
  <wd-cell title="周选择" :value="formatValue(value6, 'week')" is-link @click="show6 = true" />
</wd-cell-group>
<wd-calendar type="week" v-model="value6" v-model:visible="show6" />
html
<wd-cell-group border>
  <wd-cell title="月选择" :value="formatValue(value7, 'month')" is-link @click="show7 = true" />
</wd-cell-group>
<wd-calendar type="month" :min-date="minDate" v-model="value7" v-model:visible="show7" />

周范围与月范围选择

html
<wd-cell-group border>
  <wd-cell title="周范围选择" :value="formatValue(value8, 'weekrange')" is-link @click="show8 = true" />
</wd-cell-group>
<wd-calendar :first-day-of-week="1" type="weekrange" v-model="value8" v-model:visible="show8" />
html
<wd-cell-group border>
  <wd-cell title="月范围选择" :value="formatValue(value9, 'monthrange')" is-link @click="show9 = true" />
</wd-cell-group>
<wd-calendar type="monthrange" v-model="value9" v-model:visible="show9" />

组件状态

快捷操作

设置 show-confirm="false" 后,选中即确认。

html
<wd-cell-group border>
  <wd-cell title="快捷操作" :value="formatValue(value16, 'date')" is-link @click="show16 = true" />
</wd-cell-group>
<wd-calendar v-model="value16" v-model:visible="show16" :show-confirm="false" />

before-confirm

设置 before-confirm 在确认前拦截,返回 falsePromise<false> 可阻止确认。

html
<wd-cell-group border>
  <wd-cell title="before-confirm" :value="formatValue(value14, 'date')" is-link @click="show14 = true" />
</wd-cell-group>
<wd-calendar v-model="value14" v-model:visible="show14" :before-confirm="beforeConfirm" />

组件变体

切换模式

设置 switch-mode 控制面板切换行为:

  • none:平铺,不展示切换按钮
  • month:按月切换
  • year-month:支持按年与按月切换
html
<wd-radio-group v-model="switchMode" type="button">
  <wd-radio value="none">none</wd-radio>
  <wd-radio value="month">month</wd-radio>
  <wd-radio value="year-month">year-month</wd-radio>
</wd-radio-group>

日周月切换

设置 show-type-switch 开启日/周/月切换。

html
<wd-cell-group border>
  <wd-cell title="日周月切换" :value="formatValue(value10, 'date')" is-link @click="show10 = true" />
</wd-cell-group>
<wd-calendar :first-day-of-week="1" show-type-switch v-model="value10" v-model:visible="show10" :switch-mode="switchMode" />

组件样式

日期格式化

设置 formatter 可定制日期单元格文案与状态展示。

html
<wd-cell-group border>
  <wd-cell title="日期格式化" :value="formatValue(value11, 'daterange')" is-link @click="show11 = true" />
</wd-cell-group>
<wd-calendar type="daterange" v-model="value11" v-model:visible="show11" :formatter="formatter" />

自定义展示

设置 inner-display-format 自定义范围选择面板中的起止文案。

html
<wd-cell-group border>
  <wd-cell title="自定义展示" :value="displayFormat(value13)" is-link @click="show13 = true" />
</wd-cell-group>
<wd-calendar
  type="daterange"
  v-model="value13"
  v-model:visible="show13"
  :inner-display-format="innerDisplayFormat"
/>

特殊样式

快捷选项

设置 shortcutson-shortcuts-click 实现快捷日期区间。

html
<wd-cell-group border>
  <wd-cell title="快捷选项" :value="formatValue(value12, 'daterange')" is-link @click="show12 = true" />
</wd-cell-group>
<wd-calendar
  :shortcuts="shortcuts"
  :on-shortcuts-click="onShortcutsClick"
  type="daterange"
  v-model="value12"
  v-model:visible="show12"
/>

拓展确定区域

通过 confirm-left / confirm-right 插槽拓展确定区按钮。

html
<wd-cell-group border>
  <wd-cell title="拓展确定区域" :value="formatValue(value19, 'date')" is-link @click="show19 = true" />
</wd-cell-group>
<wd-calendar v-model="value19" v-model:visible="show19">
  <template #confirm-right>
    <wd-button block plain custom-style="margin-left: 10px;" @click="selectToday">选择今天</wd-button>
  </template>
</wd-calendar>

Attributes

参数说明类型默认值
v-model选中值,13 位时间戳或时间戳数组number | number[] | null-
v-model:visible是否显示弹层booleanfalse
type日期类型,支持 date / dates / datetime / week / month / daterange / datetimerange / weekrange / monthrangestringdate
min-date最小日期时间戳number当前日期往前 6 个月
max-date最大日期时间戳number当前日期往后 6 个月
first-day-of-week周起始日(0 表示周日)number0
formatter日期格式化函数CalendarFormatter-
max-range范围类型的最大可选范围number-
range-prompt超出最大范围提示文案string-
allow-same-day范围类型是否允许同一天/同一周/同一月booleanfalse
default-time日期默认时分秒string | string[]-
time-filter时间选项过滤函数(datetime / datetimerange)CalendarTimeFilter-
hide-second是否隐藏秒选择(datetime / datetimerange)booleanfalse
title弹层标题string选择日期(内置文案)
close-on-click-modal点击遮罩是否关闭booleantrue
z-index弹层层级number15
show-confirm是否显示确认按钮booleantrue
confirm-text确认按钮文案string确定(内置文案)
inner-display-format自定义范围面板内部回显CalendarInnerDisplayFormat-
ellipsis范围文案是否省略显示booleanfalse
show-type-switch是否显示日周月切换booleanfalse
shortcuts快捷选项列表(项需包含 textRecord<string, any>[][]
on-shortcuts-click快捷选项点击回调CalendarOnShortcutsClick-
safe-area-inset-bottom是否开启底部安全区booleantrue
before-confirm确认前校验函数CalendarBeforeConfirm-
custom-view-class面板内部视图类名string''
immediate-change是否手指松开即触发时间选择 change 事件booleanfalse
root-portal是否脱离页面渲染booleanfalse
panel-height可滚动面板高度number316
show-panel-title是否展示滚动面板标题booleantrue
switch-mode切换模式:none 平铺展示所有月份/年份且不展示切换按钮;month 支持按月切换并展示上个月/下个月按钮;year-month 支持按年与按月切换并展示上一年/下一年、上个月/下个月按钮。大跨度日期场景建议使用 monthyear-month 以降低渲染压力stringnone
duration弹层动画时长number200
custom-class根节点自定义类名string''
custom-style根节点自定义样式string''

Events

事件名称说明参数
confirm点击确认后触发{ value, type }
change面板日期变化时触发{ value }
cancel关闭且未确认时触发-
open日历打开时触发-

Methods

方法名称说明参数
open打开日历弹层-
close关闭日历弹层-

Slots

name说明
confirm-left确认区域左侧插槽
confirm-right确认区域右侧插槽

CalendarDayItem 数据结构

属性说明类型
type日期状态类型CalendarDayType
date13 位时间戳number
text日期文本内容string
topInfo上方提示信息string
bottomInfo下方提示信息string
disabled是否禁用boolean

CalendarDayType

类型说明
selected单日期选中
start范围开始日期
end范围结束日期
middle范围开始与结束之间的日期
same范围开始与结束日期同一天
current当前日期
multiple-middle多日期范围选择,开始与结束之间的日期
multiple-selected多日期范围选择,选中的日期

主题定制

CSS 变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 全局配置

名称默认值描述
--wot-calendar-bg$filled-oppo-
--wot-calendar-tabs-width100%日历弹层背景色
--wot-calendar-tabs-padding$padding-zero $padding-extra-looseTabs 宽度
--wot-calendar-shortcuts-padding$padding-extra-tight $padding-zeroTabs 内边距
--wot-calendar-tag-spacing-right$spacing-extra-loose快捷选项内边距
--wot-calendar-range-padding$padding-zero $padding-loose $padding-extra-loose标签右间距
--wot-calendar-range-font-size$typography-body-size-main范围标签内边距
--wot-calendar-range-item-font-size$typography-body-size-extra-large范围标签字号
--wot-calendar-range-item-font-weight$font-weight-medium范围标签项字号
--wot-calendar-range-item-line-height$typography-body-line--height-size-extra-large范围标签项字重
--wot-calendar-range-item-padding$spacing-loose $spacing-zero范围标签项行高
--wot-calendar-range-item-color$primary-6范围标签项内边距
--wot-calendar-range-item-color-placeholder$text-placeholder范围标签项颜色
--wot-calendar-range-item-line-color$primary-6占位符颜色
--wot-calendar-range-item-line-color-placeholder$border-main范围标签项下划线颜色
--wot-calendar-range-separator-margin$spacing-zero $spacing-tight范围标签项下划线占位符颜色
--wot-calendar-range-separator-color$text-auxiliary分隔符水平间距
--wot-calendar-range-separator-width$n-8分隔符颜色
--wot-calendar-range-separator-height$stroke-main分隔符宽度
--wot-calendar-confirm-padding$padding-tight $padding-loose分隔符高度
--wot-calendar-confirm-border-color$border-light确认区域内边距

源代码

文档
组件

Released under the MIT License.

Released under the MIT License.