ray-template/assets/index-a660e655.js
2023-07-05 13:54:21 +08:00

2 lines
4.2 KiB
JavaScript

var w=Object.defineProperty;var b=(e,t,r)=>t in e?w(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var R=(e,t,r)=>(b(e,typeof t!="symbol"?t+"":t,r),r);import{aG as x,f as N,r as P,aH as H,t as V,h as a,S as E,aD as B,ar as m,u as K,K as _,aq as j,a6 as O,aI as T,a5 as S}from"./.pnpm-8379147f.js";import{g as A,h as L,A as M}from"./index-c4f56c3c.js";const $={baseURL:"",withCredentials:!1,timeout:5*1e3,headers:{"Content-Type":"application/json"}};class G{constructor(){R(this,"pendingRequest");this.pendingRequest=new Map}generateRequestKey(t){const{method:r,url:s}=t;return[s||"",r||"",JSON.stringify(t.params),JSON.stringify(t.data)].join("&")}addPendingRequest(t){var s;const r=this.generateRequestKey(t);if(this.pendingRequest.has(r))t.signal=(s=this.pendingRequest.get(r))==null?void 0:s.signal;else{const u=new AbortController;t.signal=u.signal,this.pendingRequest.set(r,u)}}removePendingRequest(t){const r=this.generateRequestKey(t);this.pendingRequest.has(r)&&(this.pendingRequest.get(r).abort(),this.pendingRequest.delete(r))}}const y={requestInstance:null,responseInstance:null},h={implementRequestInterceptorArray:[],implementResponseInterceptorArray:[]},p={implementRequestInterceptorErrorArray:[],implementResponseInterceptorErrorArray:[]},l=new G,I=()=>{const e=(n,o)=>{o==="requestInstance"?y.requestInstance=n:y.responseInstance=n},t=n=>y[n],r=(n,o,i)=>{i==="ok"?h[n]=o:p[n]=o},s=(n,o)=>o==="ok"?h[n]:p[n],u=(n,...o)=>{Array.isArray(n)&&(n==null||n.forEach(i=>{typeof i=="function"&&i(...o)}))};return{createAxiosInstance:e,setImplement:r,getImplement:s,getAxiosInstance:t,beforeFetch:(n,o,i)=>{const d=i==="ok"?h[o]:p[o],c=t(n),{MODE:v}=A();c&&u(d,c,v)},fetchError:(n,o,i)=>{const d=p[i],{MODE:c}=A();u(d,o,c)}}},{setImplement:C}=I(),J=(e,t)=>{l.removePendingRequest(e.config)},U=(e,t)=>{},X=()=>{C("implementResponseInterceptorArray",[J],"ok")},Y=()=>{C("implementResponseInterceptorErrorArray",[U],"error")},z=(e,t)=>{if(e){const r=e.headers;t.forEach(s=>{r[s.key]=s.value})}},{setImplement:F}=I(),Q=(e,t)=>{const r=L(M.token);return e.url,{key:"X-TOKEN",value:r}},W=(e,t)=>{z(e,[Q(e),{key:"Demo-Header-Key",value:"Demo Header Value"}])},Z=(e,t)=>{l.removePendingRequest(e),l.addPendingRequest(e)},ee=(e,t)=>{},te=()=>{F("implementRequestInterceptorArray",[W,Z],"ok")},re=()=>{F("implementRequestInterceptorErrorArray",[ee],"error")},q=x.create($),{createAxiosInstance:f,beforeFetch:D,fetchError:k}=I();q.interceptors.request.use(e=>(f(e,"requestInstance"),te(),D("requestInstance","implementRequestInterceptorArray","ok"),e),e=>(re(),k("requestError",e,"implementRequestInterceptorErrorArray"),Promise.reject(e)));q.interceptors.response.use(e=>{f(e,"responseInstance"),X(),D("responseInstance","implementResponseInterceptorArray","ok");const{data:t}=e;return Promise.resolve(t)},e=>(Y(),k("responseError",e,"implementResponseInterceptorErrorArray"),l.removePendingRequest(e.config||{}),Promise.reject(e)));const g=async e=>q({url:`https://www.tianqiapi.com/api?version=v9&appid=23035354&appsecret=8YvlPNrz&city=${e}`}),ie=N({name:"RAxios",setup(){const e=P({weatherData:[],inputCityValue:""}),t=[{title:"空气指数",key:"air"},{title:"风速",key:"win_meter"},{title:"能见度",key:"visibility"},{title:"天气情况",key:"wea_day"},{title:"提示",key:"air_tips"}],r=async s=>{try{const u=await g(s);e.weatherData=u.data}catch{window.$message.error("请求已被取消")}};return H(async()=>{const s=await g("成都");e.weatherData=s.data}),{...V(e),columns:t,handleInputCityValue:r}},render(){return a(S,null,{default:()=>[a(E,{bordered:!0},{default:()=>[a(B,{title:"请求函数"},{default:()=>[m("基于 axios 封装,能够自动取消连续请求,避免重复渲染造成问题"),a("p",null,[m("打开控制台 => 网络 => 使用低速3g网络 => 查看控制台被取消的请求")])]})]}),a(E,{bordered:!0},{default:()=>[a(K,{class:"axios-header__btn",align:"center"},{default:()=>[a(_,{value:this.inputCityValue,"onUpdate:value":e=>this.inputCityValue=e,onInput:this.handleInputCityValue.bind(this),placeholder:"请输入城市"},null),a(j,{onClick:this.handleInputCityValue.bind(this,"")},{default:()=>[m("搜索")]})]})]}),a(O,null,{default:()=>[a(T,{data:this.weatherData,columns:this.columns},null)]})]})}});export{ie as default};