Skip to content

CalendarWeek 周日历 ​

基础用法 ​

一次只显示一周的周日历,可左右滑动切换。

  • 选中日期以高亮底色显示,点击日期即可选中
  • 切换按钮按天移动选中日期,横向滑动按周切换
  • 支持可选范围与禁用日期,周起始日、七天标题与事件圆点均可自定义
vue
<template>
	<sn-calendar-week v-model="date" @week-change="onWeekChange"></sn-calendar-week>
</template>

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

	const date = ref<SnCalendarValue>(dayuts().startOf('day').valueOf())

	function onWeekChange(detail: SnCalendarWeekChangeDetail): void {
		console.log(detail.year, detail.month)
	}
</script>

更多演示请下载 demo 查看

进阶用法 ​

范围、禁用日期与圆点 ​

vue
<template>
	<sn-calendar-week v-model="date" :min-date="minDate" :max-date="maxDate"
		:disabled-dates="disabledDates" :format="markFormatter" week-start="monday"></sn-calendar-week>
</template>

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

	const date = ref<SnCalendarValue>(dayuts().startOf('day').valueOf())
	const minDate = ref<number>(dayuts().subtract(1, 'month').startOf('day').valueOf())
	const maxDate = ref<number>(dayuts().add(1, 'month').startOf('day').valueOf())
	const disabledDates = ref<number[]>([dayuts().add(1, 'day').startOf('day').valueOf()])

	const markFormatter: SnCalendarDayFormatter = (day: SnCalendarDay) => {
		if (day.date % 5 == 0) return createCalendarDayContent({ showDot: true, dotColor: '$success' })
		return null
	}
</script>

注意事项 ​

左右切换按钮按「日」为粒度移动选中日期(上一天 / 下一天),横向滑动按「周」切换;视图绘制到可选范围所在的周,可选范围均未设置时从当前周开始。

属性 ​

参数说明类型默认值可选值
v-model选中的日期(当天零点毫秒时间戳)Number | nullnull-
minDate最小可选日期(毫秒时间戳),null 不限制Numbernull-
maxDate最大可选日期(毫秒时间戳),null 不限制Numbernull-
disabledDates禁用日期列表(毫秒时间戳数组,无效值自动忽略)Number[] | nullnull-
weekStart每周起始日Stringsundaysunday | monday | tuesday | wednesday | thursday | friday | saturday
weekTitles七天标题(从周日开始排列,随 weekStart 轮转显示)String[]['日', '一', '二', '三', '四', '五', '六']-
showSwitch是否显示左右切换按钮Booleantruetrue | false
switchIconSize切换按钮图标大小String | Number$18-
switchIconColor切换按钮图标颜色,支持 $ 简写String$textLight-
selectedBgColor选中日期背景色,支持 $ 简写String$primary-
selectedTextColor选中日期文字颜色,支持 $ 简写String$primaryText-
format单日格式化函数,返回 showDot / dotColor 时绘制圆点,返回 text 覆盖日期文字SnCalendarDayFormatternull-
customStyle自定义根节点样式SnStyleValue''-
customClass外部样式类String''-
switchStyle自定义切换按钮样式SnStyleValue''-
switchClass外部样式类String''-
weeksStyle自定义周滑动区样式SnStyleValue''-
weeksClass外部样式类String''-
weekStyle自定义单周容器样式SnStyleValue''-
weekClass外部样式类String''-
dayStyle自定义日期格样式SnStyleValue''-
dayClass外部样式类String''-
dayTitleStyle自定义周标题文字样式SnStyleValue''-
dayTitleClass外部样式类String''-
dayTextStyle自定义日期文字样式SnStyleValue''-
dayTextClass外部样式类String''-

日期格格式化器:返回 null 表示使用默认内容。

参数类型说明
daySnCalendarDay日期格信息
返回值SnCalendarDayContent | null格式化后的内容,null 表示使用默认内容

事件 ​

名称类型说明
select(value: Number) => Void点击选中日期时触发
change(value: Number) => Void选中值变化时触发
week-change(detail: SnCalendarWeekChangeDetail) => Void当前周切换时触发(滑动、方法跳转均会触发)

week-change 事件返回详情。

名称类型必填描述
timestampNumber是当前周第一天零点毫秒时间戳
yearNumber是当前周第一天所在年
monthNumber是当前周第一天所在月(1~12)

方法 ​

名称参数返回值描述
scrollToDate(value: Number)-选中指定日期(毫秒时间戳,自动裁剪到范围内)并跳转到其所在周

类型 ​

SnCalendarWeekStartDay ​

每周起始日:'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday'。

单日数据(组件内部渲染使用)。

名称类型必填描述
timestampNumber是当天零点毫秒时间戳
textString是日期文字(可被 format 覆盖)
weekTitleString是周标题文字(如「周一」)
todayBoolean是是否今天
disabledBoolean是是否禁用
showDotBoolean是是否显示圆点
dotColorString是圆点颜色(支持 $ 简写,默认警告色)

format 相关的 SnCalendarDay / SnCalendarDayContent / SnCalendarDayPaint 等类型见 sn-calendar-view 文档的「类型」一节。

使用 MIT 协议