Skip to content

BizCalendarBoard 日期排版 ​

月/周双模式日期排版板:月模式按天网格铺满整月(动态行数),周模式 7 天横排;头部支持上一月/下一月(周模式为上一周/下一周)切换与「今天」回跳。单元格内容经 #cell 作用域插槽完全自定义;当天之前的日期默认禁用(不可选中、不触发事件),并支持 min/max 范围与 disabled-date 组合圈定可交互区间。排班、考勤、预约、营销日历等一切「按天组织内容」的场景。

基础用法 ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
已上线
25
26今
27
需求评审
28
29
版本发布
30
31
上线窗口
1

选中:未选择;灰色单元格为当天之前的日期,点击不生效。

月模式 + v-model 选中 + marks 标记(色点 + 文案);当天之前自动禁用,历史只读。

周模式排班 ​

2026年第44周(10.26 - 11.1)
10月26日 周一今
早班
10月27日 周二
中班晚班
10月28日 周三
10月29日 周四
早班中班
10月30日 周五
10月31日 周六
11月1日 周日

点击本周及以后的日期逐个追加班次(满 3 个后再点即清空);当天之前的日期组件已禁用,不会被误改。

v-model:mode 切到周模式,#cell 插槽自绘班次标签;点击未来日期逐个追加班次,历史日期被组件拦截不会误改。

考勤月历(只读 + 周末高亮) ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
外勤
21
正常
22
缺卡
23
正常
24
迟到
25
正常
26今
27
28
补卡截止
29
30
31
1

历史月份自动整体禁用只读;周末列红色高亮,红点=迟到、灰点=缺卡、橙点=外勤。

selectable=false 纯展示 + highlight-weekend 周末高亮;历史打卡状态经 marks 色点呈现。

场地预约(范围与自定义禁用) ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26今
27
余 6
28
余 0
29
余 12
30
31
余 3
1
余 8

仅 30 天内可约(其余日期禁用);周日闭馆整体禁用;点满员日期给出告警。

max-date 圈定 30 天可约窗口、disabled-date 屏蔽每周日(闭馆),#cell 插槽展示剩余名额。

外部控制与实例方法 ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26今
27
28
29
30
31
1

当前面板范围:点击上方按钮查看

expose(switchPrev / switchNext / switchToday / goTo / setMode / getViewRange)+ view-change 事件轨迹与面板范围回显。

营销日历(完全自定义单元格) ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
返场清仓
24
25
26今
双促预热
27
28
新品首发
直播开卖
29
30
31
1
会员日直播

蓝条=促销、绿条=新品、橙条=直播;历史活动自动呈灰色已结束态,当天之前的日期不可再选。

#cell 插槽完全接管单元格:活动条目分类着色、历史活动自动呈已结束态。

日程事件(基础) ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26今
09:30-10:00晨会同步14:00-15:30版本评审
27
10:00-11:30客户拜访
28
29
周年庆活动
30
31
16:00-16:301v1 沟通
1

点击事件条:(尚未点击事件);点击空白格选中日期(cell-click 可挂「新建日程」)。

events 数据驱动事件条:时段(time 前缀)+ 语义色 + 全天(allDay 描边形态);点击事件条外抛 event-click,点击空白格选中日期可挂「新建日程」。

日程事件(溢出折叠) ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26今
09:00产品评审10:30面试-前端13:30架构讨论 +2 项
27
28
11:00项目例会
29
30
31
1

单格最多渲染 3 条,超出折叠为「+N 项」;event-limit 可按格子高度自由调整。

单日事件超出 event-limit(默认 3)自动折叠为「+N 项」,点击外抛 event-more(携带当日完整事件列表)——会议室预约等密集场景按格子高度调节 limit 即可。

日程事件(跨天 / 全天排期) ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26今
27
618 大促
28
618 大促新品巡展
29
618 大促新品巡展
30
618 大促
31
1
19:00-21:00会员夜场

跨天事件在区间内每日铺满(描边轻量形态);最近点击:(尚未点击);切到周模式可逐日查看排期。

跨天事件声明 date ~ end 区间后每日铺满该事件条(描边轻量形态),切到周模式可逐日核对排期;meta 附加数据随事件原样带出。

日程事件(新建与查看联动) ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26今
10:00-11:00迭代规划
27
28
15:00用例评审
29
30
版本发布
31
1

点击空白格按日期新建日程、点击事件条查看详情——事件列表是响应式数据,增删后事件条即时刷新。

cell-click 空白格按日期新建(弹窗录入)、event-click 点击查看详情;事件列表是响应式数据,增删后事件条即时刷新。

日程导出 .ics ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26今
09:30-11:00季度经营分析会
27
28
供应商年度审计
29
供应商年度审计
30
供应商年度审计
31
1

time(09:30-11:00)→ 当日 VEVENT 起止时刻;跨天(28~30)→ 起日 0 点 ~ 止日次日 0 点全天口径;allDay → 单日全天。

expose.exportIcs() 一键下载标准 .ics:time → 当日 VEVENT 起止时刻(止时 ≤ 起时视为跨零点顺延一日);跨天 → 起日 0 点 ~ 止日次日 0 点;allDay → 单日全天;UID 稳定取 id@biz-calendar-board,重复导入按同一条目更新而非重复建条。

按视图范围导出 ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
月度安全巡检
10
11
12
13
14
15
16
17
18
19
20
21
14:00-15:30新品评审会
22
23
24
25
26今
27
28
29
30
31
1
(尚未读取)

exportIcs 按 events 全量导出;如需「仅当前视图」,用 getViewRange() 区间过滤 events 后再触发导出(事件源由业务侧控制)。

getViewRange() 取当前面板区间——过滤事件源后再导出即得「仅当前视图」子集(事件源由业务侧控制)。

导出口径预览(事件粒度) ​

2026年10月
一
二
三
四
五
六
日
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26今
27
09:00-09:30晨会15:00-16:30客户到访
28
29
30
31
1

(点击日历中的事件条查看导出口径)

点击事件条预览其 .ics VEVENT 换算口径;配合导出按钮即可「先看再导」。

event-click 展示该事件将写入 VEVENT 的起止换算口径,先看再导。

Props ​

属性名类型默认值说明
model-value / v-modelstring | Date—选中日期;update 始终返回当日 0 点的 Date
mode / v-model:mode'month' | 'week''month'展示模式(月网格 / 周横排)
first-day-of-week0 | 1 | 2 | 3 | 4 | 5 | 61周起始日(0 周日)
disable-pastbooleantrue当天之前不允许修改(禁用且不触发事件)
min-datestring | Date—可交互最早日期(含当天)
max-datestring | Date—可交互最晚日期(含当天)
disabled-date(date: Date) => boolean—自定义禁用函数,返回 true 禁用
marksBizCalendarBoardMark[][]单元格标记(默认内容渲染色点 + 文案,可被 #cell 接管)
eventsBizCalendarEvent[][]日程事件列表:传入后单元格默认渲染事件条(时间 + 标题 + 语义色,allDay 描边形态),跨天事件按 date ~ end 区间每日铺满;#cell 插槽仍可完全接管
event-limitnumber3每格最多渲染的事件条数,超出折叠为「+N 项」(点击外抛 event-more)
selectablebooleantrue点击单元格是否更新 v-model 选中态;纯展示置 false
highlight-weekendbooleanfalse高亮周末(表头与单元格日期)
show-mode-switchbooleantrue展示月/周切换按钮组
show-todaybooleantrue展示「今天」回跳按钮(已在当前面板时置灰)
month-cell-heightnumber96月模式单元格高度 px
week-cell-heightnumber220周模式单元格高度 px

BizCalendarBoardMark:{ date: string \| Date, type?: 'primary' \| 'success' \| 'warning' \| 'danger' \| 'info', text?: string }。 BizCalendarEvent:{ id, title, date, end?, type?, time?, allDay?, meta? }——end 晚于 date 即跨天事件(区间每日渲染);time 为 '09:00-10:30' 类展示文案;meta 随事件点击原样带出。 禁用判定:disable-past(今天 0 点前)、min-date、max-date、disabled-date 任一命中即禁用;禁用单元格不响应点击(无 hover、无事件)。

Events ​

事件名参数说明
update:model-value(value: Date)选中日期变化(当日 0 点)
update:mode(mode: 'month' | 'week')月/周模式切换
cell-click(cell: BizCalendarBoardCell)启用单元格点击(禁用单元格不触发)
event-click(event: BizCalendarEvent)日程事件条点击(已阻止冒泡,不触发单元格选中)
event-more({ date, key, events })某日事件超出 event-limit,点击「+N 项」查看当日全部事件
view-change(payload: BizCalendarBoardViewChange)视图切换:{ viewDate, mode, source };source 为 prev / next / today / go-to / mode / select / prop

BizCalendarBoardCell:{ date, key, year, month, day, weekDay, weekDayText, inPanel, isToday, isSelected, disabled, past, weekend, mark, events }——key 为 'YYYY-MM-DD',可直接作业务数据 Map 的 key;events 为当日事件列表(含跨天铺满条目)。

Slots ​

插槽名说明
header{ title, mode, viewDate } 标题区整体替换(默认渲染「YYYY年M月 / YYYY年第N周」)
header-extra操作区追加内容(位于模式切换与翻页按钮之前)
cell{ ...BizCalendarBoardCell } 单元格内容,完全自定义;缺省渲染 mark 色点 + 文案

Expose ​

属性/方法说明
switchPrev切换到上一月 / 上一周
switchNext切换到下一月 / 下一周
switchToday回跳到今天所在月 / 周
goTo(date: string | Date) => boolean 跳转到指定日期所在面板
setMode(mode: 'month' | 'week') => void 切换展示模式
getViewRange() => { start: Date; end: Date } 当前面板起止日期(当日 0 点)
exportIcs(options?: { filename?: string }) => number 导出标准 .ics 日历文件(跨天 / 全天 / time 时段及跨零点口径换算,UID 稳定去重),返回导出条数;Outlook / 系统日历 / 企业微信可直接导入