import axios from 'axios' // import qs from 'qs' import { ElLoading, ElMessage } from 'element-plus' // import config from '../../public/config/config.json' import router from '@/router/index' import useUserStore from '@/store/modules/user' import { log } from '@/utils/log' // 错误码枚举 enum responseCode { success = 200, // 成功 noPermission = 401, // 未授权 error = 500, // 服务器异常 hikSuccess = '0', // 海康成功 } // 以下地址发生错误直接跳转至登录页 const toLoginPath = ['/sys/user/permission', '/sys/user/info'] // 跳转到登录页面 const toLogin = () => { useUserStore().logout() router.push({ path: '/login', query: { redirect: router.currentRoute.value.path !== '/login' ? router.currentRoute.value.fullPath : undefined, }, }) } const request = axios.create({ // baseURL: config.baseUrl, baseURL: window.localStorage.getItem('baseURL')!, // baseURL: import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY === 'true' ? '/proxy/' : import.meta.env.VITE_APP_API_BASEURL, timeout: 1000 * 60, responseType: 'json', }) request.interceptors.request.use( (request) => { const userStore = useUserStore() /** * 全局拦截请求发送前提交的参数 * 以下代码为示例,在请求头里带上 token 信息 */ if (userStore.isLogin && request.headers) { // request.headers.token = userStore.token request.headers.token = localStorage.getItem('token') } if (!userStore.isLogin && localStorage.getItem('tokenBak') === 'true') { // 未登录且url带token request.headers.token = localStorage.getItem('token') } // 是否将 POST 请求参数进行字符串化处理 if (request.method === 'post') { // request.data = qs.stringify(request.data, { // arrayFormat: 'brackets', // }) } return request }, ) request.interceptors.response.use( (response) => { /** * 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示 * 如果是文件直接返回整个response对象 */ if (response.data instanceof Blob) { return Promise.resolve(response) } else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess) { if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页 // toLogin() // if (useUserStore().isLogout === 0) { // ElMessage.error(response.data.message || '发生错误') // } // useUserStore().toLogout()// 携带token const hrefIdx = localStorage.getItem('tokenBak') if (hrefIdx === 'true') { console.log('跳转到404') router.push({ path: '/noPage', }) } else { console.log('跳转到404以外其他页面') if (window.localStorage.getItem('systemType') === 'gm') { // token失效状态跳转到登录页 // toLogin() router.push({ path: '/noPage', }) } else if (window.localStorage.getItem('systemType') === 'sm') { // sm走网关 router.push({ path: '/smGateway', }) } if (useUserStore().isLogout === 0) { // ElMessage.warning(response.data.message || '发生错误') console.log(response.data.message || '发生错误') } useUserStore().toLogout() } } else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) { const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',') // ElMessage.warning(mes) console.log(mes) } else if (response.data.code === 500 && response.data.msg) { // ElMessage.warning(response.data.msg) console.log(response.data.mes) } else { // 这里做错误提 if (response.data.message) { // ElMessage.warning(`${response.data.message}` || '发生错误') console.log(`${response.data.message}` || '发生错误') } if (response.data.msg) { // ElMessage.warning(`${response.data.msg}` || '发生错误') console.log(`${response.data.msg}` || '发生错误') } const loadingInstance = ElLoading.service({}) nextTick(() => { // Loading should be closed asynchronously loadingInstance.close() }) } return Promise.reject(response.data) } else { // 成功 return Promise.resolve(response.data) } }, (error) => { // 处理文件下载的错误提示 if (error.message) { let message = error.message if (message === 'Network Error') { message = '后端网络故障' } else if (message.includes('timeout')) { message = '接口请求超时' } else if (message.includes('Request failed with status code')) { message = `接口${message.substr(message.length - 3)}异常` } // ElMessage({ // message, // type: 'warning', // }) console.log(message) } return Promise.reject(error) }, ) export default request