- 将服务文件按功能分类到core、ai、analytics、security等目录 - 修复logger导入路径问题,统一使用相对路径 - 更新相关文件的导入路径引用 - 添加新的批量操作组件导出文件 - 修复dashboard页面中的类型错误 - 添加dotenv依赖到package.json
92 lines
4.0 KiB
TypeScript
92 lines
4.0 KiB
TypeScript
import { http } from './http';
|
|
/**
|
|
* [MOCK-TASK] TaskCenter模块DataSource
|
|
*/
|
|
|
|
export interface Task {
|
|
id: string;
|
|
taskId?: string;
|
|
name: string;
|
|
type: 'PRODUCT_SYNC' | 'ORDER_PROCESS' | 'DATA_ANALYSIS' | 'AD_OPTIMIZATION' | 'INVENTORY_CHECK' | 'CUSTOM' | 'sync' | 'report' | 'import' | 'export' | 'automation';
|
|
status: 'PENDING' | 'RUNNING' | 'PAUSED' | 'COMPLETED' | 'FAILED' | 'CANCELLED' | 'pending' | 'running' | 'completed' | 'failed';
|
|
priority?: 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';
|
|
progress: number;
|
|
total?: number;
|
|
result?: string | any;
|
|
error?: string;
|
|
errorMessage?: string;
|
|
startedAt?: string;
|
|
completedAt?: string;
|
|
createdAt: string;
|
|
estimatedDuration?: number;
|
|
actualDuration?: number;
|
|
retryCount?: number;
|
|
maxRetries?: number;
|
|
shopId?: string;
|
|
shopName?: string;
|
|
createdBy?: string;
|
|
scheduleType?: 'MANUAL' | 'SCHEDULED' | 'TRIGGERED';
|
|
scheduleTime?: string;
|
|
}
|
|
|
|
export interface ITaskCenterDataSource {
|
|
fetchTasks(params?: { status?: string; type?: string }): Promise<Task[]>;
|
|
createTask(data: Partial<Task>): Promise<Task>;
|
|
cancelTask(id: string): Promise<void>;
|
|
retryTask(id: string): Promise<Task>;
|
|
deleteTask(id: string): Promise<void>;
|
|
}
|
|
|
|
class MockTaskCenterDataSource implements ITaskCenterDataSource {
|
|
async fetchTasks(params?: { status?: string; type?: string }): Promise<Task[]> {
|
|
return [
|
|
{ id: 'task_001', type: 'sync', name: 'Inventory Sync - Amazon US', status: 'completed', progress: 100, total: 100, result: 'Synced 500 products', startedAt: '2026-03-18 10:00:00', completedAt: '2026-03-18 10:15:00', createdAt: '2026-03-18 09:55:00' },
|
|
{ id: 'task_002', type: 'report', name: 'Monthly Sales Report', status: 'running', progress: 65, total: 100, startedAt: '2026-03-18 14:00:00', createdAt: '2026-03-18 13:55:00' },
|
|
{ id: 'task_003', type: 'import', name: 'Product Import from CSV', status: 'failed', progress: 45, total: 100, error: 'Invalid SKU format at row 156', startedAt: '2026-03-18 11:00:00', completedAt: '2026-03-18 11:10:00', createdAt: '2026-03-18 10:55:00' },
|
|
{ id: 'task_004', type: 'export', name: 'Order Export - Q1 2026', status: 'pending', progress: 0, total: 100, createdAt: '2026-03-18 14:30:00' },
|
|
{ id: 'task_005', type: 'automation', name: 'Auto Price Adjustment', status: 'completed', progress: 100, total: 100, result: 'Updated 23 products', startedAt: '2026-03-18 08:00:00', completedAt: '2026-03-18 08:30:00', createdAt: '2026-03-18 07:55:00' },
|
|
];
|
|
}
|
|
|
|
async createTask(data: Partial<Task>): Promise<Task> {
|
|
return { ...data, id: `task_${Date.now()}`, status: 'pending', progress: 0, total: 100, createdAt: new Date().toISOString() } as Task;
|
|
}
|
|
|
|
async cancelTask(id: string): Promise<void> {}
|
|
async retryTask(id: string): Promise<Task> {
|
|
return { id, type: 'sync', name: 'Retry Task', status: 'running', progress: 0, total: 100, startedAt: new Date().toISOString(), createdAt: new Date().toISOString() };
|
|
}
|
|
async deleteTask(id: string): Promise<void> {}
|
|
}
|
|
|
|
class ApiTaskCenterDataSource implements ITaskCenterDataSource {
|
|
private baseUrl = '/api/tasks';
|
|
|
|
async fetchTasks(params?: { status?: string; type?: string }): Promise<Task[]> {
|
|
const query = new URLSearchParams(params as any).toString();
|
|
const res = await http.get(`${this.baseUrl}?${query}`);
|
|
return res.data;
|
|
}
|
|
|
|
async createTask(data: Partial<Task>): Promise<Task> {
|
|
const res = await http.post(this.baseUrl, data);
|
|
return res.data;
|
|
}
|
|
|
|
async cancelTask(id: string): Promise<void> {
|
|
await http.post(`${this.baseUrl}/${id}/cancel`);
|
|
}
|
|
|
|
async retryTask(id: string): Promise<Task> {
|
|
const res = await http.post(`${this.baseUrl}/${id}/retry`);
|
|
return res.data;
|
|
}
|
|
|
|
async deleteTask(id: string): Promise<void> {
|
|
await http.delete(`${this.baseUrl}/${id}`);
|
|
}
|
|
}
|
|
|
|
const useMock = process.env.NODE_ENV === 'development' || process.env.REACT_APP_USE_MOCK === 'true';
|
|
export const taskCenterDataSource: ITaskCenterDataSource = useMock ? new MockTaskCenterDataSource() : new ApiTaskCenterDataSource();
|