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) => { // 所有请求都添加/sc-user-auth前缀,方便接口代理 // config.url = `/sc-user-auth${config.url}`; if (config.url.indexOf('/sc-user-auth') !== -1) { config.url = config.url; } else if (config.url.indexOf('/sc-uims-message') !== -1) { config.url = config.url; } else if (config.url.indexOf('/sc-operation-manager') !== -1) { config.url = config.url; } else if (config.url.indexOf('/sc-zoniot-water') !== -1) { config.url = config.url; } else if (config.url.indexOf('/sc-user-center') !== -1) { config.url = config.url; } else { config.url = `/sc-user-center${config.url}`; } // config.headers['Accept'] = '*/*' 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.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) { Vue.prototype.$msgBox('你的登录已超时,请重新登录', '', 'warning', { width: '290px', showCancelButton: false, confirmButtonText: '确定', showClose: false }).then(() => { window.open(config.loginUrl, '_self'); window.relogin = false; localStorage.removeItem('SC_token'); }).catch(() => { }); } else if (data == 1) { Vue.prototype.$msgBox('该账号已在其他地址登录,如需访问请重新登录', '', 'warning', { width: '290px', showCancelButton: false, confirmButtonText: '确定', showClose: false }).then(() => { window.open(config.loginUrl, '_self'); window.relogin = false; localStorage.removeItem('SC_token'); }).catch(() => { }); } else { Vue.prototype.$msgBox('你的账号已被停用,如有问题请联系管理员', '', 'warning', { width: '290px', showCancelButton: false, confirmButtonText: '确定', showClose: false }).then(() => { window.open(config.loginUrl, '_self'); window.relogin = false; localStorage.removeItem('SC_token'); }).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); } };