feat: 前端添加下载状态卡片 (#385)

This commit is contained in:
ᴀᴍᴛᴏᴀᴇʀ
2025-07-10 15:13:25 +08:00
committed by GitHub
parent 655b4389b7
commit cc25749445
18 changed files with 341 additions and 141 deletions

View File

@@ -228,7 +228,7 @@ class ApiClient {
onError?: (error: Event) => void
): EventSource {
const token = localStorage.getItem('authToken');
const url = `/api/logs${token ? `?token=${encodeURIComponent(token)}` : ''}`;
const url = `/api/sse/logs${token ? `?token=${encodeURIComponent(token)}` : ''}`;
const eventSource = new EventSource(url);
eventSource.onmessage = (event) => {
onMessage(event.data);
@@ -244,7 +244,7 @@ class ApiClient {
onError?: (error: Event) => void
): EventSource {
const token = localStorage.getItem('authToken');
const url = `/api/dashboard/sysinfo${token ? `?token=${encodeURIComponent(token)}` : ''}`;
const url = `/api/sse/sysinfo${token ? `?token=${encodeURIComponent(token)}` : ''}`;
const eventSource = new EventSource(url);
eventSource.onmessage = (event) => {
try {
@@ -259,6 +259,22 @@ class ApiClient {
}
return eventSource;
}
createTasksStream(
onMessage: (data: string) => void,
onError?: (error: Event) => void
): EventSource {
const token = localStorage.getItem('authToken');
const url = `/api/sse/tasks${token ? `?token=${encodeURIComponent(token)}` : ''}`;
const eventSource = new EventSource(url);
eventSource.onmessage = (event) => {
onMessage(event.data);
};
if (onError) {
eventSource.onerror = onError;
}
return eventSource;
}
}
// 创建默认的 API 客户端实例
@@ -293,6 +309,8 @@ const api = {
) => apiClient.createSysInfoStream(onMessage, onError),
createLogStream: (onMessage: (data: string) => void, onError?: (error: Event) => void) =>
apiClient.createLogStream(onMessage, onError),
createTasksStream: (onMessage: (data: string) => void, onError?: (error: Event) => void) =>
apiClient.createTasksStream(onMessage, onError),
setAuthToken: (token: string) => apiClient.setAuthToken(token),
clearAuthToken: () => apiClient.clearAuthToken()
};

View File

@@ -0,0 +1,14 @@
import { writable } from 'svelte/store';
export interface TaskStatus {
is_running: boolean;
last_run: Date | null;
last_finish: Date | null;
next_run: Date | null;
}
export const taskStatusStore = writable<TaskStatus>(undefined);
export function setTaskStatus(status: TaskStatus) {
taskStatusStore.set(status);
}