import { ApiResponse, ListAccountsBody, ListAccountsResponse, BatchDeleteBody, BatchUpdateBody, StatsOverview, ScriptUploadItem } from './types'; const getApiBaseUrl = () => { // 检查是否有配置的环境变量(构建时注入) const envUrl = process.env.NEXT_PUBLIC_API_BASE_URL; if (envUrl && envUrl !== 'undefined') { return envUrl; } // 在浏览器环境中,没有配置则使用当前域名 if (typeof window !== 'undefined') { return `${window.location.protocol}//${window.location.hostname}:3006`; } // 服务端渲染时的默认值 return 'http://localhost:3006'; }; class ApiClient { private async request( endpoint: string, options: RequestInit = {} ): Promise> { const API_BASE_URL = getApiBaseUrl(); // 每次请求时动态获取 const url = `${API_BASE_URL}${endpoint}`; const response = await fetch(url, { headers: { 'Content-Type': 'application/json', ...options.headers, }, ...options, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); } // 获取账户列表 async getAccountsList(body: ListAccountsBody): Promise> { return this.request('/web/v1/accounts/list', { method: 'POST', body: JSON.stringify(body), }); } // 批量删除账户 async batchDeleteAccounts(body: BatchDeleteBody): Promise> { return this.request<{ deletedCount: number }>('/web/v1/accounts/delete-batch', { method: 'POST', body: JSON.stringify(body), }); } // 批量更新账户 async batchUpdateAccounts(body: BatchUpdateBody): Promise> { return this.request<{ updatedCount: number }>('/web/v1/accounts/update-batch', { method: 'POST', body: JSON.stringify(body), }); } // 获取统计概览 async getStatsOverview(): Promise> { return this.request('/web/v1/stats/overview'); } // 上传账户 async uploadAccounts(accounts: ScriptUploadItem[], ownerId: string): Promise> { return this.request<{ processedCount: number; createdCount: number; updatedCount: number }>(`/s/v1/${ownerId}/upload`, { method: 'POST', body: JSON.stringify(accounts), }); } } export const apiClient = new ApiClient();