| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- import axios from 'axios';
- import { ElNotification, ElMessageBox } from 'element-plus';
- import sysConfig from "@/config";
- import tool from '@/utils/tool';
- import router from '@/router';
- axios.defaults.baseURL = ''
- axios.defaults.timeout = sysConfig.TIMEOUT
- // HTTP request 拦截器
- axios.interceptors.request.use(
- (config) => {
- let token = tool.cookie.get("TOKEN");
- if(token){
- config.headers[sysConfig.TOKEN_NAME] = sysConfig.TOKEN_PREFIX + token
- }
- if(!sysConfig.REQUEST_CACHE && config.method == 'get'){
- config.params = config.params || {};
- config.params['_'] = new Date().getTime();
- }
- var typeName = "web";
- let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
- if(flag){
- typeName = "wap";
- }
- config.headers["api-type"] = typeName
- Object.assign(config.headers, sysConfig.HEADERS)
- return config;
- },
- (error) => {
- return Promise.reject(error);
- }
- );
- //FIX 多个API同时401时疯狂弹窗BUG
- let MessageBox_401_show = false
- // HTTP response 拦截器
- axios.interceptors.response.use(
- (response) => {
- return response;
- },
- (error) => {
- if (error.response) {
- if (error.response.status == 404) {
- ElNotification.error({
- title: '请求错误',
- message: "Status:404,正在请求不存在的服务器记录!"
- });
- } else if (error.response.status == 500) {
- ElNotification.error({
- title: '请求错误',
- message: error.response.data.message || "Status:500,服务器发生错误!"
- });
- } else if (error.response.status == 401) {
- if(!MessageBox_401_show){
- MessageBox_401_show = true
- ElMessageBox.confirm('当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。', '无权限访问', {
- type: 'error',
- closeOnClickModal: false,
- center: true,
- confirmButtonText: '重新登录',
- beforeClose: (action, instance, done) => {
- MessageBox_401_show = false
- done()
- }
- }).then(() => {
- router.replace({path: '/login'});
- }).catch(() => {})
- }
- } else {
- ElNotification.error({
- title: '请求错误',
- message: error.message || `Status:${error.response.status},未知错误!`
- });
- }
- } else {
- ElNotification.error({
- title: '请求错误',
- message: "请求服务器无响应!"
- });
- }
- return Promise.reject(error.response);
- }
- );
- var http = {
- /** get 请求
- * @param {string} url 接口地址
- * @param {object} params 请求参数
- * @param {object} config 参数
- */
- get: function(url, params={}, config={}) {
- return new Promise((resolve, reject) => {
- axios({
- method: 'get',
- url: url,
- params: params,
- ...config
- }).then((response) => {
- resolve(response.data);
- }).catch((error) => {
- reject(error);
- })
- })
- },
- /** post 请求
- * @param {string} url 接口地址
- * @param {object} data 请求参数
- * @param {object} config 参数
- */
- post: function(url, data={}, config={}) {
- return new Promise((resolve, reject) => {
- axios({
- method: 'post',
- url: url,
- data: data,
- ...config
- }).then((response) => {
- resolve(response.data);
- }).catch((error) => {
- reject(error);
- })
- })
- },
- /** put 请求
- * @param {string} url 接口地址
- * @param {object} data 请求参数
- * @param {object} config 参数
- */
- put: function(url, data={}, config={}) {
- return new Promise((resolve, reject) => {
- axios({
- method: 'put',
- url: url,
- data: data,
- ...config
- }).then((response) => {
- resolve(response.data);
- }).catch((error) => {
- reject(error);
- })
- })
- },
- /** patch 请求
- * @param {string} url 接口地址
- * @param {object} data 请求参数
- * @param {object} config 参数
- */
- patch: function(url, data={}, config={}) {
- return new Promise((resolve, reject) => {
- axios({
- method: 'patch',
- url: url,
- data: data,
- ...config
- }).then((response) => {
- resolve(response.data);
- }).catch((error) => {
- reject(error);
- })
- })
- },
- /** delete 请求
- * @param {string} url 接口地址
- * @param {object} data 请求参数
- * @param {object} config 参数
- */
- delete: function(url, data={}, config={}) {
- return new Promise((resolve, reject) => {
- axios({
- method: 'delete',
- url: url,
- data: data,
- ...config
- }).then((response) => {
- resolve(response.data);
- }).catch((error) => {
- reject(error);
- })
- })
- },
- /** jsonp 请求
- * @param {string} url 接口地址
- * @param {string} name JSONP回调函数名称
- */
- jsonp: function(url, name='jsonp'){
- return new Promise((resolve) => {
- var script = document.createElement('script')
- var _id = `jsonp${Math.ceil(Math.random() * 1000000)}`
- script.id = _id
- script.type = 'text/javascript'
- script.src = url
- window[name] =(response) => {
- resolve(response)
- document.getElementsByTagName('head')[0].removeChild(script)
- try {
- delete window[name];
- }catch(e){
- window[name] = undefined;
- }
- }
- document.getElementsByTagName('head')[0].appendChild(script)
- })
- }
- }
- export default http;
|