From 8a1c9debbb44e7763ad4ec124486067c0544bb6b Mon Sep 17 00:00:00 2001 From: ji ruo <79234113+RuoJi6@users.noreply.github.com> Date: Sat, 10 Oct 2026 08:50:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A9=E7=AB=8B=E5=8D=B3=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E6=81=A2=E5=A4=8D=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/schedules.go | 18 +++++++++++++++--- web/src/app/(main)/function/schedules/page.tsx | 4 +++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/server/schedules.go b/server/schedules.go index 67b83fa..34ac5d2 100644 --- a/server/schedules.go +++ b/server/schedules.go @@ -204,11 +204,19 @@ func (s *Server) runScheduleNow(w http.ResponseWriter, r *http.Request) { return } _ = s.m.pg.RecordScheduleHistory(id, 0, "running", true, "手动立即运行") - started, errors := s.runScheduleTasks(item) + started, errors := s.runScheduleTasksNow(item) writeJSON(w, 200, map[string]any{"ok": true, "started": started, "errors": errors}) } func (s *Server) runScheduleTasks(item *db.TaskSchedule) (int, []string) { + return s.startScheduleTasks(item, false) +} + +func (s *Server) runScheduleTasksNow(item *db.TaskSchedule) (int, []string) { + return s.startScheduleTasks(item, true) +} + +func (s *Server) startScheduleTasks(item *db.TaskSchedule, forceManualPause bool) (int, []string) { started := 0 errors := []string{} for _, taskID := range item.TaskIDs { @@ -232,7 +240,7 @@ func (s *Server) runScheduleTasks(item *db.TaskSchedule) (int, []string) { _ = s.m.pg.RecordScheduleHistory(item.ID, taskID, "resume", false, "状态读取失败") continue } - if !managed { + if !managed && !forceManualPause { errors = append(errors, fmt.Sprintf("任务 #%d 由人工暂停,计划不能强制恢复", taskID)) _ = s.m.pg.RecordScheduleHistory(item.ID, taskID, "resume", false, "人工暂停优先") continue @@ -245,7 +253,11 @@ func (s *Server) runScheduleTasks(item *db.TaskSchedule) (int, []string) { } started++ _ = s.m.pg.SetSchedulePaused(item.ID, taskID, false) - _ = s.m.pg.RecordScheduleHistory(item.ID, taskID, "resume", true, "立即运行") + message := "立即运行" + if !managed && forceManualPause { + message = "立即运行(显式恢复人工暂停)" + } + _ = s.m.pg.RecordScheduleHistory(item.ID, taskID, "resume", true, message) } return started, errors } diff --git a/web/src/app/(main)/function/schedules/page.tsx b/web/src/app/(main)/function/schedules/page.tsx index ddabb26..2d8c12e 100644 --- a/web/src/app/(main)/function/schedules/page.tsx +++ b/web/src/app/(main)/function/schedules/page.tsx @@ -528,7 +528,9 @@ export default function SchedulesPage() { else { const result = await api.runScheduleNow(id); if (result.errors?.length) { - toast.warning(`已启动 ${result.started} 个任务,但有 ${result.errors.length} 个任务未启动`); + toast.warning( + `已启动 ${result.started} 个任务,但有 ${result.errors.length} 个任务未启动:${result.errors.join(";")}`, + ); } else { toast.success(`已立即运行 ${result.started} 个任务`); }