import axios from 'axios'
|
import { Message } from 'element-ui'
|
import store from '@/store/index'
|
import { getRouteToken, removeRouteToken } from '@/utils/auth'
|
|
// 请求超时时间,10s
|
const requestTimeOut = 30 * 1000
|
const success = 200
|
// 提示信息显示时长
|
const messageDuration = 5 * 1000
|
|
// 系统全局请求对象
|
const request = axios.create({
|
baseURL: process.env.VUE_APP_BASE_API,
|
timeout: requestTimeOut,
|
responseType: 'json',
|
validateStatus(status) {
|
return status === success
|
}
|
})
|
|
request.interceptors.request.use(
|
config => {
|
try {
|
const token = getRouteToken()
|
if (token) {
|
config.headers['Authorization'] = 'bearer ' + token
|
}
|
} catch (e) {
|
console.error(e)
|
}
|
return config
|
},
|
error => {
|
console.log(error)
|
return Promise.reject(error)
|
}
|
)
|
|
request.interceptors.response.use((config) => {
|
return config
|
}, (error) => {
|
if (error.response) {
|
const errorMessage = error.response.data === null ? '系统内部异常,请联系网站管理员' : error.response.data.message
|
switch (error.response.status) {
|
case 404:
|
Message({
|
message: '很抱歉,资源未找到',
|
type: 'error',
|
duration: messageDuration
|
})
|
break
|
case 403:
|
Message({
|
message: '很抱歉,当前网关用户暂无该操作权限',
|
type: 'error',
|
duration: messageDuration
|
})
|
break
|
case 401:
|
remove()
|
Message({
|
message: '网关认证已失效,请重新认证',
|
type: 'error',
|
duration: messageDuration
|
})
|
break
|
default:
|
Message({
|
message: errorMessage,
|
type: 'error',
|
duration: messageDuration
|
})
|
break
|
}
|
}
|
return Promise.reject(error)
|
})
|
|
const r = {
|
post(url, params) {
|
return request.post(url, params, {
|
transformRequest: [(params) => {
|
return tansParams(params)
|
}],
|
headers: {
|
'Content-Type': 'application/x-www-form-urlencoded'
|
}
|
})
|
},
|
put(url, params) {
|
return request.put(url, params, {
|
transformRequest: [(params) => {
|
return tansParams(params)
|
}],
|
headers: {
|
'Content-Type': 'application/x-www-form-urlencoded'
|
}
|
})
|
},
|
get(url, params) {
|
let _params
|
if (Object.is(params, undefined)) {
|
_params = ''
|
} else {
|
_params = '?'
|
for (const key in params) {
|
// eslint-disable-next-line no-prototype-builtins
|
if (params.hasOwnProperty(key) && params[key] !== null) {
|
_params += `${key}=${params[key]}&`
|
}
|
}
|
}
|
return request.get(`${url}${_params}`)
|
},
|
delete(url, params) {
|
let _params
|
if (Object.is(params, undefined)) {
|
_params = ''
|
} else {
|
_params = '?'
|
for (const key in params) {
|
// eslint-disable-next-line no-prototype-builtins
|
if (params.hasOwnProperty(key) && params[key] !== null) {
|
_params += `${key}=${params[key]}&`
|
}
|
}
|
}
|
return request.delete(`${url}${_params}`)
|
}
|
}
|
|
function tansParams(params) {
|
let result = ''
|
Object.keys(params).forEach((key) => {
|
if (!Object.is(params[key], undefined) && !Object.is(params[key], null)) {
|
result += encodeURIComponent(key) + '=' + encodeURIComponent(params[key]) + '&'
|
}
|
})
|
return result
|
}
|
|
function remove() {
|
removeRouteToken()
|
store.commit('account/setRouteToken', null)
|
}
|
|
export default r
|