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)
|
})
|
})
|
}
|
}
|