/** axios封装
|
* 请求拦截、相应拦截、错误统一处理
|
*/
|
import axios from 'axios'
|
import router from '@/router/index'
|
import store from "@/store/index"
|
import { Message, MessageBox } from 'element-ui'
|
|
const isDev = process.env.NODE_ENV === 'development'
|
|
// if(location.hostname === 'scp.jycash.cn'){
|
// axios.defaults.baseURL = process.env.VUE_APP_PROD_API_HOST
|
// }else if(location.host === '10.10.16.114'){
|
// axios.defaults.baseURL = process.env.VUE_APP_HTTPS_API_HOST
|
// }else{
|
// axios.defaults.baseURL = process.env.VUE_APP_API_HOST
|
// }
|
|
if (location.hostname === 'scp.jycash.cn') {
|
axios.defaults.baseURL = process.env.VUE_APP_API_HOST
|
} else {
|
axios.defaults.baseURL = window.location.origin
|
}
|
|
|
axios.defaults.withCredentials = true
|
|
// 请求超时时间
|
axios.defaults.timeout = 30000
|
|
// post请求头
|
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'
|
|
// 响应拦截器
|
axios.interceptors.response.use(
|
response => {
|
// 您的登录已失效
|
if (typeof response.data === 'object') {
|
const { errorCode, code, data, ext } = response.data
|
const eCode = code || errorCode
|
const eData = ext || data
|
// {"data":{"loginUrl":"http://10.10.16.114/iPortal/login.html"},"errorCode":"003","errorDesc":"您的登录已失效,请重新登录!","resultCode":"0"}
|
if (eCode === '003' && typeof eData === 'object') {
|
parent.location.reload()
|
return Promise.reject(response.data)
|
}
|
}
|
if (response.data.code == '200') {
|
return Promise.resolve(response)
|
} else {
|
store.commit('close', true)
|
if (response.data.code == 'CTS0116') {
|
MessageBox.alert(response.data.message, '提示', {
|
confirmButtonText: '确定',
|
center: true,
|
callback: action => { }
|
});
|
} else {
|
// 因为部分接口需要另外处理,不能展示提示语
|
console.log('response:', response)
|
if (
|
response.config.url.indexOf('/nextSubmit') == -1 &&
|
response.config.url.indexOf('/notOpinionSubmit') == -1 &&
|
response.data.code
|
) {
|
Message({
|
message: response.data.message,
|
type: "warning",
|
duration: 6000
|
})
|
}
|
}
|
return Promise.resolve(response)
|
}
|
},
|
// 服务器状态码不是200的情况
|
error => {
|
if (error.code == 'ECONNABORTED' && error.message.indexOf('timeout') != -1 && !error.config._retry) {
|
Message({
|
message: '请求超时',
|
type: "error",
|
duration: 3000
|
})
|
}
|
if (error.response) {
|
switch (error.response.status) {
|
// 401: 未登录
|
// 未登录则跳转登录页面,并携带当前页面的路径
|
// 在登录成功后返回当前页面,这一步需要在登录页操作。
|
case 401:
|
router.replace({
|
path: '/login',
|
query: { redirect: router.currentRoute.fullPath }
|
})
|
break
|
// 403 token过期
|
// 登录过期对用户进行提示
|
// 清除本地token和清空vuex中token对象
|
// 跳转登录页面
|
case 403:
|
Message({
|
message: '登录过期,请重新登录',
|
type: "error",
|
duration: 6000
|
})
|
// 清除token
|
// localStorage.removeItem('token')
|
// store.commit('loginSuccess', null)
|
// 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
|
setTimeout(() => {
|
router.replace({
|
path: '/login',
|
query: {
|
redirect: router.currentRoute.fullPath
|
}
|
})
|
}, 1000)
|
break
|
// 404请求不存在
|
case 404:
|
Message({
|
message: '网络请求不存在',
|
type: "error",
|
duration: 6000
|
})
|
break
|
// 其他错误,直接抛出错误提示
|
default:
|
Message({
|
message: error.response.data.message,
|
type: "error",
|
duration: 6000
|
})
|
}
|
}
|
return Promise.reject(error.response)
|
}
|
)
|
|
/**
|
* addMenuId api地址添加全局参数menuId
|
* @param {String} url 接口地址
|
*/
|
function addMenuId(url) {
|
// 本地调试使用
|
const menuId = parent.g_menu_id || ''
|
const contactStr = url.includes('?') ? '&' : '?'
|
if (url.includes('menuId=')) {
|
return url
|
}
|
return `${url}${contactStr}menuId=${menuId}`
|
// 本地连189环境配置具体的目录menuId
|
// return `${url}${contactStr}menuId=469`
|
}
|
|
/**
|
* get方法,对应get请求
|
* @param {String} url [请求的url地址]
|
* @param {Object} params [请求时携带的参数]
|
*/
|
export function get(url, params) {
|
return new Promise((resolve, reject) => {
|
axios
|
.get(addMenuId(url), {
|
params: params
|
})
|
.then(res => {
|
resolve(res.data)
|
})
|
.catch(err => {
|
reject(err.data)
|
})
|
})
|
}
|
|
/**
|
* post方法,对应post请求
|
* @param {String} url [请求的url地址]
|
* @param {Object} params [请求时携带的参数]
|
*/
|
export function post(url, params, responseType) {
|
return new Promise((resolve, reject) => {
|
axios
|
.post(addMenuId(url), params, responseType)
|
.then(res => {
|
if (res.data.code) {
|
resolve(res.data)
|
} else {
|
resolve(res)
|
}
|
})
|
.catch(err => {
|
reject(err.data)
|
})
|
})
|
}
|
|
/**
|
* put方法,对应put请求
|
* @param {String} url [请求的url地址]
|
* @param {Object} params [请求时携带的参数]
|
*/
|
export function put(url, params, responseType) {
|
return new Promise((resolve, reject) => {
|
axios
|
.put(addMenuId(url), params, responseType)
|
.then(res => {
|
if (res.data.code) {
|
resolve(res.data)
|
} else {
|
resolve(res)
|
}
|
})
|
.catch(err => {
|
reject(err.data)
|
})
|
})
|
}
|
|
/**
|
* delete方法,对应delete请求
|
* @param {String} url [请求的url地址]
|
* @param {Object} params [请求时携带的参数]
|
*/
|
export function del(url, params, responseType) {
|
return new Promise((resolve, reject) => {
|
axios
|
.delete(addMenuId(url), params, responseType)
|
.then(res => {
|
if (res.data.code) {
|
resolve(res.data)
|
} else {
|
resolve(res)
|
}
|
})
|
.catch(err => {
|
reject(err.data)
|
})
|
})
|
}
|