// HTTP 工具:统一管理后端服务配置和请求 export type HttpMethod = 'GET' | 'POST' | 'DELETE'; // 集中管理所有后端服务配置 export const CONFIG = { CLIENT_BASE: 'http://localhost:8081', // RUOYI_BASE: 'http://192.168.1.89:8085', RUOYI_BASE: 'http://8.138.23.49:8085', SSE_URL: 'http://8.138.23.49:8085/monitor/account/events' } as const; function resolveBase(path: string): string { // RuoYi 后端路径:鉴权、设备、反馈、版本、工具 if (path.startsWith('/monitor/') || path.startsWith('/system/') || path.startsWith('/tool/banma')) { return CONFIG.RUOYI_BASE; } return CONFIG.CLIENT_BASE; } function buildQuery(params?: Record): string { if (!params) return ''; const query = new URLSearchParams(); Object.entries(params).forEach(([key, value]) => { if (value != null) query.append(key, String(value)); }); return query.toString() ? `?${query}` : ''; } async function request(path: string, options: RequestInit): Promise { // 获取token let token = ''; try { const tokenModule = await import('../utils/token'); token = tokenModule.getToken() || ''; } catch (e) { console.warn('获取token失败:', e); } const res = await fetch(`${resolveBase(path)}${path}`, { credentials: 'omit', cache: 'no-store', ...options, headers: { 'Content-Type': 'application/json', ...(token ? { 'Authorization': `Bearer ${token}` } : {}), ...options.headers } }); if (!res.ok) { const text = await res.text().catch(() => ''); throw new Error(text || `HTTP ${res.status}`); } const contentType = res.headers.get('content-type') || ''; if (contentType.includes('application/json')) { const json: any = await res.json(); // 业务状态码判断:支持两种格式 // - erp_client_sb (本地服务): code=0 表示成功 // - RuoYi 后端: code=200 表示成功 if (json.code !== undefined && json.code !== 0 && json.code !== 200) { throw new Error(json.msg || '请求失败'); } return json as T; } return (await res.text()) as unknown as T; } export const http = { get(path: string, params?: Record) { return request(`${path}${buildQuery(params)}`, { method: 'GET' }); }, post(path: string, body?: unknown) { return request(path, { method: 'POST', body: body ? JSON.stringify(body) : undefined }); }, delete(path: string) { return request(path, { method: 'DELETE' }); }, async upload(path: string, form: FormData) { // 获取token let token = ''; try { const tokenModule = await import('../utils/token'); token = tokenModule.getToken() || ''; } catch (e) { console.warn('获取token失败:', e); } const headers: Record = {}; if (token) { headers['Authorization'] = `Bearer ${token}`; } return fetch(`${resolveBase(path)}${path}`, { method: 'POST', body: form, credentials: 'omit', cache: 'no-store', headers }).then(async res => { if (!res.ok) { const text = await res.text().catch(() => ''); throw new Error(text || `HTTP ${res.status}`); } const contentType = res.headers.get('content-type') || ''; if (contentType.includes('application/json')) { const json: any = await res.json(); if (json.code !== undefined && json.code !== 0 && json.code !== 200) { throw new Error(json.msg || '请求失败'); } return json as T; } return (await res.text()) as unknown as T; }); } };