import axios from 'axios' import { clearSession, getToken } from '@/utils/session' import { ElMessage } from 'element-plus' import router from '@/router' export type ApiResp = { code: number message?: string bizCode?: string data?: T } const http = axios.create({ baseURL: '/api', timeout: 30000, }) http.interceptors.request.use((config) => { const token = getToken() if (token) { config.headers.Authorization = `Bearer ${token}` } return config }) http.interceptors.response.use( (res) => { const body = res.data as ApiResp if (body && typeof body.code === 'number' && body.code === 401) { clearSession() router.replace({ name: 'login' }) return Promise.reject(body) } return res }, (err) => { const status = err?.response?.status if (status === 401) { clearSession() router.replace({ name: 'login' }) ElMessage.error('登录已失效,请重新登录') } return Promise.reject(err) }, ) export async function apiGet(url: string, params?: Record): Promise> { const res = await http.get(url, { params }) return res.data as ApiResp } export async function apiPost(url: string, data?: unknown): Promise> { const res = await http.post(url, data) return res.data as ApiResp } export async function apiPut(url: string, data?: unknown): Promise> { const res = await http.put(url, data) return res.data as ApiResp } export async function apiDelete(url: string, params?: Record): Promise> { const res = await http.delete(url, { params }) return res.data as ApiResp } export default http