You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
3.5 KiB

6 years ago
import axios from 'axios'
// import qs from 'qs'
5 years ago
import { MessageBox, Message } from 'element-ui'
6 years ago
import router from '@/router/index'
import store from '@/store/index'
5 years ago
import signMd5Utils from '@/util/sign'
6 years ago
const toLogin = () => {
router.push({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
}
const api = axios.create({
baseURL: process.env.NODE_ENV !== 'development' && process.env.VUE_APP_API_ROOT,
5 years ago
timeout: 10000,
responseType: 'json',
6 years ago
withCredentials: false,
headers: {
'Content-Type': 'application/json'
6 years ago
}
})
api.interceptors.request.use(
request => {
5 years ago
/**
* 全局拦截请求发送前提交的参数
* 以下代码为示例在登录状态下分别对 post get 请求加上 token 参数
*/
if (store.getters['token/isLogin']) {
request.headers.token = store.state.user.token
}
6 years ago
if (request.method == 'post') {
if (request.data instanceof FormData) {
if (store.getters['user/isLogin']) {
6 years ago
// 如果是 FormData 类型(上传图片)
request.data.append('token', store.state.user.token)
6 years ago
}
} else {
// 带上 token
if (request.data == undefined) {
request.data = {}
}
5 years ago
// 参数验签
6 years ago
let timestamp = new Date().getTime()
request.data.timestamp = '' + timestamp
let sign = signMd5Utils.getSign(request.url, request.data)
request.data.sign = sign
}
} else if (request.method === 'get') {
6 years ago
// 带上 token
if (request.params == undefined) {
request.params = {}
}
let timestamp = new Date().getTime()
request.params.timestamp = '' + timestamp
let sign = signMd5Utils.getSign(request.url, request.params)
request.params.sign = sign
}
return request
}
)
api.interceptors.response.use(
response => {
5 years ago
/**
* 全局拦截请求发送后返回的数据如果数据有报错则在这做全局的错误提示
5 years ago
* 假设返回数据格式为{"code":500,"msg":"邮箱地址不正确","data":null}
* 规则是当 code 200 时表示请求成功500 发生错误
* 401 时表示接口需要登录或者登录状态失效需要重新登录
* 请求出错时 msg 会返回错误信息
5 years ago
* 则代码如下
*/
5 years ago
const res = response.data
console.log(res)
if (res.code === 200) {
return Promise.resolve(res)
} else if (res.code === 500) {
// 这里做错误提示,如果使用了 element ui 则可以使用 Message 进行提示
Message({
message: res.msg || 'Error',
type: 'error',
duration: 5 * 1000
})
} else if (res.code === 401) {
// to re-login
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
toLogin()
})
6 years ago
}
5 years ago
return Promise.reject(res)
6 years ago
},
error => {
return Promise.reject(error)
}
)
5 years ago
export default api