From 5863baa0ab75eafec312e1d5c6b83c368b3c140d Mon Sep 17 00:00:00 2001 From: yu <191972707@qq.com> Date: Wed, 28 Oct 2026 14:22:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=B7=E6=96=B0=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E7=A7=BB=E5=85=A5=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E5=A4=B4=E9=83=A8=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E5=8F=8D=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 从页面标题栏移除刷新按钮,改放到任务列表搜索框右侧 - 点击时图标旋转动画,完成后 toast「任务列表已刷新」 - 刷新进行中防重复点击 --- src/renderer/src/App.tsx | 3 ++- src/renderer/src/pages/TasksPage.tsx | 29 +++++++++++++++++++++++----- src/renderer/src/styles/app.css | 24 +++++++++++++++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 9ee81fc..f2b298f 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -258,7 +258,8 @@ export function App() { onOpenEditor={(id) => void openEditor(id)} onRun={(id) => void runTask(id)} onDelete={(id) => void deleteTask(id)} - onRefresh={() => void refreshFlows()} + onRefresh={() => refreshFlows()} + onToast={showToast} /> )} {page === "editor" && { setPage("tasks"); void refreshFlows(); }} />} diff --git a/src/renderer/src/pages/TasksPage.tsx b/src/renderer/src/pages/TasksPage.tsx index 06793a8..152c748 100644 --- a/src/renderer/src/pages/TasksPage.tsx +++ b/src/renderer/src/pages/TasksPage.tsx @@ -23,7 +23,8 @@ interface TasksPageProps { onOpenEditor: (id: string) => void; onRun: (id: string) => void; onDelete: (id: string) => void; - onRefresh: () => void; + onRefresh: () => void | Promise; + onToast: (message: string, kind?: "ok" | "error") => void; } function formatTime(value: string): string { @@ -45,9 +46,21 @@ function formatDuration(value?: number): string { const RUN_LABEL = { succeeded: "成功", failed: "失败", cancelled: "已取消", never: "未运行" } as const; -export function TasksPage({ flows, onCreate, onCreateExamples, onOpenEditor, onRun, onDelete, onRefresh }: TasksPageProps) { +export function TasksPage({ flows, onCreate, onCreateExamples, onOpenEditor, onRun, onDelete, onRefresh, onToast }: TasksPageProps) { const [query, setQuery] = useState(""); const [selectedId, setSelectedId] = useState(flows[0]?.id || null); + const [refreshing, setRefreshing] = useState(false); + + const handleRefresh = async () => { + if (refreshing) return; + setRefreshing(true); + try { + await onRefresh(); + onToast("任务列表已刷新", "ok"); + } finally { + setRefreshing(false); + } + }; useEffect(() => { if (!flows.length) { @@ -76,9 +89,6 @@ export function TasksPage({ flows, onCreate, onCreateExamples, onOpenEditor, onR

选择一个任务开始运行或编辑流程;组件库只在进入编辑时参与搭建。

- @@ -106,6 +116,15 @@ export function TasksPage({ flows, onCreate, onCreateExamples, onOpenEditor, onR setQuery(event.target.value)} placeholder="搜索任务" aria-label="搜索任务" /> +