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