import axios from 'axios'; import {Message, MessageBox} from 'element-ui'; import store from '@/store'; import {setToken} from '@/utils/auth'; import errorCode from '@/utils/errorCode' // import SettingIplatform from '@/utils/settingIplatform'; import SettingIplatform from '../../public/static/config'; import {isPhone} from '@/libs/wechat'; // 是否显示重新登录 export let isRelogin = {show: false}; axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' const service = axios.create({ baseURL: SettingIplatform.apiBaseURL, timeout: 60000, // 过期时间 }); // request interceptor service.interceptors.request.use( (config) => { // 发送请求之前做的 const token = !store.getters.token ? sessionStorage.getItem('token') : store.getters.token; if (token) { config.headers['Authorization'] = token; } if (/get/i.test(config.method)) { config.params = config.params || {}; config.params.temp = Date.parse(new Date()) / 1000; } return config; }, (error) => { return Promise.reject(error); }, ); // response interceptor service.interceptors.response.use(res => { if (SettingIplatform.debug) { console.log('%c请求接口:', 'color: #529b2e', res.config.url) if (res.config.method.toLowerCase() === 'get') { console.log('%c请求参数:', 'color: #529b2e', res.config.params) } else { try{ console.log('%c请求参数:', 'color: #529b2e', JSON.parse(res.config.data)) } catch (e) { } } console.log('%c返回结果:', 'color: #529b2e', res.data) } // 未设置状态码则默认成功状态 // const code = res.data.code || 200; // 2022-11-08 这里使用自己业务定义的成功状态码:1 // const res = response.data; let showErrMsg = res.config.showErrMsg; if (showErrMsg == undefined) { showErrMsg = true } const code = res.data.code; if (res.headers.hasOwnProperty("tokenrefresh")) { setToken(res.headers.tokenrefresh); store.commit('user/SET_TOKEN', res.headers.tokenrefresh); } // 获取错误信息 const msg = errorCode[code] || res.data.msg || errorCode['default'] // 二进制数据则直接返回 if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { return res.data } if (code === 10) { // console.log("+++++++++++ token过期"); if (!isRelogin.show) { isRelogin.show = true; MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' } ).then(() => { isRelogin.show = false; store.dispatch('user/logout').then(() => { // 2023-06-07,重定向到看板页面,原来'/index'一直报404 // location.href = '/dashboard'; window.location.reload() }) }).catch(() => { isRelogin.show = false; }); } return Promise.reject('无效的会话,或者会话已过期,请重新登录。') } else if (code === 500 && showErrMsg) { Message({ message: msg, type: 'error' }) return Promise.reject(new Error(msg)) } else if (code !== 1) { // 如果不是超级管理员 if (!(store.getters.info && store.getters.info.realName === '超级管理用户') && showErrMsg) { Message({ message: msg, type: 'error', duration: 5 * 1000 }); } if (isPhone()) { //移动端 return Promise.reject(res || 'Error'); } return Promise.reject(res.data) } else { // 2023-05-16,统一拦截去除实际业务数据。 return res.data.data; } // if (res.code === 401) { // // to re-login // Message.error('无效的会话,或者登录已过期,请重新登录。'); // if (window.location.pathname !== '/login') location.href = '/login'; // } else if (res.code === 403) { // Message.error('没有权限访问。'); // } // if (res.code !== 200 && res.code !== 401) { // if (isPhone()) { // //移动端 // return Promise.reject(res || 'Error'); // } // Message({ // message: res.message || 'Error', // type: 'error', // duration: 5 * 1000, // }); // return Promise.reject(); // } else { // return res.data; // } }, error => { console.log('err' + error) let {message} = error; 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) + "异常"; } Message({ message: message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } // (error) => { // Message({ // message: error.message, // type: 'error', // duration: 5 * 1000, // }); // return Promise.reject(error); // }, ); export default service;