/* * @Descripttion: * @version: * @Author: kBank * @Date: 2021-11-19 15:21:54 */ import axios from 'axios' import { MessageBox, Message, Loading } from 'element-ui' import store from '@/store' import { getToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' import { tansParams, blobValidate } from "@/utils/ruoyi" import { saveAs } from 'file-saver' // create an axios instance let downloadLoadingInstance // 是否显示重新登录 export let isRelogin = { show: false } const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url // withCredentials: true, // send cookies when cross-domain requests timeout: 300000 // request timeout }) // request interceptor service.interceptors.request.use( config => { if (localStorage.getItem('lang')) { config.headers['Accept-Language'] = localStorage.getItem('lang'); } else { config.headers['Accept-Language'] = 'zh-CN' } if (getToken()) { config.headers['Authorization'] = getToken() } config.headers['Source'] = '1' // get请求映射params参数 if (config.method === 'get' && config.params) { let url = config.url + '?' for (const propName of Object.keys(config.params)) { const value = config.params[propName] var part = encodeURIComponent(propName) + '=' if (value !== null && typeof (value) !== 'undefined') { if (typeof value === 'object') { for (const key of Object.keys(value)) { let params = propName + '[' + key + ']' var subPart = encodeURIComponent(params) + '=' url += subPart + encodeURIComponent(value[key]) + '&' } } else { url += part + encodeURIComponent(value) + '&' } } } url = url.slice(0, -1) config.params = {} config.url = url } return config }, error => { // do something with request error console.log(error) // for debug return Promise.reject(error) } ) // 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 => { const res = response.data // 未设置状态码则默认成功状态 const code = res.code || 200 // 获取错误信息 const msg = res.msg // if (res.code !== 200 && res.code !== 506 && res.msg) { // console.log('%c [ res.code ]-57', 'font-size:13px; background:#3e04db; color:#8248ff;', res.code) // console.log('%c [ res.code ]-57', 'font-size:13px; background:#3e04db; color:#8248ff;', res.msg) // Message({ // message: res.msg || 'Error', // type: 'error', // duration: 5 * 1000 // }) // if (res.code == 401) { // } // return Promise.reject(new Error(res.msg || 'Error')) // } else { // return res // } if (code === 401) { if (!isRelogin.show) { isRelogin.show = true MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { isRelogin.show = false location.href = '/login' store.dispatch('user/Logout').then(() => { }) }).catch(() => { isRelogin.show = false }) } return Promise.reject('无效的会话,或者会话已过期,请重新登录。') } else if (code === 500) { Message({ message: msg, type: 'error' }) return res } else if (code === 601) { Message({ message: msg, type: 'warning' }) return Promise.reject('error') } else { return res } }, error => { console.log('err' + error) // for debug Message({ message: error.message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } ) // 通用下载方法 export function download(url, params, filename, config) { downloadLoadingInstance = Loading.service({ text: '正在下载数据,请稍候', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' }) return service.post(url, params, { transformRequest: [(params) => { return tansParams(params) }], headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, responseType: 'blob', ...config }).then(async (data) => { const isLogin = await blobValidate(data) if (isLogin) { const blob = new Blob([data]) saveAs(blob, filename) } else { const resText = await data.text() const rspObj = JSON.parse(resText) const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] Message.error(errMsg) } downloadLoadingInstance.close() }).catch((r) => { console.error(r) Message.error('下载文件出现错误,请联系管理员!') downloadLoadingInstance.close() }) } export default service