68 lines
1.7 KiB
TypeScript
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
|