大家好,欢迎来到IT知识分享网。
import axios from 'axios' import Qs from 'qs'//(如果只是get请求就不需要引qs)//序列化插件 import md5 from 'js-md5';//加密插件 import router from '../src/router/index' import JSONbig from 'json-bigint' import messages from '../src/components/commonjs/common'; import {Loading} from 'element-ui' import _ from 'lodash'//这里时用的防抖函数 import Vue from 'vue'; let loadingInstance; //loading 实例 let needLoadingRequestCount = 0; //当前正在请求的数量 axios.defaults.withCredentials = false; //false 不跨域 true 跨域 //是否允许携带cookie跨域 export default function(path, params, method = "GET", headerType = "json"){ let pending = []; // 声明一个数组用于存储每个请求的取消函数和axios标识 let cancelToken = axios.CancelToken;//用于取消已发送的请求 let removePending = (config) => { for (let i in pending) { if (pending[i].url === config.url.split('?')[0]) { // 在当前请求在数组中存在时执行取消函数 pending[i].f(); // 执行取消操作 pending.splice(i, 1); // 把pending记录删掉 } } } let data = {};//baseURL = "" let arrs = ['LoginUser','SendVerifyCode','GetEnterpriseListByTel','GetCompanys','SelectCompany','Logout'] function getfilter(){ return arrs.filter(item=>{ return path.indexOf(item)>-1 }) } for(var i in params){//去除参数的空格 if (params.hasOwnProperty(i) === true){ if(typeof params[i] == 'string'){ if(params[i] !=''){ params[i] = params[i].trim(); } // this.accountSearch[i] = this.accountSearch[i].trim(); } } } let loading; function showLoading() { // card__body //loadingInstance = null; let main = document.querySelector('.el-card') if (main) { if (needLoadingRequestCount === 0 && !loadingInstance) { loadingInstance = Loading.service({ target: main, text: '正在加载...', background: 'rgba(255,255,255,255,.7)' }); } needLoadingRequestCount++; } } function closeLoading() { Vue.nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭 needLoadingRequestCount--; needLoadingRequestCount = Math.max(needLoadingRequestCount, 0); // 保证大于等于0 if (needLoadingRequestCount === 0) { if (loadingInstance) { hideLoading() } } }); } var hideLoading = _.debounce(() => {//防抖 loadingInstance.close(); loadingInstance = null; }, 300); let token = ''; var strCookies = document.cookie; strCookies = strCookies.replace(/\s*/g,"");//去空格 //截取变成cookie数组 var array = strCookies.split(';'); for (let i = 0; i < array.length; i++) { //将cookie截取成两部分 var item = array[i].split("="); //判断cookie的name 是否相等 if (item[0] == 'access_token') { axios.defaults.headers['Access-Token'] = item[1]; localStorage.setItem('Token',item[1]); } } if(getfilter().length<=0){ var usermsg = JSON.parse(localStorage.getItem('usermsg'))||''; axios.defaults.headers['Authorization'] = md5(usermsg.LoginUserID + localStorage.getItem('TokenStr'))+ '&'+new Date().getTime().toString()+'&'+usermsg.LoginUserID; }else{ } //设置请求头 if (method === 'POST') { //post请求 if (headerType === "json") { axios.defaults.headers["Content-Type"] = 'application/json;charset=UTF-8' data = params } else{ axios.defaults.headers["Content-Type"] = 'application/x-www-form-urlencoded;charset=UTF-8' data = Qs.stringify(params); } }else if(method === 'GET'){ axios.defaults.headers["X-Requested-With"] = 'XMLHttpRequest'; axios.defaults.headers["Access-Control-Allow-Origin"] = "*"; if (headerType == !'json') { axios.defaults.headers["Content-Type"] = 'application/x-www-form-urlencoded;charset=UTF-8' axios.defaults.headers["Access-Control-Allow-Origin"] = "*"; } data = Qs.stringify(params); path = path + '?' + data data = {}; } let headers = axios.defaults.headers; // 请求拦截 axios.interceptors.request.use(function (config) { showLoading(); removePending(config); // 在一个axios发送前执行一下判定操作,在removePending中执行取消操作 if(config.url.indexOf('Channel/SearchOne')<=-1){//在企业详情页 必须请求两次不同的数据 config.cancelToken = new cancelToken(function executor (c) { // 本次axios请求的配置添加cancelToken pending.push({ url: config.url.split('?')[0], f: c }); }) } return config; }, function (error) { return Promise.reject(error); }); //响应拦截 axios.interceptors.response.use(response=>{ closeLoading(); removePending(response.config); // 在一个axios响应后再执行一下取消操作,把已经完成的请求从pending中移除 return response },err=>{ closeLoading(); if (err && err.response) { switch (err.response.status) { case 400: err.message = err.response.data.detail.issue; messages.message.error(err.message) break; case 401: localStorage.setItem('UserName','') localStorage.setItem('ispagehead','') localStorage.setItem('QYMC','') localStorage.setItem('QYID','') localStorage.setItem('isLogin','0') localStorage.setItem('isLogins','0') var exdate = new Date(); exdate.setDate(exdate.getDate() -1); window.document.cookie = 'access_token=;path=/;expires='+exdate.toGMTString() localStorage.setItem('usermsg','') localStorage.setItem('TokenStr','') localStorage.setItem('AccessToken','') router.push({ path: '/'}); if(err.response.config.url.indexOf('Login/GetLoginUserInfo')>-1){ }else{ err.message = '登陆过期,请重新登录'; messages.message.error(err.message) } break; case 403: if(err.response.config.url.indexOf('Channel/GetAllSelect')>-1){ }else{ messages.message.error(err.message) } break; case 404: messages.message.error('请求出错(404)') break; case 408: messages.message.error('请求超时(408)') break; case 412: router.push({ path: '/SelectCompany'}); break; case 470: err.message = err.response.data.detail.issue; messages.message.error(err.message) break; case 500: //messages.message.error('服务器错误(500)') break; case 501: // messages.message.error('服务未实现(501)') break; case 502: messages.message.error('网络错误(502)') break; case 503: messages.message.error('服务不可用(503)') break; case 504: messages.message.error('网络超时(504)') break; case 505: messages.message.error('HTTP版本不受支持(505)') break; } }else if (err.__CANCEL__) { //messages.message.error('操作过于频繁,稍后重试') } else { messages.message.error('连接服务器失败') } return Promise.reject(err) }) const request = axios.create({ transformResponse: [function (data) { return data//JdSONbig.parse(data) }], }) //发送请求 return new Promise((resolve,reject)=>{ axios({ url:path, method, data:params, timeout:60000, }).then(result=>{ resolve(result.data) }).catch(err=>{ console.log(err.message) if(err.message == 'Request failed with status code 401'){ localStorage.setItem('UserName','') localStorage.setItem('ispagehead','') localStorage.setItem('QYMC','') localStorage.setItem('QYID','') localStorage.setItem('isLogin','0') localStorage.setItem('isLogins','0') var exdate = new Date(); exdate.setDate(exdate.getDate() -1); window.document.cookie = 'access_token=;path=/;expires='+exdate.toGMTString() localStorage.setItem('usermsg','') localStorage.setItem('TokenStr','') localStorage.setItem('AccessToken','') router.push({ path: '/'}) }else if(err.message == 'Request failed with status code 412'){ router.push({ path: '/SelectCompany'}) }else{ reject(err) } }) }) }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30777.html