拖拽与选择
两个开关解锁全部交互:editable 允许用户移动和调整事件,selectable 允许在空白处拖选时间范围。组件内置了合理的弹层交互,也可以用回调完全替换。
内置弹层(零配置)
不配置任何回调时,日历开箱即用地提供类似 Google 日历的交互:点击日程弹出详情弹层(时间、所属日历、地点、描述、删除按钮);点击或框选空白区域弹出快速新建弹层,可输入标题并选择日历。
快速新建弹层在保存前可微调所选范围:开始与结束时间都是可编辑的日期/时间输入框(可精确到任意分钟,不再吸附到 slotDuration),并支持“全天”切换与跨天范围。
试试:点击日程、框选空白时段
周一
7
周二
8
周三
9
周四
10
周五
11
周六
12
周日
13
全天
1时
2时
3时
4时
5时
6时
7时
8时
9时
10时
11时
12时
13时
14时
15时
16时
17时
18时
19时
20时
21时
22时
23时
0时
优先级 —
提供 onEventClick 时详情弹层让位;提供 onSelect / onDateClick 时快速新建让位。也可以用 eventDetails={false} 或 quickCreate={false} 直接关闭内置弹层。开启 selectable 或 editable 即可使用快速新建。
用回调自定义交互
可编辑、可框选(自定义回调)
周一
7
周二
8
周三
9
周四
10
周五
11
周六
12
周日
13
全天
1时
2时
3时
4时
5时
6时
7时
8时
9时
10时
11时
12时
13时
14时
15时
16时
17时
18时
19时
20时
21时
22时
23时
0时
· drag events, resize them, or drag across empty slots ·
用户可以做什么
- 把事件块拖到其他时间或日期(周/日视图)。
- 把事件条拖到其他日期(月视图),或在全天栏内横向拖动全天事件。
- 拖动事件块底边调整时长。
- 拖动重复实例——确认弹层提供“仅此日程”或“此次及以后”。
- 在空白时间格上拖选一个范围(触发 onSelect)。
- 在月视图单元格上拖选一个日期范围。
- 点击空白时间格或日期(触发 onDateClick)。
触屏设备 —
轻点等同于点击;长按约 300 毫秒(伴随触感反馈)后拖动即可移动、调整或框选——普通滑动仍然正常滚动页面。
回调
| 回调 | 触发时机 | 参数 |
|---|---|---|
onEventClick | 事件被点击或通过键盘激活 | (instance, mouseOrKeyboardEvent) |
onDateClick | 空白时间格 / 日期格被点击 | (date, allDay) |
onSelect | 拖选结束 | { start, end, allDay } |
onEventChange | 拖动或调整完成落地 | { event, oldStart, oldEnd, start, end, revert } |
onEventCreate | 快速新建弹层添加了日程 | (event) |
onEventDelete | 日程(或系列中的某一次)被删除 | (event, occurrence?) |
onSeriesDetach | 拖拽/调整导致某次从系列中拆分 | { series, detached, occurrence } |
onRangeChange | 可见日期范围变化——适合在此拉取数据 | (start, end) |
onViewChange / onDateChange | 视图 / 聚焦日期变化 | (view) / (date) |
保存到服务器并支持回滚
日历会先乐观地应用变更,再调用 onEventChange。如果 API 保存失败,调用 revert() 即可把事件弹回原位:
async function onEventChange({ event, start, end, revert }) {
try {
await api.updateEvent(event.id, { start, end });
} catch {
revert(); // restore the previous times
}
}权限规则
- 组件上的 editable 是总开关。
- source.editable = false 会锁定该日历源下的全部事件。
- event.editable 可按事件覆盖以上两者。
- 重复事件的实例不可拖动——一个重复系列没有单一的“时间”可供移动,请直接在数据中修改系列的 start / recurrence。