@agile-team/mach-report 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -9
- package/dist/ReportPreview-CLENbOCL.cjs +6 -0
- package/dist/ReportPreview-CwTGfyTq.js +1679 -0
- package/dist/{grid-geometry-DONcjshk.js → grid-geometry-CWmJ9c9y.js} +7 -7
- package/dist/index.cjs +5 -5
- package/dist/index.d.cts +31 -5
- package/dist/index.d.ts +31 -5
- package/dist/index.js +926 -872
- package/dist/pdf.d.cts +16 -0
- package/dist/pdf.d.ts +16 -0
- package/dist/pdf.js +2 -2
- package/dist/{plugin-BMoMUxrw.cjs → plugin-MSh_OhoW.cjs} +1 -1
- package/dist/{plugin-CAcNe0FT.js → plugin-uoO9VA6O.js} +1 -1
- package/dist/style.css +1 -1
- package/dist/{textwrap-DdaewxAd.js → textwrap-BQyrpYSR.js} +1 -1
- package/dist/vue/async.d.cts +28 -4
- package/dist/vue/async.d.ts +28 -4
- package/dist/vue/index.d.cts +30 -6
- package/dist/vue/index.d.ts +30 -6
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +3 -3
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +4 -4
- package/dist/xlsx.cjs +21 -21
- package/dist/xlsx.d.cts +22 -4
- package/dist/xlsx.d.ts +22 -4
- package/dist/xlsx.js +5206 -5118
- package/package.json +1 -1
- package/dist/ReportPreview-BWrQCj9M.js +0 -1643
- package/dist/ReportPreview-DY0PGGqF.cjs +0 -6
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";var Mt=Object.create;var Ge=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames;var Nt=Object.getPrototypeOf,Vt=Object.prototype.hasOwnProperty;var Ot=(t,n,a,l)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Dt(n))!Vt.call(t,r)&&r!==a&&Ge(t,r,{get:()=>n[r],enumerable:!(l=Tt(n,r))||l.enumerable});return t};var Ze=(t,n,a)=>(a=t!=null?Mt(Nt(t)):{},Ot(n||!t||!t.__esModule?Ge(a,"default",{value:t,enumerable:!0}):a,t));const e=require("vue"),ie=require("@agile-team/mach-report"),Qe=require("./page-window-index-DEjnM6IB.cjs"),ce=require("./plugin-BMoMUxrw.cjs");function Oe(t){return t==null?[]:Array.isArray(t)?t.map(String).filter(n=>n!==""):String(t).split(",").map(n=>n.trim()).filter(n=>n!=="")}function zt(t){return Oe(t).join(",")}class ye extends Error{constructor(n){super(n),this.name="PlanLoadError"}}function It(t={}){const{baseUrl:n="",headers:a,credentials:l,timeoutMs:r=3e4}=t,o=n.replace(/\/+$/,"");return async({url:s,method:f,params:p,signal:g})=>{let d=`${o}${s}`;if(p&&Object.keys(p).length>0){const w=d.indexOf("#"),$=w>=0?d.slice(w):"",x=w>=0?d.slice(0,w):d,P=x.indexOf("?"),N=P>=0?x.slice(0,P):x,B=new URLSearchParams(P>=0?x.slice(P+1):"");for(const[V,O]of Object.entries(p))B.set(V,O);d=`${N}?${B}${$}`}const u=(w,$)=>{const x=new ye(w);return Object.defineProperty(x,"cause",{value:$,configurable:!0,writable:!0}),x};if(g?.aborted)throw u(`请求已取消: ${s}`,g.reason);const h=new AbortController;let v;const R=()=>{h.signal.aborted||(v="external",h.abort(g?.reason))};g?.addEventListener("abort",R,{once:!0});const F=setTimeout(()=>{h.signal.aborted||(v="timeout",h.abort())},r);try{const w=await fetch(d,{method:f.toUpperCase(),headers:{Accept:"application/json",...a},credentials:l,signal:h.signal});if(!w.ok)throw new ye(`HTTP ${w.status} ${s}`);return await w.json()}catch(w){throw v==="timeout"?u(`请求超时(${r}ms): ${s}`,w):v==="external"?u(`请求已取消: ${s}`,w):w instanceof ye?w:u(`请求失败(${s}): ${w instanceof Error?w.message:String(w)}`,w)}finally{clearTimeout(F),g?.removeEventListener("abort",R)}}}function _e(t,n,a={}){const l=a.pxPerMm??3.7795275590551185,r=e.computed(()=>Math.max(0,e.unref(a.gapPx)??18)),o=e.ref(0),s=e.ref(800),f=e.computed(()=>{const w=t.value?.pages??[];return Qe.createPageWindowIndex(w.map($=>$.pageHeightMm*l),r.value)}),p=e.computed(()=>{let w=0;for(const $ of t.value?.pages??[])w=Math.max(w,$.pageWidthMm*l);return{w,h:f.value.totalHeightPx}}),g=e.computed(()=>f.value.window(s.value/n.value,o.value/n.value,e.unref(a.overscan)??1)),d=e.computed(()=>{const w=t.value;if(!w)return[];const{start:$,end:x}=g.value;return w.pages.slice($,x+1).map((P,N)=>({page:P,index:$+N}))});let u=0,h=!1;function v(w){w&&(o.value=w.scrollTop,s.value=w.clientHeight||800)}function R(w,$){return x=>{u||h||(u=requestAnimationFrame(()=>{if(u=0,h||(v(x),$.value<=0))return;const P=Math.max(0,x.scrollTop+32)/n.value;w.value=Math.min($.value,f.value.pageAt(P)+1)}))}}function F(){h=!0,u&&cancelAnimationFrame(u),u=0}return e.onScopeDispose(F),{contentSize:p,windowRange:g,visiblePages:d,makeScrollHandler:R,refreshViewport:v,pageOffsetPx:w=>f.value.offsetAt(w),destroy:F}}function et(t){const n=e.ref(1),a=e.ref("fit");function l(){requestAnimationFrame(()=>{const o=t();!o||!o.viewport||(n.value=Math.min(1,Math.max(.3,(o.viewport.clientWidth-48)/Math.max(1,o.pageWidthPx))))})}function r(o){o==="fit"?(a.value="fit",l()):(a.value="raw",n.value=o/100)}return{zoom:n,zoomMode:a,applyFitZoom:l,setZoom:r}}const xe=8;function Pe(){return new Promise(t=>setTimeout(t,0))}function be(t){return`p${Math.round(t.pageWidthMm)}x${Math.round(t.pageHeightMm)}`}function ze(t){const n=new Map;return t.pages.forEach(r=>{n.has(be(r))||n.set(be(r),r)}),`<!doctype html><html><head><meta charset="utf-8"><style>${`.mr-page{margin:0 auto;page-break-after:always;}
|
|
2
|
-
.mr-page tr{break-inside:avoid;page-break-inside:avoid;}
|
|
3
|
-
.mr-comp{break-inside:avoid;page-break-inside:avoid;}
|
|
4
|
-
${[...n.values()].map(r=>`@page ${be(r)}{size:${Math.round(r.pageWidthMm)}mm ${Math.round(r.pageHeightMm)}mm;margin:0;}`).join(`
|
|
5
|
-
`)}
|
|
6
|
-
body{margin:0;background:#fff;}`}</style></head><body>`}function Ie(t){const n=ie.renderPage(t,96,{},document);return n.style.page=be(t),n.outerHTML}function Le(t){return{head:ze(t),pageChunks:t.pages.map(Ie)}}async function Lt(t,n={}){const a={schemaVersion:"mach-report-batch-print",pages:t.flatMap(s=>s.pages)};if(a.pages.length===0)return;const l=ze(a),r=document.createElement("iframe");r.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(r);let o=!1;try{const s=r.contentDocument;s.open(),s.write(l);for(let f=0;f<a.pages.length;f++)s.write(Ie(a.pages[f])),f%xe===xe-1&&(n.onProgress?.(f+1,a.pages.length),await Pe());s.write("</body></html>"),s.close(),await Pe(),n.onProgress?.(a.pages.length,a.pages.length),o=!0,r.contentWindow?.focus(),r.contentWindow?.print()}catch(s){n.onError?.(s instanceof Error?`批量打印失败: ${s.message}`:"批量打印失败")}finally{o?setTimeout(()=>r.remove(),6e4):r.remove()}}function tt(t){const{head:n,pageChunks:a}=Le(t);return{html:`${`<!doctype html><html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head><meta charset="utf-8"><!--[if gte mso 9]><xml><w:WordDocument><w:View>Print</w:View><w:Zoom>100</w:Zoom></w:WordDocument></xml><![endif]-->${n.replace(/^<!doctype html><html><head>/,"")}`}${a.join("")}</body></html>`,filename:"mach-report.doc"}}function nt(t,n){let a=null,l=!1,r=!1,o=0;const s=new Map,f=new Map;let p=null,g=null,d=null,u=null,h=null;function v(i,m){return!r&&t.value===i&&o===m}function R(){if(r)return;const i=[...s.values()].reverse().find(m=>v(m.plan,m.epoch))?.format??null;i!==p&&(p=i,n.onBusy?.(i))}function F(i,m,b){const k={};return s.set(k,{plan:i,epoch:m,format:b}),R(),k}function w(i){s.delete(i),R()}function $(){for(const[i,m]of f)v(m.plan,m.epoch)||(i.close(),f.delete(i))}const x=e.watch(t,()=>{o++,R(),$()},{flush:"sync"});function P(){a?.remove(),a=null}function N(){r=!0,o++,x(),P(),$(),s.clear(),n.onPrinting?.(!1)}function B(i,m){const b=URL.createObjectURL(i);setTimeout(()=>URL.revokeObjectURL(b),1e4);const k=document.createElement("a");k.href=b,k.download=m,k.click()}async function V(){if(l)return;const i=t.value;if(r||!i||i.pages.length===0)return;const m=o;l=!0,n.onPrinting?.(!0),P();const b=ze(i);a=document.createElement("iframe"),a.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(a);const k=a;try{const C=k.contentDocument;C.open(),C.write(b);for(let I=0;I<i.pages.length;I++)if(C.write(Ie(i.pages[I])),I%xe===xe-1&&await Pe(),k!==a)return;if(C.write("</body></html>"),C.close(),await Pe(),!v(i,m)||k!==a)return;k.contentWindow?.focus(),k.contentWindow?.print()}catch{k===a&&P(),v(i,m)&&n.onError("调用打印失败,请改用导出 PDF","print")}finally{l=!1,r||n.onPrinting?.(!1)}}function O(i,m){if(g?.plan===i&&g.epoch===m)return g.promise;const b=Promise.resolve().then(()=>{if(!v(i,m))throw new Error("报表已切换或卸载");return n.getPdfExporter()(i,k=>{v(i,m)&&n.onWarning?.(k)})}).finally(()=>{g?.promise===b&&(g=null)});return g={plan:i,epoch:m,promise:b},b}async function S(){const i=t.value;if(r||!i||i.pages.length===0)return;const m=o;if(d?.plan===i&&d.epoch===m)return d.promise;const b=F(i,m,"PDF"),k=(async()=>{try{const C=await O(i,m);if(!v(i,m))return;B(new Blob([C],{type:"application/pdf"}),"mach-report.pdf")}catch(C){v(i,m)&&n.onError(C instanceof Error?`PDF 导出失败: ${C.message}`:"PDF 导出失败","pdf")}finally{w(b),d?.token===b&&(d=null)}})();return d={plan:i,epoch:m,promise:k,token:b},k}async function A(){const i=t.value;if(r||!i||i.pages.length===0)return;const m=o;if(u?.plan===i&&u.epoch===m)return u.promise;const b={...n.getXlsxOptions?.()},k=F(i,m,"Excel"),C=(async()=>{try{const{renderPlanToXlsx:I}=await import("@agile-team/mach-report/xlsx");if(!v(i,m))return;const{buffer:H,warnings:j}=await I(i,b);if(!v(i,m)||(j.length>0&&n.onWarning?.(`Excel 导出有 ${j.length} 条提示:${j.slice(0,2).join(";")}`),!v(i,m)))return;B(new Blob([H],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),"mach-report.xlsx")}catch(I){v(i,m)&&n.onError(I instanceof Error?`Excel 导出失败: ${I.message}`:"Excel 导出失败","export")}finally{w(k),u?.token===k&&(u=null)}})();return u={plan:i,epoch:m,promise:C,token:k},C}async function z(){const i=t.value;if(r||!i||i.pages.length===0)return;const m=o;if(h?.plan===i&&h.epoch===m)return h.promise;const b=F(i,m,"图片"),k=(async()=>{try{const{blobs:C}=await ie.renderPlanToImages(i,{dpr:Math.min(2,typeof devicePixelRatio=="number"?devicePixelRatio:1)});if(!v(i,m))return;C.forEach((I,H)=>{B(I,C.length>1?`mach-report-page-${H+1}.png`:"mach-report.png")})}catch(C){v(i,m)&&n.onError(C instanceof Error?`图片导出失败: ${C.message}`:"图片导出失败","export")}finally{w(b),h?.token===b&&(h=null)}})();return h={plan:i,epoch:m,promise:k,token:b},k}function re(){const i=t.value;if(!(r||!i||i.pages.length===0))try{const{html:m,filename:b}=tt(i);B(new Blob([m],{type:"application/msword;charset=utf-8"}),b)}catch(m){n.onError(m instanceof Error?`Word 导出失败: ${m.message}`:"Word 导出失败","export")}}async function M(i){const m=t.value;if(!(r||!m||m.pages.length===0)){if(i==="pdf"){await S();return}if(i==="xlsx"||i==="excel"){await A();return}if(i==="png"||i==="image"){await z();return}if(i==="word"||i==="doc"){re();return}if(i!=="html"){n.onError(`不支持的导出格式:${i}`,"export");return}try{const{head:b,pageChunks:k}=Le(m),C=`${b}${k.join("")}</body></html>`;B(new Blob([C],{type:"text/html;charset=utf-8"}),"mach-report.html")}catch(b){n.onError(b instanceof Error?`HTML 导出失败: ${b.message}`:"HTML 导出失败","export")}}}function W(){const i=t.value;if(r||!i||i.pages.length===0)return;const m=o,b=window.open("","_blank");if(!b){n.onError("浏览器拦截了弹窗,请允许弹窗后重试","pdf");return}f.set(b,{plan:i,epoch:m});const k=F(i,m,"PDF");O(i,m).then(C=>{if(!v(i,m)||b.closed){f.delete(b)&&b.close();return}const I=URL.createObjectURL(new Blob([C],{type:"application/pdf"}));setTimeout(()=>URL.revokeObjectURL(I),6e4);const H=b.document;H.title="PDF 预览",H.documentElement.style.height="100%",H.body.style.cssText="margin:0;height:100%;";const j=H.createElement("iframe");j.title="PDF 预览",j.style.cssText="display:block;width:100%;height:100%;border:0;",j.src=I,H.body.replaceChildren(j),f.delete(b)}).catch(C=>{b.close(),f.delete(b),v(i,m)&&n.onError(C instanceof Error?`PDF 预览失败: ${C.message}`:"PDF 预览失败","pdf")}).finally(()=>w(k))}return{print:V,exportAs:M,exportImages:z,exportWord:re,openPdfWindow:W,releasePrintFrame:P,dispose:N}}const rt="mrp-hit";function Wt(t){t.querySelectorAll(`mark.${rt}`).forEach(a=>{const l=a.parentNode;if(l){for(;a.firstChild;)l.insertBefore(a.firstChild,a);a.remove(),l.normalize()}})}function At(t,n){const a=n.trim();if(!a)return 0;const l=a.toLowerCase(),r=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(f){const p=f.parentElement;return!p||p.closest("mark")||/^(SCRIPT|STYLE)$/.test(p.tagName)?NodeFilter.FILTER_REJECT:(f.nodeValue??"").toLowerCase().includes(l)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),o=[];for(let f=r.nextNode();f;f=r.nextNode())o.push(f);let s=0;for(const f of o){const p=f.nodeValue??"",g=p.toLowerCase(),d=f.parentElement;if(!d)continue;const u=document.createDocumentFragment();let h=0,v=g.indexOf(l);for(;v>=0;){v>h&&u.appendChild(document.createTextNode(p.slice(h,v)));const R=document.createElement("mark");R.className=rt,R.textContent=p.slice(v,v+a.length),u.appendChild(R),s++,h=v+a.length,v=g.indexOf(l,h)}h<p.length&&u.appendChild(document.createTextNode(p.slice(h))),d.replaceChild(u,f)}return s}function Ht(t,n){const a=t.toLowerCase();let l=0;for(let r=a.indexOf(n);r>=0;r=a.indexOf(n,r+n.length))l++;return l}function*qt(t){const n=[...t].reverse();for(;n.length>0;){const a=n.pop();if(a.grid){for(const l of a.grid.cells??[])for(const r of l??[])if(yield r?.text??"",r?.children)for(let o=r.children.length-1;o>=0;o--)n.push(r.children[o])}else if(a.kind==="text")if(a.richParagraphs?.length)for(const l of a.richParagraphs)for(const r of l.segments??[])yield(r.kind==="field"?r.field:r.text)??"";else a.lines?.length?yield*a.lines:yield a.text??"";yield""}}function*jt(t){for(let n=0;n<t.pages.length;n++){for(const a of qt(t.pages[n].components))yield{text:a,pageIndex:n};yield{text:"",pageIndex:n}}}function Ut(t){const{plan:n,gotoPage:a,highlight:l,clearHighlights:r}=t,o=e.ref(!1),s=e.ref(""),f=e.ref(0),p=e.ref(0),g=e.ref(!1);let d=[],u=null,h=null,v=0;function R(){v++,u&&clearTimeout(u),h&&clearTimeout(h),u=h=null,g.value=!1}function F(P){s.value=P,f.value=0,p.value=0,d=[],g.value=!1;const N=P.trim().toLowerCase(),B=n.value;if(!N||!B)return;g.value=!0;const V=v,O=jt(B),S=[];let A=0;function z(){if(h=null,V!==v||B!==n.value)return;const re=performance.now();let M=0;for(;M<500&&performance.now()-re<4;){const W=O.next();if(W.done){d=S,p.value=A,g.value=!1,d[0]&&a(d[0].pageIndex+1);return}const i=Ht(W.value.text,N);if(i>0){A+=i;const m=S[S.length-1];m?.pageIndex===W.value.pageIndex?m.cumulative=A:S.push({pageIndex:W.value.pageIndex,cumulative:A})}M++}h=setTimeout(z,0)}z()}function w(P){if(R(),s.value=P,f.value=p.value=0,d=[],!P.trim()){F("");return}g.value=!0,u=setTimeout(()=>{u=null,F(P)},Math.max(0,e.unref(t.debounceMs)??200))}function $(P){const N=p.value;if(N===0||g.value)return;f.value=(f.value+P+N)%N;let B=0,V=d.length-1;for(;B<V;){const O=B+V>>>1;d[O].cumulative<=f.value?B=O+1:V=O}a(d[B].pageIndex+1)}function x(){R(),s.value="",f.value=p.value=0,d=[]}return e.watch(n,x,{flush:"sync"}),e.onScopeDispose(x),{visible:o,query:s,matchIndex:f,matchCount:p,searching:g,toggle:()=>{o.value=!o.value},onInput:w,onNav:$,apply:P=>{s.value.trim()&&l(P,s.value.trim())},clear:P=>{r(P)},reset:x}}function Kt(t,n){const a=e.computed(()=>{if(t.value)return!0;if(typeof location>"u")return!1;try{return new URLSearchParams(location.search).get("mrp-debug")==="1"}catch{return!1}}),l=e.computed(()=>!a.value||!n.plan.value?0:Math.round(JSON.stringify(n.plan.value).length/1024)),r=e.computed(()=>!a.value||!n.plan.value?null:{pages:n.pageCount.value,window:`${n.windowRange.value.start}-${n.windowRange.value.end}`,zoom:`${Math.round(n.zoom.value*100)}%`,loadMs:`${n.loadMs.value}ms`,planKB:l.value});return{enabled:a,debugStats:r}}function Gt(t,n){const{thumbsRoot:a,visible:l,renderThumbCanvas:r}=n,o=e.ref(0),s=e.ref(800),f=e.computed(()=>(t.value?.pages??[]).map(x=>Math.round(x.pageHeightMm/x.pageWidthMm*116))),p=e.computed(()=>Qe.createPageWindowIndex(f.value.map(x=>x+20),8)),g=e.computed(()=>p.value.window(s.value,o.value,1)),d=e.computed(()=>{if(!l.value)return[];const{start:x,end:P}=g.value;return f.value.slice(x,P+1).map((N,B)=>({index:x+B,height:N}))});let u=0,h=0,v=!1;function R(){const x=a.value;x&&(o.value=x.scrollTop,s.value=x.clientHeight||800)}function F(){v||h||(h=requestAnimationFrame(()=>{h=0,R()}))}function w(){if(d.value,u&&cancelAnimationFrame(u),u=0,v||!l.value||!t.value||!a.value)return;R();const x=d.value,P=t.value,N=a.value;let B=0;function V(){if(u=0,!(v||!l.value||t.value!==P||a.value!==N)){for(let O=0;B<x.length&&O<2;O++,B++){const S=x[B].index,A=N.querySelector(`[data-thumb="${S+1}"]`);if(!A||A.childElementCount>0)continue;const z=r(S);z&&(z.style.width="100%",z.style.height="100%",z.style.display="block",A.appendChild(z))}B<x.length&&(u=requestAnimationFrame(V))}}u=requestAnimationFrame(V)}function $(){v=!0,u&&cancelAnimationFrame(u),h&&cancelAnimationFrame(h),u=h=0}return e.onScopeDispose($),{schedule:w,destroy:$,onScroll:F,windowRange:g,visibleThumbs:d}}function Zt(){const t=e.shallowRef(0);return{loadMs:t,start(){return typeof performance<"u"?performance.now():0},end(n){t.value=n?Math.round(performance.now()-n):0}}}const Yt={class:"mrp-toolbar"},Jt={class:"mrp-title"},Xt=["disabled"],Qt={class:"mrp-pageinfo"},_t=["disabled"],en={key:1,class:"mrp-search"},tn=["placeholder","value"],nn={key:0,class:"mrp-search-count",role:"status"},rn=["disabled"],on=["disabled"],an=e.defineComponent({__name:"ReportToolbar",props:{pageCount:{},currentPage:{},zoomMode:{},zoom:{},showExport:{type:Boolean},showPrint:{type:Boolean},showPdfWindow:{type:Boolean},messages:{},search:{},thumbsVisible:{type:Boolean}},emits:["goto","zoom","export","print","pdf-window","search-input","search-nav","search-toggle","thumbs-toggle"],setup(t){const n=t,a=e.ref(null);e.watch(()=>n.search.visible,r=>{r&&e.nextTick(()=>a.value?.focus())});function l(r,o,s){return r.replace("{cur}",String(o)).replace("{total}",String(s))}return(r,o)=>(e.openBlock(),e.createElementBlock("div",Yt,[e.createElementVNode("span",Jt,e.toDisplayString(t.messages.title),1),t.pageCount>0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.currentPage<=1,onClick:o[0]||(o[0]=s=>r.$emit("goto",t.currentPage-1))},e.toDisplayString(t.messages.prevPage),9,Xt),e.createElementVNode("span",Qt,e.toDisplayString(l(t.messages.pageInfo,t.currentPage,t.pageCount)),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.currentPage>=t.pageCount,onClick:o[1]||(o[1]=s=>r.$emit("goto",t.currentPage+1))},e.toDisplayString(t.messages.nextPage),9,_t)],64)):e.createCommentVNode("",!0),o[17]||(o[17]=e.createElementVNode("span",{class:"mrp-spacer"},null,-1)),t.search.visible?(e.openBlock(),e.createElementBlock("div",en,[e.createElementVNode("input",{ref_key:"searchInputRef",ref:a,class:"mrp-search-input",type:"text",placeholder:t.messages.searchPlaceholder,value:t.search.query,onInput:o[2]||(o[2]=s=>r.$emit("search-input",s.target.value))},null,40,tn),t.search.query?(e.openBlock(),e.createElementBlock("span",nn,e.toDisplayString(t.search.searching?t.messages.searching??"搜索中…":l(t.messages.matchInfo,t.search.matchCount>0?t.search.matchIndex+1:0,t.search.matchCount)),1)):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[3]||(o[3]=s=>r.$emit("search-nav",-1))},e.toDisplayString(t.messages.prevMatch),9,rn),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[4]||(o[4]=s=>r.$emit("search-nav",1))},e.toDisplayString(t.messages.nextMatch),9,on)])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.search.visible}]),type:"button",title:"Ctrl+F",onClick:o[5]||(o[5]=s=>r.$emit("search-toggle"))}," 🔍 ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.thumbsVisible}]),type:"button",onClick:o[6]||(o[6]=s=>r.$emit("thumbs-toggle"))}," ▦ "+e.toDisplayString(t.messages.thumbnails),3),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="fit"}]),type:"button",onClick:o[7]||(o[7]=s=>r.$emit("zoom","fit"))},e.toDisplayString(t.messages.fitWidth),3),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="raw"&&Math.round(t.zoom*100)===100}]),type:"button",onClick:o[8]||(o[8]=s=>r.$emit("zoom",100))}," 100% ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="raw"&&Math.round(t.zoom*100)===150}]),type:"button",onClick:o[9]||(o[9]=s=>r.$emit("zoom",150))}," 150% ",2),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:2,class:"mrp-nav",type:"button",onClick:o[10]||(o[10]=s=>r.$emit("export","html"))},e.toDisplayString(t.messages.exportHtml),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:3,class:"mrp-nav",type:"button",onClick:o[11]||(o[11]=s=>r.$emit("export","pdf"))},e.toDisplayString(t.messages.exportPdf),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:4,class:"mrp-nav",type:"button",onClick:o[12]||(o[12]=s=>r.$emit("export","xlsx"))},e.toDisplayString(t.messages.exportExcel),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:5,class:"mrp-nav",type:"button",onClick:o[13]||(o[13]=s=>r.$emit("export","png"))},e.toDisplayString(t.messages.exportImage),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:6,class:"mrp-nav",type:"button",onClick:o[14]||(o[14]=s=>r.$emit("export","word"))},e.toDisplayString(t.messages.exportWord),1)):e.createCommentVNode("",!0),t.showPrint?(e.openBlock(),e.createElementBlock("button",{key:7,class:"mrp-nav",type:"button",onClick:o[15]||(o[15]=s=>r.$emit("print"))},e.toDisplayString(t.messages.print),1)):e.createCommentVNode("",!0),t.showPdfWindow?(e.openBlock(),e.createElementBlock("button",{key:8,class:"mrp-nav",type:"button",onClick:o[16]||(o[16]=s=>r.$emit("pdf-window"))},e.toDisplayString(t.messages.pdfWindow),1)):e.createCommentVNode("",!0)]))}}),We=(t,n)=>{const a=t.__vccOpts||t;for(const[l,r]of n)a[l]=r;return a},ot=We(an,[["__scopeId","data-v-601f8fa8"]]),ln={class:"mrp-params"},sn={class:"mrp-params-title"},cn={class:"mrp-params-grid"},un={class:"mrp-param-label"},dn={key:0,class:"mrp-param-star"},fn=["value","onChange"],mn={value:"",disabled:"",hidden:""},pn=["value"],gn=["type","placeholder","value","onInput"],hn={class:"mrp-params-actions"},vn=e.defineComponent({__name:"ReportParamPanel",props:{defs:{},modelValue:{},messages:{},attempted:{type:Boolean}},emits:["update:modelValue","query","reset"],setup(t,{emit:n}){const a=t,l=n,r=e.ref({...a.modelValue});e.watch(()=>a.modelValue,p=>{r.value={...p}});const o=e.computed(()=>a.defs.map(p=>({def:p,label:p.label??p.field,value:r.value[p.field]??""})));function s(p,g){r.value={...r.value,[p]:g},l("update:modelValue",{...r.value})}function f(p){const g=a.defs.find(d=>d.field===p);return a.attempted&&g?.required===!0&&!(r.value[p]??"").trim()}return(p,g)=>(e.openBlock(),e.createElementBlock("div",ln,[e.createElementVNode("span",sn,e.toDisplayString(t.messages.paramsTitle),1),e.createElementVNode("div",cn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>(e.openBlock(),e.createElementBlock("label",{key:d.def.field,class:e.normalizeClass(["mrp-param",{"mrp-param-missing":f(d.def.field)}])},[e.createElementVNode("span",un,[e.createTextVNode(e.toDisplayString(d.label),1),d.def.required?(e.openBlock(),e.createElementBlock("i",dn,"*")):e.createCommentVNode("",!0)]),(d.def.type??"text")==="select"?(e.openBlock(),e.createElementBlock("select",{key:0,class:"mrp-param-input",value:d.value,onChange:u=>s(d.def.field,u.target.value),onKeydown:g[0]||(g[0]=e.withKeys(u=>p.$emit("query"),["enter"]))},[e.createElementVNode("option",mn,e.toDisplayString(d.def.placeholder??`请选择${d.label}`),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.def.options??[],u=>(e.openBlock(),e.createElementBlock("option",{key:u.value,value:u.value},e.toDisplayString(u.label),9,pn))),128))],40,fn)):(e.openBlock(),e.createElementBlock("input",{key:1,class:"mrp-param-input",type:d.def.type==="number"?"number":d.def.type==="date"?"date":"text",placeholder:d.def.placeholder??`请输入${d.label}`,value:d.value,onInput:u=>s(d.def.field,u.target.value),onKeydown:g[1]||(g[1]=e.withKeys(u=>p.$emit("query"),["enter"]))},null,40,gn))],2))),128))]),e.createElementVNode("div",hn,[e.createElementVNode("button",{class:"mrp-nav mrp-param-query",type:"button",onClick:g[2]||(g[2]=d=>p.$emit("query"))},e.toDisplayString(t.messages.query),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",onClick:g[3]||(g[3]=d=>p.$emit("reset"))},e.toDisplayString(t.messages.reset),1)])]))}}),at=We(vn,[["__scopeId","data-v-aafce92d"]]),lt={title:"报表预览",prevPage:"‹ 上一页",nextPage:"下一页 ›",pageInfo:"{cur} / {total}",fitWidth:"适宽",exportHtml:"导出 HTML",exportPdf:"导出 PDF",exportExcel:"导出 Excel",exportImage:"导出图片",exportWord:"导出 Word",exporting:"正在生成 {format}…",print:"打印",pdfWindow:"PDF 窗口",loading:"报表渲染中…",empty:"暂无预览数据",errorPrefix:"",retry:"重试",pdfFontUnavailable:"PDF 字体尚未就绪,请联系管理员检查字体配置;预览及其它导出仍可使用。",searchPlaceholder:"搜索报表内容",matchInfo:"{cur}/{total}",prevMatch:"‹",nextMatch:"›",thumbnails:"缩略图",paramsTitle:"查询条件",query:"查 询",reset:"重 置",paramRequired:"请填写{label}",searching:"搜索中…"},st={shellBg:"#525659",shellFg:"#e8e8e8",toolbarBg:"#323639",toolbarBorder:"#22252a",toolbarFg:"#e8e8e8",btnFg:"#cfcfcf",btnBorder:"#4a4d52",btnHoverBg:"#414549",btnHoverFg:"#ffffff",btnActiveBg:"#2d5fb8"};function it(t={}){return{...t,defaults:t.defaults??{},presets:t.presets??{}}}function wn(t){return t}const te={showExport:!0,showPrint:!0,showPdfWindow:!0,showParams:!0,gapPx:18,pdfFontUrl:"/simhei.ttf",logger:console},yn={warn:()=>{},info:()=>{}};function Ee(t,n){return{...t,...n,theme:{...t?.theme,...n?.theme},messages:{...t?.messages,...n?.messages},preview:{...t?.preview,...n?.preview},xlsx:{...t?.xlsx,...n?.xlsx}}}function ct(t,n){const a=n?t?.presets?.[n]:t?.defaultPreset?t?.presets?.[t.defaultPreset]:void 0,l=Ee(t?.defaults,a);return{showExport:l.showExport??te.showExport,showPrint:l.showPrint??te.showPrint,showPdfWindow:l.showPdfWindow??te.showPdfWindow,showParams:l.showParams??te.showParams,gapPx:l.gapPx??te.gapPx,pdfFontUrl:l.pdfFontUrl??te.pdfFontUrl,theme:{...st,...l.theme},messages:{...lt,...l.messages},logger:l.logger??te.logger,preview:{overscanPages:Ye(l.preview?.overscanPages,1,10,!0),searchDebounceMs:Ye(l.preview?.searchDebounceMs,200,2e3)},xlsx:{...l.xlsx}}}function Ye(t,n,a,l=!1){if(t==null||!Number.isFinite(t))return n;const r=Math.max(0,Math.min(a,t));return l?Math.floor(r):r}function ut(t){const n={};return t.shellBg!=null&&(n["--mrp-shell-bg"]=t.shellBg),t.shellFg!=null&&(n["--mrp-shell-fg"]=t.shellFg),t.toolbarBg!=null&&(n["--mrp-toolbar-bg"]=t.toolbarBg),t.toolbarBorder!=null&&(n["--mrp-toolbar-border"]=t.toolbarBorder),t.toolbarFg!=null&&(n["--mrp-toolbar-fg"]=t.toolbarFg),t.btnFg!=null&&(n["--mrp-btn-fg"]=t.btnFg),t.btnBorder!=null&&(n["--mrp-btn-border"]=t.btnBorder),t.btnHoverBg!=null&&(n["--mrp-btn-hover-bg"]=t.btnHoverBg),t.btnHoverFg!=null&&(n["--mrp-btn-hover-fg"]=t.btnHoverFg),t.btnActiveBg!=null&&(n["--mrp-btn-active-bg"]=t.btnActiveBg),n}function bn(t){const n=e.inject(ce.MACH_REPORT_CONFIG_KEY,null),a=e.computed(()=>{const l=n?.value??null,r="defaults"in t||"presets"in t||"defaultPreset"in t?it(t):{defaults:t,presets:{}};if(!l)return r;const o={...l.presets,...r.presets};for(const s of Object.keys(o))o[s]=Ee(Ee(l.presets[s],r.defaults),r.presets[s]);return{defaults:Ee(l.defaults,r.defaults),presets:o,defaultPreset:r.defaultPreset??l.defaultPreset}});e.provide(ce.MACH_REPORT_CONFIG_KEY,a)}function dt(){return e.inject(ce.MACH_REPORT_CONFIG_KEY,e.computed(()=>null))}const Je=new Map,se=new Map,En=15e3;function Ve(t,n){return Object.assign(new Error(t),{cause:n})}function pe(t,n){return`PDF 字体 ${JSON.stringify(t)}:${n}。请部署支持报表文字的字体文件,并将 pdfFontUrl 配置为可访问的字体 URL;西文报表可设为空串`}function ke(t){if(t?.reason instanceof Error&&t.reason.name==="AbortError")return t.reason;const n=Ve("PDF 字体检查已取消",t?.reason);return n.name="AbortError",n}async function xn(t,n){let a=!1;const l=setTimeout(()=>{a=!0,n.abort()},En);try{const r=await fetch(t,{method:"HEAD",signal:n.signal});if(n.signal.aborted)throw ke(n.signal);if(r.status===405||r.status===501||r.type==="opaque")return{status:"unverified",fontUrl:t,message:`PDF 字体 ${JSON.stringify(t)} 无法通过 HEAD 检查验证;仍可尝试导出,届时会加载并校验字体`};if(!r.ok){const s=new Error(`字体请求返回 HTTP ${r.status}`);return{status:"error",fontUrl:t,message:pe(t,s.message),cause:s}}const o=r.headers.get("content-type")??"";if(/text\/html|application\/xhtml\+xml/i.test(o)){const s=new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件");return{status:"error",fontUrl:t,message:pe(t,s.message),cause:s}}if(/^text\//i.test(o)||/(?:\/|\+)json(?:\s*;|$)/i.test(o)){const s=new Error(`字体 URL 返回 ${o} 文本响应,不是字体文件`);return{status:"error",fontUrl:t,message:pe(t,s.message),cause:s}}return{status:"available",fontUrl:t,message:"PDF 字体资源可达;文字覆盖范围将在实际导出时校验"}}catch(r){if(n.signal.aborted&&!a)throw ke(n.signal);return{status:"error",fontUrl:t,message:pe(t,a?"字体检查超时,请检查网络或字体服务":"字体检查失败,请检查网络、字体服务或跨域访问配置"),cause:r}}finally{clearTimeout(l)}}function Pn(t,n){if(n?.aborted)return Promise.reject(ke(n));if(!t)return Promise.resolve({status:"disabled",fontUrl:t,message:"已停用自定义 PDF 字体;内置字体用于西文,其他文字会在导出时校验"});const a=Je.get(t);if(a)return Promise.resolve(a);let l=se.get(t);if(!l){const o=new AbortController;l={controller:o,promise:xn(t,o),subscribers:0};const s=l;se.set(t,s),s.promise=s.promise.then(f=>(!o.signal.aborted&&f.status==="available"&&Je.set(t,f),f)).finally(()=>{se.get(t)===s&&se.delete(t)})}const r=l;return r.subscribers++,new Promise((o,s)=>{let f=!1;const p=()=>f?!1:(f=!0,r.subscribers--,n?.removeEventListener("abort",g),!0),g=()=>{p()&&(r.subscribers===0&&(se.get(t)===r&&se.delete(t),r.controller.abort()),s(ke(n)))};n?.addEventListener("abort",g,{once:!0}),r.promise.then(d=>{p()&&o(d)},d=>{p()&&s(d)}),n?.aborted&&g()})}function ft(t={fontUrl:"/simhei.ttf"}){let n=null;const a=async(l,r)=>{n||(n=await import("@agile-team/mach-report/pdf"));let o=null;if(t.fontUrl)try{if(o=await n.loadFontWithCache(t.fontUrl,{strict:!0}),!o?.byteLength)throw new Error("字体文件为空或加载失败")}catch(u){const h=u instanceof Error?u.message:String(u);throw Ve(pe(t.fontUrl,h),u)}let s;try{s=await n.renderPlanToPdf(l,o?{customFontBytes:o}:{})}catch(u){if(!o)throw u;const h=u instanceof Error?u.message:String(u);throw Ve(`PDF 生成失败:${h}。当前字体 URL 为 ${JSON.stringify(t.fontUrl)};请确认该文件是有效字体,或重新配置 pdfFontUrl`,u)}const{bytes:f,unsupportedTextCount:p,pageErrors:g,fidelityWarnings:d}=s;if(p>0)throw new Error(`PDF 中有 ${p} 行文字无法编码;请部署支持所用文字的字体并配置 pdfFontUrl`);if(g.length>0)throw new Error(`PDF 有 ${g.length} 页渲染失败:${g[0]}`);return d.length>0&&r?.(`PDF 有 ${d.length} 处版式降级:${d.slice(0,2).join(";")}`),f};return a.checkFont=l=>Pn(t.fontUrl,l),a}class ne extends Error{constructor(n,a,l){super(a),this.name="MachReportError",this.code=n,this.cause=l}}function mt(t){return t instanceof ne?{code:t.code,cause:t.cause}:{code:"render",cause:t}}const kn={key:2,class:"mrp-export-notice mrp-export-warning",role:"status"},Cn={class:"mrp-main"},$n={key:0,class:"mrp-state"},Bn={key:1,class:"mrp-state mrp-error"},Sn={key:2,class:"mrp-state"},Rn=["data-page"],Fn=["onClick"],Mn=["data-thumb"],Tn={class:"mrp-thumb-no"},Dn={class:"mrp-overlay"},Nn={key:3,class:"mrp-debug","aria-hidden":"true"},Ne=96/25.4,Xe="mach-report:ui",Vn=e.defineComponent({__name:"ReportPreview",props:{reportId:{type:[String,Array],default:null},params:{type:Object,default:()=>({})},height:{type:String,default:"100vh"},autoLoad:{type:Boolean,default:!0},showExport:{type:Boolean,default:void 0},showPrint:{type:Boolean,default:void 0},showPdfWindow:{type:Boolean,default:void 0},gapPx:{type:Number,default:void 0},messages:{type:Object,default:void 0},preset:{type:String,default:void 0},debug:{type:Boolean,default:!1},paramDefs:{type:Array,default:void 0},showParams:{type:Boolean,default:void 0},fetcher:{type:Function,default:null}},emits:["loaded","error","warning"],setup(t,{expose:n,emit:a}){e.useCssVars(c=>({v4c81cc3e:P.value+"px"}));const l=t,r=a,o=e.shallowRef(null),s=e.ref(!1),f=e.ref(""),p=e.shallowRef(null),g=e.ref(null),d=e.ref(!1),u=e.shallowRef(Object.freeze({status:"unchecked",fontUrl:""})),h=e.ref(null),v=e.ref(1),R=e.ref(null),F=e.ref(null),w=e.ref(null),$=e.ref(!1),x=Zt(),P=e.computed(()=>Math.max(0,k.value)),N=e.inject(ce.MACH_REPORT_FETCHER_KEY,null),B=e.inject(ce.MACH_REPORT_PDF_EXPORTER_KEY,null),V=e.computed(()=>Oe(l.reportId)),O=e.computed(()=>l.fetcher??N),S=e.computed(()=>o.value?.pages.length??0),A=e.computed(()=>Object.freeze({loading:s.value,hasPlan:S.value>0,pageCount:S.value,currentPage:v.value,exporting:g.value,printing:d.value,canExport:!s.value&&S.value>0&&g.value===null,canPrint:!s.value&&S.value>0&&!d.value,error:p.value,pdfFont:u.value}));function z(c,y,E){p.value=Object.freeze({message:c,code:y,cause:E}),r("error",c,{code:y,cause:E})}const re=dt(),M=e.computed(()=>ct(re.value,l.preset)),W=e.computed(()=>({...M.value.messages,...l.messages})),i=e.computed(()=>l.showExport??M.value.showExport),m=e.computed(()=>l.showPrint??M.value.showPrint),b=e.computed(()=>l.showPdfWindow??M.value.showPdfWindow),k=e.computed(()=>l.gapPx??M.value.gapPx),C=e.computed(()=>l.showParams??M.value.showParams);let I=null,H=null;function j(){if(B)return B;const c=M.value.pdfFontUrl;return(!H||I!==c)&&(I=c,H=ft({fontUrl:c})),H}let ge=0,ue=null,de=!1;function Ce(){ge++,ue?.abort(),ue=null}async function he(){if(de)throw new ne("config","报表预览已卸载");Ce();const c=ge,y=new AbortController;ue=y;const E=M.value.pdfFontUrl;u.value=Object.freeze({status:"checking",fontUrl:E});try{const T=j(),G=T.checkFont?await T.checkFont(y.signal):{status:"unverified",fontUrl:"",message:"自定义 PDF 导出器未提供字体预检查;字体由宿主确认"};return!de&&c===ge&&!y.signal.aborted&&(u.value=Object.freeze({...G})),G}catch(T){if(y.signal.aborted)throw T;const G={status:"error",fontUrl:E,message:T instanceof Error?T.message:"PDF 字体检查失败",cause:T};return!de&&c===ge&&(u.value=Object.freeze(G)),G}finally{ue===y&&(ue=null)}}function gt(){he().catch(()=>{})}e.watch([o,()=>M.value.pdfFontUrl,i,b],()=>{const c=u.value.fontUrl===M.value.pdfFontUrl;Ce(),(!c||u.value.status==="checking")&&(u.value=Object.freeze({status:"unchecked",fontUrl:M.value.pdfFontUrl})),!de&&S.value>0&&(i.value||b.value)&&he().catch(()=>{})},{immediate:!0});const J=e.computed(()=>l.paramDefs??O.value?.getParamDefs?.(V.value)??[]),Q=e.ref({}),$e=e.ref(!1);function fe(c){const y={};for(const E of c)y[E.field]=l.params[E.field]??E.defaultValue??"";Q.value=y,$e.value=!1}fe(J.value),e.watch(J,c=>fe(c)),e.watch(V,()=>fe(J.value)),e.watch(()=>JSON.stringify(l.params),()=>fe(J.value));const ht=e.computed(()=>{const c={...l.params};for(const[y,E]of Object.entries(Q.value))E===""?delete c[y]:c[y]=E;return c});function vt(){return J.value.filter(c=>c.required===!0&&!(Q.value[c.field]??"").trim())}function wt(){$e.value=!0;const c=vt();if(c.length>0){const y=c[0].label??c[0].field,E=W.value.paramRequired.replace("{label}",y);f.value=E,z(E,"param");return}_()}function yt(){fe(J.value)}const bt=e.computed(()=>({height:l.height,...ut(M.value.theme)})),{zoom:q,zoomMode:oe,applyFitZoom:Ae,setZoom:Be}=et(()=>({viewport:F.value,pageWidthPx:(o.value?.pages[0]?.pageWidthMm??210)*Ne})),He=_e(o,q,{pxPerMm:Ne,gapPx:k,overscan:e.computed(()=>M.value.preview.overscanPages)}),{contentSize:Se,windowRange:me,visiblePages:qe,makeScrollHandler:Et,refreshViewport:Re}=He,xt=Et(v,S);function Fe(c){oe.value="raw",q.value=Math.min(3,Math.max(.3,c))}function ve(){Pt(),o.value=null,v.value=1,L.reset()}let X=0,Z=null;async function _(){const c=++X;Z?.abort(),Z=null;const y=O.value;if(s.value=!1,p.value=null,V.value.length===0){f.value="缺少报表 ID",ve(),z(f.value,"param");return}if(!y){f.value="未提供渲染数据源 fetcher",ve(),z(f.value,"config");return}s.value=!0,f.value="",h.value=null,ve();const E=x.start(),T=new AbortController;Z=T;const G=new Set;function le(D){c!==X||T.signal.aborted||G.has(D)||(G.add(D),M.value.logger.warn("[mach-report] 报表告警:",D),r("warning",D))}try{const D=await y({reportIds:V.value,params:{...ht.value},signal:T.signal,onWarning:le});if(c!==X)return;const U=ie.validateRenderPlan(D);if(!U.ok){const ee=U.errors.slice(0,3).map(Ke=>`${Ke.path}: ${Ke.message}`).join("; ");throw new ne("validate",`渲染计划校验失败(${U.errors.length} 处): ${ee}`)}if(U.warnings.forEach(ee=>le(`${ee.path}: ${ee.message}`)),c!==X||T.signal.aborted)return;o.value=D,v.value=1,x.end(E),F.value&&(F.value.scrollTop=0),oe.value==="fit"&&Ae(),r("loaded",D.pages.length)}catch(D){if(c!==X)return;const U=D instanceof ne?D:D instanceof ie.ReportSourceError?new ne(D.code,D.message,D.cause):new ne("fetch",D instanceof Error?D.message:"预览加载失败",D);f.value=U.message;const ee=mt(U);z(U.message,ee.code,ee.cause)}finally{c===X&&(s.value=!1),Z===T&&(Z=null)}}function Y(c){if(S.value<=0)return;const y=Math.max(1,Math.min(S.value,c));v.value=y;const E=F.value;E&&(E.scrollTop=He.pageOffsetPx(y-1)*q.value,Re(E))}const we=nt(o,{getPdfExporter:j,getXlsxOptions:()=>M.value.xlsx,onError:(c,y)=>{h.value={kind:"error",message:c},z(c,y??"print")},onWarning:c=>{h.value={kind:"warning",message:c},r("warning",c)},onBusy:c=>{g.value=c,c?h.value={kind:"progress",message:W.value.exporting.replace("{format}",c)}:h.value?.kind==="progress"&&(h.value=null)},onPrinting:c=>{d.value=c}}),{releasePrintFrame:Pt,dispose:kt}=we;async function Me(){p.value=null,await we.print()}async function Te(c){p.value=null,await we.exportAs(c)}function De(){p.value=null,we.openPdfWindow()}async function je(c,y={}){Q.value={...Q.value,...c},y.reload!==!1&&await _()}const Ct={reload:_,print:Me,exportAs:Te,openPdfWindow:De,gotoPage:Y,setParams:je,checkPdfFont:he,get state(){return A.value}};e.provide(ce.MACH_REPORT_CONTROLLER_KEY,Ct);const L=Ut({plan:o,gotoPage:Y,debounceMs:e.computed(()=>M.value.preview.searchDebounceMs),highlight:At,clearHighlights:Wt});function $t(c){c.ctrlKey&&(c.preventDefault(),Fe(q.value*(c.deltaY<0?1.1:1/1.1)))}function Bt(c){if((c.ctrlKey||c.metaKey)&&c.key.toLowerCase()==="f"){c.preventDefault(),L.visible.value||L.toggle();return}switch(c.key){case"PageDown":c.preventDefault(),Y(v.value+1);break;case"PageUp":c.preventDefault(),Y(v.value-1);break;case"Home":c.preventDefault(),Y(1);break;case"End":c.preventDefault(),Y(S.value);break;case"+":case"=":c.preventDefault(),Fe(q.value*1.1);break;case"-":c.preventDefault(),Fe(q.value/1.1);break}}function St(){try{localStorage.setItem(Xe,JSON.stringify({zoomMode:oe.value==="fit"?"fit":Math.round(q.value*100)}))}catch{}}e.watch([oe,q],St),e.watchEffect(()=>{const c=o.value;if(!c)return;qe.value;const y=R.value;if(!y)return;y.querySelectorAll(".mrp-page-holder").forEach(T=>{const G=Number(T.dataset.page??0)-1,le=c.pages[G];if(!le||T.childElementCount>0){if(T.firstElementChild){const U=T.firstElementChild;L.clear(U),L.apply(U)}return}T.style.width=`${le.pageWidthMm*Ne}px`;const D=ie.renderPage(le,96,{},document);L.apply(D),T.appendChild(D)})},{flush:"post"}),e.watch(()=>L.query.value,c=>{c||R.value?.querySelectorAll(".mrp-page-holder").forEach(y=>{L.clear(y)})});const K=Gt(o,{thumbsRoot:w,visible:$,renderThumbCanvas:c=>{try{const{canvases:y}=ie.renderPlanToCanvas(o.value,{start:c,end:c,dpr:.2});return y[0]??null}catch{return null}}});e.watchEffect(()=>{K.schedule()},{flush:"post"});const Rt=e.computed(()=>l.debug),{debugStats:ae}=Kt(Rt,{plan:o,pageCount:S,windowRange:me,zoom:q,loadMs:x.loadMs});function Ue(){Re(F.value),K.schedule(),oe.value==="fit"&&Ae()}function Ft(){try{const c=JSON.parse(localStorage.getItem(Xe)??"{}");c.zoomMode==="fit"?Be("fit"):typeof c.zoomMode=="number"&&Be(c.zoomMode)}catch{}}return e.onMounted(()=>{window.addEventListener("resize",Ue),Re(F.value),Ft(),l.autoLoad&&_()}),e.onUnmounted(()=>{de=!0,Ce(),X++,Z?.abort(),Z=null,window.removeEventListener("resize",Ue),K.destroy(),L.reset(),kt()}),e.watch(()=>[JSON.stringify(V.value),JSON.stringify(l.params),O.value],()=>{if(l.autoLoad){_();return}X++,Z?.abort(),Z=null,s.value=!1,f.value="",p.value=null,h.value=null,ve()}),n({reload:_,print:Me,exportAs:Te,openPdfWindow:De,gotoPage:Y,setParams:je,checkPdfFont:he,state:A}),(c,y)=>(e.openBlock(),e.createElementBlock("div",{class:"mach-report-preview",style:e.normalizeStyle(bt.value)},[C.value&&J.value.length>0?(e.openBlock(),e.createBlock(at,{key:0,defs:J.value,modelValue:Q.value,"onUpdate:modelValue":y[0]||(y[0]=E=>Q.value=E),messages:W.value,attempted:$e.value,onQuery:wt,onReset:yt},null,8,["defs","modelValue","messages","attempted"])):e.createCommentVNode("",!0),e.createVNode(ot,{"page-count":S.value,"current-page":v.value,"zoom-mode":e.unref(oe),zoom:e.unref(q),"show-export":i.value,"show-print":m.value,"show-pdf-window":b.value,messages:W.value,search:{visible:e.unref(L).visible.value,query:e.unref(L).query.value,matchIndex:e.unref(L).matchIndex.value,matchCount:e.unref(L).matchCount.value,searching:e.unref(L).searching.value},"thumbs-visible":$.value,onGoto:Y,onZoom:e.unref(Be),onExport:y[1]||(y[1]=E=>Te(E)),onPrint:Me,onPdfWindow:De,onSearchInput:e.unref(L).onInput,onSearchNav:e.unref(L).onNav,onSearchToggle:e.unref(L).toggle,onThumbsToggle:y[2]||(y[2]=E=>$.value=!$.value)},null,8,["page-count","current-page","zoom-mode","zoom","show-export","show-print","show-pdf-window","messages","search","thumbs-visible","onZoom","onSearchInput","onSearchNav","onSearchToggle"]),h.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["mrp-export-notice",`mrp-export-${h.value.kind}`]),role:"alert"},e.toDisplayString(h.value.message),3)):e.createCommentVNode("",!0),u.value.status==="error"&&(i.value||b.value)?(e.openBlock(),e.createElementBlock("div",kn,[e.createTextVNode(e.toDisplayString(W.value.pdfFontUnavailable)+" ",1),e.createElementVNode("button",{type:"button",onClick:gt},e.toDisplayString(W.value.retry),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Cn,[e.createElementVNode("div",{ref_key:"viewportRef",ref:F,class:"mrp-body",tabindex:"0",onWheel:$t,onKeydown:Bt,onScrollPassive:y[3]||(y[3]=E=>e.unref(xt)(E.target))},[s.value?(e.openBlock(),e.createElementBlock("div",$n,e.toDisplayString(W.value.loading),1)):f.value?(e.openBlock(),e.createElementBlock("div",Bn,[e.createTextVNode(e.toDisplayString(f.value)+" ",1),e.createElementVNode("button",{class:"mrp-retry",type:"button",onClick:_},e.toDisplayString(W.value.retry),1)])):!o.value||S.value===0?(e.openBlock(),e.createElementBlock("div",Sn,e.toDisplayString(W.value.empty),1)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mrp-scale",style:e.normalizeStyle({width:`${e.unref(Se).w*e.unref(q)}px`,height:`${e.unref(Se).h*e.unref(q)}px`})},[e.createElementVNode("div",{ref_key:"containerRef",ref:R,class:"mrp-scale-inner",style:e.normalizeStyle({transform:`scale(${e.unref(q)})`,transformOrigin:"top left",width:`${e.unref(Se).w}px`})},[e.unref(me).padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-spacer-top",style:e.normalizeStyle({height:`${e.unref(me).padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(qe),E=>(e.openBlock(),e.createElementBlock("div",{key:E.index,class:"mrp-page-holder","data-page":E.index+1},null,8,Rn))),128)),e.unref(me).padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-spacer-bottom",style:e.normalizeStyle({height:`${e.unref(me).padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)],4))],544),$.value&&S.value>0?(e.openBlock(),e.createElementBlock("aside",{key:0,ref_key:"thumbsRef",ref:w,class:"mrp-thumbs",onScrollPassive:y[4]||(y[4]=(...E)=>e.unref(K).onScroll&&e.unref(K).onScroll(...E))},[e.unref(K).windowRange.value.padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-thumb-spacer",style:e.normalizeStyle({height:`${e.unref(K).windowRange.value.padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(K).visibleThumbs.value,E=>(e.openBlock(),e.createElementBlock("div",{key:E.index,class:e.normalizeClass(["mrp-thumb",{"mrp-thumb-active":E.index+1===v.value}]),style:e.normalizeStyle({height:`${E.height+20}px`}),onClick:T=>Y(E.index+1)},[e.createElementVNode("div",{class:"mrp-thumb-box","data-thumb":E.index+1,style:e.normalizeStyle({height:`${E.height}px`})},null,12,Mn),e.createElementVNode("span",Tn,e.toDisplayString(E.index+1),1)],14,Fn))),128)),e.unref(K).windowRange.value.padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-thumb-spacer",style:e.normalizeStyle({height:`${e.unref(K).windowRange.value.padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],544)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Dn,[e.renderSlot(c.$slots,"default",{},void 0,!0)]),e.unref(ae)?(e.openBlock(),e.createElementBlock("div",Nn,[y[5]||(y[5]=e.createElementVNode("div",null,"mach-report debug",-1)),e.createElementVNode("div",null,"pages: "+e.toDisplayString(e.unref(ae).pages)+" | window: ["+e.toDisplayString(e.unref(ae).window)+"]",1),e.createElementVNode("div",null,"zoom: "+e.toDisplayString(e.unref(ae).zoom)+" | load: "+e.toDisplayString(e.unref(ae).loadMs),1),e.createElementVNode("div",null,"plan: "+e.toDisplayString(e.unref(ae).planKB)+"KB",1)])):e.createCommentVNode("",!0)],4))}}),pt=We(Vn,[["__scopeId","data-v-294f34ce"]]),On=Object.freeze(Object.defineProperty({__proto__:null,default:pt},Symbol.toStringTag,{value:"Module"}));exports.DEFAULT_MESSAGES=lt;exports.DEFAULT_THEME=st;exports.MachReportError=ne;exports.PlanLoadError=ye;exports.ReportParamPanel=at;exports.ReportPreview=pt;exports.ReportPreview$1=On;exports.ReportToolbar=ot;exports.SILENT_LOGGER=yn;exports.buildPrintDocument=Le;exports.buildWordHtml=tt;exports.createDefaultPdfExporter=ft;exports.createFetchRequest=It;exports.defineMachReportConfig=it;exports.defineMachReportPreset=wn;exports.joinReportIds=zt;exports.normalizeReportIds=Oe;exports.printPlans=Lt;exports.provideMachReportConfig=bn;exports.resolveConfig=ct;exports.themeToCssVars=ut;exports.toErrorDetail=mt;exports.useMachReportConfig=dt;exports.usePageWindow=_e;exports.usePrintExport=nt;exports.useZoom=et;
|