Files
Jog/jog-frontend/src/utils/request.js
T
2026-05-17 15:55:06 +08:00

75 lines
2.2 KiB
JavaScript

import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'
const request = axios.create({
baseURL: '',
timeout: 15000,
})
request.interceptors.request.use(
(config) => {
const token = localStorage.getItem('access_token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
(error) => Promise.reject(error)
)
request.interceptors.response.use(
(response) => {
const res = response.data
if (res.code !== 200) {
ElMessage.error(res.message || '请求失败')
if (res.code === 401) {
localStorage.removeItem('access_token')
localStorage.removeItem('refresh_token')
localStorage.removeItem('user_info')
router.push({ name: 'Login' })
}
return Promise.reject(new Error(res.message))
}
return res
},
async (error) => {
if (error.response) {
const status = error.response.status
if (status === 401) {
const refreshToken = localStorage.getItem('refresh_token')
if (refreshToken) {
try {
const res = await axios.post('/api/public/refresh-token', null, {
params: { refreshToken },
})
if (res.data.code === 200) {
localStorage.setItem('access_token', res.data.data.accessToken)
localStorage.setItem('refresh_token', res.data.data.refreshToken)
error.config.headers.Authorization = `Bearer ${res.data.data.accessToken}`
return request(error.config)
}
} catch {
// refresh failed
}
}
localStorage.removeItem('access_token')
localStorage.removeItem('refresh_token')
localStorage.removeItem('user_info')
router.push({ name: 'Login' })
} else if (status === 403) {
ElMessage.error('无权限访问')
} else if (status === 429) {
ElMessage.error('请求过于频繁,请稍后再试')
} else {
ElMessage.error(error.response.data?.message || '服务器错误')
}
} else {
ElMessage.error('网络连接失败')
}
return Promise.reject(error)
}
)
export default request