Skip to content

Calendar 日历

按照日历形式展示数据的容器。

何时使用

当需要按日历形式展示一组数据,或让用户选择日期时使用。

基础用法

使用 v-model 实现日期选择,默认周一作为每周起始日。

vue

<TCalendar v-model="selectedDate" />

受控模式

传入预设值,日历自动高亮对应日期。

vue

const presetDate = ref('2026-06-01')
<TCalendar v-model="presetDate" />

显示周序号

设置 show-week 属性在左侧显示 ISO 周序号列。

vue

<TCalendar show-week />

自动切换月

点击上个月或下个月的灰色日期,日历自动跳转到对应月份并选中该日期。无需手动点击箭头导航。

vue

<TCalendar v-model="selectedDate" />

自定义起始日

设置 first-day-of-week="0" 让周日作为每周第一天。

vue

<TCalendar :first-day-of-week="0" show-week />

限制可选范围

通过 minmax 限制可选日期的范围。

vue

<TCalendar min="2026-01-01" max="2026-01-31" />

自定义禁用日期

通过 disabled-date prop 传入函数,动态控制哪些日期不可选。

vue

const isWeekend = (date) => {
  const d = new Date(date);
  return d.getDay() === 0 || d.getDay() === 6;
}
<TCalendar :disabled-date="isWeekend" />

范围选择

设置 range 启用范围选择模式。配合 v-model:range-startv-model:range-end 实现双向绑定。点击第一个日期设为起始,点击第二个日期设为结束,第三次点击开启新范围。

vue

const rangeStart = ref('2026-01-01')
const rangeEnd = ref('2026-01-14')

<TCalendar
  range
  v-model:range-start="rangeStart"
  v-model:range-end="rangeEnd"
/>

国际化

通过 locale prop 传入自定义翻译对象,支持星期、月份、按钮文案的完全定制。

vue

const enLocale = {
  weekDays: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
  months: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
  today: 'Back to Today',
  week: 'Wk',
  yearFormat: '{y}',
  prevMonth: 'Prev Month',
  nextMonth: 'Next Month',
  prevYear: 'Prev Year',
  nextYear: 'Next Year',
}

<TCalendar :locale="enLocale" show-week />

全屏模式

设置 fullscreen 启用大尺寸日历,适合嵌入页面内容区。

vue

<TCalendar fullscreen />

迷你模式

设置 mini 启用紧凑布局。无内容区、核心信息居中、间距缩小,适合嵌入侧边栏、卡片等小空间。

vue

<TCalendar mini />
<TCalendar mini show-week />
<TCalendar mini mode="year" />

锁定视图

设置 lockView 固定当前视图模式,隐藏模式切换按钮。年视图下点击月份仅导航不切换。

vue

<TCalendar lockView="y" mini />

隐藏视图切换按钮

设置 show-view-switchfalse 隐藏切换按钮。

vue

<TCalendar :show-view-switch="false" />

周选择模式

设置 week-select 启用周选择。点击任意日期选中整周,v-model 值为 ISO 周格式(如 2026-W29)。

vue

<TCalendar week-select show-week />

周选择自定义格式

通过 week-format 自定义值格式,支持 {y}(年)和 {wk}(周数)占位符。

vue

<TCalendar week-select week-format="{y}年-第{wk}周" show-week />

只读模式

设置 readonly 禁止所有选中操作,适合展示已确定的日期、周、月信息。

vue

<TCalendar :model-value="'2026-06-01'" readonly />
<TCalendar :model-value="'2026-06-01'" readonly mode="year" />
<TCalendar week-select readonly week-format="W{wk}-{y}" show-week />

API

TCalendar 属性 (Props)

属性名说明类型默认值
model-value选中日期(v-model 绑定,格式 YYYY-MM-DDstring | nullnull
min最小可选日期stringundefined
max最大可选日期stringundefined
first-day-of-week每周起始日:0=周日,1=周一0 | 11
disabled-date自定义禁用日期的函数(date: string) => booleanundefined
fullscreen全屏/大尺寸模式booleanfalse
show-week显示 ISO 周序号列booleanfalse
range启用范围选择模式booleanfalse
range-start范围起始日期(v-model:range-start)string | nullnull
range-end范围结束日期(v-model:range-end)string | nullnull
mode视图模式'year' | 'month' | 'week''month'
locale国际化配置CalendarLocaledefaultLocale
lock-view锁定视图:y=年, m=月, w=周'y' | 'm' | 'w'undefined
show-view-switch显示视图切换按钮booleantrue
mini迷你模式(无内容区,居中)booleanfalse
week-select启用周选择模式booleanfalse
week-format周选择值格式模板string'{y}-W{wk}'
readonly只读模式(禁止选择,仅展示)booleanfalse

TCalendar 事件 (Emits)

事件名说明回调参数
update:model-value单模式选中日期变化(value: string) => void
update:mode视图模式变化(value: 'year' | 'month' | 'week') => void
update:range-start范围起始变化(value: string | null) => void
update:range-end范围结束变化(value: string | null) => void
change日期选中时触发(value: string | { start, end }) => void
panel-change面板年月切换时触发(year: number, month: number) => void

TCalendar 插槽 (Slots)

插槽名说明作用域参数
cell完全自定义整个单元格内容{ day: CalendarDay }date, day, isCurrentMonth, isToday, isSelected, isDisabled, weekNumber, isRangeStart, isRangeEnd, isInRange
cell-content自定义单元格主体内容区(年/月/周视图均支持){ cell: CalendarDay | CalendarMonthCell | CalendarWeekDay, mode: 'year' | 'month' | 'week' }

TCalendar 暴露的方法 (Expose)

方法名说明参数
goToDate跳转到指定年月(year: number, month?: number)
goToToday跳转回今天-
currentYear当前展示年份(只读)-
currentMonthNum当前展示月份 1-12(只读)-
resetRange重置范围选择状态-