@agile-team/mach-report 1.1.2 → 1.2.1

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.
@@ -1,6 +0,0 @@
1
- "use strict";const e=require("vue"),O=require("@agile-team/mach-report"),V=require("./plugin-DxneRya8.cjs");function be(t,r,l={}){const n=l.pxPerMm??3.7795275590551185,a=l.gapPx??18,o=e.ref(0),s=e.ref(800),u=e.computed(()=>(t.value?.pages??[]).map(y=>y.pageHeightMm*n)),c=e.computed(()=>{const y=t.value?.pages??[];let b=0,m=0;for(const p of y)b+=p.pageHeightMm*n+a,m=Math.max(m,p.pageWidthMm*n);return{w:m,h:b}}),f=e.computed(()=>O.computePageWindow({pageHeightsPx:u.value,viewportHeightPx:s.value/r.value,scrollTopPx:o.value/r.value,overscan:1,gapPx:a})),d=e.computed(()=>{const y=t.value;if(!y)return[];const{start:b,end:m}=f.value;return m<b?[]:y.pages.slice(b,m+1).map((p,P)=>({page:p,index:b+P}))});function g(y,b){let m=0;return p=>{m||(m=requestAnimationFrame(()=>{if(m=0,o.value=p.scrollTop,s.value=p.clientHeight||800,b.value<=0)return;const P=p.querySelectorAll(".mrp-page-holder");if(!P.length)return;const k=p.getBoundingClientRect().top+56;let C=1;P.forEach(v=>{v.getBoundingClientRect().top<=k&&(C=Number(v.dataset.page??1))}),y.value=Math.max(1,Math.min(b.value,C))}))}}return{contentSize:c,windowRange:f,visiblePages:d,makeScrollHandler:g,refreshViewport(y){y&&(s.value=y.clientHeight||800)}}}function we(t){const r=e.ref(1),l=e.ref("fit");function n(){requestAnimationFrame(()=>{const o=t();!o||!o.viewport||(r.value=Math.min(1,Math.max(.3,(o.viewport.clientWidth-48)/Math.max(1,o.pageWidthPx))))})}function a(o){o==="fit"?(l.value="fit",n()):(l.value="raw",r.value=o/100)}return{zoom:r,zoomMode:l,applyFitZoom:n,setZoom:a}}const _=8;function ee(){return new Promise(t=>setTimeout(t,0))}function X(t){return`p${Math.round(t.pageWidthMm)}x${Math.round(t.pageHeightMm)}`}function A(t){const r=new Map;t.pages.forEach(s=>{r.has(X(s))||r.set(X(s),s)});const a=`<!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
- ${[...r.values()].map(s=>`@page ${X(s)}{size:${Math.round(s.pageWidthMm)}mm ${Math.round(s.pageHeightMm)}mm;margin:0;}`).join(`
5
- `)}
6
- body{margin:0;background:#fff;}`}</style></head><body>`,o=t.pages.map(s=>{const u=O.renderPage(s,96,{},document);return u.style.page=X(s),u.outerHTML});return{head:a,pageChunks:o}}async function Ye(t,r={}){const l={pages:t.flatMap(u=>u.pages)};if(l.pages.length===0)return;const{head:n,pageChunks:a}=A(l),o=document.createElement("iframe");o.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(o);let s=!1;try{const u=o.contentDocument;u.open(),u.write(n);for(let c=0;c<a.length;c++)u.write(a[c]),c%_===_-1&&(r.onProgress?.(c+1,a.length),await ee());u.write("</body></html>"),u.close(),await ee(),r.onProgress?.(a.length,a.length),s=!0,o.contentWindow?.focus(),o.contentWindow?.print()}catch(u){r.onError?.(u instanceof Error?`批量打印失败: ${u.message}`:"批量打印失败")}finally{s?setTimeout(()=>o.remove(),6e4):o.remove()}}function Ee(t){const{head:r,pageChunks:l}=A(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]-->${r.replace(/^<!doctype html><html><head>/,"")}`}${l.join("")}</body></html>`,filename:"mach-report.doc"}}function Pe(t,r){let l=null,n=!1,a=null,o=null;function s(){l?.remove(),l=null}function u(m,p){const P=URL.createObjectURL(m),k=document.createElement("a");k.href=P,k.download=p,k.click(),setTimeout(()=>URL.revokeObjectURL(P),1e4)}async function c(){if(n)return;const m=t.value;if(!m||m.pages.length===0)return;n=!0,s();const{head:p,pageChunks:P}=A(m);l=document.createElement("iframe"),l.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(l);const k=l;try{const C=k.contentDocument;C.open(),C.write(p);for(let v=0;v<P.length;v++)if(C.write(P[v]),v%_===_-1&&await ee(),k!==l)return;C.write("</body></html>"),C.close(),await ee(),k.contentWindow?.focus(),k.contentWindow?.print()}catch{r.onError("调用打印失败,请改用导出 PDF")}finally{n=!1}}async function f(){if(a)return a;const m=t.value;if(!(!m||m.pages.length===0))return a=(async()=>{try{const p=await r.getPdfExporter()(m);u(new Blob([p],{type:"application/pdf"}),"mach-report.pdf")}catch(p){r.onError(p instanceof Error?`PDF 导出失败: ${p.message}`:"PDF 导出失败")}finally{a=null}})(),a}async function d(){if(o)return o;const m=t.value;if(!(!m||m.pages.length===0))return o=(async()=>{try{const{blobs:p}=await O.renderPlanToImages(m,{dpr:Math.min(2,typeof devicePixelRatio=="number"?devicePixelRatio:1)});p.forEach((P,k)=>{u(P,p.length>1?`mach-report-page-${k+1}.png`:"mach-report.png")})}catch(p){r.onError(p instanceof Error?`图片导出失败: ${p.message}`:"图片导出失败","export")}finally{o=null}})(),o}function g(){const m=t.value;if(!(!m||m.pages.length===0))try{const{html:p,filename:P}=Ee(m);u(new Blob([p],{type:"application/msword;charset=utf-8"}),P)}catch(p){r.onError(p instanceof Error?`Word 导出失败: ${p.message}`:"Word 导出失败","export")}}function y(m){const p=t.value;if(!p||p.pages.length===0)return;if(m==="pdf"){f();return}if(m==="png"||m==="image"){d();return}if(m==="word"||m==="doc"){g();return}const{head:P,pageChunks:k}=A(p),C=`${P}${k.join("")}</body></html>`;u(new Blob([C],{type:"text/html;charset=utf-8"}),`mach-report.${m==="html"?"html":m}`)}function b(){const m=t.value;if(!m||m.pages.length===0)return;const{head:p,pageChunks:P}=A(m),k=`${p}${P.join("")}</body></html>`,C=new Blob([k],{type:"text/html;charset=utf-8"}),v=URL.createObjectURL(C),x=window.open(v,"_blank");if(!x){r.onError("浏览器拦截了弹窗,请允许弹窗后重试"),URL.revokeObjectURL(v);return}setTimeout(()=>x.print(),400),setTimeout(()=>URL.revokeObjectURL(v),1e4)}return{print:c,exportAs:y,exportImages:d,exportWord:g,openPdfWindow:b,releasePrintFrame:s}}const ke="mrp-hit";function Je(t){t.querySelectorAll(`mark.${ke}`).forEach(l=>{const n=l.parentNode;if(n){for(;l.firstChild;)n.insertBefore(l.firstChild,l);l.remove(),n.normalize()}})}function Xe(t,r){const l=r.trim();if(!l)return 0;const n=l.toLowerCase(),a=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(u){const c=u.parentElement;return!c||c.closest("mark")||/^(SCRIPT|STYLE)$/.test(c.tagName)?NodeFilter.FILTER_REJECT:(u.nodeValue??"").toLowerCase().includes(n)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),o=[];for(let u=a.nextNode();u;u=a.nextNode())o.push(u);let s=0;for(const u of o){const c=u.nodeValue??"",f=c.toLowerCase(),d=u.parentElement;if(!d)continue;const g=document.createDocumentFragment();let y=0,b=f.indexOf(n);for(;b>=0;){b>y&&g.appendChild(document.createTextNode(c.slice(y,b)));const m=document.createElement("mark");m.className=ke,m.textContent=c.slice(b,b+l.length),g.appendChild(m),s++,y=b+l.length,b=f.indexOf(n,y)}y<c.length&&g.appendChild(document.createTextNode(c.slice(y))),d.replaceChild(g,u)}return s}function he(t,r){let l=0,n=t.toLowerCase().indexOf(r);for(;n>=0;)l++,n=t.toLowerCase().indexOf(r,n+r.length);return l}function Qe(t){const{plan:r,gotoPage:l,highlight:n,clearHighlights:a}=t,o=t.debounceMs??200,s=e.ref(!1),u=e.ref(""),c=e.ref(""),f=e.ref(0);let d=null;const g=e.computed(()=>{const v=u.value.trim().toLowerCase(),x=r.value;if(!v||!x)return[];const M=[];return x.pages.forEach((T,Z)=>{for(const D of T.components)if(D.grid){for(const z of D.grid.cells??[])for(const q of z??[])if(typeof q?.text=="string")for(let Y=0;Y<he(q.text,v);Y++)M.push(Z)}else if(D.kind==="text"&&typeof D.text=="string")for(let z=0;z<he(D.text,v);z++)M.push(Z)}),M}),y=e.computed(()=>g.value.length);function b(v){if(c.value=v,d&&clearTimeout(d),v.trim()===""){d=null,u.value="",f.value=0;return}d=setTimeout(()=>{d=null,u.value=c.value,f.value=0;const x=g.value[0];x!=null&&l(x+1)},o)}function m(v){const x=g.value.length;x!==0&&(f.value=(f.value+v+x)%x,l(g.value[f.value]+1))}function p(){s.value=!s.value}function P(v){const x=u.value.trim();x&&n(v,x)}function k(v){a(v)}function C(){c.value="",u.value="",f.value=0,d&&clearTimeout(d),d=null}return{visible:s,query:u,matchIndex:f,matchCount:y,toggle:p,onInput:b,onNav:m,apply:P,clear:k,reset:C}}function _e(t,r){const l=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}}),n=e.computed(()=>!l.value||!r.plan.value?0:Math.round(JSON.stringify(r.plan.value).length/1024)),a=e.computed(()=>!l.value||!r.plan.value?null:{pages:r.pageCount.value,window:`${r.windowRange.value.start}-${r.windowRange.value.end}`,zoom:`${Math.round(r.zoom.value*100)}%`,loadMs:`${r.loadMs.value}ms`,planKB:n.value});return{enabled:l,debugStats:a}}function et(t,r){const{thumbsRoot:l,visible:n,renderThumbCanvas:a}=r;let o=null;function s(f,d){if(!t.value||f.childElementCount>0)return;const g=a(d);g&&(g.style.width="100%",g.style.height="100%",g.style.display="block",f.appendChild(g))}return{schedule:()=>{!n.value||!t.value||!l.value||typeof IntersectionObserver>"u"||(o?.disconnect(),o=new IntersectionObserver(f=>{for(const d of f){if(!d.isIntersecting)continue;const g=d.target;s(g,Number(g.dataset.thumb??1)-1),o?.unobserve(g)}},{root:l.value,rootMargin:"200px"}),l.value.querySelectorAll("[data-thumb]").forEach(f=>{o.observe(f)}))},destroy:()=>{o?.disconnect(),o=null}}}function tt(){const t=e.shallowRef(0);return{loadMs:t,start(){return typeof performance<"u"?performance.now():0},end(r){t.value=r?Math.round(performance.now()-r):0}}}const ot={class:"mrp-toolbar"},nt={class:"mrp-title"},rt=["disabled"],at={class:"mrp-pageinfo"},lt=["disabled"],st={key:1,class:"mrp-search"},it=["placeholder","value"],ut={key:0,class:"mrp-search-count"},ct=["disabled"],dt=["disabled"],mt=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 r=t,l=e.ref(null);e.watch(()=>r.search.visible,a=>{a&&e.nextTick(()=>l.value?.focus())});function n(a,o,s){return a.replace("{cur}",String(o)).replace("{total}",String(s))}return(a,o)=>(e.openBlock(),e.createElementBlock("div",ot,[e.createElementVNode("span",nt,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=>a.$emit("goto",t.currentPage-1))},e.toDisplayString(t.messages.prevPage),9,rt),e.createElementVNode("span",at,e.toDisplayString(n(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=>a.$emit("goto",t.currentPage+1))},e.toDisplayString(t.messages.nextPage),9,lt)],64)):e.createCommentVNode("",!0),o[16]||(o[16]=e.createElementVNode("span",{class:"mrp-spacer"},null,-1)),t.search.visible?(e.openBlock(),e.createElementBlock("div",st,[e.createElementVNode("input",{ref_key:"searchInputRef",ref:l,class:"mrp-search-input",type:"text",placeholder:t.messages.searchPlaceholder,value:t.search.query,onInput:o[2]||(o[2]=s=>a.$emit("search-input",s.target.value))},null,40,it),t.search.query?(e.openBlock(),e.createElementBlock("span",ut,e.toDisplayString(n(t.messages.matchInfo,t.search.matchIndex+1,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=>a.$emit("search-nav",-1))},e.toDisplayString(t.messages.prevMatch),9,ct),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[4]||(o[4]=s=>a.$emit("search-nav",1))},e.toDisplayString(t.messages.nextMatch),9,dt)])):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=>a.$emit("search-toggle"))}," 🔍 ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.thumbsVisible}]),type:"button",onClick:o[6]||(o[6]=s=>a.$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=>a.$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=>a.$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=>a.$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=>a.$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=>a.$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=>a.$emit("export","png"))},e.toDisplayString(t.messages.exportImage),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:5,class:"mrp-nav",type:"button",onClick:o[13]||(o[13]=s=>a.$emit("export","word"))},e.toDisplayString(t.messages.exportWord),1)):e.createCommentVNode("",!0),t.showPrint?(e.openBlock(),e.createElementBlock("button",{key:6,class:"mrp-nav",type:"button",onClick:o[14]||(o[14]=s=>a.$emit("print"))},e.toDisplayString(t.messages.print),1)):e.createCommentVNode("",!0),t.showPdfWindow?(e.openBlock(),e.createElementBlock("button",{key:7,class:"mrp-nav",type:"button",onClick:o[15]||(o[15]=s=>a.$emit("pdf-window"))},e.toDisplayString(t.messages.pdfWindow),1)):e.createCommentVNode("",!0)]))}}),ce=(t,r)=>{const l=t.__vccOpts||t;for(const[n,a]of r)l[n]=a;return l},Ce=ce(mt,[["__scopeId","data-v-f3aa8dfd"]]),pt={class:"mrp-params"},ft={class:"mrp-params-title"},gt={class:"mrp-params-grid"},vt={class:"mrp-param-label"},ht={key:0,class:"mrp-param-star"},yt=["value","onChange"],bt={value:"",disabled:"",hidden:""},wt=["value"],Et=["type","placeholder","value","onInput"],Pt={class:"mrp-params-actions"},kt=e.defineComponent({__name:"ReportParamPanel",props:{defs:{},modelValue:{},messages:{},attempted:{type:Boolean}},emits:["update:modelValue","query","reset"],setup(t,{emit:r}){const l=t,n=r,a=e.ref({...l.modelValue});e.watch(()=>l.modelValue,c=>{a.value={...c}});const o=e.computed(()=>l.defs.map(c=>({def:c,label:c.label??c.field,value:a.value[c.field]??""})));function s(c,f){a.value={...a.value,[c]:f},n("update:modelValue",{...a.value})}function u(c){const f=l.defs.find(d=>d.field===c);return l.attempted&&f?.required===!0&&!(a.value[c]??"").trim()}return(c,f)=>(e.openBlock(),e.createElementBlock("div",pt,[e.createElementVNode("span",ft,e.toDisplayString(t.messages.paramsTitle),1),e.createElementVNode("div",gt,[(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":u(d.def.field)}])},[e.createElementVNode("span",vt,[e.createTextVNode(e.toDisplayString(d.label),1),d.def.required?(e.openBlock(),e.createElementBlock("i",ht,"*")):e.createCommentVNode("",!0)]),(d.def.type??"text")==="select"?(e.openBlock(),e.createElementBlock("select",{key:0,class:"mrp-param-input",value:d.value,onChange:g=>s(d.def.field,g.target.value),onKeydown:f[0]||(f[0]=e.withKeys(g=>c.$emit("query"),["enter"]))},[e.createElementVNode("option",bt,e.toDisplayString(d.def.placeholder??`请选择${d.label}`),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.def.options??[],g=>(e.openBlock(),e.createElementBlock("option",{key:g.value,value:g.value},e.toDisplayString(g.label),9,wt))),128))],40,yt)):(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:g=>s(d.def.field,g.target.value),onKeydown:f[1]||(f[1]=e.withKeys(g=>c.$emit("query"),["enter"]))},null,40,Et))],2))),128))]),e.createElementVNode("div",Pt,[e.createElementVNode("button",{class:"mrp-nav mrp-param-query",type:"button",onClick:f[2]||(f[2]=d=>c.$emit("query"))},e.toDisplayString(t.messages.query),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",onClick:f[3]||(f[3]=d=>c.$emit("reset"))},e.toDisplayString(t.messages.reset),1)])]))}}),xe=ce(kt,[["__scopeId","data-v-aafce92d"]]),Be={title:"报表预览",prevPage:"‹ 上一页",nextPage:"下一页 ›",pageInfo:"{cur} / {total}",fitWidth:"适宽",exportHtml:"导出 HTML",exportPdf:"导出 PDF",exportImage:"导出图片",exportWord:"导出 Word",print:"打印",pdfWindow:"PDF 窗口",loading:"报表渲染中…",empty:"暂无预览数据",errorPrefix:"",retry:"重试",searchPlaceholder:"搜索报表内容",matchInfo:"{cur}/{total}",prevMatch:"‹",nextMatch:"›",thumbnails:"缩略图",paramsTitle:"查询条件",query:"查 询",reset:"重 置",paramRequired:"请填写{label}"},$e={shellBg:"#525659",shellFg:"#e8e8e8",toolbarBg:"#323639",toolbarBorder:"#22252a",toolbarFg:"#e8e8e8",btnFg:"#cfcfcf",btnBorder:"#4a4d52",btnHoverBg:"#414549",btnHoverFg:"#ffffff",btnActiveBg:"#2d5fb8"};function Ct(t){return t}function xt(t){return t}const I={showExport:!0,showPrint:!0,showPdfWindow:!0,showParams:!0,gapPx:18,pdfFontUrl:"/simhei.ttf",logger:console},Bt={warn:()=>{},info:()=>{}};function Re(t,r){const l=r?t?.presets?.[r]:t?.defaultPreset?t?.presets?.[t.defaultPreset]:void 0,n={...t?.defaults,...l};return{showExport:n.showExport??I.showExport,showPrint:n.showPrint??I.showPrint,showPdfWindow:n.showPdfWindow??I.showPdfWindow,showParams:n.showParams??I.showParams,gapPx:n.gapPx??I.gapPx,pdfFontUrl:n.pdfFontUrl??I.pdfFontUrl,theme:{...$e,...n.theme},messages:{...Be,...n.messages},logger:n.logger??I.logger}}function Me(t){const r={};return t.shellBg!=null&&(r["--mrp-shell-bg"]=t.shellBg),t.shellFg!=null&&(r["--mrp-shell-fg"]=t.shellFg),t.toolbarBg!=null&&(r["--mrp-toolbar-bg"]=t.toolbarBg),t.toolbarBorder!=null&&(r["--mrp-toolbar-border"]=t.toolbarBorder),t.toolbarFg!=null&&(r["--mrp-toolbar-fg"]=t.toolbarFg),t.btnFg!=null&&(r["--mrp-btn-fg"]=t.btnFg),t.btnBorder!=null&&(r["--mrp-btn-border"]=t.btnBorder),t.btnHoverBg!=null&&(r["--mrp-btn-hover-bg"]=t.btnHoverBg),t.btnHoverFg!=null&&(r["--mrp-btn-hover-fg"]=t.btnHoverFg),t.btnActiveBg!=null&&(r["--mrp-btn-active-bg"]=t.btnActiveBg),r}function $t(t){const r=e.inject(V.MACH_REPORT_CONFIG_KEY,null),l=e.computed(()=>{const n=r?.value??null,a="defaults"in t&&"presets"in t?t:{defaults:t,presets:{}};return n?{defaults:{...n.defaults,...a.defaults},presets:{...n.presets,...a.presets},defaultPreset:a.defaultPreset??n.defaultPreset}:a});e.provide(V.MACH_REPORT_CONFIG_KEY,l)}function Se(){return e.inject(V.MACH_REPORT_CONFIG_KEY,e.computed(()=>null))}class G extends Error{constructor(r,l,n){super(l),this.name="MachReportError",this.code=r,this.cause=n}}function Te(t){return t instanceof G?{code:t.code,cause:t.cause}:{code:"render",cause:t}}const Rt={class:"mrp-main"},Mt={key:0,class:"mrp-state"},St={key:1,class:"mrp-state mrp-error"},Tt={key:2,class:"mrp-state"},Nt=["data-page"],Vt=["onClick"],Dt=["data-thumb"],Ft={class:"mrp-thumb-no"},It={class:"mrp-overlay"},zt={key:1,class:"mrp-debug","aria-hidden":"true"},Q=96/25.4,ye="mach-report:ui",Lt=e.defineComponent({__name:"ReportPreview",props:{tempId:{type:[String,Array],default:null},furnitureTempId:{type:String,default:""},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"],setup(t,{expose:r,emit:l}){e.useCssVars(i=>({db73374c:m.value+"px"}));const n=t,a=l,o=e.shallowRef(null),s=e.ref(!1),u=e.ref(""),c=e.ref(1),f=e.ref(null),d=e.ref(null),g=e.ref(null),y=e.ref(!1),b=tt(),m=e.computed(()=>Math.max(0,q.value)),p=e.inject(V.MACH_REPORT_FETCHER_KEY,null),k=e.inject(V.MACH_REPORT_PDF_EXPORTER_KEY,null)??V.createDefaultPdfExporter({fontUrl:"/simhei.ttf"}),C=e.computed(()=>V.normalizeTempIds(n.tempId)),v=e.computed(()=>o.value?.pages.length??0),x=Se(),M=e.computed(()=>Re(x.value,n.preset)),T=e.computed(()=>({...M.value.messages,...n.messages})),Z=e.computed(()=>n.showExport??M.value.showExport),D=e.computed(()=>n.showPrint??M.value.showPrint),z=e.computed(()=>n.showPdfWindow??M.value.showPdfWindow),q=e.computed(()=>n.gapPx??M.value.gapPx),Y=e.computed(()=>n.showParams??M.value.showParams),L=e.computed(()=>n.paramDefs??[]),F=e.ref({}),te=e.ref(!1);function oe(i){const h={};for(const w of i)h[w.field]=n.params[w.field]??w.defaultValue??"";F.value=h,te.value=!1}oe(L.value),e.watch(L,i=>oe(i));const Ve=e.computed(()=>({...n.params,...Object.fromEntries(Object.entries(F.value).filter(([,i])=>i!==""))}));function De(){return L.value.filter(i=>i.required===!0&&!(F.value[i.field]??"").trim())}function Fe(){te.value=!0;const i=De();if(i.length>0){const h=i[0].label??i[0].field,w=T.value.paramRequired.replace("{label}",h);u.value=w,a("error",w,{code:"param"});return}N()}function Ie(){oe(L.value)}const ze=e.computed(()=>({height:n.height,...Me(M.value.theme)})),{zoom:R,zoomMode:W,applyFitZoom:de,setZoom:ne}=we(()=>({viewport:d.value,pageWidthPx:(o.value?.pages[0]?.pageWidthMm??210)*Q})),Le=be(o,R,{pxPerMm:Q,gapPx:q.value}),{contentSize:re,windowRange:U,visiblePages:We,makeScrollHandler:He,refreshViewport:me}=Le,Oe=He(c,v);function ae(i){W.value="raw",R.value=Math.min(3,Math.max(.3,i))}function le(){o.value=null,c.value=1,B.reset()}let J=0;async function N(){const i=++J,h=n.fetcher??p;if(C.value.length===0){u.value="缺少报表模板 ID",le(),a("error",u.value,{code:"param"});return}if(!h){u.value="未提供渲染数据源 fetcher",le(),a("error",u.value,{code:"config"});return}s.value=!0,u.value="",le();const w=b.start();try{const E=await h({tempIds:C.value,furnitureTempId:n.furnitureTempId||void 0,params:{...Ve.value}});if(i!==J)return;const $=O.validateRenderPlan(E);if(!$.ok){const j=$.errors.slice(0,3).map(K=>`${K.path}: ${K.message}`).join("; ");throw new G("validate",`渲染计划校验失败(${$.errors.length} 处): ${j}`)}$.warnings.length>0&&M.value.logger.warn("[mach-report] 渲染计划告警:",$.warnings),o.value=E,c.value=1,b.end(w),d.value&&(d.value.scrollTop=0),W.value==="fit"&&de(),a("loaded",E.pages.length)}catch(E){if(i!==J)return;const $=E instanceof G?E:new G("fetch",E instanceof Error?E.message:"预览加载失败",E);u.value=$.message,a("error",$.message,Te($))}finally{i===J&&(s.value=!1)}}function S(i){if(v.value<=0)return;const h=Math.max(1,Math.min(v.value,i));c.value=h;const w=d.value;if(!w)return;let E=0;for(let $=0;$<h-1;$++)E+=(o.value?.pages[$]?.pageHeightMm??0)*Q+m.value;w.scrollTop=E*R.value}const{print:se,exportAs:ie,openPdfWindow:ue,releasePrintFrame:Ae}=Pe(o,{getPdfExporter:()=>k,onError:(i,h)=>a("error",i,{code:h??"print"})});function pe(i,h={}){F.value={...F.value,...i},h.reload!==!1&&N()}const qe={reload:N,print:se,exportAs:ie,openPdfWindow:ue,gotoPage:S,setParams:pe};e.provide(V.MACH_REPORT_CONTROLLER_KEY,qe);const B=Qe({plan:o,gotoPage:S,highlight:Xe,clearHighlights:Je});function Ue(i){i.ctrlKey&&(i.preventDefault(),ae(R.value*(i.deltaY<0?1.1:1/1.1)))}function je(i){if((i.ctrlKey||i.metaKey)&&i.key.toLowerCase()==="f"){i.preventDefault(),B.visible.value||B.toggle();return}switch(i.key){case"PageDown":i.preventDefault(),S(c.value+1);break;case"PageUp":i.preventDefault(),S(c.value-1);break;case"Home":i.preventDefault(),S(1);break;case"End":i.preventDefault(),S(v.value);break;case"+":case"=":i.preventDefault(),ae(R.value*1.1);break;case"-":i.preventDefault(),ae(R.value/1.1);break}}function Ke(){try{localStorage.setItem(ye,JSON.stringify({zoomMode:W.value==="fit"?"fit":Math.round(R.value*100)}))}catch{}}e.watch([W,R],Ke),e.watchEffect(()=>{const i=o.value;if(!i)return;const h=f.value;if(!h)return;h.querySelectorAll(".mrp-page-holder").forEach(E=>{const $=Number(E.dataset.page??0)-1,j=i.pages[$];if(!j||E.childElementCount>0){if(E.firstElementChild){const ve=E.firstElementChild;B.clear(ve),B.apply(ve)}return}E.style.width=`${j.pageWidthMm*Q}px`;const K=O.renderPage(j,96,{},document);B.apply(K),E.appendChild(K)})},{flush:"post"}),e.watch(()=>B.query.value,i=>{i||f.value?.querySelectorAll(".mrp-page-holder").forEach(h=>{B.clear(h)})});const fe=et(o,{thumbsRoot:g,visible:y,renderThumbCanvas:i=>{try{const{canvases:h}=O.renderPlanToCanvas(o.value,{start:i,end:i,dpr:.2});return h[0]??null}catch{return null}}});e.watchEffect(()=>{fe.schedule()},{flush:"post"});const Ge=e.computed(()=>n.debug),{debugStats:H}=_e(Ge,{plan:o,pageCount:v,windowRange:U,zoom:R,loadMs:b.loadMs});function ge(){me(d.value),W.value==="fit"&&de()}function Ze(){try{const i=JSON.parse(localStorage.getItem(ye)??"{}");i.zoomMode==="fit"?ne("fit"):typeof i.zoomMode=="number"&&ne(i.zoomMode)}catch{}}return e.onMounted(()=>{window.addEventListener("resize",ge),me(d.value),Ze(),n.autoLoad&&N()}),e.onUnmounted(()=>{window.removeEventListener("resize",ge),fe.destroy(),B.reset(),Ae()}),e.watch(()=>[n.tempId,n.furnitureTempId,JSON.stringify(n.params)],()=>{n.autoLoad&&N()}),e.watch(()=>n.fetcher??p,()=>{n.autoLoad&&N()}),r({reload:N,print:se,exportAs:ie,openPdfWindow:ue,gotoPage:S,setParams:pe}),(i,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mach-report-preview",style:e.normalizeStyle(ze.value)},[Y.value&&L.value.length>0?(e.openBlock(),e.createBlock(xe,{key:0,defs:L.value,modelValue:F.value,"onUpdate:modelValue":h[0]||(h[0]=w=>F.value=w),messages:T.value,attempted:te.value,onQuery:Fe,onReset:Ie},null,8,["defs","modelValue","messages","attempted"])):e.createCommentVNode("",!0),e.createVNode(Ce,{"page-count":v.value,"current-page":c.value,"zoom-mode":e.unref(W),zoom:e.unref(R),"show-export":Z.value,"show-print":D.value,"show-pdf-window":z.value,messages:T.value,search:{visible:e.unref(B).visible.value,query:e.unref(B).query.value,matchIndex:e.unref(B).matchIndex.value,matchCount:e.unref(B).matchCount.value},"thumbs-visible":y.value,onGoto:S,onZoom:e.unref(ne),onExport:h[1]||(h[1]=w=>e.unref(ie)(w)),onPrint:e.unref(se),onPdfWindow:e.unref(ue),onSearchInput:e.unref(B).onInput,onSearchNav:e.unref(B).onNav,onSearchToggle:e.unref(B).toggle,onThumbsToggle:h[2]||(h[2]=w=>y.value=!y.value)},null,8,["page-count","current-page","zoom-mode","zoom","show-export","show-print","show-pdf-window","messages","search","thumbs-visible","onZoom","onPrint","onPdfWindow","onSearchInput","onSearchNav","onSearchToggle"]),e.createElementVNode("div",Rt,[e.createElementVNode("div",{ref_key:"viewportRef",ref:d,class:"mrp-body",tabindex:"0",onWheel:Ue,onKeydown:je,onScrollPassive:h[3]||(h[3]=w=>e.unref(Oe)(w.target))},[s.value?(e.openBlock(),e.createElementBlock("div",Mt,e.toDisplayString(T.value.loading),1)):u.value?(e.openBlock(),e.createElementBlock("div",St,[e.createTextVNode(e.toDisplayString(u.value)+" ",1),e.createElementVNode("button",{class:"mrp-retry",type:"button",onClick:N},e.toDisplayString(T.value.retry),1)])):!o.value||v.value===0?(e.openBlock(),e.createElementBlock("div",Tt,e.toDisplayString(T.value.empty),1)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mrp-scale",style:e.normalizeStyle({width:`${e.unref(re).w*e.unref(R)}px`,height:`${e.unref(re).h*e.unref(R)}px`})},[e.createElementVNode("div",{ref_key:"containerRef",ref:f,class:"mrp-scale-inner",style:e.normalizeStyle({transform:`scale(${e.unref(R)})`,transformOrigin:"top left",width:`${e.unref(re).w}px`})},[e.unref(U).padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-spacer-top",style:e.normalizeStyle({height:`${e.unref(U).padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(We),w=>(e.openBlock(),e.createElementBlock("div",{key:w.index,class:"mrp-page-holder","data-page":w.index+1},null,8,Nt))),128)),e.unref(U).padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-spacer-bottom",style:e.normalizeStyle({height:`${e.unref(U).padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)],4))],544),y.value&&v.value>0?(e.openBlock(),e.createElementBlock("aside",{key:0,ref_key:"thumbsRef",ref:g,class:"mrp-thumbs"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value?.pages??[],(w,E)=>(e.openBlock(),e.createElementBlock("div",{key:E,class:e.normalizeClass(["mrp-thumb",{"mrp-thumb-active":E+1===c.value}]),onClick:$=>S(E+1)},[e.createElementVNode("div",{class:"mrp-thumb-box","data-thumb":E+1,style:e.normalizeStyle({height:`${Math.round(w.pageHeightMm/w.pageWidthMm*116)}px`})},null,12,Dt),e.createElementVNode("span",Ft,e.toDisplayString(E+1),1)],10,Vt))),128))],512)):e.createCommentVNode("",!0)]),e.createElementVNode("div",It,[e.renderSlot(i.$slots,"default",{},void 0,!0)]),e.unref(H)?(e.openBlock(),e.createElementBlock("div",zt,[h[4]||(h[4]=e.createElementVNode("div",null,"mach-report debug",-1)),e.createElementVNode("div",null,"pages: "+e.toDisplayString(e.unref(H).pages)+" | window: ["+e.toDisplayString(e.unref(H).window)+"]",1),e.createElementVNode("div",null,"zoom: "+e.toDisplayString(e.unref(H).zoom)+" | load: "+e.toDisplayString(e.unref(H).loadMs),1),e.createElementVNode("div",null,"plan: "+e.toDisplayString(e.unref(H).planKB)+"KB",1)])):e.createCommentVNode("",!0)],4))}}),Ne=ce(Lt,[["__scopeId","data-v-4648d204"]]),Wt=Object.freeze(Object.defineProperty({__proto__:null,default:Ne},Symbol.toStringTag,{value:"Module"}));exports.DEFAULT_MESSAGES=Be;exports.DEFAULT_THEME=$e;exports.MachReportError=G;exports.ReportParamPanel=xe;exports.ReportPreview=Ne;exports.ReportPreview$1=Wt;exports.ReportToolbar=Ce;exports.SILENT_LOGGER=Bt;exports.buildPrintDocument=A;exports.buildWordHtml=Ee;exports.defineMachReportConfig=Ct;exports.defineMachReportPreset=xt;exports.printPlans=Ye;exports.provideMachReportConfig=$t;exports.resolveConfig=Re;exports.themeToCssVars=Me;exports.toErrorDetail=Te;exports.useMachReportConfig=Se;exports.usePageWindow=be;exports.usePrintExport=Pe;exports.useZoom=we;
@@ -1,92 +0,0 @@
1
- import { defineAsyncComponent as d, computed as p } from "vue";
2
- function g(r) {
3
- return r == null ? [] : Array.isArray(r) ? r.map(String).filter((e) => e !== "") : String(r).split(",").map((e) => e.trim()).filter((e) => e !== "");
4
- }
5
- function _(r) {
6
- return g(r).join(",");
7
- }
8
- class u extends Error {
9
- constructor(e) {
10
- super(e), this.name = "PlanLoadError";
11
- }
12
- }
13
- function E(r = {}) {
14
- const { baseUrl: e = "", headers: o, credentials: t, timeoutMs: a = 3e4 } = r;
15
- return async ({ url: s, method: c, params: n }) => {
16
- const h = n && Object.keys(n).length > 0 ? `?${new URLSearchParams(n)}` : "", i = new AbortController(), l = setTimeout(() => i.abort(), a);
17
- let m;
18
- try {
19
- m = await fetch(`${e}${s}${h}`, {
20
- method: c.toUpperCase(),
21
- headers: { Accept: "application/json", ...o },
22
- credentials: t,
23
- signal: i.signal
24
- });
25
- } catch (f) {
26
- throw f instanceof DOMException && f.name === "AbortError" ? new u(`请求超时(${a}ms): ${s}`) : new u(`请求失败(${s}): ${f instanceof Error ? f.message : String(f)}`);
27
- } finally {
28
- clearTimeout(l);
29
- }
30
- if (!m.ok)
31
- throw new u(`HTTP ${m.status} ${s}`);
32
- return m.json();
33
- };
34
- }
35
- function P(r) {
36
- const { request: e, baseUrl: o = "" } = r;
37
- return async ({ tempIds: t, furnitureTempId: a, params: s }) => {
38
- if (t.length === 0) throw new u("缺少报表模板 ID");
39
- const c = { tempId: t.join(",") };
40
- a && (c.furnitureTempId = a);
41
- for (const [i, l] of Object.entries(s || {}))
42
- i && l != null && l !== "" && (c[i] = String(l));
43
- const n = await e({
44
- url: `${o}/report/codePrintReport/gridPlan`,
45
- method: "get",
46
- params: c
47
- });
48
- if (n && n.code != null && n.code !== 200)
49
- throw new u(String(n.message || "预览加载失败"));
50
- const h = n?.data?.pages;
51
- return {
52
- schemaVersion: "jh4j-compatible",
53
- pages: Array.isArray(h) ? h : []
54
- };
55
- };
56
- }
57
- function w(r = { fontUrl: "/simhei.ttf" }) {
58
- let e = null;
59
- return async (o) => {
60
- e || (e = await import("@agile-team/mach-report/pdf"));
61
- const t = r.fontUrl ? await e.loadFontWithCache(r.fontUrl) : null, { bytes: a } = await e.renderPlanToPdf(o, t ? { customFontBytes: t } : {});
62
- return a;
63
- };
64
- }
65
- const R = "mach-report/fetcher", b = "mach-report/pdf-exporter", y = "mach-report/config", A = "mach-report/controller", U = d(() => import("./ReportPreview-Do-x4E3Z.js").then((r) => r.m)), C = {
66
- install(r, e = {}) {
67
- const o = e.fetcher ?? P({
68
- request: e.request ?? E({ baseUrl: e.baseUrl }),
69
- baseUrl: e.baseUrl
70
- });
71
- r.provide(R, o);
72
- const t = e.pdfFontUrl ?? e.config?.defaults?.pdfFontUrl ?? "/simhei.ttf";
73
- r.provide(
74
- b,
75
- e.pdfExporter ?? w({ fontUrl: t })
76
- ), r.provide(y, p(() => e.config ?? null)), e.globalComponent !== !1 && r.component("MachReportPreview", U);
77
- }
78
- };
79
- export {
80
- A as M,
81
- u as P,
82
- y as a,
83
- R as b,
84
- b as c,
85
- U as d,
86
- w as e,
87
- E as f,
88
- P as g,
89
- _ as j,
90
- C as m,
91
- g as n
92
- };
@@ -1 +0,0 @@
1
- "use strict";var O=Object.create;var E=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var U=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of b(e))!F.call(r,n)&&n!==t&&E(r,n,{get:()=>e[n],enumerable:!(o=A(e,n))||o.enumerable});return r};var M=(r,e,t)=>(t=r!=null?O(y(r)):{},U(e||!r||!r.__esModule?E(t,"default",{value:r,enumerable:!0}):t,r));const R=require("vue");function m(r){return r==null?[]:Array.isArray(r)?r.map(String).filter(e=>e!==""):String(r).split(",").map(e=>e.trim()).filter(e=>e!=="")}function j(r){return m(r).join(",")}class s extends Error{constructor(e){super(e),this.name="PlanLoadError"}}function P(r={}){const{baseUrl:e="",headers:t,credentials:o,timeoutMs:n=3e4}=r;return async({url:c,method:i,params:a})=>{const h=a&&Object.keys(a).length>0?`?${new URLSearchParams(a)}`:"",l=new AbortController,f=setTimeout(()=>l.abort(),n);let d;try{d=await fetch(`${e}${c}${h}`,{method:i.toUpperCase(),headers:{Accept:"application/json",...t},credentials:o,signal:l.signal})}catch(u){throw u instanceof DOMException&&u.name==="AbortError"?new s(`请求超时(${n}ms): ${c}`):new s(`请求失败(${c}): ${u instanceof Error?u.message:String(u)}`)}finally{clearTimeout(f)}if(!d.ok)throw new s(`HTTP ${d.status} ${c}`);return d.json()}}function p(r){const{request:e,baseUrl:t=""}=r;return async({tempIds:o,furnitureTempId:n,params:c})=>{if(o.length===0)throw new s("缺少报表模板 ID");const i={tempId:o.join(",")};n&&(i.furnitureTempId=n);for(const[l,f]of Object.entries(c||{}))l&&f!=null&&f!==""&&(i[l]=String(f));const a=await e({url:`${t}/report/codePrintReport/gridPlan`,method:"get",params:i});if(a&&a.code!=null&&a.code!==200)throw new s(String(a.message||"预览加载失败"));const h=a?.data?.pages;return{schemaVersion:"jh4j-compatible",pages:Array.isArray(h)?h:[]}}}function _(r={fontUrl:"/simhei.ttf"}){let e=null;return async t=>{e||(e=await import("@agile-team/mach-report/pdf"));const o=r.fontUrl?await e.loadFontWithCache(r.fontUrl):null,{bytes:n}=await e.renderPlanToPdf(t,o?{customFontBytes:o}:{});return n}}const T="mach-report/fetcher",g="mach-report/pdf-exporter",w="mach-report/config",$="mach-report/controller",C=R.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-kNbuSmbL.cjs")).then(r=>r.ReportPreview$1)),H={install(r,e={}){const t=e.fetcher??p({request:e.request??P({baseUrl:e.baseUrl}),baseUrl:e.baseUrl});r.provide(T,t);const o=e.pdfFontUrl??e.config?.defaults?.pdfFontUrl??"/simhei.ttf";r.provide(g,e.pdfExporter??_({fontUrl:o})),r.provide(w,R.computed(()=>e.config??null)),e.globalComponent!==!1&&r.component("MachReportPreview",C)}};exports.MACH_REPORT_CONFIG_KEY=w;exports.MACH_REPORT_CONTROLLER_KEY=$;exports.MACH_REPORT_FETCHER_KEY=T;exports.MACH_REPORT_PDF_EXPORTER_KEY=g;exports.MachReportPreview=C;exports.PlanLoadError=s;exports.createDefaultPdfExporter=_;exports.createFetchRequest=P;exports.createJh4jGridPlanFetcher=p;exports.joinTempIds=j;exports.machReportPlugin=H;exports.normalizeTempIds=m;