| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import{A as e}from"./axios-7accb92c.js";import{N as t}from"./nprogress-85851b89.js";import{c as n,r as s,g as r}from"./index-6530d0f6.js";import{E as o,a}from"./element-plus-842069d4.js";class i{
- // 声明一个 Map 用于存储每个请求的标识 和 取消函数
- static pending=new Map;
- // 白名单, 写入接口名称
- static whiteRequest=[];
- /**
- * 得到该格式的url
- * @param {AxiosRequestConfig} config
- * @returns
- */
- static getUrl(e,t){if(t.cancelToken&&t.cancelTokenName)return t.cancelTokenName;if(t.cancelUrl)return t.cancelUrl;let n="";return n=t.cancelToken?[e.method,e.url].join("&"):[e.method,e.url,
- (new Date).getTime(),Math.random()].join("&"),t.cancelUrl=n,n}
- /**
- * 添加请求
- * @param {AxiosRequestConfig} config
- */static addPending(t,n){const s=this.getUrl(t,n);t.cancelToken=t.cancelToken||new e.CancelToken((e=>{this.pending.has(s)||this.pending.set(s,e)}))}
- /**
- * 移除请求
- * @param {AxiosRequestConfig} config
- */static removePending(e,t){const n=this.getUrl(e,t);if(!n)return;const s=n.split("&")&&n.split("&")[1];if(this.pending.has(n)&&!this.whiteRequest.includes(s)){const e=this.pending.get(n);e&&e(n),this.pending.delete(n)}}
- /**
- * 根据key 手动取消请求: cancelTokenName 清除pending中的请求
- */static removePendingByName(e){const t=this.pending.get(e);if(!t){return{success:!1,msg:"不存在该请求",type:"cancelToken"}}t({cancelTokenName:"key",munual:!0});return{success:!0,msg:"取消请求成功",type:"cancelToken"}}
- /**
- * 清空 pending 中的请求(在路由跳转时调用)
- */static clearPending(){for(const[e,t]of this.pending)t&&t(e);this.pending.clear()}}const c={SUCCESS:200,
- //成功code值
- // ERROR: -1,
- KEYS:{
- //返回结果集字段枚举
- DATA:"data",CODE:"result",ERROR_MSG:"errorMsg"}},l="multipart/form-data;charset=UTF-8",u={400:"发出的请求有错误,服务器没有进行新建或修改数据的操作",401:"您无权访问",403:"当前用户权限不足,不能继续执行",404:"网络请求错误,未找到该资源",405:"网络请求错误,请求方法未允许",406:"请求的格式不可得",408:"接口请求超时,请重试或刷新页面",410:"请求的资源被永久删除,且不会再得到的",422:"当创建一个对象时,发生一个验证错误",423:"指定的功能被锁定",500:"服务器发生错误,请检查服务器或联系管理员",501:"网络未实现",502:"网关错误",503:"服务不可用,服务器暂时过载或维护",504:"网关超时",505:"http版本不支持该请求",9999:"网络异常"};function d(e,t){const r=t.operate,i=t.result;let l=(r.ResultEnum||c).KEYS.ERROR_MSG;const d=r.CodeMsgEnum||u;switch(e){case 2007:o.closeAll(),a.close(),a.confirm(i&&i[l]?i[l]+",请重新登录":d[e],"提示").then((()=>{n.clear(),s.replace("/login")}));break;case 9999:o.closeAll(),a.close(),a.confirm(i&&i[l]||d[e],"提示",{confirmButtonText:"重新加载"}).then((()=>{window.location.reload()}));break;default:if(!r.showErrorMsg)return;o.closeAll(),i&&i[l]?o.error(i[l]):d[e]&&o.error(d[e])}}function m(e,t,n){if(e&&e instanceof Blob){(t=t||{}).filename;const s=t.blobType||"";let r=new Blob([e],{type:s}),o=window.URL.createObjectURL(r);!function(e,t){const n=(e=e||{}).target||"_blank";let s=document.createElement("a");s.style.display="none",s.href=e.url,s.target=n,void 0!==s.download&&s.setAttribute("download",e.filename||""),document.body.appendChild(s),s.click(),document.body.removeChild(s),t&&t({url:e.url,success:!0,msg:"下载成功"}),window.URL.revokeObjectURL(e.url)}({...t,url:o},n)}else n&&n({success:!1,msg:"数据为空或数据格式错误"})}const p={
- // vAxios.fileRequest文件流请求入口
- download:!0,
- // 默认download-true
- fileConfig:{
- //{*} filename, blobType, 当download为true时有效,文件名称,文件流格式设置
- key:"",
- //根据后端响应头key即文件名称下载
- filename:"",blobType:""},
- // vAxios.request请求主入口
- isReturnNativeResponse:!1,
- //是否返回原生响应头-true成功状态码时不做错误信息提示
- standard:!0,
- //true-数据为{data,msg,code}返回对象里的data, false-返回{data,msg,code}对象
- // 提示语设置
- showErrorMsg:!0,
- // 展示异常错误信息提示语-默认true-当需自定义时,可设置1.showErrorMsg:false, 2.也可通过message.closeAll();message.error(err && err.msg);
- // errorMessageMode: 'none', // 消息提示类型
- // token设置
- ignoreToken:!1,
- //请求是否忽略token,默认false,头部会带token请求
- tokenPrefix:"Bearer ",
- //token前缀
- tokenKey:"Authorization",
- //传到后台key-token
- // 取消请求设置
- ignoreCancel:!1,
- //true时请求不存入CancelToken.pending对象中
- cancelToken:!1,
- //同一接口默认清除上次未完成请求响应-默认false
- cancelTokenName:""};const f=new class{_customOperate0;_options;axiosInstance;constructor(t,n){this._customOperate0=null!=n?{...n}:{...p},this._options=t;const s=e.create(this._options);this.axiosInstance=s,this._setupInterceptors()}
- /**
- * @description: 拦截器配置
- */_setupInterceptors(){this.axiosInstance.interceptors.request.use((e=>{t.start();const s=e.customOperate||{},o=n.getItem("userInfo"),a=n.getItem("farmInfo"),c={userId:o&&o.id,
- // channel: 'farmPC',
- channel:"farmDATAV",systemId:"1",sid:123,farmId:a&&a.farmId||"",serviceCenterId:"",nonce:1736321682006};return"get"==e.method.toLocaleLowerCase()?e.params={...c,...e.params}:e.data={...c,...e.data},!s.ignoreToken&&r()&&(e.headers[s.tokenKey]=s.tokenPrefix+r()),s.token&&(e.headers[s.tokenKey]=s.tokenPrefix+s.token),s.cancelToken&&i.removePending(e,s),!s.ignoreCancel&&i.addPending(e,s),e}),(function(e){return t.done(),Promise.reject(e)})),this.axiosInstance.interceptors.response.use((e=>{t.done();const n=e&&e.config&&e.config.customOperate||{};if(e&&i.removePending(e.config,n),n.isReturnNativeResponse)return Promise.resolve(e);if(!e||!e.data)return Promise.reject({success:!1,msg:"请求出错,请稍候重试"});const s=n.ResultEnum||c;let r=e.data[s.KEYS.DATA],o=e.data[s.KEYS.CODE];return o==s.SUCCESS?n.standard?Promise.resolve(r):Promise.resolve(e.data):(d(o,{result:e.data,operate:n}),Promise.reject(e.data||{}))}),(n=>{t.done();const{response:s}=n||{};return function(t,n){if(e.isCancel(t))return Promise.reject({type:"cancelToken",msg:"取消请求",success:!1,error:t});const{response:s,message:r}=t||{},o=n.operate;try{r.includes("Network Error")&&d(9999,n),r.includes("timeout")&&d(408,n)}catch(m){return Promise.reject(m)}if(!s)return Promise.reject(t);const{status:a,data:i}=s,l=o.ResultEnum||c;let u=i&&i[l.KEYS.CODE];return d(a||u,{result:i,...n,errRes:s}),n.operate.isReturnNativeResponse?Promise.reject(t):Promise.reject(i||s||{})}(n,{operate:s&&s.config&&s.config.customOperate||{}})})),this.axiosInstance.interceptors.response.use(void 0,(function(t){let n=t.config;return n&&n.retry?(n.__retryCount=n.__retryCount||0,n.__retryCount>=n.retry?Promise.reject(t):(n.__retryCount+=1,new Promise((function(e){setTimeout((function(){e()}),n.retryDelay||1)})).then((function(){return e(n)})))):Promise.reject(t)}))}
- /**
- * @description: 请求主入口
- */request(e,t){t=t||{};const n=Object.assign({},this._customOperate0,t);return(e=Object.assign({},e)).customOperate=n,this.axiosInstance.request(e)}
- /**
- * @description: 最大并发请求
- * @params configs 待请求的config数组
- * @params maxNum 最大并发数
- */concurRequest(e,t){const n=t&&t.maxNum||1;return new Promise((s=>{if(0===e.length)return void s([]);const r=[];let o=0,a=0;const i=async()=>{if(o===e.length)return;const n=o,c=e[o];o++;try{const e=await this.request(c,t);r[n]=e}catch(l){r[n]=l}finally{a++,a===e.length&&s(r),i()}},c=Math.min(n,e.length);for(let e=0;e<c;e++)i()}))}
- /**
- * @description: 文件流请求入口
- * @config 请求参数
- * @download 自动下载默认为true
- * @fileConfig {*} filename,blobType
- * @isReturnNativeResponse true
- */fileRequest(e,t){t=t||{};let n=Object.assign({},this._customOperate0,{
- // download: true, //请求完下载-默认true
- isReturnNativeResponse:!0,...t});return e.responseType=e.responseType||"blob",n.download?new Promise(((t,s)=>{this.request(e,n).then((e=>{let r;const o=n.fileConfig.key||"name";if(e&&e.headers[o]){const t=e.headers[o];r=decodeURI(t)}let a;a=r?{...n.fileConfig,filename:r}:{...n.fileConfig},m(e.data,a,(e=>{0!=e.success?t(e):s(e)}))})).catch((e=>{s(e)}))})):this.request(e,n)}
- /**
- * @description: 文件上传入口
- * @config {*} url,method
- * @params {*} name://提交文件名称参数,file: 文件,filename
- * 调用上传接口示例
- vAxios.uploadFile({ data: form, name:'', file: file, filename:'' },operate);
- form-须与file合并的参数,一同传给后台
- */uploadFile(e,t,n){t=t||{};const s=new window.FormData,r=t.name||"file";return t.filename?s.append(r,t.file,t.filename):s.append(r,t.file),t.data&&Object.keys(t.data).forEach((e=>{const n=t.data[e];Array.isArray(n)?n.forEach((t=>{s.append(`${e}[]`,t)})):s.append(e,t.data[e])})),this.request({method:"POST",data:s,headers:{"Content-Type":l},...e},n)}}({
- //请求地址
- // baseURL: '',
- //请求超时
- // timeout: 1000*10,
- // 请求头
- // headers: {
- // "Content-Type": "application/json;charset=utf-8",
- // },
- // 是否允许带cookie
- withCredentials:!1},{
- // vAxios.fileRequest文件流请求入口
- download:!0,
- // 默认download-true
- fileConfig:{
- // {*} filename, blobType, 当download为true时有效,文件名称,文件流格式设置
- key:"",
- //根据后端响应头key即文件名称下载
- filename:"",blobType:""},
- // vAxios.request请求主入口
- isReturnNativeResponse:!1,
- //是否返回原生响应头-true成功状态码时不做错误信息提示
- standard:!0,
- //true-数据为{data,msg,code}返回对象里的data, false-返回{data,msg,code}对象
- // 提示语设置
- showErrorMsg:!0,
- // 展示异常错误信息提示语-默认true-当需自定义时,可设置1.showErrorMsg:false, 2.也可通过message.closeAll();message.error(err && err.msg);
- // errorMessageMode: 'none', // 消息提示类型
- // token设置
- ignoreToken:!1,
- //请求是否忽略token,默认false,头部会带token请求
- tokenPrefix:"",
- //token前缀
- tokenKey:"Authorization",
- //传到后台key:token
- // token: '2f4fed683f7245d6aded31a2f7183f6d',
- // 取消请求设置
- ignoreCancel:!1,
- //true时请求不存入CancelToken.pending对象中
- cancelToken:!1,
- //同一接口默认清除上次未完成请求响应-默认false
- cancelTokenName:""});export{f as v};
- //# sourceMappingURL=request-2ce564d0.js.map
|