This commit is contained in:
wangzzpeng
2026-09-24 10:10:43 +08:00
commit 7bc84bbe5e
194 changed files with 22571 additions and 0 deletions

43
src/utils/request.ts Normal file
View 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