| 12 |
- var e=Object.defineProperty,t=Object.defineProperties,r=Object.getOwnPropertyDescriptors,n=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,l=(t,r,n)=>r in t?e(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,c=(e,t)=>{for(var r in t||(t={}))a.call(t,r)&&l(e,r,t[r]);if(n)for(var r of n(t))s.call(t,r)&&l(e,r,t[r]);return e},o=(e,t,r)=>l(e,"symbol"!=typeof t?t+"":t,r),i=(e,t,r)=>new Promise(((n,a)=>{var s=e=>{try{c(r.next(e))}catch(t){a(t)}},l=e=>{try{c(r.throw(e))}catch(t){a(t)}},c=e=>e.done?n(e.value):Promise.resolve(e.value).then(s,l);c((r=r.apply(e,t)).next())}));import{a as u}from"./index-B_-K9rXC.js";import{u as h}from"./useTableColumns-BTRfLGfS.js";import{r as f,M as d,c as m,d as g,p as y,b as p,n as C}from"./vendor-CgKklJ4r.js";var v=(e=>(e.CLEAR_ALL="clear_all",e.CLEAR_CURRENT="clear_current",e.CLEAR_PAGINATION="clear_pagination",e.KEEP_ALL="keep_all",e))(v||{});class b{constructor(e=3e5,t=50,r=!1){o(this,"cache",new Map),o(this,"cacheTime"),o(this,"maxSize"),o(this,"enableLog"),this.cacheTime=e,this.maxSize=t,this.enableLog=r}log(e,...t){this.enableLog}generateKey(e){if(!e||"object"!=typeof e)return JSON.stringify(e);const t=this.sortObjectKeys(e);return JSON.stringify(t)}sortObjectKeys(e){const t={},r=Object.keys(e).sort();for(const n of r){const r=e[n];r&&"object"==typeof r&&!Array.isArray(r)?t[n]=this.sortObjectKeys(r):t[n]=r}return t}generateTags(e){const t=new Set,r=Object.keys(e).filter((t=>!["current","size","total"].includes(t)&&void 0!==e[t]&&""!==e[t]&&null!==e[t]));if(r.length>0){const n=r.map((t=>`${t}:${String(e[t])}`)).join("|");t.add(`search:${n}`)}else t.add("search:default");return t.add(`pagination:${e.size||10}`),t.add("pagination"),t}evictLRU(){if(this.cache.size<=this.maxSize)return;let e="",t=1/0,r=1/0;for(const[n,a]of this.cache.entries())(a.accessCount<t||a.accessCount===t&&a.lastAccessTime<r)&&(e=n,t=a.accessCount,r=a.lastAccessTime);e&&(this.cache.delete(e),this.log(`LRU 清理缓存: ${e}`))}set(e,t,r){const n=this.generateKey(e),a=this.generateTags(e),s=Date.now();this.evictLRU(),this.cache.set(n,{data:t,response:r,timestamp:s,params:n,tags:a,accessCount:1,lastAccessTime:s})}get(e){const t=this.generateKey(e),r=this.cache.get(t);return r?Date.now()-r.timestamp>this.cacheTime?(this.cache.delete(t),null):(r.accessCount++,r.lastAccessTime=Date.now(),r):null}clearByTags(e){let t=0;for(const[r,n]of this.cache.entries()){e.some((e=>Array.from(n.tags).some((t=>t.includes(e)))))&&(this.cache.delete(r),t++)}return t}clearCurrentSearch(e){const t=this.generateKey(e);return this.cache.delete(t)?1:0}clearPagination(){return this.clearByTags(["pagination"])}clear(){this.cache.clear()}getStats(){const e=this.cache.size;let t=0,r=0;for(const n of this.cache.values())t+=JSON.stringify(n.data).length,r+=n.accessCount;return{total:e,size:`${(t/1024).toFixed(2)}KB`,hitRate:`${e>0?(r/e).toFixed(1):"0"} avg hits`}}cleanupExpired(){let e=0;const t=Date.now();for(const[r,n]of this.cache.entries())t-n.timestamp>this.cacheTime&&(this.cache.delete(r),e++);return e}}function A(e,t){for(const r of t)if(r in e&&Array.isArray(e[r]))return e[r];return[]}function E(e,t,r){for(const n of r)if(n in e&&"number"==typeof e[n])return e[n];return t.length}function R(e,t){const r={},n=[e,null!=t?t:{}],a=["current","page","pageNum"];for(const l of n){for(const e of a)if(e in l&&"number"==typeof l[e]){r.current=l[e];break}if(void 0!==r.current)break}const s=["size","pageSize","limit"];for(const l of n){for(const e of s)if(e in l&&"number"==typeof l[e]){r.size=l[e];break}if(void 0!==r.size)break}if(void 0!==r.current||void 0!==r.size)return r}const L=e=>{if(!e)return{records:[],total:0};if(Array.isArray(e))return{records:e,total:e.length};if("object"!=typeof e)return{records:[],total:0};const t=e;let r,n=[],a=0;if(n=A(t,["records","data","list","items","result"]),a=E(t,n,["total","count"]),r=R(t),0===n.length&&"data"in t&&"object"==typeof t.data){const e=t.data;n=A(e,["records","list","items"]),a=E(e,n,["total","count"]),r=R(t,e),Array.isArray(t.data)&&(n=t.data,a=n.length)}n.length;const s={records:n,total:a};return r&&Object.assign(s,r),s},z=(e,t)=>{var r,n;e.total=null!=(n=null!=(r=t.total)?r:e.total)?n:0,void 0!==t.current&&(e.current=t.current),void 0!==t.size&&(e.size=t.size);const a=Math.max(1,Math.ceil(e.total/(e.size||1)));e.current>a&&(e.current=a)};function T(e){const{core:{apiFn:n,apiParams:a={},excludeParams:s=[],immediate:l=!0,columnsFactory:o,paginationKey:A={current:"current",size:"size"}},transform:{dataTransformer:E,responseAdapter:R=L}={},performance:{enableCache:T=!1,cacheTime:O=3e5,debounceTime:j=300,maxCacheSize:P=50}={},hooks:{onSuccess:_,onError:w,onCacheHit:N,resetFormCallback:S}={},debug:{enableLog:x=!1}={}}=e,k=(null==A?void 0:A.current)||"current",$=(null==A?void 0:A.size)||"size",U=f(0),K=(e,...t)=>{},D=T?new b(O,P,x):null,I=f(!1),M=f(null),B=f([]);let F=null,G=null;const J=d(Object.assign({[k]:1,[$]:10},a||{})),q=d({current:J[k]||1,size:J[$]||10,total:0}),{width:H}=u(),W=m((()=>{return e=c({},q),n={small:H.value<768},t(e,r(n));var e,n})),Q=o?h(o):null,V=null==Q?void 0:Q.columns,X=null==Q?void 0:Q.columnChecks,Y=m((()=>B.value.length>0)),Z=m((()=>(U.value,D?D.getStats():{total:0,size:"0KB",hitRate:"0 avg hits"}))),ee=(e=>{const t=(e,...t)=>{};return(r,n)=>{const a={code:"UNKNOWN_ERROR",message:"未知错误",details:r};return r instanceof Error?(a.message=r.message,a.code=r.name):"string"==typeof r&&(a.message=r),t(`${n}:`,r),null==e||e(a),a}})(w,x),te=(e,t)=>{if(!D)return;let r=0;switch(e){case v.CLEAR_ALL:D.clear(),K(`清空所有缓存 - ${t||""}`);break;case v.CLEAR_CURRENT:r=D.clearCurrentSearch(J),K(`清空当前搜索缓存 ${r} 条 - ${t||""}`);break;case v.CLEAR_PAGINATION:r=D.clearPagination(),K(`清空分页缓存 ${r} 条 - ${t||""}`);break;case v.KEEP_ALL:default:K(`保持缓存不变 - ${t||""}`)}U.value++},re=(e,...t)=>i(this,[e,...t],(function*(e,t=T){F&&F.abort();const r=new AbortController;F=r,I.value=!0,M.value=null;try{let a=Object.assign({},J,{[k]:q.current,[$]:q.size},e||{});if(s.length>0){const e=c({},a);s.forEach((t=>{delete e[t]})),a=e}if(t&&D){const e=D.get(a);if(e)return B.value=e.data,z(q,e.response),J[k]!==q.current&&(J[k]=q.current),J[$]!==q.size&&(J[$]=q.size),I.value=!1,N&&N(e.data,e.response),K("缓存命中"),e.response}const l=yield n(a);if(r.signal.aborted)throw new Error("请求已取消");const o=R(l);let i=(e=>{const t=e.records||e.data||[];return Array.isArray(t)?t:[]})(o);return E&&(i=E(i)),B.value=i,z(q,o),J[k]!==q.current&&(J[k]=q.current),J[$]!==q.size&&(J[$]=q.size),t&&D&&(D.set(a,i,o),U.value++,K("数据已缓存")),_&&_(i,o),o}catch(a){if(a instanceof Error&&"请求已取消"===a.message)return{records:[],total:0,current:1,size:20};B.value=[];throw ee(a,"获取表格数据失败")}finally{I.value=!1,F===r&&(F=null)}})),ne=e=>i(this,null,(function*(){try{return yield re(e)}catch(t){return Promise.resolve()}})),ae=e=>i(this,null,(function*(){q.current=1,J[k]=1,te(v.CLEAR_CURRENT,"搜索数据");try{return yield re(e,!1)}catch(t){return Promise.resolve()}})),se=((e,t)=>{let r=null,n=null,a=null,s=null;const l=(...l)=>new Promise(((c,o)=>{r&&clearTimeout(r),n=l,a=c,s=o,r=setTimeout((()=>i(void 0,null,(function*(){try{const t=yield e(...l);c(t)}catch(M){o(M)}finally{r=null,n=null,a=null,s=null}}))),t)}));return l.cancel=()=>{r&&clearTimeout(r),r=null,n=null,a=null,s=null},l.flush=()=>i(void 0,null,(function*(){if(r&&n&&a&&s){clearTimeout(r),r=null;const t=n,l=a,c=s;n=null,a=null,s=null;try{const r=yield e(...t);return l(r),r}catch(M){throw c(M),M}}return Promise.resolve()})),l})(ae,j);let le=!1;const ce=()=>{F&&F.abort(),se.cancel()};return T&&D&&(G=setInterval((()=>{const e=D.cleanupExpired();e>0&&(K(`自动清理 ${e} 条过期缓存`),U.value++)}),O/2)),l&&g((()=>i(this,null,(function*(){yield ne()})))),y((()=>{ce(),D&&D.clear(),G&&clearInterval(G)})),c({data:B,loading:p(I),error:p(M),isEmpty:m((()=>0===B.value.length)),hasData:Y,pagination:p(q),paginationMobile:W,handleSizeChange:e=>i(this,null,(function*(){e<=0||(se.cancel(),q.size=e,q.current=1,J[$]=e,J[k]=1,te(v.CLEAR_CURRENT,"分页大小变化"),yield ne())})),handleCurrentChange:e=>i(this,null,(function*(){if(!(e<=0||le))if(q.current!==e)try{le=!0,q.current=e,J[k]!==e&&(J[k]=e),yield ne()}finally{le=!1}else K("分页页码未变化,跳过请求")})),searchParams:J,resetSearchParams:()=>i(this,null,(function*(){se.cancel();const e={[k]:1,[$]:J[$]||10};Object.keys(J).forEach((e=>{delete J[e]})),Object.assign(J,a||{},e),q.current=1,q.size=e[$],M.value=null,te(v.CLEAR_ALL,"重置搜索"),yield ne(),S&&(yield C(),S())})),fetchData:ne,getData:ae,getDataDebounced:se,clearData:()=>{B.value=[],M.value=null,te(v.CLEAR_ALL,"清空数据")},refreshData:()=>i(this,null,(function*(){se.cancel(),te(v.CLEAR_ALL,"手动刷新"),yield ne()})),refreshSoft:()=>i(this,null,(function*(){te(v.CLEAR_CURRENT,"软刷新"),yield ne()})),refreshCreate:()=>i(this,null,(function*(){se.cancel(),q.current=1,J[k]=1,te(v.CLEAR_PAGINATION,"新增数据"),yield ne()})),refreshUpdate:()=>i(this,null,(function*(){te(v.CLEAR_CURRENT,"编辑数据"),yield ne()})),refreshRemove:()=>i(this,null,(function*(){const{total:e,size:t,current:r}=q,n=r===Math.max(1,Math.ceil(e/t)),a=1===B.value.length,s=n&&0===B.value.length;(a&&r>1||s)&&(q.current-=1,J[k]=q.current),te(v.CLEAR_CURRENT,"删除数据"),yield ne()})),cacheInfo:Z,clearCache:te,clearExpiredCache:()=>{if(!D)return 0;const e=D.cleanupExpired();return e>0&&U.value++,e},cancelRequest:ce},Q&&{columns:V,columnChecks:X,addColumn:Q.addColumn,removeColumn:Q.removeColumn,toggleColumn:Q.toggleColumn,updateColumn:Q.updateColumn,batchUpdateColumns:Q.batchUpdateColumns,reorderColumns:Q.reorderColumns,getColumnConfig:Q.getColumnConfig,getAllColumns:Q.getAllColumns,resetColumns:Q.resetColumns})}export{v as C,T as u};
|