1.inrequest.jsimportaxiosfrom'axios';import{Message,Loading}from'element-ui';import_from'lodash';//加载对象letloading;//当前请求数letneedLoadingRequestCount=0;//显示加载函数showLoading(target){//判断是因为关闭时加了抖动,此时加载对象可能还存在,但是needLoadingRequestCount已经变成0了。避免在这种情况下,将重新创建加载if(needLoadingRequestCount===0&&!loading){loading=Loading.service({lock:true,text:"Loading...",spinner:'el-icon-loading',背景:'rgba(0,0,0,0.7)'});}needLoadingRequestCount++;}//隐藏加载函数hideLoading(){needLoadingRequestCount--;needLoadingRequestCount=Math.max(needLoadingRequestCount,0);//取needLoadingRequestCount0之间的最大值if(needLoadingRequestCount===0){//关闭加载toHideLoading();}}//防抖:将300ms间隔内的关闭加载合并为一个。防止连续请求时加载闪烁的问题。让toHideLoading=_.debounce(()=>{loading.close();loading=null;},300);导出默认值(appName,type,{needSuccessTip=false,needErrorTip=true,loading=false,loadingText}={})=>{//创建axios实例letbaseURL=appName?`${window.urlConfig[appName]}`:''constservice=axios.create({withCredentials:true,baseURL:process.env.BASE_URL,//api的base_urltimeout:`${window.urlConfig.apiTimeout}`,headers:{token:localStorage.getItem('token'),'Content-Type':`application/${type==='form'?'x-www-form-urlencoded':'json'};charset=UTF-8`}})//添加请求拦截器service.interceptors.request.use(res=>{if(loading){showLoading();}returnres;},(err)=>{if(loading){hideLoading();}Message.error('请请求超时!');Promise.reject(error)});//响应拦截器service.interceptors.response.use((res)=>{if(loading){隐藏加载();}返回资源;},error=>{if(loading){hideLoading();}Message({message:error.message,type:'error'})returnPromise.reject(error);})returnservice}2、在apiimportrequestfrom'@/request'exportfunctiongetExportApi(params){returnrequest('','',{loading:true})({url:'xxx,method:'get',参数,responseType:'blob'})}
