From 21d0aba713a2e863028876c28407f51535a4f1ed Mon Sep 17 00:00:00 2001 From: ThearchyHelios Date: Mon, 5 Oct 2026 09:04:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=A4=8D=E6=A0=B8=E4=BF=AE=E6=AD=A3=EF=BC=9A=E7=AB=8B?= =?UTF-8?q?=E5=8D=B3=E8=BF=90=E8=A1=8C=E4=B9=8B=E5=90=8E=E5=8F=AA=E6=8D=A2?= =?UTF-8?q?=E4=B8=8A=E6=AC=A1=E8=A7=A6=E5=8F=91=EF=BC=8C=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E8=BD=BD=E5=85=A5=E5=A4=B1=E8=B4=A5=E6=97=B6=E5=BC=B9=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 立即运行回来以后原先拿点下去那一刻的整行盖回列表,请求途中开关改过的状态会被旧值冲掉;现在只换这一行的上次触发,其余以随后静默重取的为准。读到过列表之后,409 之后的重新载入、断线恢复后的重取失败了也弹提示,不再一声不吭地留着旧列表;30 秒一次的定时刷新失败照旧不吭声。 --- frontend/src/pages/schedules/SchedulesPage.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/schedules/SchedulesPage.tsx b/frontend/src/pages/schedules/SchedulesPage.tsx index d1ad3eff..cbf8551d 100644 --- a/frontend/src/pages/schedules/SchedulesPage.tsx +++ b/frontend/src/pages/schedules/SchedulesPage.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { Link, useNavigate, useParams } from 'react-router-dom' import { CalendarClock, Play, Plus, Trash2 } from 'lucide-react' import { api } from '../../api/client' -import { EmptyState, ErrorState, IconButton, PageHeader, Skeleton, Spinner, useTicker } from '../../components/ui' +import { EmptyState, ErrorState, IconButton, PageHeader, Skeleton, Spinner, toast, useTicker } from '../../components/ui' import { useOnReconnect } from '../../store/catalog' import { SCHEDULE_TEXT as T } from '../../lib/terms' import type { Schedule } from '../../types' @@ -48,8 +48,9 @@ function ScheduleListPage() { setError(null) } catch (e) { if (n !== seq.current) return - // 读到过列表之后,定时刷新失败不把整页换成错误:手上的照旧是真数据 - if (!(opts?.silent && hasRows.current)) setError(e) + // 读到过列表之后失败不把整页换成错误,手上的照旧是真数据:定时刷新不吭声,别的(重新载入)弹提示 + if (!hasRows.current) setError(e) + else if (!opts?.silent) toast.error(e) } }, []) useEffect(() => { void load() }, [load]) @@ -80,7 +81,8 @@ function ScheduleListPage() { const run = (s: Schedule) => act(s, 'run', async () => { const out = await runNow(s, navigate) if (!out) return - replace({ ...s, last_fire: out.fire }) + // 只换上次触发:这一行在请求途中可能被开关改过,不拿点下去那一刻的旧值整行盖回去 + setRows((rs) => rs && rs.map((r) => (r.id === s.id ? { ...r, last_fire: out.fire } : r))) // 下次运行、运行状态以服务端为准,再静默取一遍 void load({ silent: true }) })