Skip to content

Calendar 日历

按月展示日期,常用于"日程 / 任务 / 排班"场景。

何时使用

  • 单选某一天作为业务输入。
  • 自定义每天的 cell,叠加业务标记(如待办数量、状态徽标)。

基本使用

v-model 默认绑定 YYYY-MM-DD 字符串,点击单元格切换选中日。

监听变化

change 事件返回新选中的日期,类型随 valueFormat(默认 'string')。

只读模式

read-only 让用户无法点击切换,常用于"展示一份排期表"。

自定义 header

#header 插槽接收作用域对象 { value, currentMonth, setDate, changeMonth },slot 内可直接调用月份切换 API,无需从外部维护状态。

字段类型说明
valuestring当前选中日期(YYYY-MM-DD
currentMonthstring当前展示月份(YYYY-MM
setDate(date: string) => void跳转到任意 YYYY-MM-DD
changeMonth(direction: 'lastMonth' | 'nextMonth') => void上下月切换

自定义日期 cell

#dateCell 插槽接收 { isSelected, date, day },可在每一天上叠加业务标记。

选中信息回显

dateCellisSelected 拿来显示"已选 / 未选"提示。

valueFormat='string'(默认)

字符串协议,便于 JSON 序列化和路由参数透传。

valueFormat='date'

输出原生 Date,便于与既有日期 API 互操作。

valueFormat='number' timestamp

毫秒级 timestamp,便于直接落库。

自定义 format

format 同时控制输入解析与字符串输出。

Dayjs 实例输入

直接传 dayjs() 实例做初始化,组件内部统一转 dayjs 处理。

空值初始化

null 时回退到当天高亮。

周末高亮

dateCell slot + dayjs 算出 dayOfWeek,给周六周日加视觉权重。

双月对照

并列两个 Calendar 浏览跨月范围。

API

Props

参数类型默认值说明
modelValuestring | number | Date | Dayjs | null--选中日期(v-model);null 回退到今天
formatstring'YYYY-MM-DD'字符串输入解析模板 + valueFormat='string' 时的输出模板(dayjs format token)
valueFormat'string' | 'date' | 'number''string'v-model 输出协议:字符串 / 原生 Date / 毫秒级 timestamp
readOnlybooleanfalse只读模式
classNames{ root?, header?, body?, cell? }--语义化 DOM className 注入
styles{ root?, header?, body?, cell? }--语义化 DOM style 注入

Events

事件回调签名说明
change(value: string | Date | number | null)选中日期变化;类型随 valueFormat

Slots

名称说明
header自定义日历头部,作用域 { value, currentMonth, setDate, changeMonth }(详见上方 demo)
dateCell自定义日期 cell,参数 { isSelected, date, day }:是否选中 / 完整日期串 / 单元日号

Released under the MIT License.