| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // src/utils/request.ts
- import axios from 'axios'
- import { ElMessage } from 'element-plus'
- import type { AxiosInstance, AxiosResponse } from 'axios'
- // 创建 axios 实例
- const service: AxiosInstance = axios.create({
- baseURL: import.meta.env.VITE_API_BASE_URL || '', // 从环境变量中读取
- timeout: 10000, // 超时时间
- withCredentials: true // 是否允许携带 cookie
- })
- // 请求拦截器
- service.interceptors.request.use(
- (config) => {
- // 可在此添加 token 到 headers 中
- const token = localStorage.getItem('token')
- if (token) {
- config.headers!['Authorization'] = `${token}`
- }
- return config
- },
- (error) => {
- // 请求错误处理
- console.error('请求错误:', error)
- return Promise.reject(error)
- }
- )
- // 响应拦截器
- service.interceptors.response.use(
- (response: AxiosResponse) => {
- const res = response.data
- if (res.code !== 200) {
- ElMessage({
- message: res.msg || '请求失败',
- type: 'error',
- duration: 5 * 1000
- })
- // 特殊状态码处理,如 token 失效等
- if (res.code === 401) {
- // 跳转登录页
- window.location.href = '/'
- }
- return Promise.reject(res.msg || '请求失败')
- }
- return res
- },
- (error) => {
- // 网络错误、超时等处理
- const message = error.message.includes('timeout') ? '请求超时' : '网络异常'
- ElMessage({
- message,
- type: 'error'
- })
- return Promise.reject(error)
- }
- )
- // 常用请求方法封装
- export const http = {
- get<T = any>(url: string, params?: any): Promise<T> {
- return service.get(url, { params })
- },
- post<T = any>(url: string, data?: any): Promise<T> {
- return service.post(url, data)
- },
- put<T = any>(url: string, data?: any): Promise<T> {
- return service.put(url, data)
- },
- delete<T = any>(url: string, data?: any): Promise<T> {
- return service.delete(url, { data })
- }
- }
- export default service
|