import axios, { type AxiosRequestConfig } from 'axios' import { ElMessage } from 'element-plus' import type { ApiResponse } from '@/types/api' import { storage } from '@/utils/storage' const SUCCESS_CODE = 200 export const CLIENT_ID = '9f2c4e7a1b3d5c8e2f6a0b4d7c1e9f3a' const service = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL, timeout: 15000, }) service.interceptors.request.use((config) => { const token = storage.get('token') if (token) { config.headers.Authorization = `Bearer ${token}` } config.headers.clientid = CLIENT_ID return config }) service.interceptors.response.use(undefined, (error) => { ElMessage.error(error?.message || '网络异常,请稍后重试') return Promise.reject(error) }) export function serializeQuery(params: Record): string { const parts: string[] = [] function append(key: string, value: unknown): void { if (value === undefined || value === null || value === '') return if (Array.isArray(value)) { value.forEach((item, index) => append(`${key}[${index}]`, item)) return } if (typeof value === 'object') { for (const [subKey, subValue] of Object.entries( value as Record, )) { append(`${key}.${subKey}`, subValue) } return } parts.push( `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`, ) } for (const [key, value] of Object.entries(params)) append(key, value) return parts.join('&') } export async function request(config: AxiosRequestConfig): Promise { const resp = await service.request>(config) const payload = resp.data if (payload.code !== SUCCESS_CODE) { ElMessage.error(payload.msg || '请求失败') return Promise.reject(new Error(payload.msg || '请求失败')) } return payload.data } export default service