# 日历事件创建功能设计 **Date:** 2026-03-02 **Status:** Approved --- ## 1. UI 架构 ### 入口 - 位置:月视图和日视图右上角 - 图标:LucideIcons.plus - 点击后从底部弹出创建表单(showModalBottomSheet) ### 底部弹窗表单 - 高度:约占屏幕 80% - 顶部有关闭按钮和"新建日程"标题 - 内含两个可切换的 TabBar(类似苹果日历) ### 两个 Tab | Tab | 字段 | |-----|------| | 基础 | 标题、开始日期/时间、结束日期/时间 | | 进阶 | 描述、地点、颜色、备注 | --- ## 2. 数据模型 ```dart class ScheduleItemModel { String id; // UUID String title; // 标题(必填) String? description; // 描述 DateTime startAt; // 开始时间(必填) DateTime? endAt; // 结束时间 String timezone; // 时区,默认 "Asia/Shanghai" ScheduleMetadata? metadata; // 扩展字段 String sourceType; // 来源,默认 "manual" String status; // 状态,默认 "active" } class ScheduleMetadata { String? color; // 颜色,如 "#3B82F6" String? location; // 地点 String? notes; // 备注 List? attachments; } ``` --- ## 3. Mock 服务设计 参考 `mock_history_service.dart` 模式,创建 `mock_calendar_service.dart`: - 使用 `Env.isMockApi` 开关 - 内存中存储事件列表 - 支持 CRUD 操作 --- ## 4. 日历视图集成 ### 月视图 - `_buildWeekEvents` 遍历当天事件,显示最多 2-3 个事件标题 - 点击日期跳转到日视图 ### 日视图 - `_buildTimelineBoard` 在对应时间位置显示事件块 - 点击事件进入详情页 --- ## 5. 路由 现有路由已支持: - `/calendar/month` - 月视图 - `/calendar/dayweek` - 日视图 - `/calendar/events/:id` - 事件详情页 底部弹窗使用 showModalBottomSheet,无需新路由。 --- ## 6. 实现步骤 1. 创建数据模型 `schedule_item_model.dart` 2. 创建 Mock Calendar Service 3. 创建底部弹窗创建表单组件 4. 在月视图添加 + 号图标 5. 在日视图添加 + 号图标 6. 集成事件显示到月视图 7. 集成事件显示到日视图 8. 更新事件详情页支持编辑