/* eslint-disable */ import axios from 'axios' import {MessageBox, Message} from 'element-ui' import utilVue from '../utils/utilVue.js' const baseUrl = process.env.VUE_APP_BASE_API // create an axios instance const service = axios.create({ baseURL: baseUrl + 'wms/', // url = base url + request url timeout: 120000 // request timeout }) // request interceptor service.interceptors.request.use( (config) => { // do something before request is sent // if (store.getters.currentUser) { // // let each request carry token // // ['X-Token'] is a custom headers key // // please modify it according to the actual situation // config.headers['Authorization'] = sessionStorage.getItem('Authorization') // // config.headers['warehouseId'] = store.getters.currentWarehouse.id // // config.headers['requestType'] = 'spdpc' // } if (config.method != 'get' && window.appendParam && config.data) { Object.keys(window.appendParam).forEach((key) => { if (Object.prototype.hasOwnProperty.call(window.appendParam, key)) { if (window.appendParam[key]) { if (Array.isArray(config.data)) { config.data.forEach(data => { if (typeof data == 'object') { data[key] = window.appendParam[key] } }) } else { config.data[key] = window.appendParam[key] } } } }) window.appendParam = null } return config }, (error) => { return Promise.reject(error) } ) const download = (resp) => { //这里res.data是返回的blob对象 var blob = new Blob([resp.data], {type: resp.headers['content-type']}); // 自定义响应头 let fileName = resp.headers['content-filename'] && decodeURIComponent(resp.headers['content-filename']) if (fileName === undefined || fileName === null || fileName === "") { fileName = new Date().getTime() + '.xlsx' } if (window.navigator.msSaveOrOpenBlob) { // 如果是IE浏览器 navigator.msSaveBlob(blob, fileName);//filename文件名包括扩展名,下载路径为浏览器默认路径 return } // chrome、Firefox var downloadElement = document.createElement('a'); var href = window.URL.createObjectURL(blob); //创建下载的链接 downloadElement.href = href; downloadElement.download = fileName document.body.appendChild(downloadElement); downloadElement.click(); //点击下载 document.body.removeChild(downloadElement); //下载完成移除元素a window.URL.revokeObjectURL(href); //释放掉blob对象 } // response interceptor service.interceptors.response.use( /** * If you want to get http information such as headers or status * Please return response => response */ /** * Determine the request status by custom code * Here is just an example * You can also judge the status by HTTP Status Code */ (response) => { let {headers, data} = response // 处理文件下载 let contentType = headers['content-type'] if (headers && contentType && (contentType.indexOf('application/x-msdownload') != -1 || contentType.indexOf('application/octet-stream') != -1 || contentType.indexOf('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') != -1)) { download(response) return response } if (contentType && contentType.indexOf('application/json') == -1) { return response } let isValidexception = headers && '1' == headers.validexception const res = data // if the custom code is not 0, it is judged as an error. if (res.success) { return res } utilVue.loadHide() if (res.success == undefined) { //如果未定义,直接返回 return res } Message({ message: '
'+res.msg || 'Error'+'
', duration: 5000, dangerouslyUseHTMLString: true, iconClass: isValidexception ? 'el-notification__icon el-icon-warning' : 'el-notification__icon el-icon-error', customClass: isValidexception ? 'warn-ajax' : 'error-ajax', showClose: true, showIcon: true, offset: 1 }) //下面功能尚未实现,暂时注释掉 // return Promise.reject(new Error(res.msg || 'Error')) // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; if (res.code === 50008 || res.code === 50012 || res.code === 50014) { // to re-login // MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { // confirmButtonText: 'Re-Login', // cancelButtonText: 'Cancel', // type: 'warning' // }).then(() => { // store.dispatch('user/resetToken').then(() => { // location.reload() // }) // }) } return res // return Promise.reject(new Error(res.msg || 'Error')) }, (error) => { utilVue.loadHide() let response = error?error.response:null let status = response?response.status:null let data = response?response.data:null let isValidexception = response.headers && '1' == response.headers.validexception if (data && data.data && data.data.needLogin) { try { MessageBox.close() }catch (e) { } MessageBox.alert('会话超时,请重新登录!', '系统提示', { confirmButtonText: '确定', type: 'warning', callback: action => { // router.push('/login', () => { // // Message.error(error.response.data.msg) // location.reload() // }) } }) return Promise.reject(error) } let msg='未知异常' if(!status){ msg= '网络连接异常,请检查本地网络是否连接' }else if(status == 500){ if(response.data.msg){ msg= response.data.msg }else if(response.data.message){ msg= response.data.message if(msg.indexOf('服务器异常') == -1) msg='服务器异常,原因:'+msg }else if(typeof(response.data) == 'string' && response.data.indexOf('Proxy error') != -1){ msg= '服务器暂时无法访问,请稍候重试' } }else if(status == 502){ msg= '代理服务器暂时不可以使用,请稍候重试' } Message({ message: '
'+msg+'
', duration: 5000, dangerouslyUseHTMLString: true, iconClass: isValidexception ? 'el-notification__icon el-icon-warning' : 'el-notification__icon el-icon-error', customClass: isValidexception ? 'warn-ajax' : 'error-ajax', showClose: true, showIcon: true, offset: 1 }) return Promise.reject(error) } ) export default service