|
|
@@ -0,0 +1,133 @@
|
|
|
+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
|