204 lines
4.6 KiB
TypeScript
204 lines
4.6 KiB
TypeScript
import createClient from 'openapi-fetch';
|
|
import type { paths } from './v1.d.ts';
|
|
|
|
// 创建 API 客户端
|
|
const client = createClient<paths>({
|
|
baseUrl: 'https://gitea-admin-test-app-app.dev.maimaiag.com/docs',
|
|
// 可以添加默认 headers
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
|
|
// 添加认证的客户端
|
|
export const authClient = {
|
|
...client,
|
|
// 包装添加 token 的方法
|
|
withAuth: (token: string) => ({
|
|
...client,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': `Bearer ${token}`,
|
|
},
|
|
}),
|
|
};
|
|
|
|
// 测试连接
|
|
export const testConnection = async () => {
|
|
try {
|
|
// 尝试获取一个简单的接口来测试连接
|
|
const { data, error, response } = await client.GET('/users', {
|
|
params: {
|
|
query: { page: 1, limit: 1 }
|
|
}
|
|
});
|
|
|
|
if (error) {
|
|
console.warn('API 连接测试失败:', error);
|
|
return { success: false, error };
|
|
}
|
|
|
|
console.log('API 连接测试成功:', { status: response?.status, data });
|
|
return { success: true, data };
|
|
} catch (err) {
|
|
console.error('API 连接测试出错:', err);
|
|
return { success: false, error: err instanceof Error ? err.message : '未知错误' };
|
|
}
|
|
};
|
|
|
|
// API 方法封装
|
|
export const api = {
|
|
// 用户管理 API
|
|
users: {
|
|
// 获取用户列表
|
|
getList: async (params?: {
|
|
page?: number;
|
|
limit?: number;
|
|
search?: string;
|
|
}) => {
|
|
const { data, error, response } = await client.GET('/users', {
|
|
params: {
|
|
query: params,
|
|
},
|
|
});
|
|
|
|
if (error) {
|
|
console.error('获取用户列表失败:', error);
|
|
throw new Error(`API Error: ${error}`);
|
|
}
|
|
|
|
return data;
|
|
},
|
|
|
|
// 获取用户详情
|
|
getDetail: async (id: number) => {
|
|
const { data, error } = await client.GET('/users/{id}', {
|
|
params: {
|
|
path: { id },
|
|
},
|
|
});
|
|
|
|
if (error) {
|
|
console.error('获取用户详情失败:', error);
|
|
throw new Error(`API Error: ${error}`);
|
|
}
|
|
|
|
return data;
|
|
},
|
|
},
|
|
|
|
// 农机管理 API
|
|
machinery: {
|
|
// 获取农机列表
|
|
getList: async (params?: {
|
|
page?: number;
|
|
limit?: number;
|
|
status?: 'running' | 'idle' | 'maintenance' | 'error' | 'offline';
|
|
}) => {
|
|
const { data, error } = await client.GET('/machinery', {
|
|
params: {
|
|
query: params,
|
|
},
|
|
});
|
|
|
|
if (error) {
|
|
console.error('获取农机列表失败:', error);
|
|
throw new Error(`API Error: ${error}`);
|
|
}
|
|
|
|
return data;
|
|
},
|
|
|
|
// 获取农机详情
|
|
getDetail: async (id: number) => {
|
|
const { data, error } = await client.GET('/machinery/{id}', {
|
|
params: {
|
|
path: { id },
|
|
},
|
|
});
|
|
|
|
if (error) {
|
|
console.error('获取农机详情失败:', error);
|
|
throw new Error(`API Error: ${error}`);
|
|
}
|
|
|
|
return data;
|
|
},
|
|
|
|
// 创建农机
|
|
create: async (machineryData: {
|
|
name: string;
|
|
type: 'tractor' | 'harvester' | 'planter' | 'sprayer' | 'irrigation';
|
|
model: string;
|
|
serial_number?: string;
|
|
operator_id?: number;
|
|
purchase_date?: string;
|
|
}) => {
|
|
const { data, error } = await client.POST('/machinery', {
|
|
body: machineryData,
|
|
});
|
|
|
|
if (error) {
|
|
console.error('创建农机失败:', error);
|
|
throw new Error(`API Error: ${error}`);
|
|
}
|
|
|
|
return data;
|
|
},
|
|
|
|
// 更新农机
|
|
update: async (
|
|
id: number,
|
|
updateData: {
|
|
name?: string;
|
|
status?: 'running' | 'idle' | 'maintenance' | 'error' | 'offline';
|
|
operator_id?: number;
|
|
last_maintenance?: string;
|
|
next_maintenance?: string;
|
|
}
|
|
) => {
|
|
const { data, error } = await client.PUT('/machinery/{id}', {
|
|
params: {
|
|
path: { id },
|
|
},
|
|
body: updateData,
|
|
});
|
|
|
|
if (error) {
|
|
console.error('更新农机失败:', error);
|
|
throw new Error(`API Error: ${error}`);
|
|
}
|
|
|
|
return data;
|
|
},
|
|
|
|
// 删除农机
|
|
delete: async (id: number) => {
|
|
const { error } = await client.DELETE('/machinery/{id}', {
|
|
params: {
|
|
path: { id },
|
|
},
|
|
});
|
|
|
|
if (error) {
|
|
console.error('删除农机失败:', error);
|
|
throw new Error(`API Error: ${error}`);
|
|
}
|
|
|
|
return true; // 删除成功
|
|
},
|
|
},
|
|
};
|
|
|
|
// 类型导出(供组件使用)
|
|
export type {
|
|
User,
|
|
Machinery,
|
|
Location,
|
|
Coordinates,
|
|
CreateMachineryRequest,
|
|
UpdateMachineryRequest,
|
|
Error as ApiError
|
|
} from './v1.d.ts';
|
|
|
|
export default client; |