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
