import axios from 'axios'; import qs from 'qs'; import Vue from 'vue'; import config from '@/config' // 获取CancelToken const CancelToken = axios.CancelToken; const source = CancelToken.source(); var http = axios.create({ timout: 30000 }); // axios request 拦截器 http.interceptors.request.use( config => { // 所有请求都添加/user-auth前缀,方便接口代理 // config.url = `/user-auth${config.url}`; config.url = `${config.url.indexOf('/sc-user-center') == 0 ? '' : '/sc-user-auth'}${config.url}`; config.headers[localStorage.getItem('SC_token') && 'Authorization'] = 'Bearer ' + localStorage.getItem('SC_token'); // 全局添加cancelToken config.cancelToken = source.token; return config; }, err => { return Promise.reject(err); } ); // axios响应拦截 http.interceptors.response.use( res => { return Promise.resolve(res.data); }, err => { if (err&&err.response.status == 401) { axios({ url:'/sc-user-auth/user/getUserStatus?accessToken='+localStorage.getItem('SC_token'), method:'get' }).then((response)=>{ if (window.relogin) return false; window.relogin = true; let data = response.data.data; if (data == 0) { ELEMENT.MessageBox('你的登录已超时,请重新登录', '提示', 'warning', { confirmButtonText: '确定', showClose: false }) .then(() => { window.open(config.baseUrl, '_self');//弹出的窗口替换本身 window.relogin = false; localStorage.removeItem('SC_token'); sessionStorage.removeItem("tabs"); localStorage.removeItem('menupath'); }) .catch(() => { }); } else if (data == 1) { ELEMENT.MessageBox('该账号已在其他地址登录,如需访问请重新登录', '提示', 'warning', { confirmButtonText: '确定', showClose: false }) .then(() => { window.open(config.baseUrl, '_self'); window.relogin = false; localStorage.removeItem('SC_token'); sessionStorage.removeItem("tabs"); localStorage.removeItem('menupath'); }) .catch(() => { }); } else { ELEMENT.MessageBox('你的账号已被停用,如有问题请联系管理员', '提示', 'warning', { confirmButtonText: '确定', showClose: false }) .then(() => { window.open(config.baseUrl, '_self'); window.relogin = false; localStorage.removeItem('SC_token'); localStorage.removeItem('menupath'); sessionStorage.removeItem("tabs"); }) .catch(() => { }); } }) return; } if (axios.isCancel(err)) return new Promise(() => {}); // 取消请求的情况下,终端Promise调用链 return Promise.reject(err); } ); export default { vm: '', post(url, data) { return new Promise((resolve, reject) => { http.post(url, data) .then(res => { this.callback(resolve, res); }) .catch(err => { this.reject(reject, err); }); }); }, postForm(url, data) { return new Promise((resolve, reject) => { http.post(url, qs.stringify(data)) .then(res => { this.callback(resolve, res); }) .catch(err => { this.reject(reject, err); }); }); }, get(url, data) { for (let item in data) { if (data[item] && 'string' == typeof data[item]) { data[item] = data[item].replace(/[`!@#$%^&*()\[\]\\{}=\'\"\/<>]/g, ''); } } return new Promise((resolve, reject) => { http.get(url, { params: data }) .then(res => { this.callback(resolve, res); }) .catch(err => { this.reject(reject, err); }); }); }, delete(url, data) { return new Promise((resolve, reject) => { http.delete(url, { params: data }) .then(res => { this.callback(resolve, res); }) .catch(err => { this.reject(reject, err); }); }); }, deleteJSON(url, data) { return new Promise((resolve, reject) => { http.delete(url, { data: data }) .then(res => { this.callback(resolve, res); }) .catch(err => { this.reject(reject, err); }); }); }, putForm(url, data) { return new Promise((resolve, reject) => { http.put(url, qs.stringify(data)) .then(res => { this.callback(resolve, res); }) .catch(err => { this.reject(reject, err); }); }); }, put(url, data) { return new Promise((resolve, reject) => { http.put(url, data) .then(res => { this.callback(resolve, res); }) .catch(err => { this.reject(reject, err); }); }); }, callback(resolve, res) { resolve(res); }, reject(reject, err) { if (err instanceof Error) { ELEMENT.Message.error(err.message); } reject(err); } };