Skip to content

CalendarPunch 签到日历

基础用法

  • 本组件为 sn-calendar 的打卡形态:基于 sn-calendar-view 封装(type 固定为 single)的签到打卡日历。
  • 通过 signedDates 传入已打卡日期(YYYY-MM-DD 字符串数组):已打卡日期显示 signedDotColor(默认主色)圆点;未打卡且可补签的日期显示 unsignedDotColor(默认警告色)圆点;今天以 todayText 文字高亮显示。
  • canSupplement 设为 false 关闭补签:未打卡日期不再显示警告色圆点。
  • 点击日期触发 select 事件,返回 SnCalendarPunchDay(含是否已打卡、是否可补签、完整日期字符串等);组件本身不执行签到,业务侧在 select 回调中处理打卡 / 补签逻辑。
  • minDate 默认为 6 个月前的当月 1 号;firstDayOfWeek 默认 1(周一),星期标题为「周日 ~ 周六」,月份标题格式为「YYYY年MM月」。
vue
<template>
	<sn-calendar-punch v-model="selected" :signed-dates="signedDates" @select="onSelect"></sn-calendar-punch>
</template>

<script lang="uts" setup>
	import { dayuts } from '@/uni_modules/sinle-ui/index.uts'
	import type { SnCalendarPunchDay, SnCalendarValue } from '@/uni_modules/sinle-ui/index.uts'

	const signedDates = ref<string[]>([dayuts().format('YYYY-MM-06'), dayuts().format('YYYY-MM-09')])
	const selected = ref<SnCalendarValue>(null)

	function onSelect(day: SnCalendarPunchDay): void {
		if (day.signed) return
		signedDates.value.push(day.fullDate)
	}
</script>

更多演示请下载 demo 查看

进阶用法

关闭补签

vue
<template>
	<sn-calendar-punch v-model="selected" :signed-dates="signedDates" :can-supplement="false"></sn-calendar-punch>
</template>

属性

参数说明类型默认值可选值
v-model绑定值(type 固定为 single,实际为当天零点时间戳或 null)SnCalendarValuenull-
signedDates已打卡日期列表(YYYY-MM-DD,无效值自动忽略,按天匹配)String[][]-
canSupplement是否允许补签(为 true 时未打卡且不晚于今天的日期显示补签圆点)Booleantruetrue | false
signedDotColor已打卡圆点颜色,支持 $ 简写String$primary-
unsignedDotColor可补签圆点颜色,支持 $ 简写String$warning-
todayText今天日期显示的文字,空时显示原始日期String今天-
todayTextColor今天文字颜色,支持 $ 简写String$warning-
minDate最小可选日期(毫秒时间戳),默认 6 个月前的当月 1 号Numbernull-
maxDate最大可选日期(毫秒时间戳),默认当天起 6 个月Numbernull-
firstDayOfWeek每周第一天(0 为周日)Number10~6
readonly是否只读(禁用切换与选择)Booleanfalsetrue | false
titlePicker点击标题是否展开年月选择面板Booleanfalsetrue | false
switchLongpress长按左右切换按钮是否连续切换Booleantruetrue | false
showWatermark是否显示月份水印数字Booleanfalsetrue | false
rowHeight单行日期高度String | Number$48-
height视图整体高度String | Number$420-
dayFontSize日期字号String | Number$14-
dayRadius日期气泡圆角String | Number$6-
dayGap日期气泡与单元格边缘的间距String | Number$2-
selectedDayBgColor选中日期背景色,支持 $ 简写String$line-
selectedDayTextColor选中日期文字颜色,支持 $ 简写String$text-
dayTextColor日期文字颜色,空时取主题文字色String''-
adjacentDayTextColor非当前月日期文字颜色,空时取主题线条文字色String''-
disabledDayTextColor禁用日期文字颜色,空时取主题禁用文字色String''-
customStyle自定义根节点样式UTSJSONObject | String''-
customClass外部样式类String''-
headerStyle自定义头部样式UTSJSONObject | String''-
headerClass外部样式类String''-
switchStyle自定义月份切换按钮样式UTSJSONObject | String''-
switchClass外部样式类String''-
weekdaysStyle自定义星期标题行样式UTSJSONObject | String''-
weekdaysClass外部样式类String''-
weekdayStyle自定义单个星期标题样式UTSJSONObject | String''-
weekdayClass外部样式类String''-
monthTitleStyle自定义月份标题文字样式UTSJSONObject | String''-
monthTitleClass外部样式类String''-

选中值(v-model),随 type 变化:single 为时间戳 number \| nullrange[][start, end](单点范围写成 [same, same]);multiple 为时间戳数组 number[]

类型说明
number | nullsingle 模式:时间戳或空
number[]multiple 模式:时间戳数组
[] | [start, end]range 模式:空或起止时间戳(单点范围写成 [same, same]

事件

名称类型说明
select(day: SnCalendarPunchDay) => Void点击选中日期时触发,返回打卡信息(SnCalendarPunchDay,见下方类型)
panel-change(detail: SnCalendarPanelChangeDetail) => Void面板所在月份变化时触发

打卡日历(sn-calendar-punch)单日信息。

名称类型必填描述
timestampNumber当天零点毫秒时间戳
yearNumber
monthNumber月(1~12)
dateNumber
fullDateString完整日期字符串(YYYY-MM-DD
signedBoolean是否已打卡
supplementableBoolean是否可补签(canSupplement 开启、未打卡且不晚于今天)
todayBoolean是否今天

panel-change 事件返回的面板切换详情:timestamp(面板首日时间戳)、yearmonth

方法

名称参数返回值描述
scrollToDate(value: Number)-选中指定日期(毫秒时间戳)并跳转到其所在月份

类型

SnCalendarPanelChangeDetailformat 相关的 SnCalendarDay 等类型见 sn-calendar-view 文档的「类型」一节。

使用 MIT 协议