From 8fad17ee08126e0135b8981966050af1e1ab54e2 Mon Sep 17 00:00:00 2001 From: ddshi <8811906+ddshi@user.noreply.gitee.com> Date: Tue, 3 Mar 2026 20:04:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=8C=E6=88=90=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E6=8F=90=E9=86=92=E6=97=B6=E8=87=AA=E5=8A=A8=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E4=B8=8B=E4=B8=80=E4=B8=AA=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当用户勾选完成循环提醒时,自动根据循环类型计算下一个日期, 并创建新的提醒事件 Co-Authored-By: Claude Opus 4.6 --- src/routes/events.ts | 51 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/routes/events.ts b/src/routes/events.ts index 7e09c1e..49db200 100644 --- a/src/routes/events.ts +++ b/src/routes/events.ts @@ -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);