Files
smart-crop-ui/crop-x/src/lib/api/client.ts

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;