Skip to content

Calendar 日历 ​

日历组件,月/年两种模式,支持选中、禁用日期、周号与键盘网格导航;日期描述走 Intl.DateTimeFormat(locale 感知)。

基础用法 ​

月视图(mode=month)

点击日期选中并派发 oas-change;标题可点开月选择面板快速跳月。

触屏(pointer: coarse)下日格最小高度、月格/年格最小高与头部导航钮自动抬到 44px 触控目标(日格只抬高度不撑宽度,格宽随容器均分)。

年视图 ​

年视图(mode=year)

年模式选中月份派发 yyyy-MM。

禁用范围 ​

min / max 限制

禁用回调 ​

disabled-date(禁用周末)

disabledDate 走 property 传入回调(JSON 无法表达函数)。

周号 ​

显示周号(show-week-number)

事件 ​

oas-change 事件

自定义单元格 ​

事件标记日历(oas-cell-render 标记节假日)

每个日单元格渲染时派发 oas-cell-render(detail: { date, element }),宿主可在单元格内追加标记/徽标/富文本(如节假日、事件点);也可在组件内放 <template slot="cell"> 提供静态骨架,[data-cell-date] 节点自动绑定日期数字。element 内追加 <span class="cell-dot"> 即显示内置标记点(--oas-color-danger token,明暗主题自适应)。

排期条目(events) ​

events 排期条目(声明式标记 + 当日条目浮层)

events 属性/属性通道声明当日条目:[{ date: 'YYYY-MM-DD', title?, color? }]。当日有条目时格内渲染圆点(有 color 用之、无则主色),多于 2 条合并为 +N 徽标;悬停或聚焦当日展开行内条目浮层(标题逐行 + 色点)。纯声明式数据通道,不经手写 oas-cell-render 监听(该事件仍保留为兜底)。不含跨日条目 / 拖拽改期 / 周视图(属 Scheduler 级别能力)。

模式切换 ​

模式切换(month ↔ year 快速跳年)

月视图年视图

mode="year" 显示 12 个月网格,标题栏「上一年/下一年」按钮快速切换年份;点击月份选中(派发 oas-change,value 为 yyyy-MM)并自动切回月视图(派发 oas-mode-change)。受控场景监听 oas-mode-change 后重新设置 mode 属性即可保持指定模式。

周起始覆写 ​

周起始覆写(first-day-of-week)

first-day-of-week 取值 0(周日)~6(周六),缺省随 locale(欧陆/中文周一起始,日/韩/英/阿周日起始;其余走 Intl.Locale 周信息)。

面板月锚点 ​

page-show-date 锚定面板月 + oas-panel-change

page-show-date 把面板初始/受控锚定到指定月份——即使 value 在别的年份(如回显出生日期时希望从当月打开);其优先级高于 value。用户翻页/选月/跳月时派发 oas-panel-change(detail: { date });移除属性后面板回到 value 所在月。

边界翻页 ​

min / max 翻页边界

翻页会跨出 [min, max] 的整月/整年(月面板为整年、十年面板为整十年页)时,「上一月/下一月」按钮自动置灰。

范围选择 ​

range:起止两点选取 + 区间高亮

已选区间:点击起点,再点终点(悬停有预览)

设置 range 进入范围选择模式:第一次点击选定起点(起点高亮),移动指针时悬停日格实时预览区间,第二次点击选定终点并派发 oas-change(detail: { start, end },均为 YYYY-MM-DD 字符串;终点早于起点时自动交换)。起止端点主色实底圆角、中间段主色浅底,颜色全部走 token(与 date-picker daterange 同一视觉语言)。提交后再次点击即重开新一轮(旧区间即时清除)。value 属性以 JSON 数组回显/预置范围:value='["2026-08-05","2026-08-15"]'。

范围 / 多选与选周:请用 date-picker ​

本组件(常驻选择面板)单选日期开箱即用;范围选择已由上方 range 属性覆盖。多选日期、按周选择仍由 date-picker 覆盖——二者共享同一日期网格,语义一致:

  • 多选日期:<oas-date-picker multiple>
  • 按周选择:<oas-date-picker type="week">(值 yyyy-Wnn)

若需要常驻页面里做多选,宿主可把 oas-date-picker 的内层面板相关能力与 oas-calendar 组合,或用 oas-calendar 单选 + 宿主自己维护集合。

自定义头部 ​

header 插槽(自定义头部,缺省内置导航)

排期月历回到今天

slot="header" 分发自定义头部(整体替换内置导航区,宿主自行接管翻页交互——可配合 page-show-date 受控锚定面板月);不分发时保持内置 prev / title / next / today 导航([part="header"] 可定位、::part 改样式)。

面板语言与头部格式 ​

locale 面板语言覆盖

locale 覆盖面板语言:标题/周头/单元格描述等 Intl 格式化、导航与「今天」文案、周起始推导一并跟随;缺省跟随 config-provider 注入或全局 locale。

format 头部日期格式串

format 自定义头部标题格式(token 同 date-picker:yyyy/MM/dd/HH/mm/ss,日面板与月面板标题均适用);十年面板标题为区间形态(2020-2031),格式串不适用。

自定义头部操作条:卡片组合(额外内容,不替换内置导航) ​

要在日历上方放品牌/操作条且保留内置导航,把 oas-calendar 包进宿主自己的卡片,操作条放在顶部即可(需要整体替换头部请用上方 header 插槽):

header 组合:自定义头部操作条

项目排期点标题可钻取年/月,内置「今天」钮回当月

只读日历 ​

readonly:详情页只读 + 事件点

readonly 下可翻页浏览、可进入月/十年面板钻取,但点选与键盘 Enter 不提交——配合 oas-cell-render 标记事件点,即「可看不可改」的详情日历。

全局禁用 ​

disabled:整体不可交互

disabled 整体置灰并停止全部交互(点选/翻页/键盘),配合表单禁用场景;readonly 仍允许浏览。

键盘与快速跳年 ​

扩展键盘 + decade 快速跳远年

  • 键盘:Home/End 跳周首/周尾;PageUp/PageDown 翻上/下一月,Shift 同键翻年;方向键逐格移动,Enter/Space 选中。
  • 快速跳远年:点标题进入月面板,再点年份进入十年网格(按 ±12 年翻页),选年回到该年的月面板、选月回到日视图——从 2026 跳到 1980 约需 7-8 次点击。

非公历历法(calendar-system) ​

农历(calendar-system=chinese)

伊斯兰历(calendar-system=islamic)

calendar-system 透传 Intl.DateTimeFormat 的 calendar 选项(chinese / islamic / hebrew 等):标题、周头、单元格数字与 aria 描述均跟随历法;日期计算与 value / data-date 仍走公历内部模型——历法只影响展示与读屏,选中/提交语义不变。

多月份面板(months) ​

months=2:两个月并排 + 翻页联动

months 设置并排月份面板数(默认 1,正整数,非法/小于 1 回落 1,超出上限收敛 12):面板内网格横向排开、各占等宽,翻页(上一月/下一月)按整段联动(一次步进 months 个月),标题展示月份范围。多面板与 first-day-of-week、show-week-number、range 等属性可组合使用。

API ​

oas-calendar ​

属性 ​

属性说明类型默认值
calendar-system非公历历法(Intl calendar 选项透传,如 chinese/islamic/hebrew):标题/周头/日格数字/aria 跟随;日期计算与 value/data-date 仍为公历string—
disabled整体禁用:置灰并停止全部交互(点选/翻页/键盘)boolean—
events排期条目声明(JSON):[{ date: YYYY-MM-DD, title?, color? }]——当日渲染圆点(有 color 用之,无则主色),>2 合并 +N 徽标;悬停/聚焦当日展开行内条目浮层CalendarEvent[][]
first-day-of-week周起始覆写:0(周日)~6(周六);缺省随 locale(欧陆/中文周一、日/韩/英/阿周日)string—
format头部标题格式串(yyyy/MM/dd token,日/月面板适用)string—
locale面板语言覆盖(标题/周头/单元格描述/导航文案/周起始),缺省走 config-provider > 全局string—
max可选范围(ISO 日期);翻页到整月越界时导航钮自动置灰string—
min可选范围(ISO 日期);翻页到整月越界时导航钮自动置灰string—
modemonth / year(年模式选中月份后自动切回月视图)stringmonth
months并排月份面板数(1-12,默认 1):面板横向排开、翻页按整段联动,标题为月份范围string—
page-show-date面板月锚点(ISO yyyy-MM 或 yyyy-MM-dd):初始/受控锚定显示的月份,优先级高于 value;移除后回到 value 所在月string—
range范围选择模式:两段式选取 + 悬停预览 + 区间高亮,oas-change detail: { start, end },value 以 JSON 数组回显boolean—
readonly只读:可翻页浏览/钻取面板,点选与键盘 Enter 不提交boolean—
show-week-number显示 ISO 周号列boolean—
value选中值(ISO)string—

Property(JS property;是否写回 attribute 见各行说明) ​

Property说明类型默认值
disabledDate禁用日期谓词(property 函数通道,(date) => boolean)((d: Date) => boolean) | null—
events排期条目(CalendarEvent[],{ date, title?, color? }):el.events 读当前生效条目;el.events = [...] 程序性写(同步 events 属性并重渲染,不派发事件)CalendarEvent[][]

事件 ​

事件说明
oas-cell-render每个日单元格渲染时派发,detail: { date, element }(element 为日按钮,宿主可追加标记/徽标/富文本)
oas-change选中变化,detail: { value }
oas-mode-change年模式选中月份自动切回月视图时派发,detail: { mode }
oas-panel-change用户翻页/选月/跳月使面板所在月份变化时派发,detail: { date }(date 为变化后面板首日)

插槽 ​

名称说明
header自定义头部,整体替换内置导航(不分发保持内置 prev/title/next/today)
template[slot="cell"]日单元格静态模板,克隆到每个日按钮;[data-cell-date] 节点自动绑定日期数字

键盘:↑/↓/←/→ 在网格内移动(跨月自动翻页),Home/End 跳周首/周尾,PageUp/PageDown 翻上/下一月(Shift 翻年),Enter/Space 选中。

基于 MIT OR Apache-2.0 双许可发布