feat: 添加MSW模拟服务和数据源集成
refactor: 重构页面组件移除冗余Layout组件 feat: 实现WebSocket和事件总线系统 feat: 添加队列和调度系统 docs: 更新架构文档和服务映射 style: 清理重复接口定义使用数据源 chore: 更新依赖项配置 feat: 添加运行时系统和领域引导 ci: 配置ESLint边界检查规则 build: 添加Redis和WebSocket依赖 test: 添加MSW浏览器环境入口 perf: 优化数据获取逻辑使用统一数据源 fix: 修复类型定义和状态管理问题
This commit is contained in:
78
dashboard/src/services/taskCenterDataSource.ts
Normal file
78
dashboard/src/services/taskCenterDataSource.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* [MOCK-TASK] TaskCenter模块DataSource
|
||||
*/
|
||||
|
||||
export interface Task {
|
||||
id: string;
|
||||
type: 'sync' | 'report' | 'import' | 'export' | 'automation';
|
||||
name: string;
|
||||
status: 'pending' | 'running' | 'completed' | 'failed';
|
||||
progress: number;
|
||||
total: number;
|
||||
result?: string;
|
||||
error?: string;
|
||||
startedAt?: string;
|
||||
completedAt?: string;
|
||||
createdAt: 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 fetch(`${this.baseUrl}?${query}`);
|
||||
return res.json();
|
||||
}
|
||||
|
||||
async createTask(data: Partial<Task>): Promise<Task> {
|
||||
const res = await fetch(this.baseUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) });
|
||||
return res.json();
|
||||
}
|
||||
|
||||
async cancelTask(id: string): Promise<void> {
|
||||
await fetch(`${this.baseUrl}/${id}/cancel`, { method: 'POST' });
|
||||
}
|
||||
|
||||
async retryTask(id: string): Promise<Task> {
|
||||
const res = await fetch(`${this.baseUrl}/${id}/retry`, { method: 'POST' });
|
||||
return res.json();
|
||||
}
|
||||
|
||||
async deleteTask(id: string): Promise<void> {
|
||||
await fetch(`${this.baseUrl}/${id}`, { method: 'DELETE' });
|
||||
}
|
||||
}
|
||||
|
||||
const useMock = process.env.REACT_APP_USE_MOCK === 'true';
|
||||
export const taskCenterDataSource: ITaskCenterDataSource = useMock ? new MockTaskCenterDataSource() : new ApiTaskCenterDataSource();
|
||||
Reference in New Issue
Block a user