x-addphonerepeatcalendar-s 系统日历
向系统日历添加单次或重复事件。参数与回调对齐微信 wx.addPhoneCalendar / wx.addPhoneRepeatCalendar 和 DCloud success / fail / complete。
对外方法名为 xAddPhoneCalendar、xAddPhoneRepeatCalendar,类型统一加 X 前缀,避免和官方 addPhoneCalendar 同名冲突。
有日历权限时直接写入系统日历;无权限时打开系统新建日程页,用户取消返回 609。
兼容性
| Harmony | iOS | Android | WEB | 微信小程序 |
|---|---|---|---|---|
| 支持 | 支持 | 支持 | 不支持 | 支持 |
调用
ts
import {
xAddPhoneCalendar,
xAddPhoneRepeatCalendar,
XAddPhoneCalendarOptions,
XAddPhoneRepeatCalendarOptions
} from "@/uni_modules/x-addphonerepeatcalendar-s"
xAddPhoneCalendar({
title: "项目评审",
startTime: Math.floor(Date.now() / 1000),
notes: "带上原型稿",
location: "会议室 A",
success: (res) => {
console.log(res.errMsg)
},
fail: (err) => {
console.log(err.errCode, err.errMsg)
}
} as XAddPhoneCalendarOptions)
xAddPhoneRepeatCalendar({
title: "健身打卡",
startTime: Math.floor(Date.now() / 1000),
repeatInterval: "week",
repeatEndTime: Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60
} as XAddPhoneRepeatCalendarOptions)方法
| 名称 | 说明 |
|---|---|
| xAddPhoneCalendar | 添加单次日历事件 |
| xAddPhoneRepeatCalendar | 添加重复日历事件 |
参数
XAddPhoneCalendarOptions / XAddPhoneRepeatCalendarOptions
| 字段 | 说明 | 默认 |
|---|---|---|
| title | 标题 | 必填 |
| startTime | 开始时间 unix 时间戳(秒)。大于 1e11 时按毫秒换算 | 必填 |
| allDay | 是否全天 | false |
| notes | 事件说明。微信端映射为 description | 空 |
| location | 地点 | 空 |
| endTime | 结束时间 unix 时间戳(秒) | 同开始时间 |
| path | 小程序路径,仅微信;会拼到说明 | 空 |
| signature | 路径签名,仅微信 | 空 |
| repeatInterval | 仅重复 API:day / week / month / year | month |
| repeatEndTime | 仅重复 API:重复截止时间戳(秒) | 一直重复 |
| success | 成功 | - |
| fail | 失败 | - |
| complete | 结束,成功带结果,失败为 null | - |
每月重复时,开始日期不能大于 28 日。
错误码
| 码 | 含义 |
|---|---|
| 601 | 标题为空 |
| 602 | 开始时间无效 |
| 603 | 结束时间无效或早于开始时间 |
| 606 | 重复规则无效 |
| 607 | 日历服务不可用 |
| 608 | 写入日历失败 |
| 609 | 用户取消了系统日历创建 |
| 1001 | 系统错误,或正在添加日历事件 |
| 1008 | 当前平台不支持(Web) |
平台差异
- 微信走官方
wx.addPhoneCalendar/wx.addPhoneRepeatCalendar,需用户点击触发,并授权scope.addPhoneCalendar。 - Android 申请
READ_CALENDAR/WRITE_CALENDAR后直接写入CalendarContract。没有可写日历时先创建本地日历。仅用户拒绝权限时才打开系统新建页。 - iOS 使用 EventKit;iOS 17+ 优先写权限。只写权限下列不出真实日历时,改为打开系统
EKEventEditViewController,不再返回 607。无权限时同样打开系统新建日程页。 - HarmonyOS 使用 Calendar Kit。有权限后直接
addEvent;没有本地日历时先createCalendar。仅用户拒绝权限时走editEvent。 - 不写入系统「闹钟提醒」。Android 官方只处理
METHOD_ALERT通知,METHOD_ALARM设备不响;国产日历的闹钟开关没有公开 extra。iOS 日历没有对等的闹钟项。 - Web 返回
1008。
版本
版权归 https://xui.tmui.design 你不得修改及二次开发,仅供 TMUI4 会员商用使用。不得转给非 VIP 会员使用,一经查实数倍赔偿,并追究法律责任。
更新日志
1.0.5(2026-08-17)
- HarmonyOS
index.uts的catch不再标注类型,避免编成.ets后 hvigor 报arkts-no-types-in-catch - 日历权限文案改为插件专属资源名,避免和宿主、其它模块冲突
1.0.4(2026-08-17)
- 去掉
alarm/alarmOffset。Android 官方设备只处理通知提醒,国产日历「闹钟提醒」没有可写 extra;iOS 日历没有对等闹钟项
1.0.3(2026-08-17)
- HarmonyOS 对齐 Android/iOS:授权后直接写入,没有日历时创建本地日历并开启
enableReminder,不再因写入失败跳系统编辑页 - 明确
alarm/alarmOffset写入系统日历闹钟;鸿蒙日历需先打开提醒开关才会响
1.0.2(2026-08-17)
- 修复 Android 申请日历权限时
The requested permission cannot be empty,以及授权后因没有可写日历跳到系统新建页、返回后 pending 未清理导致第二次卡在「正在添加日历事件」 - Android 有权限后直接写入;没有可写日历时先创建本地日历。重复事件改为
DURATION + RRULE,不再同时写DTEND
1.0.1(2026-08-17)
- 修复 iOS 17+ 只写日历权限下
defaultCalendarForNewEvents为空直接返回 607 的问题;无可用日历时改为打开系统新建日程页
1.0.0(2026-08-16)
- 新增
xAddPhoneCalendar/xAddPhoneRepeatCalendar,支持 Android / iOS / HarmonyOS / 微信小程序写入系统日历
