1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
| import axios from 'axios' import { message, Modal } from "ant-design-vue"; import { getToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' import { tansParams, blobValidate } from '@/utils/ruoyi' import cache from '@/utils/cache' import { saveAs } from 'file-saver' import useUserStore from '@/store/modules/user'
import store from "@/store";
let downloadLoadingInstance;
export let isReLogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 10000 })
service.interceptors.request.use(config => { const isToken = (config.headers || {}).isToken === false const isRepeatSubmit = (config.headers || {}).repeatSubmit === false if (getToken() && !isToken) { config.headers['Authorization'] = 'Bearer ' + getToken() } if (config.method === 'get' && config.params) { let url = config.url + '?' + tansParams(config.params); url = url.slice(0, -1); config.params = {}; config.url = url; } if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { const requestObj = { url: config.url, data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, time: new Date().getTime() } const sessionObj = cache.session.getJSON('sessionObj') if (sessionObj === undefined || sessionObj === null || sessionObj === '') { cache.session.setJSON('sessionObj', requestObj) } else { const s_url = sessionObj.url; const s_data = sessionObj.data; const s_time = sessionObj.time; const interval = 1000; if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { const message = '数据正在处理,请勿重复提交'; console.warn(`[${s_url}]: ` + message) return Promise.reject(new Error(message)) } else { cache.session.setJSON('sessionObj', requestObj) } } } return config }, error => { Promise.reject(error) })
service.interceptors.response.use(res => { const code = res.data.code || 200; const msg = errorCode[code] || res.data.msg || errorCode['default'] if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { return res.data } if (code === 401) { if (!isReLogin.show) { isReLogin.show = true; Modal.confirm({ title: '系统提示', content: '登录状态已过期,您可以继续留在该页面,或者重新登录', cancelButtonProps: {style: {display: 'none'}}, onOk() { isReLogin.show = false; store.dispatch('user/logOut').then(() => { location.href = '/'; }) }, onCancel() { isReLogin.show = false; }, }) } } else if (code === 402) { message.error(msg) setTimeout(() => { store.dispatch('user/logOut').then(() => { location.href = '/'; }) },1000)
return Promise.reject(new Error(msg)) } else if (code === 500) { message.error(msg) return Promise.reject(new Error(msg)) } else if (code !== 200) { message.error(msg) return Promise.reject('error') } else { return Promise.resolve(res.data) } }, error => { console.log('err' + error) let msg = error.message; if (msg == "Network Error") { msg = "后端接口连接异常"; } else if (msg.includes("timeout")) { msg = "系统接口请求超时"; } else if (msg.includes("Request failed with status code")) { msg = "系统接口" + msg.substr(msg.length - 3) + "异常"; } message.error(msg) return Promise.reject(error) } )
export function download(url, params, filename) { downloadLoadingInstance = message.loading('正在下载数据,请稍候', 0) return service.post(url, params, { transformRequest: [(params) => { return tansParams(params) }], headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, responseType: 'blob' }).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; }).catch((r) => { console.error(r) message.error('下载文件出现错误,请联系管理员!') downloadLoadingInstance; }) }
export default service
参考地址 https:
|