64 lines
1.8 KiB
Markdown
64 lines
1.8 KiB
Markdown
# 日历提醒字段与详情页对齐设计
|
|
|
|
**Date:** 2026-03-11
|
|
**Status:** 已确认
|
|
|
|
## 目标
|
|
|
|
- 修复日历事件详情页字段映射错误,去掉 raw metadata 直出
|
|
- 新增可持久化的提醒字段(方案1):`metadata.reminder_minutes`
|
|
- 打通前后端和 AgentScope 工具调用链
|
|
- 用前端本地通知实现系统提醒与震动
|
|
|
|
## 数据契约
|
|
|
|
### metadata 结构
|
|
|
|
```json
|
|
{
|
|
"color": "#4F46E5",
|
|
"location": "会议室A",
|
|
"notes": "带电脑",
|
|
"attachments": [],
|
|
"reminder_minutes": 15,
|
|
"version": 1
|
|
}
|
|
```
|
|
|
|
### 字段规则
|
|
|
|
- `reminder_minutes`: `int | null`
|
|
- 取值范围:`0..10080`(0 表示准时提醒,10080 表示最多提前 7 天)
|
|
- 兼容历史数据:缺失或 null 视为无提醒
|
|
|
|
## 前端设计
|
|
|
|
1. 模型层(`ScheduleMetadata`)新增 `reminderMinutes`
|
|
2. 详情页:提醒时间改为结构化渲染
|
|
- null: `无`
|
|
- 0: `准时提醒`
|
|
- n: `开始前 n 分钟`
|
|
3. 创建/编辑弹层新增提醒选项,默认值为 `15`
|
|
4. 删除 metadata raw 原样渲染区块
|
|
|
|
## 本地通知设计
|
|
|
|
- 采用 Flutter 本地通知,调度时间:`startAt - reminderMinutes`
|
|
- 创建/编辑成功:重建该事件通知
|
|
- 删除成功:取消该事件通知
|
|
- App 启动后:扫描未来事件并重建通知(补偿机制)
|
|
|
|
## 后端与 AgentScope 设计
|
|
|
|
1. `ScheduleItemMetadata` 增加 `reminder_minutes`
|
|
2. service 继续走 `metadata -> extra_metadata`,不加新 DB 列
|
|
3. AgentScope `calendar.write` 增加 `reminder_minutes` 参数
|
|
4. CrewAI calendar tool 将 `reminderMinutes` 映射为 `metadata.reminder_minutes`
|
|
5. calendar tool 回包增加 `reminderMinutes` 字段
|
|
|
|
## 验证策略
|
|
|
|
- 后端:schemas/service/agentscope 单元测试
|
|
- 前端:calendar_api 与详情页渲染测试
|
|
- 手动:创建提醒 -> 等待系统通知与震动 -> 更新/删除后确认调度变更
|