- 浏览器打开
http://localhost:3000 - 首次访问注册账户(单用户系统)
- 自动创建"默认日历"
- 开始添加事件
显示注册表单,填写用户名和密码后自动登录并跳转到日历页面。
显示登录表单,输入已注册的用户名和密码。
点击导航栏登出按钮,清除会话 cookie,需重新登录。
- 点击日期数字可在当天创建事件
- 顶部
<>按钮切换月份 - "今天"按钮跳转到当前日期
- 搜索:按
/键打开搜索栏,输入关键词跳转到对应事件(默认启用,可在设置中关闭) - 快捷键:
j/k切换月份,t回到今天,n新建事件,?查看所有快捷键(默认启用,可在设置中关闭)
事件以彩色方块显示在对应日期上,颜色与所属日历一致。点击事件可编辑。
在侧边栏点击日历名称切换显示,隐藏日历时其事件不显示。
点击日历管理按钮,输入名称和颜色,点"创建"。
点击日历旁的编辑按钮修改名称/颜色,点删除按钮删除日历及其所有事件。
在设置页日历管理中通过 ▲▼ 按钮调整日历顺序,顶栏和月视图实时反映。
- 点击日历中的某一天
- 填写标题(必填)、开始/结束时间(必填)
- 可选:全天、描述、地点、颜色、重复规则(如
FREQ=WEEKLY) - 点击"保存"
点击事件打开编辑器,修改后保存。删除为软删除——事件仍可通过直接链接访问。
对重复事件的特定日期创建例外:打开事件 → 选择"例外" → 修改标题/时间或标记取消。
进入导入页面 → "文件"标签 → 选择 .ics 文件 → 勾选要导入的事件 → 导入。
进入导入页面 → "URL"标签 → 输入订阅地址 → 抓取 → 导入。
从日历管理面板一键导入预配置的公共日历(法定节假日等)。
订阅日历旁有 🔄 按钮,点击手动刷新。服务端每天自动刷新一次。
日历管理面板点击导出图标,自动下载 ICS 文件。支持多选批量导出。
在日历管理面板点击"自动备份"按钮,选择要备份的日历和备份间隔(30分钟/1小时/6小时/12小时/24小时),保存后服务端会按间隔自动导出 ICS 文件到 backups/ 目录。每个日历保留最多 10 个备份。
| 设置项 | 说明 |
|---|---|
| 语言 | 中文 / English |
| 每周起始日 | 周日(0) 或 周一(1–6) |
| 日期格式 | zh / en / 自定义 |
| 农历 | 在公历旁显示农历日期 |
| 修改用户名 | 新用户名需唯一 |
| 修改密码 | 输入旧密码和新密码(至少 8 位) |
| 服务器日志 | 展开"显示日志"查看实时日志,按级别过滤,自动刷新,导出 .log 文件 |
(服务器日志已移除,详见服务端 logs/ 目录) |
修改设置后自动保存,右上角弹出绿色 Toast "已保存"。
进入设置 → "备份数据库" 创建 SQLite 快照。点击文件名下载。
恢复:停止服务 → 用备份文件替换 data/calendar.db → 重启。
在日历管理中设置自动备份,服务端按选定间隔导出 ICS 文件。
备份文件保存在 backups/ 目录,每个日历最多保留 10 个。
- 打开应用
- 输入服务端地址(如
https://calendar.example.com) - 登录
显示与 Web 端一致的日历界面,变更通过 REST API 同步。
通过 DAVx5 实现原生 Android 日历同步:
- 安装 DAVx5(F-Droid / Google Play)
- 新建账户 → CalDAV
- 服务器 URL:
https://calendar.example.com/dav/ - 用户名和密码与 Web 登录相同
- DAVx5 自动发现并同步所有日历
支持双向同步:创建、编辑、删除事件在两端同步。
已通过 Android 真机测试。CalDAV 路由与 REST API 各自独立工作(/dav/ vs /api/)。
导入的日历(ics_import 类型)在月视图中以圆点+文字方式显示,
自带颜色的日历以彩色横幅显示。
| 问题 | 解决 |
|---|---|
| 登录失败 | 检查密码,或使用修改密码功能 |
| 日历列表为空 | 先创建日历或检查显示切换 |
| ICS 导入 0 个事件 | 文件可能不含 VEVENT,或格式不标准 |
| 日志显示 Database error | 检查磁盘空间和 db 目录权限 |
| 服务无法启动 | 检查 PORT 占用和 DATABASE_URL 目录权限 |
| CalDAV 同步失败 | 检查 DAVx5 日志(设置→调试信息→分享),关注 "Missing DTSTART" 或 "VALUE=TEXT";确认服务器版本支持完整 CalDAV 协议 |