request.ts
997 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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