Files
stamp-ant/src/utils/request.js
T
2026-07-09 16:07:56 +08:00

76 lines
2.2 KiB
JavaScript

import axios from 'axios'
import { DEFAULT_MOCK_USER, getStoredMockUser, MOCK_USER_HEADER } from '@/utils/mockUserStorage'
import { message, Modal, notification } from 'ant-design-vue'
const service = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_API || '/',
timeout: 30000,
})
service.interceptors.request.use(
(config) => {
const token = localStorage.getItem('token')
if (token) {
config.headers['Authorization'] = 'Bearer ' + token
}
const mockUser = getStoredMockUser() || DEFAULT_MOCK_USER
config.headers[MOCK_USER_HEADER] = mockUser
return config
},
(error) => Promise.reject(error),
)
service.interceptors.response.use(
(res) => {
if (
res.request.responseType === 'blob' ||
res.request.responseType === 'arraybuffer'
) {
return res
}
const code = res.data?.code
const normalizedCode =
code === undefined || code === null ? undefined : String(code)
const msg = res.data?.message || res.data?.msg || '系统错误'
if (normalizedCode === '401') {
Modal.confirm({
title: '系统提示',
content: '登录状态已过期,请重新登录',
okText: '重新登录',
cancelText: '取消',
onOk: () => {
localStorage.removeItem('token')
location.reload()
},
})
return Promise.reject('无效的会话,或者会话已过期。')
} else if (normalizedCode === '500') {
message.error(msg)
return Promise.reject(new Error(msg))
} else if (
normalizedCode !== undefined &&
normalizedCode !== '200' &&
normalizedCode !== '0000'
) {
notification.error({ message: '提示', description: msg })
return Promise.reject('error')
}
return Promise.resolve(res.data)
},
(error) => {
let msg = error.message
if (msg === 'Network Error') {
msg = '后端接口连接异常'
} else if (msg.includes('timeout')) {
msg = '系统接口请求超时'
} else if (msg.includes('Request failed with status code')) {
msg = '系统接口' + msg.substr(msg.length - 3) + '异常'
}
message.error(msg)
return Promise.reject(error)
},
)
export default service