fix: 完成循环提醒时自动创建下一个提醒

当用户勾选完成循环提醒时,自动根据循环类型计算下一个日期,
并创建新的提醒事件

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
ddshi 2026-03-03 20:04:35 +08:00
parent 16a2c7a043
commit 8fad17ee08

View File

@ -244,6 +244,57 @@ router.put(
args.push(data.is_holiday ? 1 : 0);
}
// 检查是否是完成循环提醒
let newEventCreated = false;
if (data.is_completed === true && data.repeat_type !== 'none') {
// 获取当前事件的详细信息用于创建新提醒
const currentEvent = existing.rows[0] as EventRow;
if (currentEvent) {
// 计算下一个提醒日期
const currentDate = new Date(currentEvent.date);
let nextDate: Date;
switch (currentEvent.repeat_type) {
case 'daily':
nextDate = new Date(currentDate);
nextDate.setDate(nextDate.getDate() + 1);
break;
case 'weekly':
nextDate = new Date(currentDate);
nextDate.setDate(nextDate.getDate() + 7 * (currentEvent.repeat_interval || 1));
break;
case 'monthly':
nextDate = new Date(currentDate);
nextDate.setMonth(nextDate.getMonth() + 1);
break;
case 'yearly':
nextDate = new Date(currentDate);
nextDate.setFullYear(nextDate.getFullYear() + 1);
break;
default:
nextDate = currentDate;
}
// 创建新的提醒事件
const newEventId = crypto.randomUUID();
const newDateValue = nextDate.toISOString();
// 新的 reminder_times 应该是原日期,用于下一次完成时再次创建
// reminder_times 在数据库中是 JSON 字符串
let reminderTimesValue = currentEvent.reminder_times;
if (!reminderTimesValue) {
reminderTimesValue = JSON.stringify([currentEvent.date]);
}
await db.execute({
sql: `INSERT INTO events (id, user_id, type, title, content, date, is_lunar, repeat_type, repeat_interval, next_reminder_date, is_holiday, is_completed, priority, reminder_times, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?, datetime('now'), datetime('now'))`,
args: [newEventId, req.user!.userId, currentEvent.type, currentEvent.title, currentEvent.content, newDateValue, currentEvent.is_lunar, currentEvent.repeat_type, currentEvent.repeat_interval, currentEvent.next_reminder_date, currentEvent.is_holiday, currentEvent.priority, reminderTimesValue],
});
newEventCreated = true;
console.log('[Complete Repeat] Created new reminder:', newEventId, 'date:', newDateValue);
}
}
if (data.is_completed !== undefined) {
updates.push('is_completed = ?');
args.push(data.is_completed ? 1 : 0);