import axios from 'axios'
import Cookies from 'js-cookie'
import router from '@/router/index'
import { Loading } from 'element-ui'
import { Message } from 'element-ui'
axios.defaults.timeout = 10000
axios.defaults.baseURL = process.env.BASE_URL
axios.defaults.responseType = 'json'
axios.defaults.withCredentials = false
axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
axios.defaults.headers.common['Pragma'] = 'no-cache'
axios.defaults.headers.common['Cache-Control'] = 'no-cache'
axios.interceptors.request.use(config => {
var userToken = Cookies.get('UserToken') ? Cookies.get('UserToken') : ''
config.headers.common['Authorization'] = userToken
return config
}, err => {
return Promise.reject(err)
})
function errorMsg(response) {
var tipMes = ''
switch (response.code) {
case 'ECONNABORTED':
tipMes = '登录超时,请重试'
break
case 'TokenExpired':
case 'Unauthorized':
tipMes = response.message + ',请重新登录'
router.push('/nopermt')
break
case 'BadRequest':
case 'InvalidParameter':
tipMes = response.message + ',请检查相应数据是否正确'
break
case 'UserLocked':
tipMes = response.message + ',请联系管理员'
break
case 'Forbidden':
case 'ServerError':
tipMes = response.message
break
default:
tipMes = response.message
break
}
return tipMes
}
function succMsg(response) {
response = response.data
var succMes = ''
var noAlert = ['加载数据成功']
if (response === null) return ''
switch (response.type) {
case 'SUCCESS':
succMes = noAlert.indexOf(response.message) > -1 ? '' : response.message
break
default:
break
}
return succMes
}
axios.interceptors.response.use(response => {
if (errorMsg(response)) {
response['errorFlag'] = true
Message.error({ message: errorMsg(response), duration: 4000 })
} else if (succMsg(response)) {
Message.success({ message: succMsg(response), duration: 4000 })
}
return response
}, error => {
var response = error.response ? error.response.data : error
Message.error({ message: errorMsg(response), duration: 4000 })
response['errorFlag'] = true
return Promise.reject(response)
})
export default axios
const ajax = {
get(url, data = {}) {
var loadInstance = Loading.service()
return new Promise((resolve, reject) => {
axios.get(url, {
params: data
}).then(response => {
loadInstance.close()
resolve(response.data)
}, err => {
loadInstance.close()
reject(err)
})
})
},
post(url, data = {}) {
var loadInstance = Loading.service()
return new Promise((resolve, reject) => {
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'
axios.post(url, data).then(response => {
loadInstance.close()
resolve(response.data)
}, err => {
loadInstance.close()
reject(err)
})
})
}
}
export {
ajax
}