kuaifan
6b54b7b1c5
feat(todo): 聊天待办支持提醒时间(到点引用原消息+@提及)
给消息待办增加可选「提醒时间」,到点由 todo-alert 机器人对原消息发起
reply、正文 @ 仍在群内的被指派成员,完全复用原生回复/提及链路(定向未读、
红点、绕过会话免打扰、App 推送);被指派人全部退群则跳过发送并标记已提醒。
设/改/取消提醒的权限沿用 todo_set_permission 开关与 checkTodoOwnerPermission。
后端:
- 迁移:web_socket_dialog_msg_todos 增加 remind_at/reminded_at 及索引,
注册为日期字段
- WebSocketDialogMsgTodo::dueReminders() 选取到点(未提醒/未完成)待办(limit 500)
- WebSocketDialogMsg::setTodoRemind() 纯数据写入(改时间重置 reminded_at),
接入 toggleTodoMsg($remindAt) 与 msg__todo 透传
- 接口 msg__todoremind 设置/修改/取消提醒(权限闸门、消息类型校验、
pushMsg 同步 todo_done)
- TodoRemindTask 到点按消息发提醒(reminded_at 防重复、迟发补发、原消息/
会话删除兜底),buildRemindText 生成 <span class="mention user"> 文本,
接入 crontab;登记 todo-alert 机器人
- msgJoinGroup 从提醒文本中提取被 @ 成员
前端:
- 设待办弹窗新增「提醒时间」(预设 + 自定义 DatePicker)
- 待办详情浮层每条待办可查看/修改/取消提醒:DatePicker on-clear「清空」
二次确认后取消,无时间时仅关闭面板不发请求
- 待办浮层窄屏(≤500px)改为 待办/完成 tab 切换,宽屏维持双列;列表为空
展示空状态占位;提醒时间用 Icon 替换 emoji
- 时间读写对齐项目任务时间的时区约定
测试:tests/Feature/TodoRemindTest(数据/选取/写入/权限决策/buildRemindText/
text mention 提取),TodoSetPermissionTest 无回归。
任务 #124 后续增强。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:08:34 +00:00
..
2025-04-14 18:23:04 +08:00
2026-04-05 12:34:27 +00:00
2026-06-01 12:08:34 +00:00
2026-04-05 09:31:41 +00:00
2026-01-12 09:02:58 +08:00
2025-09-24 20:31:54 +08:00
2025-09-24 20:49:09 +08:00
2025-06-04 15:08:31 +08:00
2024-10-22 20:39:09 +08:00
2025-06-04 15:14:31 +08:00
2025-10-13 18:22:25 +08:00
2025-03-18 18:36:20 +08:00
2026-06-01 01:26:34 +00:00
2026-05-21 06:06:39 +00:00
2024-11-18 15:09:22 +08:00
2026-05-03 00:05:31 +00:00
2025-04-07 14:32:24 +08:00
2025-04-07 14:32:24 +08:00
2026-04-05 09:31:41 +00:00
2026-05-11 15:40:57 +00:00
2025-06-03 20:10:22 +08:00
2023-12-14 13:17:49 +08:00
2025-09-24 18:39:25 +08:00
2025-03-14 19:53:00 +08:00
2026-06-01 12:08:34 +00:00
2025-09-26 12:13:38 +08:00
2025-11-06 14:53:16 +00:00
2026-01-12 09:07:10 +08:00
2025-03-26 14:17:15 +08:00
2023-03-24 09:08:53 +08:00
2026-06-01 01:26:34 +00:00
2026-01-14 09:14:35 +08:00
2025-03-18 18:36:20 +08:00
2026-05-21 00:14:36 +00:00
2025-08-01 08:23:35 +08:00
2026-05-21 06:06:39 +00:00
2026-01-12 09:02:58 +08:00
2022-01-13 00:30:36 +08:00
2025-03-18 18:36:20 +08:00
2026-05-21 04:46:11 +00:00
2025-09-22 16:09:33 +08:00
2026-05-21 00:14:36 +00:00
2025-09-26 12:13:38 +08:00
2026-01-12 09:02:58 +08:00
2026-01-15 10:48:56 +00:00
2026-01-15 10:48:56 +00:00
2025-03-18 18:36:20 +08:00
2025-04-07 01:21:50 +08:00
2026-05-11 03:26:59 +00:00
2025-12-26 02:42:47 +00:00
2025-08-01 11:27:00 +08:00
2026-05-21 00:14:36 +00:00
2025-08-01 11:27:00 +08:00
2026-05-29 23:32:24 +00:00
2025-02-14 20:41:04 +08:00
2024-11-21 16:02:53 +08:00
2025-04-14 15:29:53 +08:00
2025-04-13 00:18:39 +08:00
2025-09-24 23:49:22 +08:00
2026-01-22 05:32:27 +00:00
2024-01-17 23:22:13 +08:00
2026-05-21 00:14:36 +00:00
2026-05-11 03:26:59 +00:00
2023-04-06 10:34:23 +08:00
2026-06-01 01:26:34 +00:00
2026-01-07 03:11:34 +00:00
2026-06-01 01:26:34 +00:00
2025-11-06 02:01:15 +00:00