Calendar 日历
介绍
日历组件,支持单选、多选和范围选择,可显示农历、周末颜色和法定节假日标注。
引入
typescript
import { TnCalendar } from "@tuniao/tn-ui";代码演示
基础用法(单选)
默认模式为 date,点击日期即可选中。通过 modelValue 绑定选中的日期字符串。

点我查看代码
typescript
@Local selectedDate: string = "2026-03-14";
TnCalendar({
modelValue: this.selectedDate,
onChange: (value: string | string[]) => {
this.selectedDate = value as string;
},
})多选模式
通过 mode 设置为 multi,可同时选择多个日期。modelValue 类型为 string[]。

点我查看代码
typescript
@Local selectedDates: string[] = ["2026-03-12", "2026-03-20"];
TnCalendar({
modelValue: this.selectedDates,
mode: "multi",
onChange: (value: string | string[]) => {
this.selectedDates = value as string[];
},
})范围选择
通过 mode 设置为 range,选择一个日期范围。可通过 rangeStartDesc 和 rangeEndDesc 自定义起止文案。

点我查看代码
typescript
@Local dateRange: string[] = ["2026-03-03", "2026-03-20"];
TnCalendar({
modelValue: this.dateRange,
mode: "range",
rangeStartDesc: "开始",
rangeEndDesc: "结束",
onChange: (value: string | string[]) => {
this.dateRange = value as string[];
},
})农历显示
通过 showLunar 属性开启农历显示。

点我查看代码
typescript
@Local selectedDate: string = "";
TnCalendar({
modelValue: this.selectedDate,
showLunar: true,
onChange: (value: string | string[]) => {
this.selectedDate = value as string;
},
})周末颜色
通过 showWeekendColor 属性为周末日期添加颜色区分。

点我查看代码
typescript
@Local selectedDate: string = "";
TnCalendar({
modelValue: this.selectedDate,
showWeekendColor: true,
onChange: (value: string | string[]) => {
this.selectedDate = value as string;
},
})法定节假日
通过 holidays 属性传入节假日数据,在日历中标注假期和调休。

点我查看代码
typescript
@Local selectedDate: string = "2026-03-14";
const holidays: TnCalendarHolidayItem[] = [
// 清明节
{ date: "2026-04-04", type: "holiday" },
{ date: "2026-04-05", type: "holiday" },
{ date: "2026-04-06", type: "holiday" },
// 劳动节
{ date: "2026-05-01", type: "holiday" },
{ date: "2026-05-02", type: "holiday" },
{ date: "2026-05-03", type: "holiday" },
{ date: "2026-05-04", type: "holiday" },
{ date: "2026-05-05", type: "holiday" },
// 补班
{ date: "2026-04-26", type: "workday" },
{ date: "2026-05-09", type: "workday" }
];
TnCalendar({
modelValue: this.selectedDate,
holidays: holidays,
onChange: (value: string | string[]) => {
this.selectedDate = value as string;
},
})自定义颜色
通过 activeBgColor、activeTextColor、rangeBgColor、rangeTextColor 自定义选中态样式。

点我查看代码
typescript
@Local dateRange: string[] = ["2026-03-11"];
TnCalendar({
modelValue: this.dateRange,
mode: "date",
activeBgColor: "#ff6700",
activeTextColor: "#FFFFFF",
//rangeBgColor: "#FFE0E0",
//rangeTextColor: "#FF6B6B",
onChange: (value: string | string[]) => {
this.dateRange = value as string[];
},
})日期范围限制
通过 minDate 和 maxDate 属性限制可选的日期范围,格式为 YYYY-MM-DD。
点我查看代码
typescript
@Local selectedDate: string = "2026-03-14";
TnCalendar({
modelValue: this.selectedDate,
minDate: "2026-03-01",
maxDate: "2026-03-31",
onChange: (value: string | string[]) => {
this.selectedDate = value as string;
},
})API
Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| modelValue | 选中的日期值 | string | string[] | - |
| mode | 选择模式 | "date" | "multi" | "range" | "date" |
| minDate | 可选的最小日期,格式 YYYY-MM-DD | string | - |
| maxDate | 可选的最大日期,格式 YYYY-MM-DD | string | - |
| allowChangeYear | 是否允许切换年份 | boolean | true |
| allowChangeMonth | 是否允许切换月份 | boolean | true |
| activeBgColor | 选中日期的背景色 | string | - |
| activeTextColor | 选中日期的文字色 | string | - |
| rangeBgColor | 范围内日期的背景色 | string | - |
| rangeTextColor | 范围内日期的文字色 | string | - |
| rangeStartDesc | 范围起始日期的描述文案 | string | "开始" |
| rangeEndDesc | 范围结束日期的描述文案 | string | "结束" |
| showLunar | 是否显示农历 | boolean | false |
| showWeekendColor | 是否为周末日期显示颜色 | boolean | false |
| holidays | 法定节假日数据 | TnCalendarHolidayItem[] | - |
TnCalendarHolidayItem
| 属性 | 说明 | 类型 |
|---|---|---|
| date | 日期,格式 YYYY-MM-DD | string |
| type | 节假日类型 | TnCalendarHolidayType |
TnCalendarHolidayType
typescript
type TnCalendarHolidayType = "holiday" | "workday";"holiday"-- 法定假日"workday"-- 补班日(调休)
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| onChange | 选中日期变化时触发 | (value: string | string[]) => void |
| onChangeYear | 切换年份时触发 | (year: number) => void |
| onChangeMonth | 切换月份时触发 | (month: number) => void |
