Skip to content
在新窗口打开实时预览

Calendar 日历 ​

用于单个日期或日期范围的选择,日历被包裹在底部弹起的容器中,支持农历、内置/自定义节日、节假日标记与打卡签到。

平台兼容性 ​

H5App微信小程序支付宝小程序
√√√√

基础用法 ​

vue
<snake-calendar v-model="show" :mode="mode" @change="handleChange" />

范围与农历 ​

vue
<snake-calendar v-model="show" mode="range" show-lunar />
  • mode="date" 单选:change 载荷为 { year, month, day, days, result, week, isToday, lunar }。
  • mode="range" 范围:change 载荷为 { startYear..., startDate, startWeek, endYear..., endDate, endWeek, startLunar, endLunar }。
  • minDate/maxDate 之外日期禁用;defaultSelectToday 初始化时默认选中今天(优先级低于 defaultDate/startDate/endDate)。
  • close 在点击遮罩或关闭按钮收起时触发。
  • isPage 为 true 时以页面内联方式展示,不使用弹窗,选择完成自动触发 change。

自定义日期内容 ​

设置 use-date-slot 后,可用 date 插槽渲染日期下方的补充信息。插槽参数 date 为当前日期信息,适合展示价格、库存或签到状态。

vue
<snake-calendar v-model="show" use-date-slot :checked-dates="['2026-09-14']">
  <template #date="{ date }">
    <text v-if="date.isToday" class="calendar-tip">今天</text>
  </template>
</snake-calendar>

is-page 适合嵌入预订、签到等页面;此模式不显示弹层标题和遮罩,外层不需要再维护打开/关闭状态。

API ​

Props ​

参数说明类型默认值
modelValue双向绑定控制弹出与收起booleanfalse
mode选择模式date | rangedate
changeYear / changeMonth是否显示年份/月份切换按钮booleantrue
maxYear / minYear可切换的最大/最小年份number | string2050 / 1950
minDate / maxDate最小/最大可选日期number | string1950-01-01 / 今天
defaultDate默认选中的日期,mode 为 date 时生效string''
startDate / endDate默认开始/结束日期,mode 为 range 时生效string''
defaultSelectToday初始化时是否默认选中今天booleantrue
showLunar是否显示农历booleanfalse
showFestival是否显示内置节日booleanfalse
festivals节日配置 { '04-04': '清明节' }object{}
holidays / workdays节假日/加班日列表string[][]
checkinMode是否启用打卡签到模式booleanfalse
checkedDates已打卡日期列表string[][]
todayChecked今日是否已打卡booleanfalse
color默认日期字体颜色string--snake-color-text
activeBgColor / activeColor选中日期背景/字体颜色string--snake-color-primary / white
rangeBgColor / rangeColor范围内日期背景/字体颜色string主题色浅色 / --snake-color-primary
monthArrowColor / yearArrowColor月/年切换箭头颜色string文本次要色 / 文本弱化色
startText / endText起始/结束日期自定义文案string语言包默认值
btnType确定按钮样式类型stringprimary
toolTip顶部提示文字string语言包默认值
closeable是否显示右上角关闭图标booleantrue
isPage是否在页面中直接显示,不使用弹窗booleanfalse
readonly是否只读,只读模式下禁止选择booleanfalse
isChange切换年月是否触发事件,mode 为 date 时生效booleanfalse
isActiveCurrent当前选中日期带选中效果booleantrue
borderRadius弹窗顶部左右两边的圆角值number | string20
zIndex弹出层级,0 使用弹层默认层级number | string0
maskCloseAble是否允许点击遮罩关闭booleantrue
safeAreaInsetBottom是否开启底部安全区适配booleanfalse
useDateSlot是否启用自定义日期内容插槽booleanfalse
customClass / customStyle自定义类名和样式string | object | array''

Events ​

事件名触发时机参数
update:modelValue弹出/收起boolean
change选择结果变化date/range 载荷(见上)
close点击遮罩或关闭按钮收起-
input弹窗通过按钮收起(兼容语义)false

Slots ​

名称说明
tooltip替换顶部提示文字
date自定义日期内容,携带日期信息

主题变量 ​

变量用途
--snake-color-primary选中日期、范围和工作日标记
--snake-color-primary-rgb日期范围浅色背景
--snake-color-success今日已打卡状态
--snake-color-warning已打卡日期状态
--snake-color-error节假日文字
--snake-color-white选中和打卡状态文字
--snake-color-text默认日期文字
--snake-color-text-secondary月份切换与辅助文字
--snake-color-text-muted年份切换与弱化文字
--snake-color-text-light未打卡日期状态
--snake-color-border不可选日期与边界
--snake-color-surface日历背景

对应的颜色 Props 可以覆盖单个实例的默认主题值。

为 uni-app 商城与 CMS 场景设计