first
This commit is contained in:
43
src/utils/request.ts
Normal file
43
src/utils/request.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import axios, { type AxiosRequestConfig } from 'axios'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import type { ApiResponse } from '@/types/api'
|
||||
import { storage } from '@/utils/storage'
|
||||
|
||||
// 后端 R.ok() 成功码为 200(org.dromara.common.core.constant.HttpStatus.SUCCESS)。
|
||||
// 鉴权头 Authorization: Bearer <token> 已与后端 sa-token.token-prefix=Bearer 对齐,无需改动。
|
||||
const SUCCESS_CODE = 200
|
||||
|
||||
/** 全项目唯一 axios 实例 */
|
||||
const service = axios.create({
|
||||
baseURL: import.meta.env.VITE_API_BASE_URL,
|
||||
timeout: 15000,
|
||||
})
|
||||
|
||||
service.interceptors.request.use((config) => {
|
||||
const token = storage.get<string>('token')
|
||||
if (token) {
|
||||
config.headers.Authorization = `Bearer ${token}`
|
||||
}
|
||||
return config
|
||||
})
|
||||
|
||||
service.interceptors.response.use(undefined, (error) => {
|
||||
ElMessage.error(error?.message || '网络异常,请稍后重试')
|
||||
return Promise.reject(error)
|
||||
})
|
||||
|
||||
/**
|
||||
* 统一请求:自动解包 ApiResponse<T>,失败统一提示并 reject
|
||||
* 页面/组件禁止直接 import axios,一律经 store 调用本函数
|
||||
*/
|
||||
export async function request<T>(config: AxiosRequestConfig): Promise<T> {
|
||||
const resp = await service.request<ApiResponse<T>>(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
|
||||
Reference in New Issue
Block a user