request.ts 997 Bytes
import axios from 'axios'
import { message } from 'ant-design-vue'
import { useAuthStore } from '@/stores/auth'

const request = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || 'http://10.30.110.149:8080',
  timeout: 10000,
})

// 请求拦截:自动携带 token
request.interceptors.request.use((config) => {
  const auth = useAuthStore()
  if (auth.token) {
    config.headers.Authorization = `Bearer ${auth.token}`
  }
  return config
})

// 响应拦截:统一处理错误
request.interceptors.response.use(
  (res) => {
    const data = res.data
    if (data.code !== 0) {
      message.error(data.msg || '操作失败')
      return Promise.reject(new Error(data.msg))
    }
    return data
  },
  (err) => {
    if (err.response?.status === 401) {
      const auth = useAuthStore()
      auth.logout()
      window.location.href = '/login'
    } else {
      message.error(err.message || '网络错误')
    }
    return Promise.reject(err)
  }
)

export default request