2025-07-23 15:05:14 +08:00
|
|
|
import { getSettings, getConfig } from './configService';
|
|
|
|
import { RunTaskRequest, RunTaskApiResponse, Task } from '../types/task';
|
|
|
|
|
2025-07-23 15:46:06 +08:00
|
|
|
// 获取通用请求头
|
|
|
|
const getHeaders = async () => {
|
|
|
|
const config = await getConfig();
|
|
|
|
return {
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
...config?.headers,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2025-07-23 15:05:14 +08:00
|
|
|
// 获取任务列表
|
2025-07-23 15:46:06 +08:00
|
|
|
export const getTasks = async (params: {
|
|
|
|
pageNum: number;
|
|
|
|
pageSize: number;
|
|
|
|
}): Promise<Task[]> => {
|
2025-07-23 15:05:14 +08:00
|
|
|
try {
|
|
|
|
const config = await getConfig();
|
|
|
|
const endpoint = config?.apiEndpoints?.getTasks;
|
|
|
|
|
|
|
|
if (!endpoint) {
|
|
|
|
throw new Error('获取任务列表的API端点未配置');
|
|
|
|
}
|
|
|
|
|
|
|
|
const settings = await getSettings();
|
|
|
|
const serverUrl = settings.serverUrl || config?.serverUrl;
|
|
|
|
|
|
|
|
if (!serverUrl) {
|
|
|
|
throw new Error('服务器地址未配置');
|
|
|
|
}
|
|
|
|
|
2025-07-23 15:46:06 +08:00
|
|
|
const urlObj = new URL(`${serverUrl.replace(/\/$/, '')}${endpoint}`);
|
|
|
|
urlObj.searchParams.append('pageNum', String(params.pageNum));
|
|
|
|
urlObj.searchParams.append('pageSize', String(params.pageSize));
|
|
|
|
const url = urlObj.toString();
|
2025-07-23 15:05:14 +08:00
|
|
|
console.log('获取任务列表:', url);
|
|
|
|
|
2025-07-23 15:46:06 +08:00
|
|
|
const headers = await getHeaders();
|
|
|
|
const response = await fetch(url, { headers });
|
2025-07-23 15:05:14 +08:00
|
|
|
if (!response.ok) {
|
|
|
|
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
const result = await response.json();
|
|
|
|
if (result.code !== 200) {
|
|
|
|
throw new Error(`API 错误: ${result.message}`);
|
|
|
|
}
|
|
|
|
|
2025-07-23 15:46:06 +08:00
|
|
|
// 兼容两种可能的数据结构: result.data.list or result.data
|
|
|
|
if (result.data && Array.isArray(result.data.list)) {
|
|
|
|
return result.data.list;
|
|
|
|
}
|
|
|
|
if (Array.isArray(result.data)) {
|
|
|
|
return result.data;
|
|
|
|
}
|
|
|
|
console.warn('任务列表数据格式不正确', result.data);
|
|
|
|
return [];
|
2025-07-23 15:05:14 +08:00
|
|
|
} catch (error) {
|
|
|
|
console.error('获取任务列表失败:', error);
|
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// 获取任务详情
|
|
|
|
export const getTaskDetail = async (taskId: string): Promise<Task> => {
|
|
|
|
try {
|
|
|
|
const config = await getConfig();
|
|
|
|
let endpoint = config?.apiEndpoints?.getTaskDetail;
|
|
|
|
|
|
|
|
if (!endpoint) {
|
|
|
|
throw new Error('获取任务详情的API端点未配置');
|
|
|
|
}
|
|
|
|
endpoint = endpoint.replace('{taskId}', taskId);
|
|
|
|
|
|
|
|
const settings = await getSettings();
|
|
|
|
const serverUrl = settings.serverUrl || config?.serverUrl;
|
|
|
|
|
|
|
|
if (!serverUrl) {
|
|
|
|
throw new Error('服务器地址未配置');
|
|
|
|
}
|
|
|
|
|
|
|
|
const url = `${serverUrl.replace(/\/$/, '')}${endpoint}`;
|
|
|
|
console.log('获取任务详情:', url);
|
|
|
|
|
2025-07-23 15:46:06 +08:00
|
|
|
const headers = await getHeaders();
|
|
|
|
const response = await fetch(url, { headers });
|
2025-07-23 15:05:14 +08:00
|
|
|
if (!response.ok) {
|
|
|
|
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
const result = await response.json();
|
|
|
|
if (result.code !== 200) {
|
|
|
|
throw new Error(`API 错误: ${result.message}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result.data;
|
|
|
|
} catch (error) {
|
|
|
|
console.error(`获取任务详情失败 (ID: ${taskId}):`, error);
|
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// 运行任务
|
|
|
|
export const runTask = async (
|
|
|
|
taskData: RunTaskRequest,
|
|
|
|
): Promise<RunTaskApiResponse> => {
|
|
|
|
try {
|
|
|
|
const config = await getConfig();
|
|
|
|
const endpoint = config?.apiEndpoints?.runTask;
|
|
|
|
|
|
|
|
if (!endpoint) {
|
|
|
|
throw new Error('运行任务的API端点未配置');
|
|
|
|
}
|
|
|
|
|
|
|
|
const settings = await getSettings();
|
|
|
|
const serverUrl = settings.serverUrl || config?.serverUrl;
|
|
|
|
|
|
|
|
if (!serverUrl) {
|
|
|
|
throw new Error('服务器地址未配置');
|
|
|
|
}
|
|
|
|
|
|
|
|
const url = `${serverUrl.replace(/\/$/, '')}${endpoint}`;
|
|
|
|
console.log('运行任务请求:', url, JSON.stringify(taskData, null, 2));
|
|
|
|
|
2025-07-23 15:46:06 +08:00
|
|
|
const headers = await getHeaders();
|
2025-07-23 15:05:14 +08:00
|
|
|
const response = await fetch(url, {
|
|
|
|
method: 'POST',
|
2025-07-23 15:46:06 +08:00
|
|
|
headers: headers,
|
2025-07-23 15:05:14 +08:00
|
|
|
body: JSON.stringify(taskData),
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!response.ok) {
|
|
|
|
const errorText = await response.text();
|
|
|
|
throw new Error(`HTTP ${response.status}: ${errorText}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
const result: RunTaskApiResponse = await response.json();
|
|
|
|
console.log('运行任务响应:', result);
|
|
|
|
|
|
|
|
if (result.code !== 200) {
|
|
|
|
throw new Error(`API 错误: ${result.message}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
} catch (error) {
|
|
|
|
console.error('运行任务失败:', error);
|
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
};
|