petstore-admin/src/api/http.ts
2026-07-31 18:46:16 +08:00

68 lines
1.7 KiB
TypeScript

import axios from 'axios'
import { clearSession, getToken } from '@/utils/session'
import { ElMessage } from 'element-plus'
import router from '@/router'
export type ApiResp<T = unknown> = {
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<T = unknown>(url: string, params?: Record<string, unknown>): Promise<ApiResp<T>> {
const res = await http.get(url, { params })
return res.data as ApiResp<T>
}
export async function apiPost<T = unknown>(url: string, data?: unknown): Promise<ApiResp<T>> {
const res = await http.post(url, data)
return res.data as ApiResp<T>
}
export async function apiPut<T = unknown>(url: string, data?: unknown): Promise<ApiResp<T>> {
const res = await http.put(url, data)
return res.data as ApiResp<T>
}
export async function apiDelete<T = unknown>(url: string, params?: Record<string, unknown>): Promise<ApiResp<T>> {
const res = await http.delete(url, { params })
return res.data as ApiResp<T>
}
export default http