import axios from 'axios' import { Notification, MessageBox, Message } from 'element-ui' import store from '@/store' import router from '@/router' import { getToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' import { tansParams, preventCloseFu, jsonSearchFu } from "@/utils/hciot"; axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 创建axios实例 const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: process.env.VUE_APP_BASE_API, // 超时 timeout: 30000 }) // request拦截器 service.interceptors.request.use(config => { // const isToken = (config.headers || {}).isToken === false // if (getToken() && !isToken) { // config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 // } return config }, error => { console.log(error) Promise.reject(error) }) // 响应拦截器 service.interceptors.response.use(res => { preventCloseFu(); const code = res.data.code || 200; const message = errorCode[code] || res.data.msg || errorCode['default'] var urlObj = jsonSearchFu(window.location.search); if (code === 401) { if (process.env.VUE_APP_SSO == 'true') { store.dispatch('FedLogOut').then(() => { location.reload() // 为了重新实例化vue-router对象 避免bug }) } else { MessageBox.confirm( '登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' } ).then(() => { store.dispatch('FedLogOut').then(() => { // location.reload() // 为了重新实例化vue-router对象 避免bug console.log('FedLogOut', urlObj['redirect']) if (urlObj['redirect']) { window.location.replace(`/login?redirect=${urlObj['redirect']}`) } else { window.location.replace('/login?redirect=%2Findex') } }) }) } } else if (code === 500) { Message({ message: message, type: 'error' }) return Promise.reject(new Error(message)) } else if (code !== 200 && code !== 1000 && code !== 100) { Notification.error({ title: '请求接口错误' }) return Promise.reject('error') } else { return res.data } }, error => { var urlObj = jsonSearchFu(window.location.search); if (error.message.indexOf('401') >= 0) { if (process.env.VUE_APP_SSO == 'true') { store.dispatch('FedLogOut').then(() => { location.reload() // 为了重新实例化vue-router对象 避免bug }) } else { MessageBox.confirm( '登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' } ).then(() => { store.dispatch('FedLogOut').then(() => { // location.reload() // 为了重新实例化vue-router对象 避免bug // window.location.replace('/login?redirect=%2Findex') if (urlObj['redirect']) { window.location.replace(`/login?redirect=${urlObj['redirect']}`) } else { window.location.replace('/login?redirect=%2Findex') } }) }) } } else if (error.message.indexOf('404') >= 0) { Message({ message: '404找不到路径,请联系管理员解决!', type: 'error', duration: 5 * 1000 }) } else { Message({ message: error.message, type: 'error', duration: 5 * 1000 }) } return Promise.reject(error) } ) // 通用下载方法 export function download(url, params, filename) { return service.post(url, params, { transformRequest: [(params) => { return tansParams(params) }], responseType: 'blob' }).then((data) => { const content = data const blob = new Blob([content]) if ('download' in document.createElement('a')) { const elink = document.createElement('a') elink.download = filename elink.style.display = 'none' elink.href = URL.createObjectURL(blob) document.body.appendChild(elink) elink.click() URL.revokeObjectURL(elink.href) document.body.removeChild(elink) } else { navigator.msSaveBlob(blob, filename) } }).catch((r) => { console.error(r) }) } export function downloadCustom(url, params, filename) { const queryStr = Object.keys(params) .map(function (key) { return encodeURIComponent(key) + "=" + encodeURIComponent(params[key]); }) .join("&"); return service.post(`${url}?${queryStr}`,params, { transformRequest: [(params) => { return tansParams(params) }], responseType: 'blob' }).then((data) => { const content = data const blob = new Blob([content]) if ('download' in document.createElement('a')) { const elink = document.createElement('a') elink.download = filename elink.style.display = 'none' elink.href = URL.createObjectURL(blob) document.body.appendChild(elink) elink.click() URL.revokeObjectURL(elink.href) document.body.removeChild(elink) } else { navigator.msSaveBlob(blob, filename) } }).catch((r) => { console.error(r) }) } export default service