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="搜索任务" /> +