import axios from "axios" // 根据域名上下文的区别,设置不同的请求地址 if (process.env.NODE_ENV === 'development') { axios.defaults.baseURL = `${window.location.origin}/pp-adm/` // axios.defaults.baseURL = `http://192.168.34.236:20020/pp-adm/` //测试 // // axios.defaults.baseURL = `http://10.0.22.54:20020/pp-adm/` //后端开发本地 } else { let baseUrl = '' if (location.hostname === "fin.pengyouph.com") { baseUrl = process.env.BASE_API; } else { baseUrl = window.location.origin + "/pp-adm"; } axios.defaults.baseURL = baseUrl //process.env.BASE_API } axios.interceptors.request.use(config => { // config.url = 'api/' + config.url // 开发时,使用api/ 上下文指代代理域名 return config; }, err => { return Promise.reject(err); }); // 响应拦截器 axios.interceptors.response.use(function (response) { // 登录失效情况 if (response.data.errorCode && response.data.errorCode === '003' && process.env.NODE_ENV !== 'development') { window.parent.location.href = response.data.data.loginUrl return; } // 下载 if (response.headers && response.headers['content-type'] === 'application/vnd.ms-excel') { let url = response.request.responseURL window.location.href = url } else { return response } }, function (error) { return Promise.reject(error); }) function checkStatus(response) { // 如果http状态码正常,则直接返回数据 if (response && (response.status === 200 || response.status === 304 || response.status === 400)) { return response } // 异常状态下,把错误信息返回去 return { status: -404, msg: '网络异常' } } function checkCode(res) { // 如果code异常(这里已经包括网络错误,服务器错误,后端抛出的错误),可以弹出一个错误提示,告诉用户 if (res.status === 404) { alert(res.msg) } if (res.data && (!res.data.success)) { // alert(res.data.error_msg) } return res } // post请求数据配置 const requestConfig = (url, data, headerType = 'json') => { switch (headerType) { case 'formData': return axios({ method: 'post', url, data, timeout: 20000, headers: { 'Content-Type': 'multipart/form-data' } }) break case 'json': return axios({ method: 'post', url, data, timeout: 20000, headers: { 'Content-Type': 'application/json;charset=UTF-8' } }) break case 'qs': return axios({ method: 'post', url, params: data, timeout: 20000, headers: { 'Content-Type': 'application/json;charset=UTF-8' } }) default: } } export default { post(url, data, headerType) { // post return new Promise((resolve, reject) => { requestConfig(url, data, headerType).then(res => { resolve(res) }).catch(err => { reject(err) }) }) }, get(url, params) { // get return axios({ method: 'get', url, params, // get 请求时带的参数 timeout: 50000, // headers: {'Content-Type':'application/json'} }).then( (response) => { return checkStatus(response) } ).then( (res) => { return checkCode(res) } ) }, download(url, data, fileName) { return new Promise((resolve, reject) => { axios.defaults.headers['content-type'] = 'application/json;charset=UTF-8' axios({ method: 'post', timeout: 20000, url: url, // 请求地址 data: data, // 参数 responseType: 'blob' // 表明返回服务器返回的数据类型 }).then( response => { resolve(response.data) const blob = new Blob([response.data], { type: 'application/download' }) // IE下载 if (window.navigator.msSaveOrOpenBlob) { navigator.msSaveBlob(blob, fileName) } else { // 非IE下载 var link = document.createElement('a') link.href = window.URL.createObjectURL(blob) link.download = fileName link.click() // 释放内存 window.URL.revokeObjectURL(link.href) } }, err => { reject(err) } ).catch(error => { console.log(error) }) }) } }