@worm-vue3-print/canvas 1.2.1 → 1.2.2

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.
Files changed (72) hide show
  1. package/dist/canvas.css +1 -1
  2. package/dist/components/CanvasArea.vue.d.ts +10 -7
  3. package/dist/components/CanvasPaper.vue.d.ts +3 -3
  4. package/dist/components/ExpressionEditor.vue.d.ts +1 -1
  5. package/dist/components/FieldTreePanel.vue.d.ts +1 -1
  6. package/dist/components/LayerPanel.vue.d.ts +1 -1
  7. package/dist/components/LeftPanel.vue.d.ts +1 -1
  8. package/dist/components/PrintDesigner.vue.d.ts +1 -1
  9. package/dist/components/PropertyPanel.vue.d.ts +1 -1
  10. package/dist/components/WatermarkConfig.vue.d.ts +1 -1
  11. package/dist/components/elements/BarcodeElement.vue.d.ts +1 -1
  12. package/dist/components/elements/BaseElement.vue.d.ts +3 -3
  13. package/dist/components/elements/HtmlElement.vue.d.ts +1 -1
  14. package/dist/components/elements/ImageElement.vue.d.ts +1 -1
  15. package/dist/components/elements/LineElement.vue.d.ts +1 -1
  16. package/dist/components/elements/LongTextElement.vue.d.ts +1 -1
  17. package/dist/components/elements/PageNumberElement.vue.d.ts +1 -1
  18. package/dist/components/elements/QrcodeElement.vue.d.ts +1 -1
  19. package/dist/components/elements/ShapeElement.vue.d.ts +1 -1
  20. package/dist/components/elements/TableContextMenu.vue.d.ts +1 -1
  21. package/dist/components/elements/TableElement.vue.d.ts +1 -1
  22. package/dist/components/elements/TextElement.vue.d.ts +1 -1
  23. package/dist/components/property/AdvancedGroup.vue.d.ts +1 -1
  24. package/dist/components/property/AppearanceGroup.vue.d.ts +1 -1
  25. package/dist/components/property/BindingControl.vue.d.ts +1 -1
  26. package/dist/components/property/BorderBgGroup.vue.d.ts +1 -1
  27. package/dist/components/property/CodeGroup.vue.d.ts +1 -1
  28. package/dist/components/property/PaginationGroup.vue.d.ts +1 -1
  29. package/dist/components/property/PositionSizeGroup.vue.d.ts +1 -1
  30. package/dist/components/property/TableCellGroup.vue.d.ts +1 -1
  31. package/dist/components/property/TableRowGroup.vue.d.ts +1 -1
  32. package/dist/components/property/TableSettingsGroup.vue.d.ts +1 -1
  33. package/dist/composables/useAdsorb.d.ts +3 -7
  34. package/dist/composables/useAdsorbManager.d.ts +2 -2
  35. package/dist/composables/useClipboard.d.ts +15 -15
  36. package/dist/composables/useDesignerState.d.ts +44 -44
  37. package/dist/composables/useDrag.d.ts +1 -1
  38. package/dist/composables/useGuides.d.ts +1 -1
  39. package/dist/composables/useHistory.d.ts +1 -1
  40. package/dist/composables/useHostAdapter.d.ts +1 -1
  41. package/dist/composables/useSelection.d.ts +1 -1
  42. package/dist/composables/useTableSelection.d.ts +1 -1
  43. package/dist/index.cjs +22 -8
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.ts +3 -4
  46. package/dist/index.js +3400 -4574
  47. package/dist/index.js.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/composables/useAlign.d.ts +0 -5
  50. package/dist/composables/useBindingDisplay.d.ts +0 -11
  51. package/dist/composables/useGroup.d.ts +0 -7
  52. package/dist/composables/useKeyboard.d.ts +0 -22
  53. package/dist/composables/useResize.d.ts +0 -26
  54. package/dist/render/browser-code-renderer.d.ts +0 -3
  55. package/dist/render/browser-pagination.d.ts +0 -17
  56. package/dist/types.d.ts +0 -287
  57. package/dist/utils/binding-registry.d.ts +0 -8
  58. package/dist/utils/binding.d.ts +0 -16
  59. package/dist/utils/default-config.d.ts +0 -13
  60. package/dist/utils/demo-data.d.ts +0 -2
  61. package/dist/utils/element-factory.d.ts +0 -4
  62. package/dist/utils/engine.d.ts +0 -2
  63. package/dist/utils/expression-eval.d.ts +0 -30
  64. package/dist/utils/field-groups.d.ts +0 -21
  65. package/dist/utils/migrate.d.ts +0 -2
  66. package/dist/utils/preset-colors.d.ts +0 -2
  67. package/dist/utils/property-search.d.ts +0 -18
  68. package/dist/utils/ruler.d.ts +0 -29
  69. package/dist/utils/scale.d.ts +0 -15
  70. package/dist/utils/table-matrix.d.ts +0 -69
  71. package/dist/utils/units.d.ts +0 -6
  72. package/dist/utils/zone-layout.d.ts +0 -27
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),ue=require("@worm-vue3-print/core"),it=require("jsbarcode"),rt=require("qrcode"),oo=require("dompurify");function no(){let t=0;return function(){return t+=1,`cell-${Date.now().toString(36)}-${t}`}}function lo(){let t=0;return function(){return t+=1,`row-${Date.now().toString(36)}-${t}`}}const ao=no(),io=lo(),Re={width:.75,style:"solid",color:"#333333"};function st(t){return JSON.parse(JSON.stringify(t))}function dt(t){return{id:ao(),borders:{top:{...Re},right:{...Re},bottom:{...Re},left:{...Re}},...t}}function ro(){const t=[50,50,50],a=(n,l)=>({id:io(),type:n,height:8,...l!==void 0?{repeatOnPage:l}:{},cells:t.map(()=>dt())}),o=a("header",!0);return o.cells.forEach((n,l)=>{n.formatter=`列${l+1}`,n.align="center",n.fontWeight="bold"}),{rows:[o,a("data"),a("subtotal"),a("summary")],colWidths:t}}function ct(t,a,o){if(!t[a].cells[o].merged)return{r:a,c:o};for(let n=a;n>=0;n--)for(let l=o;l>=0;l--){const r=t[n].cells[l];if(r.merged)continue;const i=r.rowspan??1,s=r.colspan??1;if(n+i-1>=a&&l+s-1>=o)return{r:n,c:l}}return{r:a,c:o}}function Ce(t,a,o){const n=ct(t,a,o),l=t[n.r].cells[n.c];return{r1:n.r,c1:n.c,r2:n.r+(l.rowspan??1)-1,c2:n.c+(l.colspan??1)-1}}function xt(t,a,o){let n={r1:Math.min(a.r,o.r),c1:Math.min(a.c,o.c),r2:Math.max(a.r,o.r),c2:Math.max(a.c,o.c)};for(;;){let l=!1;for(let r=n.r1;r<=n.r2;r++)for(let i=n.c1;i<=n.c2;i++){const s=Ce(t,r,i),c={r1:Math.min(n.r1,s.r1),c1:Math.min(n.c1,s.c1),r2:Math.max(n.r2,s.r2),c2:Math.max(n.c2,s.c2)};(c.r1!==n.r1||c.c1!==n.c1||c.r2!==n.r2||c.c2!==n.c2)&&(n=c,l=!0)}if(!l)return n}}function Bt(t,a){if((a.r2-a.r1+1)*(a.c2-a.c1+1)<2)return"至少选择 2 个单元格";const n=new Set;for(let r=a.r1;r<=a.r2;r++)n.add(t[r].type);if(n.size>1)return"合并区域不能跨越不同类型的行";const l=xt(t,{r:a.r1,c:a.c1},{r:a.r2,c:a.c2});return l.r1!==a.r1||l.c1!==a.c1||l.r2!==a.r2||l.c2!==a.c2?"选区与已有合并区域部分重叠":null}function Dt(t,a){const o=t[a.r1].cells[a.c1],n=[];for(let l=a.r1;l<=a.r2;l++)for(let r=a.c1;r<=a.c2;r++){const i=t[l].cells[r];i.formatter&&n.push(i.formatter),!(l===a.r1&&r===a.c1)&&(i.merged=!0,i.rowspan=1,i.colspan=1,i.formatter="")}o.rowspan=a.r2-a.r1+1,o.colspan=a.c2-a.c1+1,o.formatter=n.join(" ")}function Tt(t,a){for(let o=a.r1;o<=a.r2;o++)for(let n=a.c1;n<=a.c2;n++){const l=t[o].cells[n];if(!l.merged&&((l.rowspan??1)>1||(l.colspan??1)>1)){const r=Ce(t,o,n),i=l;for(let s=r.r1;s<=r.r2;s++)for(let c=r.c1;c<=r.c2;c++){const d=t[s].cells[c];d.merged=!1,d.rowspan=1,d.colspan=1,so(i,d)}l.rowspan=1,l.colspan=1}}}function so(t,a){t!==a&&(a.align=t.align,a.valign=t.valign,a.fontSize=t.fontSize,a.fontWeight=t.fontWeight,a.color=t.color,a.backgroundColor=t.backgroundColor,a.borders=t.borders?st(t.borders):void 0,a.padding=t.padding,a.wordWrap=t.wordWrap)}function gt(t,a,o){const n=o==="above"?a:a+1,l=t[a],r=l.cells.length,i=l.type==="data"?"header":l.type,s={id:`row-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,type:i,height:l.height,cells:Array.from({length:r},()=>dt())};for(let c=0;c<r;c++)if(n>0&&n<t.length){const d=Ce(t,n-1,c);if(d.r1<n&&d.r2>=n){const p=t[d.r1].cells[d.c1];p.rowspan=(p.rowspan??1)+1,s.cells[c].merged=!0}}t.splice(n,0,s)}function co(t,a){if(t.length<=1)return"不能删除最后一行";const o=t[a],n=o.cells.length;for(let l=0;l<n;l++){const r=o.cells[l];if(!r.merged&&(r.rowspan??1)>1){const i=t[a+1].cells[l];Object.assign(i,st(r),{id:i.id}),i.rowspan=(r.rowspan??1)-1,i.merged=!1}else if(r.merged){const i=Ce(t,a,l);if(i.r1<a&&i.c1===l){const s=t[i.r1].cells[i.c1];s.rowspan=(s.rowspan??1)-1}}}return t.splice(a,1),null}function ht(t,a,o,n){const l=n==="left"?o:o+1;a.splice(l,0,a[o]);for(const r of t){const i=dt();if(l>0&&l<r.cells.length){const s=t.indexOf(r),c=Ce(t,s,l-1);if(c.c1<l&&c.c2>=l){const d=t[c.r1].cells[c.c1];s===c.r1&&(d.colspan=(d.colspan??1)+1),i.merged=!0}}r.cells.splice(l,0,i)}}function uo(t,a,o){if(a.length<=1)return"不能删除最后一列";for(let n=0;n<t.length;n++){const l=t[n].cells[o];if(!l.merged&&(l.colspan??1)>1){const r=t[n].cells[o+1];Object.assign(r,st(l),{id:r.id}),r.colspan=(l.colspan??1)-1,r.merged=!1}else if(l.merged){const r=Ce(t,n,o);if(r.c1<o&&r.r1===n){const i=t[r.r1].cells[r.c1];i.colspan=(i.colspan??1)-1}}}for(const n of t)n.cells.splice(o,1);return a.splice(o,1),null}function ot(t,a,o){if(o==="data"){const n=t.findIndex((l,r)=>l.type==="data"&&r!==a);if(n>=0)return`数据行已存在(第 ${n+1} 行),全表最多一行`}if(o==="header"){for(let n=0;n<a;n++)if(t[n].type!=="header")return"标题行必须从表格顶部连续设置"}if(o==="subtotal"||o==="summary"){const n=t.findIndex(l=>l.type==="data");if(n<0)return"请先设置数据行,小计/汇总行必须位于数据行之后";if(a<n)return"小计/汇总行必须位于数据行之后"}if(o==="subtotal"&&t.slice(0,a).some(n=>n.type==="summary"))return"小计行必须位于汇总行之前";if(o==="summary"&&t.slice(a+1).some(n=>n.type==="subtotal"))return"汇总行必须位于小计行之后";if(t[a].type==="header"&&o!=="header"){for(let n=a+1;n<t.length;n++)if(t[n].type==="header")return"取消该标题行会导致标题行不连续,请先调整后续标题行"}return t[a].type=o,o!=="header"&&delete t[a].repeatOnPage,null}function mo(t,a,o,n){for(let l=a.r1;l<=a.r2;l++)for(let r=a.c1;r<=a.c2;r++){const i=t[l].cells[r];if(i.merged)continue;if(o==="none"){delete i.borders;continue}const s=Ce(t,l,r),c=s.r1===a.r1,d=s.r2===a.r2,p=s.c1===a.c1,v=s.c2===a.c2,w={...i.borders??{}};o==="all"?(w.top={...n},w.bottom={...n},w.left={...n},w.right={...n}):o==="outer"?(c&&(w.top={...n}),d&&(w.bottom={...n}),p&&(w.left={...n}),v&&(w.right={...n})):o==="inner"&&(c||(w.top={...n}),d||(w.bottom={...n}),p||(w.left={...n}),v||(w.right={...n})),i.borders=w}}const po="1px dashed rgba(0,0,0,0.18)";function He(t,a={}){return t&&t.style!=="none"?`${t.width}pt ${t.style} ${t.color}`:a.designMode&&a.showGhostBorder!==!1?po:"none"}function qe(t){const a=(t.tableColWidths??[]).reduce((n,l)=>n+l,0),o=(t.tableRows??[]).reduce((n,l)=>n+l.height,0);t.width=Math.round(a*100)/100,t.height=Math.round(o*100)/100}const bt=5;function fo(t,a,o,n){const l=t.reduce((s,c,d)=>d===a?s:s+c,0),r=n===1/0?1/0:Math.max(bt,n-l),i=Math.round(o*10)/10;return Math.min(Math.max(i,bt),r)}function Me(){return`el-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function vo(t){const a={left:7,top:17.6,width:42.3,height:7.1};switch(t){case"text":return{...a,formatter:"文本",fontSize:12,textAlign:"left",height:5.3};case"image":return{...a,width:28.2,height:28.2,fit:"contain"};case"longText":return{...a,width:141.1,height:28.2,fontSize:12,lineHeight:18};case"table":{const{rows:o,colWidths:n}=ro(),l=n.reduce((i,s)=>i+s,0),r=o.reduce((i,s)=>i+s.height,0);return{...a,width:l,height:r,tableMode:"dynamic",tableRows:o,tableColWidths:n,tableDefaultFontSize:10,tableDefaultColor:"#333333",tableDefaultPadding:1,fields:[],tablePagination:{enabled:!0}}}case"hline":return{...a,width:70.6,height:1.8,borderWidth:.75};case"vline":return{...a,width:1.8,height:35.3,borderWidth:.75};case"rect":return{...a,width:28.2,height:28.2,borderWidth:1,borderColor:"#333"};case"oval":return{...a,width:28.2,height:28.2,borderWidth:1,borderColor:"#333"};case"barcode":return{...a,width:56.4,height:14.1,title:"条形码",barcodeType:"code128",testData:"12345678"};case"qrcode":return{...a,width:28.2,height:28.2,title:"二维码",testData:"qrcode"};case"html":return{...a,width:28.2,height:28.2};default:return a}}function zt(t,a){const o={text:{title:"文本"},image:{title:"图片"},longText:{title:"长文"},table:{title:"表格"},hline:{title:"横线"},vline:{title:"竖线"},rect:{title:"矩形"},oval:{title:"椭圆"},barcode:{title:"条形码"},qrcode:{title:"二维码"},html:{title:"HTML"},pageNumber:{title:"页码"}};return{id:Me(),options:{...vo(t),...a},printElementType:{type:t,title:o[t]?.title||t}}}const ut=new ue.TemplateEngine;function go(){return ge}const ge={supplier:{name:"鑫达五金有限公司",phone:"0571-88776655",address:"杭州市萧山区经济开发区88号"},receiver:{name:"李四",phone:"13912345678",address:"杭州市余杭区文一西路998号"},order:{no:"PO20260801001",date:"2026-08-01",total:69543.75},goods:[{name:"碳钢螺丝 M8",spec:"M14×10",unit:"个",qty:100,price:.5,amount:50,remark:"A级"},{name:"不锈钢螺母 M10",spec:"M16×11",unit:"套",qty:117,price:.75,amount:87.75,remark:""},{name:"弹簧垫圈 M12",spec:"M6×12",unit:"盒",qty:134,price:1,amount:134,remark:""},{name:"六角螺栓 M14",spec:"M5×13",unit:"支",qty:151,price:1.25,amount:188.75,remark:""},{name:"内六角螺钉 M16",spec:"M20×14",unit:"袋",qty:168,price:1.5,amount:252,remark:""},{name:"平垫圈 M6",spec:"M4×15",unit:"件",qty:185,price:1.75,amount:323.75,remark:""},{name:"自攻螺钉 M5",spec:"M3×16",unit:"根",qty:202,price:2,amount:404,remark:""},{name:"双头螺柱 M20",spec:"M8×17",unit:"包",qty:219,price:2.25,amount:492.75,remark:"A级"},{name:"紧定螺钉 M4",spec:"M10×18",unit:"只",qty:236,price:2.5,amount:590,remark:""},{name:"十字盘头钉 M3",spec:"M12×19",unit:"组",qty:253,price:2.75,amount:695.75,remark:""},{name:"碳钢螺丝 M8",spec:"M14×20",unit:"个",qty:270,price:3,amount:810,remark:""},{name:"不锈钢螺母 M10",spec:"M16×21",unit:"套",qty:287,price:3.25,amount:932.75,remark:""},{name:"弹簧垫圈 M12",spec:"M6×22",unit:"盒",qty:304,price:3.5,amount:1064,remark:""},{name:"六角螺栓 M14",spec:"M5×23",unit:"支",qty:321,price:3.75,amount:1203.75,remark:""},{name:"内六角螺钉 M16",spec:"M20×24",unit:"袋",qty:338,price:4,amount:1352,remark:"A级"},{name:"平垫圈 M6",spec:"M4×25",unit:"件",qty:355,price:4.25,amount:1508.75,remark:""},{name:"自攻螺钉 M5",spec:"M3×26",unit:"根",qty:372,price:4.5,amount:1674,remark:""},{name:"双头螺柱 M20",spec:"M8×27",unit:"包",qty:389,price:4.75,amount:1847.75,remark:""},{name:"紧定螺钉 M4",spec:"M10×28",unit:"只",qty:406,price:5,amount:2030,remark:""},{name:"十字盘头钉 M3",spec:"M12×29",unit:"组",qty:423,price:5.25,amount:2220.75,remark:""},{name:"碳钢螺丝 M8",spec:"M14×30",unit:"个",qty:440,price:.5,amount:220,remark:""},{name:"不锈钢螺母 M10",spec:"M16×31",unit:"套",qty:457,price:.75,amount:342.75,remark:"A级"},{name:"弹簧垫圈 M12",spec:"M6×32",unit:"盒",qty:474,price:1,amount:474,remark:""},{name:"六角螺栓 M14",spec:"M5×33",unit:"支",qty:491,price:1.25,amount:613.75,remark:""},{name:"内六角螺钉 M16",spec:"M20×34",unit:"袋",qty:508,price:1.5,amount:762,remark:""},{name:"平垫圈 M6",spec:"M4×35",unit:"件",qty:525,price:1.75,amount:918.75,remark:""},{name:"自攻螺钉 M5",spec:"M3×36",unit:"根",qty:542,price:2,amount:1084,remark:""},{name:"双头螺柱 M20",spec:"M8×37",unit:"包",qty:559,price:2.25,amount:1257.75,remark:""},{name:"紧定螺钉 M4",spec:"M10×38",unit:"只",qty:576,price:2.5,amount:1440,remark:"A级"},{name:"十字盘头钉 M3",spec:"M12×39",unit:"组",qty:593,price:2.75,amount:1630.75,remark:""},{name:"碳钢螺丝 M8",spec:"M14×40",unit:"个",qty:610,price:3,amount:1830,remark:""},{name:"不锈钢螺母 M10",spec:"M16×41",unit:"套",qty:627,price:3.25,amount:2037.75,remark:""},{name:"弹簧垫圈 M12",spec:"M6×42",unit:"盒",qty:644,price:3.5,amount:2254,remark:""},{name:"六角螺栓 M14",spec:"M5×43",unit:"支",qty:661,price:3.75,amount:2478.75,remark:""},{name:"内六角螺钉 M16",spec:"M20×44",unit:"袋",qty:678,price:4,amount:2712,remark:""},{name:"平垫圈 M6",spec:"M4×45",unit:"件",qty:695,price:4.25,amount:2953.75,remark:"A级"},{name:"自攻螺钉 M5",spec:"M3×46",unit:"根",qty:712,price:4.5,amount:3204,remark:""},{name:"双头螺柱 M20",spec:"M8×47",unit:"包",qty:729,price:4.75,amount:3462.75,remark:""},{name:"紧定螺钉 M4",spec:"M10×48",unit:"只",qty:746,price:5,amount:3730,remark:""},{name:"十字盘头钉 M3",spec:"M12×49",unit:"组",qty:763,price:5.25,amount:4005.75,remark:""},{name:"碳钢螺丝 M8",spec:"M14×10",unit:"个",qty:780,price:.5,amount:390,remark:""},{name:"不锈钢螺母 M10",spec:"M16×11",unit:"套",qty:797,price:.75,amount:597.75,remark:""},{name:"弹簧垫圈 M12",spec:"M6×12",unit:"盒",qty:814,price:1,amount:814,remark:"A级"},{name:"六角螺栓 M14",spec:"M5×13",unit:"支",qty:831,price:1.25,amount:1038.75,remark:""},{name:"内六角螺钉 M16",spec:"M20×14",unit:"袋",qty:848,price:1.5,amount:1272,remark:""},{name:"平垫圈 M6",spec:"M4×15",unit:"件",qty:865,price:1.75,amount:1513.75,remark:""},{name:"自攻螺钉 M5",spec:"M3×16",unit:"根",qty:882,price:2,amount:1764,remark:""},{name:"双头螺柱 M20",spec:"M8×17",unit:"包",qty:899,price:2.25,amount:2022.75,remark:""},{name:"紧定螺钉 M4",spec:"M10×18",unit:"只",qty:916,price:2.5,amount:2290,remark:""},{name:"十字盘头钉 M3",spec:"M12×19",unit:"组",qty:933,price:2.75,amount:2565.75,remark:"A级"}]},ho={MONEY:ue.formatMoney,CONCAT:(...t)=>t.filter(a=>a!=null).join(""),IF:ue.ifFn,FORMAT:t=>typeof t!="number"?String(t):t.toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2}),SUBSTR:(t,a,o)=>String(t).slice(a,o?a+o:void 0),LEN:t=>String(t).length,ROUND:(t,a)=>Number(Number(t).toFixed(a)),NOW:()=>new Date().toISOString().split("T")[0],IFEMPTY:(t,a)=>t!=null&&t!==""?String(t):a,PAD:(t,a,o)=>String(t).padStart(a,o),REPLACE:(t,a,o)=>String(t).replace(new RegExp(a,"g"),o),JSON:t=>JSON.stringify(t,null,2),DATE:ue.formatDate,UPPER:ue.toUpperCaseAmount};for(const[t,a]of Object.entries(ho))ut.registerFunction(t,a);function bo(t,a,o){switch(t.toUpperCase()){case"SUM":return ue.sum(o,a);case"AVG":return ue.avg(o,a);case"COUNT":return ue.count(o,a);case"MIN":return ue.min(o,a);case"MAX":return ue.max(o,a);default:return 0}}function $e(t,a){if(!t)return"";if(!t.includes("{"))return t;const o=Array.isArray(a.rows)?a.rows:[];let n=t.replace(/\{([^}]+)\}/g,(l,r)=>{let i=r.trim();return i=i.replace(/\b(SUM|AVG|COUNT|MIN|MAX)\(([^)]+)\)/g,(s,c,d)=>{const p=d.trim().replace(/^['"]|['"]$/g,"");return String(bo(c,p,o))}),`{${i}}`});try{return ut.render(n,a)}catch{return t}}function yo(t){return zt("text",{formatter:`{${t.fieldKey}}`,title:t.fieldLabel})}function We(t,a){if(t.formatter){if(!a||a.length===0)return"";const o=a[0];try{return ut.render(t.formatter,o??{})}catch{return t.formatter}}return""}function yt(t){let a=ge;for(const o of t.split(".")){if(a==null)return;a=Array.isArray(a)?a[0]?.[o]:a[o]}return a}function ko(t,a){const o=a?.[0];return(t??"").replace(/\{([^{}]+)\}/g,(l,r)=>{const i=r.trim(),s=i.includes(".")?yt(i):o?.[i]??yt(i);return s==null?"":String(s)}).trim()||"1234567890128"}function Eo(t){return t/2.83464566929}function Fe(t){return t*(25.4/96)}function he(t){return t*(96/25.4)}const wo=["left","top","width","height"];function Vo(t){const a={...t.options};for(const o of wo){const n=a[o];typeof n=="number"&&Number.isFinite(n)&&(a[o]=No(Eo(n)))}return{...t,options:a}}function No(t){return Math.round(t*100)/100}function Co(t){if(t.unit==="mm")return t;const a=o=>o?.map(Vo)??[];return{...t,unit:"mm",elements:a(t.elements),header:t.header?{...t.header,elements:a(t.header.elements)}:t.header,footer:t.footer?{...t.footer,elements:a(t.footer.elements)}:t.footer,firstPageOverlay:t.firstPageOverlay?{...t.firstPageOverlay,elements:a(t.firstPageOverlay.elements)}:t.firstPageOverlay}}const nt={A4:{width:210,height:297},A3:{width:297,height:420},A5:{width:148,height:210},Letter:{width:216,height:279},Legal:{width:216,height:356}};function Ee(t){let a;return t.paperSize==="CUSTOM"?a={width:t.customWidth??210,height:t.customHeight??297}:a=nt[t.paperSize]||nt.A4,t.orientation==="landscape"?{width:a.height,height:a.width}:a}const So=25,mt=5;function Mo(t){return Math.max(So,t)}function $o(t,a,o=1.1){const n=a>0?t*o:t/o;return Mo(Math.round(n))}function Lt(t,a,o,n,l=.9){if(o<=0||n<=0)return 100;const r=Math.min(t/o,a/n)*l,i=Math.round(r*100);return Math.max(mt,i)}const Pt=["text","image","hline","vline","rect","oval","barcode","qrcode"];function xo(t){return Ee(t)}function Ye(t){const a=xo(t),o=t.margins,n=t.header.height,l=t.footer.height,r=a.width-o.left-o.right,i=a.height-o.top-o.bottom-n-l,s=(c,d,p,v)=>({left:c,top:d,width:p,height:v});return{header:s(o.left,o.top,r,n),content:s(o.left,o.top+n,r,i),footer:s(o.left,a.height-o.bottom-l,r,l)}}function At(t,a,o){const n=Ye(t);return n.footer.height>0&&o>=n.footer.top?"footer":n.header.height>0&&o<n.header.top+n.header.height?"header":"content"}function lt(t,a){const o=t.options;o.width=Math.min(o.width,a.width),o.height=Math.min(o.height,a.height),o.left=Math.min(Math.max(0,o.left),a.width-o.width),o.top=Math.min(Math.max(0,o.top),a.height-o.height)}function Bo(t,a){const o=Ye(a),n=t.zone||"content",l=o[n],r=l.left+t.options.left+t.options.width/2,i=l.top+t.options.top+t.options.height/2;let s=At(a,r,i),c=!1;if(s!=="content"&&!Pt.includes(t.printElementType.type)&&(s="content",c=!0),s!==n){const d=o[s];t.options.left=l.left+t.options.left-d.left,t.options.top=l.top+t.options.top-d.top,t.zone=s}return s!=="content"?lt(t,o[s]):c&&lt(t,o.content),{rejected:c}}const It=Symbol("selected-ids"),Rt=Symbol("preview-ids");function Do(t){const a=e.ref(new Set),o=e.ref(new Set),n=e.computed(()=>t.value.filter(w=>a.value.has(w.id))),l=e.computed(()=>a.value.size>0);function r(w,L=!1){if(L){const H=new Set(a.value);H.has(w)?H.delete(w):H.add(w),a.value=H}else a.value=new Set([w])}function i(){a.value=new Set}function s(w){a.value=new Set(w)}function c(w){o.value=new Set(w)}function d(){o.value=new Set}function p(){a.value=new Set(o.value),o.value=new Set}function v(){const w=n.value;if(w.length===0)return null;let L=1/0,H=1/0,D=-1/0,$=-1/0;return w.forEach(R=>{L=Math.min(L,R.options.left),H=Math.min(H,R.options.top),D=Math.max(D,R.options.left+R.options.width),$=Math.max($,R.options.top+R.options.height)}),{left:L,top:H,width:D-L,height:$-H}}return{selectedIds:a,selectedElements:n,hasSelection:l,select:r,clearSelection:i,selectAll:s,getSelectionBounds:v,previewIds:o,setPreview:c,clearPreview:d,commitPreview:p}}function To(){const t=e.ref(null);function a(l){t.value=l.map(r=>({options:{...r.options},printElementType:{...r.printElementType}}))}function o(l=10){return t.value?t.value.map(r=>({id:Me(),options:{...r.options,left:r.options.left+l,top:r.options.top+l},printElementType:{...r.printElementType}})):null}function n(){return t.value!==null&&t.value.length>0}return{clipboard:t,copy:a,paste:o,hasData:n}}function zo(){function t(a,o){if(a.length<2)return;const n={minLeft:Math.min(...a.map(l=>l.options.left)),maxRight:Math.max(...a.map(l=>l.options.left+l.options.width)),minTop:Math.min(...a.map(l=>l.options.top)),maxBottom:Math.max(...a.map(l=>l.options.top+l.options.height))};switch(o){case"left":a.forEach(l=>{l.options.left=n.minLeft});break;case"right":a.forEach(l=>{l.options.left=n.maxRight-l.options.width});break;case"top":a.forEach(l=>{l.options.top=n.minTop});break;case"bottom":a.forEach(l=>{l.options.top=n.maxBottom-l.options.height});break;case"vertical":{const l=n.minLeft+(n.maxRight-n.minLeft)/2;a.forEach(r=>{r.options.left=l-r.options.width/2});break}case"horizontal":{const l=n.minTop+(n.maxBottom-n.minTop)/2;a.forEach(r=>{r.options.top=l-r.options.height/2});break}case"distributeHor":{const l=[...a].sort((c,d)=>c.options.left-d.options.left),r=l.reduce((c,d)=>c+d.options.width,0),i=(n.maxRight-n.minLeft-r)/(l.length-1);let s=n.minLeft;l.forEach(c=>{c.options.left=s,s+=c.options.width+i});break}case"distributeVer":{const l=[...a].sort((c,d)=>c.options.top-d.options.top),r=l.reduce((c,d)=>c+d.options.height,0),i=(n.maxBottom-n.minTop-r)/(l.length-1);let s=n.minTop;l.forEach(c=>{c.options.top=s,s+=c.options.height+i});break}}}return{align:t}}function Lo(){return`grp-${Date.now()}-${Math.random().toString(36).slice(2,6)}`}function Po(){function t(n,l){if(n.filter(s=>l.has(s.id)).length<2)return n;const i=Lo();return n.map(s=>l.has(s.id)?{...s,options:{...s.options,groupId:i}}:s)}function a(n,l){const r=n.filter(s=>l.has(s.id)),i=new Set(r.map(s=>s.options.groupId).filter(Boolean));return n.map(s=>s.options.groupId&&i.has(s.options.groupId)?{...s,options:{...s.options,groupId:void 0}}:s)}function o(n,l){const r=n.find(s=>s.id===l);if(!r?.options.groupId)return new Set([l]);const i=new Set;for(const s of n)s.options.groupId===r.options.groupId&&i.add(s.id);return i}return{group:t,ungroup:a,getGroupedIds:o}}function Ao(t){const o=e.ref([]),n=e.ref([]),l=e.ref(!1),r=e.ref(!1);function i(){l.value=o.value.length>0,r.value=n.value.length>0}function s(L){return{elements:JSON.parse(JSON.stringify(L?.elements??[])),templateData:JSON.parse(JSON.stringify(L?.templateData??{}))}}function c(L){return s(L)}function d(L){o.value.push(c(L)),n.value=[],o.value.length>50&&o.value.shift(),i()}function p(L){if(o.value.length===0)return null;const H=o.value.pop();return n.value.push(L?c(L):s(H)),i(),o.value.length>0?s(o.value[o.value.length-1]):null}function v(L){if(n.value.length===0)return null;const H=n.value.pop();return o.value.push(L?c(L):s(H)),i(),s(H)}function w(){o.value=[],n.value=[],i()}return{push:d,undo:p,redo:v,canUndo:l,canRedo:r,clear:w}}const Io=1,Ro=10,Ho=.5;function Fo(t){function a(l){const r=l.target.tagName;if(r==="INPUT"||r==="TEXTAREA"||r==="SELECT")return;const i=l.ctrlKey||l.metaKey;if(l.key.startsWith("Arrow")){l.preventDefault();const s=l.shiftKey?Ro:l.ctrlKey?Ho:Io,c=l.key==="ArrowLeft"?-s:l.key==="ArrowRight"?s:0,d=l.key==="ArrowUp"?-s:l.key==="ArrowDown"?s:0;t.onMove?.(c,d);return}if(l.key==="Delete"||l.key==="Backspace"){l.preventDefault(),t.onDelete?.();return}if(i){const s=l.key.toLowerCase();s==="c"?(l.preventDefault(),t.onCopy?.()):s==="v"?(l.preventDefault(),t.onPaste?.()):s==="a"?(l.preventDefault(),t.onSelectAll?.()):s==="d"?(l.preventDefault(),t.onDuplicate?.()):s==="z"?(l.preventDefault(),l.shiftKey?t.onRedo?.():t.onUndo?.()):s==="y"?(l.preventDefault(),t.onRedo?.()):s==="1"?(l.preventDefault(),t.onResetZoom?.()):s==="l"?(l.preventDefault(),t.onAlignLeft?.()):s==="r"?(l.preventDefault(),t.onAlignRight?.()):s==="e"?(l.preventDefault(),t.onAlignCenterH?.()):s==="t"?(l.preventDefault(),t.onAlignTop?.()):s==="b"?(l.preventDefault(),t.onAlignBottom?.()):s==="g"&&(l.preventDefault(),l.shiftKey?t.onUngroup?.():t.onGroup?.())}}function o(){document.addEventListener("keydown",a)}function n(){document.removeEventListener("keydown",a)}return{setup:o,cleanup:n}}function Ht(){return{paperSize:"A4",orientation:"portrait",unit:"mm",margins:{top:10,right:10,bottom:10,left:10},header:{height:10,elements:[]},footer:{height:10,elements:[]},firstPageOverlay:{height:0,elements:[]},elements:[],watermark:{}}}function at(t){const a=(o,n)=>(o??[]).map(l=>{const r={...l.options};return(l.printElementType?.type??l.type)==="table"&&qe(r),{id:l.id||Me(),zone:n,options:r,printElementType:{...l.printElementType}}});return{...t,margins:{...t.margins},header:{height:t.header?.height??10,elements:[]},footer:{height:t.footer?.height??10,elements:[]},firstPageOverlay:{height:t.firstPageOverlay?.height??0,elements:[...t.firstPageOverlay?.elements??[]]},guides:[...t.guides??[]],elements:[...a(t.elements??[],"content"),...a(t.header?.elements??[],"header"),...a(t.footer?.elements??[],"footer")]}}function Uo(t={}){const a=e.ref(100),o=e.ref(!0),n=e.ref(!0),l=e.ref(!1),r=e.ref(!0),i=e.ref(at(t.initialTemplate||Ht())),s=e.computed({get:()=>i.value.elements,set:q=>{i.value.elements=q}}),c=e.ref(t.initialFields||[]),{selectedIds:d,selectedElements:p,select:v,clearSelection:w,selectAll:L,previewIds:H,setPreview:D,clearPreview:$,commitPreview:R}=Do(s),{group:W,ungroup:J}=Po(),{copy:A,paste:G,hasData:K}=To(),{align:S}=zo(),{push:M,undo:x,redo:B,canUndo:T,canRedo:z}=Ao(),u=e.computed(()=>{if(d.value.size===0)return null;const q=d.value.values().next().value;return s.value.find(ee=>ee.id===q)||null}),V=e.ref(null);function O(q){V.value=q}function X(){return{elements:s.value.map(q=>({id:q.id,zone:q.zone,options:JSON.parse(JSON.stringify(q.options)),printElementType:{...q.printElementType}})),templateData:{paperSize:i.value.paperSize,orientation:i.value.orientation,margins:{...i.value.margins},header:{height:i.value.header.height,elements:[]},footer:{height:i.value.footer.height,elements:[]},firstPageOverlay:{height:i.value.firstPageOverlay.height,elements:[]},elements:[],customWidth:i.value.customWidth,customHeight:i.value.customHeight,watermark:i.value.watermark?{...i.value.watermark}:void 0,guides:[...i.value.guides??[]]}}}function Z(){M(X())}function j(){const q=x(X());q?.templateData&&(i.value={...q.templateData,elements:q.elements})}function ce(){const q=B(X());q?.templateData&&(i.value={...q.templateData,elements:q.elements})}function ie(){A(p.value)}function se(){A(p.value),F()}function le(){const q=G();q&&q.length>0&&(s.value.push(...q),Z())}function P(){A(p.value);const q=G();q&&q.length>0&&(q.forEach(ee=>{ee.options.left+=5,ee.options.top+=5}),s.value.push(...q),v(q[0].id,!1),Z())}function g(){a.value=100}const E=e.computed(()=>K());let f=!1,m=null;const k=300;function h(q,ee){const Q=p.value.filter(oe=>!oe.options.locked);Q.length!==0&&(Q.forEach(oe=>{oe.options.left+=q,oe.options.top+=ee}),f||(f=!0,Z()),m&&clearTimeout(m),m=setTimeout(()=>{f=!1,m=null},k))}function C(){L(s.value.map(q=>q.id))}function N(q){S(p.value,q),Z()}function y(){s.value=W(s.value,d.value),Z()}function b(){s.value=J(s.value,d.value),Z()}function F(){d.value.size!==0&&(s.value=s.value.filter(q=>!d.value.has(q.id)),w(),Z())}const{setup:Y,cleanup:ae}=Fo({onMove:h,onDelete:F,onCopy:ie,onPaste:le,onSelectAll:C,onUndo:j,onRedo:ce,onDuplicate:P,onResetZoom:g,onAlignLeft:()=>N("left"),onAlignRight:()=>N("right"),onAlignCenterH:()=>N("vertical"),onAlignTop:()=>N("top"),onAlignBottom:()=>N("bottom"),onGroup:y,onUngroup:b});let re=null;function ve(){re=X()}function xe(){if(!re)return;const q=new Map(re.elements.map(de=>[de.id,de]));let ee=!1;for(const de of s.value){const pe=q.get(de.id);if(!pe)continue;(pe.options.left!==de.options.left||pe.options.top!==de.options.top||pe.options.width!==de.options.width||pe.options.height!==de.options.height)&&Bo(de,i.value).rejected&&(ee=!0)}ee&&alert("该元素类型不能放入页眉/页脚");const Q=de=>`${de.id}:${de.zone||"content"}:${de.options.left},${de.options.top},${de.options.width},${de.options.height}`,oe=re.elements.map(Q).join("|"),ke=X().elements.map(Q).join("|");re=null,oe!==ke&&Z()}function be(q,ee){const Q=At(i.value,ee.x,ee.y);if(Q!=="content"&&!Pt.includes(q.printElementType.type))return alert("该元素类型不能放入页眉/页脚"),!1;const oe=Ye(i.value)[Q];return q.zone=Q,q.options.left=ee.x-oe.left,q.options.top=ee.y-oe.top,Q!=="content"&&lt(q,oe),!0}function ye(q,ee){const Q=zt(q);ee&&!be(Q,ee)||(s.value.push(Q),v(Q.id,!1),Z())}function Ne(q,ee){const Q=yo(q);ee&&!be(Q,ee)||(s.value.push(Q),v(Q.id,!1),Z())}function Ke(q){if(d.value.size===0)return;const ee=d.value.values().next().value,Q=s.value.find(Se=>Se.id===ee);if(!Q)return;const oe=Q.options.zIndex??0,ke=s.value.map(Se=>Se.options.zIndex??0),de=Math.max(...ke,0),pe=Math.min(...ke,0);switch(q){case"top":Q.options.zIndex=de+1;break;case"bottom":Q.options.zIndex=pe-1;break;case"up":Q.options.zIndex=oe+1;break;case"down":Q.options.zIndex=oe-1;break}Z()}function Xe(q,ee){const{width:Q,height:oe}=Ee(i.value),ke=96/25.4;a.value=Lt(q,ee,Q*ke,oe*ke)}function Ae(q){i.value={...q},Z()}function je(){const q=s.value,ee=Q=>q.filter(oe=>(oe.zone||"content")===Q).map(oe=>({id:oe.id,type:oe.printElementType.type,options:{...oe.options},printElementType:{...oe.printElementType}}));return{unit:"mm",...i.value,header:{...i.value.header,elements:ee("header")},footer:{...i.value.footer,elements:ee("footer")},firstPageOverlay:{...i.value.firstPageOverlay,elements:i.value.firstPageOverlay.elements.map(Q=>({id:Q.id||Me(),type:Q.printElementType?.type||"text",options:{...Q.options},printElementType:{...Q.printElementType}}))},elements:ee("content"),guides:[...i.value.guides??[]]}}function Je(q,ee){const Q=Co(q);i.value=at(Q),ee&&(i.value={...i.value,elements:ee.map(oe=>({...oe,id:oe.id||Me(),zone:oe.zone||"content",options:{...oe.options},printElementType:{...oe.printElementType}}))}),M(X())}return M(X()),e.onMounted(()=>Y()),e.onUnmounted(()=>{ae(),m&&(clearTimeout(m),m=null)}),{scale:a,showRuler:o,showGrid:n,snapToGrid:l,showTableGhostBorder:r,templateData:i,elements:s,fields:c,selectedIds:d,selectedElements:p,selectedElement:u,select:v,clearSelection:w,selectAll:C,previewIds:H,setPreview:D,clearPreview:$,commitPreview:R,hasClipboard:E,copy:ie,paste:le,cutSelected:se,tableSelection:V,setTableSelection:O,canUndo:T,canRedo:z,undo:j,redo:ce,recordHistory:Z,alignSelected:N,groupSelected:y,ungroupSelected:b,deleteSelected:F,duplicateSelected:P,resetZoom:g,dragStart:ve,dragStop:xe,addElement:ye,addFieldElement:Ne,moveLayer:Ke,fitToWindow:Xe,updateTemplateData:Ae,getTemplateJson:je,loadTemplate:Je}}let kt=0;function Oo(){return kt+=1,`guide-${kt}`}function Go(t,a){const o=e.computed(()=>t.value.guides??[]);function n(c){t.value={...t.value,guides:c([...t.value.guides??[]])},a()}function l(c,d){n(p=>(p.push({type:c,position:d,id:Oo()}),p))}function r(c,d){n(p=>p.map(v=>v.id===c?{...v,position:d}:v))}function i(c){n(d=>d.filter(p=>p.id!==c))}function s(){const c=[],d=[];for(const p of o.value)p.type==="vertical"?c.push(p.position):d.push(p.position);return{vertical:c,horizontal:d}}return{guides:o,addGuide:l,moveGuide:r,removeGuide:i,getGuidePositions:s}}const Pe=Symbol("table-edit"),pt=Symbol("print-upload-image"),qo=e.defineComponent({__name:"HelpButton",emits:["click"],setup(t){return(a,o)=>(e.openBlock(),e.createElementBlock("button",{class:"help-button",title:"帮助文档",onClick:o[0]||(o[0]=n=>a.$emit("click"))},[...o[1]||(o[1]=[e.createElementVNode("span",{class:"help-icon"},"?",-1)])]))}}),_=(t,a)=>{const o=t.__vccOpts||t;for(const[n,l]of a)o[n]=l;return o},Wo=_(qo,[["__scopeId","data-v-80ccab03"]]),Yo={class:"designer-toolbar"},Ko={class:"tb-group"},Xo={class:"tb-title"},jo={class:"tb-title-name"},Jo={class:"tb-group"},Zo=["disabled"],Qo=["disabled"],_o={key:0,class:"tb-group"},en={key:1,class:"tb-group"},tn={key:2,class:"tb-group"},on={key:3,class:"tb-group"},nn={class:"tb-group"},ln={class:"tb-zoom"},an={key:4,class:"tb-group"},rn={class:"tb-group"},sn={class:"tb-group"},dn=e.defineComponent({__name:"DesignerToolbar",props:e.mergeModels({isEdit:{type:Boolean},canUndo:{type:Boolean},canRedo:{type:Boolean},hasMultiSelection:{type:Boolean},hasSelection:{type:Boolean},showRuler:{type:Boolean,default:!0},showGrid:{type:Boolean},snapToGrid:{type:Boolean},showTableGhostBorder:{type:Boolean},selectedElementHasGroup:{type:Boolean},overlayVisible:{type:Boolean},showLoadDefault:{type:Boolean},showHelp:{type:Boolean,default:!0}},{scale:{default:100},scaleModifiers:{}}),emits:e.mergeModels(["preview","save","load-default","undo","redo","align","move-layer","toggle-ruler","toggle-grid","toggle-snap","toggle-table-ghost-border","toggle-overlay","group","ungroup","add-overlay-element","fit-window","zoom","help"],["update:scale"]),setup(t){const a=e.useModel(t,"scale");return(o,n)=>(e.openBlock(),e.createElementBlock("div",Yo,[e.createElementVNode("div",Ko,[n[30]||(n[30]=e.createStaticVNode('<span class="tb-mark" aria-hidden="true" data-v-e6d10b59><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-e6d10b59><rect x="5" y="3" width="14" height="18" rx="2.5" data-v-e6d10b59></rect><line x1="8.5" y1="8.5" x2="15.5" y2="8.5" data-v-e6d10b59></line><line x1="8.5" y1="12.5" x2="15.5" y2="12.5" data-v-e6d10b59></line><line x1="8.5" y1="16.5" x2="12.5" y2="16.5" data-v-e6d10b59></line></svg></span>',1)),e.createElementVNode("div",Xo,[e.createElementVNode("span",jo,e.toDisplayString(t.isEdit?"编辑模板":"新建模板"),1),n[29]||(n[29]=e.createElementVNode("span",{class:"tb-title-sub"},"打印模板设计器",-1))])]),e.createElementVNode("div",Jo,[e.createElementVNode("button",{class:"tb-btn tb-icon",disabled:!t.canUndo,onClick:n[0]||(n[0]=l=>o.$emit("undo")),"data-tip":"撤销"},"↶",8,Zo),e.createElementVNode("button",{class:"tb-btn tb-icon",disabled:!t.canRedo,onClick:n[1]||(n[1]=l=>o.$emit("redo")),"data-tip":"重做"},"↷",8,Qo)]),t.hasMultiSelection?(e.openBlock(),e.createElementBlock("div",_o,[e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[2]||(n[2]=l=>o.$emit("align","left")),title:"左对齐"},"⇤"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[3]||(n[3]=l=>o.$emit("align","right")),title:"右对齐"},"⇥"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[4]||(n[4]=l=>o.$emit("align","top")),title:"顶对齐"},"⇡"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[5]||(n[5]=l=>o.$emit("align","bottom")),title:"底对齐"},"⇣"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[6]||(n[6]=l=>o.$emit("align","vertical")),title:"水平居中"},"↔"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[7]||(n[7]=l=>o.$emit("align","horizontal")),title:"垂直居中"},"↕"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[8]||(n[8]=l=>o.$emit("align","distributeHor")),title:"水平分布"},"⇔"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[9]||(n[9]=l=>o.$emit("align","distributeVer")),title:"垂直分布"},"⇕")])):e.createCommentVNode("",!0),t.hasMultiSelection?(e.openBlock(),e.createElementBlock("div",en,[e.createElementVNode("button",{class:"tb-btn",onClick:n[10]||(n[10]=l=>o.$emit("group")),title:"组合"},"组合")])):e.createCommentVNode("",!0),!t.hasMultiSelection&&t.selectedElementHasGroup?(e.openBlock(),e.createElementBlock("div",tn,[e.createElementVNode("button",{class:"tb-btn",onClick:n[11]||(n[11]=l=>o.$emit("ungroup")),title:"取消组合"},"取消组合")])):e.createCommentVNode("",!0),t.hasSelection?(e.openBlock(),e.createElementBlock("div",on,[e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[12]||(n[12]=l=>o.$emit("move-layer","top")),"data-tip":"置顶"},"⤒"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[13]||(n[13]=l=>o.$emit("move-layer","up")),"data-tip":"上移一层"},"↑"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[14]||(n[14]=l=>o.$emit("move-layer","down")),"data-tip":"下移一层"},"↓"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[15]||(n[15]=l=>o.$emit("move-layer","bottom")),"data-tip":"置底"},"⤓")])):e.createCommentVNode("",!0),e.createElementVNode("div",nn,[e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{on:t.showRuler}]),"data-tip":"显示/隐藏标尺",onClick:n[16]||(n[16]=l=>o.$emit("toggle-ruler"))},[...n[31]||(n[31]=[e.createElementVNode("span",{class:"dot"},null,-1),e.createTextVNode(" 标尺 ",-1)])],2),e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{on:t.showGrid}]),"data-tip":"显示/隐藏网格背景",onClick:n[17]||(n[17]=l=>o.$emit("toggle-grid"))},[...n[32]||(n[32]=[e.createElementVNode("span",{class:"dot"},null,-1),e.createTextVNode(" 网格 ",-1)])],2),e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{on:t.showTableGhostBorder}]),"data-tip":"显示/隐藏无边框表格的虚拟虚线",onClick:n[18]||(n[18]=l=>o.$emit("toggle-table-ghost-border"))},[...n[33]||(n[33]=[e.createElementVNode("span",{class:"dot"},null,-1),e.createTextVNode(" 虚框 ",-1)])],2),e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{on:t.snapToGrid}]),"data-tip":"开启/关闭元素吸附到网格",onClick:n[19]||(n[19]=l=>o.$emit("toggle-snap"))},[...n[34]||(n[34]=[e.createElementVNode("span",{class:"dot"},null,-1),e.createTextVNode(" 吸附 ",-1)])],2),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[20]||(n[20]=l=>o.$emit("fit-window")),"data-tip":"适应窗口"},"⤢"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[21]||(n[21]=l=>o.$emit("zoom",-10)),"data-tip":"缩小"},"−"),e.createElementVNode("span",ln,e.toDisplayString(a.value)+"%",1),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[22]||(n[22]=l=>o.$emit("zoom",10)),"data-tip":"放大"},"+")]),n[35]||(n[35]=e.createElementVNode("div",{class:"tb-spacer"},null,-1)),t.showHelp?(e.openBlock(),e.createElementBlock("div",an,[e.createVNode(Wo,{onClick:n[23]||(n[23]=l=>o.$emit("help"))})])):e.createCommentVNode("",!0),e.createElementVNode("div",rn,[e.createElementVNode("button",{class:"tb-btn",onClick:n[24]||(n[24]=l=>o.$emit("add-overlay-element"))},"首页专属"),e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{warn:t.overlayVisible}]),onClick:n[25]||(n[25]=l=>o.$emit("toggle-overlay"))},"叠层对比",2)]),e.createElementVNode("div",sn,[t.showLoadDefault?(e.openBlock(),e.createElementBlock("button",{key:0,class:"btn-secondary",onClick:n[26]||(n[26]=l=>o.$emit("load-default"))},"加载默认布局")):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"btn-secondary",onClick:n[27]||(n[27]=l=>o.$emit("preview"))},"预览"),e.createElementVNode("button",{class:"btn-primary",onClick:n[28]||(n[28]=l=>o.$emit("save"))},"保存")])]))}}),cn=_(dn,[["__scopeId","data-v-e6d10b59"]]),un={class:"layer-panel"},mn=["onClick"],pn={class:"layer-icon"},fn={class:"layer-name"},vn={key:0,class:"layer-zone"},gn={class:"layer-zindex"},hn={key:0,class:"layer-actions"},bn=e.defineComponent({__name:"LayerPanel",props:{elements:{},selectedIds:{}},emits:["select","move-layer"],setup(t){const a=t,o=e.computed(()=>[...a.elements].sort((s,c)=>(c.options.zIndex??0)-(s.options.zIndex??0))),n={text:"T",longText:"¶",table:"⊞",image:"🖼",barcode:"≡",qrcode:"▣",hline:"—",vline:"|",rect:"□",oval:"○",html:"<>"};function l(s){return n[s.printElementType.type]||"?"}function r(s){return s.options.title||s.printElementType.title||s.printElementType.type}function i(s){return s.zone==="header"?"页眉":s.zone==="footer"?"页脚":""}return(s,c)=>(e.openBlock(),e.createElementBlock("div",un,[c[4]||(c[4]=e.createElementVNode("div",{class:"panel-title"},"图层",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.id,class:e.normalizeClass(["layer-item",{active:t.selectedIds.has(d.id)}]),onClick:p=>s.$emit("select",d.id,!1)},[e.createElementVNode("span",pn,e.toDisplayString(l(d)),1),e.createElementVNode("span",fn,e.toDisplayString(r(d)),1),i(d)?(e.openBlock(),e.createElementBlock("span",vn,e.toDisplayString(i(d)),1)):e.createCommentVNode("",!0),e.createElementVNode("span",gn,"z:"+e.toDisplayString(d.options.zIndex??0),1)],10,mn))),128)),o.value.length>0?(e.openBlock(),e.createElementBlock("div",hn,[e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:c[0]||(c[0]=d=>s.$emit("move-layer","top")),title:"置顶"}," ⤒ "),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:c[1]||(c[1]=d=>s.$emit("move-layer","up")),title:"上移"}," ↑ "),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:c[2]||(c[2]=d=>s.$emit("move-layer","down")),title:"下移"}," ↓ "),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:c[3]||(c[3]=d=>s.$emit("move-layer","bottom")),title:"置底"}," ⤓ ")])):e.createCommentVNode("",!0)]))}}),yn=_(bn,[["__scopeId","data-v-d091c3fa"]]);function Ft(t){const a=[...t].sort((i,s)=>(i.sortOrder??0)-(s.sortOrder??0)),o=new Map,n=[];for(const i of a){const s=i.fieldKey.indexOf(".");if(s===-1)continue;const c=i.fieldKey.slice(0,s);let d=o.get(c);d||(d={key:c,label:c,isList:!1,fields:[]},o.set(c,d),n.push(c)),d.fields.push(i)}const l=[],r=[];for(const i of a){if(i.fieldKey.includes("."))continue;const s=o.get(i.fieldKey);s?(s.label=i.fieldLabel,s.isList=i.fieldType==="list"):r.push(i)}r.length&&l.push({key:"",label:"",isList:!1,fields:r});for(const i of n)l.push(o.get(i));return l}function Ut(t,a){const o=a.trim().toLowerCase();return o?t.map(n=>({...n,fields:n.fields.filter(l=>l.fieldLabel.toLowerCase().includes(o)||l.fieldKey.toLowerCase().includes(o))})).filter(n=>n.fields.length>0):t}const kn={class:"field-tree-panel"},En={class:"tree-container"},wn=["onClick"],Vn={class:"expand-icon"},Nn={class:"node-icon"},Cn={class:"group-label"},Sn=["onDragstart"],Mn={class:"node-label"},$n={class:"node-key"},xn={key:0,class:"pd-empty"},Bn=e.defineComponent({__name:"FieldTreePanel",props:{fields:{}},emits:["field-drag"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(""),r=e.ref(new Set),i=e.computed(()=>!!l.value.trim()),s=e.computed(()=>Ut(Ft(o.fields),l.value));function c(p){const v=new Set(r.value);v.has(p)?v.delete(p):v.add(p),r.value=v}function d(p,v){p.dataTransfer?.setData("fieldData",JSON.stringify({fieldKey:v.fieldKey,fieldLabel:v.fieldLabel})),p.dataTransfer&&(p.dataTransfer.effectAllowed="copy"),n("field-drag",v)}return(p,v)=>(e.openBlock(),e.createElementBlock("div",kn,[v[2]||(v[2]=e.createElementVNode("div",{class:"panel-title"},"业务字段",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":v[0]||(v[0]=w=>l.value=w),class:"pd-input search-input",type:"search",placeholder:"搜索字段...","aria-label":"搜索字段"},null,512),[[e.vModelText,l.value]]),e.createElementVNode("div",En,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,w=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:w.key||"_top"},[w.key?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["field-group-header",{"is-list":w.isList}]),onClick:L=>c(w.key)},[e.createElementVNode("span",Vn,e.toDisplayString(r.value.has(w.key)&&!i.value?"▶":"▼"),1),e.createElementVNode("span",Nn,e.toDisplayString(w.isList?"📋":"📁"),1),e.createElementVNode("span",Cn,e.toDisplayString(w.label),1)],10,wn)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.fields,L=>(e.openBlock(),e.createElementBlock("div",{key:L.fieldKey,class:"field-row",draggable:"true",style:e.normalizeStyle({paddingLeft:(w.key?22:8)+"px"}),onDragstart:H=>d(H,L)},[v[1]||(v[1]=e.createElementVNode("span",{class:"node-icon"},"📄",-1)),e.createElementVNode("span",Mn,e.toDisplayString(L.fieldLabel),1),e.createElementVNode("span",$n,"("+e.toDisplayString(L.fieldKey)+")",1)],44,Sn))),128))],512),[[e.vShow,!w.key||i.value||!r.value.has(w.key)]])],64))),128))]),s.value.length===0?(e.openBlock(),e.createElementBlock("p",xn,"暂无字段")):e.createCommentVNode("",!0)]))}}),Dn=_(Bn,[["__scopeId","data-v-cc814de0"]]),Tn={key:0,class:"left-collapsed"},zn={class:"left-head"},Ln={class:"pd-tabs left-tabs"},Pn={class:"pd-tab-bar",role:"tablist"},An={class:"pd-tab-pane",role:"tabpanel"},In=["onDragstart"],Rn={class:"material-icon"},Hn={class:"material-label"},Fn={class:"pd-tab-pane",role:"tabpanel"},Un={class:"pd-tab-pane",role:"tabpanel"},On=e.defineComponent({__name:"LeftPanel",props:{fields:{},elements:{},selectedIds:{},collapsed:{type:Boolean}},emits:["select","move-layer","toggle-visible","toggle-locked","field-drag","toggle-collapse"],setup(t,{emit:a}){const o=a,n=e.ref("elements"),l=[{type:"text",label:"文本",icon:"T"},{type:"barcode",label:"条形码",icon:"▍▍"},{type:"qrcode",label:"二维码",icon:"▦"},{type:"image",label:"图片",icon:"▧"},{type:"table",label:"表格",icon:"⊞"},{type:"longText",label:"长文",icon:"¶"},{type:"hline",label:"横线",icon:"―"},{type:"vline",label:"竖线",icon:"│"},{type:"rect",label:"矩形",icon:"▭"},{type:"oval",label:"椭圆",icon:"◯"},{type:"html",label:"HTML",icon:"<>"}];function r(c,d){c.dataTransfer?.setData("elementType",d)}function i(c){o("field-drag",c)}function s(c){n.value=c,o("toggle-collapse")}return(c,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["left-panel",{collapsed:t.collapsed}])},[t.collapsed?(e.openBlock(),e.createElementBlock("div",Tn,[e.createElementVNode("button",{class:"lc-btn",title:"展开素材台",onClick:d[0]||(d[0]=p=>s(n.value))},"»"),e.createElementVNode("button",{class:e.normalizeClass(["lc-btn",{on:n.value==="elements"}]),title:"元素",onClick:d[1]||(d[1]=p=>s("elements"))},"▦",2),e.createElementVNode("button",{class:e.normalizeClass(["lc-btn",{on:n.value==="fields"}]),title:"字段",onClick:d[2]||(d[2]=p=>s("fields"))},"⊛",2),e.createElementVNode("button",{class:e.normalizeClass(["lc-btn",{on:n.value==="layers"}]),title:"图层",onClick:d[3]||(d[3]=p=>s("layers"))},"≡",2)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",zn,[d[12]||(d[12]=e.createElementVNode("span",{class:"left-title"},"素材台",-1)),e.createElementVNode("button",{class:"collapse-btn",title:"收起素材台",onClick:d[4]||(d[4]=p=>c.$emit("toggle-collapse"))},"«")]),e.createElementVNode("div",Ln,[e.createElementVNode("div",Pn,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:n.value==="elements"}]),onClick:d[5]||(d[5]=p=>n.value="elements")},"元素",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:n.value==="fields"}]),onClick:d[6]||(d[6]=p=>n.value="fields")},"字段",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:n.value==="layers"}]),onClick:d[7]||(d[7]=p=>n.value="layers")},"图层",2)]),e.withDirectives(e.createElementVNode("div",An,[d[13]||(d[13]=e.createElementVNode("div",{class:"panel-title"},"拖拽元素到画布",-1)),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,p=>e.createElementVNode("div",{key:p.type,class:"material-card",draggable:"true",onDragstart:v=>r(v,p.type)},[e.createElementVNode("span",Rn,e.toDisplayString(p.icon),1),e.createElementVNode("span",Hn,e.toDisplayString(p.label),1)],40,In)),64))],512),[[e.vShow,n.value==="elements"]]),e.withDirectives(e.createElementVNode("div",Fn,[e.createVNode(Dn,{fields:t.fields,onFieldDrag:i},null,8,["fields"])],512),[[e.vShow,n.value==="fields"]]),e.withDirectives(e.createElementVNode("div",Un,[e.createVNode(yn,{elements:t.elements,"selected-ids":t.selectedIds,onSelect:d[8]||(d[8]=(p,v)=>c.$emit("select",p,v)),onMoveLayer:d[9]||(d[9]=p=>c.$emit("move-layer",p)),onToggleVisible:d[10]||(d[10]=p=>c.$emit("toggle-visible",p)),onToggleLocked:d[11]||(d[11]=p=>c.$emit("toggle-locked",p))},null,8,["elements","selected-ids"])],512),[[e.vShow,n.value==="layers"]])])],64))],2))}}),Gn=_(On,[["__scopeId","data-v-eb646f19"]]),fe=22,Qe=[1,2,5,10,20,50,100,200,500,1e3];function qn(t,a=64){const o=t*3.7795275590551185;for(const n of Qe)if(n*o>=a)return n;return Qe[Qe.length-1]}function Wn(t){const a=Math.floor(Math.log10(t)+1e-9),o=t/10**a;return o===5||o===1&&t>=10?t/5:o===2?t/2:null}function Yn(t){return Math.round(t*1e3)/1e3}function Kn(t,a,o){if(a<t||o<=0)return[];const l=Wn(o)??o,r=Math.ceil(t/l-1e-9)*l,i=Math.floor((a-r)/l+1e-9),s=[];for(let c=0;c<=i;c++){const d=Yn(r+c*l);Math.abs(d/o-Math.round(d/o))<1e-6?s.push({mm:d,major:!0,label:String(d)}):s.push({mm:d,major:!1})}return s}function Xn(t,a){const o=e.ref(!1),n=e.ref(null);let l=0,r=0,i=0,s=0,c=!1;function d(D){if(a.disabled)return;const $=D.target;if(!($ instanceof HTMLElement)||$.classList.contains("resize-handle"))return;o.value=!0,c=D.altKey,l=D.clientX,r=D.clientY;const R=t.value;R&&(i=parseFloat(R.style.left)||0,s=parseFloat(R.style.top)||0,n.value={left:i,top:s,width:parseFloat(R.style.width)||0,height:parseFloat(R.style.height)||0},a.onStart?.({altKey:c}),document.addEventListener("mousemove",v),document.addEventListener("mouseup",w),D.preventDefault())}function p(D){const $=a.getScale?.()??1;let R=i+(D.clientX-l)/$,W=s+(D.clientY-r)/$;if(a.axis==="x"&&(W=s),a.axis==="y"&&(R=i),a.onAdsorb){const J=t.value;if(J){const A=parseFloat(J.style.width)||0,G=parseFloat(J.style.height)||0,K=a.onAdsorb({left:R,top:W,width:A,height:G});R=K.left,W=K.top}}return{left:R,top:W}}function v(D){const $=p(D);n.value&&(n.value.left=$.left,n.value.top=$.top),a.onDrag($)}function w(D){o.value=!1;const $=p(D);a.onDragEnd?.($,{altKey:c}),a.onStop?.(),n.value=null,document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",w)}function L(){const D=t.value;D&&D.removeEventListener("mousedown",d),document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",w)}function H(){L();const D=t.value;D&&D.addEventListener("mousedown",d)}return{isDragging:o,dragPreview:n,setup:H,cleanup:L}}const jn=["nw","n","ne","e","se","s","sw","w"];function Jn(t,a,o,n,l,r){let{left:i,top:s,width:c,height:d}=a;switch(t){case"e":c=Math.max(l,a.width+o);break;case"w":c=Math.max(l,a.width-o),i=a.left+a.width-c;break;case"s":d=Math.max(r,a.height+n);break;case"n":d=Math.max(r,a.height-n),s=a.top+a.height-d;break;case"se":c=Math.max(l,a.width+o),d=Math.max(r,a.height+n);break;case"sw":c=Math.max(l,a.width-o),i=a.left+a.width-c,d=Math.max(r,a.height+n);break;case"ne":c=Math.max(l,a.width+o),d=Math.max(r,a.height-n),s=a.top+a.height-d;break;case"nw":c=Math.max(l,a.width-o),i=a.left+a.width-c,d=Math.max(r,a.height-n),s=a.top+a.height-d;break}return{left:i,top:s,width:c,height:d}}function Zn(t){let a=0,o=0,n={left:0,top:0,width:0,height:0},l=null;function r(d,p){l=d,a=p.clientX,o=p.clientY,n={...t.getRect()},t.onStart?.(),document.addEventListener("mousemove",i),document.addEventListener("mouseup",s),p.preventDefault()}function i(d){if(!l)return;const p=t.getScale?.()||1,v=(d.clientX-a)/p,w=(d.clientY-o)/p,L=t.minWidth||20,H=t.minHeight||20;t.onResize(Jn(l,n,v,w,L,H))}function s(){l=null,t.onStop?.(),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",s)}function c(){document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",s)}return{startResize:r,cleanup:c}}const Qn=e.defineComponent({__name:"TextElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(t){const a=t,o={top:"flex-start",middle:"center",bottom:"flex-end"},n={left:"flex-start",center:"center",right:"flex-end"},l=e.computed(()=>{const i=a.element.options;return{fontSize:(i.fontSize||12)+"pt",fontWeight:i.fontWeight||"normal",fontFamily:i.fontFamily||"inherit",color:i.color||"#333",backgroundColor:i.backgroundColor||"transparent",textAlign:i.textAlign||"left",lineHeight:i.lineHeight?i.lineHeight+"pt":"normal",letterSpacing:i.letterSpacing?i.letterSpacing+"pt":"normal",textDecoration:i.textDecoration||"none",padding:`${i.contentPaddingTop||0}pt ${i.contentPaddingRight||0}pt ${i.contentPaddingBottom||0}pt ${i.contentPaddingLeft||0}pt`,width:"100%",height:"100%",boxSizing:"border-box",overflow:"hidden",...i.verticalAlign?{display:"flex",alignItems:o[i.verticalAlign]??"flex-start",justifyContent:n[i.textAlign||"left"]??"flex-start"}:{}}}),r=e.computed(()=>a.designMode?a.element.options.testData?a.element.options.testData:a.element.options.formatter||"文本":We(a.element.options,a.data));return(i,s)=>(e.openBlock(),e.createElementBlock("div",{class:"print-text",style:e.normalizeStyle(l.value)},e.toDisplayString(r.value),5))}}),_n={class:"print-image"},el=["src"],tl={key:1,class:"image-placeholder"},ol=e.defineComponent({__name:"ImageElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(t){const a=t,o=e.computed(()=>{const i=a.element.options.src||"";return i?i.includes("{")?a.designMode?$e(i,ge):$e(i,a.data?.[0]||{}):i:""}),n=e.ref(!1);function l(){n.value=!0}e.watch(o,()=>{n.value=!1});const r=e.computed(()=>({objectFit:a.element.options.fit||"contain"}));return(i,s)=>(e.openBlock(),e.createElementBlock("div",_n,[o.value&&!n.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:o.value,style:e.normalizeStyle(r.value),onError:l},null,44,el)):(e.openBlock(),e.createElementBlock("div",tl,"图片"))]))}}),nl=_(ol,[["__scopeId","data-v-530ee54f"]]),ll=e.defineComponent({__name:"LongTextElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(t){const a=t,o={top:"flex-start",middle:"center",bottom:"flex-end"},n={left:"flex-start",center:"center",right:"flex-end"},l=e.computed(()=>{const i=a.element.options;return{fontSize:(i.fontSize||12)+"pt",fontWeight:i.fontWeight||"normal",fontFamily:i.fontFamily||"inherit",color:i.color||"#333",backgroundColor:i.backgroundColor||"transparent",textAlign:i.textAlign||"left",lineHeight:i.lineHeight?i.lineHeight+"pt":"1.5",letterSpacing:i.letterSpacing?i.letterSpacing+"pt":"normal",textIndent:i.longTextIndent?i.longTextIndent+"pt":"0",width:"100%",height:"100%",overflow:"hidden",wordBreak:"break-all",boxSizing:"border-box",...i.verticalAlign?{display:"flex",alignItems:o[i.verticalAlign]??"flex-start",justifyContent:n[i.textAlign||"left"]??"flex-start"}:{}}}),r=e.computed(()=>a.designMode?a.element.options.formatter?a.element.options.formatter:"长文本内容":We(a.element.options,a.data));return(i,s)=>(e.openBlock(),e.createElementBlock("div",{class:"print-longtext",style:e.normalizeStyle(l.value)},e.toDisplayString(r.value),5))}}),al=["title"],il=["title","onClick"],rl=e.defineComponent({__name:"TableContextMenu",props:{visible:{type:Boolean},x:{},y:{},canDeleteRow:{type:Boolean},canDeleteCol:{type:Boolean},mergeDisabledReason:{},canSplit:{type:Boolean},currentRowType:{},rowTypeDisabledReason:{type:Function}},emits:["action"],setup(t,{emit:a}){const o=[{value:"header",label:"标题行"},{value:"data",label:"数据行"},{value:"subtotal",label:"小计行"},{value:"summary",label:"汇总行"}],n=a;function l(r,i){n("action",r,i)}return(r,i)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[t.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"table-ctx-menu",style:e.normalizeStyle({left:t.x+"px",top:t.y+"px"}),onMousedown:i[8]||(i[8]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",{class:"menu-item",onClick:i[0]||(i[0]=s=>l("insert-row-above"))},"在上方插入行"),e.createElementVNode("div",{class:"menu-item",onClick:i[1]||(i[1]=s=>l("insert-row-below"))},"在下方插入行"),e.createElementVNode("div",{class:e.normalizeClass(["menu-item",{disabled:!t.canDeleteRow}]),onClick:i[2]||(i[2]=s=>t.canDeleteRow&&l("delete-row"))}," 删除行 ",2),i[9]||(i[9]=e.createElementVNode("div",{class:"menu-divider"},null,-1)),e.createElementVNode("div",{class:"menu-item",onClick:i[3]||(i[3]=s=>l("insert-col-left"))},"在左侧插入列"),e.createElementVNode("div",{class:"menu-item",onClick:i[4]||(i[4]=s=>l("insert-col-right"))},"在右侧插入列"),e.createElementVNode("div",{class:e.normalizeClass(["menu-item",{disabled:!t.canDeleteCol}]),onClick:i[5]||(i[5]=s=>t.canDeleteCol&&l("delete-col"))}," 删除列 ",2),i[10]||(i[10]=e.createElementVNode("div",{class:"menu-divider"},null,-1)),e.createElementVNode("div",{class:e.normalizeClass(["menu-item",{disabled:!!t.mergeDisabledReason}]),title:t.mergeDisabledReason||"",onClick:i[6]||(i[6]=s=>!t.mergeDisabledReason&&l("merge"))}," 合并单元格 ",10,al),e.createElementVNode("div",{class:e.normalizeClass(["menu-item",{disabled:!t.canSplit}]),onClick:i[7]||(i[7]=s=>t.canSplit&&l("split"))}," 拆分单元格 ",2),i[11]||(i[11]=e.createElementVNode("div",{class:"menu-divider"},null,-1)),i[12]||(i[12]=e.createElementVNode("div",{class:"menu-group-title"},"行类型",-1)),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(o,s=>e.createElementVNode("div",{key:s.value,class:e.normalizeClass(["menu-item",{disabled:!!t.rowTypeDisabledReason(s.value),active:t.currentRowType===s.value}]),title:t.rowTypeDisabledReason(s.value)||"",onClick:c=>!t.rowTypeDisabledReason(s.value)&&l("set-row-type",s.value)},e.toDisplayString(s.label),11,il)),64))],36)):e.createCommentVNode("",!0)]))}}),sl=_(rl,[["__scopeId","data-v-3f0b28d4"]]),dl={class:"cell-barcode"},cl=["src"],ul={key:1,class:"cell-barcode-fallback"},ml=e.defineComponent({__name:"CellBarcode",props:{cellType:{},value:{},barcodeType:{},qrCodeLevel:{},showText:{type:Boolean},fit:{},maxWidth:{},maxHeight:{}},setup(t){const a=t,o=e.ref(null),n=e.ref(!1),l=e.ref(""),r=e.computed(()=>({objectFit:a.fit||"contain",maxWidth:a.maxWidth?`${a.maxWidth}mm`:"100%",maxHeight:a.maxHeight?`${a.maxHeight}mm`:"100%"})),i=e.computed(()=>({objectFit:a.fit||"contain",maxWidth:a.maxWidth?`${a.maxWidth}mm`:"100%",maxHeight:a.maxHeight?`${a.maxHeight}mm`:"100%"}));function s(){if(n.value=!1,!!o.value)try{it(o.value,a.value,{format:a.barcodeType||"CODE128",width:1,height:28,displayValue:a.showText!==!1,fontSize:9,margin:0}),n.value=!0}catch{}}async function c(){if(!a.value){l.value="";return}try{l.value=await rt.toDataURL(a.value,{width:96,margin:1,errorCorrectionLevel:a.qrCodeLevel||"M"})}catch{l.value=""}}function d(){a.cellType==="barcode"?s():c()}return e.onMounted(d),e.watch(()=>[a.cellType,a.value,a.barcodeType,a.qrCodeLevel,a.showText],d),(p,v)=>(e.openBlock(),e.createElementBlock("div",dl,[e.withDirectives((e.openBlock(),e.createElementBlock("svg",{ref_key:"barcodeSvg",ref:o,preserveAspectRatio:"xMidYMid meet",style:e.normalizeStyle(r.value)},null,4)),[[e.vShow,t.cellType==="barcode"&&n.value]]),t.cellType==="qrcode"&&l.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:l.value,alt:"qrcode",style:e.normalizeStyle(i.value)},null,12,cl)):e.createCommentVNode("",!0),!n.value&&t.cellType==="barcode"?(e.openBlock(),e.createElementBlock("span",ul,e.toDisplayString(t.value||"条码"),1)):e.createCommentVNode("",!0)]))}}),pl=_(ml,[["__scopeId","data-v-612f4008"]]),fl={class:"cell-image"},vl=["src"],gl={key:1,class:"image-placeholder"},hl=e.defineComponent({__name:"CellImage",props:{value:{},fit:{},maxWidth:{},maxHeight:{},designMode:{type:Boolean},data:{}},setup(t){const a=t,o=e.computed(()=>{const i=a.value||"";return i?i.includes("{")?a.designMode?$e(i,ge):$e(i,a.data?.[0]||{}):i:""}),n=e.ref(!1);function l(){n.value=!0}e.watch(o,()=>{n.value=!1});const r=e.computed(()=>({objectFit:a.fit||"contain",maxWidth:a.maxWidth?`${a.maxWidth}mm`:"100%",maxHeight:a.maxHeight?`${a.maxHeight}mm`:"100%"}));return(i,s)=>(e.openBlock(),e.createElementBlock("div",fl,[o.value&&!n.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:o.value,style:e.normalizeStyle(r.value),onError:l},null,44,vl)):(e.openBlock(),e.createElementBlock("div",gl,"图片"))]))}}),bl=_(hl,[["__scopeId","data-v-7f838bbb"]]),yl=["rowspan","colspan","onMousedown","onMouseenter","onDblclick","onContextmenu"],kl={key:2,class:"data-placeholder"},El={key:0,class:"col-resize-layer"},wl=["aria-label","onMousedown"],Vl={key:1,class:"row-badges"},Ue=3.7795275591,Nl=.1,Cl=e.defineComponent({__name:"TableElement",props:{element:{},designMode:{type:Boolean},isSelected:{type:Boolean},showTableGhostBorder:{type:Boolean},scale:{},data:{}},emits:["dblclick-element","dblclick-cell"],setup(t,{emit:a}){const o={header:"题",data:"数",subtotal:"小",summary:"汇"},n=t,l=a,r=e.inject(Pe,{tableSelection:e.ref(null),setTableSelection:()=>{},recordHistory:()=>{},maxTableWidth:e.ref(1/0)}),i=e.computed(()=>n.element.options.tableRows??[]),s=e.computed(()=>n.element.options.tableColWidths??[]),c=e.computed(()=>n.element.options.tableDefaultFontSize??10),d=e.computed(()=>n.element.options.tableDefaultColor??"#333333"),p=e.computed(()=>{const h=r.tableSelection.value;return h&&h.elementId===n.element.id?h:null});function v(h){let C=0;for(let N=0;N<h;N++)C+=i.value[N].height;return C}const w=e.ref(null),L=e.ref([]);function H(){if(!n.designMode)return;const h=w.value;if(!h)return;const C=h.offsetHeight;if(C<=0)return;const N=n.element.options,y=C/Ue;Math.abs(y-(N.height??0))>Nl&&(N.height=Math.round(y*100)/100);const b=h.offsetTop;L.value=Array.from(h.rows).map(F=>({top:(F.offsetTop-b)/Ue,height:F.offsetHeight/Ue}))}function D(h){return L.value[h]?.top??v(h)}function $(h){return L.value[h]?.height??i.value[h]?.height??0}e.watch(()=>[n.element.options,n.designMode],()=>H(),{deep:!0,flush:"post"}),e.onMounted(()=>{H(),document.fonts?.ready.then(()=>H())});const R=e.computed(()=>{const h=n.element.options.dataSource;if(h&&Array.isArray(ge[h]))return ge[h];for(const C of Object.values(ge))if(Array.isArray(C))return C}),W=e.computed(()=>{if(n.data)return n.data});function J(h){return h.cellType==="barcode"||h.cellType==="qrcode"}function A(h,C){return J(C)?ko(C.formatter,R.value):C.formatter||""}function G(h,C){const N=n.element.options,y={designMode:n.designMode,showGhostBorder:n.showTableGhostBorder};return{fontFamily:C.fontFamily||"inherit",textAlign:C.align??"left",verticalAlign:C.valign??"middle",fontSize:(C.fontSize??c.value)+"pt",fontWeight:C.fontWeight??"normal",color:C.color??d.value,backgroundColor:C.backgroundColor??"transparent",borderTop:He(C.borders?.top,y),borderRight:He(C.borders?.right,y),borderBottom:He(C.borders?.bottom,y),borderLeft:He(C.borders?.left,y),padding:(C.padding??N.tableDefaultPadding??1)+"mm",whiteSpace:C.wordWrap??!0?"normal":"nowrap",overflow:C.wordWrap??!0?"visible":"hidden"}}function K(h,C){const N=p.value;return{"cell-selected":!!N&&h>=N.r1&&h<=N.r2&&C>=N.c1&&C<=N.c2,"row-data-bg":i.value[h].type==="data"}}const S=e.ref(null);function M(h,C){const N=xt(i.value,h,C);r.setTableSelection({elementId:n.element.id,...N})}function x(h,C,N){!n.designMode||!n.isSelected||(N.stopPropagation(),N.shiftKey&&p.value?M({r:p.value.r1,c:p.value.c1},{r:h,c:C}):(S.value={r:h,c:C},M({r:h,c:C},{r:h,c:C})),window.addEventListener("mouseup",()=>{S.value=null},{once:!0}))}function B(h,C){S.value&&M(S.value,{r:h,c:C})}function T(h,C){n.designMode&&l("dblclick-cell",n.element.id,h,C)}const z=e.reactive({visible:!1,x:0,y:0});function u(h,C,N){if(!n.designMode||!n.isSelected)return;const y=p.value;y&&h>=y.r1&&h<=y.r2&&C>=y.c1&&C<=y.c2||M({r:h,c:C},{r:h,c:C}),z.x=N.clientX,z.y=N.clientY,z.visible=!0,window.addEventListener("mousedown",()=>{z.visible=!1},{once:!0})}const V=e.computed(()=>{const h=p.value;return h?Bt(i.value,h):"未选择单元格"}),O=e.computed(()=>{const h=p.value;if(!h)return!1;for(let C=h.r1;C<=h.r2;C++)for(let N=h.c1;N<=h.c2;N++){const y=i.value[C].cells[N];if(!y.merged&&((y.rowspan??1)>1||(y.colspan??1)>1))return!0}return!1});function X(h){const C=p.value;if(!C)return"未选择单元格";if(C.r1!==C.r2)return"行类型仅支持单行设置";const N=JSON.parse(JSON.stringify(i.value));return ot(N,C.r1,h)}function Z(){qe(n.element.options)}function j(h,C){const N=r.maxTableWidth.value,y=h.reduce((b,F)=>b+F,0)+h[C];return y>N?`插入后表格总宽 ${Math.round(y*10)/10}mm 超过打印范围宽度 ${N}mm,请先缩小列宽`:null}function ce(h,C){const N=p.value;if(!N)return;z.visible=!1;const y=n.element.options,b=y.tableRows,F=y.tableColWidths;let Y=null;switch(h){case"insert-row-above":gt(b,N.r1,"above");break;case"insert-row-below":gt(b,N.r2,"below");break;case"delete-row":Y=co(b,N.r1);break;case"insert-col-left":Y=j(F,N.c1),Y||ht(b,F,N.c1,"left");break;case"insert-col-right":Y=j(F,N.c2),Y||ht(b,F,N.c2,"right");break;case"delete-col":Y=uo(b,F,N.c1);break;case"merge":Dt(b,N);break;case"split":Tt(b,N);break;case"set-row-type":Y=ot(b,N.r1,C);break}if(Y){alert(Y);return}r.setTableSelection(null),Z(),r.recordHistory()}const ie=e.computed(()=>n.designMode&&!!n.isSelected&&!n.element.options.locked&&s.value.length>=1),se=e.computed(()=>Array.from({length:s.value.length},(h,C)=>C+1));function le(h){return s.value.slice(0,h).reduce((C,N)=>C+N,0)}const P=e.ref(null);let g=0,E=0;function f(h,C){ie.value&&(P.value=h,g=C.clientX,E=s.value[h-1],document.addEventListener("mousemove",m),document.addEventListener("mouseup",k))}function m(h){if(P.value===null)return;const C=n.scale||1,N=(h.clientX-g)/(C*Ue),y=P.value-1,b=n.element.options.tableColWidths;b[y]=fo(b,y,E+N,r.maxTableWidth.value),Z()}function k(){document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",k),P.value!==null&&(P.value=null,Z(),r.recordHistory())}return e.onUnmounted(()=>{document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",k)}),(h,C)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["print-table",{"design-mode":t.designMode}]),onContextmenu:C[0]||(C[0]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("table",{ref_key:"tableRef",ref:w,style:e.normalizeStyle({fontSize:c.value+"pt",color:d.value})},[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,(N,y)=>(e.openBlock(),e.createElementBlock("col",{key:y,style:e.normalizeStyle({width:N+"mm"})},null,4))),128))]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,(N,y)=>(e.openBlock(),e.createElementBlock("tr",{key:N.id,style:e.normalizeStyle({height:N.height+"mm"})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.cells,(b,F)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.id},[b.merged?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("td",{key:0,rowspan:b.rowspan||1,colspan:b.colspan||1,class:e.normalizeClass(K(y,F)),style:e.normalizeStyle(G(N,b)),onMousedown:e.withModifiers(Y=>x(y,F,Y),["left"]),onMouseenter:Y=>B(y,F),onDblclick:e.withModifiers(Y=>T(y,F),["stop"]),onContextmenu:e.withModifiers(Y=>u(y,F,Y),["prevent","stop"])},[J(b)?(e.openBlock(),e.createBlock(pl,{key:0,"cell-type":b.cellType,value:A(N,b),"barcode-type":b.barcodeType,"qr-code-level":b.qrCodeLevel,"show-text":b.showBarcodeText,fit:b.fit,"max-width":b.maxWidth,"max-height":b.maxHeight},null,8,["cell-type","value","barcode-type","qr-code-level","show-text","fit","max-width","max-height"])):b.cellType==="image"?(e.openBlock(),e.createBlock(bl,{key:1,value:b.formatter||"",fit:b.fit,"max-width":b.maxWidth,"max-height":b.maxHeight,"design-mode":t.designMode,data:W.value},null,8,["value","fit","max-width","max-height","design-mode","data"])):N.type==="data"?(e.openBlock(),e.createElementBlock("span",kl,e.toDisplayString(A(N,b)),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createTextVNode(e.toDisplayString(A(N,b)),1)],64))],46,yl))],64))),128))],4))),128))])],4),ie.value?(e.openBlock(),e.createElementBlock("div",El,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(se.value,N=>(e.openBlock(),e.createElementBlock("div",{key:N,class:e.normalizeClass(["col-resize-handle",{dragging:P.value===N}]),role:"separator","aria-label":"列宽手柄"+N,style:e.normalizeStyle({left:le(N)+"mm"}),onMousedown:e.withModifiers(y=>f(N,y),["stop","prevent"])},null,46,wl))),128))])):e.createCommentVNode("",!0),t.designMode&&t.isSelected?(e.openBlock(),e.createElementBlock("div",Vl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,(N,y)=>(e.openBlock(),e.createElementBlock("span",{key:N.id,class:"row-badge",style:e.normalizeStyle({top:D(y)+"mm",height:$(y)+"mm"})},e.toDisplayString(o[N.type]),5))),128))])):e.createCommentVNode("",!0),e.createVNode(sl,{visible:z.visible,x:z.x,y:z.y,"can-delete-row":i.value.length>1,"can-delete-col":s.value.length>1,"merge-disabled-reason":V.value,"can-split":O.value,"current-row-type":p.value?i.value[p.value.r1]?.type??null:null,"row-type-disabled-reason":X,onAction:ce},null,8,["visible","x","y","can-delete-row","can-delete-col","merge-disabled-reason","can-split","current-row-type"])],34))}}),Sl=_(Cl,[["__scopeId","data-v-980bb07d"]]),Et=e.defineComponent({__name:"LineElement",props:{element:{}},setup(t){const a=t,o=e.computed(()=>a.element.printElementType.type==="hline"),n=e.computed(()=>{const l=a.element.options,r=(l.borderWidth||.75)+"pt",i=l.borderStyle||"solid",s=l.borderColor||"#333";return o.value?{width:"100%",height:"0",borderTop:`${r} ${i} ${s}`,boxSizing:"border-box"}:{width:"0",height:"100%",borderLeft:`${r} ${i} ${s}`,boxSizing:"border-box"}});return(l,r)=>(e.openBlock(),e.createElementBlock("div",{class:"print-line",style:e.normalizeStyle(n.value)},null,4))}}),wt=e.defineComponent({__name:"ShapeElement",props:{element:{}},setup(t){const a=t,o=e.computed(()=>a.element.printElementType.type==="oval"),n=e.computed(()=>{const l=a.element.options;return{width:"100%",height:"100%",borderWidth:(l.borderWidth||1)+"pt",borderStyle:l.borderStyle||"solid",borderColor:l.borderColor||"#333",backgroundColor:l.backgroundColor||"transparent",borderRadius:o.value?"50%":"0",boxSizing:"border-box"}});return(l,r)=>(e.openBlock(),e.createElementBlock("div",{class:"print-shape",style:e.normalizeStyle(n.value)},null,4))}}),Ml={class:"print-barcode",ref:"containerRef"},$l=96/25.4,xl=e.defineComponent({__name:"BarcodeElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(t){const a=t,o=e.ref(null);function n(){if(!o.value)return;const l=a.element.options,r=(a.designMode?l.testData||l.formatter:We(l,a.data))||"条码",i=!l.hideTitle,s=(l.fontSize||12)*(96/72),c=(l.height||40)*$l,d=i?s+4:0,p=Math.max(8,c-d);try{it(o.value,r,{format:l.barcodeType||"CODE128",width:l.barWidth?l.barWidth/2:1,height:p,displayValue:i,fontSize:s,margin:2})}catch{}}return e.onMounted(n),e.watch(()=>[a.element.options.formatter,a.element.options.testData,a.element.options.barcodeType,a.element.options.width,a.element.options.height,a.element.options.barWidth,a.element.options.hideTitle,a.element.options.fontSize],n),(l,r)=>(e.openBlock(),e.createElementBlock("div",Ml,[(e.openBlock(),e.createElementBlock("svg",{ref_key:"svgRef",ref:o,preserveAspectRatio:"xMidYMid meet"},null,512))],512))}}),Bl=_(xl,[["__scopeId","data-v-a71e7c44"]]),Dl={class:"print-qrcode"},Tl=["src"],zl=e.defineComponent({__name:"QrcodeElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(t){const a=t,o=e.ref("");async function n(){const l=a.element.options,r=(a.designMode?l.testData||l.formatter:We(l,a.data))||"二维码",i=Math.min(l.width||80,l.height||80);try{o.value=await rt.toDataURL(r,{width:i,margin:1,errorCorrectionLevel:String(l.qrCodeLevel??"M")})}catch{o.value=""}}return e.onMounted(n),e.watch(()=>[a.element.options.formatter,a.element.options.testData],n),(l,r)=>(e.openBlock(),e.createElementBlock("div",Dl,[o.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:o.value,alt:"qrcode"},null,8,Tl)):e.createCommentVNode("",!0)]))}}),Ll=_(zl,[["__scopeId","data-v-90b31b7e"]]),Pl=["innerHTML"],Al=e.defineComponent({__name:"HtmlElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(t){const a=t,o=e.computed(()=>{if(a.element.options.formatter){const n=a.data&&a.data.length>0?a.data[0]:{},l=$e(a.element.options.formatter,n??{});return l?oo.sanitize(l):""}return'<div style="background:#e0e0e0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:10pt;color:#999">HTML</div>'});return(n,l)=>(e.openBlock(),e.createElementBlock("div",{class:"print-html",innerHTML:o.value},null,8,Pl))}}),Il=_(Al,[["__scopeId","data-v-f0a224c2"]]),Rl=e.defineComponent({__name:"PageNumberElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(t){const a=t,o=e.computed(()=>{const l=a.element.options;return{fontSize:(l.fontSize||12)+"pt",fontWeight:l.fontWeight||"normal",fontFamily:l.fontFamily||"inherit",color:l.color||"#333",textAlign:l.textAlign||"left",lineHeight:l.lineHeight?l.lineHeight+"pt":"normal",letterSpacing:l.letterSpacing?l.letterSpacing+"pt":"normal"}}),n=e.computed(()=>a.designMode?a.element.options.title||"{pageIndex}/{totalPages}":a.element.options.title||"");return(l,r)=>(e.openBlock(),e.createElementBlock("div",{class:"page-number-element",style:e.normalizeStyle(o.value)},e.toDisplayString(n.value),5))}}),Hl=_(Rl,[["__scopeId","data-v-c3750ca3"]]),Fl={key:0,class:"drag-preview"},Ul={key:1,class:"resize-handles"},Ol=["onMousedown"],Gl={key:2,class:"selected-indicator"},ql={class:"position-label"},Wl=e.defineComponent({__name:"BaseElement",props:{element:{},isSelected:{type:Boolean},designMode:{type:Boolean},printData:{},scale:{},allElements:{},snapToGrid:{type:Boolean},showTableGhostBorder:{type:Boolean},zone:{},adsorbHandler:{type:Function},clearAdsorbGuides:{type:Function}},emits:["select","update:element","drag-start","drag-stop","dblclick-element","dblclick-cell","contextmenu","clone-element"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(null),r=e.inject(It,null),i=e.computed(()=>r?.value?r.value.has(o.element.id):o.isSelected??!1),s=e.inject(Rt,null),c=e.computed(()=>s?.value.has(o.element.id)??!1),d={text:e.markRaw(Qn),image:e.markRaw(nl),longText:e.markRaw(ll),table:e.markRaw(Sl),hline:e.markRaw(Et),vline:e.markRaw(Et),rect:e.markRaw(wt),oval:e.markRaw(wt),barcode:e.markRaw(Bl),qrcode:e.markRaw(Ll),html:e.markRaw(Il),pageNumber:e.markRaw(Hl)},p=e.computed(()=>d[o.element.printElementType.type]),v=e.computed(()=>o.element.printElementType.type==="table"?{showTableGhostBorder:o.showTableGhostBorder,scale:o.scale}:{}),w=e.computed(()=>{const T=o.element.options;return{position:"absolute",left:T.left+"mm",top:T.top+"mm",width:T.width+"mm",height:T.height+"mm",zIndex:T.zIndex||"auto"}}),L=e.computed(()=>{const T=o.element.options;return`x:${Math.round(T.left)} y:${Math.round(T.top)} ${Math.round(T.width)}×${Math.round(T.height)}mm`});let H=0,D=0;const $=e.reactive({disabled:!o.designMode||!!o.element.options.locked,getScale:()=>(o.scale||1)*he(1),onDrag:T=>{const z=T.left-H,u=T.top-D;l.value&&(l.value.style.transform=`translate(${z}mm, ${u}mm)`)},onDragEnd:(T,z)=>{if(z.altKey){const O=JSON.parse(JSON.stringify(o.element));O.id=Me(),O.options.left=T.left,O.options.top=T.top,n("clone-element",O,{left:T.left,top:T.top}),l.value&&(l.value.style.transform="");return}const u=T.left-H,V=T.top-D;if(o.element.options.left=T.left,o.element.options.top=T.top,l.value&&(l.value.style.transform=""),o.element.options.groupId&&o.allElements)for(const O of o.allElements)O.id!==o.element.id&&O.options.groupId===o.element.options.groupId&&(O.options.left+=u,O.options.top+=V)},onStart:()=>{H=o.element.options.left,D=o.element.options.top,n("select",o.element.id,!1),n("drag-start")},onStop:()=>{o.clearAdsorbGuides?.(),n("drag-stop")},onAdsorb:T=>{let z=T.left,u=T.top;return o.snapToGrid&&(z=Math.round(T.left/5)*5,u=Math.round(T.top/5)*5),o.adsorbHandler?o.adsorbHandler({id:o.element.id,left:z,top:u,width:o.element.options.width,height:o.element.options.height}):{left:z,top:u,lines:[]}}}),{setup:R,cleanup:W,isDragging:J}=Xn(l,$);e.watchEffect(()=>{$.disabled=!o.designMode||!!o.element.options.locked});const A=e.computed(()=>i.value&&!!o.designMode&&!o.element.options.locked&&o.element.printElementType.type!=="table"),{startResize:G,cleanup:K}=Zn({minWidth:3.5,minHeight:3.5,getScale:()=>(o.scale||1)*he(1),getRect:()=>({left:o.element.options.left,top:o.element.options.top,width:o.element.options.width,height:o.element.options.height}),onResize:T=>{o.element.options.left=T.left,o.element.options.top=T.top,o.element.options.width=T.width,o.element.options.height=T.height},onStart:()=>{n("drag-start")},onStop:()=>{n("drag-stop")}});function S(T){o.designMode&&n("select",o.element.id,T.ctrlKey||T.metaKey)}function M(){o.designMode&&n("dblclick-element",o.element.id)}function x(T,z,u){o.designMode&&n("dblclick-cell",T,z,u)}e.onMounted(()=>{o.designMode&&R()});function B(){W(),K(),o.clearAdsorbGuides?.()}return e.onUnmounted(()=>{B()}),(T,z)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"elRef",ref:l,class:e.normalizeClass(["print-element",{selected:i.value,previewed:c.value,"design-mode":t.designMode,locked:t.element.options.locked,hidden:t.element.options.visible===!1,"drag-ghost":e.unref(J),[`type-${t.element.printElementType.type}`]:!0,[`zone-${t.zone||"content"}`]:!0}]),style:e.normalizeStyle(w.value),onMousedown:e.withModifiers(S,["stop"]),onDblclick:e.withModifiers(M,["stop"]),onContextmenu:z[0]||(z[0]=e.withModifiers(u=>T.$emit("contextmenu",t.element.id,u),["prevent","stop"]))},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(p.value),e.mergeProps({element:t.element,data:t.printData,"design-mode":t.designMode,"is-selected":i.value},v.value,{onDblclickCell:x}),null,16,["element","data","design-mode","is-selected"])),e.unref(J)?(e.openBlock(),e.createElementBlock("div",Fl)):e.createCommentVNode("",!0),A.value?(e.openBlock(),e.createElementBlock("div",Ul,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(jn),u=>(e.openBlock(),e.createElementBlock("div",{key:u,class:e.normalizeClass(["resize-handle",`handle-${u}`]),onMousedown:e.withModifiers(V=>e.unref(G)(u,V),["stop"])},null,42,Ol))),128))])):e.createCommentVNode("",!0),i.value&&t.designMode?(e.openBlock(),e.createElementBlock("div",Gl,[e.createElementVNode("div",ql,e.toDisplayString(L.value),1)])):e.createCommentVNode("",!0)],38))}}),_e=_(Wl,[["__scopeId","data-v-64c495e7"]]);function Yl(t={}){const a=t.adsorbMin??1,o=t.adsorbLineMin??2,n=t.showAdsorbLine??!0,l=e.ref([]),r=e.ref({width:0,height:0}),i={left:"#3b82f6",center:"#10b981",right:"#f59e0b",top:"#3b82f6",middle:"#10b981",bottom:"#f59e0b"};function s(v){return v==="vCenter"?i.center:v==="hCenter"?i.middle:i[v]??i.left}function c(v,w,L){let H=v.left,D=v.top;const $=[],R={left:v.left,right:v.left+v.width,vCenter:v.left+v.width/2,top:v.top,bottom:v.top+v.height,hCenter:v.top+v.height/2};let W=1/0;for(const A of w){if(A.id===v.id)continue;const G={left:A.left,right:A.left+A.width,vCenter:A.left+A.width/2,top:A.top,bottom:A.top+A.height,hCenter:A.top+A.height/2},K=[["left","left"],["left","vCenter"],["left","right"],["vCenter","left"],["vCenter","vCenter"],["vCenter","right"],["right","left"],["right","vCenter"],["right","right"]],S=[["top","top"],["top","hCenter"],["top","bottom"],["hCenter","top"],["hCenter","hCenter"],["hCenter","bottom"],["bottom","top"],["bottom","hCenter"],["bottom","bottom"]];for(const[M,x]of K){const B=Math.abs(R[M]-G[x]);B<=a&&B<W&&(W=B,H=v.left+(G[x]-R[M]))}for(const[M,x]of S){const B=Math.abs(R[M]-G[x]);B<=a&&B<W&&(W=B,D=v.top+(G[x]-R[M]))}}if(L){const A={left:H,right:H+v.width,vCenter:H+v.width/2,top:D,bottom:D+v.height,hCenter:D+v.height/2},G=["left","vCenter","right"];for(const S of L.vertical)for(const M of G){const x=Math.abs(A[M]-S);x<=a&&x<W&&(W=x,H=v.left+(S-A[M]))}const K=["top","hCenter","bottom"];for(const S of L.horizontal)for(const M of K){const x=Math.abs(A[M]-S);x<=a&&x<W&&(W=x,D=v.top+(S-A[M]))}}const J={left:H,right:H+v.width,vCenter:H+v.width/2,top:D,bottom:D+v.height,hCenter:D+v.height/2};if(n){const A=new Set;for(const G of w){if(G.id===v.id)continue;const K={left:G.left,right:G.left+G.width,vCenter:G.left+G.width/2,top:G.top,bottom:G.top+G.height,hCenter:G.top+G.height/2},S=[["left","left"],["left","vCenter"],["left","right"],["vCenter","left"],["vCenter","vCenter"],["vCenter","right"],["right","left"],["right","vCenter"],["right","right"]],M=[["top","top"],["top","hCenter"],["top","bottom"],["hCenter","top"],["hCenter","hCenter"],["hCenter","bottom"],["bottom","top"],["bottom","hCenter"],["bottom","bottom"]];for(const[x,B]of S)if(Math.abs(J[x]-K[B])<=o){const z=`v:${K[B]}`;A.has(z)||(A.add(z),$.push({type:"vertical",position:K[B],id:G.id,color:s(x)}))}for(const[x,B]of M)if(Math.abs(J[x]-K[B])<=o){const z=`h:${K[B]}`;A.has(z)||(A.add(z),$.push({type:"horizontal",position:K[B],id:G.id,color:s(x)}))}}}if(L){for(const A of L.vertical)$.some(G=>G.type==="vertical"&&G.position===A)||$.push({type:"vertical",position:A});for(const A of L.horizontal)$.some(G=>G.type==="horizontal"&&G.position===A)||$.push({type:"horizontal",position:A})}return{left:H,top:D,lines:$}}function d(v,w,L){l.value=v,r.value={width:w,height:L}}function p(){l.value=[]}return{check:c,renderLines:d,clearLines:p,guideLines:l,paperSize:r}}function Kl(t){const{check:a,renderLines:o,clearLines:n,guideLines:l,paperSize:r}=Yl(t.config??{adsorbMin:1,adsorbLineMin:2,showAdsorbLine:!0});function i(c){const d=t.getElements().filter(w=>w.id!==c.id).map(w=>({id:w.id,left:w.options.left,top:w.options.top,width:w.options.width,height:w.options.height})),p=a(c,d,t.getGuides?.()),v=t.getPaperSize();return o(p.lines,v.width,v.height),p}function s(){n()}return{requestAdsorb:i,clearGuides:s,guideLines:l,paperSize:r}}const Xl={key:0,class:"zone-label"},jl={key:0,class:"zone-height-tip"},Jl={key:0,class:"zone-label"},Zl={key:0,class:"zone-height-tip"},Ql=["onMousedown","onDblclick"],_l=e.defineComponent({__name:"CanvasPaper",props:{templateData:{},runtimeElements:{},designMode:{type:Boolean},printData:{},scale:{},showGrid:{type:Boolean},snapToGrid:{type:Boolean},showTableGhostBorder:{type:Boolean},guides:{}},emits:["select","drag-start","drag-stop","dblclick-element","dblclick-cell","contextmenu","zone-height-change","zone-height-commit","guide-move","guide-remove","clone-element"],setup(t,{expose:a,emit:o}){const n=t,l=o,r=e.ref(null),i=e.computed(()=>Ee(n.templateData).width),s=e.computed(()=>Ee(n.templateData).height),c=e.computed(()=>`${8/(n.scale||1)}px`),d=e.computed(()=>{const g=n.scale||1,E=he(i.value)*g,f=he(s.value)*g;return{width:E+"px",height:f+"px",position:"relative"}}),p=e.computed(()=>{const g=n.templateData.margins,E=n.templateData.header.height,f=n.templateData.footer.height,m=i.value-g.left-g.right;return{header:{left:g.left,top:g.top,width:m,height:E},content:{left:g.left,top:g.top+E,width:m,height:s.value-g.top-g.bottom-E-f},footer:{left:g.left,top:s.value-g.bottom-f,width:m,height:f}}});function v(g){return{position:"absolute",left:g.left+"mm",top:g.top+"mm",width:g.width+"mm",height:g.height+"mm"}}const w=e.computed(()=>{const g={header:[],footer:[],content:[]};for(const E of n.runtimeElements)E.zone==="header"?g.header.push(E):E.zone==="footer"?g.footer.push(E):g.content.push(E);return g}),L=e.computed(()=>w.value.header),H=e.computed(()=>w.value.footer),D=e.computed(()=>w.value.content);let $="content";const{requestAdsorb:R,clearGuides:W,guideLines:J,paperSize:A}=Kl({getElements:()=>w.value[$],getPaperSize:()=>{const g=p.value[$];return{width:g.width,height:g.height}},getGuides:()=>{const g=[],E=[];for(const f of n.guides??[])f.type==="vertical"?g.push(f.position):E.push(f.position);return{vertical:g,horizontal:E}}});function G(g){$=n.runtimeElements.find(m=>m.id===g.id)?.zone||"content";const f=R(g);return(f.left!==g.left||f.top!==g.top)&&u(f.left+g.width/2,f.top+g.height/2),f}function K(g,E){const f=E.position,m=g.clientX,k=g.clientY,h=n.scale??1,C=25.4/96,N=b=>{const F=(E.type==="vertical"?b.clientX-m:b.clientY-k)/h*C,Y=E.type==="vertical"?i.value:s.value,ae=Math.min(Math.max(f+F,0),Y);l("guide-move",E.id,ae)},y=()=>{window.removeEventListener("mousemove",N),window.removeEventListener("mouseup",y)};window.addEventListener("mousemove",N),window.addEventListener("mouseup",y)}const S=e.computed(()=>({width:i.value+"mm",minHeight:s.value+"mm",background:n.templateData.pageBackground||"var(--pd-paper, #fff)",boxShadow:"var(--pd-shadow-paper, 0 1px 2px rgba(0,0,0,.12), 0 8px 24px rgba(0,0,0,.08))",overflow:"hidden",position:"relative",transform:n.scale?`scale(${n.scale})`:void 0,transformOrigin:"0 0"})),M=e.computed(()=>{const g=n.templateData.margins;return{padding:`${g.top}mm ${g.right}mm ${g.bottom}mm ${g.left}mm`,position:"relative",boxSizing:"border-box",minHeight:s.value+"mm"}}),x=e.computed(()=>({backgroundImage:`url("data:image/svg+xml,${encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M0 .5H20M.5 0V20" fill="none" stroke="rgba(0,0,0,0.08)" stroke-width="1" stroke-dasharray="4 4"/></svg>')}")`,backgroundSize:"5mm 5mm",backgroundPosition:"0 0"}));let B=0,T=null;const z=e.ref(null);function u(g,E){B+=1,z.value={left:g,top:E,key:B},T&&clearTimeout(T),T=setTimeout(()=>{z.value=null},300)}const V=e.computed(()=>{const g=n.templateData.watermark;return g?!g.mode||g.mode==="fixed"?!!g.content&&g.content.trim().length>0:!!g.binding:!1}),O=e.computed(()=>{const g=n.templateData.watermark||{},E=g.color||"#cccccc",f=g.opacity??.15,m=g.rotate??-30;let k=X(g);if(g.timestamp){const h=new Date,C=`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")} ${String(h.getHours()).padStart(2,"0")}:${String(h.getMinutes()).padStart(2,"0")}`;k=k?`${k} ${C}`:C}return{position:"absolute",top:"0",left:"0",width:"100%",height:"100%",pointerEvents:"none",zIndex:"0",overflow:"hidden",opacity:String(f),backgroundImage:Z(k,E,m),backgroundRepeat:"repeat"}});function X(g){if(!g.mode||g.mode==="fixed")return g.content||"";if(g.binding){const E=n.printData?.[0];return E&&E[g.binding]!==void 0&&E[g.binding]!==null?String(E[g.binding]):g.testData||`[${g.binding}]`}return""}function Z(g,E,f){const m=g.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),k=`<svg xmlns="http://www.w3.org/2000/svg" width="260" height="180">
2
- <text x="130" y="90" font-size="16" fill="${E}" text-anchor="middle" dominant-baseline="middle" transform="rotate(${f},130,90)">${m}</text>
3
- </svg>`;return`url("data:image/svg+xml,${encodeURIComponent(k)}")`}const j=e.ref(null);function ce(g,E){le(),j.value={zone:g,startY:E.clientY,startH:n.templateData[g].height},window.addEventListener("mousemove",ie),window.addEventListener("mouseup",se)}function ie(g){if(!j.value)return;const{zone:E,startY:f,startH:m}=j.value,h=(g.clientY-f)/(n.scale||1)*25.4/96,C=E==="header"?h:-h,N=Math.min(100,s.value-n.templateData.margins.top-n.templateData.margins.bottom-(E==="header"?n.templateData.footer.height:n.templateData.header.height)-10),y=Math.min(N,Math.max(0,Math.round((m+C)*10)/10));l("zone-height-change",E,y)}function se(){if(!j.value)return;const g=j.value.zone;j.value=null,window.removeEventListener("mousemove",ie),window.removeEventListener("mouseup",se),l("zone-height-commit",g)}function le(){window.removeEventListener("mousemove",ie),window.removeEventListener("mouseup",se),j.value=null}e.onUnmounted(()=>{le(),T&&clearTimeout(T)});function P(g,E){l("select",g,E)}return a({contentRef:r}),(g,E)=>(e.openBlock(),e.createElementBlock("div",{class:"paper-wrapper",style:e.normalizeStyle(d.value)},[e.createElementVNode("div",{class:"hiprint-printPaper",style:e.normalizeStyle(S.value)},[e.createElementVNode("div",{class:"hiprint-printPaper-content",ref_key:"contentRef",ref:r,style:e.normalizeStyle(M.value)},[t.showGrid&&t.designMode?(e.openBlock(),e.createElementBlock("div",{key:0,class:"grid-bg",style:e.normalizeStyle(x.value)},null,4)):e.createCommentVNode("",!0),z.value?(e.openBlock(),e.createElementBlock("div",{key:z.value.key,class:"snap-indicator",style:e.normalizeStyle({left:z.value.left+"mm",top:z.value.top+"mm"})},null,4)):e.createCommentVNode("",!0),V.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"watermark-layer",style:e.normalizeStyle(O.value)},null,4)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["zone-layer zone-header",{"design-mode":t.designMode}]),style:e.normalizeStyle(v(p.value.header))},[t.designMode?(e.openBlock(),e.createElementBlock("span",Xl,"页眉")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,f=>(e.openBlock(),e.createBlock(_e,{key:f.id,element:f,"design-mode":t.designMode,"print-data":t.printData,scale:t.scale,"all-elements":L.value,"snap-to-grid":t.snapToGrid,"show-table-ghost-border":t.showTableGhostBorder,zone:"header","adsorb-handler":G,"clear-adsorb-guides":e.unref(W),onSelect:P,onDragStart:E[0]||(E[0]=m=>g.$emit("drag-start")),onDragStop:E[1]||(E[1]=m=>g.$emit("drag-stop")),onDblclickElement:E[2]||(E[2]=m=>g.$emit("dblclick-element",m)),onDblclickCell:E[3]||(E[3]=(m,k,h)=>g.$emit("dblclick-cell",m,k,h)),onContextmenu:E[4]||(E[4]=(m,k)=>g.$emit("contextmenu",m,k)),onCloneElement:(m,k)=>g.$emit("clone-element",m,k)},null,8,["element","design-mode","print-data","scale","all-elements","snap-to-grid","show-table-ghost-border","clear-adsorb-guides","onCloneElement"]))),128)),t.designMode?(e.openBlock(),e.createElementBlock("div",{key:1,class:"zone-resize-handle handle-bottom",onMousedown:E[5]||(E[5]=e.withModifiers(f=>ce("header",f),["prevent","stop"]))},[j.value?.zone==="header"?(e.openBlock(),e.createElementBlock("div",jl,e.toDisplayString(t.templateData.header.height.toFixed(1))+"mm ",1)):e.createCommentVNode("",!0)],32)):e.createCommentVNode("",!0)],6),e.createElementVNode("div",{class:e.normalizeClass(["zone-layer zone-content",{"design-mode":t.designMode}]),style:e.normalizeStyle(v(p.value.content))},[t.designMode&&t.templateData.firstPageOverlay.height>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"zone-overlay",style:e.normalizeStyle({height:t.templateData.firstPageOverlay.height+"mm"})},[...E[17]||(E[17]=[e.createElementVNode("span",{class:"zone-label"},"首页叠加",-1)])],4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,f=>(e.openBlock(),e.createBlock(_e,{key:f.id,element:f,"design-mode":t.designMode,"print-data":t.printData,scale:t.scale,"all-elements":D.value,"snap-to-grid":t.snapToGrid,"show-table-ghost-border":t.showTableGhostBorder,zone:"content","adsorb-handler":G,"clear-adsorb-guides":e.unref(W),onSelect:P,onDragStart:E[6]||(E[6]=m=>g.$emit("drag-start")),onDragStop:E[7]||(E[7]=m=>g.$emit("drag-stop")),onDblclickElement:E[8]||(E[8]=m=>g.$emit("dblclick-element",m)),onDblclickCell:E[9]||(E[9]=(m,k,h)=>g.$emit("dblclick-cell",m,k,h)),onContextmenu:E[10]||(E[10]=(m,k)=>g.$emit("contextmenu",m,k)),onCloneElement:(m,k)=>g.$emit("clone-element",m,k)},null,8,["element","design-mode","print-data","scale","all-elements","snap-to-grid","show-table-ghost-border","clear-adsorb-guides","onCloneElement"]))),128))],6),e.createElementVNode("div",{class:e.normalizeClass(["zone-layer zone-footer",{"design-mode":t.designMode}]),style:e.normalizeStyle(v(p.value.footer))},[t.designMode?(e.openBlock(),e.createElementBlock("span",Jl,"页脚")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(H.value,f=>(e.openBlock(),e.createBlock(_e,{key:f.id,element:f,"design-mode":t.designMode,"print-data":t.printData,scale:t.scale,"all-elements":H.value,"snap-to-grid":t.snapToGrid,"show-table-ghost-border":t.showTableGhostBorder,zone:"footer","adsorb-handler":G,"clear-adsorb-guides":e.unref(W),onSelect:P,onDragStart:E[11]||(E[11]=m=>g.$emit("drag-start")),onDragStop:E[12]||(E[12]=m=>g.$emit("drag-stop")),onDblclickElement:E[13]||(E[13]=m=>g.$emit("dblclick-element",m)),onDblclickCell:E[14]||(E[14]=(m,k,h)=>g.$emit("dblclick-cell",m,k,h)),onContextmenu:E[15]||(E[15]=(m,k)=>g.$emit("contextmenu",m,k)),onCloneElement:(m,k)=>g.$emit("clone-element",m,k)},null,8,["element","design-mode","print-data","scale","all-elements","snap-to-grid","show-table-ghost-border","clear-adsorb-guides","onCloneElement"]))),128)),t.designMode?(e.openBlock(),e.createElementBlock("div",{key:1,class:"zone-resize-handle handle-top",onMousedown:E[16]||(E[16]=e.withModifiers(f=>ce("footer",f),["prevent","stop"]))},[j.value?.zone==="footer"?(e.openBlock(),e.createElementBlock("div",Zl,e.toDisplayString(t.templateData.footer.height.toFixed(1))+"mm ",1)):e.createCommentVNode("",!0)],32)):e.createCommentVNode("",!0)],6),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(J),(f,m)=>(e.openBlock(),e.createElementBlock("div",{key:m,class:e.normalizeClass(["adsorb-guide",[`guide-${f.type}`]]),style:e.normalizeStyle(f.type==="vertical"?{left:f.position+"mm",top:"0",height:e.unref(A).height+"mm",borderLeftColor:f.color||"var(--pd-accent-secondary, #f56c6c)"}:{top:f.position+"mm",left:"0",width:e.unref(A).width+"mm",borderTopColor:f.color||"var(--pd-accent-secondary, #f56c6c)"})},null,6))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.guides,f=>(e.openBlock(),e.createElementBlock("div",{key:"mg-"+f.id,class:e.normalizeClass(["manual-guide",[`guide-${f.type}`]]),style:e.normalizeStyle(f.type==="vertical"?{left:f.position+"mm",top:"0",height:s.value+"mm","--guide-hit":c.value}:{top:f.position+"mm",left:"0",width:i.value+"mm","--guide-hit":c.value}),onMousedown:e.withModifiers(m=>K(m,f),["prevent","stop"]),onDblclick:e.withModifiers(m=>f.id&&l("guide-remove",f.id),["prevent","stop"])},null,46,Ql))),128))],4)],4)],4))}}),ea=_(_l,[["__scopeId","data-v-a511ac20"]]),ta=e.defineComponent({__name:"Ruler",props:{orientation:{},viewportPx:{},originPx:{},paperLengthMM:{},scale:{},cursorPx:{}},emits:["add-guide","guide-dragging"],setup(t,{emit:a}){const o=t,n=a,l=e.computed(()=>o.orientation==="horizontal"),r=e.computed(()=>l.value?"vertical":"horizontal"),i=e.ref(null),s=e.ref(null),c=e.computed(()=>s.value??o.cursorPx??null),d=e.computed(()=>l.value?{width:o.viewportPx+"px",height:fe+"px"}:{width:fe+"px",height:o.viewportPx+"px"});let p=0;function v(){p||(p=requestAnimationFrame(()=>{p=0,w()}))}function w(){const S=i.value;if(!S)return;const M=S.getContext("2d");if(!M)return;const x=window.devicePixelRatio||1,B=Math.max(0,Math.round(o.viewportPx)),T=fe;S.width=(l.value?B:T)*x,S.height=(l.value?T:B)*x,M.setTransform(x,0,0,x,0,0);const z=getComputedStyle(S),u=z.getPropertyValue("--pd-ruler-bg").trim()||"#F8F9FC",V=z.getPropertyValue("--pd-ruler").trim()||"#9AA1AF",O=z.getPropertyValue("--pd-accent").trim()||"#165DFF";M.fillStyle=u,M.fillRect(0,0,l.value?B:T,l.value?T:B);const X=o.scale>0?o.scale:1,Z=he(1)*X;if(Z<=0)return;const j=-o.originPx/Z,ce=(B-o.originPx)/Z,ie=qn(X),se=Kn(j,ce,ie);L(M,se,Z,V,!0),L(M,se,Z,V,!1),H(M,0,O),H(M,o.paperLengthMM,O);const le=c.value;if(le!==null&&le>=0&&le<=B){if(M.strokeStyle=O,M.lineWidth=1.5,M.beginPath(),l.value){const P=Math.round(le)+.5;M.moveTo(P,0),M.lineTo(P,T)}else{const P=Math.round(le)+.5;M.moveTo(0,P),M.lineTo(T,P)}M.stroke()}}function L(S,M,x,B,T){S.strokeStyle=B,S.fillStyle=B,S.globalAlpha=T?.32:1,S.lineWidth=1,S.font="9px ui-monospace, Menlo, monospace",S.textBaseline="top";for(const z of M){if((z.mm<0||z.mm>o.paperLengthMM)!==T)continue;const V=Math.round(o.originPx+z.mm*x)+.5,O=z.major?8:4;S.beginPath(),l.value?(S.moveTo(V,0),S.lineTo(V,O)):(S.moveTo(0,V),S.lineTo(O,V)),S.stroke(),z.major&&z.label&&(l.value?S.fillText(z.label,V+2,11):(S.save(),S.translate(11,V+2),S.rotate(-Math.PI/2),S.fillText(z.label,0,0),S.restore()))}S.globalAlpha=1}function H(S,M,x){const B=he(1)*(o.scale>0?o.scale:1),T=Math.round(o.originPx+M*B)+.5;T<=0||T>=o.viewportPx||(S.strokeStyle=x,S.globalAlpha=.55,S.lineWidth=1,S.beginPath(),l.value?(S.moveTo(T,0),S.lineTo(T,fe)):(S.moveTo(0,T),S.lineTo(fe,T)),S.stroke(),S.globalAlpha=1)}e.watch(()=>[o.viewportPx,o.originPx,o.paperLengthMM,o.scale,o.cursorPx,o.orientation],v),e.onMounted(v),e.onBeforeUnmount(()=>{p&&cancelAnimationFrame(p)});let D=!1;function $(S){const M=i.value;if(!M)return null;const x=M.getBoundingClientRect(),B=l.value?S.clientX-x.left:S.clientY-x.top;if(B<0||B>o.viewportPx)return null;const T=he(1)*(o.scale>0?o.scale:1);return(B-o.originPx)/T}function R(S){D=!0,S.preventDefault(),window.addEventListener("mousemove",G),window.addEventListener("mouseup",K),A(S)}function W(S){const M=i.value;if(!M)return;const x=M.getBoundingClientRect();s.value=l.value?S.clientX-x.left:S.clientY-x.top,v()}function J(){s.value=null,v()}function A(S){const M=$(S);n("guide-dragging",M)}function G(S){D&&A(S)}function K(S){if(!D)return;D=!1,window.removeEventListener("mousemove",G),window.removeEventListener("mouseup",K);const M=$(S);M!==null&&M>=0&&M<=o.paperLengthMM&&n("add-guide",r.value,M),n("guide-dragging",null)}return e.onBeforeUnmount(()=>{window.removeEventListener("mousemove",G),window.removeEventListener("mouseup",K)}),(S,M)=>(e.openBlock(),e.createElementBlock("canvas",{ref_key:"canvasRef",ref:i,class:e.normalizeClass(["pd-ruler",`is-${t.orientation}`]),style:e.normalizeStyle(d.value),onMousedown:R,onMousemove:W,onMouseleave:J},null,38))}}),Vt=_(ta,[["__scopeId","data-v-eec37db4"]]),oa={class:"canvas-scroll"},na={key:0,class:"overlay-layer"},la=["src"],Oe=96/25.4,aa=e.defineComponent({__name:"CanvasArea",props:{templateData:{},elements:{},scale:{},showGrid:{type:Boolean},snapToGrid:{type:Boolean},showTableGhostBorder:{type:Boolean},hasClipboard:{type:Boolean},guides:{},overlayVisible:{type:Boolean},screenshotUrl:{},overlayOpacity:{},selectedElementHasGroup:{type:Boolean},showRuler:{type:Boolean,default:!0}},emits:["select","drop-element","drop-field","drag-start","drag-stop","dblclick-element","dblclick-cell","zone-height-change","zone-height-commit","select-all","clear-selection","preview","commit-preview","paste","copy","cut","delete","move-layer","group","ungroup","coordinate","add-guide","guide-move","guide-remove","zoom","clone-element"],setup(t,{expose:a,emit:o}){const n=t,l=o;function r(f,m){l("select",f,m)}const i=e.ref(null),s=e.computed(()=>Ee(n.templateData).width),c=e.computed(()=>Ee(n.templateData).height),d=e.reactive({originX:0,originY:0,viewW:0,viewH:0,paperScale:1}),p=e.reactive({x:null,y:null}),v=e.reactive({x:0,y:0}),w=e.computed(()=>({transform:`translate(${v.x}px, ${v.y}px)`}));function L(){const f=i.value,m=f?.querySelector(".hiprint-printPaper");if(!f||!m)return;const k=f.getBoundingClientRect(),h=m.getBoundingClientRect(),C=n.scale||1,N=h.width/he(s.value);d.paperScale=Math.abs(N-C)<.002?C:N,d.originX=h.left-k.left-fe,d.originY=h.top-k.top-fe,d.viewW=f.clientWidth-fe,d.viewH=f.clientHeight-fe}function H(){v.x=i.value?.scrollLeft??0,v.y=i.value?.scrollTop??0,L()}let D=null,$=0;function R(){cancelAnimationFrame($);const f=performance.now()+220,m=()=>{L(),performance.now()<f&&($=requestAnimationFrame(m))};$=requestAnimationFrame(m)}const W=e.ref(null);function J(f,m){W.value=m===null?null:{type:f,mm:m}}const A=e.computed(()=>{const f=W.value,m=i.value?.querySelector(".hiprint-printPaper");if(!f||!m)return{};const k=m.getBoundingClientRect(),h=k.width/he(s.value),C=he(f.mm)*(h>0?h:n.scale||1);return f.type==="vertical"?{left:k.left+C+"px",top:k.top+"px",height:k.height+"px"}:{left:k.left+"px",top:k.top+C+"px",width:k.width+"px"}});function G(f){const m=i.value?.querySelector(".hiprint-printPaper");if(!m)return;const k=m.getBoundingClientRect(),h=n.scale||1,C=Fe((f.clientX-k.left)/h),N=Fe((f.clientY-k.top)/h);if(!(C<0||N<0))return{x:C,y:N}}function K(f){const m=G(f),k=f.dataTransfer?.getData("fieldData");if(k)try{const C=JSON.parse(k);l("drop-field",C,m);return}catch{}const h=f.dataTransfer?.getData("elementType");h&&l("drop-element",h,m)}const S=e.reactive({visible:!1,x:0,y:0,w:0,h:0});let M={x:0,y:0};function x(f){return!f||!(f instanceof HTMLElement)?!1:!!(f===i.value||f.classList.contains("canvas-scroll")||f.classList.contains("hiprint-printPaper")||f.classList.contains("hiprint-printPaper-content")||f.classList.contains("zone-layer")||f.classList.contains("grid-bg")||f.classList.contains("watermark-layer"))}function B(f){const m=i.value,k=m?.querySelector(".hiprint-printPaper");if(!m||!k)return;const h=m.getBoundingClientRect();p.x=f.clientX-h.left-fe,p.y=f.clientY-h.top-fe;const C=k.getBoundingClientRect(),N=n.scale||1,y=Fe((f.clientX-C.left)/N),b=Fe((f.clientY-C.top)/N);if(y<0||b<0){l("coordinate",null);return}l("coordinate",{x:y,y:b})}function T(){l("coordinate",null),p.x=null,p.y=null}function z(f){if(!(f.ctrlKey||f.metaKey))return;f.preventDefault();const m=n.scale||1,k=Math.round(m*100),h=$o(k,f.deltaY>0?-1:1);if(h===k)return;const C=h/100,N=i.value;let y=null;if(N){const b=N.getBoundingClientRect(),F=getComputedStyle(N),Y=parseFloat(F.paddingLeft)||0,ae=parseFloat(F.paddingTop)||0;y={x:N.scrollLeft+(f.clientX-b.left)-Y,y:N.scrollTop+(f.clientY-b.top)-ae,ratio:C/m,mouseX:f.clientX-b.left,mouseY:f.clientY-b.top}}if(l("zoom",h-k),N&&y){const b=y;e.nextTick(()=>{const F=getComputedStyle(N),Y=parseFloat(F.paddingLeft)||0,ae=parseFloat(F.paddingTop)||0;N.scrollLeft=b.x*b.ratio-b.mouseX+Y,N.scrollTop=b.y*b.ratio-b.mouseY+ae})}}function u(f){const m=i.value;if(!m)return;const k=Math.max(mt,Math.round(f)),h=Math.round((n.scale||1)*100);if(k===h)return;const C=n.scale||1,y=k/100/C,b=getComputedStyle(m),F=parseFloat(b.paddingLeft)||0,Y=parseFloat(b.paddingTop)||0,ae=m.clientWidth/2,re=m.clientHeight/2,ve=m.scrollLeft+ae-F,xe=m.scrollTop+re-Y;l("zoom",k-h),e.nextTick(()=>{const be=getComputedStyle(m),ye=parseFloat(be.paddingLeft)||0,Ne=parseFloat(be.paddingTop)||0;m.scrollLeft=ve*y-ae+ye,m.scrollTop=xe*y-re+Ne})}function V(f){f.button!==2&&x(f.target)&&(l("clear-selection"),M={x:f.clientX,y:f.clientY},S.visible=!0,S.x=f.clientX,S.y=f.clientY,S.w=0,S.h=0,window.addEventListener("mousemove",X),window.addEventListener("mouseup",Z))}function O(){if(S.w<3||S.h<3)return[];const f=i.value?.querySelector(".hiprint-printPaper");if(!f)return[];const m=f.getBoundingClientRect(),k=n.scale||1,h=S.x<M.x,C=[];for(const N of n.elements){if(N.options.visible===!1||N.options.locked)continue;const y=m.left+N.options.left*Oe*k,b=m.top+N.options.top*Oe*k,F=y+N.options.width*Oe*k,Y=b+N.options.height*Oe*k,ae=y<S.x+S.w&&F>S.x&&b<S.y+S.h&&Y>S.y,re=y>=S.x&&F<=S.x+S.w&&b>=S.y&&Y<=S.y+S.h;(h?re:ae)&&C.push(N.id)}return C}function X(f){const m=f.clientX-M.x,k=f.clientY-M.y;S.x=m>=0?M.x:f.clientX,S.y=k>=0?M.y:f.clientY,S.w=Math.abs(m),S.h=Math.abs(k),l("preview",O())}function Z(){window.removeEventListener("mousemove",X),window.removeEventListener("mouseup",Z);const f=O();l("preview",f),f.length>0?l("commit-preview"):l("clear-selection"),l("preview",[]),S.visible=!1}const j=e.reactive({visible:!1,x:0,y:0,targetId:null});function ce(f,m){if(!m&&!x(f.target))return;const k=i.value?.getBoundingClientRect();k&&(j.x=f.clientX-k.left,j.y=f.clientY-k.top,j.targetId=m??null,j.visible=!0,window.removeEventListener("mousedown",ie),setTimeout(()=>{window.addEventListener("mousedown",ie,{once:!0})},0))}function ie(){j.visible=!1,window.removeEventListener("mousedown",ie)}function se(){j.visible=!1,n.hasClipboard&&l("paste")}function le(){j.visible=!1,l("select-all")}function P(){j.visible=!1,l("clear-selection")}function g(f,m){j.visible=!1,f==="copy"?l("copy"):f==="cut"?l("cut"):f==="paste"?l("paste"):f==="delete"?l("delete"):f==="move-layer"?l("move-layer",m):f==="group"?l("group"):f==="ungroup"&&n.selectedElementHasGroup&&l("ungroup")}e.onMounted(()=>{e.nextTick(L),i.value&&typeof ResizeObserver<"u"&&(D=new ResizeObserver(L),D.observe(i.value))}),e.watch(()=>n.scale,R),e.watch([s,c],()=>e.nextTick(L));function E(){const f=i.value;if(!f)return;let m=0,k=0,h=0;const C=performance.now()+800,N=()=>{const{scrollWidth:y,scrollHeight:b}=f;if(y===k&&b===h?m++:m=0,k=y,h=b,m>=2||performance.now()>C){const F=f.scrollWidth,Y=f.scrollHeight,ae=f.clientWidth,re=f.clientHeight;f.scrollLeft=Math.max(0,(F-ae)/2),f.scrollTop=Math.max(0,(Y-re)/2);return}requestAnimationFrame(N)};requestAnimationFrame(N)}return a({centerScroll:E,fitToWindow:u}),e.onBeforeUnmount(()=>{window.removeEventListener("mousemove",X),window.removeEventListener("mouseup",Z),D?.disconnect(),cancelAnimationFrame($)}),(f,m)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"rootRef",ref:i,class:"canvas-area",onDragover:m[24]||(m[24]=e.withModifiers(()=>{},["prevent"])),onDrop:K,onMousedown:V,onMousemove:B,onMouseleave:T,onWheel:z,onScroll:H,onContextmenu:e.withModifiers(ce,["prevent"])},[e.createElementVNode("div",oa,[e.createVNode(ea,{"template-data":t.templateData,"runtime-elements":t.elements,"design-mode":!0,"print-data":[],scale:t.scale,"show-grid":t.showGrid,"snap-to-grid":t.snapToGrid,"show-table-ghost-border":t.showTableGhostBorder,guides:t.guides,onSelect:r,onGuideMove:m[0]||(m[0]=(k,h)=>f.$emit("guide-move",k,h)),onGuideRemove:m[1]||(m[1]=k=>f.$emit("guide-remove",k)),onDragStart:m[2]||(m[2]=k=>f.$emit("drag-start")),onDragStop:m[3]||(m[3]=k=>f.$emit("drag-stop")),onDblclickElement:m[4]||(m[4]=k=>f.$emit("dblclick-element",k)),onDblclickCell:m[5]||(m[5]=(k,h,C)=>f.$emit("dblclick-cell",k,h,C)),onContextmenu:m[6]||(m[6]=(k,h)=>ce(h,k)),onZoneHeightChange:m[7]||(m[7]=(k,h)=>f.$emit("zone-height-change",k,h)),onZoneHeightCommit:m[8]||(m[8]=k=>f.$emit("zone-height-commit",k)),onCloneElement:m[9]||(m[9]=(k,h)=>f.$emit("clone-element",k,h))},null,8,["template-data","runtime-elements","scale","show-grid","snap-to-grid","show-table-ghost-border","guides"]),t.overlayVisible&&t.screenshotUrl?(e.openBlock(),e.createElementBlock("div",na,[e.createElementVNode("img",{src:t.screenshotUrl,class:"overlay-image",style:e.normalizeStyle({opacity:t.overlayOpacity??.5})},null,12,la)])):e.createCommentVNode("",!0)]),t.showRuler?(e.openBlock(),e.createElementBlock("div",{key:0,class:"ruler-overlay",style:e.normalizeStyle(w.value)},[m[25]||(m[25]=e.createElementVNode("div",{class:"ruler-corner"},null,-1)),e.createVNode(Vt,{orientation:"horizontal","viewport-px":d.viewW,"origin-px":d.originX,"paper-length-m-m":s.value,scale:d.paperScale,"cursor-px":p.x,onAddGuide:m[10]||(m[10]=(k,h)=>l("add-guide",k,h)),onGuideDragging:m[11]||(m[11]=k=>J("vertical",k))},null,8,["viewport-px","origin-px","paper-length-m-m","scale","cursor-px"]),e.createVNode(Vt,{orientation:"vertical","viewport-px":d.viewH,"origin-px":d.originY,"paper-length-m-m":c.value,scale:d.paperScale,"cursor-px":p.y,onAddGuide:m[12]||(m[12]=(k,h)=>l("add-guide",k,h)),onGuideDragging:m[13]||(m[13]=k=>J("horizontal",k))},null,8,["viewport-px","origin-px","paper-length-m-m","scale","cursor-px"])],4)):e.createCommentVNode("",!0),W.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["ruler-guide-preview",`guide-${W.value.type}`]),style:e.normalizeStyle(A.value)},null,6)):e.createCommentVNode("",!0),S.visible?(e.openBlock(),e.createElementBlock("div",{key:2,class:"marquee-selection",style:e.normalizeStyle({left:S.x+"px",top:S.y+"px",width:S.w+"px",height:S.h+"px"})},null,4)):e.createCommentVNode("",!0),j.visible?(e.openBlock(),e.createElementBlock("div",{key:3,class:"context-menu",style:e.normalizeStyle({left:j.x+"px",top:j.y+"px"})},[j.targetId?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("div",{class:"context-menu-item",onClick:m[14]||(m[14]=k=>g("copy"))},"复制"),e.createElementVNode("div",{class:"context-menu-item",onClick:m[15]||(m[15]=k=>g("cut"))},"剪切"),e.createElementVNode("div",{class:e.normalizeClass(["context-menu-item",{disabled:!t.hasClipboard}]),onClick:m[16]||(m[16]=k=>g("paste"))},"粘贴",2),e.createElementVNode("div",{class:"context-menu-item",onClick:m[17]||(m[17]=k=>g("delete"))},"删除"),m[26]||(m[26]=e.createElementVNode("div",{class:"context-menu-sep"},null,-1)),e.createElementVNode("div",{class:"context-menu-item",onClick:m[18]||(m[18]=k=>g("move-layer","top"))},"置顶"),e.createElementVNode("div",{class:"context-menu-item",onClick:m[19]||(m[19]=k=>g("move-layer","up"))},"上移"),e.createElementVNode("div",{class:"context-menu-item",onClick:m[20]||(m[20]=k=>g("move-layer","down"))},"下移"),e.createElementVNode("div",{class:"context-menu-item",onClick:m[21]||(m[21]=k=>g("move-layer","bottom"))},"置底"),m[27]||(m[27]=e.createElementVNode("div",{class:"context-menu-sep"},null,-1)),e.createElementVNode("div",{class:"context-menu-item",onClick:m[22]||(m[22]=k=>g("group"))},"编组 Ctrl+G"),e.createElementVNode("div",{class:e.normalizeClass(["context-menu-item",{disabled:!t.selectedElementHasGroup}]),onClick:m[23]||(m[23]=k=>g("ungroup"))},"取消编组 Ctrl+Shift+G",2)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",{class:e.normalizeClass(["context-menu-item",{disabled:!t.hasClipboard}]),onClick:se},"粘贴",2),e.createElementVNode("div",{class:"context-menu-item",onClick:le},"全选"),e.createElementVNode("div",{class:"context-menu-item",onClick:P},"取消选择")],64))],4)):e.createCommentVNode("",!0)],544))}}),ia=_(aa,[["__scopeId","data-v-c84c019a"]]),ra=[{group:"position-size",groupLabel:"位置与尺寸",items:[{key:"ps-left",keywords:["X","横坐标","left","位置"]},{key:"ps-top",keywords:["Y","纵坐标","top","位置"]},{key:"ps-width",keywords:["W","宽度","width","尺寸"]},{key:"ps-height",keywords:["H","高度","height","尺寸"]}]},{group:"appearance",groupLabel:"外观",items:[{key:"ap-font-size",keywords:["字体大小","fontsize","字号"]},{key:"ap-font-weight",keywords:["字体粗细","粗体","bold"]},{key:"ap-align",keywords:["对齐","align"]},{key:"ap-vertical-align",keywords:["垂直对齐","verticalalign","顶对齐","底对齐"]},{key:"ap-color",keywords:["颜色","color"]},{key:"ap-bg-color",keywords:["背景色","background"]},{key:"ap-line-height",keywords:["行高","lineheight"]},{key:"ap-letter-spacing",keywords:["字间距","letterspacing"]}]},{group:"content",groupLabel:"内容",items:[{key:"ct-title",keywords:["内容","文本","title"]},{key:"ct-formatter",keywords:["格式化","表达式","formatter"]},{key:"ct-table-mode",keywords:["数据模式","静态布局","动态数据"]},{key:"ct-table-source",keywords:["数据源","列表字段"]},{key:"ct-table-font",keywords:["默认字号","默认颜色","默认内边距"]},{key:"ct-table-cols",keywords:["列宽","表格列"]}]},{group:"border-bg",groupLabel:"边框与背景",items:[{key:"bb-border-width",keywords:["边框宽度","border"]},{key:"bb-border-color",keywords:["边框颜色"]},{key:"bb-bg-color",keywords:["背景色","background"]}]},{group:"binding",groupLabel:"字段绑定",items:[{key:"bd-formatter",keywords:["格式化","表达式","formatter","fx","字段","绑定","field"]},{key:"bd-content",keywords:["内容","表达式","文本","变量"]}]},{group:"pagination",groupLabel:"分页",items:[{key:"pg-enabled",keywords:["分页","pagination","启用分页"]},{key:"pg-pageable",keywords:["参与分页","pageable"]},{key:"pg-keep-with-next",keywords:["同页","keepWithNext"]}]},{group:"advanced",groupLabel:"高级",items:[{key:"ad-locked",keywords:["锁定","lock"]},{key:"ad-fixed",keywords:["每页重复","repeat"]},{key:"ad-z-index",keywords:["层级","zindex"]},{key:"ad-delete",keywords:["删除"]}]}];function sa(t,a){const o=t.trim().toLowerCase();return o?a.some(n=>n.toLowerCase().includes(o)):!0}function da(t){const a=[],o=new Set;for(const n of ra){const l=n.items.filter(r=>sa(t,[...r.keywords,n.groupLabel]));if(l.length>0){a.push(n.group);for(const r of l)o.add(r.key)}}return{groups:a,itemKeys:o}}const ca={class:"property-search"},ua=e.defineComponent({__name:"PropertySearch",emits:["search"],setup(t,{emit:a}){const o=e.ref(""),n=a;function l(){n("search",o.value)}return(r,i)=>(e.openBlock(),e.createElementBlock("div",ca,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":i[0]||(i[0]=s=>o.value=s),class:"pd-input",type:"search",placeholder:"搜索属性...","aria-label":"搜索属性",onInput:l},null,544),[[e.vModelText,o.value]])]))}}),ma=_(ua,[["__scopeId","data-v-10ab6c84"]]),pa={class:"group-icon"},fa={class:"group-title"},va={class:"expand-icon"},ga={class:"group-content"},ha=e.defineComponent({__name:"PropertyGroup",props:{title:{},icon:{},defaultExpanded:{type:Boolean},groupKey:{}},setup(t){const a=t,o=e.ref(a.defaultExpanded??!0),l={Document:"≡",Brush:"◧",Setting:"⚙"}[a.icon]||"•";function r(){o.value=!o.value,i()}function i(){const c=`property-group-${a.groupKey}`;try{localStorage.setItem(c,String(o.value))}catch{}}function s(){const c=`property-group-${a.groupKey}`;try{const d=localStorage.getItem(c);d!==null&&(o.value=d==="true")}catch{}}return e.onMounted(()=>{s()}),(c,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["property-group",{"is-expanded":o.value}])},[e.createElementVNode("div",{class:"group-header",onClick:r},[e.createElementVNode("span",pa,e.toDisplayString(e.unref(l)),1),e.createElementVNode("span",fa,e.toDisplayString(t.title),1),e.createElementVNode("span",va,e.toDisplayString(o.value?"▾":"▸"),1)]),e.withDirectives(e.createElementVNode("div",ga,[e.renderSlot(c.$slots,"default",{},void 0,!0)],512),[[e.vShow,o.value]])],2))}}),Ve=_(ha,[["__scopeId","data-v-2ba57031"]]),ba={class:"pd-stepper"},ya=["disabled"],ka=["value","placeholder","min","max","step"],Ea=["disabled"],wa=e.defineComponent({__name:"StepperInput",props:{modelValue:{},min:{},max:{},step:{default:1},placeholder:{}},emits:["update:modelValue"],setup(t,{emit:a}){const o=t,n=a,l=e.computed(()=>{const D=String(o.step),$=D.indexOf(".");return $===-1?0:D.length-$-1});function r(D){return Number.isFinite(D)?Number(D.toFixed(l.value)):0}const i=e.computed(()=>{const D=o.modelValue;if(!(D==null||!Number.isFinite(D)))return r(D)}),s=e.ref(i.value===void 0?"":String(i.value));e.watch(i,D=>{s.value=D===void 0?"":String(D)});const c=e.computed(()=>i.value!==void 0?i.value:o.min!==void 0?o.min:0),d=e.computed(()=>o.min!==void 0&&c.value<=o.min),p=e.computed(()=>o.max!==void 0&&c.value>=o.max);function v(D){let $=r(D);return o.min!==void 0&&$<o.min&&($=o.min),o.max!==void 0&&$>o.max&&($=o.max),$}function w(D){if(D<0&&d.value||D>0&&p.value)return;const $=v(c.value+D*o.step);s.value=String($),n("update:modelValue",$)}function L(D){s.value=D.target.value}function H(){const D=s.value.trim();if(D===""){i.value!==void 0&&(s.value=String(i.value));return}const $=Number(D);if(!Number.isFinite($)){s.value=i.value===void 0?"":String(i.value);return}const R=v($);s.value=String(R),R!==i.value&&n("update:modelValue",R)}return(D,$)=>(e.openBlock(),e.createElementBlock("div",ba,[e.createElementVNode("button",{type:"button",class:"pd-step-btn pd-step-minus",disabled:d.value,title:"减小","aria-label":"减小",onClick:$[0]||($[0]=R=>w(-1))},"−",8,ya),e.createElementVNode("input",{type:"number",class:"pd-input pd-step-input",value:s.value,placeholder:t.placeholder,min:t.min,max:t.max,step:t.step,onInput:L,onChange:H,onBlur:H,onKeydown:$[1]||($[1]=e.withKeys(e.withModifiers(R=>R.target.blur(),["prevent"]),["enter"]))},null,40,ka),e.createElementVNode("button",{type:"button",class:"pd-step-btn pd-step-plus",disabled:p.value,title:"增大","aria-label":"增大",onClick:$[2]||($[2]=R=>w(1))},"+",8,Ea)]))}}),ne=_(wa,[["__scopeId","data-v-9722a7cf"]]),Va={class:"position-grid"},Na={class:"pd-field"},Ca={class:"pd-field"},Sa={class:"pd-field"},Ma={class:"pd-field"},$a=e.defineComponent({__name:"PositionSizeGroup",props:{element:{},matchedKeys:{},searching:{type:Boolean}},setup(t){const a=t;function o(n){return a.searching?a.matchedKeys?.has(n)??!0:!0}return(n,l)=>(e.openBlock(),e.createBlock(Ve,{title:"位置与尺寸",icon:"Location","default-expanded":"","group-key":"position-size"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:l[4]||(l[4]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",Va,[e.withDirectives(e.createElementVNode("div",Na,[l[5]||(l[5]=e.createElementVNode("span",{class:"pd-label"},"X",-1)),e.createVNode(ne,{modelValue:t.element.options.left,"onUpdate:modelValue":l[0]||(l[0]=r=>t.element.options.left=r),min:0},null,8,["modelValue"])],512),[[e.vShow,o("ps-left")]]),e.withDirectives(e.createElementVNode("div",Ca,[l[6]||(l[6]=e.createElementVNode("span",{class:"pd-label"},"Y",-1)),e.createVNode(ne,{modelValue:t.element.options.top,"onUpdate:modelValue":l[1]||(l[1]=r=>t.element.options.top=r),min:0},null,8,["modelValue"])],512),[[e.vShow,o("ps-top")]]),e.withDirectives(e.createElementVNode("div",Sa,[l[7]||(l[7]=e.createElementVNode("span",{class:"pd-label"},"W",-1)),e.createVNode(ne,{modelValue:t.element.options.width,"onUpdate:modelValue":l[2]||(l[2]=r=>t.element.options.width=r),min:4},null,8,["modelValue"])],512),[[e.vShow,o("ps-width")]]),e.withDirectives(e.createElementVNode("div",Ma,[l[8]||(l[8]=e.createElementVNode("span",{class:"pd-label"},"H",-1)),e.createVNode(ne,{modelValue:t.element.options.height,"onUpdate:modelValue":l[3]||(l[3]=r=>t.element.options.height=r),min:4},null,8,["modelValue"])],512),[[e.vShow,o("ps-height")]])])],32)]),_:1}))}}),xa=_($a,[["__scopeId","data-v-572d7719"]]),Ba=["#000000","#333333","#666666","#999999","#cccccc","#ffffff","#e53935","#fb8c00","#1e88e5","#43a047","#8d6e63","#00acc1"],Da=["aria-expanded","title"],Ta={class:"picker-preview"},za={class:"preset-color-grid"},La=["title","aria-label","onClick"],Pa=e.defineComponent({__name:"PresetColorPicker",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(!1),r=e.ref(),i=e.ref(),s=e.ref(),c=e.ref({}),d=e.ref(0),p=e.ref(0),v=e.ref(0),w=e.ref("#000000"),L=e.ref(!1),H=e.computed({get:()=>o.modelValue||"#000000",set:P=>n("update:modelValue",P)}),D=e.computed(()=>j(ie(d.value,p.value,v.value))),$=e.computed({get:()=>Math.round(d.value),set:P=>A(se(P),p.value,v.value)});e.watch(H,J,{immediate:!0});function R(P){w.value=P.toUpperCase(),J(P),n("update:modelValue",P)}function W(P){const E=P.target.value.trim();X(E)&&(J(E),n("update:modelValue",Z(E)))}function J(P){const g=X(P);if(!g)return;const E=ce(g.r,g.g,g.b);d.value=E.h,p.value=E.s,v.value=E.v,w.value=Z(P).toUpperCase()}function A(P,g,E){d.value=se(P),p.value=le(g),v.value=le(E),w.value=D.value.toUpperCase(),n("update:modelValue",D.value)}function G(P){P.currentTarget.setPointerCapture(P.pointerId),L.value=!0,M(P)}function K(P){L.value&&M(P)}function S(P){L.value=!1;const g=P.currentTarget;g.hasPointerCapture(P.pointerId)&&g.releasePointerCapture(P.pointerId)}function M(P){const g=s.value;if(!g)return;const E=g.getBoundingClientRect(),f=le((P.clientX-E.left)/E.width),m=le(1-(P.clientY-E.top)/E.height);A(d.value,f,m)}function x(P){const g=P.shiftKey?.1:.02;let E=!0;P.key==="ArrowLeft"?A(d.value,p.value-g,v.value):P.key==="ArrowRight"?A(d.value,p.value+g,v.value):P.key==="ArrowUp"?A(d.value,p.value,v.value+g):P.key==="ArrowDown"?A(d.value,p.value,v.value-g):E=!1,E&&P.preventDefault()}function B(){l.value?z():T()}async function T(){const P=r.value;if(!P)return;J(H.value),l.value=!0,await e.nextTick();const g=P.getBoundingClientRect(),E=190,f=i.value?.offsetHeight??216,m=8,k=Math.min(g.left,window.innerWidth-E-m),h=g.bottom+6,C=h+f>window.innerHeight-m?Math.max(m,g.top-f-6):h;c.value={left:`${Math.max(m,k)}px`,top:`${C}px`}}function z(){l.value=!1}function u(P){const g=P.target;r.value?.contains(g)||i.value?.contains(g)||z()}function V(){l.value&&z()}function O(P){P.key==="Escape"&&l.value&&z()}function X(P){const g=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(P.trim());if(!g)return null;const E=g[1],f=E.length===3?E.split("").map(m=>m+m).join(""):E;return{r:Number.parseInt(f.slice(0,2),16),g:Number.parseInt(f.slice(2,4),16),b:Number.parseInt(f.slice(4,6),16)}}function Z(P){const g=X(P);return g?j(g):"#000000"}function j({r:P,g,b:E}){return`#${[P,g,E].map(f=>Math.round(le(f/255)*255).toString(16).padStart(2,"0")).join("")}`}function ce(P,g,E){const f=P/255,m=g/255,k=E/255,h=Math.max(f,m,k),C=Math.min(f,m,k),N=h-C;let y=0;return N!==0&&(h===f?y=(m-k)/N%6:h===m?y=(k-f)/N+2:y=(f-m)/N+4,y*=60,y<0&&(y+=360)),{h:y,s:h===0?0:N/h,v:h}}function ie(P,g,E){const f=E*g,m=(P%360+360)%360/60,k=f*(1-Math.abs(m%2-1)),[h,C,N]=m<1?[f,k,0]:m<2?[k,f,0]:m<3?[0,f,k]:m<4?[0,k,f]:m<5?[k,0,f]:[f,0,k],y=E-f;return{r:(h+y)*255,g:(C+y)*255,b:(N+y)*255}}function se(P){return((Number.isFinite(P)?P:0)%360+360)%360}function le(P){return Math.min(1,Math.max(0,Number.isFinite(P)?P:0))}return e.onMounted(()=>{document.addEventListener("pointerdown",u,!0),window.addEventListener("scroll",V,!0),window.addEventListener("resize",V),document.addEventListener("keydown",O)}),e.onBeforeUnmount(()=>{document.removeEventListener("pointerdown",u,!0),window.removeEventListener("scroll",V,!0),window.removeEventListener("resize",V),document.removeEventListener("keydown",O)}),(P,g)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("button",{ref_key:"triggerRef",ref:r,type:"button",class:"preset-color-trigger","aria-expanded":l.value,"aria-haspopup":"dialog",title:t.modelValue||"自动",onClick:B},[e.createElementVNode("span",{class:"preset-color-swatch",style:e.normalizeStyle({background:H.value})},null,4)],8,Da),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"panelRef",ref:i,class:"preset-color-panel",role:"dialog","aria-label":"颜色选择",style:e.normalizeStyle(c.value),onPointerdown:g[2]||(g[2]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Ta,[e.createElementVNode("span",{class:"picker-current",style:e.normalizeStyle({background:D.value})},null,4),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[0]||(g[0]=E=>w.value=E),class:"picker-hex",type:"text",maxlength:"7",spellcheck:"false","aria-label":"颜色值",onInput:W},null,544),[[e.vModelText,w.value]])]),e.createElementVNode("div",{ref_key:"areaRef",ref:s,class:"picker-area",style:e.normalizeStyle({"--picker-hue":`${Math.round(d.value)}deg`}),"aria-label":"自定义颜色",tabindex:"0",onPointerdown:G,onPointermove:K,onPointerup:S,onPointercancel:S,onKeydown:x},[e.createElementVNode("span",{class:"picker-handle",style:e.normalizeStyle({left:`${p.value*100}%`,top:`${(1-v.value)*100}%`,background:D.value})},null,4)],36),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[1]||(g[1]=E=>$.value=E),class:"picker-hue",type:"range",min:"0",max:"360",step:"1","aria-label":"色相"},null,512),[[e.vModelText,$.value,void 0,{number:!0}]]),g[3]||(g[3]=e.createElementVNode("div",{class:"picker-heading"},"常用颜色",-1)),e.createElementVNode("div",za,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Ba),E=>(e.openBlock(),e.createElementBlock("button",{key:E,type:"button",class:e.normalizeClass(["preset-color-item",{active:E.toLowerCase()===D.value.toLowerCase()}]),style:e.normalizeStyle({background:E}),title:E,"aria-label":E,onClick:f=>R(E)},null,14,La))),128))])],36)):e.createCommentVNode("",!0)]))],64))}}),we=_(Pa,[["__scopeId","data-v-db3c3d71"]]),Aa={class:"pd-field"},Ia={class:"pd-field"},Ra={class:"pd-field"},Ha={class:"pd-radio-group",role:"radiogroup"},Fa={class:"pd-radio"},Ua={class:"pd-radio"},Oa={class:"pd-radio"},Ga={class:"pd-field"},qa={class:"pd-radio-group",role:"radiogroup"},Wa={class:"pd-radio"},Ya={class:"pd-radio"},Ka={class:"pd-radio"},Xa={class:"color-row"},ja={class:"pd-field"},Ja={class:"pd-field"},Za={class:"pd-field"},Qa={class:"pd-field"},_a={key:1,class:"pd-empty"},ei=e.defineComponent({__name:"AppearanceGroup",props:{element:{},isTextType:{type:Boolean},matchedKeys:{},searching:{type:Boolean}},setup(t){const a=t;function o(l){return a.searching?a.matchedKeys?.has(l)??!0:!0}const n=e.computed(()=>a.element.printElementType.type==="table");return(l,r)=>(e.openBlock(),e.createBlock(Ve,{title:"外观",icon:"Brush","default-expanded":"","group-key":"appearance"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:r[12]||(r[12]=e.withModifiers(()=>{},["prevent"]))},[t.isTextType?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.withDirectives(e.createElementVNode("div",Aa,[r[13]||(r[13]=e.createElementVNode("span",{class:"pd-label"},"字体大小",-1)),e.createVNode(ne,{modelValue:t.element.options.fontSize,"onUpdate:modelValue":r[0]||(r[0]=i=>t.element.options.fontSize=i),min:8,max:72},null,8,["modelValue"])],512),[[e.vShow,o("ap-font-size")]]),e.withDirectives(e.createElementVNode("div",Ia,[r[15]||(r[15]=e.createElementVNode("span",{class:"pd-label"},"字体粗细",-1)),e.withDirectives(e.createElementVNode("select",{class:"pd-select","onUpdate:modelValue":r[1]||(r[1]=i=>t.element.options.fontWeight=i),style:{width:"100%"}},[...r[14]||(r[14]=[e.createElementVNode("option",{value:"normal"},"正常",-1),e.createElementVNode("option",{value:"bold"},"粗体",-1),e.createElementVNode("option",{value:"bolder"},"更粗",-1),e.createElementVNode("option",{value:"lighter"},"细体",-1)])],512),[[e.vModelSelect,t.element.options.fontWeight]])],512),[[e.vShow,o("ap-font-weight")]]),e.withDirectives(e.createElementVNode("div",Ra,[r[19]||(r[19]=e.createElementVNode("span",{class:"pd-label"},"对齐",-1)),e.createElementVNode("div",Ha,[e.createElementVNode("label",Fa,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":r[2]||(r[2]=i=>t.element.options.textAlign=i),value:"left"},null,512),[[e.vModelRadio,t.element.options.textAlign]]),r[16]||(r[16]=e.createElementVNode("span",null,"左",-1))]),e.createElementVNode("label",Ua,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":r[3]||(r[3]=i=>t.element.options.textAlign=i),value:"center"},null,512),[[e.vModelRadio,t.element.options.textAlign]]),r[17]||(r[17]=e.createElementVNode("span",null,"中",-1))]),e.createElementVNode("label",Oa,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":r[4]||(r[4]=i=>t.element.options.textAlign=i),value:"right"},null,512),[[e.vModelRadio,t.element.options.textAlign]]),r[18]||(r[18]=e.createElementVNode("span",null,"右",-1))])])],512),[[e.vShow,o("ap-align")]]),e.withDirectives(e.createElementVNode("div",Ga,[r[23]||(r[23]=e.createElementVNode("span",{class:"pd-label"},"垂直对齐",-1)),e.createElementVNode("div",qa,[e.createElementVNode("label",Wa,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":r[5]||(r[5]=i=>t.element.options.verticalAlign=i),value:"top"},null,512),[[e.vModelRadio,t.element.options.verticalAlign]]),r[20]||(r[20]=e.createElementVNode("span",null,"顶",-1))]),e.createElementVNode("label",Ya,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":r[6]||(r[6]=i=>t.element.options.verticalAlign=i),value:"middle"},null,512),[[e.vModelRadio,t.element.options.verticalAlign]]),r[21]||(r[21]=e.createElementVNode("span",null,"中",-1))]),e.createElementVNode("label",Ka,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":r[7]||(r[7]=i=>t.element.options.verticalAlign=i),value:"bottom"},null,512),[[e.vModelRadio,t.element.options.verticalAlign]]),r[22]||(r[22]=e.createElementVNode("span",null,"底",-1))])])],512),[[e.vShow,o("ap-vertical-align")]]),e.createElementVNode("div",Xa,[e.withDirectives(e.createElementVNode("div",ja,[r[24]||(r[24]=e.createElementVNode("span",{class:"pd-label"},"颜色",-1)),e.createVNode(we,{modelValue:t.element.options.color,"onUpdate:modelValue":r[8]||(r[8]=i=>t.element.options.color=i)},null,8,["modelValue"])],512),[[e.vShow,o("ap-color")]]),e.withDirectives(e.createElementVNode("div",Ja,[r[25]||(r[25]=e.createElementVNode("span",{class:"pd-label"},"背景色",-1)),e.createVNode(we,{modelValue:t.element.options.backgroundColor,"onUpdate:modelValue":r[9]||(r[9]=i=>t.element.options.backgroundColor=i)},null,8,["modelValue"])],512),[[e.vShow,o("ap-bg-color")]])]),e.withDirectives(e.createElementVNode("div",Za,[r[26]||(r[26]=e.createElementVNode("span",{class:"pd-label"},"行高",-1)),e.createVNode(ne,{modelValue:t.element.options.lineHeight,"onUpdate:modelValue":r[10]||(r[10]=i=>t.element.options.lineHeight=i),min:0,max:100},null,8,["modelValue"])],512),[[e.vShow,o("ap-line-height")]]),e.withDirectives(e.createElementVNode("div",Qa,[r[27]||(r[27]=e.createElementVNode("span",{class:"pd-label"},"字间距",-1)),e.createVNode(ne,{modelValue:t.element.options.letterSpacing,"onUpdate:modelValue":r[11]||(r[11]=i=>t.element.options.letterSpacing=i),min:0,max:20,step:.5},null,8,["modelValue"])],512),[[e.vShow,o("ap-letter-spacing")]])],64)):e.createCommentVNode("",!0),!t.isTextType&&!n.value?(e.openBlock(),e.createElementBlock("p",_a,"当前元素不支持外观设置")):e.createCommentVNode("",!0)],32)]),_:1}))}}),ti=_(ei,[["__scopeId","data-v-2b604a48"]]),oi={class:"pd-dialog pd-dialog-large",role:"dialog","aria-modal":"true","aria-labelledby":"expression-editor-title"},ni={class:"pd-dialog-header"},li={class:"expression-editor"},ai={class:"ee-nav"},ii={class:"ee-nav-tabs"},ri={class:"ee-content"},si={class:"ee-content-search"},di=["placeholder"],ci={class:"ee-content-list"},ui={class:"ee-field-group-icon"},mi=["onDblclick"],pi={class:"ee-field-info"},fi={class:"ee-item-label"},vi={class:"ee-item-key"},gi={key:0,class:"pd-empty"},hi=["onDblclick"],bi={class:"ee-field-info"},yi={class:"ee-item-label"},ki={class:"ee-item-key"},Ei={class:"ee-func-group"},wi=["onDblclick"],Vi={class:"ee-field-info"},Ni={class:"ee-item-label"},Ci={class:"ee-item-key"},Si={class:"ee-func-group"},Mi=["onDblclick"],$i={class:"ee-field-info"},xi={class:"ee-item-label"},Bi={class:"ee-item-key"},Di={class:"ee-editor"},Ti={class:"ee-editor-section"},zi={class:"ee-editor-section"},Li={class:"pd-dialog-footer"},Pi=e.defineComponent({__name:"ExpressionEditor",props:{modelValue:{type:Boolean},expression:{},fields:{}},emits:["update:modelValue","update:expression"],setup(t,{emit:a}){const o=t,n=a,l=e.computed({get:()=>o.modelValue,set:M=>n("update:modelValue",M)}),r=e.ref("field"),i=e.computed(()=>{switch(r.value){case"field":return"搜索字段...";case"variable":return"搜索变量...";case"function":return"搜索函数...";default:return"搜索..."}}),s=e.ref(""),c=e.computed(()=>Ut(Ft(o.fields??[]),s.value));e.watch(l,M=>{M&&($.value=o.expression||"")});function d(M){const{insideParens:x}=w();K(x?M.fieldKey:`{${M.fieldKey}}`)}function p(M){const{insideParens:x}=w();K(x?M.template.replace(/^\{|\}$/g,""):M.template)}function v(M){const{insideBlock:x}=w(),B=x?M.template:`{${M.template}}`,T=B.indexOf("(")+1;K(B,T)}function w(){const x=R.value?.selectionStart??$.value.length,B=$.value.substring(0,x);let T=!1;const z=B.lastIndexOf("{");z!==-1&&!B.slice(z+1).includes("}")&&(T=!0);let u=!1;const V=B.lastIndexOf("(");return V!==-1&&!B.slice(V+1).includes(")")&&(u=!0),{insideBlock:T,insideParens:u}}const L=e.computed(()=>{if(!s.value.trim())return A;const M=s.value.trim().toLowerCase();return A.filter(x=>x.label.toLowerCase().includes(M)||x.name.toLowerCase().includes(M))}),H=e.computed(()=>{if(!s.value.trim())return W;const M=s.value.trim().toLowerCase();return W.filter(x=>x.label.toLowerCase().includes(M)||x.name.toLowerCase().includes(M))}),D=e.computed(()=>{if(!s.value.trim())return J;const M=s.value.trim().toLowerCase();return J.filter(x=>x.label.toLowerCase().includes(M)||x.name.toLowerCase().includes(M))}),$=e.ref(o.expression||""),R=e.ref(null);e.watch(()=>o.expression,M=>{$.value=M||""});const W=[{name:"SUM",label:"求和",template:"SUM()"},{name:"AVG",label:"平均值",template:"AVG()"},{name:"COUNT",label:"计数",template:"COUNT()"},{name:"MIN",label:"最小值",template:"MIN()"},{name:"MAX",label:"最大值",template:"MAX()"}],J=[{name:"MONEY",label:"金额格式化",template:"MONEY()"},{name:"DATE",label:"日期格式化",template:"DATE()"},{name:"UPPER",label:"大写金额",template:"UPPER()"},{name:"IF",label:"条件判断",template:"IF()"}],A=[{name:"pageIndex",label:"当前页码",template:"{pageIndex}"},{name:"totalPages",label:"总页数",template:"{totalPages}"},{name:"printDate",label:"打印日期",template:"{printDate}"},{name:"printTime",label:"打印时间",template:"{printTime}"}],G=e.computed(()=>{if(!$.value.trim())return"(输入表达式后预览)";try{const M={...ge,pageIndex:1,totalPages:1,printDate:new Date().toISOString().split("T")[0],printTime:Date.now()},x=$e($.value,M);return x==null?"(无法计算)":String(x)}catch{return"(表达式错误)"}});function K(M,x=M.length){const B=R.value;if(!B){$.value+=M;return}const T=B.selectionStart,z=B.selectionEnd,u=$.value.substring(0,T),V=$.value.substring(z);$.value=u+M+V;const O=T+x;e.nextTick(()=>{B.focus(),B.selectionStart=B.selectionEnd=O})}function S(){n("update:expression",$.value),l.value=!1}return(M,x)=>l.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"pd-dialog-overlay",onKeydown:x[7]||(x[7]=e.withKeys(B=>l.value=!1,["esc"]))},[e.createElementVNode("section",oi,[e.createElementVNode("header",ni,[x[8]||(x[8]=e.createElementVNode("strong",{id:"expression-editor-title"},"编辑表达式",-1)),e.createElementVNode("button",{type:"button",class:"pd-close","aria-label":"关闭",onClick:x[0]||(x[0]=B=>l.value=!1)},"×")]),e.createElementVNode("div",li,[e.createElementVNode("div",ai,[x[9]||(x[9]=e.createElementVNode("div",{class:"ee-nav-title"},"类型",-1)),e.createElementVNode("div",ii,[e.createElementVNode("div",{class:e.normalizeClass(["ee-nav-tab",{active:r.value==="field"}]),onClick:x[1]||(x[1]=B=>r.value="field")}," 📁 字段 ",2),e.createElementVNode("div",{class:e.normalizeClass(["ee-nav-tab",{active:r.value==="variable"}]),onClick:x[2]||(x[2]=B=>r.value="variable")}," 🔧 变量 ",2),e.createElementVNode("div",{class:e.normalizeClass(["ee-nav-tab",{active:r.value==="function"}]),onClick:x[3]||(x[3]=B=>r.value="function")}," ⚡ 函数 ",2)])]),e.createElementVNode("div",ri,[e.createElementVNode("div",si,[e.withDirectives(e.createElementVNode("input",{class:"pd-input","onUpdate:modelValue":x[4]||(x[4]=B=>s.value=B),placeholder:i.value},null,8,di),[[e.vModelText,s.value]])]),e.createElementVNode("div",ci,[r.value==="field"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,B=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:B.key||"_top"},[B.key?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["ee-field-group",{"is-list":B.isList}])},[e.createElementVNode("span",ui,e.toDisplayString(B.isList?"📋":"📁"),1),e.createElementVNode("span",null,e.toDisplayString(B.label),1)],2)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.fields,T=>(e.openBlock(),e.createElementBlock("div",{key:T.fieldKey,class:"ee-list-item ee-field-item",style:e.normalizeStyle({paddingLeft:B.key?"22px":"10px"}),onDblclick:z=>d(T)},[e.createElementVNode("div",pi,[e.createElementVNode("span",fi,e.toDisplayString(T.fieldLabel),1),e.createElementVNode("span",vi,e.toDisplayString(T.fieldKey),1)])],44,mi))),128))],64))),128)),c.value.length===0?(e.openBlock(),e.createElementBlock("p",gi,"暂无字段")):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),r.value==="variable"?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(L.value,B=>(e.openBlock(),e.createElementBlock("div",{key:B.name,class:"ee-list-item",onDblclick:T=>p(B)},[e.createElementVNode("div",bi,[e.createElementVNode("span",yi,e.toDisplayString(B.label),1),e.createElementVNode("span",ki,e.toDisplayString(B.template),1)])],40,hi))),128)):e.createCommentVNode("",!0),r.value==="function"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",Ei,[x[10]||(x[10]=e.createElementVNode("div",{class:"ee-func-group-title"},"聚合函数",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(H.value,B=>(e.openBlock(),e.createElementBlock("div",{key:B.name,class:"ee-list-item",onDblclick:T=>v(B)},[e.createElementVNode("div",Vi,[e.createElementVNode("span",Ni,e.toDisplayString(B.label),1),e.createElementVNode("span",Ci,e.toDisplayString(B.name)+"()",1)])],40,wi))),128))]),e.createElementVNode("div",Si,[x[11]||(x[11]=e.createElementVNode("div",{class:"ee-func-group-title"},"格式化函数",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,B=>(e.openBlock(),e.createElementBlock("div",{key:B.name,class:"ee-list-item",onDblclick:T=>v(B)},[e.createElementVNode("div",$i,[e.createElementVNode("span",xi,e.toDisplayString(B.label),1),e.createElementVNode("span",Bi,e.toDisplayString(B.name)+"()",1)])],40,Mi))),128))])],64)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Di,[e.createElementVNode("div",Ti,[x[12]||(x[12]=e.createElementVNode("div",{class:"ee-editor-title"},"表达式编辑",-1)),e.withDirectives(e.createElementVNode("textarea",{ref_key:"textareaRef",ref:R,"onUpdate:modelValue":x[5]||(x[5]=B=>$.value=B),class:"ee-textarea",rows:"6",placeholder:"双击左侧字段/变量/函数插入,或直接输入静态内容"},null,512),[[e.vModelText,$.value]])]),e.createElementVNode("div",zi,[x[13]||(x[13]=e.createElementVNode("div",{class:"ee-editor-title"},"预览结果",-1)),e.createElementVNode("div",{class:e.normalizeClass(["ee-preview",{"ee-preview-error":G.value==="(表达式错误)"}])},e.toDisplayString(G.value),3)]),x[14]||(x[14]=e.createStaticVNode('<div class="ee-help-section" data-v-86008c29><div class="ee-help-title" data-v-86008c29>帮助信息</div><div class="ee-help-grid" data-v-86008c29><div class="ee-help-card ee-help-field" data-v-86008c29><div class="ee-help-card-title" data-v-86008c29>输入方式</div><div class="ee-help-card-content" data-v-86008c29> 双击左侧字段、变量、函数即可插入到表达式输入框中<br data-v-86008c29> 静态数据直接输入即可,如:供应商名称<br data-v-86008c29> 动态解析字段、变量、函数必须用 {} 包裹<br data-v-86008c29> 示例:{SUM(supplier.name)}<br data-v-86008c29> 注意:只能嵌套一层 </div></div><div class="ee-help-card ee-help-function" data-v-86008c29><div class="ee-help-card-title" data-v-86008c29>函数使用</div><div class="ee-help-card-content" data-v-86008c29> SUM(字段) - 求和<br data-v-86008c29> AVG(字段) - 平均值<br data-v-86008c29> COUNT(字段) - 计数<br data-v-86008c29> IF(条件, 真值, 假值) - 条件判断 </div></div><div class="ee-help-card ee-help-variable" data-v-86008c29><div class="ee-help-card-title" data-v-86008c29>系统变量</div><div class="ee-help-card-content" data-v-86008c29> {pageIndex} - 当前页码<br data-v-86008c29> {totalPages} - 总页数<br data-v-86008c29> {printDate} - 打印日期 </div></div><div class="ee-help-card ee-help-conditional" data-v-86008c29><div class="ee-help-card-title" data-v-86008c29>示例</div><div class="ee-help-card-content" data-v-86008c29> 静态文本:供应商名称<br data-v-86008c29> 动态字段:{supplier.name}<br data-v-86008c29> 函数调用:{SUM(amount)}<br data-v-86008c29> 条件判断:{IF(amount&gt;1000, &quot;大单&quot;, &quot;小单&quot;)} </div></div></div></div>',1))])]),e.createElementVNode("footer",Li,[e.createElementVNode("button",{type:"button",class:"pd-button",onClick:x[6]||(x[6]=B=>l.value=!1)},"取消"),e.createElementVNode("button",{type:"button",class:"pd-button primary",onClick:S},"确定")])])],32)):e.createCommentVNode("",!0)}}),ft=_(Pi,[["__scopeId","data-v-86008c29"]]),Ai={class:"pd-field"},Ii={class:"pd-label"},Ri=["value","placeholder"],Hi=e.defineComponent({__name:"BindingControl",props:{descriptor:{},modelValue:{},fields:{}},emits:["update:modelValue"],setup(t,{emit:a}){const o=a,n=e.ref(!1);function l(){n.value=!0}return(r,i)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",Ai,[e.createElementVNode("span",Ii,e.toDisplayString(t.descriptor.label),1),e.createElementVNode("input",{value:t.modelValue,class:"pd-input",placeholder:t.descriptor.placeholder||"输入内容,支持 {字段} 表达式",onInput:i[0]||(i[0]=s=>o("update:modelValue",s.target.value)),onDblclick:l},null,40,Ri)]),e.createVNode(ft,{modelValue:n.value,"onUpdate:modelValue":i[1]||(i[1]=s=>n.value=s),fields:t.fields,expression:t.modelValue,"onUpdate:expression":i[2]||(i[2]=s=>o("update:modelValue",s))},null,8,["modelValue","fields","expression"])],64))}}),Fi=_(Hi,[["__scopeId","data-v-135d160a"]]),Ui={class:"pd-field"},Oi=["value"],Gi=["value"],qi={class:"pd-field"},Wi={class:"pd-field"},Yi={class:"pd-field"},Ki={class:"pd-field"},Xi={style:{width:"60px"}},ji=e.defineComponent({__name:"TableSettingsGroup",props:{element:{},fields:{}},setup(t){const a=t,o=e.inject(Pe,null),n=e.computed(()=>a.fields.filter(i=>i.fieldType==="list").map(i=>({label:i.fieldLabel,value:i.fieldKey})));function l(i){a.element.options.dataSource=i||void 0,o?.recordHistory()}function r(i,s){if(s===void 0)return;const c=a.element.options.tableColWidths,d=o?.maxTableWidth.value??1/0,p=c.reduce((v,w,L)=>L===i?v:v+w,0);if(p+s>d){const v=Math.max(5,Math.round((d-p)*10)/10);alert(`表格总宽不能超过打印范围宽度 ${d}mm,列${i+1} 已调整为 ${v}mm`),c[i]=v}else c[i]=s;qe(a.element.options),o?.recordHistory()}return(i,s)=>(e.openBlock(),e.createBlock(Ve,{title:"表格设置",icon:"Grid","default-expanded":"","group-key":"table-settings"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:s[4]||(s[4]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",Ui,[s[5]||(s[5]=e.createElementVNode("span",{class:"pd-label"},"列表数据源字段",-1)),e.createElementVNode("select",{value:t.element.options.dataSource,class:"pd-select",style:{width:"100%"},onChange:s[0]||(s[0]=c=>l(c.target.value))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,c=>(e.openBlock(),e.createElementBlock("option",{key:c.value,value:c.value},e.toDisplayString(c.label),9,Gi))),128))],40,Oi)]),e.createElementVNode("div",qi,[s[6]||(s[6]=e.createElementVNode("span",{class:"pd-label"},"默认字号 (pt)",-1)),e.createVNode(ne,{modelValue:t.element.options.tableDefaultFontSize,"onUpdate:modelValue":s[1]||(s[1]=c=>t.element.options.tableDefaultFontSize=c),min:5,max:72,placeholder:"默认"},null,8,["modelValue"])]),e.createElementVNode("div",Wi,[s[7]||(s[7]=e.createElementVNode("span",{class:"pd-label"},"默认文字颜色",-1)),e.createVNode(we,{modelValue:t.element.options.tableDefaultColor,"onUpdate:modelValue":s[2]||(s[2]=c=>t.element.options.tableDefaultColor=c)},null,8,["modelValue"])]),e.createElementVNode("div",Yi,[s[8]||(s[8]=e.createElementVNode("span",{class:"pd-label"},"默认内边距 (mm)",-1)),e.createVNode(ne,{modelValue:t.element.options.tableDefaultPadding,"onUpdate:modelValue":s[3]||(s[3]=c=>t.element.options.tableDefaultPadding=c),min:0,max:10,step:.5,placeholder:"默认"},null,8,["modelValue"])]),e.createElementVNode("div",Ki,[s[9]||(s[9]=e.createElementVNode("span",{class:"pd-label"},"列宽 (mm)",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.element.options.tableColWidths,(c,d)=>(e.openBlock(),e.createElementBlock("div",{key:d,class:"col-width-row"},[e.createElementVNode("span",Xi,"列"+e.toDisplayString(d+1),1),e.createVNode(ne,{"model-value":c,min:5,max:200,"onUpdate:modelValue":p=>r(d,p)},null,8,["model-value","onUpdate:modelValue"])]))),128))])],32)]),_:1}))}}),Ji=_(ji,[["__scopeId","data-v-2860c993"]]),Zi={class:"border-row"},Qi={class:"pd-field"},_i={class:"pd-field"},er={class:"pd-field"},tr=e.defineComponent({__name:"BorderBgGroup",props:{element:{},matchedKeys:{},searching:{type:Boolean}},setup(t){const a=t;function o(n){return a.searching?a.matchedKeys?.has(n)??!0:!0}return(n,l)=>(e.openBlock(),e.createBlock(Ve,{title:"边框与背景",icon:"Picture","default-expanded":"","group-key":"border-bg"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:l[3]||(l[3]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",Zi,[e.withDirectives(e.createElementVNode("div",Qi,[l[4]||(l[4]=e.createElementVNode("span",{class:"pd-label"},"边框宽度",-1)),e.createVNode(ne,{modelValue:t.element.options.borderWidth,"onUpdate:modelValue":l[0]||(l[0]=r=>t.element.options.borderWidth=r),min:0,max:20,step:.25},null,8,["modelValue"])],512),[[e.vShow,o("bb-border-width")]]),e.withDirectives(e.createElementVNode("div",_i,[l[5]||(l[5]=e.createElementVNode("span",{class:"pd-label"},"边框颜色",-1)),e.createVNode(we,{modelValue:t.element.options.borderColor,"onUpdate:modelValue":l[1]||(l[1]=r=>t.element.options.borderColor=r)},null,8,["modelValue"])],512),[[e.vShow,o("bb-border-color")]])]),e.withDirectives(e.createElementVNode("div",er,[l[6]||(l[6]=e.createElementVNode("span",{class:"pd-label"},"背景色",-1)),e.createVNode(we,{modelValue:t.element.options.backgroundColor,"onUpdate:modelValue":l[2]||(l[2]=r=>t.element.options.backgroundColor=r)},null,8,["modelValue"])],512),[[e.vShow,o("bb-bg-color")]])],32)]),_:1}))}}),or=_(tr,[["__scopeId","data-v-84aa55dc"]]),nr={class:"advanced-row"},lr={class:"pd-field"},ar={class:"pd-field"},ir={class:"pd-field"},rr={class:"pd-field"},sr=e.defineComponent({__name:"AdvancedGroup",props:{element:{},matchedKeys:{},searching:{type:Boolean}},emits:["delete-element"],setup(t){const a=t;function o(n){return a.searching?a.matchedKeys?.has(n)??!0:!0}return(n,l)=>(e.openBlock(),e.createBlock(Ve,{title:"高级设置",icon:"Setting","group-key":"advanced"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:l[4]||(l[4]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",nr,[e.withDirectives(e.createElementVNode("div",lr,[l[5]||(l[5]=e.createElementVNode("span",{class:"pd-label"},"锁定",-1)),e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:"pd-switch","onUpdate:modelValue":l[0]||(l[0]=r=>t.element.options.locked=r)},null,512),[[e.vModelCheckbox,t.element.options.locked]])],512),[[e.vShow,o("ad-locked")]]),e.withDirectives(e.createElementVNode("div",ar,[l[6]||(l[6]=e.createElementVNode("span",{class:"pd-label"},"每页重复",-1)),e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:"pd-switch","onUpdate:modelValue":l[1]||(l[1]=r=>t.element.options.fixed=r)},null,512),[[e.vModelCheckbox,t.element.options.fixed]])],512),[[e.vShow,o("ad-fixed")]])]),e.withDirectives(e.createElementVNode("div",ir,[l[7]||(l[7]=e.createElementVNode("span",{class:"pd-label"},"层级",-1)),e.createVNode(ne,{modelValue:t.element.options.zIndex,"onUpdate:modelValue":l[2]||(l[2]=r=>t.element.options.zIndex=r),min:0,max:999},null,8,["modelValue"])],512),[[e.vShow,o("ad-z-index")]]),e.withDirectives(e.createElementVNode("div",rr,[e.createElementVNode("button",{type:"button",class:"pd-button danger",onClick:l[3]||(l[3]=r=>n.$emit("delete-element"))}," 删除元素 ")],512),[[e.vShow,o("ad-delete")]])],32)]),_:1}))}}),dr=_(sr,[["__scopeId","data-v-84bf7a55"]]),cr={key:0,class:"pd-field"},ur=["checked"],mr={class:"pd-field"},pr=["checked"],fr={class:"pd-field"},vr=["checked"],Nt=e.defineComponent({__name:"PaginationGroup",props:{element:{},matchedKeys:{},searching:{type:Boolean}},setup(t){const a=t,o=e.computed(()=>a.element.printElementType.type==="table"),n=e.computed({get:()=>a.element.options.tablePagination?.enabled??!0,set:()=>{}});function l(p){a.element.options.tablePagination={enabled:p}}const r=e.computed({get:()=>a.element.options.pagination?.pageable??!0,set:()=>{}}),i=e.computed({get:()=>a.element.options.pagination?.keepWithNext??!1,set:()=>{}});function s(p){a.element.options.pagination={pageable:p,keepWithNext:i.value}}function c(p){a.element.options.pagination={pageable:r.value,keepWithNext:p}}function d(p){return a.searching?a.matchedKeys?.has(p)??!0:!0}return(p,v)=>(e.openBlock(),e.createBlock(Ve,{title:"分页配置",icon:"Document","group-key":"pagination"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:v[3]||(v[3]=e.withModifiers(()=>{},["prevent"]))},[o.value?e.withDirectives((e.openBlock(),e.createElementBlock("div",cr,[v[4]||(v[4]=e.createElementVNode("span",{class:"pd-label"},"启用分页",-1)),e.createElementVNode("input",{type:"checkbox",class:"pd-switch",checked:n.value,onChange:v[0]||(v[0]=w=>l(w.target.checked))},null,40,ur)],512)),[[e.vShow,d("pg-enabled")]]):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.withDirectives(e.createElementVNode("div",mr,[v[5]||(v[5]=e.createElementVNode("span",{class:"pd-label"},"参与分页",-1)),e.createElementVNode("input",{type:"checkbox",class:"pd-switch",checked:r.value,onChange:v[1]||(v[1]=w=>s(w.target.checked))},null,40,pr)],512),[[e.vShow,d("pg-pageable")]]),e.withDirectives(e.createElementVNode("div",fr,[v[6]||(v[6]=e.createElementVNode("span",{class:"pd-label"},"与下元素同页",-1)),e.createElementVNode("input",{type:"checkbox",class:"pd-switch",checked:i.value,onChange:v[2]||(v[2]=w=>c(w.target.checked))},null,40,vr)],512),[[e.vShow,d("pg-keep-with-next")]])],64))],32)]),_:1}))}}),gr={class:"image-content-upload"},hr=["disabled"],br=e.defineComponent({__name:"ImageContentUpload",props:{disabled:{type:Boolean}},emits:["success"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(!1),r=e.inject(pt,e.computed(()=>{})),i=e.computed(()=>o.disabled||l.value||!r.value);async function s(c){const d=c.target,p=d.files?.[0];if(p){if(!p.type.startsWith("image/")){alert("仅支持上传图片文件"),d.value="";return}if(!r.value){alert("图片上传能力未配置"),d.value="";return}l.value=!0;try{const v=await r.value(p);v?n("success",v):alert("图片上传失败")}catch(v){alert(v instanceof Error?v.message:"图片上传失败")}finally{l.value=!1,d.value=""}}}return(c,d)=>(e.openBlock(),e.createElementBlock("div",gr,[e.createElementVNode("label",{class:e.normalizeClass(["pd-button small upload-label",{disabled:i.value}])},[d[0]||(d[0]=e.createElementVNode("svg",{class:"pd-icon",viewBox:"0 0 24 24","aria-hidden":"true"},[e.createElementVNode("path",{fill:"currentColor",d:"M12 3l4 4h-3v7h-2V7H8zm-7 12h14v5H5Z"})],-1)),e.createTextVNode(" "+e.toDisplayString(l.value?"上传中...":"上传图片")+" ",1),e.createElementVNode("input",{class:"visually-hidden",type:"file",accept:"image/*",disabled:i.value,onChange:s},null,40,hr)],2),d[1]||(d[1]=e.createElementVNode("p",{class:"upload-tip"},"支持 jpg/png/gif/bmp/webp/svg 等图片,上传后填入相对路径",-1))]))}}),yr=_(br,[["__scopeId","data-v-b730e8e6"]]),kr={class:"pd-field"},Er=["value"],wr={class:"pd-field"},Vr={key:0,class:"pd-field"},Nr=["checked"],Cr=e.defineComponent({__name:"TableRowGroup",props:{element:{},selection:{}},setup(t){const a=t,o=e.inject(Pe),n=e.computed(()=>a.element.options.tableRows[a.selection.r1]);function l(s){const c=ot(a.element.options.tableRows,a.selection.r1,s);if(c){alert(c);return}o.recordHistory()}function r(s){s!==void 0&&(n.value.height=s,qe(a.element.options),o.recordHistory())}function i(s){n.value.repeatOnPage=s,o.recordHistory()}return(s,c)=>(e.openBlock(),e.createBlock(Ve,{title:"行属性",icon:"Grid","default-expanded":"","group-key":"table-row"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:c[2]||(c[2]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",kr,[c[4]||(c[4]=e.createElementVNode("span",{class:"pd-label"},"行类型",-1)),e.createElementVNode("select",{value:n.value.type,class:"pd-select",style:{width:"100%"},onChange:c[0]||(c[0]=d=>l(d.target.value))},[...c[3]||(c[3]=[e.createElementVNode("option",{value:"header"},"标题行",-1),e.createElementVNode("option",{value:"data"},"数据行",-1),e.createElementVNode("option",{value:"subtotal"},"小计行(每页小计)",-1),e.createElementVNode("option",{value:"summary"},"汇总行",-1)])],40,Er)]),e.createElementVNode("div",wr,[c[5]||(c[5]=e.createElementVNode("span",{class:"pd-label"},"行高 (mm)",-1)),e.createVNode(ne,{"model-value":n.value.height,min:3,max:100,step:.5,"onUpdate:modelValue":r},null,8,["model-value"])]),n.value.type==="header"?(e.openBlock(),e.createElementBlock("div",Vr,[c[6]||(c[6]=e.createElementVNode("span",{class:"pd-label"},"每页顶部重复",-1)),e.createElementVNode("input",{checked:n.value.repeatOnPage??!1,type:"checkbox",class:"pd-switch",onInput:c[1]||(c[1]=d=>i(!!d.target.checked))},null,40,Nr)])):e.createCommentVNode("",!0)],32)]),_:1}))}}),Sr={class:"pd-field"},Mr={class:"pd-radio-group",role:"radiogroup"},$r={class:"pd-radio"},xr=["checked"],Br={class:"pd-radio"},Dr=["checked"],Tr={class:"pd-radio"},zr=["checked"],Lr={class:"pd-radio"},Pr=["checked"],Ar={key:0,class:"pd-field"},Ir=["value"],Rr={key:1,class:"pd-field"},Hr=["checked"],Fr={key:2,class:"pd-field"},Ur=["value"],Or={key:3,class:"pd-field"},Gr=["value"],qr={key:4,class:"pd-field"},Wr={key:5,class:"pd-field"},Yr={class:"pd-field"},Kr=["value"],Xr={class:"pd-field"},jr={class:"pd-radio-group",role:"radiogroup"},Jr={class:"pd-radio"},Zr=["checked"],Qr={class:"pd-radio"},_r=["checked"],es={class:"pd-radio"},ts=["checked"],os={class:"pd-field"},ns={class:"pd-radio-group",role:"radiogroup"},ls={class:"pd-radio"},as=["checked"],is={class:"pd-radio"},rs=["checked"],ss={class:"pd-radio"},ds=["checked"],cs={class:"cell-style-grid"},us={class:"pd-field"},ms=["value"],ps={class:"pd-field"},fs={class:"pd-field"},vs=["checked"],gs={class:"pd-field"},hs={class:"pd-field"},bs={class:"border-style-row"},ys={style:{width:"112px","flex-shrink":"0"}},ks={class:"pd-button-group border-presets"},Es={class:"pd-checkbox-group"},ws={class:"pd-checkbox"},Vs={class:"pd-checkbox"},Ns={class:"pd-checkbox"},Cs={class:"pd-checkbox"},Ss={class:"pd-field"},Ms={class:"pd-field"},$s=["checked"],xs={class:"merge-btns"},Bs=["disabled","title"],Ds=["disabled"],Ts=e.defineComponent({__name:"TableCellGroup",props:{element:{},selection:{},fields:{}},setup(t,{expose:a}){const o=t,n=e.inject(Pe),l=e.computed(()=>o.element.options.tableRows),r=e.computed(()=>{const z=ct(l.value,o.selection.r1,o.selection.c1);return l.value[z.r].cells[z.c]}),i=e.ref(!1),s=e.ref(""),c=e.computed(()=>r.value.cellType==="barcode"),d=e.computed(()=>r.value.cellType==="qrcode"),p=e.computed(()=>r.value.cellType==="image");function v(z){$(u=>{u.align=z})}function w(z){$(u=>{u.valign=z})}function L(z){$(u=>{u.cellType=z==="text"?void 0:z,z!=="barcode"&&(u.barcodeType=void 0,u.showBarcodeText=void 0),z!=="qrcode"&&(u.qrCodeLevel=void 0)})}function H(){s.value=r.value.formatter||"",i.value=!0}function D(z){$(u=>{u.formatter=z||void 0})}function $(z){const u=o.selection;for(let V=u.r1;V<=u.r2;V++)for(let O=u.c1;O<=u.c2;O++){const X=l.value[V].cells[O];X.merged||z(X)}n.recordHistory()}const R=e.ref("solid"),W=e.ref(.75),J=e.ref("#333333"),A=e.ref([]);function G(){return{width:W.value,style:R.value,color:J.value}}function K(z){mo(l.value,o.selection,z,G()),n.recordHistory()}function S(z){const u=z.target,V=new Set(A.value);u.checked?V.add(u.value):V.delete(u.value),A.value=[...V];const O=G();$(X=>{const Z={...X.borders??{}};for(const j of["top","right","bottom","left"])V.has(j)?Z[j]={...O}:delete Z[j];X.borders=Z})}const M=e.computed(()=>Bt(l.value,o.selection)),x=e.computed(()=>{const z=o.selection;for(let u=z.r1;u<=z.r2;u++)for(let V=z.c1;V<=z.c2;V++){const O=l.value[u].cells[V];if(!O.merged&&((O.rowspan??1)>1||(O.colspan??1)>1))return!0}return!1});function B(){Dt(l.value,o.selection),n.recordHistory()}function T(){Tt(l.value,o.selection),n.recordHistory()}return a({openFormatterEditor:H}),(z,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Ve,{title:"单元格",icon:"Menu","default-expanded":"","group-key":"table-cell"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:u[39]||(u[39]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",Sr,[u[45]||(u[45]=e.createElementVNode("span",{class:"pd-label"},"单元格类型",-1)),e.createElementVNode("div",Mr,[e.createElementVNode("label",$r,[e.createElementVNode("input",{type:"radio",value:"text",checked:(r.value.cellType||"text")==="text",onChange:u[0]||(u[0]=V=>L(V.target.value))},null,40,xr),u[41]||(u[41]=e.createElementVNode("span",null,"文本",-1))]),e.createElementVNode("label",Br,[e.createElementVNode("input",{type:"radio",value:"barcode",checked:r.value.cellType==="barcode",onChange:u[1]||(u[1]=V=>L(V.target.value))},null,40,Dr),u[42]||(u[42]=e.createElementVNode("span",null,"条形码",-1))]),e.createElementVNode("label",Tr,[e.createElementVNode("input",{type:"radio",value:"qrcode",checked:r.value.cellType==="qrcode",onChange:u[2]||(u[2]=V=>L(V.target.value))},null,40,zr),u[43]||(u[43]=e.createElementVNode("span",null,"二维码",-1))]),e.createElementVNode("label",Lr,[e.createElementVNode("input",{type:"radio",value:"image",checked:r.value.cellType==="image",onChange:u[3]||(u[3]=V=>L(V.target.value))},null,40,Pr),u[44]||(u[44]=e.createElementVNode("span",null,"图片",-1))])])]),c.value?(e.openBlock(),e.createElementBlock("div",Ar,[u[47]||(u[47]=e.createElementVNode("span",{class:"pd-label"},"码制",-1)),e.createElementVNode("select",{value:r.value.barcodeType||"CODE128",class:"pd-select",onChange:u[4]||(u[4]=V=>$(O=>{O.barcodeType=V.target.value||void 0}))},[...u[46]||(u[46]=[e.createElementVNode("option",{value:"CODE128"},"CODE128(通用)",-1),e.createElementVNode("option",{value:"EAN13"},"EAN13(商品码)",-1),e.createElementVNode("option",{value:"EAN8"},"EAN8",-1),e.createElementVNode("option",{value:"UPC"},"UPC",-1),e.createElementVNode("option",{value:"CODE39"},"CODE39",-1),e.createElementVNode("option",{value:"ITF14"},"ITF14",-1)])],40,Ir)])):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("div",Rr,[u[48]||(u[48]=e.createElementVNode("span",{class:"pd-label"},"显示文本",-1)),e.createElementVNode("input",{checked:r.value.showBarcodeText!==!1,type:"checkbox",class:"pd-switch",onInput:u[5]||(u[5]=V=>$(O=>{O.showBarcodeText=!!V.target.checked}))},null,40,Hr)])):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("div",Fr,[u[50]||(u[50]=e.createElementVNode("span",{class:"pd-label"},"纠错级别",-1)),e.createElementVNode("select",{value:r.value.qrCodeLevel||"M",class:"pd-select",onChange:u[6]||(u[6]=V=>$(O=>{O.qrCodeLevel=V.target.value||void 0}))},[...u[49]||(u[49]=[e.createElementVNode("option",{value:"L"},"L(最低,容量大)",-1),e.createElementVNode("option",{value:"M"},"M(推荐)",-1),e.createElementVNode("option",{value:"Q"},"Q",-1),e.createElementVNode("option",{value:"H"},"H(最高)",-1)])],40,Ur)])):e.createCommentVNode("",!0),c.value||d.value||p.value?(e.openBlock(),e.createElementBlock("div",Or,[u[52]||(u[52]=e.createElementVNode("span",{class:"pd-label"},"缩放模式",-1)),e.createElementVNode("select",{value:r.value.fit||"contain",class:"pd-select",onChange:u[7]||(u[7]=V=>$(O=>{O.fit=V.target.value}))},[...u[51]||(u[51]=[e.createElementVNode("option",{value:"contain"},"包含(保持比例)",-1),e.createElementVNode("option",{value:"cover"},"覆盖(保持比例)",-1),e.createElementVNode("option",{value:"fill"},"拉伸填满",-1),e.createElementVNode("option",{value:"none"},"原始尺寸",-1),e.createElementVNode("option",{value:"scale-down"},"缩小(保持比例)",-1)])],40,Gr)])):e.createCommentVNode("",!0),c.value||d.value||p.value?(e.openBlock(),e.createElementBlock("div",qr,[u[53]||(u[53]=e.createElementVNode("span",{class:"pd-label"},"最大宽度 (mm)",-1)),e.createVNode(ne,{"model-value":r.value.maxWidth,min:1,max:200,placeholder:"默认","onUpdate:modelValue":u[8]||(u[8]=V=>$(O=>{O.maxWidth=V??void 0}))},null,8,["model-value"])])):e.createCommentVNode("",!0),c.value||d.value||p.value?(e.openBlock(),e.createElementBlock("div",Wr,[u[54]||(u[54]=e.createElementVNode("span",{class:"pd-label"},"最大高度 (mm)",-1)),e.createVNode(ne,{"model-value":r.value.maxHeight,min:1,max:200,placeholder:"默认","onUpdate:modelValue":u[9]||(u[9]=V=>$(O=>{O.maxHeight=V??void 0}))},null,8,["model-value"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Yr,[u[55]||(u[55]=e.createElementVNode("span",{class:"pd-label"},"内容",-1)),e.createElementVNode("input",{value:r.value.formatter||"",class:"pd-input",placeholder:"输入内容,支持 {字段} 表达式",onInput:u[10]||(u[10]=V=>$(O=>{O.formatter=V.target.value||void 0})),onDblclick:H},null,40,Kr)]),e.createElementVNode("div",Xr,[u[59]||(u[59]=e.createElementVNode("span",{class:"pd-label"},"水平对齐",-1)),e.createElementVNode("div",jr,[e.createElementVNode("label",Jr,[e.createElementVNode("input",{type:"radio",value:"left",checked:r.value.align==="left",onChange:u[11]||(u[11]=V=>v(V.target.value))},null,40,Zr),u[56]||(u[56]=e.createElementVNode("span",null,"左",-1))]),e.createElementVNode("label",Qr,[e.createElementVNode("input",{type:"radio",value:"center",checked:r.value.align==="center",onChange:u[12]||(u[12]=V=>v(V.target.value))},null,40,_r),u[57]||(u[57]=e.createElementVNode("span",null,"中",-1))]),e.createElementVNode("label",es,[e.createElementVNode("input",{type:"radio",value:"right",checked:r.value.align==="right",onChange:u[13]||(u[13]=V=>v(V.target.value))},null,40,ts),u[58]||(u[58]=e.createElementVNode("span",null,"右",-1))])])]),e.createElementVNode("div",os,[u[63]||(u[63]=e.createElementVNode("span",{class:"pd-label"},"垂直对齐",-1)),e.createElementVNode("div",ns,[e.createElementVNode("label",ls,[e.createElementVNode("input",{type:"radio",value:"top",checked:r.value.valign==="top",onChange:u[14]||(u[14]=V=>w(V.target.value))},null,40,as),u[60]||(u[60]=e.createElementVNode("span",null,"上",-1))]),e.createElementVNode("label",is,[e.createElementVNode("input",{type:"radio",value:"middle",checked:r.value.valign==="middle",onChange:u[15]||(u[15]=V=>w(V.target.value))},null,40,rs),u[61]||(u[61]=e.createElementVNode("span",null,"中",-1))]),e.createElementVNode("label",ss,[e.createElementVNode("input",{type:"radio",value:"bottom",checked:r.value.valign==="bottom",onChange:u[16]||(u[16]=V=>w(V.target.value))},null,40,ds),u[62]||(u[62]=e.createElementVNode("span",null,"下",-1))])])]),e.createElementVNode("div",cs,[e.createElementVNode("div",us,[u[65]||(u[65]=e.createElementVNode("span",{class:"pd-label"},"字体",-1)),e.createElementVNode("select",{value:r.value.fontFamily,class:"pd-select",placeholder:"继承默认",onChange:u[17]||(u[17]=V=>$(O=>{O.fontFamily=V.target.value||void 0}))},[...u[64]||(u[64]=[e.createElementVNode("option",{value:"SimSun"},"宋体",-1),e.createElementVNode("option",{value:"SimHei"},"黑体",-1),e.createElementVNode("option",{value:"Microsoft YaHei"},"微软雅黑",-1),e.createElementVNode("option",{value:"KaiTi"},"楷体",-1),e.createElementVNode("option",{value:"FangSong"},"仿宋",-1),e.createElementVNode("option",{value:"Arial"},"Arial",-1)])],40,ms)]),e.createElementVNode("div",ps,[u[66]||(u[66]=e.createElementVNode("span",{class:"pd-label"},"字号 (pt)",-1)),e.createVNode(ne,{"model-value":r.value.fontSize,min:5,max:72,placeholder:"默认","onUpdate:modelValue":u[18]||(u[18]=V=>$(O=>{O.fontSize=V??void 0}))},null,8,["model-value"])]),e.createElementVNode("div",fs,[u[67]||(u[67]=e.createElementVNode("span",{class:"pd-label"},"加粗",-1)),e.createElementVNode("input",{checked:r.value.fontWeight==="bold",type:"checkbox",class:"pd-switch",onInput:u[19]||(u[19]=V=>$(O=>{O.fontWeight=V.target.checked?"bold":void 0}))},null,40,vs)]),e.createElementVNode("div",gs,[u[68]||(u[68]=e.createElementVNode("span",{class:"pd-label"},"文字颜色",-1)),e.createVNode(we,{"model-value":r.value.color,"onUpdate:modelValue":u[20]||(u[20]=V=>$(O=>{O.color=V}))},null,8,["model-value"])]),e.createElementVNode("div",hs,[u[69]||(u[69]=e.createElementVNode("span",{class:"pd-label"},"背景色",-1)),e.createVNode(we,{"model-value":r.value.backgroundColor,"onUpdate:modelValue":u[21]||(u[21]=V=>$(O=>{O.backgroundColor=V}))},null,8,["model-value"])])]),u[77]||(u[77]=e.createElementVNode("h3",{class:"pd-divider"},"边框",-1)),e.createElementVNode("div",bs,[e.withDirectives(e.createElementVNode("select",{class:"pd-select","onUpdate:modelValue":u[22]||(u[22]=V=>R.value=V),style:{width:"90px"}},[...u[70]||(u[70]=[e.createElementVNode("option",{value:"solid"},"实线",-1),e.createElementVNode("option",{value:"dashed"},"虚线",-1),e.createElementVNode("option",{value:"dotted"},"点线",-1),e.createElementVNode("option",{value:"double"},"双线",-1)])],512),[[e.vModelSelect,R.value]]),e.createElementVNode("div",ys,[e.createVNode(ne,{modelValue:W.value,"onUpdate:modelValue":u[23]||(u[23]=V=>W.value=V),min:.25,max:5,step:.25},null,8,["modelValue"])]),e.createVNode(we,{modelValue:J.value,"onUpdate:modelValue":u[24]||(u[24]=V=>J.value=V)},null,8,["modelValue"])]),e.createElementVNode("div",ks,[e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:u[25]||(u[25]=V=>K("all"))},"全部"),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:u[26]||(u[26]=V=>K("outer"))},"外侧"),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:u[27]||(u[27]=V=>K("inner"))},"内部"),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:u[28]||(u[28]=V=>K("none"))},"无")]),e.createElementVNode("div",Es,[e.createElementVNode("label",ws,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":u[29]||(u[29]=V=>A.value=V),value:"top",onChange:u[30]||(u[30]=V=>S(V))},null,544),[[e.vModelCheckbox,A.value]]),u[71]||(u[71]=e.createElementVNode("span",null,"上",-1))]),e.createElementVNode("label",Vs,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":u[31]||(u[31]=V=>A.value=V),value:"right",onChange:u[32]||(u[32]=V=>S(V))},null,544),[[e.vModelCheckbox,A.value]]),u[72]||(u[72]=e.createElementVNode("span",null,"右",-1))]),e.createElementVNode("label",Ns,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":u[33]||(u[33]=V=>A.value=V),value:"bottom",onChange:u[34]||(u[34]=V=>S(V))},null,544),[[e.vModelCheckbox,A.value]]),u[73]||(u[73]=e.createElementVNode("span",null,"下",-1))]),e.createElementVNode("label",Cs,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":u[35]||(u[35]=V=>A.value=V),value:"left",onChange:u[36]||(u[36]=V=>S(V))},null,544),[[e.vModelCheckbox,A.value]]),u[74]||(u[74]=e.createElementVNode("span",null,"左",-1))])]),e.createElementVNode("div",Ss,[u[75]||(u[75]=e.createElementVNode("span",{class:"pd-label"},"内边距 (mm)",-1)),e.createVNode(ne,{"model-value":r.value.padding,min:0,max:10,step:.5,placeholder:"默认","onUpdate:modelValue":u[37]||(u[37]=V=>$(O=>{O.padding=V??void 0}))},null,8,["model-value"])]),e.createElementVNode("div",Ms,[u[76]||(u[76]=e.createElementVNode("span",{class:"pd-label"},"自动换行",-1)),e.createElementVNode("input",{checked:r.value.wordWrap??!0,type:"checkbox",class:"pd-switch",onInput:u[38]||(u[38]=V=>$(O=>{O.wordWrap=!!V.target.checked}))},null,40,$s)]),e.createElementVNode("div",xs,[e.createElementVNode("button",{type:"button",class:"pd-button small",disabled:!!M.value,title:M.value||"",onClick:B}," 合并单元格 ",8,Bs),e.createElementVNode("button",{type:"button",class:"pd-button small",disabled:!x.value,onClick:T},"拆分单元格",8,Ds)])],32)]),_:1}),e.createVNode(ft,{modelValue:i.value,"onUpdate:modelValue":u[40]||(u[40]=V=>i.value=V),fields:t.fields,expression:s.value,"onUpdate:expression":D},null,8,["modelValue","fields","expression"])],64))}}),zs=_(Ts,[["__scopeId","data-v-e9669bd2"]]),Ls={text:[{targetPath:"options.formatter",label:"内容",dataSource:"main"}],longText:[{targetPath:"options.formatter",label:"内容",dataSource:"main"},{targetPath:"options.styler",label:"样式",dataSource:"main"}],barcode:[{targetPath:"options.formatter",label:"内容",dataSource:"main"}],qrcode:[{targetPath:"options.formatter",label:"内容",dataSource:"main"}],image:[{targetPath:"options.src",label:"内容",dataSource:"main",placeholder:"输入图片路径,支持 /docfiles/... 相对路径、绝对 URL 或 {字段} 表达式"}],table:[]};function Ot(t,a,o,n){return t==="data"?[{targetPath:`options.tableRows[${a}].cells[${o}].formatter`,label:"内容",dataSource:"list",listField:n,placeholder:"{name}"}]:t==="subtotal"?[{targetPath:`options.tableRows[${a}].cells[${o}].formatter`,label:"内容",dataSource:"subtotal",placeholder:"{MONEY(SUM(amount))}"}]:t==="summary"?[{targetPath:`options.tableRows[${a}].cells[${o}].formatter`,label:"内容",dataSource:"summary",placeholder:"{MONEY(SUM(amount))}"}]:[{targetPath:`options.tableRows[${a}].cells[${o}].formatter`,label:"内容",dataSource:"main",placeholder:"合计: {order.total}"}]}function Ps(t){const a=t.printElementType.type,o=Ls[a]??[],n=[];if(a==="table"){const l=t.options.dataSource;for(const[r,i]of(t.options.tableRows??[]).entries())for(const[s,c]of i.cells.entries())c.merged||n.push(...Ot(i.type,r,s,l))}return[...o,...n]}const As={key:0,class:"prop-collapsed"},Is={class:"prop-head"},Rs={class:"pd-tabs prop-tabs"},Hs={class:"pd-tab-bar",role:"tablist"},Fs={class:"pd-tab-pane",role:"tabpanel"},Us={class:"property-content"},Os={key:1,class:"pd-empty"},Gs={class:"pd-tab-pane",role:"tabpanel"},qs={class:"pd-field"},Ws=["value"],Ys=["value"],Ks={key:0,class:"pd-field"},Xs={class:"custom-size-grid"},js={class:"pd-field"},Js={class:"pd-radio-group",role:"radiogroup"},Zs={class:"pd-radio"},Qs=["checked"],_s={class:"pd-radio"},ed=["checked"],td={class:"pd-field"},od={class:"page-bg-row"},nd={class:"margin-grid"},ld={class:"pd-field"},ad={class:"pd-field"},id={class:"pd-field"},rd={class:"pd-field"},sd={class:"pd-field"},dd={class:"pd-field"},cd={class:"pd-field"},ud=e.defineComponent({__name:"PropertyPanel",props:{element:{},templateData:{},fields:{},activeTab:{},tableSelection:{},recordHistory:{type:Function},collapsed:{type:Boolean}},emits:["delete-element","update:templateData","update:activeTab","toggle-collapse"],setup(t,{emit:a}){const o=t,n=a,l=nt,r=e.ref(""),i=e.computed(()=>o.element?["text","longText"].includes(o.element.printElementType.type):!1),s=e.computed(()=>o.element?o.element.printElementType.type==="image":!1),c=e.computed(()=>!o.element||o.element.printElementType.type!=="table"?!1:!!o.tableSelection&&o.tableSelection.elementId===o.element.id),d=e.computed(()=>o.element?o.element.printElementType.type==="table":!1),p=e.computed(()=>da(r.value)),v=e.computed(()=>p.value.groups),w=e.computed(()=>p.value.itemKeys),L=e.computed(()=>!!r.value.trim()),H=e.computed(()=>{if(!o.element)return[];if(o.element.printElementType.type==="table"&&o.tableSelection){const{r1:y,c1:b}=o.tableSelection,F=o.element.options.tableRows;if(F&&F[y]){const Y=F[y],ae=o.element.options.fields?.[0]?.dataSource;return Ot(Y.type,y,b,ae)}}return Ps(o.element)});function D(y){return y.split(".").flatMap(b=>{const F=b.match(/^([^\[]+)((?:\[\d+\])*)$/);if(!F)return[b];const Y=F[1],ae=[...F[2].matchAll(/\[(\d+)\]/g)].map(re=>Number(re[1]));return[Y,...ae]})}function $(y){return o.element?D(y).reduce((Y,ae)=>Y==null?"":Y[ae],o.element)??"":""}function R(y,b){if(!o.element)return;const F=D(y),Y=F.pop(),ae=F.reduce((re,ve)=>((re[ve]===void 0||re[ve]===null)&&(re[ve]={}),re[ve]),o.element);ae[Y]=b||void 0,o.recordHistory?.()}function W(y){r.value=y}function J(y){o.element&&R("options.src",y)}const A=e.computed(()=>o.templateData?.paperSize||"A4"),G=e.computed(()=>o.templateData?.orientation||"portrait"),K=e.computed({get:()=>o.templateData?.pageBackground||"#ffffff",set:y=>ce(y)}),S=e.computed(()=>o.templateData?.margins.top??10),M=e.computed(()=>o.templateData?.margins.bottom??10),x=e.computed(()=>o.templateData?.margins.left??10),B=e.computed(()=>o.templateData?.margins.right??10),T=e.computed(()=>o.templateData?.header.height??10),z=e.computed(()=>o.templateData?.footer.height??10),u=e.computed(()=>o.templateData?.firstPageOverlay.height??0),V=e.computed(()=>o.templateData?.customWidth??210),O=e.computed(()=>o.templateData?.customHeight??297);function X(y){o.templateData&&n("update:templateData",{...o.templateData,...y})}function Z(y){if(y==="CUSTOM"){X({paperSize:"CUSTOM"});return}l[y]&&X({paperSize:y})}function j(y){X({orientation:String(y)})}function ce(y){const b=y&&y.toLowerCase()!=="#ffffff"&&y.toLowerCase()!=="#fff"?y:void 0;X(b===void 0?{pageBackground:void 0}:{pageBackground:b})}function ie(){X({pageBackground:void 0})}function se(y){y!==void 0&&X({customWidth:y})}function le(y){y!==void 0&&X({customHeight:y})}function P(y){y!==void 0&&X({margins:{...o.templateData.margins,top:y}})}function g(y){y!==void 0&&X({margins:{...o.templateData.margins,bottom:y}})}function E(y){y!==void 0&&X({margins:{...o.templateData.margins,left:y}})}function f(y){y!==void 0&&X({margins:{...o.templateData.margins,right:y}})}function m(y){y!==void 0&&X({header:{...o.templateData.header,height:y}})}function k(y){y!==void 0&&X({footer:{...o.templateData.footer,height:y}})}function h(y){y!==void 0&&X({firstPageOverlay:{...o.templateData.firstPageOverlay,height:y}})}const C=e.computed(()=>o.activeTab||"page");function N(y){n("update:activeTab",y),n("toggle-collapse")}return(y,b)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["property-panel",{collapsed:t.collapsed}])},[t.collapsed?(e.openBlock(),e.createElementBlock("div",As,[e.createElementVNode("button",{class:"pc-btn",title:"展开属性台",onClick:b[0]||(b[0]=F=>N(C.value))},"«"),e.createElementVNode("button",{class:e.normalizeClass(["pc-btn",{on:C.value==="element"}]),title:"元素属性",onClick:b[1]||(b[1]=F=>N("element"))},"▦",2),e.createElementVNode("button",{class:e.normalizeClass(["pc-btn",{on:C.value==="page"}]),title:"页面属性",onClick:b[2]||(b[2]=F=>N("page"))},"▤",2)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",Is,[b[12]||(b[12]=e.createElementVNode("span",{class:"prop-title"},"属性台",-1)),e.createElementVNode("button",{class:"collapse-btn",title:"收起属性台",onClick:b[3]||(b[3]=F=>y.$emit("toggle-collapse"))},"»")]),e.createElementVNode("div",Rs,[e.createElementVNode("div",Hs,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:(t.activeTab||"page")==="element"}]),onClick:b[4]||(b[4]=F=>y.$emit("update:activeTab","element"))},"元素属性",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:(t.activeTab||"page")==="page"}]),onClick:b[5]||(b[5]=F=>y.$emit("update:activeTab","page"))},"页面属性",2)]),e.withDirectives(e.createElementVNode("div",Fs,[t.element?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(ma,{onSearch:W}),e.createElementVNode("div",Us,[v.value.includes("position-size")&&!c.value?(e.openBlock(),e.createBlock(xa,{key:0,element:t.element,"matched-keys":w.value,searching:L.value},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0),v.value.includes("appearance")?(e.openBlock(),e.createBlock(ti,{key:1,element:t.element,"is-text-type":i.value,"matched-keys":w.value,searching:L.value},null,8,["element","is-text-type","matched-keys","searching"])):e.createCommentVNode("",!0),v.value.includes("binding")?(e.openBlock(),e.createBlock(Ve,{key:2,title:"内容",icon:"Document","default-expanded":"","group-key":"binding"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(H.value,F=>(e.openBlock(),e.createBlock(Fi,{key:F.targetPath,descriptor:F,fields:t.fields,"model-value":$(F.targetPath),"onUpdate:modelValue":Y=>R(F.targetPath,Y)},null,8,["descriptor","fields","model-value","onUpdate:modelValue"]))),128)),s.value?(e.openBlock(),e.createBlock(yr,{key:0,onSuccess:J})):e.createCommentVNode("",!0)]),_:1})):e.createCommentVNode("",!0),d.value&&t.tableSelection&&t.tableSelection.elementId===t.element.id?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createVNode(Cr,{element:t.element,selection:t.tableSelection},null,8,["element","selection"]),e.createVNode(zs,{element:t.element,selection:t.tableSelection,fields:t.fields},null,8,["element","selection","fields"])],64)):e.createCommentVNode("",!0),d.value&&v.value.includes("content")?(e.openBlock(),e.createBlock(Ji,{key:4,element:t.element,fields:t.fields},null,8,["element","fields"])):e.createCommentVNode("",!0),v.value.includes("border-bg")?(e.openBlock(),e.createBlock(or,{key:5,element:t.element,"matched-keys":w.value,searching:L.value},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0),v.value.includes("pagination")&&d.value?(e.openBlock(),e.createBlock(Nt,{key:6,element:t.element,"matched-keys":w.value,searching:L.value},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0),v.value.includes("pagination")&&!d.value?(e.openBlock(),e.createBlock(Nt,{key:7,element:t.element,"matched-keys":w.value,searching:L.value},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0),v.value.includes("advanced")?(e.openBlock(),e.createBlock(dr,{key:8,element:t.element,"matched-keys":w.value,searching:L.value,onDeleteElement:b[6]||(b[6]=F=>y.$emit("delete-element"))},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock("p",Os,"请在画布中选择一个元素"))],512),[[e.vShow,(t.activeTab||"page")==="element"]]),e.withDirectives(e.createElementVNode("div",Gs,[e.createElementVNode("form",{class:"pd-form",onSubmit:b[11]||(b[11]=e.withModifiers(()=>{},["prevent"]))},[b[28]||(b[28]=e.createElementVNode("h3",{class:"pd-divider"},"纸张设置",-1)),e.createElementVNode("div",qs,[b[14]||(b[14]=e.createElementVNode("span",{class:"pd-label"},"纸张尺寸",-1)),e.createElementVNode("select",{value:A.value,class:"pd-select",onChange:b[7]||(b[7]=F=>Z(F.target.value)),style:{width:"100%"}},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l),(F,Y)=>(e.openBlock(),e.createElementBlock("option",{key:Y,value:Y},e.toDisplayString(Y),9,Ys))),128)),b[13]||(b[13]=e.createElementVNode("option",{value:"CUSTOM"},"自定义",-1))],40,Ws)]),A.value==="CUSTOM"?(e.openBlock(),e.createElementBlock("div",Ks,[b[16]||(b[16]=e.createElementVNode("span",{class:"pd-label"},"自定义宽高 (mm)",-1)),e.createElementVNode("div",Xs,[e.createVNode(ne,{"model-value":V.value,min:25,max:2e3,"onUpdate:modelValue":se},null,8,["model-value"]),b[15]||(b[15]=e.createElementVNode("span",{class:"custom-size-x"},"×",-1)),e.createVNode(ne,{"model-value":O.value,min:25,max:2e3,"onUpdate:modelValue":le},null,8,["model-value"])])])):e.createCommentVNode("",!0),e.createElementVNode("div",js,[b[19]||(b[19]=e.createElementVNode("span",{class:"pd-label"},"方向",-1)),e.createElementVNode("div",Js,[e.createElementVNode("label",Zs,[e.createElementVNode("input",{type:"radio",value:"portrait",checked:G.value==="portrait",onChange:b[8]||(b[8]=F=>j(F.target.value))},null,40,Qs),b[17]||(b[17]=e.createElementVNode("span",null,"纵向",-1))]),e.createElementVNode("label",_s,[e.createElementVNode("input",{type:"radio",value:"landscape",checked:G.value==="landscape",onChange:b[9]||(b[9]=F=>j(F.target.value))},null,40,ed),b[18]||(b[18]=e.createElementVNode("span",null,"横向",-1))])])]),e.createElementVNode("div",td,[b[20]||(b[20]=e.createElementVNode("span",{class:"pd-label"},"页面背景色",-1)),e.createElementVNode("div",od,[e.createVNode(we,{modelValue:K.value,"onUpdate:modelValue":b[10]||(b[10]=F=>K.value=F),class:"page-bg-picker"},null,8,["modelValue"]),e.createElementVNode("button",{type:"button",class:"pd-reset",title:"恢复为默认白色",onClick:ie},"默认")])]),b[29]||(b[29]=e.createElementVNode("h3",{class:"pd-divider"},"页边距 (mm)",-1)),e.createElementVNode("div",nd,[e.createElementVNode("div",ld,[b[21]||(b[21]=e.createElementVNode("span",{class:"pd-label"},"上",-1)),e.createVNode(ne,{"model-value":S.value,min:0,max:50,"onUpdate:modelValue":P},null,8,["model-value"])]),e.createElementVNode("div",ad,[b[22]||(b[22]=e.createElementVNode("span",{class:"pd-label"},"下",-1)),e.createVNode(ne,{"model-value":M.value,min:0,max:50,"onUpdate:modelValue":g},null,8,["model-value"])]),e.createElementVNode("div",id,[b[23]||(b[23]=e.createElementVNode("span",{class:"pd-label"},"左",-1)),e.createVNode(ne,{"model-value":x.value,min:0,max:50,"onUpdate:modelValue":E},null,8,["model-value"])]),e.createElementVNode("div",rd,[b[24]||(b[24]=e.createElementVNode("span",{class:"pd-label"},"右",-1)),e.createVNode(ne,{"model-value":B.value,min:0,max:50,"onUpdate:modelValue":f},null,8,["model-value"])])]),b[30]||(b[30]=e.createElementVNode("h3",{class:"pd-divider"},"三区高度 (mm)",-1)),e.createElementVNode("div",sd,[b[25]||(b[25]=e.createElementVNode("span",{class:"pd-label"},"页眉高度",-1)),e.createVNode(ne,{"model-value":T.value,min:0,max:100,step:.1,"onUpdate:modelValue":m},null,8,["model-value"])]),e.createElementVNode("div",dd,[b[26]||(b[26]=e.createElementVNode("span",{class:"pd-label"},"页脚高度",-1)),e.createVNode(ne,{"model-value":z.value,min:0,max:100,step:.1,"onUpdate:modelValue":k},null,8,["model-value"])]),e.createElementVNode("div",cd,[b[27]||(b[27]=e.createElementVNode("span",{class:"pd-label"},"首页叠加高度",-1)),e.createVNode(ne,{"model-value":u.value,min:0,max:200,"onUpdate:modelValue":h},null,8,["model-value"])])],32)],512),[[e.vShow,(t.activeTab||"page")==="page"]])])],64))],2))}}),md=_(ud,[["__scopeId","data-v-93072c2b"]]),pd={class:"status-bar"},fd={key:0,class:"status-item coord"},vd={class:"status-item"},gd={class:"status-item"},hd={class:"status-item status-paper"},bd=e.defineComponent({__name:"StatusBar",props:{coordinate:{},scale:{},elementCount:{},selectedCount:{},paper:{},dirty:{type:Boolean}},setup(t){return(a,o)=>(e.openBlock(),e.createElementBlock("div",pd,[t.coordinate?(e.openBlock(),e.createElementBlock("span",fd," x:"+e.toDisplayString(t.coordinate.x.toFixed(1))+" y:"+e.toDisplayString(t.coordinate.y.toFixed(1))+"mm ",1)):e.createCommentVNode("",!0),e.createElementVNode("span",vd,"缩放 "+e.toDisplayString(t.scale)+"%",1),e.createElementVNode("span",gd,"元素 "+e.toDisplayString(t.elementCount)+e.toDisplayString(t.selectedCount?` (选中 ${t.selectedCount})`:""),1),e.createElementVNode("span",{class:e.normalizeClass(["status-dirty",{on:t.dirty}])},[o[0]||(o[0]=e.createElementVNode("span",{class:"dirty-dot"},null,-1)),e.createTextVNode(e.toDisplayString(t.dirty?"未保存":"已保存"),1)],2),e.createElementVNode("span",hd,e.toDisplayString(t.paper),1)]))}}),yd=_(bd,[["__scopeId","data-v-eb34e9a7"]]),kd={id:"getting-started",title:"快速入门",content:`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),w=require("@worm-vue3-print/core/designer"),_e=require("jsbarcode"),et=require("qrcode"),ft=require("dompurify"),Pe=require("@worm-vue3-print/core/browser"),tt=Symbol("selected-ids"),ot=Symbol("preview-ids");function gt(o){const r=e.ref(new Set),t=e.ref(new Set),n=e.computed(()=>o.value.filter(C=>r.value.has(C.id))),l=e.computed(()=>r.value.size>0);function i(C,I=!1){if(I){const O=new Set(r.value);O.has(C)?O.delete(C):O.add(C),r.value=O}else r.value=new Set([C])}function a(){r.value=new Set}function c(C){r.value=new Set(C)}function h(C){t.value=new Set(C)}function u(){t.value=new Set}function f(){r.value=new Set(t.value),t.value=new Set}function E(){const C=n.value;if(C.length===0)return null;let I=1/0,O=1/0,z=-1/0,S=-1/0;return C.forEach(U=>{I=Math.min(I,U.options.left),O=Math.min(O,U.options.top),z=Math.max(z,U.options.left+U.options.width),S=Math.max(S,U.options.top+U.options.height)}),{left:I,top:O,width:z-I,height:S-O}}return{selectedIds:r,selectedElements:n,hasSelection:l,select:i,clearSelection:a,selectAll:c,getSelectionBounds:E,previewIds:t,setPreview:h,clearPreview:u,commitPreview:f}}function ht(){const o=e.ref(null);function r(l){o.value=l.map(i=>({options:{...i.options},printElementType:{...i.printElementType}}))}function t(l=10){return o.value?o.value.map(i=>({id:w.generateId(),options:{...i.options,left:i.options.left+l,top:i.options.top+l},printElementType:{...i.printElementType}})):null}function n(){return o.value!==null&&o.value.length>0}return{clipboard:o,copy:r,paste:t,hasData:n}}function bt(o){const t=e.ref([]),n=e.ref([]),l=e.ref(!1),i=e.ref(!1);function a(){l.value=t.value.length>0,i.value=n.value.length>0}function c(I){return{elements:JSON.parse(JSON.stringify(I?.elements??[])),templateData:JSON.parse(JSON.stringify(I?.templateData??{}))}}function h(I){return c(I)}function u(I){t.value.push(h(I)),n.value=[],t.value.length>50&&t.value.shift(),a()}function f(I){if(t.value.length===0)return null;const O=t.value.pop();return n.value.push(I?h(I):c(O)),a(),t.value.length>0?c(t.value[t.value.length-1]):null}function E(I){if(n.value.length===0)return null;const O=n.value.pop();return t.value.push(I?h(I):c(O)),a(),c(O)}function C(){t.value=[],n.value=[],a()}return{push:u,undo:f,redo:E,canUndo:l,canRedo:i,clear:C}}function nt(){return{paperSize:"A4",orientation:"portrait",unit:"mm",margins:{top:10,right:10,bottom:10,left:10},header:{height:10,elements:[]},footer:{height:10,elements:[]},firstPageOverlay:{height:0,elements:[]},elements:[],watermark:{}}}function Ue(o){const r=(t,n)=>(t??[]).map(l=>{const i={...l.options};return(l.printElementType?.type??l.type)==="table"&&w.syncTableElementSize(i),{id:l.id||w.generateId(),zone:n,options:i,printElementType:{...l.printElementType}}});return{...o,margins:{...o.margins},header:{height:o.header?.height??10,elements:[]},footer:{height:o.footer?.height??10,elements:[]},firstPageOverlay:{height:o.firstPageOverlay?.height??0,elements:[...o.firstPageOverlay?.elements??[]]},guides:[...o.guides??[]],elements:[...r(o.elements??[],"content"),...r(o.header?.elements??[],"header"),...r(o.footer?.elements??[],"footer")]}}function yt(o={}){const r=e.ref(100),t=e.ref(!0),n=e.ref(!0),l=e.ref(!1),i=e.ref(!0),a=e.ref(Ue(o.initialTemplate||nt())),c=e.computed({get:()=>a.value.elements,set:G=>{a.value.elements=G}}),h=e.ref(o.initialFields||[]),{selectedIds:u,selectedElements:f,select:E,clearSelection:C,selectAll:I,previewIds:O,setPreview:z,clearPreview:S,commitPreview:U}=gt(c),{group:K,ungroup:Z}=w.useGroup(),{copy:W,paste:Q,hasData:_}=ht(),{align:N}=w.useAlign(),{push:$,undo:M,redo:P,canUndo:x,canRedo:D}=bt(),s=e.computed(()=>{if(u.value.size===0)return null;const G=u.value.values().next().value;return c.value.find(te=>te.id===G)||null}),V=e.ref(null);function F(G){V.value=G}function Y(){return{elements:c.value.map(G=>({id:G.id,zone:G.zone,options:JSON.parse(JSON.stringify(G.options)),printElementType:{...G.printElementType}})),templateData:{paperSize:a.value.paperSize,orientation:a.value.orientation,margins:{...a.value.margins},header:{height:a.value.header.height,elements:[]},footer:{height:a.value.footer.height,elements:[]},firstPageOverlay:{height:a.value.firstPageOverlay.height,elements:[]},elements:[],customWidth:a.value.customWidth,customHeight:a.value.customHeight,watermark:a.value.watermark?{...a.value.watermark}:void 0,guides:[...a.value.guides??[]]}}}function j(){$(Y())}function ee(){const G=M(Y());G?.templateData&&(a.value={...G.templateData,elements:G.elements})}function ue(){const G=P(Y());G?.templateData&&(a.value={...G.templateData,elements:G.elements})}function oe(){W(f.value)}function se(){W(f.value),A()}function ae(){const G=Q();G&&G.length>0&&(c.value.push(...G),j())}function L(){W(f.value);const G=Q();G&&G.length>0&&(G.forEach(te=>{te.options.left+=5,te.options.top+=5}),c.value.push(...G),E(G[0].id,!1),j())}function p(){r.value=100}const k=e.computed(()=>_());let B=!1,T=null;const g=300;function d(G,te){const X=f.value.filter(ne=>!ne.options.locked);X.length!==0&&(X.forEach(ne=>{ne.options.left+=G,ne.options.top+=te}),B||(B=!0,j()),T&&clearTimeout(T),T=setTimeout(()=>{B=!1,T=null},g))}function m(){I(c.value.map(G=>G.id))}function y(G){N(f.value,G),j()}function v(){c.value=K(c.value,u.value),j()}function b(){c.value=Z(c.value,u.value),j()}function A(){u.value.size!==0&&(c.value=c.value.filter(G=>!u.value.has(G.id)),C(),j())}const{setup:q,cleanup:de}=w.useKeyboard({onMove:d,onDelete:A,onCopy:oe,onPaste:ae,onSelectAll:m,onUndo:ee,onRedo:ue,onDuplicate:L,onResetZoom:p,onAlignLeft:()=>y("left"),onAlignRight:()=>y("right"),onAlignCenterH:()=>y("vertical"),onAlignTop:()=>y("top"),onAlignBottom:()=>y("bottom"),onGroup:v,onUngroup:b});let re=null;function me(){re=Y()}function ve(){if(!re)return;const G=new Map(re.elements.map(ce=>[ce.id,ce]));let te=!1;for(const ce of c.value){const ye=G.get(ce.id);if(!ye)continue;(ye.options.left!==ce.options.left||ye.options.top!==ce.options.top||ye.options.width!==ce.options.width||ye.options.height!==ce.options.height)&&w.finalizeElementZone(ce,a.value).rejected&&(te=!0)}te&&alert("该元素类型不能放入页眉/页脚");const X=ce=>`${ce.id}:${ce.zone||"content"}:${ce.options.left},${ce.options.top},${ce.options.width},${ce.options.height}`,ne=re.elements.map(X).join("|"),be=Y().elements.map(X).join("|");re=null,ne!==be&&j()}function fe(G,te){const X=w.zoneFromPaperPoint(a.value,te.x,te.y);if(X!=="content"&&!w.ZONE_ALLOWED_TYPES.includes(G.printElementType.type))return alert("该元素类型不能放入页眉/页脚"),!1;const ne=w.getZoneRects(a.value)[X];return G.zone=X,G.options.left=te.x-ne.left,G.options.top=te.y-ne.top,X!=="content"&&w.clampToZone(G,ne),!0}function ge(G,te){const X=w.createRuntimeElement(G);te&&!fe(X,te)||(c.value.push(X),E(X.id,!1),j())}function he(G,te){const X=w.createFieldElement(G);te&&!fe(X,te)||(c.value.push(X),E(X.id,!1),j())}function we(G){if(u.value.size===0)return;const te=u.value.values().next().value,X=c.value.find(Ve=>Ve.id===te);if(!X)return;const ne=X.options.zIndex??0,be=c.value.map(Ve=>Ve.options.zIndex??0),ce=Math.max(...be,0),ye=Math.min(...be,0);switch(G){case"top":X.options.zIndex=ce+1;break;case"bottom":X.options.zIndex=ye-1;break;case"up":X.options.zIndex=ne+1;break;case"down":X.options.zIndex=ne-1;break}j()}function Ne(G,te){const{width:X,height:ne}=w.getPaperDimensions(a.value),be=96/25.4;r.value=w.computeFitScale(G,te,X*be,ne*be)}function De(G){a.value={...G},j()}function Re(){const G=c.value,te=X=>G.filter(ne=>(ne.zone||"content")===X).map(ne=>({id:ne.id,type:ne.printElementType.type,options:{...ne.options},printElementType:{...ne.printElementType}}));return{unit:"mm",...a.value,header:{...a.value.header,elements:te("header")},footer:{...a.value.footer,elements:te("footer")},firstPageOverlay:{...a.value.firstPageOverlay,elements:a.value.firstPageOverlay.elements.map(X=>({id:X.id||w.generateId(),type:X.printElementType?.type||"text",options:{...X.options},printElementType:{...X.printElementType}}))},elements:te("content"),guides:[...a.value.guides??[]]}}function Ie(G,te){const X=w.normalizeTemplateUnits(G);a.value=Ue(X),te&&(a.value={...a.value,elements:te.map(ne=>({...ne,id:ne.id||w.generateId(),zone:ne.zone||"content",options:{...ne.options},printElementType:{...ne.printElementType}}))}),$(Y())}return $(Y()),e.onMounted(()=>q()),e.onUnmounted(()=>{de(),T&&(clearTimeout(T),T=null)}),{scale:r,showRuler:t,showGrid:n,snapToGrid:l,showTableGhostBorder:i,templateData:a,elements:c,fields:h,selectedIds:u,selectedElements:f,selectedElement:s,select:E,clearSelection:C,selectAll:m,previewIds:O,setPreview:z,clearPreview:S,commitPreview:U,hasClipboard:k,copy:oe,paste:ae,cutSelected:se,tableSelection:V,setTableSelection:F,canUndo:x,canRedo:D,undo:ee,redo:ue,recordHistory:j,alignSelected:y,groupSelected:v,ungroupSelected:b,deleteSelected:A,duplicateSelected:L,resetZoom:p,dragStart:me,dragStop:ve,addElement:ge,addFieldElement:he,moveLayer:we,fitToWindow:Ne,updateTemplateData:De,getTemplateJson:Re,loadTemplate:Ie}}let qe=0;function Et(){return qe+=1,`guide-${qe}`}function kt(o,r){const t=e.computed(()=>o.value.guides??[]);function n(h){o.value={...o.value,guides:h([...o.value.guides??[]])},r()}function l(h,u){n(f=>(f.push({type:h,position:u,id:Et()}),f))}function i(h,u){n(f=>f.map(E=>E.id===h?{...E,position:u}:E))}function a(h){n(u=>u.filter(f=>f.id!==h))}function c(){const h=[],u=[];for(const f of t.value)f.type==="vertical"?h.push(f.position):u.push(f.position);return{vertical:h,horizontal:u}}return{guides:t,addGuide:l,moveGuide:i,removeGuide:a,getGuidePositions:c}}const Te=Symbol("table-edit"),Ge=Symbol("print-upload-image"),Vt=e.defineComponent({__name:"HelpButton",emits:["click"],setup(o){return(r,t)=>(e.openBlock(),e.createElementBlock("button",{class:"help-button",title:"帮助文档",onClick:t[0]||(t[0]=n=>r.$emit("click"))},[...t[1]||(t[1]=[e.createElementVNode("span",{class:"help-icon"},"?",-1)])]))}}),J=(o,r)=>{const t=o.__vccOpts||o;for(const[n,l]of r)t[n]=l;return t},wt=J(Vt,[["__scopeId","data-v-80ccab03"]]),Nt={class:"designer-toolbar"},Ct={class:"tb-group"},St={class:"tb-title"},Bt={class:"tb-title-name"},$t={class:"tb-group"},xt=["disabled"],Tt=["disabled"],Dt={key:0,class:"tb-group"},Mt={key:1,class:"tb-group"},zt={key:2,class:"tb-group"},Lt={key:3,class:"tb-group"},Pt={class:"tb-group"},Rt={class:"tb-zoom"},It={key:4,class:"tb-group"},At={class:"tb-group"},Ht={class:"tb-group"},Ft=e.defineComponent({__name:"DesignerToolbar",props:e.mergeModels({isEdit:{type:Boolean},canUndo:{type:Boolean},canRedo:{type:Boolean},hasMultiSelection:{type:Boolean},hasSelection:{type:Boolean},showRuler:{type:Boolean,default:!0},showGrid:{type:Boolean},snapToGrid:{type:Boolean},showTableGhostBorder:{type:Boolean},selectedElementHasGroup:{type:Boolean},overlayVisible:{type:Boolean},showLoadDefault:{type:Boolean},showHelp:{type:Boolean,default:!0}},{scale:{default:100},scaleModifiers:{}}),emits:e.mergeModels(["preview","save","load-default","undo","redo","align","move-layer","toggle-ruler","toggle-grid","toggle-snap","toggle-table-ghost-border","toggle-overlay","group","ungroup","add-overlay-element","fit-window","zoom","help"],["update:scale"]),setup(o){const r=e.useModel(o,"scale");return(t,n)=>(e.openBlock(),e.createElementBlock("div",Nt,[e.createElementVNode("div",Ct,[n[30]||(n[30]=e.createStaticVNode('<span class="tb-mark" aria-hidden="true" data-v-e6d10b59><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-e6d10b59><rect x="5" y="3" width="14" height="18" rx="2.5" data-v-e6d10b59></rect><line x1="8.5" y1="8.5" x2="15.5" y2="8.5" data-v-e6d10b59></line><line x1="8.5" y1="12.5" x2="15.5" y2="12.5" data-v-e6d10b59></line><line x1="8.5" y1="16.5" x2="12.5" y2="16.5" data-v-e6d10b59></line></svg></span>',1)),e.createElementVNode("div",St,[e.createElementVNode("span",Bt,e.toDisplayString(o.isEdit?"编辑模板":"新建模板"),1),n[29]||(n[29]=e.createElementVNode("span",{class:"tb-title-sub"},"打印模板设计器",-1))])]),e.createElementVNode("div",$t,[e.createElementVNode("button",{class:"tb-btn tb-icon",disabled:!o.canUndo,onClick:n[0]||(n[0]=l=>t.$emit("undo")),"data-tip":"撤销"},"↶",8,xt),e.createElementVNode("button",{class:"tb-btn tb-icon",disabled:!o.canRedo,onClick:n[1]||(n[1]=l=>t.$emit("redo")),"data-tip":"重做"},"↷",8,Tt)]),o.hasMultiSelection?(e.openBlock(),e.createElementBlock("div",Dt,[e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[2]||(n[2]=l=>t.$emit("align","left")),title:"左对齐"},"⇤"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[3]||(n[3]=l=>t.$emit("align","right")),title:"右对齐"},"⇥"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[4]||(n[4]=l=>t.$emit("align","top")),title:"顶对齐"},"⇡"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[5]||(n[5]=l=>t.$emit("align","bottom")),title:"底对齐"},"⇣"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[6]||(n[6]=l=>t.$emit("align","vertical")),title:"水平居中"},"↔"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[7]||(n[7]=l=>t.$emit("align","horizontal")),title:"垂直居中"},"↕"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[8]||(n[8]=l=>t.$emit("align","distributeHor")),title:"水平分布"},"⇔"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[9]||(n[9]=l=>t.$emit("align","distributeVer")),title:"垂直分布"},"⇕")])):e.createCommentVNode("",!0),o.hasMultiSelection?(e.openBlock(),e.createElementBlock("div",Mt,[e.createElementVNode("button",{class:"tb-btn",onClick:n[10]||(n[10]=l=>t.$emit("group")),title:"组合"},"组合")])):e.createCommentVNode("",!0),!o.hasMultiSelection&&o.selectedElementHasGroup?(e.openBlock(),e.createElementBlock("div",zt,[e.createElementVNode("button",{class:"tb-btn",onClick:n[11]||(n[11]=l=>t.$emit("ungroup")),title:"取消组合"},"取消组合")])):e.createCommentVNode("",!0),o.hasSelection?(e.openBlock(),e.createElementBlock("div",Lt,[e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[12]||(n[12]=l=>t.$emit("move-layer","top")),"data-tip":"置顶"},"⤒"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[13]||(n[13]=l=>t.$emit("move-layer","up")),"data-tip":"上移一层"},"↑"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[14]||(n[14]=l=>t.$emit("move-layer","down")),"data-tip":"下移一层"},"↓"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[15]||(n[15]=l=>t.$emit("move-layer","bottom")),"data-tip":"置底"},"⤓")])):e.createCommentVNode("",!0),e.createElementVNode("div",Pt,[e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{on:o.showRuler}]),"data-tip":"显示/隐藏标尺",onClick:n[16]||(n[16]=l=>t.$emit("toggle-ruler"))},[...n[31]||(n[31]=[e.createElementVNode("span",{class:"dot"},null,-1),e.createTextVNode(" 标尺 ",-1)])],2),e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{on:o.showGrid}]),"data-tip":"显示/隐藏网格背景",onClick:n[17]||(n[17]=l=>t.$emit("toggle-grid"))},[...n[32]||(n[32]=[e.createElementVNode("span",{class:"dot"},null,-1),e.createTextVNode(" 网格 ",-1)])],2),e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{on:o.showTableGhostBorder}]),"data-tip":"显示/隐藏无边框表格的虚拟虚线",onClick:n[18]||(n[18]=l=>t.$emit("toggle-table-ghost-border"))},[...n[33]||(n[33]=[e.createElementVNode("span",{class:"dot"},null,-1),e.createTextVNode(" 虚框 ",-1)])],2),e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{on:o.snapToGrid}]),"data-tip":"开启/关闭元素吸附到网格",onClick:n[19]||(n[19]=l=>t.$emit("toggle-snap"))},[...n[34]||(n[34]=[e.createElementVNode("span",{class:"dot"},null,-1),e.createTextVNode(" 吸附 ",-1)])],2),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[20]||(n[20]=l=>t.$emit("fit-window")),"data-tip":"适应窗口"},"⤢"),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[21]||(n[21]=l=>t.$emit("zoom",-10)),"data-tip":"缩小"},"−"),e.createElementVNode("span",Rt,e.toDisplayString(r.value)+"%",1),e.createElementVNode("button",{class:"tb-btn tb-icon",onClick:n[22]||(n[22]=l=>t.$emit("zoom",10)),"data-tip":"放大"},"+")]),n[35]||(n[35]=e.createElementVNode("div",{class:"tb-spacer"},null,-1)),o.showHelp?(e.openBlock(),e.createElementBlock("div",It,[e.createVNode(wt,{onClick:n[23]||(n[23]=l=>t.$emit("help"))})])):e.createCommentVNode("",!0),e.createElementVNode("div",At,[e.createElementVNode("button",{class:"tb-btn",onClick:n[24]||(n[24]=l=>t.$emit("add-overlay-element"))},"首页专属"),e.createElementVNode("button",{class:e.normalizeClass(["tb-btn",{warn:o.overlayVisible}]),onClick:n[25]||(n[25]=l=>t.$emit("toggle-overlay"))},"叠层对比",2)]),e.createElementVNode("div",Ht,[o.showLoadDefault?(e.openBlock(),e.createElementBlock("button",{key:0,class:"btn-secondary",onClick:n[26]||(n[26]=l=>t.$emit("load-default"))},"加载默认布局")):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"btn-secondary",onClick:n[27]||(n[27]=l=>t.$emit("preview"))},"预览"),e.createElementVNode("button",{class:"btn-primary",onClick:n[28]||(n[28]=l=>t.$emit("save"))},"保存")])]))}}),Ut=J(Ft,[["__scopeId","data-v-e6d10b59"]]),Gt={class:"layer-panel"},Ot=["onClick"],Wt={class:"layer-icon"},qt={class:"layer-name"},Kt={key:0,class:"layer-zone"},Yt={class:"layer-zindex"},jt={key:0,class:"layer-actions"},Xt=e.defineComponent({__name:"LayerPanel",props:{elements:{},selectedIds:{}},emits:["select","move-layer"],setup(o){const r=o,t=e.computed(()=>[...r.elements].sort((c,h)=>(h.options.zIndex??0)-(c.options.zIndex??0))),n={text:"T",longText:"¶",table:"⊞",image:"🖼",barcode:"≡",qrcode:"▣",hline:"—",vline:"|",rect:"□",oval:"○",html:"<>"};function l(c){return n[c.printElementType.type]||"?"}function i(c){return c.options.title||c.printElementType.title||c.printElementType.type}function a(c){return c.zone==="header"?"页眉":c.zone==="footer"?"页脚":""}return(c,h)=>(e.openBlock(),e.createElementBlock("div",Gt,[h[4]||(h[4]=e.createElementVNode("div",{class:"panel-title"},"图层",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value,u=>(e.openBlock(),e.createElementBlock("div",{key:u.id,class:e.normalizeClass(["layer-item",{active:o.selectedIds.has(u.id)}]),onClick:f=>c.$emit("select",u.id,!1)},[e.createElementVNode("span",Wt,e.toDisplayString(l(u)),1),e.createElementVNode("span",qt,e.toDisplayString(i(u)),1),a(u)?(e.openBlock(),e.createElementBlock("span",Kt,e.toDisplayString(a(u)),1)):e.createCommentVNode("",!0),e.createElementVNode("span",Yt,"z:"+e.toDisplayString(u.options.zIndex??0),1)],10,Ot))),128)),t.value.length>0?(e.openBlock(),e.createElementBlock("div",jt,[e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:h[0]||(h[0]=u=>c.$emit("move-layer","top")),title:"置顶"}," ⤒ "),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:h[1]||(h[1]=u=>c.$emit("move-layer","up")),title:"上移"}," ↑ "),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:h[2]||(h[2]=u=>c.$emit("move-layer","down")),title:"下移"}," ↓ "),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:h[3]||(h[3]=u=>c.$emit("move-layer","bottom")),title:"置底"}," ⤓ ")])):e.createCommentVNode("",!0)]))}}),Zt=J(Xt,[["__scopeId","data-v-f7a10482"]]),Jt={class:"field-tree-panel"},Qt={class:"tree-container"},_t=["onClick"],eo={class:"expand-icon"},to={class:"node-icon"},oo={class:"group-label"},no=["onDragstart"],lo={class:"node-label"},ao={class:"node-key"},io={key:0,class:"pd-empty"},ro=e.defineComponent({__name:"FieldTreePanel",props:{fields:{}},emits:["field-drag"],setup(o,{emit:r}){const t=o,n=r,l=e.ref(""),i=e.ref(new Set),a=e.computed(()=>!!l.value.trim()),c=e.computed(()=>w.filterGroups(w.groupFields(t.fields),l.value));function h(f){const E=new Set(i.value);E.has(f)?E.delete(f):E.add(f),i.value=E}function u(f,E){f.dataTransfer?.setData("fieldData",JSON.stringify({fieldKey:E.fieldKey,fieldLabel:E.fieldLabel})),f.dataTransfer&&(f.dataTransfer.effectAllowed="copy"),n("field-drag",E)}return(f,E)=>(e.openBlock(),e.createElementBlock("div",Jt,[E[2]||(E[2]=e.createElementVNode("div",{class:"panel-title"},"业务字段",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":E[0]||(E[0]=C=>l.value=C),class:"pd-input search-input",type:"search",placeholder:"搜索字段...","aria-label":"搜索字段"},null,512),[[e.vModelText,l.value]]),e.createElementVNode("div",Qt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,C=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:C.key||"_top"},[C.key?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["field-group-header",{"is-list":C.isList}]),onClick:I=>h(C.key)},[e.createElementVNode("span",eo,e.toDisplayString(i.value.has(C.key)&&!a.value?"▶":"▼"),1),e.createElementVNode("span",to,e.toDisplayString(C.isList?"📋":"📁"),1),e.createElementVNode("span",oo,e.toDisplayString(C.label),1)],10,_t)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.fields,I=>(e.openBlock(),e.createElementBlock("div",{key:I.fieldKey,class:"field-row",draggable:"true",style:e.normalizeStyle({paddingLeft:(C.key?22:8)+"px"}),onDragstart:O=>u(O,I)},[E[1]||(E[1]=e.createElementVNode("span",{class:"node-icon"},"📄",-1)),e.createElementVNode("span",lo,e.toDisplayString(I.fieldLabel),1),e.createElementVNode("span",ao,"("+e.toDisplayString(I.fieldKey)+")",1)],44,no))),128))],512),[[e.vShow,!C.key||a.value||!i.value.has(C.key)]])],64))),128))]),c.value.length===0?(e.openBlock(),e.createElementBlock("p",io,"暂无字段")):e.createCommentVNode("",!0)]))}}),so=J(ro,[["__scopeId","data-v-9b326f07"]]),co={key:0,class:"left-collapsed"},uo={class:"left-head"},mo={class:"pd-tabs left-tabs"},po={class:"pd-tab-bar",role:"tablist"},vo={class:"pd-tab-pane",role:"tabpanel"},fo=["onDragstart"],go={class:"material-icon"},ho={class:"material-label"},bo={class:"pd-tab-pane",role:"tabpanel"},yo={class:"pd-tab-pane",role:"tabpanel"},Eo=e.defineComponent({__name:"LeftPanel",props:{fields:{},elements:{},selectedIds:{},collapsed:{type:Boolean}},emits:["select","move-layer","toggle-visible","toggle-locked","field-drag","toggle-collapse"],setup(o,{emit:r}){const t=r,n=e.ref("elements"),l=[{type:"text",label:"文本",icon:"T"},{type:"barcode",label:"条形码",icon:"▍▍"},{type:"qrcode",label:"二维码",icon:"▦"},{type:"image",label:"图片",icon:"▧"},{type:"table",label:"表格",icon:"⊞"},{type:"longText",label:"长文",icon:"¶"},{type:"hline",label:"横线",icon:"―"},{type:"vline",label:"竖线",icon:"│"},{type:"rect",label:"矩形",icon:"▭"},{type:"oval",label:"椭圆",icon:"◯"},{type:"html",label:"HTML",icon:"<>"}];function i(h,u){h.dataTransfer?.setData("elementType",u)}function a(h){t("field-drag",h)}function c(h){n.value=h,t("toggle-collapse")}return(h,u)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["left-panel",{collapsed:o.collapsed}])},[o.collapsed?(e.openBlock(),e.createElementBlock("div",co,[e.createElementVNode("button",{class:"lc-btn",title:"展开素材台",onClick:u[0]||(u[0]=f=>c(n.value))},"»"),e.createElementVNode("button",{class:e.normalizeClass(["lc-btn",{on:n.value==="elements"}]),title:"元素",onClick:u[1]||(u[1]=f=>c("elements"))},"▦",2),e.createElementVNode("button",{class:e.normalizeClass(["lc-btn",{on:n.value==="fields"}]),title:"字段",onClick:u[2]||(u[2]=f=>c("fields"))},"⊛",2),e.createElementVNode("button",{class:e.normalizeClass(["lc-btn",{on:n.value==="layers"}]),title:"图层",onClick:u[3]||(u[3]=f=>c("layers"))},"≡",2)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",uo,[u[12]||(u[12]=e.createElementVNode("span",{class:"left-title"},"素材台",-1)),e.createElementVNode("button",{class:"collapse-btn",title:"收起素材台",onClick:u[4]||(u[4]=f=>h.$emit("toggle-collapse"))},"«")]),e.createElementVNode("div",mo,[e.createElementVNode("div",po,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:n.value==="elements"}]),onClick:u[5]||(u[5]=f=>n.value="elements")},"元素",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:n.value==="fields"}]),onClick:u[6]||(u[6]=f=>n.value="fields")},"字段",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:n.value==="layers"}]),onClick:u[7]||(u[7]=f=>n.value="layers")},"图层",2)]),e.withDirectives(e.createElementVNode("div",vo,[u[13]||(u[13]=e.createElementVNode("div",{class:"panel-title"},"拖拽元素到画布",-1)),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,f=>e.createElementVNode("div",{key:f.type,class:"material-card",draggable:"true",onDragstart:E=>i(E,f.type)},[e.createElementVNode("span",go,e.toDisplayString(f.icon),1),e.createElementVNode("span",ho,e.toDisplayString(f.label),1)],40,fo)),64))],512),[[e.vShow,n.value==="elements"]]),e.withDirectives(e.createElementVNode("div",bo,[e.createVNode(so,{fields:o.fields,onFieldDrag:a},null,8,["fields"])],512),[[e.vShow,n.value==="fields"]]),e.withDirectives(e.createElementVNode("div",yo,[e.createVNode(Zt,{elements:o.elements,"selected-ids":o.selectedIds,onSelect:u[8]||(u[8]=(f,E)=>h.$emit("select",f,E)),onMoveLayer:u[9]||(u[9]=f=>h.$emit("move-layer",f)),onToggleVisible:u[10]||(u[10]=f=>h.$emit("toggle-visible",f)),onToggleLocked:u[11]||(u[11]=f=>h.$emit("toggle-locked",f))},null,8,["elements","selected-ids"])],512),[[e.vShow,n.value==="layers"]])])],64))],2))}}),ko=J(Eo,[["__scopeId","data-v-15dad0f0"]]);function Vo(o,r){const t=e.ref(!1),n=e.ref(null);let l=0,i=0,a=0,c=0,h=!1;function u(z){if(r.disabled)return;const S=z.target;if(!(S instanceof HTMLElement)||S.classList.contains("resize-handle"))return;t.value=!0,h=z.altKey,l=z.clientX,i=z.clientY;const U=o.value;U&&(a=parseFloat(U.style.left)||0,c=parseFloat(U.style.top)||0,n.value={left:a,top:c,width:parseFloat(U.style.width)||0,height:parseFloat(U.style.height)||0},r.onStart?.({altKey:h}),document.addEventListener("mousemove",E),document.addEventListener("mouseup",C),z.preventDefault())}function f(z){const S=r.getScale?.()??1;let U=a+(z.clientX-l)/S,K=c+(z.clientY-i)/S;if(r.axis==="x"&&(K=c),r.axis==="y"&&(U=a),r.onAdsorb){const Z=o.value;if(Z){const W=parseFloat(Z.style.width)||0,Q=parseFloat(Z.style.height)||0,_=r.onAdsorb({left:U,top:K,width:W,height:Q});U=_.left,K=_.top}}return{left:U,top:K}}function E(z){const S=f(z);n.value&&(n.value.left=S.left,n.value.top=S.top),r.onDrag(S)}function C(z){t.value=!1;const S=f(z);r.onDragEnd?.(S,{altKey:h}),r.onStop?.(),n.value=null,document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",C)}function I(){const z=o.value;z&&z.removeEventListener("mousedown",u),document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",C)}function O(){I();const z=o.value;z&&z.addEventListener("mousedown",u)}return{isDragging:t,dragPreview:n,setup:O,cleanup:I}}const wo=e.defineComponent({__name:"TextElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(o){const r=o,t={top:"flex-start",middle:"center",bottom:"flex-end"},n={left:"flex-start",center:"center",right:"flex-end"},l=e.computed(()=>{const a=r.element.options;return{fontSize:(a.fontSize||12)+"pt",fontWeight:a.fontWeight||"normal",fontFamily:a.fontFamily||"inherit",color:a.color||"#333",backgroundColor:a.backgroundColor||"transparent",textAlign:a.textAlign||"left",lineHeight:a.lineHeight?a.lineHeight+"pt":"normal",letterSpacing:a.letterSpacing?a.letterSpacing+"pt":"normal",textDecoration:a.textDecoration||"none",padding:`${a.contentPaddingTop||0}pt ${a.contentPaddingRight||0}pt ${a.contentPaddingBottom||0}pt ${a.contentPaddingLeft||0}pt`,width:"100%",height:"100%",boxSizing:"border-box",overflow:"hidden",...a.verticalAlign?{display:"flex",alignItems:t[a.verticalAlign]??"flex-start",justifyContent:n[a.textAlign||"left"]??"flex-start"}:{}}}),i=e.computed(()=>r.designMode?r.element.options.testData?r.element.options.testData:r.element.options.formatter||"文本":w.resolveTextBinding(r.element.options,r.data));return(a,c)=>(e.openBlock(),e.createElementBlock("div",{class:"print-text",style:e.normalizeStyle(l.value)},e.toDisplayString(i.value),5))}}),No={class:"print-image"},Co=["src"],So={key:1,class:"image-placeholder"},Bo=e.defineComponent({__name:"ImageElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(o){const r=o,t=e.computed(()=>{const a=r.element.options.src||"";return a?a.includes("{")?r.designMode?w.evaluateTemplate(a,w.DEFAULT_DEMO_DATA):w.evaluateTemplate(a,r.data?.[0]||{}):a:""}),n=e.ref(!1);function l(){n.value=!0}e.watch(t,()=>{n.value=!1});const i=e.computed(()=>({objectFit:r.element.options.fit||"contain"}));return(a,c)=>(e.openBlock(),e.createElementBlock("div",No,[t.value&&!n.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.value,style:e.normalizeStyle(i.value),onError:l},null,44,Co)):(e.openBlock(),e.createElementBlock("div",So,"图片"))]))}}),$o=J(Bo,[["__scopeId","data-v-007a2979"]]),xo=e.defineComponent({__name:"LongTextElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(o){const r=o,t={top:"flex-start",middle:"center",bottom:"flex-end"},n={left:"flex-start",center:"center",right:"flex-end"},l=e.computed(()=>{const a=r.element.options;return{fontSize:(a.fontSize||12)+"pt",fontWeight:a.fontWeight||"normal",fontFamily:a.fontFamily||"inherit",color:a.color||"#333",backgroundColor:a.backgroundColor||"transparent",textAlign:a.textAlign||"left",lineHeight:a.lineHeight?a.lineHeight+"pt":"1.5",letterSpacing:a.letterSpacing?a.letterSpacing+"pt":"normal",textIndent:a.longTextIndent?a.longTextIndent+"pt":"0",width:"100%",height:"100%",overflow:"hidden",wordBreak:"break-all",boxSizing:"border-box",...a.verticalAlign?{display:"flex",alignItems:t[a.verticalAlign]??"flex-start",justifyContent:n[a.textAlign||"left"]??"flex-start"}:{}}}),i=e.computed(()=>r.designMode?r.element.options.formatter?r.element.options.formatter:"长文本内容":w.resolveTextBinding(r.element.options,r.data));return(a,c)=>(e.openBlock(),e.createElementBlock("div",{class:"print-longtext",style:e.normalizeStyle(l.value)},e.toDisplayString(i.value),5))}}),To=["title"],Do=["title","onClick"],Mo=e.defineComponent({__name:"TableContextMenu",props:{visible:{type:Boolean},x:{},y:{},canDeleteRow:{type:Boolean},canDeleteCol:{type:Boolean},mergeDisabledReason:{},canSplit:{type:Boolean},currentRowType:{},rowTypeDisabledReason:{type:Function}},emits:["action"],setup(o,{emit:r}){const t=[{value:"header",label:"标题行"},{value:"data",label:"数据行"},{value:"subtotal",label:"小计行"},{value:"summary",label:"汇总行"}],n=r;function l(i,a){n("action",i,a)}return(i,a)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"table-ctx-menu",style:e.normalizeStyle({left:o.x+"px",top:o.y+"px"}),onMousedown:a[8]||(a[8]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",{class:"menu-item",onClick:a[0]||(a[0]=c=>l("insert-row-above"))},"在上方插入行"),e.createElementVNode("div",{class:"menu-item",onClick:a[1]||(a[1]=c=>l("insert-row-below"))},"在下方插入行"),e.createElementVNode("div",{class:e.normalizeClass(["menu-item",{disabled:!o.canDeleteRow}]),onClick:a[2]||(a[2]=c=>o.canDeleteRow&&l("delete-row"))}," 删除行 ",2),a[9]||(a[9]=e.createElementVNode("div",{class:"menu-divider"},null,-1)),e.createElementVNode("div",{class:"menu-item",onClick:a[3]||(a[3]=c=>l("insert-col-left"))},"在左侧插入列"),e.createElementVNode("div",{class:"menu-item",onClick:a[4]||(a[4]=c=>l("insert-col-right"))},"在右侧插入列"),e.createElementVNode("div",{class:e.normalizeClass(["menu-item",{disabled:!o.canDeleteCol}]),onClick:a[5]||(a[5]=c=>o.canDeleteCol&&l("delete-col"))}," 删除列 ",2),a[10]||(a[10]=e.createElementVNode("div",{class:"menu-divider"},null,-1)),e.createElementVNode("div",{class:e.normalizeClass(["menu-item",{disabled:!!o.mergeDisabledReason}]),title:o.mergeDisabledReason||"",onClick:a[6]||(a[6]=c=>!o.mergeDisabledReason&&l("merge"))}," 合并单元格 ",10,To),e.createElementVNode("div",{class:e.normalizeClass(["menu-item",{disabled:!o.canSplit}]),onClick:a[7]||(a[7]=c=>o.canSplit&&l("split"))}," 拆分单元格 ",2),a[11]||(a[11]=e.createElementVNode("div",{class:"menu-divider"},null,-1)),a[12]||(a[12]=e.createElementVNode("div",{class:"menu-group-title"},"行类型",-1)),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(t,c=>e.createElementVNode("div",{key:c.value,class:e.normalizeClass(["menu-item",{disabled:!!o.rowTypeDisabledReason(c.value),active:o.currentRowType===c.value}]),title:o.rowTypeDisabledReason(c.value)||"",onClick:h=>!o.rowTypeDisabledReason(c.value)&&l("set-row-type",c.value)},e.toDisplayString(c.label),11,Do)),64))],36)):e.createCommentVNode("",!0)]))}}),zo=J(Mo,[["__scopeId","data-v-44e319c1"]]),Lo={class:"cell-barcode"},Po=["src"],Ro={key:1,class:"cell-barcode-fallback"},Io=e.defineComponent({__name:"CellBarcode",props:{cellType:{},value:{},barcodeType:{},qrCodeLevel:{},showText:{type:Boolean},fit:{},maxWidth:{},maxHeight:{}},setup(o){const r=o,t=e.ref(null),n=e.ref(!1),l=e.ref(""),i=e.computed(()=>({objectFit:r.fit||"contain",maxWidth:r.maxWidth?`${r.maxWidth}mm`:"100%",maxHeight:r.maxHeight?`${r.maxHeight}mm`:"100%"})),a=e.computed(()=>({objectFit:r.fit||"contain",maxWidth:r.maxWidth?`${r.maxWidth}mm`:"100%",maxHeight:r.maxHeight?`${r.maxHeight}mm`:"100%"}));function c(){if(n.value=!1,!!t.value)try{_e(t.value,r.value,{format:r.barcodeType||"CODE128",width:1,height:28,displayValue:r.showText!==!1,fontSize:9,margin:0}),n.value=!0}catch{}}async function h(){if(!r.value){l.value="";return}try{l.value=await et.toDataURL(r.value,{width:96,margin:1,errorCorrectionLevel:r.qrCodeLevel||"M"})}catch{l.value=""}}function u(){r.cellType==="barcode"?c():h()}return e.onMounted(u),e.watch(()=>[r.cellType,r.value,r.barcodeType,r.qrCodeLevel,r.showText],u),(f,E)=>(e.openBlock(),e.createElementBlock("div",Lo,[e.withDirectives((e.openBlock(),e.createElementBlock("svg",{ref_key:"barcodeSvg",ref:t,preserveAspectRatio:"xMidYMid meet",style:e.normalizeStyle(i.value)},null,4)),[[e.vShow,o.cellType==="barcode"&&n.value]]),o.cellType==="qrcode"&&l.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:l.value,alt:"qrcode",style:e.normalizeStyle(a.value)},null,12,Po)):e.createCommentVNode("",!0),!n.value&&o.cellType==="barcode"?(e.openBlock(),e.createElementBlock("span",Ro,e.toDisplayString(o.value||"条码"),1)):e.createCommentVNode("",!0)]))}}),Ao=J(Io,[["__scopeId","data-v-612f4008"]]),Ho={class:"cell-image"},Fo=["src"],Uo={key:1,class:"image-placeholder"},Go=e.defineComponent({__name:"CellImage",props:{value:{},fit:{},maxWidth:{},maxHeight:{},designMode:{type:Boolean},data:{}},setup(o){const r=o,t=e.computed(()=>{const a=r.value||"";return a?a.includes("{")?r.designMode?w.evaluateTemplate(a,w.DEFAULT_DEMO_DATA):w.evaluateTemplate(a,r.data?.[0]||{}):a:""}),n=e.ref(!1);function l(){n.value=!0}e.watch(t,()=>{n.value=!1});const i=e.computed(()=>({objectFit:r.fit||"contain",maxWidth:r.maxWidth?`${r.maxWidth}mm`:"100%",maxHeight:r.maxHeight?`${r.maxHeight}mm`:"100%"}));return(a,c)=>(e.openBlock(),e.createElementBlock("div",Ho,[t.value&&!n.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.value,style:e.normalizeStyle(i.value),onError:l},null,44,Fo)):(e.openBlock(),e.createElementBlock("div",Uo,"图片"))]))}}),Oo=J(Go,[["__scopeId","data-v-d5bc444b"]]),Wo=["rowspan","colspan","onMousedown","onMouseenter","onDblclick","onContextmenu"],qo={key:2,class:"data-placeholder"},Ko={key:0,class:"col-resize-layer"},Yo=["aria-label","onMousedown"],jo={key:1,class:"row-badges"},ze=3.7795275591,Xo=.1,Zo=e.defineComponent({__name:"TableElement",props:{element:{},designMode:{type:Boolean},isSelected:{type:Boolean},showTableGhostBorder:{type:Boolean},scale:{},data:{}},emits:["dblclick-element","dblclick-cell"],setup(o,{emit:r}){const t={header:"题",data:"数",subtotal:"小",summary:"汇"},n=o,l=r,i=e.inject(Te,{tableSelection:e.ref(null),setTableSelection:()=>{},recordHistory:()=>{},maxTableWidth:e.ref(1/0)}),a=e.computed(()=>n.element.options.tableRows??[]),c=e.computed(()=>n.element.options.tableColWidths??[]),h=e.computed(()=>n.element.options.tableDefaultFontSize??10),u=e.computed(()=>n.element.options.tableDefaultColor??"#333333"),f=e.computed(()=>{const d=i.tableSelection.value;return d&&d.elementId===n.element.id?d:null});function E(d){let m=0;for(let y=0;y<d;y++)m+=a.value[y].height;return m}const C=e.ref(null),I=e.ref([]);function O(){if(!n.designMode)return;const d=C.value;if(!d)return;const m=d.offsetHeight;if(m<=0)return;const y=n.element.options,v=m/ze;Math.abs(v-(y.height??0))>Xo&&(y.height=Math.round(v*100)/100);const b=d.offsetTop;I.value=Array.from(d.rows).map(A=>({top:(A.offsetTop-b)/ze,height:A.offsetHeight/ze}))}function z(d){return I.value[d]?.top??E(d)}function S(d){return I.value[d]?.height??a.value[d]?.height??0}e.watch(()=>[n.element.options,n.designMode],()=>O(),{deep:!0,flush:"post"}),e.onMounted(()=>{O(),document.fonts?.ready.then(()=>O())});const U=e.computed(()=>{const d=n.element.options.dataSource;if(d&&Array.isArray(w.DEFAULT_DEMO_DATA[d]))return w.DEFAULT_DEMO_DATA[d];for(const m of Object.values(w.DEFAULT_DEMO_DATA))if(Array.isArray(m))return m}),K=e.computed(()=>{if(n.data)return n.data});function Z(d){return d.cellType==="barcode"||d.cellType==="qrcode"}function W(d,m){return Z(m)?w.resolveBarcodeDesignValue(m.formatter,U.value):m.formatter||""}function Q(d,m){const y=n.element.options,v={designMode:n.designMode,showGhostBorder:n.showTableGhostBorder};return{fontFamily:m.fontFamily||"inherit",textAlign:m.align??"left",verticalAlign:m.valign??"middle",fontSize:(m.fontSize??h.value)+"pt",fontWeight:m.fontWeight??"normal",color:m.color??u.value,backgroundColor:m.backgroundColor??"transparent",borderTop:w.resolveCellBorderCss(m.borders?.top,v),borderRight:w.resolveCellBorderCss(m.borders?.right,v),borderBottom:w.resolveCellBorderCss(m.borders?.bottom,v),borderLeft:w.resolveCellBorderCss(m.borders?.left,v),padding:(m.padding??y.tableDefaultPadding??1)+"mm",whiteSpace:m.wordWrap??!0?"normal":"nowrap",overflow:m.wordWrap??!0?"visible":"hidden"}}function _(d,m){const y=f.value;return{"cell-selected":!!y&&d>=y.r1&&d<=y.r2&&m>=y.c1&&m<=y.c2,"row-data-bg":a.value[d].type==="data"}}const N=e.ref(null);function $(d,m){const y=w.normalizeSelection(a.value,d,m);i.setTableSelection({elementId:n.element.id,...y})}function M(d,m,y){!n.designMode||!n.isSelected||(y.stopPropagation(),y.shiftKey&&f.value?$({r:f.value.r1,c:f.value.c1},{r:d,c:m}):(N.value={r:d,c:m},$({r:d,c:m},{r:d,c:m})),window.addEventListener("mouseup",()=>{N.value=null},{once:!0}))}function P(d,m){N.value&&$(N.value,{r:d,c:m})}function x(d,m){n.designMode&&l("dblclick-cell",n.element.id,d,m)}const D=e.reactive({visible:!1,x:0,y:0});function s(d,m,y){if(!n.designMode||!n.isSelected)return;const v=f.value;v&&d>=v.r1&&d<=v.r2&&m>=v.c1&&m<=v.c2||$({r:d,c:m},{r:d,c:m}),D.x=y.clientX,D.y=y.clientY,D.visible=!0,window.addEventListener("mousedown",()=>{D.visible=!1},{once:!0})}const V=e.computed(()=>{const d=f.value;return d?w.canMergeReason(a.value,d):"未选择单元格"}),F=e.computed(()=>{const d=f.value;if(!d)return!1;for(let m=d.r1;m<=d.r2;m++)for(let y=d.c1;y<=d.c2;y++){const v=a.value[m].cells[y];if(!v.merged&&((v.rowspan??1)>1||(v.colspan??1)>1))return!0}return!1});function Y(d){const m=f.value;if(!m)return"未选择单元格";if(m.r1!==m.r2)return"行类型仅支持单行设置";const y=JSON.parse(JSON.stringify(a.value));return w.setRowType(y,m.r1,d)}function j(){w.syncTableElementSize(n.element.options)}function ee(d,m){const y=i.maxTableWidth.value,v=d.reduce((b,A)=>b+A,0)+d[m];return v>y?`插入后表格总宽 ${Math.round(v*10)/10}mm 超过打印范围宽度 ${y}mm,请先缩小列宽`:null}function ue(d,m){const y=f.value;if(!y)return;D.visible=!1;const v=n.element.options,b=v.tableRows,A=v.tableColWidths;let q=null;switch(d){case"insert-row-above":w.insertRow(b,y.r1,"above");break;case"insert-row-below":w.insertRow(b,y.r2,"below");break;case"delete-row":q=w.deleteRow(b,y.r1);break;case"insert-col-left":q=ee(A,y.c1),q||w.insertCol(b,A,y.c1,"left");break;case"insert-col-right":q=ee(A,y.c2),q||w.insertCol(b,A,y.c2,"right");break;case"delete-col":q=w.deleteCol(b,A,y.c1);break;case"merge":w.mergeCells(b,y);break;case"split":w.splitCells(b,y);break;case"set-row-type":q=w.setRowType(b,y.r1,m);break}if(q){alert(q);return}i.setTableSelection(null),j(),i.recordHistory()}const oe=e.computed(()=>n.designMode&&!!n.isSelected&&!n.element.options.locked&&c.value.length>=1),se=e.computed(()=>Array.from({length:c.value.length},(d,m)=>m+1));function ae(d){return c.value.slice(0,d).reduce((m,y)=>m+y,0)}const L=e.ref(null);let p=0,k=0;function B(d,m){oe.value&&(L.value=d,p=m.clientX,k=c.value[d-1],document.addEventListener("mousemove",T),document.addEventListener("mouseup",g))}function T(d){if(L.value===null)return;const m=n.scale||1,y=(d.clientX-p)/(m*ze),v=L.value-1,b=n.element.options.tableColWidths;b[v]=w.clampResizedColumnWidth(b,v,k+y,i.maxTableWidth.value),j()}function g(){document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",g),L.value!==null&&(L.value=null,j(),i.recordHistory())}return e.onUnmounted(()=>{document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",g)}),(d,m)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["print-table",{"design-mode":o.designMode}]),onContextmenu:m[0]||(m[0]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("table",{ref_key:"tableRef",ref:C,style:e.normalizeStyle({fontSize:h.value+"pt",color:u.value})},[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(y,v)=>(e.openBlock(),e.createElementBlock("col",{key:v,style:e.normalizeStyle({width:y+"mm"})},null,4))),128))]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(y,v)=>(e.openBlock(),e.createElementBlock("tr",{key:y.id,style:e.normalizeStyle({height:y.height+"mm"})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.cells,(b,A)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.id},[b.merged?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("td",{key:0,rowspan:b.rowspan||1,colspan:b.colspan||1,class:e.normalizeClass(_(v,A)),style:e.normalizeStyle(Q(y,b)),onMousedown:e.withModifiers(q=>M(v,A,q),["left"]),onMouseenter:q=>P(v,A),onDblclick:e.withModifiers(q=>x(v,A),["stop"]),onContextmenu:e.withModifiers(q=>s(v,A,q),["prevent","stop"])},[Z(b)?(e.openBlock(),e.createBlock(Ao,{key:0,"cell-type":b.cellType,value:W(y,b),"barcode-type":b.barcodeType,"qr-code-level":b.qrCodeLevel,"show-text":b.showBarcodeText,fit:b.fit,"max-width":b.maxWidth,"max-height":b.maxHeight},null,8,["cell-type","value","barcode-type","qr-code-level","show-text","fit","max-width","max-height"])):b.cellType==="image"?(e.openBlock(),e.createBlock(Oo,{key:1,value:b.formatter||"",fit:b.fit,"max-width":b.maxWidth,"max-height":b.maxHeight,"design-mode":o.designMode,data:K.value},null,8,["value","fit","max-width","max-height","design-mode","data"])):y.type==="data"?(e.openBlock(),e.createElementBlock("span",qo,e.toDisplayString(W(y,b)),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createTextVNode(e.toDisplayString(W(y,b)),1)],64))],46,Wo))],64))),128))],4))),128))])],4),oe.value?(e.openBlock(),e.createElementBlock("div",Ko,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(se.value,y=>(e.openBlock(),e.createElementBlock("div",{key:y,class:e.normalizeClass(["col-resize-handle",{dragging:L.value===y}]),role:"separator","aria-label":"列宽手柄"+y,style:e.normalizeStyle({left:ae(y)+"mm"}),onMousedown:e.withModifiers(v=>B(y,v),["stop","prevent"])},null,46,Yo))),128))])):e.createCommentVNode("",!0),o.designMode&&o.isSelected?(e.openBlock(),e.createElementBlock("div",jo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(y,v)=>(e.openBlock(),e.createElementBlock("span",{key:y.id,class:"row-badge",style:e.normalizeStyle({top:z(v)+"mm",height:S(v)+"mm"})},e.toDisplayString(t[y.type]),5))),128))])):e.createCommentVNode("",!0),e.createVNode(zo,{visible:D.visible,x:D.x,y:D.y,"can-delete-row":a.value.length>1,"can-delete-col":c.value.length>1,"merge-disabled-reason":V.value,"can-split":F.value,"current-row-type":f.value?a.value[f.value.r1]?.type??null:null,"row-type-disabled-reason":Y,onAction:ue},null,8,["visible","x","y","can-delete-row","can-delete-col","merge-disabled-reason","can-split","current-row-type"])],34))}}),Jo=J(Zo,[["__scopeId","data-v-725d973d"]]),Ke=e.defineComponent({__name:"LineElement",props:{element:{}},setup(o){const r=o,t=e.computed(()=>r.element.printElementType.type==="hline"),n=e.computed(()=>{const l=r.element.options,i=(l.borderWidth||.75)+"pt",a=l.borderStyle||"solid",c=l.borderColor||"#333";return t.value?{width:"100%",height:"0",borderTop:`${i} ${a} ${c}`,boxSizing:"border-box"}:{width:"0",height:"100%",borderLeft:`${i} ${a} ${c}`,boxSizing:"border-box"}});return(l,i)=>(e.openBlock(),e.createElementBlock("div",{class:"print-line",style:e.normalizeStyle(n.value)},null,4))}}),Ye=e.defineComponent({__name:"ShapeElement",props:{element:{}},setup(o){const r=o,t=e.computed(()=>r.element.printElementType.type==="oval"),n=e.computed(()=>{const l=r.element.options;return{width:"100%",height:"100%",borderWidth:(l.borderWidth||1)+"pt",borderStyle:l.borderStyle||"solid",borderColor:l.borderColor||"#333",backgroundColor:l.backgroundColor||"transparent",borderRadius:t.value?"50%":"0",boxSizing:"border-box"}});return(l,i)=>(e.openBlock(),e.createElementBlock("div",{class:"print-shape",style:e.normalizeStyle(n.value)},null,4))}}),Qo={class:"print-barcode",ref:"containerRef"},_o=96/25.4,en=e.defineComponent({__name:"BarcodeElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(o){const r=o,t=e.ref(null);function n(){if(!t.value)return;const l=r.element.options,i=(r.designMode?l.testData||l.formatter:w.resolveTextBinding(l,r.data))||"条码",a=!l.hideTitle,c=(l.fontSize||12)*(96/72),h=(l.height||40)*_o,u=a?c+4:0,f=Math.max(8,h-u);try{_e(t.value,i,{format:l.barcodeType||"CODE128",width:l.barWidth?l.barWidth/2:1,height:f,displayValue:a,fontSize:c,margin:2})}catch{}}return e.onMounted(n),e.watch(()=>[r.element.options.formatter,r.element.options.testData,r.element.options.barcodeType,r.element.options.width,r.element.options.height,r.element.options.barWidth,r.element.options.hideTitle,r.element.options.fontSize],n),(l,i)=>(e.openBlock(),e.createElementBlock("div",Qo,[(e.openBlock(),e.createElementBlock("svg",{ref_key:"svgRef",ref:t,preserveAspectRatio:"xMidYMid meet"},null,512))],512))}}),tn=J(en,[["__scopeId","data-v-ca0cff7f"]]),on={class:"print-qrcode"},nn=["src"],ln=e.defineComponent({__name:"QrcodeElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(o){const r=o,t=e.ref("");async function n(){const l=r.element.options,i=(r.designMode?l.testData||l.formatter:w.resolveTextBinding(l,r.data))||"二维码",a=Math.min(l.width||80,l.height||80);try{t.value=await et.toDataURL(i,{width:a,margin:1,errorCorrectionLevel:String(l.qrCodeLevel??"M")})}catch{t.value=""}}return e.onMounted(n),e.watch(()=>[r.element.options.formatter,r.element.options.testData],n),(l,i)=>(e.openBlock(),e.createElementBlock("div",on,[t.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.value,alt:"qrcode"},null,8,nn)):e.createCommentVNode("",!0)]))}}),an=J(ln,[["__scopeId","data-v-dfb6875c"]]),rn=["innerHTML"],sn=e.defineComponent({__name:"HtmlElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(o){const r=o,t=e.computed(()=>{if(r.element.options.formatter){const n=r.data&&r.data.length>0?r.data[0]:{},l=w.evaluateTemplate(r.element.options.formatter,n??{});return l?ft.sanitize(l):""}return'<div style="background:#e0e0e0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:10pt;color:#999">HTML</div>'});return(n,l)=>(e.openBlock(),e.createElementBlock("div",{class:"print-html",innerHTML:t.value},null,8,rn))}}),dn=J(sn,[["__scopeId","data-v-880bbde5"]]),cn=e.defineComponent({__name:"PageNumberElement",props:{element:{},data:{},designMode:{type:Boolean}},setup(o){const r=o,t=e.computed(()=>{const l=r.element.options;return{fontSize:(l.fontSize||12)+"pt",fontWeight:l.fontWeight||"normal",fontFamily:l.fontFamily||"inherit",color:l.color||"#333",textAlign:l.textAlign||"left",lineHeight:l.lineHeight?l.lineHeight+"pt":"normal",letterSpacing:l.letterSpacing?l.letterSpacing+"pt":"normal"}}),n=e.computed(()=>r.designMode?r.element.options.title||"{pageIndex}/{totalPages}":r.element.options.title||"");return(l,i)=>(e.openBlock(),e.createElementBlock("div",{class:"page-number-element",style:e.normalizeStyle(t.value)},e.toDisplayString(n.value),5))}}),un=J(cn,[["__scopeId","data-v-38f1d7df"]]),mn={key:0,class:"drag-preview"},pn={key:1,class:"resize-handles"},vn=["onMousedown"],fn={key:2,class:"selected-indicator"},gn={class:"position-label"},hn=e.defineComponent({__name:"BaseElement",props:{element:{},isSelected:{type:Boolean},designMode:{type:Boolean},printData:{},scale:{},allElements:{},snapToGrid:{type:Boolean},showTableGhostBorder:{type:Boolean},zone:{},adsorbHandler:{type:Function},clearAdsorbGuides:{type:Function}},emits:["select","update:element","drag-start","drag-stop","dblclick-element","dblclick-cell","contextmenu","clone-element"],setup(o,{emit:r}){const t=o,n=r,l=e.ref(null),i=e.inject(tt,null),a=e.computed(()=>i?.value?i.value.has(t.element.id):t.isSelected??!1),c=e.inject(ot,null),h=e.computed(()=>c?.value.has(t.element.id)??!1),u={text:e.markRaw(wo),image:e.markRaw($o),longText:e.markRaw(xo),table:e.markRaw(Jo),hline:e.markRaw(Ke),vline:e.markRaw(Ke),rect:e.markRaw(Ye),oval:e.markRaw(Ye),barcode:e.markRaw(tn),qrcode:e.markRaw(an),html:e.markRaw(dn),pageNumber:e.markRaw(un)},f=e.computed(()=>u[t.element.printElementType.type]),E=e.computed(()=>t.element.printElementType.type==="table"?{showTableGhostBorder:t.showTableGhostBorder,scale:t.scale}:{}),C=e.computed(()=>{const x=t.element.options;return{position:"absolute",left:x.left+"mm",top:x.top+"mm",width:x.width+"mm",height:x.height+"mm",zIndex:x.zIndex||"auto"}}),I=e.computed(()=>{const x=t.element.options;return`x:${Math.round(x.left)} y:${Math.round(x.top)} ${Math.round(x.width)}×${Math.round(x.height)}mm`});let O=0,z=0;const S=e.reactive({disabled:!t.designMode||!!t.element.options.locked,getScale:()=>(t.scale||1)*w.mmToPx(1),onDrag:x=>{const D=x.left-O,s=x.top-z;l.value&&(l.value.style.transform=`translate(${D}mm, ${s}mm)`)},onDragEnd:(x,D)=>{if(D.altKey){const F=JSON.parse(JSON.stringify(t.element));F.id=w.generateId(),F.options.left=x.left,F.options.top=x.top,n("clone-element",F,{left:x.left,top:x.top}),l.value&&(l.value.style.transform="");return}const s=x.left-O,V=x.top-z;if(t.element.options.left=x.left,t.element.options.top=x.top,l.value&&(l.value.style.transform=""),t.element.options.groupId&&t.allElements)for(const F of t.allElements)F.id!==t.element.id&&F.options.groupId===t.element.options.groupId&&(F.options.left+=s,F.options.top+=V)},onStart:()=>{O=t.element.options.left,z=t.element.options.top,n("select",t.element.id,!1),n("drag-start")},onStop:()=>{t.clearAdsorbGuides?.(),n("drag-stop")},onAdsorb:x=>{let D=x.left,s=x.top;return t.snapToGrid&&(D=Math.round(x.left/5)*5,s=Math.round(x.top/5)*5),t.adsorbHandler?t.adsorbHandler({id:t.element.id,left:D,top:s,width:t.element.options.width,height:t.element.options.height}):{left:D,top:s,lines:[]}}}),{setup:U,cleanup:K,isDragging:Z}=Vo(l,S);e.watchEffect(()=>{S.disabled=!t.designMode||!!t.element.options.locked});const W=e.computed(()=>a.value&&!!t.designMode&&!t.element.options.locked&&t.element.printElementType.type!=="table"),{startResize:Q,cleanup:_}=w.useResize({minWidth:3.5,minHeight:3.5,getScale:()=>(t.scale||1)*w.mmToPx(1),getRect:()=>({left:t.element.options.left,top:t.element.options.top,width:t.element.options.width,height:t.element.options.height}),onResize:x=>{t.element.options.left=x.left,t.element.options.top=x.top,t.element.options.width=x.width,t.element.options.height=x.height},onStart:()=>{n("drag-start")},onStop:()=>{n("drag-stop")}});function N(x){t.designMode&&n("select",t.element.id,x.ctrlKey||x.metaKey)}function $(){t.designMode&&n("dblclick-element",t.element.id)}function M(x,D,s){t.designMode&&n("dblclick-cell",x,D,s)}e.onMounted(()=>{t.designMode&&U()});function P(){K(),_(),t.clearAdsorbGuides?.()}return e.onUnmounted(()=>{P()}),(x,D)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"elRef",ref:l,class:e.normalizeClass(["print-element",{selected:a.value,previewed:h.value,"design-mode":o.designMode,locked:o.element.options.locked,hidden:o.element.options.visible===!1,"drag-ghost":e.unref(Z),[`type-${o.element.printElementType.type}`]:!0,[`zone-${o.zone||"content"}`]:!0}]),style:e.normalizeStyle(C.value),onMousedown:e.withModifiers(N,["stop"]),onDblclick:e.withModifiers($,["stop"]),onContextmenu:D[0]||(D[0]=e.withModifiers(s=>x.$emit("contextmenu",o.element.id,s),["prevent","stop"]))},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(f.value),e.mergeProps({element:o.element,data:o.printData,"design-mode":o.designMode,"is-selected":a.value},E.value,{onDblclickCell:M}),null,16,["element","data","design-mode","is-selected"])),e.unref(Z)?(e.openBlock(),e.createElementBlock("div",mn)):e.createCommentVNode("",!0),W.value?(e.openBlock(),e.createElementBlock("div",pn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w.RESIZE_POINTS),s=>(e.openBlock(),e.createElementBlock("div",{key:s,class:e.normalizeClass(["resize-handle",`handle-${s}`]),onMousedown:e.withModifiers(V=>e.unref(Q)(s,V),["stop"])},null,42,vn))),128))])):e.createCommentVNode("",!0),a.value&&o.designMode?(e.openBlock(),e.createElementBlock("div",fn,[e.createElementVNode("div",gn,e.toDisplayString(I.value),1)])):e.createCommentVNode("",!0)],38))}}),He=J(hn,[["__scopeId","data-v-c1100c7b"]]);function bn(o={}){const r=e.ref([]),t=e.ref({width:0,height:0});function n(a,c,h){return w.computeAdsorb(a,c,h,o)}function l(a,c,h){r.value=a,t.value={width:c,height:h}}function i(){r.value=[]}return{check:n,renderLines:l,clearLines:i,guideLines:r,paperSize:t}}function yn(o){const{check:r,renderLines:t,clearLines:n,guideLines:l,paperSize:i}=bn(o.config??{adsorbMin:1,adsorbLineMin:2,showAdsorbLine:!0});function a(h){const u=o.getElements().filter(C=>C.id!==h.id).map(C=>({id:C.id,left:C.options.left,top:C.options.top,width:C.options.width,height:C.options.height})),f=r(h,u,o.getGuides?.()),E=o.getPaperSize();return t(f.lines,E.width,E.height),f}function c(){n()}return{requestAdsorb:a,clearGuides:c,guideLines:l,paperSize:i}}const En={key:0,class:"zone-label"},kn={key:0,class:"zone-height-tip"},Vn={key:0,class:"zone-label"},wn={key:0,class:"zone-height-tip"},Nn=["onMousedown","onDblclick"],Cn=e.defineComponent({__name:"CanvasPaper",props:{templateData:{},runtimeElements:{},designMode:{type:Boolean},printData:{},scale:{},showGrid:{type:Boolean},snapToGrid:{type:Boolean},showTableGhostBorder:{type:Boolean},guides:{}},emits:["select","drag-start","drag-stop","dblclick-element","dblclick-cell","contextmenu","zone-height-change","zone-height-commit","guide-move","guide-remove","clone-element"],setup(o,{expose:r,emit:t}){const n=o,l=t,i=e.ref(null),a=e.computed(()=>w.getPaperDimensions(n.templateData).width),c=e.computed(()=>w.getPaperDimensions(n.templateData).height),h=e.computed(()=>`${8/(n.scale||1)}px`),u=e.computed(()=>{const p=n.scale||1,k=w.mmToPx(a.value)*p,B=w.mmToPx(c.value)*p;return{width:k+"px",height:B+"px",position:"relative"}}),f=e.computed(()=>{const p=n.templateData.margins,k=n.templateData.header.height,B=n.templateData.footer.height,T=a.value-p.left-p.right;return{header:{left:p.left,top:p.top,width:T,height:k},content:{left:p.left,top:p.top+k,width:T,height:c.value-p.top-p.bottom-k-B},footer:{left:p.left,top:c.value-p.bottom-B,width:T,height:B}}});function E(p){return{position:"absolute",left:p.left+"mm",top:p.top+"mm",width:p.width+"mm",height:p.height+"mm"}}const C=e.computed(()=>{const p={header:[],footer:[],content:[]};for(const k of n.runtimeElements)k.zone==="header"?p.header.push(k):k.zone==="footer"?p.footer.push(k):p.content.push(k);return p}),I=e.computed(()=>C.value.header),O=e.computed(()=>C.value.footer),z=e.computed(()=>C.value.content);let S="content";const{requestAdsorb:U,clearGuides:K,guideLines:Z,paperSize:W}=yn({getElements:()=>C.value[S],getPaperSize:()=>{const p=f.value[S];return{width:p.width,height:p.height}},getGuides:()=>{const p=[],k=[];for(const B of n.guides??[])B.type==="vertical"?p.push(B.position):k.push(B.position);return{vertical:p,horizontal:k}}});function Q(p){S=n.runtimeElements.find(T=>T.id===p.id)?.zone||"content";const B=U(p);return(B.left!==p.left||B.top!==p.top)&&s(B.left+p.width/2,B.top+p.height/2),B}function _(p,k){const B=k.position,T=p.clientX,g=p.clientY,d=n.scale??1,m=25.4/96,y=b=>{const A=(k.type==="vertical"?b.clientX-T:b.clientY-g)/d*m,q=k.type==="vertical"?a.value:c.value,de=Math.min(Math.max(B+A,0),q);l("guide-move",k.id,de)},v=()=>{window.removeEventListener("mousemove",y),window.removeEventListener("mouseup",v)};window.addEventListener("mousemove",y),window.addEventListener("mouseup",v)}const N=e.computed(()=>({width:a.value+"mm",minHeight:c.value+"mm",background:n.templateData.pageBackground||"var(--pd-paper, #fff)",boxShadow:"var(--pd-shadow-paper, 0 1px 2px rgba(0,0,0,.12), 0 8px 24px rgba(0,0,0,.08))",overflow:"hidden",position:"relative",transform:n.scale?`scale(${n.scale})`:void 0,transformOrigin:"0 0"})),$=e.computed(()=>{const p=n.templateData.margins;return{padding:`${p.top}mm ${p.right}mm ${p.bottom}mm ${p.left}mm`,position:"relative",boxSizing:"border-box",minHeight:c.value+"mm"}}),M=e.computed(()=>({backgroundImage:`url("data:image/svg+xml,${encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M0 .5H20M.5 0V20" fill="none" stroke="rgba(0,0,0,0.08)" stroke-width="1" stroke-dasharray="4 4"/></svg>')}")`,backgroundSize:"5mm 5mm",backgroundPosition:"0 0"}));let P=0,x=null;const D=e.ref(null);function s(p,k){P+=1,D.value={left:p,top:k,key:P},x&&clearTimeout(x),x=setTimeout(()=>{D.value=null},300)}const V=e.computed(()=>{const p=n.templateData.watermark;return p?!p.mode||p.mode==="fixed"?!!p.content&&p.content.trim().length>0:!!p.binding:!1}),F=e.computed(()=>{const p=n.templateData.watermark||{},k=p.color||"#cccccc",B=p.opacity??.15,T=p.rotate??-30;let g=Y(p);if(p.timestamp){const d=new Date,m=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")} ${String(d.getHours()).padStart(2,"0")}:${String(d.getMinutes()).padStart(2,"0")}`;g=g?`${g} ${m}`:m}return{position:"absolute",top:"0",left:"0",width:"100%",height:"100%",pointerEvents:"none",zIndex:"0",overflow:"hidden",opacity:String(B),backgroundImage:j(g,k,T),backgroundRepeat:"repeat"}});function Y(p){if(!p.mode||p.mode==="fixed")return p.content||"";if(p.binding){const k=n.printData?.[0];return k&&k[p.binding]!==void 0&&k[p.binding]!==null?String(k[p.binding]):p.testData||`[${p.binding}]`}return""}function j(p,k,B){const T=p.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),g=`<svg xmlns="http://www.w3.org/2000/svg" width="260" height="180">
2
+ <text x="130" y="90" font-size="16" fill="${k}" text-anchor="middle" dominant-baseline="middle" transform="rotate(${B},130,90)">${T}</text>
3
+ </svg>`;return`url("data:image/svg+xml,${encodeURIComponent(g)}")`}const ee=e.ref(null);function ue(p,k){ae(),ee.value={zone:p,startY:k.clientY,startH:n.templateData[p].height},window.addEventListener("mousemove",oe),window.addEventListener("mouseup",se)}function oe(p){if(!ee.value)return;const{zone:k,startY:B,startH:T}=ee.value,d=(p.clientY-B)/(n.scale||1)*25.4/96,m=k==="header"?d:-d,y=Math.min(100,c.value-n.templateData.margins.top-n.templateData.margins.bottom-(k==="header"?n.templateData.footer.height:n.templateData.header.height)-10),v=Math.min(y,Math.max(0,Math.round((T+m)*10)/10));l("zone-height-change",k,v)}function se(){if(!ee.value)return;const p=ee.value.zone;ee.value=null,window.removeEventListener("mousemove",oe),window.removeEventListener("mouseup",se),l("zone-height-commit",p)}function ae(){window.removeEventListener("mousemove",oe),window.removeEventListener("mouseup",se),ee.value=null}e.onUnmounted(()=>{ae(),x&&clearTimeout(x)});function L(p,k){l("select",p,k)}return r({contentRef:i}),(p,k)=>(e.openBlock(),e.createElementBlock("div",{class:"paper-wrapper",style:e.normalizeStyle(u.value)},[e.createElementVNode("div",{class:"hiprint-printPaper",style:e.normalizeStyle(N.value)},[e.createElementVNode("div",{class:"hiprint-printPaper-content",ref_key:"contentRef",ref:i,style:e.normalizeStyle($.value)},[o.showGrid&&o.designMode?(e.openBlock(),e.createElementBlock("div",{key:0,class:"grid-bg",style:e.normalizeStyle(M.value)},null,4)):e.createCommentVNode("",!0),D.value?(e.openBlock(),e.createElementBlock("div",{key:D.value.key,class:"snap-indicator",style:e.normalizeStyle({left:D.value.left+"mm",top:D.value.top+"mm"})},null,4)):e.createCommentVNode("",!0),V.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"watermark-layer",style:e.normalizeStyle(F.value)},null,4)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["zone-layer zone-header",{"design-mode":o.designMode}]),style:e.normalizeStyle(E(f.value.header))},[o.designMode?(e.openBlock(),e.createElementBlock("span",En,"页眉")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,B=>(e.openBlock(),e.createBlock(He,{key:B.id,element:B,"design-mode":o.designMode,"print-data":o.printData,scale:o.scale,"all-elements":I.value,"snap-to-grid":o.snapToGrid,"show-table-ghost-border":o.showTableGhostBorder,zone:"header","adsorb-handler":Q,"clear-adsorb-guides":e.unref(K),onSelect:L,onDragStart:k[0]||(k[0]=T=>p.$emit("drag-start")),onDragStop:k[1]||(k[1]=T=>p.$emit("drag-stop")),onDblclickElement:k[2]||(k[2]=T=>p.$emit("dblclick-element",T)),onDblclickCell:k[3]||(k[3]=(T,g,d)=>p.$emit("dblclick-cell",T,g,d)),onContextmenu:k[4]||(k[4]=(T,g)=>p.$emit("contextmenu",T,g)),onCloneElement:(T,g)=>p.$emit("clone-element",T,g)},null,8,["element","design-mode","print-data","scale","all-elements","snap-to-grid","show-table-ghost-border","clear-adsorb-guides","onCloneElement"]))),128)),o.designMode?(e.openBlock(),e.createElementBlock("div",{key:1,class:"zone-resize-handle handle-bottom",onMousedown:k[5]||(k[5]=e.withModifiers(B=>ue("header",B),["prevent","stop"]))},[ee.value?.zone==="header"?(e.openBlock(),e.createElementBlock("div",kn,e.toDisplayString(o.templateData.header.height.toFixed(1))+"mm ",1)):e.createCommentVNode("",!0)],32)):e.createCommentVNode("",!0)],6),e.createElementVNode("div",{class:e.normalizeClass(["zone-layer zone-content",{"design-mode":o.designMode}]),style:e.normalizeStyle(E(f.value.content))},[o.designMode&&o.templateData.firstPageOverlay.height>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"zone-overlay",style:e.normalizeStyle({height:o.templateData.firstPageOverlay.height+"mm"})},[...k[17]||(k[17]=[e.createElementVNode("span",{class:"zone-label"},"首页叠加",-1)])],4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,B=>(e.openBlock(),e.createBlock(He,{key:B.id,element:B,"design-mode":o.designMode,"print-data":o.printData,scale:o.scale,"all-elements":z.value,"snap-to-grid":o.snapToGrid,"show-table-ghost-border":o.showTableGhostBorder,zone:"content","adsorb-handler":Q,"clear-adsorb-guides":e.unref(K),onSelect:L,onDragStart:k[6]||(k[6]=T=>p.$emit("drag-start")),onDragStop:k[7]||(k[7]=T=>p.$emit("drag-stop")),onDblclickElement:k[8]||(k[8]=T=>p.$emit("dblclick-element",T)),onDblclickCell:k[9]||(k[9]=(T,g,d)=>p.$emit("dblclick-cell",T,g,d)),onContextmenu:k[10]||(k[10]=(T,g)=>p.$emit("contextmenu",T,g)),onCloneElement:(T,g)=>p.$emit("clone-element",T,g)},null,8,["element","design-mode","print-data","scale","all-elements","snap-to-grid","show-table-ghost-border","clear-adsorb-guides","onCloneElement"]))),128))],6),e.createElementVNode("div",{class:e.normalizeClass(["zone-layer zone-footer",{"design-mode":o.designMode}]),style:e.normalizeStyle(E(f.value.footer))},[o.designMode?(e.openBlock(),e.createElementBlock("span",Vn,"页脚")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,B=>(e.openBlock(),e.createBlock(He,{key:B.id,element:B,"design-mode":o.designMode,"print-data":o.printData,scale:o.scale,"all-elements":O.value,"snap-to-grid":o.snapToGrid,"show-table-ghost-border":o.showTableGhostBorder,zone:"footer","adsorb-handler":Q,"clear-adsorb-guides":e.unref(K),onSelect:L,onDragStart:k[11]||(k[11]=T=>p.$emit("drag-start")),onDragStop:k[12]||(k[12]=T=>p.$emit("drag-stop")),onDblclickElement:k[13]||(k[13]=T=>p.$emit("dblclick-element",T)),onDblclickCell:k[14]||(k[14]=(T,g,d)=>p.$emit("dblclick-cell",T,g,d)),onContextmenu:k[15]||(k[15]=(T,g)=>p.$emit("contextmenu",T,g)),onCloneElement:(T,g)=>p.$emit("clone-element",T,g)},null,8,["element","design-mode","print-data","scale","all-elements","snap-to-grid","show-table-ghost-border","clear-adsorb-guides","onCloneElement"]))),128)),o.designMode?(e.openBlock(),e.createElementBlock("div",{key:1,class:"zone-resize-handle handle-top",onMousedown:k[16]||(k[16]=e.withModifiers(B=>ue("footer",B),["prevent","stop"]))},[ee.value?.zone==="footer"?(e.openBlock(),e.createElementBlock("div",wn,e.toDisplayString(o.templateData.footer.height.toFixed(1))+"mm ",1)):e.createCommentVNode("",!0)],32)):e.createCommentVNode("",!0)],6),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Z),(B,T)=>(e.openBlock(),e.createElementBlock("div",{key:T,class:e.normalizeClass(["adsorb-guide",[`guide-${B.type}`]]),style:e.normalizeStyle(B.type==="vertical"?{left:B.position+"mm",top:"0",height:e.unref(W).height+"mm",borderLeftColor:B.color||"var(--pd-accent-secondary, #f56c6c)"}:{top:B.position+"mm",left:"0",width:e.unref(W).width+"mm",borderTopColor:B.color||"var(--pd-accent-secondary, #f56c6c)"})},null,6))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.guides,B=>(e.openBlock(),e.createElementBlock("div",{key:"mg-"+B.id,class:e.normalizeClass(["manual-guide",[`guide-${B.type}`]]),style:e.normalizeStyle(B.type==="vertical"?{left:B.position+"mm",top:"0",height:c.value+"mm","--guide-hit":h.value}:{top:B.position+"mm",left:"0",width:a.value+"mm","--guide-hit":h.value}),onMousedown:e.withModifiers(T=>_(T,B),["prevent","stop"]),onDblclick:e.withModifiers(T=>B.id&&l("guide-remove",B.id),["prevent","stop"])},null,46,Nn))),128))],4)],4)],4))}}),Sn=J(Cn,[["__scopeId","data-v-de85ab4d"]]),Bn=e.defineComponent({__name:"Ruler",props:{orientation:{},viewportPx:{},originPx:{},paperLengthMM:{},scale:{},cursorPx:{}},emits:["add-guide","guide-dragging"],setup(o,{emit:r}){const t=o,n=r,l=e.computed(()=>t.orientation==="horizontal"),i=e.computed(()=>l.value?"vertical":"horizontal"),a=e.ref(null),c=e.ref(null),h=e.computed(()=>c.value??t.cursorPx??null),u=e.computed(()=>l.value?{width:t.viewportPx+"px",height:w.RULER_THICKNESS+"px"}:{width:w.RULER_THICKNESS+"px",height:t.viewportPx+"px"});let f=0;function E(){f||(f=requestAnimationFrame(()=>{f=0,C()}))}function C(){const N=a.value;if(!N)return;const $=N.getContext("2d");if(!$)return;const M=window.devicePixelRatio||1,P=Math.max(0,Math.round(t.viewportPx)),x=w.RULER_THICKNESS;N.width=(l.value?P:x)*M,N.height=(l.value?x:P)*M,$.setTransform(M,0,0,M,0,0);const D=getComputedStyle(N),s=D.getPropertyValue("--pd-ruler-bg").trim()||"#F8F9FC",V=D.getPropertyValue("--pd-ruler").trim()||"#9AA1AF",F=D.getPropertyValue("--pd-accent").trim()||"#165DFF";$.fillStyle=s,$.fillRect(0,0,l.value?P:x,l.value?x:P);const Y=t.scale>0?t.scale:1,j=w.mmToPx(1)*Y;if(j<=0)return;const ee=-t.originPx/j,ue=(P-t.originPx)/j,oe=w.chooseMajorStepMM(Y),se=w.buildRulerTicks(ee,ue,oe);I($,se,j,V,!0),I($,se,j,V,!1),O($,0,F),O($,t.paperLengthMM,F);const ae=h.value;if(ae!==null&&ae>=0&&ae<=P){if($.strokeStyle=F,$.lineWidth=1.5,$.beginPath(),l.value){const L=Math.round(ae)+.5;$.moveTo(L,0),$.lineTo(L,x)}else{const L=Math.round(ae)+.5;$.moveTo(0,L),$.lineTo(x,L)}$.stroke()}}function I(N,$,M,P,x){N.strokeStyle=P,N.fillStyle=P,N.globalAlpha=x?.32:1,N.lineWidth=1,N.font="9px ui-monospace, Menlo, monospace",N.textBaseline="top";for(const D of $){if((D.mm<0||D.mm>t.paperLengthMM)!==x)continue;const V=Math.round(t.originPx+D.mm*M)+.5,F=D.major?8:4;N.beginPath(),l.value?(N.moveTo(V,0),N.lineTo(V,F)):(N.moveTo(0,V),N.lineTo(F,V)),N.stroke(),D.major&&D.label&&(l.value?N.fillText(D.label,V+2,11):(N.save(),N.translate(11,V+2),N.rotate(-Math.PI/2),N.fillText(D.label,0,0),N.restore()))}N.globalAlpha=1}function O(N,$,M){const P=w.mmToPx(1)*(t.scale>0?t.scale:1),x=Math.round(t.originPx+$*P)+.5;x<=0||x>=t.viewportPx||(N.strokeStyle=M,N.globalAlpha=.55,N.lineWidth=1,N.beginPath(),l.value?(N.moveTo(x,0),N.lineTo(x,w.RULER_THICKNESS)):(N.moveTo(0,x),N.lineTo(w.RULER_THICKNESS,x)),N.stroke(),N.globalAlpha=1)}e.watch(()=>[t.viewportPx,t.originPx,t.paperLengthMM,t.scale,t.cursorPx,t.orientation],E),e.onMounted(E),e.onBeforeUnmount(()=>{f&&cancelAnimationFrame(f)});let z=!1;function S(N){const $=a.value;if(!$)return null;const M=$.getBoundingClientRect(),P=l.value?N.clientX-M.left:N.clientY-M.top;if(P<0||P>t.viewportPx)return null;const x=w.mmToPx(1)*(t.scale>0?t.scale:1);return(P-t.originPx)/x}function U(N){z=!0,N.preventDefault(),window.addEventListener("mousemove",Q),window.addEventListener("mouseup",_),W(N)}function K(N){const $=a.value;if(!$)return;const M=$.getBoundingClientRect();c.value=l.value?N.clientX-M.left:N.clientY-M.top,E()}function Z(){c.value=null,E()}function W(N){const $=S(N);n("guide-dragging",$)}function Q(N){z&&W(N)}function _(N){if(!z)return;z=!1,window.removeEventListener("mousemove",Q),window.removeEventListener("mouseup",_);const $=S(N);$!==null&&$>=0&&$<=t.paperLengthMM&&n("add-guide",i.value,$),n("guide-dragging",null)}return e.onBeforeUnmount(()=>{window.removeEventListener("mousemove",Q),window.removeEventListener("mouseup",_)}),(N,$)=>(e.openBlock(),e.createElementBlock("canvas",{ref_key:"canvasRef",ref:a,class:e.normalizeClass(["pd-ruler",`is-${o.orientation}`]),style:e.normalizeStyle(u.value),onMousedown:U,onMousemove:K,onMouseleave:Z},null,38))}}),je=J(Bn,[["__scopeId","data-v-86284054"]]),$n={class:"canvas-scroll"},xn={key:0,class:"overlay-layer"},Tn=["src"],Le=96/25.4,Dn=e.defineComponent({__name:"CanvasArea",props:{templateData:{},elements:{},scale:{},showGrid:{type:Boolean},snapToGrid:{type:Boolean},showTableGhostBorder:{type:Boolean},hasClipboard:{type:Boolean},guides:{},overlayVisible:{type:Boolean},screenshotUrl:{},overlayOpacity:{},selectedElementHasGroup:{type:Boolean},showRuler:{type:Boolean,default:!0}},emits:["select","drop-element","drop-field","drag-start","drag-stop","dblclick-element","dblclick-cell","zone-height-change","zone-height-commit","select-all","clear-selection","preview","commit-preview","paste","copy","cut","delete","move-layer","group","ungroup","coordinate","add-guide","guide-move","guide-remove","zoom","clone-element"],setup(o,{expose:r,emit:t}){const n=o,l=t;function i(g,d){l("select",g,d)}const a=e.ref(null),c=e.computed(()=>w.getPaperDimensions(n.templateData).width),h=e.computed(()=>w.getPaperDimensions(n.templateData).height),u=e.reactive({originX:0,originY:0,viewW:0,viewH:0,paperScale:1}),f=e.reactive({x:null,y:null}),E=e.reactive({x:0,y:0}),C=e.computed(()=>({transform:`translate(${E.x}px, ${E.y}px)`}));function I(){const g=a.value,d=g?.querySelector(".hiprint-printPaper");if(!g||!d)return;const m=g.getBoundingClientRect(),y=d.getBoundingClientRect(),v=n.scale||1,b=y.width/w.mmToPx(c.value);u.paperScale=Math.abs(b-v)<.002?v:b,u.originX=y.left-m.left-w.RULER_THICKNESS,u.originY=y.top-m.top-w.RULER_THICKNESS,u.viewW=g.clientWidth-w.RULER_THICKNESS,u.viewH=g.clientHeight-w.RULER_THICKNESS}function O(){E.x=a.value?.scrollLeft??0,E.y=a.value?.scrollTop??0,I()}let z=null,S=0;function U(){cancelAnimationFrame(S);const g=performance.now()+220,d=()=>{I(),performance.now()<g&&(S=requestAnimationFrame(d))};S=requestAnimationFrame(d)}const K=e.ref(null);function Z(g,d){K.value=d===null?null:{type:g,mm:d}}const W=e.computed(()=>{const g=K.value,d=a.value?.querySelector(".hiprint-printPaper");if(!g||!d)return{};const m=d.getBoundingClientRect(),y=m.width/w.mmToPx(c.value),v=w.mmToPx(g.mm)*(y>0?y:n.scale||1);return g.type==="vertical"?{left:m.left+v+"px",top:m.top+"px",height:m.height+"px"}:{left:m.left+"px",top:m.top+v+"px",width:m.width+"px"}});function Q(g){const d=a.value?.querySelector(".hiprint-printPaper");if(!d)return;const m=d.getBoundingClientRect(),y=n.scale||1,v=w.pxToMm((g.clientX-m.left)/y),b=w.pxToMm((g.clientY-m.top)/y);if(!(v<0||b<0))return{x:v,y:b}}function _(g){const d=Q(g),m=g.dataTransfer?.getData("fieldData");if(m)try{const v=JSON.parse(m);l("drop-field",v,d);return}catch{}const y=g.dataTransfer?.getData("elementType");y&&l("drop-element",y,d)}const N=e.reactive({visible:!1,x:0,y:0,w:0,h:0});let $={x:0,y:0};function M(g){return!g||!(g instanceof HTMLElement)?!1:!!(g===a.value||g.classList.contains("canvas-scroll")||g.classList.contains("hiprint-printPaper")||g.classList.contains("hiprint-printPaper-content")||g.classList.contains("zone-layer")||g.classList.contains("grid-bg")||g.classList.contains("watermark-layer"))}function P(g){const d=a.value,m=d?.querySelector(".hiprint-printPaper");if(!d||!m)return;const y=d.getBoundingClientRect();f.x=g.clientX-y.left-w.RULER_THICKNESS,f.y=g.clientY-y.top-w.RULER_THICKNESS;const v=m.getBoundingClientRect(),b=n.scale||1,A=w.pxToMm((g.clientX-v.left)/b),q=w.pxToMm((g.clientY-v.top)/b);if(A<0||q<0){l("coordinate",null);return}l("coordinate",{x:A,y:q})}function x(){l("coordinate",null),f.x=null,f.y=null}function D(g,d,m,y){const v=a.value;if(!v)return;const b=Math.max(y,Math.round(g)),A=Math.round((n.scale||1)*100);if(b===A)return;const q=n.scale||1,de=b/100/q,re=getComputedStyle(v),me=parseFloat(re.paddingLeft)||0,ve=parseFloat(re.paddingTop)||0,fe=v.scrollLeft+d-me,ge=v.scrollTop+m-ve;l("zoom",b-A),e.nextTick(()=>{const he=getComputedStyle(v),we=parseFloat(he.paddingLeft)||0,Ne=parseFloat(he.paddingTop)||0;v.scrollLeft=fe*de-d+we,v.scrollTop=ge*de-m+Ne})}function s(g){if(!(g.ctrlKey||g.metaKey))return;g.preventDefault();const d=a.value;if(!d)return;const m=Math.round((n.scale||1)*100),y=w.nextWheelScale(m,g.deltaY>0?-1:1);if(y===m)return;const v=d.getBoundingClientRect();D(y,g.clientX-v.left,g.clientY-v.top,w.MIN_SCALE_PERCENT)}function V(g){const d=a.value;if(!d)return;const m=Math.round((n.scale||1)*100),y=w.nextWheelScale(m,g);D(y,d.clientWidth/2,d.clientHeight/2,w.MIN_SCALE_PERCENT)}function F(g){const d=a.value;d&&D(g,d.clientWidth/2,d.clientHeight/2,w.FIT_SCALE_MIN_PERCENT)}function Y(g){g.button!==2&&M(g.target)&&(l("clear-selection"),$={x:g.clientX,y:g.clientY},N.visible=!0,N.x=g.clientX,N.y=g.clientY,N.w=0,N.h=0,window.addEventListener("mousemove",ee),window.addEventListener("mouseup",ue))}function j(){if(N.w<3||N.h<3)return[];const g=a.value?.querySelector(".hiprint-printPaper");if(!g)return[];const d=g.getBoundingClientRect(),m=n.scale||1,y=N.x<$.x,v=[];for(const b of n.elements){if(b.options.visible===!1||b.options.locked)continue;const A=d.left+b.options.left*Le*m,q=d.top+b.options.top*Le*m,de=A+b.options.width*Le*m,re=q+b.options.height*Le*m,me=A<N.x+N.w&&de>N.x&&q<N.y+N.h&&re>N.y,ve=A>=N.x&&de<=N.x+N.w&&q>=N.y&&re<=N.y+N.h;(y?ve:me)&&v.push(b.id)}return v}function ee(g){const d=g.clientX-$.x,m=g.clientY-$.y;N.x=d>=0?$.x:g.clientX,N.y=m>=0?$.y:g.clientY,N.w=Math.abs(d),N.h=Math.abs(m),l("preview",j())}function ue(){window.removeEventListener("mousemove",ee),window.removeEventListener("mouseup",ue);const g=j();l("preview",g),g.length>0?l("commit-preview"):l("clear-selection"),l("preview",[]),N.visible=!1}const oe=e.reactive({visible:!1,x:0,y:0,targetId:null});function se(g,d){if(!d&&!M(g.target))return;const m=a.value?.getBoundingClientRect();m&&(oe.x=g.clientX-m.left,oe.y=g.clientY-m.top,oe.targetId=d??null,oe.visible=!0,window.removeEventListener("mousedown",ae),setTimeout(()=>{window.addEventListener("mousedown",ae,{once:!0})},0))}function ae(){oe.visible=!1,window.removeEventListener("mousedown",ae)}function L(){oe.visible=!1,n.hasClipboard&&l("paste")}function p(){oe.visible=!1,l("select-all")}function k(){oe.visible=!1,l("clear-selection")}function B(g,d){oe.visible=!1,g==="copy"?l("copy"):g==="cut"?l("cut"):g==="paste"?l("paste"):g==="delete"?l("delete"):g==="move-layer"?l("move-layer",d):g==="group"?l("group"):g==="ungroup"&&n.selectedElementHasGroup&&l("ungroup")}e.onMounted(()=>{e.nextTick(I),a.value&&typeof ResizeObserver<"u"&&(z=new ResizeObserver(I),z.observe(a.value))}),e.watch(()=>n.scale,U),e.watch([c,h],()=>e.nextTick(I));function T(){const g=a.value;if(!g)return;let d=0,m=0,y=0;const v=performance.now()+800,b=()=>{const{scrollWidth:A,scrollHeight:q}=g;if(A===m&&q===y?d++:d=0,m=A,y=q,d>=2||performance.now()>v){const de=g.scrollWidth,re=g.scrollHeight,me=g.clientWidth,ve=g.clientHeight;g.scrollLeft=Math.max(0,(de-me)/2),g.scrollTop=Math.max(0,(re-ve)/2);return}requestAnimationFrame(b)};requestAnimationFrame(b)}return r({centerScroll:T,fitToWindow:F,zoomByStep:V}),e.onBeforeUnmount(()=>{window.removeEventListener("mousemove",ee),window.removeEventListener("mouseup",ue),z?.disconnect(),cancelAnimationFrame(S)}),(g,d)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"rootRef",ref:a,class:"canvas-area",onDragover:d[24]||(d[24]=e.withModifiers(()=>{},["prevent"])),onDrop:_,onMousedown:Y,onMousemove:P,onMouseleave:x,onWheel:s,onScroll:O,onContextmenu:e.withModifiers(se,["prevent"])},[e.createElementVNode("div",$n,[e.createVNode(Sn,{"template-data":o.templateData,"runtime-elements":o.elements,"design-mode":!0,"print-data":[],scale:o.scale,"show-grid":o.showGrid,"snap-to-grid":o.snapToGrid,"show-table-ghost-border":o.showTableGhostBorder,guides:o.guides,onSelect:i,onGuideMove:d[0]||(d[0]=(m,y)=>g.$emit("guide-move",m,y)),onGuideRemove:d[1]||(d[1]=m=>g.$emit("guide-remove",m)),onDragStart:d[2]||(d[2]=m=>g.$emit("drag-start")),onDragStop:d[3]||(d[3]=m=>g.$emit("drag-stop")),onDblclickElement:d[4]||(d[4]=m=>g.$emit("dblclick-element",m)),onDblclickCell:d[5]||(d[5]=(m,y,v)=>g.$emit("dblclick-cell",m,y,v)),onContextmenu:d[6]||(d[6]=(m,y)=>se(y,m)),onZoneHeightChange:d[7]||(d[7]=(m,y)=>g.$emit("zone-height-change",m,y)),onZoneHeightCommit:d[8]||(d[8]=m=>g.$emit("zone-height-commit",m)),onCloneElement:d[9]||(d[9]=(m,y)=>g.$emit("clone-element",m,y))},null,8,["template-data","runtime-elements","scale","show-grid","snap-to-grid","show-table-ghost-border","guides"]),o.overlayVisible&&o.screenshotUrl?(e.openBlock(),e.createElementBlock("div",xn,[e.createElementVNode("img",{src:o.screenshotUrl,class:"overlay-image",style:e.normalizeStyle({opacity:o.overlayOpacity??.5})},null,12,Tn)])):e.createCommentVNode("",!0)]),o.showRuler?(e.openBlock(),e.createElementBlock("div",{key:0,class:"ruler-overlay",style:e.normalizeStyle(C.value)},[d[25]||(d[25]=e.createElementVNode("div",{class:"ruler-corner"},null,-1)),e.createVNode(je,{orientation:"horizontal","viewport-px":u.viewW,"origin-px":u.originX,"paper-length-m-m":c.value,scale:u.paperScale,"cursor-px":f.x,onAddGuide:d[10]||(d[10]=(m,y)=>l("add-guide",m,y)),onGuideDragging:d[11]||(d[11]=m=>Z("vertical",m))},null,8,["viewport-px","origin-px","paper-length-m-m","scale","cursor-px"]),e.createVNode(je,{orientation:"vertical","viewport-px":u.viewH,"origin-px":u.originY,"paper-length-m-m":h.value,scale:u.paperScale,"cursor-px":f.y,onAddGuide:d[12]||(d[12]=(m,y)=>l("add-guide",m,y)),onGuideDragging:d[13]||(d[13]=m=>Z("horizontal",m))},null,8,["viewport-px","origin-px","paper-length-m-m","scale","cursor-px"])],4)):e.createCommentVNode("",!0),K.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["ruler-guide-preview",`guide-${K.value.type}`]),style:e.normalizeStyle(W.value)},null,6)):e.createCommentVNode("",!0),N.visible?(e.openBlock(),e.createElementBlock("div",{key:2,class:"marquee-selection",style:e.normalizeStyle({left:N.x+"px",top:N.y+"px",width:N.w+"px",height:N.h+"px"})},null,4)):e.createCommentVNode("",!0),oe.visible?(e.openBlock(),e.createElementBlock("div",{key:3,class:"context-menu",style:e.normalizeStyle({left:oe.x+"px",top:oe.y+"px"})},[oe.targetId?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("div",{class:"context-menu-item",onClick:d[14]||(d[14]=m=>B("copy"))},"复制"),e.createElementVNode("div",{class:"context-menu-item",onClick:d[15]||(d[15]=m=>B("cut"))},"剪切"),e.createElementVNode("div",{class:e.normalizeClass(["context-menu-item",{disabled:!o.hasClipboard}]),onClick:d[16]||(d[16]=m=>B("paste"))},"粘贴",2),e.createElementVNode("div",{class:"context-menu-item",onClick:d[17]||(d[17]=m=>B("delete"))},"删除"),d[26]||(d[26]=e.createElementVNode("div",{class:"context-menu-sep"},null,-1)),e.createElementVNode("div",{class:"context-menu-item",onClick:d[18]||(d[18]=m=>B("move-layer","top"))},"置顶"),e.createElementVNode("div",{class:"context-menu-item",onClick:d[19]||(d[19]=m=>B("move-layer","up"))},"上移"),e.createElementVNode("div",{class:"context-menu-item",onClick:d[20]||(d[20]=m=>B("move-layer","down"))},"下移"),e.createElementVNode("div",{class:"context-menu-item",onClick:d[21]||(d[21]=m=>B("move-layer","bottom"))},"置底"),d[27]||(d[27]=e.createElementVNode("div",{class:"context-menu-sep"},null,-1)),e.createElementVNode("div",{class:"context-menu-item",onClick:d[22]||(d[22]=m=>B("group"))},"编组 Ctrl+G"),e.createElementVNode("div",{class:e.normalizeClass(["context-menu-item",{disabled:!o.selectedElementHasGroup}]),onClick:d[23]||(d[23]=m=>B("ungroup"))},"取消编组 Ctrl+Shift+G",2)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",{class:e.normalizeClass(["context-menu-item",{disabled:!o.hasClipboard}]),onClick:L},"粘贴",2),e.createElementVNode("div",{class:"context-menu-item",onClick:p},"全选"),e.createElementVNode("div",{class:"context-menu-item",onClick:k},"取消选择")],64))],4)):e.createCommentVNode("",!0)],544))}}),Mn=J(Dn,[["__scopeId","data-v-fb2558b3"]]),zn={class:"property-search"},Ln=e.defineComponent({__name:"PropertySearch",emits:["search"],setup(o,{emit:r}){const t=e.ref(""),n=r;function l(){n("search",t.value)}return(i,a)=>(e.openBlock(),e.createElementBlock("div",zn,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[0]||(a[0]=c=>t.value=c),class:"pd-input",type:"search",placeholder:"搜索属性...","aria-label":"搜索属性",onInput:l},null,544),[[e.vModelText,t.value]])]))}}),Pn=J(Ln,[["__scopeId","data-v-10ab6c84"]]),Rn={class:"group-icon"},In={class:"group-title"},An={class:"expand-icon"},Hn={class:"group-content"},Fn=e.defineComponent({__name:"PropertyGroup",props:{title:{},icon:{},defaultExpanded:{type:Boolean},groupKey:{}},setup(o){const r=o,t=e.ref(r.defaultExpanded??!0),l={Document:"≡",Brush:"◧",Setting:"⚙"}[r.icon]||"•";function i(){t.value=!t.value,a()}function a(){const h=`property-group-${r.groupKey}`;try{localStorage.setItem(h,String(t.value))}catch{}}function c(){const h=`property-group-${r.groupKey}`;try{const u=localStorage.getItem(h);u!==null&&(t.value=u==="true")}catch{}}return e.onMounted(()=>{c()}),(h,u)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["property-group",{"is-expanded":t.value}])},[e.createElementVNode("div",{class:"group-header",onClick:i},[e.createElementVNode("span",Rn,e.toDisplayString(e.unref(l)),1),e.createElementVNode("span",In,e.toDisplayString(o.title),1),e.createElementVNode("span",An,e.toDisplayString(t.value?"▾":"▸"),1)]),e.withDirectives(e.createElementVNode("div",Hn,[e.renderSlot(h.$slots,"default",{},void 0,!0)],512),[[e.vShow,t.value]])],2))}}),ke=J(Fn,[["__scopeId","data-v-2ba57031"]]),Un={class:"pd-stepper"},Gn=["disabled"],On=["value","placeholder","min","max","step"],Wn=["disabled"],qn=e.defineComponent({__name:"StepperInput",props:{modelValue:{},min:{},max:{},step:{default:1},placeholder:{}},emits:["update:modelValue"],setup(o,{emit:r}){const t=o,n=r,l=e.computed(()=>{const z=String(t.step),S=z.indexOf(".");return S===-1?0:z.length-S-1});function i(z){return Number.isFinite(z)?Number(z.toFixed(l.value)):0}const a=e.computed(()=>{const z=t.modelValue;if(!(z==null||!Number.isFinite(z)))return i(z)}),c=e.ref(a.value===void 0?"":String(a.value));e.watch(a,z=>{c.value=z===void 0?"":String(z)});const h=e.computed(()=>a.value!==void 0?a.value:t.min!==void 0?t.min:0),u=e.computed(()=>t.min!==void 0&&h.value<=t.min),f=e.computed(()=>t.max!==void 0&&h.value>=t.max);function E(z){let S=i(z);return t.min!==void 0&&S<t.min&&(S=t.min),t.max!==void 0&&S>t.max&&(S=t.max),S}function C(z){if(z<0&&u.value||z>0&&f.value)return;const S=E(h.value+z*t.step);c.value=String(S),n("update:modelValue",S)}function I(z){c.value=z.target.value}function O(){const z=c.value.trim();if(z===""){a.value!==void 0&&(c.value=String(a.value));return}const S=Number(z);if(!Number.isFinite(S)){c.value=a.value===void 0?"":String(a.value);return}const U=E(S);c.value=String(U),U!==a.value&&n("update:modelValue",U)}return(z,S)=>(e.openBlock(),e.createElementBlock("div",Un,[e.createElementVNode("button",{type:"button",class:"pd-step-btn pd-step-minus",disabled:u.value,title:"减小","aria-label":"减小",onClick:S[0]||(S[0]=U=>C(-1))},"−",8,Gn),e.createElementVNode("input",{type:"number",class:"pd-input pd-step-input",value:c.value,placeholder:o.placeholder,min:o.min,max:o.max,step:o.step,onInput:I,onChange:O,onBlur:O,onKeydown:S[1]||(S[1]=e.withKeys(e.withModifiers(U=>U.target.blur(),["prevent"]),["enter"]))},null,40,On),e.createElementVNode("button",{type:"button",class:"pd-step-btn pd-step-plus",disabled:f.value,title:"增大","aria-label":"增大",onClick:S[2]||(S[2]=U=>C(1))},"+",8,Wn)]))}}),ie=J(qn,[["__scopeId","data-v-9722a7cf"]]),Kn={class:"position-grid"},Yn={class:"pd-field"},jn={class:"pd-field"},Xn={class:"pd-field"},Zn={class:"pd-field"},Jn=e.defineComponent({__name:"PositionSizeGroup",props:{element:{},matchedKeys:{},searching:{type:Boolean}},setup(o){const r=o;function t(n){return r.searching?r.matchedKeys?.has(n)??!0:!0}return(n,l)=>(e.openBlock(),e.createBlock(ke,{title:"位置与尺寸",icon:"Location","default-expanded":"","group-key":"position-size"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:l[4]||(l[4]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",Kn,[e.withDirectives(e.createElementVNode("div",Yn,[l[5]||(l[5]=e.createElementVNode("span",{class:"pd-label"},"X",-1)),e.createVNode(ie,{modelValue:o.element.options.left,"onUpdate:modelValue":l[0]||(l[0]=i=>o.element.options.left=i),min:0},null,8,["modelValue"])],512),[[e.vShow,t("ps-left")]]),e.withDirectives(e.createElementVNode("div",jn,[l[6]||(l[6]=e.createElementVNode("span",{class:"pd-label"},"Y",-1)),e.createVNode(ie,{modelValue:o.element.options.top,"onUpdate:modelValue":l[1]||(l[1]=i=>o.element.options.top=i),min:0},null,8,["modelValue"])],512),[[e.vShow,t("ps-top")]]),e.withDirectives(e.createElementVNode("div",Xn,[l[7]||(l[7]=e.createElementVNode("span",{class:"pd-label"},"W",-1)),e.createVNode(ie,{modelValue:o.element.options.width,"onUpdate:modelValue":l[2]||(l[2]=i=>o.element.options.width=i),min:4},null,8,["modelValue"])],512),[[e.vShow,t("ps-width")]]),e.withDirectives(e.createElementVNode("div",Zn,[l[8]||(l[8]=e.createElementVNode("span",{class:"pd-label"},"H",-1)),e.createVNode(ie,{modelValue:o.element.options.height,"onUpdate:modelValue":l[3]||(l[3]=i=>o.element.options.height=i),min:4},null,8,["modelValue"])],512),[[e.vShow,t("ps-height")]])])],32)]),_:1}))}}),Qn=J(Jn,[["__scopeId","data-v-bc364679"]]),_n=["aria-expanded","title"],el={class:"picker-preview"},tl={class:"preset-color-grid"},ol=["title","aria-label","onClick"],nl=e.defineComponent({__name:"PresetColorPicker",props:{modelValue:{}},emits:["update:modelValue"],setup(o,{emit:r}){const t=o,n=r,l=e.ref(!1),i=e.ref(),a=e.ref(),c=e.ref(),h=e.ref({}),u=e.ref(0),f=e.ref(0),E=e.ref(0),C=e.ref("#000000"),I=e.ref(!1),O=e.computed({get:()=>t.modelValue||"#000000",set:L=>n("update:modelValue",L)}),z=e.computed(()=>ee(oe(u.value,f.value,E.value))),S=e.computed({get:()=>Math.round(u.value),set:L=>W(se(L),f.value,E.value)});e.watch(O,Z,{immediate:!0});function U(L){C.value=L.toUpperCase(),Z(L),n("update:modelValue",L)}function K(L){const k=L.target.value.trim();Y(k)&&(Z(k),n("update:modelValue",j(k)))}function Z(L){const p=Y(L);if(!p)return;const k=ue(p.r,p.g,p.b);u.value=k.h,f.value=k.s,E.value=k.v,C.value=j(L).toUpperCase()}function W(L,p,k){u.value=se(L),f.value=ae(p),E.value=ae(k),C.value=z.value.toUpperCase(),n("update:modelValue",z.value)}function Q(L){L.currentTarget.setPointerCapture(L.pointerId),I.value=!0,$(L)}function _(L){I.value&&$(L)}function N(L){I.value=!1;const p=L.currentTarget;p.hasPointerCapture(L.pointerId)&&p.releasePointerCapture(L.pointerId)}function $(L){const p=c.value;if(!p)return;const k=p.getBoundingClientRect(),B=ae((L.clientX-k.left)/k.width),T=ae(1-(L.clientY-k.top)/k.height);W(u.value,B,T)}function M(L){const p=L.shiftKey?.1:.02;let k=!0;L.key==="ArrowLeft"?W(u.value,f.value-p,E.value):L.key==="ArrowRight"?W(u.value,f.value+p,E.value):L.key==="ArrowUp"?W(u.value,f.value,E.value+p):L.key==="ArrowDown"?W(u.value,f.value,E.value-p):k=!1,k&&L.preventDefault()}function P(){l.value?D():x()}async function x(){const L=i.value;if(!L)return;Z(O.value),l.value=!0,await e.nextTick();const p=L.getBoundingClientRect(),k=190,B=a.value?.offsetHeight??216,T=8,g=Math.min(p.left,window.innerWidth-k-T),d=p.bottom+6,m=d+B>window.innerHeight-T?Math.max(T,p.top-B-6):d;h.value={left:`${Math.max(T,g)}px`,top:`${m}px`}}function D(){l.value=!1}function s(L){const p=L.target;i.value?.contains(p)||a.value?.contains(p)||D()}function V(){l.value&&D()}function F(L){L.key==="Escape"&&l.value&&D()}function Y(L){const p=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(L.trim());if(!p)return null;const k=p[1],B=k.length===3?k.split("").map(T=>T+T).join(""):k;return{r:Number.parseInt(B.slice(0,2),16),g:Number.parseInt(B.slice(2,4),16),b:Number.parseInt(B.slice(4,6),16)}}function j(L){const p=Y(L);return p?ee(p):"#000000"}function ee({r:L,g:p,b:k}){return`#${[L,p,k].map(B=>Math.round(ae(B/255)*255).toString(16).padStart(2,"0")).join("")}`}function ue(L,p,k){const B=L/255,T=p/255,g=k/255,d=Math.max(B,T,g),m=Math.min(B,T,g),y=d-m;let v=0;return y!==0&&(d===B?v=(T-g)/y%6:d===T?v=(g-B)/y+2:v=(B-T)/y+4,v*=60,v<0&&(v+=360)),{h:v,s:d===0?0:y/d,v:d}}function oe(L,p,k){const B=k*p,T=(L%360+360)%360/60,g=B*(1-Math.abs(T%2-1)),[d,m,y]=T<1?[B,g,0]:T<2?[g,B,0]:T<3?[0,B,g]:T<4?[0,g,B]:T<5?[g,0,B]:[B,0,g],v=k-B;return{r:(d+v)*255,g:(m+v)*255,b:(y+v)*255}}function se(L){return((Number.isFinite(L)?L:0)%360+360)%360}function ae(L){return Math.min(1,Math.max(0,Number.isFinite(L)?L:0))}return e.onMounted(()=>{document.addEventListener("pointerdown",s,!0),window.addEventListener("scroll",V,!0),window.addEventListener("resize",V),document.addEventListener("keydown",F)}),e.onBeforeUnmount(()=>{document.removeEventListener("pointerdown",s,!0),window.removeEventListener("scroll",V,!0),window.removeEventListener("resize",V),document.removeEventListener("keydown",F)}),(L,p)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("button",{ref_key:"triggerRef",ref:i,type:"button",class:"preset-color-trigger","aria-expanded":l.value,"aria-haspopup":"dialog",title:o.modelValue||"自动",onClick:P},[e.createElementVNode("span",{class:"preset-color-swatch",style:e.normalizeStyle({background:O.value})},null,4)],8,_n),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"panelRef",ref:a,class:"preset-color-panel",role:"dialog","aria-label":"颜色选择",style:e.normalizeStyle(h.value),onPointerdown:p[2]||(p[2]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",el,[e.createElementVNode("span",{class:"picker-current",style:e.normalizeStyle({background:z.value})},null,4),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[0]||(p[0]=k=>C.value=k),class:"picker-hex",type:"text",maxlength:"7",spellcheck:"false","aria-label":"颜色值",onInput:K},null,544),[[e.vModelText,C.value]])]),e.createElementVNode("div",{ref_key:"areaRef",ref:c,class:"picker-area",style:e.normalizeStyle({"--picker-hue":`${Math.round(u.value)}deg`}),"aria-label":"自定义颜色",tabindex:"0",onPointerdown:Q,onPointermove:_,onPointerup:N,onPointercancel:N,onKeydown:M},[e.createElementVNode("span",{class:"picker-handle",style:e.normalizeStyle({left:`${f.value*100}%`,top:`${(1-E.value)*100}%`,background:z.value})},null,4)],36),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[1]||(p[1]=k=>S.value=k),class:"picker-hue",type:"range",min:"0",max:"360",step:"1","aria-label":"色相"},null,512),[[e.vModelText,S.value,void 0,{number:!0}]]),p[3]||(p[3]=e.createElementVNode("div",{class:"picker-heading"},"常用颜色",-1)),e.createElementVNode("div",tl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w.PRESET_COLORS),k=>(e.openBlock(),e.createElementBlock("button",{key:k,type:"button",class:e.normalizeClass(["preset-color-item",{active:k.toLowerCase()===z.value.toLowerCase()}]),style:e.normalizeStyle({background:k}),title:k,"aria-label":k,onClick:B=>U(k)},null,14,ol))),128))])],36)):e.createCommentVNode("",!0)]))],64))}}),Ee=J(nl,[["__scopeId","data-v-079f8fdd"]]),ll={class:"pd-field"},al={class:"pd-field"},il={class:"pd-field"},rl={class:"pd-radio-group",role:"radiogroup"},sl={class:"pd-radio"},dl={class:"pd-radio"},cl={class:"pd-radio"},ul={class:"pd-field"},ml={class:"pd-radio-group",role:"radiogroup"},pl={class:"pd-radio"},vl={class:"pd-radio"},fl={class:"pd-radio"},gl={class:"color-row"},hl={class:"pd-field"},bl={class:"pd-field"},yl={class:"pd-field"},El={class:"pd-field"},kl={key:1,class:"pd-empty"},Vl=e.defineComponent({__name:"AppearanceGroup",props:{element:{},isTextType:{type:Boolean},matchedKeys:{},searching:{type:Boolean}},setup(o){const r=o;function t(l){return r.searching?r.matchedKeys?.has(l)??!0:!0}const n=e.computed(()=>r.element.printElementType.type==="table");return(l,i)=>(e.openBlock(),e.createBlock(ke,{title:"外观",icon:"Brush","default-expanded":"","group-key":"appearance"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:i[12]||(i[12]=e.withModifiers(()=>{},["prevent"]))},[o.isTextType?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.withDirectives(e.createElementVNode("div",ll,[i[13]||(i[13]=e.createElementVNode("span",{class:"pd-label"},"字体大小",-1)),e.createVNode(ie,{modelValue:o.element.options.fontSize,"onUpdate:modelValue":i[0]||(i[0]=a=>o.element.options.fontSize=a),min:8,max:72},null,8,["modelValue"])],512),[[e.vShow,t("ap-font-size")]]),e.withDirectives(e.createElementVNode("div",al,[i[15]||(i[15]=e.createElementVNode("span",{class:"pd-label"},"字体粗细",-1)),e.withDirectives(e.createElementVNode("select",{class:"pd-select","onUpdate:modelValue":i[1]||(i[1]=a=>o.element.options.fontWeight=a),style:{width:"100%"}},[...i[14]||(i[14]=[e.createElementVNode("option",{value:"normal"},"正常",-1),e.createElementVNode("option",{value:"bold"},"粗体",-1),e.createElementVNode("option",{value:"bolder"},"更粗",-1),e.createElementVNode("option",{value:"lighter"},"细体",-1)])],512),[[e.vModelSelect,o.element.options.fontWeight]])],512),[[e.vShow,t("ap-font-weight")]]),e.withDirectives(e.createElementVNode("div",il,[i[19]||(i[19]=e.createElementVNode("span",{class:"pd-label"},"对齐",-1)),e.createElementVNode("div",rl,[e.createElementVNode("label",sl,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":i[2]||(i[2]=a=>o.element.options.textAlign=a),value:"left"},null,512),[[e.vModelRadio,o.element.options.textAlign]]),i[16]||(i[16]=e.createElementVNode("span",null,"左",-1))]),e.createElementVNode("label",dl,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":i[3]||(i[3]=a=>o.element.options.textAlign=a),value:"center"},null,512),[[e.vModelRadio,o.element.options.textAlign]]),i[17]||(i[17]=e.createElementVNode("span",null,"中",-1))]),e.createElementVNode("label",cl,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":i[4]||(i[4]=a=>o.element.options.textAlign=a),value:"right"},null,512),[[e.vModelRadio,o.element.options.textAlign]]),i[18]||(i[18]=e.createElementVNode("span",null,"右",-1))])])],512),[[e.vShow,t("ap-align")]]),e.withDirectives(e.createElementVNode("div",ul,[i[23]||(i[23]=e.createElementVNode("span",{class:"pd-label"},"垂直对齐",-1)),e.createElementVNode("div",ml,[e.createElementVNode("label",pl,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":i[5]||(i[5]=a=>o.element.options.verticalAlign=a),value:"top"},null,512),[[e.vModelRadio,o.element.options.verticalAlign]]),i[20]||(i[20]=e.createElementVNode("span",null,"顶",-1))]),e.createElementVNode("label",vl,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":i[6]||(i[6]=a=>o.element.options.verticalAlign=a),value:"middle"},null,512),[[e.vModelRadio,o.element.options.verticalAlign]]),i[21]||(i[21]=e.createElementVNode("span",null,"中",-1))]),e.createElementVNode("label",fl,[e.withDirectives(e.createElementVNode("input",{type:"radio","onUpdate:modelValue":i[7]||(i[7]=a=>o.element.options.verticalAlign=a),value:"bottom"},null,512),[[e.vModelRadio,o.element.options.verticalAlign]]),i[22]||(i[22]=e.createElementVNode("span",null,"底",-1))])])],512),[[e.vShow,t("ap-vertical-align")]]),e.createElementVNode("div",gl,[e.withDirectives(e.createElementVNode("div",hl,[i[24]||(i[24]=e.createElementVNode("span",{class:"pd-label"},"颜色",-1)),e.createVNode(Ee,{modelValue:o.element.options.color,"onUpdate:modelValue":i[8]||(i[8]=a=>o.element.options.color=a)},null,8,["modelValue"])],512),[[e.vShow,t("ap-color")]]),e.withDirectives(e.createElementVNode("div",bl,[i[25]||(i[25]=e.createElementVNode("span",{class:"pd-label"},"背景色",-1)),e.createVNode(Ee,{modelValue:o.element.options.backgroundColor,"onUpdate:modelValue":i[9]||(i[9]=a=>o.element.options.backgroundColor=a)},null,8,["modelValue"])],512),[[e.vShow,t("ap-bg-color")]])]),e.withDirectives(e.createElementVNode("div",yl,[i[26]||(i[26]=e.createElementVNode("span",{class:"pd-label"},"行高",-1)),e.createVNode(ie,{modelValue:o.element.options.lineHeight,"onUpdate:modelValue":i[10]||(i[10]=a=>o.element.options.lineHeight=a),min:0,max:100},null,8,["modelValue"])],512),[[e.vShow,t("ap-line-height")]]),e.withDirectives(e.createElementVNode("div",El,[i[27]||(i[27]=e.createElementVNode("span",{class:"pd-label"},"字间距",-1)),e.createVNode(ie,{modelValue:o.element.options.letterSpacing,"onUpdate:modelValue":i[11]||(i[11]=a=>o.element.options.letterSpacing=a),min:0,max:20,step:.5},null,8,["modelValue"])],512),[[e.vShow,t("ap-letter-spacing")]])],64)):e.createCommentVNode("",!0),!o.isTextType&&!n.value?(e.openBlock(),e.createElementBlock("p",kl,"当前元素不支持外观设置")):e.createCommentVNode("",!0)],32)]),_:1}))}}),wl=J(Vl,[["__scopeId","data-v-9d989c80"]]),Nl={class:"pd-dialog pd-dialog-large",role:"dialog","aria-modal":"true","aria-labelledby":"expression-editor-title"},Cl={class:"pd-dialog-header"},Sl={class:"expression-editor"},Bl={class:"ee-nav"},$l={class:"ee-nav-tabs"},xl={class:"ee-content"},Tl={class:"ee-content-search"},Dl=["placeholder"],Ml={class:"ee-content-list"},zl={class:"ee-field-group-icon"},Ll=["onDblclick"],Pl={class:"ee-field-info"},Rl={class:"ee-item-label"},Il={class:"ee-item-key"},Al={key:0,class:"pd-empty"},Hl=["onDblclick"],Fl={class:"ee-field-info"},Ul={class:"ee-item-label"},Gl={class:"ee-item-key"},Ol={class:"ee-func-group"},Wl=["onDblclick"],ql={class:"ee-field-info"},Kl={class:"ee-item-label"},Yl={class:"ee-item-key"},jl={class:"ee-func-group"},Xl=["onDblclick"],Zl={class:"ee-field-info"},Jl={class:"ee-item-label"},Ql={class:"ee-item-key"},_l={class:"ee-editor"},ea={class:"ee-editor-section"},ta={class:"ee-editor-section"},oa={class:"pd-dialog-footer"},na=e.defineComponent({__name:"ExpressionEditor",props:{modelValue:{type:Boolean},expression:{},fields:{}},emits:["update:modelValue","update:expression"],setup(o,{emit:r}){const t=o,n=r,l=e.computed({get:()=>t.modelValue,set:$=>n("update:modelValue",$)}),i=e.ref("field"),a=e.computed(()=>{switch(i.value){case"field":return"搜索字段...";case"variable":return"搜索变量...";case"function":return"搜索函数...";default:return"搜索..."}}),c=e.ref(""),h=e.computed(()=>w.filterGroups(w.groupFields(t.fields??[]),c.value));e.watch(l,$=>{$&&(S.value=t.expression||"")});function u($){const{insideParens:M}=C();_(M?$.fieldKey:`{${$.fieldKey}}`)}function f($){const{insideParens:M}=C();_(M?$.template.replace(/^\{|\}$/g,""):$.template)}function E($){const{insideBlock:M}=C(),P=M?$.template:`{${$.template}}`,x=P.indexOf("(")+1;_(P,x)}function C(){const M=U.value?.selectionStart??S.value.length,P=S.value.substring(0,M);let x=!1;const D=P.lastIndexOf("{");D!==-1&&!P.slice(D+1).includes("}")&&(x=!0);let s=!1;const V=P.lastIndexOf("(");return V!==-1&&!P.slice(V+1).includes(")")&&(s=!0),{insideBlock:x,insideParens:s}}const I=e.computed(()=>{if(!c.value.trim())return W;const $=c.value.trim().toLowerCase();return W.filter(M=>M.label.toLowerCase().includes($)||M.name.toLowerCase().includes($))}),O=e.computed(()=>{if(!c.value.trim())return K;const $=c.value.trim().toLowerCase();return K.filter(M=>M.label.toLowerCase().includes($)||M.name.toLowerCase().includes($))}),z=e.computed(()=>{if(!c.value.trim())return Z;const $=c.value.trim().toLowerCase();return Z.filter(M=>M.label.toLowerCase().includes($)||M.name.toLowerCase().includes($))}),S=e.ref(t.expression||""),U=e.ref(null);e.watch(()=>t.expression,$=>{S.value=$||""});const K=[{name:"SUM",label:"求和",template:"SUM()"},{name:"AVG",label:"平均值",template:"AVG()"},{name:"COUNT",label:"计数",template:"COUNT()"},{name:"MIN",label:"最小值",template:"MIN()"},{name:"MAX",label:"最大值",template:"MAX()"}],Z=[{name:"MONEY",label:"金额格式化",template:"MONEY()"},{name:"DATE",label:"日期格式化",template:"DATE()"},{name:"UPPER",label:"大写金额",template:"UPPER()"},{name:"IF",label:"条件判断",template:"IF()"}],W=[{name:"pageIndex",label:"当前页码",template:"{pageIndex}"},{name:"totalPages",label:"总页数",template:"{totalPages}"},{name:"printDate",label:"打印日期",template:"{printDate}"},{name:"printTime",label:"打印时间",template:"{printTime}"}],Q=e.computed(()=>{if(!S.value.trim())return"(输入表达式后预览)";try{const $={...w.DEFAULT_DEMO_DATA,pageIndex:1,totalPages:1,printDate:new Date().toISOString().split("T")[0],printTime:Date.now()},M=w.evaluateTemplate(S.value,$);return M==null?"(无法计算)":String(M)}catch{return"(表达式错误)"}});function _($,M=$.length){const P=U.value;if(!P){S.value+=$;return}const x=P.selectionStart,D=P.selectionEnd,s=S.value.substring(0,x),V=S.value.substring(D);S.value=s+$+V;const F=x+M;e.nextTick(()=>{P.focus(),P.selectionStart=P.selectionEnd=F})}function N(){n("update:expression",S.value),l.value=!1}return($,M)=>l.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"pd-dialog-overlay",onKeydown:M[7]||(M[7]=e.withKeys(P=>l.value=!1,["esc"]))},[e.createElementVNode("section",Nl,[e.createElementVNode("header",Cl,[M[8]||(M[8]=e.createElementVNode("strong",{id:"expression-editor-title"},"编辑表达式",-1)),e.createElementVNode("button",{type:"button",class:"pd-close","aria-label":"关闭",onClick:M[0]||(M[0]=P=>l.value=!1)},"×")]),e.createElementVNode("div",Sl,[e.createElementVNode("div",Bl,[M[9]||(M[9]=e.createElementVNode("div",{class:"ee-nav-title"},"类型",-1)),e.createElementVNode("div",$l,[e.createElementVNode("div",{class:e.normalizeClass(["ee-nav-tab",{active:i.value==="field"}]),onClick:M[1]||(M[1]=P=>i.value="field")}," 📁 字段 ",2),e.createElementVNode("div",{class:e.normalizeClass(["ee-nav-tab",{active:i.value==="variable"}]),onClick:M[2]||(M[2]=P=>i.value="variable")}," 🔧 变量 ",2),e.createElementVNode("div",{class:e.normalizeClass(["ee-nav-tab",{active:i.value==="function"}]),onClick:M[3]||(M[3]=P=>i.value="function")}," ⚡ 函数 ",2)])]),e.createElementVNode("div",xl,[e.createElementVNode("div",Tl,[e.withDirectives(e.createElementVNode("input",{class:"pd-input","onUpdate:modelValue":M[4]||(M[4]=P=>c.value=P),placeholder:a.value},null,8,Dl),[[e.vModelText,c.value]])]),e.createElementVNode("div",Ml,[i.value==="field"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,P=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:P.key||"_top"},[P.key?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["ee-field-group",{"is-list":P.isList}])},[e.createElementVNode("span",zl,e.toDisplayString(P.isList?"📋":"📁"),1),e.createElementVNode("span",null,e.toDisplayString(P.label),1)],2)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.fields,x=>(e.openBlock(),e.createElementBlock("div",{key:x.fieldKey,class:"ee-list-item ee-field-item",style:e.normalizeStyle({paddingLeft:P.key?"22px":"10px"}),onDblclick:D=>u(x)},[e.createElementVNode("div",Pl,[e.createElementVNode("span",Rl,e.toDisplayString(x.fieldLabel),1),e.createElementVNode("span",Il,e.toDisplayString(x.fieldKey),1)])],44,Ll))),128))],64))),128)),h.value.length===0?(e.openBlock(),e.createElementBlock("p",Al,"暂无字段")):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),i.value==="variable"?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(I.value,P=>(e.openBlock(),e.createElementBlock("div",{key:P.name,class:"ee-list-item",onDblclick:x=>f(P)},[e.createElementVNode("div",Fl,[e.createElementVNode("span",Ul,e.toDisplayString(P.label),1),e.createElementVNode("span",Gl,e.toDisplayString(P.template),1)])],40,Hl))),128)):e.createCommentVNode("",!0),i.value==="function"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",Ol,[M[10]||(M[10]=e.createElementVNode("div",{class:"ee-func-group-title"},"聚合函数",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,P=>(e.openBlock(),e.createElementBlock("div",{key:P.name,class:"ee-list-item",onDblclick:x=>E(P)},[e.createElementVNode("div",ql,[e.createElementVNode("span",Kl,e.toDisplayString(P.label),1),e.createElementVNode("span",Yl,e.toDisplayString(P.name)+"()",1)])],40,Wl))),128))]),e.createElementVNode("div",jl,[M[11]||(M[11]=e.createElementVNode("div",{class:"ee-func-group-title"},"格式化函数",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,P=>(e.openBlock(),e.createElementBlock("div",{key:P.name,class:"ee-list-item",onDblclick:x=>E(P)},[e.createElementVNode("div",Zl,[e.createElementVNode("span",Jl,e.toDisplayString(P.label),1),e.createElementVNode("span",Ql,e.toDisplayString(P.name)+"()",1)])],40,Xl))),128))])],64)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",_l,[e.createElementVNode("div",ea,[M[12]||(M[12]=e.createElementVNode("div",{class:"ee-editor-title"},"表达式编辑",-1)),e.withDirectives(e.createElementVNode("textarea",{ref_key:"textareaRef",ref:U,"onUpdate:modelValue":M[5]||(M[5]=P=>S.value=P),class:"ee-textarea",rows:"6",placeholder:"双击左侧字段/变量/函数插入,或直接输入静态内容"},null,512),[[e.vModelText,S.value]])]),e.createElementVNode("div",ta,[M[13]||(M[13]=e.createElementVNode("div",{class:"ee-editor-title"},"预览结果",-1)),e.createElementVNode("div",{class:e.normalizeClass(["ee-preview",{"ee-preview-error":Q.value==="(表达式错误)"}])},e.toDisplayString(Q.value),3)]),M[14]||(M[14]=e.createStaticVNode('<div class="ee-help-section" data-v-ef66ca45><div class="ee-help-title" data-v-ef66ca45>帮助信息</div><div class="ee-help-grid" data-v-ef66ca45><div class="ee-help-card ee-help-field" data-v-ef66ca45><div class="ee-help-card-title" data-v-ef66ca45>输入方式</div><div class="ee-help-card-content" data-v-ef66ca45> 双击左侧字段、变量、函数即可插入到表达式输入框中<br data-v-ef66ca45> 静态数据直接输入即可,如:供应商名称<br data-v-ef66ca45> 动态解析字段、变量、函数必须用 {} 包裹<br data-v-ef66ca45> 示例:{SUM(supplier.name)}<br data-v-ef66ca45> 注意:只能嵌套一层 </div></div><div class="ee-help-card ee-help-function" data-v-ef66ca45><div class="ee-help-card-title" data-v-ef66ca45>函数使用</div><div class="ee-help-card-content" data-v-ef66ca45> SUM(字段) - 求和<br data-v-ef66ca45> AVG(字段) - 平均值<br data-v-ef66ca45> COUNT(字段) - 计数<br data-v-ef66ca45> IF(条件, 真值, 假值) - 条件判断 </div></div><div class="ee-help-card ee-help-variable" data-v-ef66ca45><div class="ee-help-card-title" data-v-ef66ca45>系统变量</div><div class="ee-help-card-content" data-v-ef66ca45> {pageIndex} - 当前页码<br data-v-ef66ca45> {totalPages} - 总页数<br data-v-ef66ca45> {printDate} - 打印日期 </div></div><div class="ee-help-card ee-help-conditional" data-v-ef66ca45><div class="ee-help-card-title" data-v-ef66ca45>示例</div><div class="ee-help-card-content" data-v-ef66ca45> 静态文本:供应商名称<br data-v-ef66ca45> 动态字段:{supplier.name}<br data-v-ef66ca45> 函数调用:{SUM(amount)}<br data-v-ef66ca45> 条件判断:{IF(amount&gt;1000, &quot;大单&quot;, &quot;小单&quot;)} </div></div></div></div>',1))])]),e.createElementVNode("footer",oa,[e.createElementVNode("button",{type:"button",class:"pd-button",onClick:M[6]||(M[6]=P=>l.value=!1)},"取消"),e.createElementVNode("button",{type:"button",class:"pd-button primary",onClick:N},"确定")])])],32)):e.createCommentVNode("",!0)}}),Oe=J(na,[["__scopeId","data-v-ef66ca45"]]),la={class:"pd-field"},aa={class:"pd-label"},ia=["value","placeholder"],ra=e.defineComponent({__name:"BindingControl",props:{descriptor:{},modelValue:{},fields:{}},emits:["update:modelValue"],setup(o,{emit:r}){const t=r,n=e.ref(!1);function l(){n.value=!0}return(i,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",la,[e.createElementVNode("span",aa,e.toDisplayString(o.descriptor.label),1),e.createElementVNode("input",{value:o.modelValue,class:"pd-input",placeholder:o.descriptor.placeholder||"输入内容,支持 {字段} 表达式",onInput:a[0]||(a[0]=c=>t("update:modelValue",c.target.value)),onDblclick:l},null,40,ia)]),e.createVNode(Oe,{modelValue:n.value,"onUpdate:modelValue":a[1]||(a[1]=c=>n.value=c),fields:o.fields,expression:o.modelValue,"onUpdate:expression":a[2]||(a[2]=c=>t("update:modelValue",c))},null,8,["modelValue","fields","expression"])],64))}}),sa=J(ra,[["__scopeId","data-v-40a99329"]]),da={class:"pd-field"},ca=["value"],ua=["value"],ma={class:"pd-field"},pa={class:"pd-field"},va={class:"pd-field"},fa={class:"pd-field"},ga={style:{width:"60px"}},ha=e.defineComponent({__name:"TableSettingsGroup",props:{element:{},fields:{}},setup(o){const r=o,t=e.inject(Te,null),n=e.computed(()=>r.fields.filter(a=>a.fieldType==="list").map(a=>({label:a.fieldLabel,value:a.fieldKey})));function l(a){r.element.options.dataSource=a||void 0,t?.recordHistory()}function i(a,c){if(c===void 0)return;const h=r.element.options.tableColWidths,u=t?.maxTableWidth.value??1/0,f=h.reduce((E,C,I)=>I===a?E:E+C,0);if(f+c>u){const E=Math.max(5,Math.round((u-f)*10)/10);alert(`表格总宽不能超过打印范围宽度 ${u}mm,列${a+1} 已调整为 ${E}mm`),h[a]=E}else h[a]=c;w.syncTableElementSize(r.element.options),t?.recordHistory()}return(a,c)=>(e.openBlock(),e.createBlock(ke,{title:"表格设置",icon:"Grid","default-expanded":"","group-key":"table-settings"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:c[4]||(c[4]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",da,[c[5]||(c[5]=e.createElementVNode("span",{class:"pd-label"},"列表数据源字段",-1)),e.createElementVNode("select",{value:o.element.options.dataSource,class:"pd-select",style:{width:"100%"},onChange:c[0]||(c[0]=h=>l(h.target.value))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,h=>(e.openBlock(),e.createElementBlock("option",{key:h.value,value:h.value},e.toDisplayString(h.label),9,ua))),128))],40,ca)]),e.createElementVNode("div",ma,[c[6]||(c[6]=e.createElementVNode("span",{class:"pd-label"},"默认字号 (pt)",-1)),e.createVNode(ie,{modelValue:o.element.options.tableDefaultFontSize,"onUpdate:modelValue":c[1]||(c[1]=h=>o.element.options.tableDefaultFontSize=h),min:5,max:72,placeholder:"默认"},null,8,["modelValue"])]),e.createElementVNode("div",pa,[c[7]||(c[7]=e.createElementVNode("span",{class:"pd-label"},"默认文字颜色",-1)),e.createVNode(Ee,{modelValue:o.element.options.tableDefaultColor,"onUpdate:modelValue":c[2]||(c[2]=h=>o.element.options.tableDefaultColor=h)},null,8,["modelValue"])]),e.createElementVNode("div",va,[c[8]||(c[8]=e.createElementVNode("span",{class:"pd-label"},"默认内边距 (mm)",-1)),e.createVNode(ie,{modelValue:o.element.options.tableDefaultPadding,"onUpdate:modelValue":c[3]||(c[3]=h=>o.element.options.tableDefaultPadding=h),min:0,max:10,step:.5,placeholder:"默认"},null,8,["modelValue"])]),e.createElementVNode("div",fa,[c[9]||(c[9]=e.createElementVNode("span",{class:"pd-label"},"列宽 (mm)",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.element.options.tableColWidths,(h,u)=>(e.openBlock(),e.createElementBlock("div",{key:u,class:"col-width-row"},[e.createElementVNode("span",ga,"列"+e.toDisplayString(u+1),1),e.createVNode(ie,{"model-value":h,min:5,max:200,"onUpdate:modelValue":f=>i(u,f)},null,8,["model-value","onUpdate:modelValue"])]))),128))])],32)]),_:1}))}}),ba=J(ha,[["__scopeId","data-v-b5fdc7ff"]]),ya={class:"border-row"},Ea={class:"pd-field"},ka={class:"pd-field"},Va={class:"pd-field"},wa=e.defineComponent({__name:"BorderBgGroup",props:{element:{},matchedKeys:{},searching:{type:Boolean}},setup(o){const r=o;function t(n){return r.searching?r.matchedKeys?.has(n)??!0:!0}return(n,l)=>(e.openBlock(),e.createBlock(ke,{title:"边框与背景",icon:"Picture","default-expanded":"","group-key":"border-bg"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:l[3]||(l[3]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",ya,[e.withDirectives(e.createElementVNode("div",Ea,[l[4]||(l[4]=e.createElementVNode("span",{class:"pd-label"},"边框宽度",-1)),e.createVNode(ie,{modelValue:o.element.options.borderWidth,"onUpdate:modelValue":l[0]||(l[0]=i=>o.element.options.borderWidth=i),min:0,max:20,step:.25},null,8,["modelValue"])],512),[[e.vShow,t("bb-border-width")]]),e.withDirectives(e.createElementVNode("div",ka,[l[5]||(l[5]=e.createElementVNode("span",{class:"pd-label"},"边框颜色",-1)),e.createVNode(Ee,{modelValue:o.element.options.borderColor,"onUpdate:modelValue":l[1]||(l[1]=i=>o.element.options.borderColor=i)},null,8,["modelValue"])],512),[[e.vShow,t("bb-border-color")]])]),e.withDirectives(e.createElementVNode("div",Va,[l[6]||(l[6]=e.createElementVNode("span",{class:"pd-label"},"背景色",-1)),e.createVNode(Ee,{modelValue:o.element.options.backgroundColor,"onUpdate:modelValue":l[2]||(l[2]=i=>o.element.options.backgroundColor=i)},null,8,["modelValue"])],512),[[e.vShow,t("bb-bg-color")]])],32)]),_:1}))}}),Na=J(wa,[["__scopeId","data-v-e0e6d714"]]),Ca={class:"advanced-row"},Sa={class:"pd-field"},Ba={class:"pd-field"},$a={class:"pd-field"},xa={class:"pd-field"},Ta=e.defineComponent({__name:"AdvancedGroup",props:{element:{},matchedKeys:{},searching:{type:Boolean}},emits:["delete-element"],setup(o){const r=o;function t(n){return r.searching?r.matchedKeys?.has(n)??!0:!0}return(n,l)=>(e.openBlock(),e.createBlock(ke,{title:"高级设置",icon:"Setting","group-key":"advanced"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:l[4]||(l[4]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",Ca,[e.withDirectives(e.createElementVNode("div",Sa,[l[5]||(l[5]=e.createElementVNode("span",{class:"pd-label"},"锁定",-1)),e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:"pd-switch","onUpdate:modelValue":l[0]||(l[0]=i=>o.element.options.locked=i)},null,512),[[e.vModelCheckbox,o.element.options.locked]])],512),[[e.vShow,t("ad-locked")]]),e.withDirectives(e.createElementVNode("div",Ba,[l[6]||(l[6]=e.createElementVNode("span",{class:"pd-label"},"每页重复",-1)),e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:"pd-switch","onUpdate:modelValue":l[1]||(l[1]=i=>o.element.options.fixed=i)},null,512),[[e.vModelCheckbox,o.element.options.fixed]])],512),[[e.vShow,t("ad-fixed")]])]),e.withDirectives(e.createElementVNode("div",$a,[l[7]||(l[7]=e.createElementVNode("span",{class:"pd-label"},"层级",-1)),e.createVNode(ie,{modelValue:o.element.options.zIndex,"onUpdate:modelValue":l[2]||(l[2]=i=>o.element.options.zIndex=i),min:0,max:999},null,8,["modelValue"])],512),[[e.vShow,t("ad-z-index")]]),e.withDirectives(e.createElementVNode("div",xa,[e.createElementVNode("button",{type:"button",class:"pd-button danger",onClick:l[3]||(l[3]=i=>n.$emit("delete-element"))}," 删除元素 ")],512),[[e.vShow,t("ad-delete")]])],32)]),_:1}))}}),Da=J(Ta,[["__scopeId","data-v-14924be2"]]),Ma={key:0,class:"pd-field"},za=["checked"],La={class:"pd-field"},Pa=["checked"],Ra={class:"pd-field"},Ia=["checked"],Xe=e.defineComponent({__name:"PaginationGroup",props:{element:{},matchedKeys:{},searching:{type:Boolean}},setup(o){const r=o,t=e.computed(()=>r.element.printElementType.type==="table"),n=e.computed({get:()=>r.element.options.tablePagination?.enabled??!0,set:()=>{}});function l(f){r.element.options.tablePagination={enabled:f}}const i=e.computed({get:()=>r.element.options.pagination?.pageable??!0,set:()=>{}}),a=e.computed({get:()=>r.element.options.pagination?.keepWithNext??!1,set:()=>{}});function c(f){r.element.options.pagination={pageable:f,keepWithNext:a.value}}function h(f){r.element.options.pagination={pageable:i.value,keepWithNext:f}}function u(f){return r.searching?r.matchedKeys?.has(f)??!0:!0}return(f,E)=>(e.openBlock(),e.createBlock(ke,{title:"分页配置",icon:"Document","group-key":"pagination"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:E[3]||(E[3]=e.withModifiers(()=>{},["prevent"]))},[t.value?e.withDirectives((e.openBlock(),e.createElementBlock("div",Ma,[E[4]||(E[4]=e.createElementVNode("span",{class:"pd-label"},"启用分页",-1)),e.createElementVNode("input",{type:"checkbox",class:"pd-switch",checked:n.value,onChange:E[0]||(E[0]=C=>l(C.target.checked))},null,40,za)],512)),[[e.vShow,u("pg-enabled")]]):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.withDirectives(e.createElementVNode("div",La,[E[5]||(E[5]=e.createElementVNode("span",{class:"pd-label"},"参与分页",-1)),e.createElementVNode("input",{type:"checkbox",class:"pd-switch",checked:i.value,onChange:E[1]||(E[1]=C=>c(C.target.checked))},null,40,Pa)],512),[[e.vShow,u("pg-pageable")]]),e.withDirectives(e.createElementVNode("div",Ra,[E[6]||(E[6]=e.createElementVNode("span",{class:"pd-label"},"与下元素同页",-1)),e.createElementVNode("input",{type:"checkbox",class:"pd-switch",checked:a.value,onChange:E[2]||(E[2]=C=>h(C.target.checked))},null,40,Ia)],512),[[e.vShow,u("pg-keep-with-next")]])],64))],32)]),_:1}))}}),Aa={class:"image-content-upload"},Ha=["disabled"],Fa=e.defineComponent({__name:"ImageContentUpload",props:{disabled:{type:Boolean}},emits:["success"],setup(o,{emit:r}){const t=o,n=r,l=e.ref(!1),i=e.inject(Ge,e.computed(()=>{})),a=e.computed(()=>t.disabled||l.value||!i.value);async function c(h){const u=h.target,f=u.files?.[0];if(f){if(!f.type.startsWith("image/")){alert("仅支持上传图片文件"),u.value="";return}if(!i.value){alert("图片上传能力未配置"),u.value="";return}l.value=!0;try{const E=await i.value(f);E?n("success",E):alert("图片上传失败")}catch(E){alert(E instanceof Error?E.message:"图片上传失败")}finally{l.value=!1,u.value=""}}}return(h,u)=>(e.openBlock(),e.createElementBlock("div",Aa,[e.createElementVNode("label",{class:e.normalizeClass(["pd-button small upload-label",{disabled:a.value}])},[u[0]||(u[0]=e.createElementVNode("svg",{class:"pd-icon",viewBox:"0 0 24 24","aria-hidden":"true"},[e.createElementVNode("path",{fill:"currentColor",d:"M12 3l4 4h-3v7h-2V7H8zm-7 12h14v5H5Z"})],-1)),e.createTextVNode(" "+e.toDisplayString(l.value?"上传中...":"上传图片")+" ",1),e.createElementVNode("input",{class:"visually-hidden",type:"file",accept:"image/*",disabled:a.value,onChange:c},null,40,Ha)],2),u[1]||(u[1]=e.createElementVNode("p",{class:"upload-tip"},"支持 jpg/png/gif/bmp/webp/svg 等图片,上传后填入相对路径",-1))]))}}),Ua=J(Fa,[["__scopeId","data-v-b730e8e6"]]),Ga={class:"pd-field"},Oa=["value"],Wa={class:"pd-field"},qa={key:0,class:"pd-field"},Ka=["checked"],Ya=e.defineComponent({__name:"TableRowGroup",props:{element:{},selection:{}},setup(o){const r=o,t=e.inject(Te),n=e.computed(()=>r.element.options.tableRows[r.selection.r1]);function l(c){const h=w.setRowType(r.element.options.tableRows,r.selection.r1,c);if(h){alert(h);return}t.recordHistory()}function i(c){c!==void 0&&(n.value.height=c,w.syncTableElementSize(r.element.options),t.recordHistory())}function a(c){n.value.repeatOnPage=c,t.recordHistory()}return(c,h)=>(e.openBlock(),e.createBlock(ke,{title:"行属性",icon:"Grid","default-expanded":"","group-key":"table-row"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:h[2]||(h[2]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",Ga,[h[4]||(h[4]=e.createElementVNode("span",{class:"pd-label"},"行类型",-1)),e.createElementVNode("select",{value:n.value.type,class:"pd-select",style:{width:"100%"},onChange:h[0]||(h[0]=u=>l(u.target.value))},[...h[3]||(h[3]=[e.createElementVNode("option",{value:"header"},"标题行",-1),e.createElementVNode("option",{value:"data"},"数据行",-1),e.createElementVNode("option",{value:"subtotal"},"小计行(每页小计)",-1),e.createElementVNode("option",{value:"summary"},"汇总行",-1)])],40,Oa)]),e.createElementVNode("div",Wa,[h[5]||(h[5]=e.createElementVNode("span",{class:"pd-label"},"行高 (mm)",-1)),e.createVNode(ie,{"model-value":n.value.height,min:3,max:100,step:.5,"onUpdate:modelValue":i},null,8,["model-value"])]),n.value.type==="header"?(e.openBlock(),e.createElementBlock("div",qa,[h[6]||(h[6]=e.createElementVNode("span",{class:"pd-label"},"每页顶部重复",-1)),e.createElementVNode("input",{checked:n.value.repeatOnPage??!1,type:"checkbox",class:"pd-switch",onInput:h[1]||(h[1]=u=>a(!!u.target.checked))},null,40,Ka)])):e.createCommentVNode("",!0)],32)]),_:1}))}}),ja={class:"pd-field"},Xa={class:"pd-radio-group",role:"radiogroup"},Za={class:"pd-radio"},Ja=["checked"],Qa={class:"pd-radio"},_a=["checked"],ei={class:"pd-radio"},ti=["checked"],oi={class:"pd-radio"},ni=["checked"],li={key:0,class:"pd-field"},ai=["value"],ii={key:1,class:"pd-field"},ri=["checked"],si={key:2,class:"pd-field"},di=["value"],ci={key:3,class:"pd-field"},ui=["value"],mi={key:4,class:"pd-field"},pi={key:5,class:"pd-field"},vi={class:"pd-field"},fi=["value"],gi={class:"pd-field"},hi={class:"pd-radio-group",role:"radiogroup"},bi={class:"pd-radio"},yi=["checked"],Ei={class:"pd-radio"},ki=["checked"],Vi={class:"pd-radio"},wi=["checked"],Ni={class:"pd-field"},Ci={class:"pd-radio-group",role:"radiogroup"},Si={class:"pd-radio"},Bi=["checked"],$i={class:"pd-radio"},xi=["checked"],Ti={class:"pd-radio"},Di=["checked"],Mi={class:"cell-style-grid"},zi={class:"pd-field"},Li=["value"],Pi={class:"pd-field"},Ri={class:"pd-field"},Ii=["checked"],Ai={class:"pd-field"},Hi={class:"pd-field"},Fi={class:"border-style-row"},Ui={style:{width:"112px","flex-shrink":"0"}},Gi={class:"pd-button-group border-presets"},Oi={class:"pd-checkbox-group"},Wi={class:"pd-checkbox"},qi={class:"pd-checkbox"},Ki={class:"pd-checkbox"},Yi={class:"pd-checkbox"},ji={class:"pd-field"},Xi={class:"pd-field"},Zi=["checked"],Ji={class:"merge-btns"},Qi=["disabled","title"],_i=["disabled"],er=e.defineComponent({__name:"TableCellGroup",props:{element:{},selection:{},fields:{}},setup(o,{expose:r}){const t=o,n=e.inject(Te),l=e.computed(()=>t.element.options.tableRows),i=e.computed(()=>{const D=w.findMainCell(l.value,t.selection.r1,t.selection.c1);return l.value[D.r].cells[D.c]}),a=e.ref(!1),c=e.ref(""),h=e.computed(()=>i.value.cellType==="barcode"),u=e.computed(()=>i.value.cellType==="qrcode"),f=e.computed(()=>i.value.cellType==="image");function E(D){S(s=>{s.align=D})}function C(D){S(s=>{s.valign=D})}function I(D){S(s=>{s.cellType=D==="text"?void 0:D,D!=="barcode"&&(s.barcodeType=void 0,s.showBarcodeText=void 0),D!=="qrcode"&&(s.qrCodeLevel=void 0)})}function O(){c.value=i.value.formatter||"",a.value=!0}function z(D){S(s=>{s.formatter=D||void 0})}function S(D){const s=t.selection;for(let V=s.r1;V<=s.r2;V++)for(let F=s.c1;F<=s.c2;F++){const Y=l.value[V].cells[F];Y.merged||D(Y)}n.recordHistory()}const U=e.ref("solid"),K=e.ref(.75),Z=e.ref("#333333"),W=e.ref([]);function Q(){return{width:K.value,style:U.value,color:Z.value}}function _(D){w.applyBorderPreset(l.value,t.selection,D,Q()),n.recordHistory()}function N(D){const s=D.target,V=new Set(W.value);s.checked?V.add(s.value):V.delete(s.value),W.value=[...V];const F=Q();S(Y=>{const j={...Y.borders??{}};for(const ee of["top","right","bottom","left"])V.has(ee)?j[ee]={...F}:delete j[ee];Y.borders=j})}const $=e.computed(()=>w.canMergeReason(l.value,t.selection)),M=e.computed(()=>{const D=t.selection;for(let s=D.r1;s<=D.r2;s++)for(let V=D.c1;V<=D.c2;V++){const F=l.value[s].cells[V];if(!F.merged&&((F.rowspan??1)>1||(F.colspan??1)>1))return!0}return!1});function P(){w.mergeCells(l.value,t.selection),n.recordHistory()}function x(){w.splitCells(l.value,t.selection),n.recordHistory()}return r({openFormatterEditor:O}),(D,s)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(ke,{title:"单元格",icon:"Menu","default-expanded":"","group-key":"table-cell"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"pd-form",onSubmit:s[39]||(s[39]=e.withModifiers(()=>{},["prevent"]))},[e.createElementVNode("div",ja,[s[45]||(s[45]=e.createElementVNode("span",{class:"pd-label"},"单元格类型",-1)),e.createElementVNode("div",Xa,[e.createElementVNode("label",Za,[e.createElementVNode("input",{type:"radio",value:"text",checked:(i.value.cellType||"text")==="text",onChange:s[0]||(s[0]=V=>I(V.target.value))},null,40,Ja),s[41]||(s[41]=e.createElementVNode("span",null,"文本",-1))]),e.createElementVNode("label",Qa,[e.createElementVNode("input",{type:"radio",value:"barcode",checked:i.value.cellType==="barcode",onChange:s[1]||(s[1]=V=>I(V.target.value))},null,40,_a),s[42]||(s[42]=e.createElementVNode("span",null,"条形码",-1))]),e.createElementVNode("label",ei,[e.createElementVNode("input",{type:"radio",value:"qrcode",checked:i.value.cellType==="qrcode",onChange:s[2]||(s[2]=V=>I(V.target.value))},null,40,ti),s[43]||(s[43]=e.createElementVNode("span",null,"二维码",-1))]),e.createElementVNode("label",oi,[e.createElementVNode("input",{type:"radio",value:"image",checked:i.value.cellType==="image",onChange:s[3]||(s[3]=V=>I(V.target.value))},null,40,ni),s[44]||(s[44]=e.createElementVNode("span",null,"图片",-1))])])]),h.value?(e.openBlock(),e.createElementBlock("div",li,[s[47]||(s[47]=e.createElementVNode("span",{class:"pd-label"},"码制",-1)),e.createElementVNode("select",{value:i.value.barcodeType||"CODE128",class:"pd-select",onChange:s[4]||(s[4]=V=>S(F=>{F.barcodeType=V.target.value||void 0}))},[...s[46]||(s[46]=[e.createElementVNode("option",{value:"CODE128"},"CODE128(通用)",-1),e.createElementVNode("option",{value:"EAN13"},"EAN13(商品码)",-1),e.createElementVNode("option",{value:"EAN8"},"EAN8",-1),e.createElementVNode("option",{value:"UPC"},"UPC",-1),e.createElementVNode("option",{value:"CODE39"},"CODE39",-1),e.createElementVNode("option",{value:"ITF14"},"ITF14",-1)])],40,ai)])):e.createCommentVNode("",!0),h.value?(e.openBlock(),e.createElementBlock("div",ii,[s[48]||(s[48]=e.createElementVNode("span",{class:"pd-label"},"显示文本",-1)),e.createElementVNode("input",{checked:i.value.showBarcodeText!==!1,type:"checkbox",class:"pd-switch",onInput:s[5]||(s[5]=V=>S(F=>{F.showBarcodeText=!!V.target.checked}))},null,40,ri)])):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock("div",si,[s[50]||(s[50]=e.createElementVNode("span",{class:"pd-label"},"纠错级别",-1)),e.createElementVNode("select",{value:i.value.qrCodeLevel||"M",class:"pd-select",onChange:s[6]||(s[6]=V=>S(F=>{F.qrCodeLevel=V.target.value||void 0}))},[...s[49]||(s[49]=[e.createElementVNode("option",{value:"L"},"L(最低,容量大)",-1),e.createElementVNode("option",{value:"M"},"M(推荐)",-1),e.createElementVNode("option",{value:"Q"},"Q",-1),e.createElementVNode("option",{value:"H"},"H(最高)",-1)])],40,di)])):e.createCommentVNode("",!0),h.value||u.value||f.value?(e.openBlock(),e.createElementBlock("div",ci,[s[52]||(s[52]=e.createElementVNode("span",{class:"pd-label"},"缩放模式",-1)),e.createElementVNode("select",{value:i.value.fit||"contain",class:"pd-select",onChange:s[7]||(s[7]=V=>S(F=>{F.fit=V.target.value}))},[...s[51]||(s[51]=[e.createElementVNode("option",{value:"contain"},"包含(保持比例)",-1),e.createElementVNode("option",{value:"cover"},"覆盖(保持比例)",-1),e.createElementVNode("option",{value:"fill"},"拉伸填满",-1),e.createElementVNode("option",{value:"none"},"原始尺寸",-1),e.createElementVNode("option",{value:"scale-down"},"缩小(保持比例)",-1)])],40,ui)])):e.createCommentVNode("",!0),h.value||u.value||f.value?(e.openBlock(),e.createElementBlock("div",mi,[s[53]||(s[53]=e.createElementVNode("span",{class:"pd-label"},"最大宽度 (mm)",-1)),e.createVNode(ie,{"model-value":i.value.maxWidth,min:1,max:200,placeholder:"默认","onUpdate:modelValue":s[8]||(s[8]=V=>S(F=>{F.maxWidth=V??void 0}))},null,8,["model-value"])])):e.createCommentVNode("",!0),h.value||u.value||f.value?(e.openBlock(),e.createElementBlock("div",pi,[s[54]||(s[54]=e.createElementVNode("span",{class:"pd-label"},"最大高度 (mm)",-1)),e.createVNode(ie,{"model-value":i.value.maxHeight,min:1,max:200,placeholder:"默认","onUpdate:modelValue":s[9]||(s[9]=V=>S(F=>{F.maxHeight=V??void 0}))},null,8,["model-value"])])):e.createCommentVNode("",!0),e.createElementVNode("div",vi,[s[55]||(s[55]=e.createElementVNode("span",{class:"pd-label"},"内容",-1)),e.createElementVNode("input",{value:i.value.formatter||"",class:"pd-input",placeholder:"输入内容,支持 {字段} 表达式",onInput:s[10]||(s[10]=V=>S(F=>{F.formatter=V.target.value||void 0})),onDblclick:O},null,40,fi)]),e.createElementVNode("div",gi,[s[59]||(s[59]=e.createElementVNode("span",{class:"pd-label"},"水平对齐",-1)),e.createElementVNode("div",hi,[e.createElementVNode("label",bi,[e.createElementVNode("input",{type:"radio",value:"left",checked:i.value.align==="left",onChange:s[11]||(s[11]=V=>E(V.target.value))},null,40,yi),s[56]||(s[56]=e.createElementVNode("span",null,"左",-1))]),e.createElementVNode("label",Ei,[e.createElementVNode("input",{type:"radio",value:"center",checked:i.value.align==="center",onChange:s[12]||(s[12]=V=>E(V.target.value))},null,40,ki),s[57]||(s[57]=e.createElementVNode("span",null,"中",-1))]),e.createElementVNode("label",Vi,[e.createElementVNode("input",{type:"radio",value:"right",checked:i.value.align==="right",onChange:s[13]||(s[13]=V=>E(V.target.value))},null,40,wi),s[58]||(s[58]=e.createElementVNode("span",null,"右",-1))])])]),e.createElementVNode("div",Ni,[s[63]||(s[63]=e.createElementVNode("span",{class:"pd-label"},"垂直对齐",-1)),e.createElementVNode("div",Ci,[e.createElementVNode("label",Si,[e.createElementVNode("input",{type:"radio",value:"top",checked:i.value.valign==="top",onChange:s[14]||(s[14]=V=>C(V.target.value))},null,40,Bi),s[60]||(s[60]=e.createElementVNode("span",null,"上",-1))]),e.createElementVNode("label",$i,[e.createElementVNode("input",{type:"radio",value:"middle",checked:i.value.valign==="middle",onChange:s[15]||(s[15]=V=>C(V.target.value))},null,40,xi),s[61]||(s[61]=e.createElementVNode("span",null,"中",-1))]),e.createElementVNode("label",Ti,[e.createElementVNode("input",{type:"radio",value:"bottom",checked:i.value.valign==="bottom",onChange:s[16]||(s[16]=V=>C(V.target.value))},null,40,Di),s[62]||(s[62]=e.createElementVNode("span",null,"下",-1))])])]),e.createElementVNode("div",Mi,[e.createElementVNode("div",zi,[s[65]||(s[65]=e.createElementVNode("span",{class:"pd-label"},"字体",-1)),e.createElementVNode("select",{value:i.value.fontFamily,class:"pd-select",placeholder:"继承默认",onChange:s[17]||(s[17]=V=>S(F=>{F.fontFamily=V.target.value||void 0}))},[...s[64]||(s[64]=[e.createElementVNode("option",{value:"SimSun"},"宋体",-1),e.createElementVNode("option",{value:"SimHei"},"黑体",-1),e.createElementVNode("option",{value:"Microsoft YaHei"},"微软雅黑",-1),e.createElementVNode("option",{value:"KaiTi"},"楷体",-1),e.createElementVNode("option",{value:"FangSong"},"仿宋",-1),e.createElementVNode("option",{value:"Arial"},"Arial",-1)])],40,Li)]),e.createElementVNode("div",Pi,[s[66]||(s[66]=e.createElementVNode("span",{class:"pd-label"},"字号 (pt)",-1)),e.createVNode(ie,{"model-value":i.value.fontSize,min:5,max:72,placeholder:"默认","onUpdate:modelValue":s[18]||(s[18]=V=>S(F=>{F.fontSize=V??void 0}))},null,8,["model-value"])]),e.createElementVNode("div",Ri,[s[67]||(s[67]=e.createElementVNode("span",{class:"pd-label"},"加粗",-1)),e.createElementVNode("input",{checked:i.value.fontWeight==="bold",type:"checkbox",class:"pd-switch",onInput:s[19]||(s[19]=V=>S(F=>{F.fontWeight=V.target.checked?"bold":void 0}))},null,40,Ii)]),e.createElementVNode("div",Ai,[s[68]||(s[68]=e.createElementVNode("span",{class:"pd-label"},"文字颜色",-1)),e.createVNode(Ee,{"model-value":i.value.color,"onUpdate:modelValue":s[20]||(s[20]=V=>S(F=>{F.color=V}))},null,8,["model-value"])]),e.createElementVNode("div",Hi,[s[69]||(s[69]=e.createElementVNode("span",{class:"pd-label"},"背景色",-1)),e.createVNode(Ee,{"model-value":i.value.backgroundColor,"onUpdate:modelValue":s[21]||(s[21]=V=>S(F=>{F.backgroundColor=V}))},null,8,["model-value"])])]),s[77]||(s[77]=e.createElementVNode("h3",{class:"pd-divider"},"边框",-1)),e.createElementVNode("div",Fi,[e.withDirectives(e.createElementVNode("select",{class:"pd-select","onUpdate:modelValue":s[22]||(s[22]=V=>U.value=V),style:{width:"90px"}},[...s[70]||(s[70]=[e.createElementVNode("option",{value:"solid"},"实线",-1),e.createElementVNode("option",{value:"dashed"},"虚线",-1),e.createElementVNode("option",{value:"dotted"},"点线",-1),e.createElementVNode("option",{value:"double"},"双线",-1)])],512),[[e.vModelSelect,U.value]]),e.createElementVNode("div",Ui,[e.createVNode(ie,{modelValue:K.value,"onUpdate:modelValue":s[23]||(s[23]=V=>K.value=V),min:.25,max:5,step:.25},null,8,["modelValue"])]),e.createVNode(Ee,{modelValue:Z.value,"onUpdate:modelValue":s[24]||(s[24]=V=>Z.value=V)},null,8,["modelValue"])]),e.createElementVNode("div",Gi,[e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:s[25]||(s[25]=V=>_("all"))},"全部"),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:s[26]||(s[26]=V=>_("outer"))},"外侧"),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:s[27]||(s[27]=V=>_("inner"))},"内部"),e.createElementVNode("button",{type:"button",class:"pd-button small",onClick:s[28]||(s[28]=V=>_("none"))},"无")]),e.createElementVNode("div",Oi,[e.createElementVNode("label",Wi,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":s[29]||(s[29]=V=>W.value=V),value:"top",onChange:s[30]||(s[30]=V=>N(V))},null,544),[[e.vModelCheckbox,W.value]]),s[71]||(s[71]=e.createElementVNode("span",null,"上",-1))]),e.createElementVNode("label",qi,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":s[31]||(s[31]=V=>W.value=V),value:"right",onChange:s[32]||(s[32]=V=>N(V))},null,544),[[e.vModelCheckbox,W.value]]),s[72]||(s[72]=e.createElementVNode("span",null,"右",-1))]),e.createElementVNode("label",Ki,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":s[33]||(s[33]=V=>W.value=V),value:"bottom",onChange:s[34]||(s[34]=V=>N(V))},null,544),[[e.vModelCheckbox,W.value]]),s[73]||(s[73]=e.createElementVNode("span",null,"下",-1))]),e.createElementVNode("label",Yi,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":s[35]||(s[35]=V=>W.value=V),value:"left",onChange:s[36]||(s[36]=V=>N(V))},null,544),[[e.vModelCheckbox,W.value]]),s[74]||(s[74]=e.createElementVNode("span",null,"左",-1))])]),e.createElementVNode("div",ji,[s[75]||(s[75]=e.createElementVNode("span",{class:"pd-label"},"内边距 (mm)",-1)),e.createVNode(ie,{"model-value":i.value.padding,min:0,max:10,step:.5,placeholder:"默认","onUpdate:modelValue":s[37]||(s[37]=V=>S(F=>{F.padding=V??void 0}))},null,8,["model-value"])]),e.createElementVNode("div",Xi,[s[76]||(s[76]=e.createElementVNode("span",{class:"pd-label"},"自动换行",-1)),e.createElementVNode("input",{checked:i.value.wordWrap??!0,type:"checkbox",class:"pd-switch",onInput:s[38]||(s[38]=V=>S(F=>{F.wordWrap=!!V.target.checked}))},null,40,Zi)]),e.createElementVNode("div",Ji,[e.createElementVNode("button",{type:"button",class:"pd-button small",disabled:!!$.value,title:$.value||"",onClick:P}," 合并单元格 ",8,Qi),e.createElementVNode("button",{type:"button",class:"pd-button small",disabled:!M.value,onClick:x},"拆分单元格",8,_i)])],32)]),_:1}),e.createVNode(Oe,{modelValue:a.value,"onUpdate:modelValue":s[40]||(s[40]=V=>a.value=V),fields:o.fields,expression:c.value,"onUpdate:expression":z},null,8,["modelValue","fields","expression"])],64))}}),tr=J(er,[["__scopeId","data-v-7372566f"]]),or={key:0,class:"prop-collapsed"},nr={class:"prop-head"},lr={class:"pd-tabs prop-tabs"},ar={class:"pd-tab-bar",role:"tablist"},ir={class:"pd-tab-pane",role:"tabpanel"},rr={class:"property-content"},sr={key:1,class:"pd-empty"},dr={class:"pd-tab-pane",role:"tabpanel"},cr={class:"pd-field"},ur=["value"],mr=["value"],pr={key:0,class:"pd-field"},vr={class:"custom-size-grid"},fr={class:"pd-field"},gr={class:"pd-radio-group",role:"radiogroup"},hr={class:"pd-radio"},br=["checked"],yr={class:"pd-radio"},Er=["checked"],kr={class:"pd-field"},Vr={class:"page-bg-row"},wr={class:"margin-grid"},Nr={class:"pd-field"},Cr={class:"pd-field"},Sr={class:"pd-field"},Br={class:"pd-field"},$r={class:"pd-field"},xr={class:"pd-field"},Tr={class:"pd-field"},Dr=e.defineComponent({__name:"PropertyPanel",props:{element:{},templateData:{},fields:{},activeTab:{},tableSelection:{},recordHistory:{type:Function},collapsed:{type:Boolean}},emits:["delete-element","update:templateData","update:activeTab","toggle-collapse"],setup(o,{emit:r}){const t=o,n=r,l=w.PAPER_PRESETS,i=e.ref(""),a=e.computed(()=>t.element?["text","longText"].includes(t.element.printElementType.type):!1),c=e.computed(()=>t.element?t.element.printElementType.type==="image":!1),h=e.computed(()=>!t.element||t.element.printElementType.type!=="table"?!1:!!t.tableSelection&&t.tableSelection.elementId===t.element.id),u=e.computed(()=>t.element?t.element.printElementType.type==="table":!1),f=e.computed(()=>w.searchProperties(i.value)),E=e.computed(()=>f.value.groups),C=e.computed(()=>f.value.itemKeys),I=e.computed(()=>!!i.value.trim()),O=e.computed(()=>{if(!t.element)return[];if(t.element.printElementType.type==="table"&&t.tableSelection){const{r1:v,c1:b}=t.tableSelection,A=t.element.options.tableRows;if(A&&A[v]){const q=A[v],de=t.element.options.fields?.[0]?.dataSource;return w.getTableCellBindings(q.type,v,b,de)}}return w.getElementBindings(t.element)});function z(v){return v.split(".").flatMap(b=>{const A=b.match(/^([^\[]+)((?:\[\d+\])*)$/);if(!A)return[b];const q=A[1],de=[...A[2].matchAll(/\[(\d+)\]/g)].map(re=>Number(re[1]));return[q,...de]})}function S(v){return t.element?z(v).reduce((q,de)=>q==null?"":q[de],t.element)??"":""}function U(v,b){if(!t.element)return;const A=z(v),q=A.pop(),de=A.reduce((re,me)=>((re[me]===void 0||re[me]===null)&&(re[me]={}),re[me]),t.element);de[q]=b||void 0,t.recordHistory?.()}function K(v){i.value=v}function Z(v){t.element&&U("options.src",v)}const W=e.computed(()=>t.templateData?.paperSize||"A4"),Q=e.computed(()=>t.templateData?.orientation||"portrait"),_=e.computed({get:()=>t.templateData?.pageBackground||"#ffffff",set:v=>ue(v)}),N=e.computed(()=>t.templateData?.margins.top??10),$=e.computed(()=>t.templateData?.margins.bottom??10),M=e.computed(()=>t.templateData?.margins.left??10),P=e.computed(()=>t.templateData?.margins.right??10),x=e.computed(()=>t.templateData?.header.height??10),D=e.computed(()=>t.templateData?.footer.height??10),s=e.computed(()=>t.templateData?.firstPageOverlay.height??0),V=e.computed(()=>t.templateData?.customWidth??210),F=e.computed(()=>t.templateData?.customHeight??297);function Y(v){t.templateData&&n("update:templateData",{...t.templateData,...v})}function j(v){if(v==="CUSTOM"){Y({paperSize:"CUSTOM"});return}l[v]&&Y({paperSize:v})}function ee(v){Y({orientation:String(v)})}function ue(v){const b=v&&v.toLowerCase()!=="#ffffff"&&v.toLowerCase()!=="#fff"?v:void 0;Y(b===void 0?{pageBackground:void 0}:{pageBackground:b})}function oe(){Y({pageBackground:void 0})}function se(v){v!==void 0&&Y({customWidth:v})}function ae(v){v!==void 0&&Y({customHeight:v})}function L(v){v!==void 0&&Y({margins:{...t.templateData.margins,top:v}})}function p(v){v!==void 0&&Y({margins:{...t.templateData.margins,bottom:v}})}function k(v){v!==void 0&&Y({margins:{...t.templateData.margins,left:v}})}function B(v){v!==void 0&&Y({margins:{...t.templateData.margins,right:v}})}function T(v){v!==void 0&&Y({header:{...t.templateData.header,height:v}})}function g(v){v!==void 0&&Y({footer:{...t.templateData.footer,height:v}})}function d(v){v!==void 0&&Y({firstPageOverlay:{...t.templateData.firstPageOverlay,height:v}})}const m=e.computed(()=>t.activeTab||"page");function y(v){n("update:activeTab",v),n("toggle-collapse")}return(v,b)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["property-panel",{collapsed:o.collapsed}])},[o.collapsed?(e.openBlock(),e.createElementBlock("div",or,[e.createElementVNode("button",{class:"pc-btn",title:"展开属性台",onClick:b[0]||(b[0]=A=>y(m.value))},"«"),e.createElementVNode("button",{class:e.normalizeClass(["pc-btn",{on:m.value==="element"}]),title:"元素属性",onClick:b[1]||(b[1]=A=>y("element"))},"▦",2),e.createElementVNode("button",{class:e.normalizeClass(["pc-btn",{on:m.value==="page"}]),title:"页面属性",onClick:b[2]||(b[2]=A=>y("page"))},"▤",2)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",nr,[b[12]||(b[12]=e.createElementVNode("span",{class:"prop-title"},"属性台",-1)),e.createElementVNode("button",{class:"collapse-btn",title:"收起属性台",onClick:b[3]||(b[3]=A=>v.$emit("toggle-collapse"))},"»")]),e.createElementVNode("div",lr,[e.createElementVNode("div",ar,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:(o.activeTab||"page")==="element"}]),onClick:b[4]||(b[4]=A=>v.$emit("update:activeTab","element"))},"元素属性",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["pd-tab",{active:(o.activeTab||"page")==="page"}]),onClick:b[5]||(b[5]=A=>v.$emit("update:activeTab","page"))},"页面属性",2)]),e.withDirectives(e.createElementVNode("div",ir,[o.element?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(Pn,{onSearch:K}),e.createElementVNode("div",rr,[E.value.includes("position-size")&&!h.value?(e.openBlock(),e.createBlock(Qn,{key:0,element:o.element,"matched-keys":C.value,searching:I.value},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0),E.value.includes("appearance")?(e.openBlock(),e.createBlock(wl,{key:1,element:o.element,"is-text-type":a.value,"matched-keys":C.value,searching:I.value},null,8,["element","is-text-type","matched-keys","searching"])):e.createCommentVNode("",!0),E.value.includes("binding")?(e.openBlock(),e.createBlock(ke,{key:2,title:"内容",icon:"Document","default-expanded":"","group-key":"binding"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,A=>(e.openBlock(),e.createBlock(sa,{key:A.targetPath,descriptor:A,fields:o.fields,"model-value":S(A.targetPath),"onUpdate:modelValue":q=>U(A.targetPath,q)},null,8,["descriptor","fields","model-value","onUpdate:modelValue"]))),128)),c.value?(e.openBlock(),e.createBlock(Ua,{key:0,onSuccess:Z})):e.createCommentVNode("",!0)]),_:1})):e.createCommentVNode("",!0),u.value&&o.tableSelection&&o.tableSelection.elementId===o.element.id?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createVNode(Ya,{element:o.element,selection:o.tableSelection},null,8,["element","selection"]),e.createVNode(tr,{element:o.element,selection:o.tableSelection,fields:o.fields},null,8,["element","selection","fields"])],64)):e.createCommentVNode("",!0),u.value&&E.value.includes("content")?(e.openBlock(),e.createBlock(ba,{key:4,element:o.element,fields:o.fields},null,8,["element","fields"])):e.createCommentVNode("",!0),E.value.includes("border-bg")?(e.openBlock(),e.createBlock(Na,{key:5,element:o.element,"matched-keys":C.value,searching:I.value},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0),E.value.includes("pagination")&&u.value?(e.openBlock(),e.createBlock(Xe,{key:6,element:o.element,"matched-keys":C.value,searching:I.value},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0),E.value.includes("pagination")&&!u.value?(e.openBlock(),e.createBlock(Xe,{key:7,element:o.element,"matched-keys":C.value,searching:I.value},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0),E.value.includes("advanced")?(e.openBlock(),e.createBlock(Da,{key:8,element:o.element,"matched-keys":C.value,searching:I.value,onDeleteElement:b[6]||(b[6]=A=>v.$emit("delete-element"))},null,8,["element","matched-keys","searching"])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock("p",sr,"请在画布中选择一个元素"))],512),[[e.vShow,(o.activeTab||"page")==="element"]]),e.withDirectives(e.createElementVNode("div",dr,[e.createElementVNode("form",{class:"pd-form",onSubmit:b[11]||(b[11]=e.withModifiers(()=>{},["prevent"]))},[b[28]||(b[28]=e.createElementVNode("h3",{class:"pd-divider"},"纸张设置",-1)),e.createElementVNode("div",cr,[b[14]||(b[14]=e.createElementVNode("span",{class:"pd-label"},"纸张尺寸",-1)),e.createElementVNode("select",{value:W.value,class:"pd-select",onChange:b[7]||(b[7]=A=>j(A.target.value)),style:{width:"100%"}},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l),(A,q)=>(e.openBlock(),e.createElementBlock("option",{key:q,value:q},e.toDisplayString(q),9,mr))),128)),b[13]||(b[13]=e.createElementVNode("option",{value:"CUSTOM"},"自定义",-1))],40,ur)]),W.value==="CUSTOM"?(e.openBlock(),e.createElementBlock("div",pr,[b[16]||(b[16]=e.createElementVNode("span",{class:"pd-label"},"自定义宽高 (mm)",-1)),e.createElementVNode("div",vr,[e.createVNode(ie,{"model-value":V.value,min:25,max:2e3,"onUpdate:modelValue":se},null,8,["model-value"]),b[15]||(b[15]=e.createElementVNode("span",{class:"custom-size-x"},"×",-1)),e.createVNode(ie,{"model-value":F.value,min:25,max:2e3,"onUpdate:modelValue":ae},null,8,["model-value"])])])):e.createCommentVNode("",!0),e.createElementVNode("div",fr,[b[19]||(b[19]=e.createElementVNode("span",{class:"pd-label"},"方向",-1)),e.createElementVNode("div",gr,[e.createElementVNode("label",hr,[e.createElementVNode("input",{type:"radio",value:"portrait",checked:Q.value==="portrait",onChange:b[8]||(b[8]=A=>ee(A.target.value))},null,40,br),b[17]||(b[17]=e.createElementVNode("span",null,"纵向",-1))]),e.createElementVNode("label",yr,[e.createElementVNode("input",{type:"radio",value:"landscape",checked:Q.value==="landscape",onChange:b[9]||(b[9]=A=>ee(A.target.value))},null,40,Er),b[18]||(b[18]=e.createElementVNode("span",null,"横向",-1))])])]),e.createElementVNode("div",kr,[b[20]||(b[20]=e.createElementVNode("span",{class:"pd-label"},"页面背景色",-1)),e.createElementVNode("div",Vr,[e.createVNode(Ee,{modelValue:_.value,"onUpdate:modelValue":b[10]||(b[10]=A=>_.value=A),class:"page-bg-picker"},null,8,["modelValue"]),e.createElementVNode("button",{type:"button",class:"pd-reset",title:"恢复为默认白色",onClick:oe},"默认")])]),b[29]||(b[29]=e.createElementVNode("h3",{class:"pd-divider"},"页边距 (mm)",-1)),e.createElementVNode("div",wr,[e.createElementVNode("div",Nr,[b[21]||(b[21]=e.createElementVNode("span",{class:"pd-label"},"上",-1)),e.createVNode(ie,{"model-value":N.value,min:0,max:50,"onUpdate:modelValue":L},null,8,["model-value"])]),e.createElementVNode("div",Cr,[b[22]||(b[22]=e.createElementVNode("span",{class:"pd-label"},"下",-1)),e.createVNode(ie,{"model-value":$.value,min:0,max:50,"onUpdate:modelValue":p},null,8,["model-value"])]),e.createElementVNode("div",Sr,[b[23]||(b[23]=e.createElementVNode("span",{class:"pd-label"},"左",-1)),e.createVNode(ie,{"model-value":M.value,min:0,max:50,"onUpdate:modelValue":k},null,8,["model-value"])]),e.createElementVNode("div",Br,[b[24]||(b[24]=e.createElementVNode("span",{class:"pd-label"},"右",-1)),e.createVNode(ie,{"model-value":P.value,min:0,max:50,"onUpdate:modelValue":B},null,8,["model-value"])])]),b[30]||(b[30]=e.createElementVNode("h3",{class:"pd-divider"},"三区高度 (mm)",-1)),e.createElementVNode("div",$r,[b[25]||(b[25]=e.createElementVNode("span",{class:"pd-label"},"页眉高度",-1)),e.createVNode(ie,{"model-value":x.value,min:0,max:100,step:.1,"onUpdate:modelValue":T},null,8,["model-value"])]),e.createElementVNode("div",xr,[b[26]||(b[26]=e.createElementVNode("span",{class:"pd-label"},"页脚高度",-1)),e.createVNode(ie,{"model-value":D.value,min:0,max:100,step:.1,"onUpdate:modelValue":g},null,8,["model-value"])]),e.createElementVNode("div",Tr,[b[27]||(b[27]=e.createElementVNode("span",{class:"pd-label"},"首页叠加高度",-1)),e.createVNode(ie,{"model-value":s.value,min:0,max:200,"onUpdate:modelValue":d},null,8,["model-value"])])],32)],512),[[e.vShow,(o.activeTab||"page")==="page"]])])],64))],2))}}),Mr=J(Dr,[["__scopeId","data-v-d8fa9541"]]),zr={class:"status-bar"},Lr={key:0,class:"status-item coord"},Pr={class:"status-item"},Rr={class:"status-item"},Ir={class:"status-item status-paper"},Ar=e.defineComponent({__name:"StatusBar",props:{coordinate:{},scale:{},elementCount:{},selectedCount:{},paper:{},dirty:{type:Boolean}},setup(o){return(r,t)=>(e.openBlock(),e.createElementBlock("div",zr,[o.coordinate?(e.openBlock(),e.createElementBlock("span",Lr," x:"+e.toDisplayString(o.coordinate.x.toFixed(1))+" y:"+e.toDisplayString(o.coordinate.y.toFixed(1))+"mm ",1)):e.createCommentVNode("",!0),e.createElementVNode("span",Pr,"缩放 "+e.toDisplayString(o.scale)+"%",1),e.createElementVNode("span",Rr,"元素 "+e.toDisplayString(o.elementCount)+e.toDisplayString(o.selectedCount?` (选中 ${o.selectedCount})`:""),1),e.createElementVNode("span",{class:e.normalizeClass(["status-dirty",{on:o.dirty}])},[t[0]||(t[0]=e.createElementVNode("span",{class:"dirty-dot"},null,-1)),e.createTextVNode(e.toDisplayString(o.dirty?"未保存":"已保存"),1)],2),e.createElementVNode("span",Ir,e.toDisplayString(o.paper),1)]))}}),Hr=J(Ar,[["__scopeId","data-v-eb34e9a7"]]),Fr={id:"getting-started",title:"快速入门",content:`
4
4
  <h2>界面布局</h2>
5
5
  <p>打印模板设计器采用三栏布局:</p>
6
6
  <ul>
@@ -37,7 +37,7 @@
37
37
  <p><strong>项目名称:</strong>worm-vue3-print</p>
38
38
  <p><strong>仓库地址:</strong><a href="https://gitee.com/liulong_oschina/worm-vue3-print" target="_blank" rel="noopener noreferrer">https://gitee.com/liulong_oschina/worm-vue3-print</a></p>
39
39
  <p>基于 Vue 3 的可视化打印模板设计器,支持拖拽式模板编辑、表达式数据绑定和浏览器端打印预览。</p>
40
- `},Ed={id:"features",title:"功能说明",content:`
40
+ `},Ur={id:"features",title:"功能说明",content:`
41
41
  <h2>元素类型</h2>
42
42
  <table>
43
43
  <thead>
@@ -165,7 +165,7 @@
165
165
  <li>可设置旋转角度和透明度</li>
166
166
  <li>支持显示打印时间戳</li>
167
167
  </ul>
168
- `},wd={id:"shortcuts",title:"快捷键",content:`
168
+ `},Gr={id:"shortcuts",title:"快捷键",content:`
169
169
  <h2>常用操作</h2>
170
170
  <table>
171
171
  <thead>
@@ -233,7 +233,7 @@
233
233
  <blockquote>
234
234
  <p><strong>注意</strong>:当焦点在输入框、文本框、下拉框内时,快捷键不生效。</p>
235
235
  </blockquote>
236
- `},Vd={id:"faq",title:"常见问题",content:`
236
+ `},Or={id:"faq",title:"常见问题",content:`
237
237
  <h2>如何调整纸张大小?</h2>
238
238
  <ol>
239
239
  <li>在右侧面板选择"页面设置"</li>
@@ -335,7 +335,21 @@
335
335
  <blockquote>
336
336
  <p><strong>注意</strong>:如果存在选中的单元格,右侧面板将显示单元格属性而非表格属性。</p>
337
337
  </blockquote>
338
- `},Nd={id:"changelog",title:"更新记录",content:`
338
+ `},Wr={id:"changelog",title:"更新记录",content:`
339
+ <h2>v1.2.2 <small>2026-09-11</small></h2>
340
+
341
+ <h3>变更</h3>
342
+ <ul>
343
+ <li><code>@worm-vue3-print/core</code> 新增子路径 <code>/designer</code>:框架无关的设计器内核,包含完整模板模型类型、通用工具(元素工厂、表格矩阵、单位换算、模板迁移、标尺等)与纯交互逻辑(对齐、分组、键盘、缩放、吸附计算),不依赖 Vue/React。</li>
344
+ <li><code>@worm-vue3-print/core</code> 新增子路径 <code>/browser</code>:浏览器侧渲染适配器(<code>renderHtmlPages</code> 两遍分页渲染、条形码/二维码渲染器)。</li>
345
+ <li>设计器模型、工具与纯逻辑下沉至 core 子路径,canvas 仅保留 Vue 适配层;公共 API 保持不变,core 主入口仍为零运行时依赖,为后续多框架适配打下基础。</li>
346
+ </ul>
347
+
348
+ <h3>修复</h3>
349
+ <ul>
350
+ <li>修复工具栏放大/缩小按钮直接线性改缩放比例、未做滚动锚点校正导致画面漂移的问题;按钮缩放改为与 Ctrl+滚轮一致的乘性步进,并以视口中心为锚点(与「适应窗口」同一缩放管线)。</li>
351
+ </ul>
352
+
339
353
  <h2>v1.2.1 <small>2026-09-11</small></h2>
340
354
 
341
355
  <h3>变更</h3>
@@ -424,5 +438,5 @@
424
438
  <blockquote>
425
439
  <p>完整更新记录请查阅仓库 <code>docs/中文/CHANGELOG.md</code> 与 <code>docs/en/CHANGELOG.en.md</code>。</p>
426
440
  </blockquote>
427
- `},Cd=[kd,Ed,wd,Vd,Nd],Sd={class:"help-modal"},Md={class:"help-modal-header"},$d={class:"help-modal-body"},xd={class:"help-modal-sidebar"},Bd=["onClick"],Dd={class:"help-modal-content"},Td=["innerHTML"],et="worm-print-help-tab",zd=e.defineComponent({__name:"HelpModal",props:{visible:{type:Boolean},initialTab:{default:"getting-started"}},emits:["close","update:tab"],setup(t,{emit:a}){const o=t,n=a,l=Cd,r=e.ref(o.initialTab);e.onMounted(()=>{const d=localStorage.getItem(et);d&&l.some(p=>p.id===d)&&(r.value=d)}),e.watch(()=>o.visible,d=>{if(d){const p=localStorage.getItem(et);p&&l.some(v=>v.id===p)&&(r.value=p)}});function i(d){r.value=d,localStorage.setItem(et,d),n("update:tab",d)}const s=e.computed(()=>l.find(p=>p.id===r.value)?.content||"");function c(d){d.key==="Escape"&&o.visible&&n("close")}return e.onMounted(()=>{document.addEventListener("keydown",c)}),e.onUnmounted(()=>{document.removeEventListener("keydown",c)}),(d,p)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"help-modal"},{default:e.withCtx(()=>[t.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"help-modal-overlay",onClick:p[1]||(p[1]=e.withModifiers(v=>d.$emit("close"),["self"]))},[e.createElementVNode("div",Sd,[e.createElementVNode("div",Md,[p[2]||(p[2]=e.createElementVNode("div",{class:"help-modal-title-wrap"},[e.createElementVNode("h2",{class:"help-modal-title"},"帮助文档"),e.createElementVNode("span",{class:"help-modal-project"},"worm-vue3-print")],-1)),e.createElementVNode("button",{class:"help-modal-close",title:"关闭",onClick:p[0]||(p[0]=v=>d.$emit("close"))}," × ")]),e.createElementVNode("div",$d,[e.createElementVNode("div",xd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l),v=>(e.openBlock(),e.createElementBlock("button",{key:v.id,class:e.normalizeClass(["help-tab",{active:r.value===v.id}]),onClick:w=>i(v.id)},e.toDisplayString(v.title),11,Bd))),128))]),e.createElementVNode("div",Dd,[e.createElementVNode("div",{class:"help-content",innerHTML:s.value},null,8,Td)])])])])):e.createCommentVNode("",!0)]),_:1})]))}}),Ld=_(zd,[["__scopeId","data-v-31115934"]]),Ct="print-studio:left",St="print-studio:right";function Mt(t,a){try{const o=localStorage.getItem(t);return o===null?a:o==="1"}catch{return a}}function Pd(){const t=e.ref(Mt(Ct,!1)),a=e.ref(Mt(St,!1)),o=e.ref(!1);e.watch(t,i=>{try{localStorage.setItem(Ct,i?"1":"0")}catch{}},{flush:"sync"}),e.watch(a,i=>{try{localStorage.setItem(St,i?"1":"0")}catch{}},{flush:"sync"});function n(){t.value=!t.value}function l(){a.value=!a.value}function r(){o.value=!1}return{leftCollapsed:t,rightCollapsed:a,toggleLeft:n,toggleRight:l,dirty:o,markSaved:r}}const Ad={class:"designer-container"},Id={class:"designer-body"},Rd=e.defineComponent({__name:"PrintDesigner",props:{initialTemplate:{},initialElements:{},fields:{},isEdit:{type:Boolean},requestScreenshot:{type:Function},uploadImage:{type:Function},loadDefaultTemplate:{type:Function},showHelp:{type:Boolean}},emits:["preview","save"],setup(t,{expose:a,emit:o}){const n=t,l=o,r=e.ref(!1);e.watch(()=>n.showHelp,I=>{I===!1&&(r.value=!1)});const{leftCollapsed:i,rightCollapsed:s,toggleLeft:c,toggleRight:d,dirty:p,markSaved:v}=Pd(),{scale:w,showRuler:L,showGrid:H,snapToGrid:D,showTableGhostBorder:$,templateData:R,elements:W,fields:J,selectedIds:A,selectedElement:G,select:K,clearSelection:S,selectAll:M,previewIds:x,setPreview:B,commitPreview:T,hasClipboard:z,copy:u,paste:V,cutSelected:O,canUndo:X,canRedo:Z,undo:j,redo:ce,alignSelected:ie,groupSelected:se,ungroupSelected:le,deleteSelected:P,dragStart:g,dragStop:E,addElement:f,addFieldElement:m,moveLayer:k,updateTemplateData:h,getTemplateJson:C,loadTemplate:N,tableSelection:y,setTableSelection:b,recordHistory:F}=Uo({initialTemplate:n.initialTemplate,initialElements:n.initialElements,initialFields:n.fields});e.watch([W,R],()=>{p.value=!0},{deep:!0});const{guides:Y,addGuide:ae,moveGuide:re,removeGuide:ve}=Go(R,F),xe=e.computed(()=>{const I=R.value,{width:U}=Ee(I);return U-I.margins.left-I.margins.right});e.provide(Pe,{tableSelection:y,setTableSelection:b,recordHistory:F,maxTableWidth:xe}),e.provide(It,A),e.provide(Rt,x),e.provide(pt,e.computed(()=>n.uploadImage)),e.watch(G,I=>{(!I||I.printElementType.type!=="table")&&b(null)});const be=e.ref(null),ye=e.ref(!1),Ne=e.ref(""),Ke=e.ref(.5);async function Xe(){if(ye.value){ye.value=!1;return}const I=C();if(!I){alert("模板数据为空");return}if(!n.requestScreenshot){alert("截图服务未配置");return}try{const U=await n.requestScreenshot({templateJson:I,printData:ge});Ne.value&&URL.revokeObjectURL(Ne.value),Ne.value=URL.createObjectURL(U),ye.value=!0}catch{alert("截图生成失败")}}const Ae=e.ref(null);function je(I){Ae.value=I}const Je=e.computed(()=>{const I=R.value,U=Ee(I),te=I.orientation==="landscape"?"横向":"纵向";return`${I.paperSize} ${te} ${Math.round(U.width)}×${Math.round(U.height)}mm`});function q(){const I=be.value?.$el;if(I){const U=getComputedStyle(I),te=parseFloat(U.paddingLeft)+parseFloat(U.paddingRight),me=parseFloat(U.paddingTop)+parseFloat(U.paddingBottom),Te=Ee(R.value),ze=96/25.4,Le=Lt(I.clientWidth-te,I.clientHeight-me,Te.width*ze,Te.height*ze);be.value?.fitToWindow(Le)}}function ee(I){w.value=Math.max(mt,w.value+I)}function Q(I){const U=I.target.tagName;U==="INPUT"||U==="TEXTAREA"||U==="SELECT"||(I.ctrlKey||I.metaKey)&&I.key==="0"&&(I.preventDefault(),q())}e.onMounted(()=>document.addEventListener("keydown",Q)),e.onUnmounted(()=>document.removeEventListener("keydown",Q));function oe(I){const U=R.value.header.height,te=R.value.footer.height;h(I),I.header.height<U&&pe("header"),I.footer.height<te&&pe("footer")}function ke(I,U){R.value={...R.value,[I]:{...R.value[I],height:U}}}function de(I){h({...R.value}),pe(I)}function pe(I){const U=Ye(R.value)[I];W.value.some(me=>me.zone===I&&(me.options.top+me.options.height>U.height||me.options.left+me.options.width>U.width))&&alert(`${I==="header"?"页眉":"页脚"}高度已小于区域内元素,请手动调整元素位置`)}function Se(){const I=R.value.firstPageOverlay,U={options:{left:0,top:0,width:50,height:10,title:"首页叠加"},printElementType:{type:"text",title:"首页叠加"}};R.value={...R.value,firstPageOverlay:{...I,elements:[...I.elements,U]}}}const vt=K;function Yt(I){const U=W.value.find(te=>te.id===I);U&&(U.options.visible=U.options.visible===!1)}function Kt(I){const U=W.value.find(te=>te.id===I);U&&(U.options.locked=!U.options.locked)}const Be=e.ref("page");e.watch(G,I=>{Be.value=I?"element":"page"});const Xt={text:"formatter",longText:"formatter",barcode:"formatter",qrcode:"formatter",image:"src"},De=e.ref(!1),Ie=e.ref(null),Ze=e.ref("");function jt(I){const U=W.value.find(me=>me.id===I);if(!U||(K(I,!1),Be.value="element",U.options.locked))return;const te=Xt[U.printElementType.type];te&&(Ie.value={kind:"element",element:U,field:te},Ze.value=U.options[te]||"",De.value=!0)}function Jt(I,U,te){const me=W.value.find(to=>to.id===I);if(!me||(K(I,!1),Be.value="element",me.options.locked))return;const Te=me.options.tableRows??[],ze=ct(Te,U,te),Le=Te[ze.r]?.cells[ze.c];Le&&(Ie.value={kind:"cell",cell:Le},Ze.value=Le.formatter||"",De.value=!0)}function Zt(I){const U=Ie.value;U?.kind==="element"?U.element.options[U.field]=I||void 0:U?.kind==="cell"&&(U.cell.formatter=I||void 0),F(),De.value=!1,Ie.value=null}function Qt(I,U){W.value.push(I),K(I.id,!1),F()}e.watch(()=>n.initialTemplate,I=>{I&&N(I,n.initialElements)}),e.watch(()=>n.initialElements,I=>{I&&!n.initialTemplate&&(R.value={...R.value,elements:I.map(U=>({...U,options:{...U.options},printElementType:{...U.printElementType}}))})}),e.watch(()=>n.fields,I=>{J.value=I||[]}),a({getTemplateJson:C});async function _t(){if(n.loadDefaultTemplate&&confirm("将覆盖当前画布内容,是否继续?"))try{const I=await n.loadDefaultTemplate();if(!I){alert("未获取到默认布局");return}N(I),alert("默认布局已加载")}catch{alert("加载默认布局失败")}}function eo(){l("save",JSON.stringify(C())),v()}return(I,U)=>(e.openBlock(),e.createElementBlock("div",Ad,[e.createVNode(cn,{"is-edit":t.isEdit,"can-undo":e.unref(X),"can-redo":e.unref(Z),"has-multi-selection":e.unref(A).size>=2,"has-selection":e.unref(A).size>=1,"show-ruler":e.unref(L),"show-grid":e.unref(H),"snap-to-grid":e.unref(D),"show-table-ghost-border":e.unref($),"selected-element-has-group":!!e.unref(G)?.options.groupId,"overlay-visible":ye.value,"show-load-default":!!t.loadDefaultTemplate,"show-help":t.showHelp!==!1,scale:e.unref(w),"onUpdate:scale":U[0]||(U[0]=te=>e.isRef(w)?w.value=te:null),onPreview:U[1]||(U[1]=te=>I.$emit("preview")),onSave:eo,onLoadDefault:_t,onUndo:e.unref(j),onRedo:e.unref(ce),onAlign:U[2]||(U[2]=te=>e.unref(ie)(te)),onMoveLayer:e.unref(k),onToggleRuler:U[3]||(U[3]=te=>L.value=!e.unref(L)),onToggleGrid:U[4]||(U[4]=te=>H.value=!e.unref(H)),onToggleSnap:U[5]||(U[5]=te=>D.value=!e.unref(D)),onToggleTableGhostBorder:U[6]||(U[6]=te=>$.value=!e.unref($)),onToggleOverlay:Xe,onGroup:e.unref(se),onUngroup:e.unref(le),onAddOverlayElement:Se,onFitWindow:q,onZoom:ee,onHelp:U[7]||(U[7]=te=>r.value=!0)},null,8,["is-edit","can-undo","can-redo","has-multi-selection","has-selection","show-ruler","show-grid","snap-to-grid","show-table-ghost-border","selected-element-has-group","overlay-visible","show-load-default","show-help","scale","onUndo","onRedo","onMoveLayer","onGroup","onUngroup"]),e.createElementVNode("div",Id,[e.createVNode(Gn,{fields:e.unref(J),elements:e.unref(W),"selected-ids":e.unref(A),collapsed:e.unref(i),onSelect:e.unref(vt),onMoveLayer:e.unref(k),onToggleVisible:Yt,onToggleLocked:Kt,onToggleCollapse:e.unref(c)},null,8,["fields","elements","selected-ids","collapsed","onSelect","onMoveLayer","onToggleCollapse"]),e.createVNode(ia,{ref_key:"canvasAreaRef",ref:be,"template-data":e.unref(R),elements:e.unref(W),scale:e.unref(w)/100,"show-ruler":e.unref(L),"show-grid":e.unref(H),"snap-to-grid":e.unref(D),"show-table-ghost-border":e.unref($),"has-clipboard":e.unref(z),guides:e.unref(Y),"overlay-visible":ye.value,"screenshot-url":Ne.value,"overlay-opacity":Ke.value,"selected-element-has-group":!!e.unref(G)?.options.groupId,onSelect:e.unref(vt),onDropElement:e.unref(f),onDropField:e.unref(m),onDragStart:e.unref(g),onDragStop:e.unref(E),onDblclickElement:jt,onDblclickCell:Jt,onZoneHeightChange:ke,onZoneHeightCommit:de,onSelectAll:e.unref(M),onClearSelection:e.unref(S),onPreview:e.unref(B),onCommitPreview:e.unref(T),onPaste:e.unref(V),onCopy:e.unref(u),onCut:e.unref(O),onDelete:e.unref(P),onMoveLayer:e.unref(k),onCoordinate:je,onGroup:e.unref(se),onUngroup:e.unref(le),onAddGuide:e.unref(ae),onGuideMove:e.unref(re),onGuideRemove:e.unref(ve),onZoom:ee,onCloneElement:Qt},null,8,["template-data","elements","scale","show-ruler","show-grid","snap-to-grid","show-table-ghost-border","has-clipboard","guides","overlay-visible","screenshot-url","overlay-opacity","selected-element-has-group","onSelect","onDropElement","onDropField","onDragStart","onDragStop","onSelectAll","onClearSelection","onPreview","onCommitPreview","onPaste","onCopy","onCut","onDelete","onMoveLayer","onGroup","onUngroup","onAddGuide","onGuideMove","onGuideRemove"]),e.createVNode(md,{element:e.unref(G),"template-data":e.unref(R),fields:e.unref(J),"table-selection":e.unref(y),"record-history":e.unref(F),collapsed:e.unref(s),"active-tab":Be.value,"onUpdate:activeTab":U[8]||(U[8]=te=>Be.value=te),onDeleteElement:e.unref(P),"onUpdate:templateData":oe,onToggleCollapse:e.unref(d)},null,8,["element","template-data","fields","table-selection","record-history","collapsed","active-tab","onDeleteElement","onToggleCollapse"])]),e.createVNode(yd,{coordinate:Ae.value,scale:e.unref(w),"element-count":e.unref(W).length,"selected-count":e.unref(A).size,paper:Je.value,dirty:e.unref(p)},null,8,["coordinate","scale","element-count","selected-count","paper","dirty"]),e.createVNode(ft,{modelValue:De.value,"onUpdate:modelValue":U[9]||(U[9]=te=>De.value=te),fields:e.unref(J),expression:Ze.value,"onUpdate:expression":Zt},null,8,["modelValue","fields","expression"]),e.createVNode(Ld,{visible:r.value,onClose:U[10]||(U[10]=te=>r.value=!1)},null,8,["visible"])]))}}),Hd=_(Rd,[["__scopeId","data-v-8060946b"]]),tt=3.7795275591,Ge=3e3;async function Gt(t,a,o,n){const l=ue.bindData(t,a,o),r=await Fd(l,n),i=ue.paginate(l,r);return{html:ue.generateHtml(l,i,a,{codeRenderer:n}),pageCount:i.length,pageLayouts:i}}async function Fd(t,a){const o=ue.getPaperDimensions(t),n=ue.generateHtml(t,[],void 0,{isMeasurementPass:!0,codeRenderer:a}),l=document.createElement("iframe");l.setAttribute("aria-hidden","true"),l.style.cssText=`position:fixed;left:-10000px;top:0;width:${o.width}mm;height:${o.height}mm;border:0;visibility:hidden;pointer-events:none;`,document.body.appendChild(l);try{const r=l.contentWindow,i=l.contentDocument;if(!r||!i)throw new Error("无法创建测量 iframe");i.open(),i.write(n),i.close(),await Ud(r);const s=Gd(i),c=new Map,d=new Map(t.elements.map(p=>[p.id,p]));for(const p of s){const w=d.get(p.id)?.options?._repeatHeaderCount??0;c.set(p.id,{id:p.id,measuredHeight:p.height,measuredRowHeights:p.rowHeights,repeatHeaderHeight:p.rowHeights&&w>0?p.rowHeights.slice(0,w).reduce((L,H)=>L+H,0):0})}return c}finally{l.remove()}}function Ud(t){return new Promise(a=>{let o=!1;const n=()=>{o||(o=!0,a())},l=setTimeout(n,Ge),r=async()=>{try{const i=t.document.fonts;i?.ready&&await Promise.race([i.ready,$t(Ge)]),await Promise.race([Od(t.document),$t(Ge)])}catch{}finally{clearTimeout(l),n()}};t.document.readyState==="complete"?r():(t.addEventListener("load",()=>{r()},{once:!0}),setTimeout(n,Ge))})}function $t(t){return new Promise((a,o)=>setTimeout(()=>o(new Error("timeout")),t))}function Od(t){const a=Array.from(t.images??[]);return Promise.all(a.map(o=>o.complete?Promise.resolve():new Promise(n=>{o.addEventListener("load",()=>n(),{once:!0}),o.addEventListener("error",()=>n(),{once:!0})}))).then(()=>{})}function Gd(t){const a=[],o=t.querySelectorAll("[data-measure-id]");for(const n of o){const l=n,r=l.getAttribute("data-measure-id");if(!r)continue;const i=l.offsetHeight,s=l.querySelector("table.print-table");if(s){const c=[],d=s.querySelectorAll("tbody > tr[data-row-index]");for(const p of d)c.push(p.offsetHeight/tt);a.push({id:r,height:i/tt,rowHeights:c})}else a.push({id:r,height:i/tt})}return a}const qt="http://www.w3.org/2000/svg";function qd(t,a){const o=document.createElementNS(qt,"svg");return it(o,t,{format:a.barcodeType||"CODE128",width:Math.max(1,(a.barWidth??2)/2),height:30,displayValue:a.showText!==!1,fontSize:a.fontSize??10,margin:0,marginBottom:2}),o.outerHTML}function Wd(t,a){const o=(a.qrCodeLevel??"M").toUpperCase(),l=rt.create(t,{errorCorrectionLevel:["L","M","Q","H"].includes(o)?o:"M"}).modules,r=l.size,i=4,s=4*i,c=r*i+s*2;let d="";for(let p=0;p<r;p++)for(let v=0;v<r;v++)l.get(v,p)&&(d+=`<rect x="${s+v*i}" y="${s+p*i}" width="${i}" height="${i}" fill="#000"/>`);return`<svg xmlns="${qt}" viewBox="0 0 ${c} ${c}" width="${c}" height="${c}" shape-rendering="crispEdges">${d}</svg>`}const Wt={render(t,a,o={}){if(!t)throw new Error("empty barcode value");return a==="qrcode"?Wd(t,o):qd(t,o)}},Yd={class:"print-html-preview"},Kd={key:0,class:"print-html-preview-error"},Xd={key:1,class:"print-html-preview-loading"},jd=e.defineComponent({__name:"PrintHtmlPreview",props:{templateJson:{},printData:{},baseUrl:{}},emits:["rendered","error"],setup(t,{expose:a,emit:o}){const n=t,l=o,r=e.ref(),i=e.ref(!1),s=e.ref("");let c=0;async function d(){if(!n.templateJson){s.value="",i.value=!1;return}const v=++c;i.value=!0,s.value="";try{const{html:w,pageCount:L}=await Gt(n.templateJson,n.printData,n.baseUrl,Wt);if(v!==c)return;const H=r.value?.contentWindow?.document;H&&(H.open(),H.write(w),H.close()),l("rendered",L)}catch(w){if(v!==c)return;s.value=w instanceof Error?w.message:"未知错误",l("error",s.value)}finally{v===c&&(i.value=!1)}}function p(){const v=r.value?.contentWindow;v&&(v.focus(),v.print())}return e.watch(()=>[n.templateJson,n.printData,n.baseUrl],()=>{d()},{immediate:!0,deep:!0}),e.onBeforeUnmount(()=>{c++}),a({print:p,rerender:d}),(v,w)=>(e.openBlock(),e.createElementBlock("div",Yd,[s.value?(e.openBlock(),e.createElementBlock("div",Kd,[e.createElementVNode("span",null,"预览渲染失败:"+e.toDisplayString(s.value),1)])):i.value?(e.openBlock(),e.createElementBlock("div",Xd,"预览渲染中…")):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("iframe",{ref_key:"iframeRef",ref:r,class:"print-html-preview-iframe",title:"打印预览"},null,512),[[e.vShow,!i.value&&!s.value]])]))}}),Jd=_(jd,[["__scopeId","data-v-1841dcea"]]);exports.DEFAULT_DEMO_DATA=ge;exports.PrintDesigner=Hd;exports.PrintHtmlPreview=Jd;exports.UPLOAD_IMAGE_KEY=pt;exports.browserCodeRenderer=Wt;exports.createDefaultTemplate=Ht;exports.getDemoData=go;exports.renderHtmlPages=Gt;exports.toRuntimePool=at;
441
+ `},qr=[Fr,Ur,Gr,Or,Wr],Kr={class:"help-modal"},Yr={class:"help-modal-header"},jr={class:"help-modal-body"},Xr={class:"help-modal-sidebar"},Zr=["onClick"],Jr={class:"help-modal-content"},Qr=["innerHTML"],Fe="worm-print-help-tab",_r=e.defineComponent({__name:"HelpModal",props:{visible:{type:Boolean},initialTab:{default:"getting-started"}},emits:["close","update:tab"],setup(o,{emit:r}){const t=o,n=r,l=qr,i=e.ref(t.initialTab);e.onMounted(()=>{const u=localStorage.getItem(Fe);u&&l.some(f=>f.id===u)&&(i.value=u)}),e.watch(()=>t.visible,u=>{if(u){const f=localStorage.getItem(Fe);f&&l.some(E=>E.id===f)&&(i.value=f)}});function a(u){i.value=u,localStorage.setItem(Fe,u),n("update:tab",u)}const c=e.computed(()=>l.find(f=>f.id===i.value)?.content||"");function h(u){u.key==="Escape"&&t.visible&&n("close")}return e.onMounted(()=>{document.addEventListener("keydown",h)}),e.onUnmounted(()=>{document.removeEventListener("keydown",h)}),(u,f)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"help-modal"},{default:e.withCtx(()=>[o.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"help-modal-overlay",onClick:f[1]||(f[1]=e.withModifiers(E=>u.$emit("close"),["self"]))},[e.createElementVNode("div",Kr,[e.createElementVNode("div",Yr,[f[2]||(f[2]=e.createElementVNode("div",{class:"help-modal-title-wrap"},[e.createElementVNode("h2",{class:"help-modal-title"},"帮助文档"),e.createElementVNode("span",{class:"help-modal-project"},"worm-vue3-print")],-1)),e.createElementVNode("button",{class:"help-modal-close",title:"关闭",onClick:f[0]||(f[0]=E=>u.$emit("close"))}," × ")]),e.createElementVNode("div",jr,[e.createElementVNode("div",Xr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l),E=>(e.openBlock(),e.createElementBlock("button",{key:E.id,class:e.normalizeClass(["help-tab",{active:i.value===E.id}]),onClick:C=>a(E.id)},e.toDisplayString(E.title),11,Zr))),128))]),e.createElementVNode("div",Jr,[e.createElementVNode("div",{class:"help-content",innerHTML:c.value},null,8,Qr)])])])])):e.createCommentVNode("",!0)]),_:1})]))}}),es=J(_r,[["__scopeId","data-v-31115934"]]),Ze="print-studio:left",Je="print-studio:right";function Qe(o,r){try{const t=localStorage.getItem(o);return t===null?r:t==="1"}catch{return r}}function ts(){const o=e.ref(Qe(Ze,!1)),r=e.ref(Qe(Je,!1)),t=e.ref(!1);e.watch(o,a=>{try{localStorage.setItem(Ze,a?"1":"0")}catch{}},{flush:"sync"}),e.watch(r,a=>{try{localStorage.setItem(Je,a?"1":"0")}catch{}},{flush:"sync"});function n(){o.value=!o.value}function l(){r.value=!r.value}function i(){t.value=!1}return{leftCollapsed:o,rightCollapsed:r,toggleLeft:n,toggleRight:l,dirty:t,markSaved:i}}const os={class:"designer-container"},ns={class:"designer-body"},ls=e.defineComponent({__name:"PrintDesigner",props:{initialTemplate:{},initialElements:{},fields:{},isEdit:{type:Boolean},requestScreenshot:{type:Function},uploadImage:{type:Function},loadDefaultTemplate:{type:Function},showHelp:{type:Boolean}},emits:["preview","save"],setup(o,{expose:r,emit:t}){const n=o,l=t,i=e.ref(!1);e.watch(()=>n.showHelp,R=>{R===!1&&(i.value=!1)});const{leftCollapsed:a,rightCollapsed:c,toggleLeft:h,toggleRight:u,dirty:f,markSaved:E}=ts(),{scale:C,showRuler:I,showGrid:O,snapToGrid:z,showTableGhostBorder:S,templateData:U,elements:K,fields:Z,selectedIds:W,selectedElement:Q,select:_,clearSelection:N,selectAll:$,previewIds:M,setPreview:P,commitPreview:x,hasClipboard:D,copy:s,paste:V,cutSelected:F,canUndo:Y,canRedo:j,undo:ee,redo:ue,alignSelected:oe,groupSelected:se,ungroupSelected:ae,deleteSelected:L,dragStart:p,dragStop:k,addElement:B,addFieldElement:T,moveLayer:g,updateTemplateData:d,getTemplateJson:m,loadTemplate:y,tableSelection:v,setTableSelection:b,recordHistory:A}=yt({initialTemplate:n.initialTemplate,initialElements:n.initialElements,initialFields:n.fields});e.watch([K,U],()=>{f.value=!0},{deep:!0});const{guides:q,addGuide:de,moveGuide:re,removeGuide:me}=kt(U,A),ve=e.computed(()=>{const R=U.value,{width:H}=w.getPaperDimensions(R);return H-R.margins.left-R.margins.right});e.provide(Te,{tableSelection:v,setTableSelection:b,recordHistory:A,maxTableWidth:ve}),e.provide(tt,W),e.provide(ot,M),e.provide(Ge,e.computed(()=>n.uploadImage)),e.watch(Q,R=>{(!R||R.printElementType.type!=="table")&&b(null)});const fe=e.ref(null),ge=e.ref(!1),he=e.ref(""),we=e.ref(.5);async function Ne(){if(ge.value){ge.value=!1;return}const R=m();if(!R){alert("模板数据为空");return}if(!n.requestScreenshot){alert("截图服务未配置");return}try{const H=await n.requestScreenshot({templateJson:R,printData:w.DEFAULT_DEMO_DATA});he.value&&URL.revokeObjectURL(he.value),he.value=URL.createObjectURL(H),ge.value=!0}catch{alert("截图生成失败")}}const De=e.ref(null);function Re(R){De.value=R}const Ie=e.computed(()=>{const R=U.value,H=w.getPaperDimensions(R),le=R.orientation==="landscape"?"横向":"纵向";return`${R.paperSize} ${le} ${Math.round(H.width)}×${Math.round(H.height)}mm`});function G(){const R=fe.value?.$el;if(R){const H=getComputedStyle(R),le=parseFloat(H.paddingLeft)+parseFloat(H.paddingRight),pe=parseFloat(H.paddingTop)+parseFloat(H.paddingBottom),Be=w.getPaperDimensions(U.value),$e=96/25.4,xe=w.computeFitScale(R.clientWidth-le,R.clientHeight-pe,Be.width*$e,Be.height*$e);fe.value?.fitToWindow(xe)}}function te(R){C.value=Math.max(w.FIT_SCALE_MIN_PERCENT,C.value+R)}function X(R){fe.value?.zoomByStep(R>0?1:-1)}function ne(R){const H=R.target.tagName;H==="INPUT"||H==="TEXTAREA"||H==="SELECT"||(R.ctrlKey||R.metaKey)&&R.key==="0"&&(R.preventDefault(),G())}e.onMounted(()=>document.addEventListener("keydown",ne)),e.onUnmounted(()=>document.removeEventListener("keydown",ne));function be(R){const H=U.value.header.height,le=U.value.footer.height;d(R),R.header.height<H&&Ve("header"),R.footer.height<le&&Ve("footer")}function ce(R,H){U.value={...U.value,[R]:{...U.value[R],height:H}}}function ye(R){d({...U.value}),Ve(R)}function Ve(R){const H=w.getZoneRects(U.value)[R];K.value.some(pe=>pe.zone===R&&(pe.options.top+pe.options.height>H.height||pe.options.left+pe.options.width>H.width))&&alert(`${R==="header"?"页眉":"页脚"}高度已小于区域内元素,请手动调整元素位置`)}function lt(){const R=U.value.firstPageOverlay,H={options:{left:0,top:0,width:50,height:10,title:"首页叠加"},printElementType:{type:"text",title:"首页叠加"}};U.value={...U.value,firstPageOverlay:{...R,elements:[...R.elements,H]}}}const We=_;function at(R){const H=K.value.find(le=>le.id===R);H&&(H.options.visible=H.options.visible===!1)}function it(R){const H=K.value.find(le=>le.id===R);H&&(H.options.locked=!H.options.locked)}const Ce=e.ref("page");e.watch(Q,R=>{Ce.value=R?"element":"page"});const rt={text:"formatter",longText:"formatter",barcode:"formatter",qrcode:"formatter",image:"src"},Se=e.ref(!1),Me=e.ref(null),Ae=e.ref("");function st(R){const H=K.value.find(pe=>pe.id===R);if(!H||(_(R,!1),Ce.value="element",H.options.locked))return;const le=rt[H.printElementType.type];le&&(Me.value={kind:"element",element:H,field:le},Ae.value=H.options[le]||"",Se.value=!0)}function dt(R,H,le){const pe=K.value.find(vt=>vt.id===R);if(!pe||(_(R,!1),Ce.value="element",pe.options.locked))return;const Be=pe.options.tableRows??[],$e=w.findMainCell(Be,H,le),xe=Be[$e.r]?.cells[$e.c];xe&&(Me.value={kind:"cell",cell:xe},Ae.value=xe.formatter||"",Se.value=!0)}function ct(R){const H=Me.value;H?.kind==="element"?H.element.options[H.field]=R||void 0:H?.kind==="cell"&&(H.cell.formatter=R||void 0),A(),Se.value=!1,Me.value=null}function ut(R,H){K.value.push(R),_(R.id,!1),A()}e.watch(()=>n.initialTemplate,R=>{R&&y(R,n.initialElements)}),e.watch(()=>n.initialElements,R=>{R&&!n.initialTemplate&&(U.value={...U.value,elements:R.map(H=>({...H,options:{...H.options},printElementType:{...H.printElementType}}))})}),e.watch(()=>n.fields,R=>{Z.value=R||[]}),r({getTemplateJson:m});async function mt(){if(n.loadDefaultTemplate&&confirm("将覆盖当前画布内容,是否继续?"))try{const R=await n.loadDefaultTemplate();if(!R){alert("未获取到默认布局");return}y(R),alert("默认布局已加载")}catch{alert("加载默认布局失败")}}function pt(){l("save",JSON.stringify(m())),E()}return(R,H)=>(e.openBlock(),e.createElementBlock("div",os,[e.createVNode(Ut,{"is-edit":o.isEdit,"can-undo":e.unref(Y),"can-redo":e.unref(j),"has-multi-selection":e.unref(W).size>=2,"has-selection":e.unref(W).size>=1,"show-ruler":e.unref(I),"show-grid":e.unref(O),"snap-to-grid":e.unref(z),"show-table-ghost-border":e.unref(S),"selected-element-has-group":!!e.unref(Q)?.options.groupId,"overlay-visible":ge.value,"show-load-default":!!o.loadDefaultTemplate,"show-help":o.showHelp!==!1,scale:e.unref(C),"onUpdate:scale":H[0]||(H[0]=le=>e.isRef(C)?C.value=le:null),onPreview:H[1]||(H[1]=le=>R.$emit("preview")),onSave:pt,onLoadDefault:mt,onUndo:e.unref(ee),onRedo:e.unref(ue),onAlign:H[2]||(H[2]=le=>e.unref(oe)(le)),onMoveLayer:e.unref(g),onToggleRuler:H[3]||(H[3]=le=>I.value=!e.unref(I)),onToggleGrid:H[4]||(H[4]=le=>O.value=!e.unref(O)),onToggleSnap:H[5]||(H[5]=le=>z.value=!e.unref(z)),onToggleTableGhostBorder:H[6]||(H[6]=le=>S.value=!e.unref(S)),onToggleOverlay:Ne,onGroup:e.unref(se),onUngroup:e.unref(ae),onAddOverlayElement:lt,onFitWindow:G,onZoom:X,onHelp:H[7]||(H[7]=le=>i.value=!0)},null,8,["is-edit","can-undo","can-redo","has-multi-selection","has-selection","show-ruler","show-grid","snap-to-grid","show-table-ghost-border","selected-element-has-group","overlay-visible","show-load-default","show-help","scale","onUndo","onRedo","onMoveLayer","onGroup","onUngroup"]),e.createElementVNode("div",ns,[e.createVNode(ko,{fields:e.unref(Z),elements:e.unref(K),"selected-ids":e.unref(W),collapsed:e.unref(a),onSelect:e.unref(We),onMoveLayer:e.unref(g),onToggleVisible:at,onToggleLocked:it,onToggleCollapse:e.unref(h)},null,8,["fields","elements","selected-ids","collapsed","onSelect","onMoveLayer","onToggleCollapse"]),e.createVNode(Mn,{ref_key:"canvasAreaRef",ref:fe,"template-data":e.unref(U),elements:e.unref(K),scale:e.unref(C)/100,"show-ruler":e.unref(I),"show-grid":e.unref(O),"snap-to-grid":e.unref(z),"show-table-ghost-border":e.unref(S),"has-clipboard":e.unref(D),guides:e.unref(q),"overlay-visible":ge.value,"screenshot-url":he.value,"overlay-opacity":we.value,"selected-element-has-group":!!e.unref(Q)?.options.groupId,onSelect:e.unref(We),onDropElement:e.unref(B),onDropField:e.unref(T),onDragStart:e.unref(p),onDragStop:e.unref(k),onDblclickElement:st,onDblclickCell:dt,onZoneHeightChange:ce,onZoneHeightCommit:ye,onSelectAll:e.unref($),onClearSelection:e.unref(N),onPreview:e.unref(P),onCommitPreview:e.unref(x),onPaste:e.unref(V),onCopy:e.unref(s),onCut:e.unref(F),onDelete:e.unref(L),onMoveLayer:e.unref(g),onCoordinate:Re,onGroup:e.unref(se),onUngroup:e.unref(ae),onAddGuide:e.unref(de),onGuideMove:e.unref(re),onGuideRemove:e.unref(me),onZoom:te,onCloneElement:ut},null,8,["template-data","elements","scale","show-ruler","show-grid","snap-to-grid","show-table-ghost-border","has-clipboard","guides","overlay-visible","screenshot-url","overlay-opacity","selected-element-has-group","onSelect","onDropElement","onDropField","onDragStart","onDragStop","onSelectAll","onClearSelection","onPreview","onCommitPreview","onPaste","onCopy","onCut","onDelete","onMoveLayer","onGroup","onUngroup","onAddGuide","onGuideMove","onGuideRemove"]),e.createVNode(Mr,{element:e.unref(Q),"template-data":e.unref(U),fields:e.unref(Z),"table-selection":e.unref(v),"record-history":e.unref(A),collapsed:e.unref(c),"active-tab":Ce.value,"onUpdate:activeTab":H[8]||(H[8]=le=>Ce.value=le),onDeleteElement:e.unref(L),"onUpdate:templateData":be,onToggleCollapse:e.unref(u)},null,8,["element","template-data","fields","table-selection","record-history","collapsed","active-tab","onDeleteElement","onToggleCollapse"])]),e.createVNode(Hr,{coordinate:De.value,scale:e.unref(C),"element-count":e.unref(K).length,"selected-count":e.unref(W).size,paper:Ie.value,dirty:e.unref(f)},null,8,["coordinate","scale","element-count","selected-count","paper","dirty"]),e.createVNode(Oe,{modelValue:Se.value,"onUpdate:modelValue":H[9]||(H[9]=le=>Se.value=le),fields:e.unref(Z),expression:Ae.value,"onUpdate:expression":ct},null,8,["modelValue","fields","expression"]),e.createVNode(es,{visible:i.value,onClose:H[10]||(H[10]=le=>i.value=!1)},null,8,["visible"])]))}}),as=J(ls,[["__scopeId","data-v-7f247429"]]),is={class:"print-html-preview"},rs={key:0,class:"print-html-preview-error"},ss={key:1,class:"print-html-preview-loading"},ds=e.defineComponent({__name:"PrintHtmlPreview",props:{templateJson:{},printData:{},baseUrl:{}},emits:["rendered","error"],setup(o,{expose:r,emit:t}){const n=o,l=t,i=e.ref(),a=e.ref(!1),c=e.ref("");let h=0;async function u(){if(!n.templateJson){c.value="",a.value=!1;return}const E=++h;a.value=!0,c.value="";try{const{html:C,pageCount:I}=await Pe.renderHtmlPages(n.templateJson,n.printData,n.baseUrl,Pe.browserCodeRenderer);if(E!==h)return;const O=i.value?.contentWindow?.document;O&&(O.open(),O.write(C),O.close()),l("rendered",I)}catch(C){if(E!==h)return;c.value=C instanceof Error?C.message:"未知错误",l("error",c.value)}finally{E===h&&(a.value=!1)}}function f(){const E=i.value?.contentWindow;E&&(E.focus(),E.print())}return e.watch(()=>[n.templateJson,n.printData,n.baseUrl],()=>{u()},{immediate:!0,deep:!0}),e.onBeforeUnmount(()=>{h++}),r({print:f,rerender:u}),(E,C)=>(e.openBlock(),e.createElementBlock("div",is,[c.value?(e.openBlock(),e.createElementBlock("div",rs,[e.createElementVNode("span",null,"预览渲染失败:"+e.toDisplayString(c.value),1)])):a.value?(e.openBlock(),e.createElementBlock("div",ss,"预览渲染中…")):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("iframe",{ref_key:"iframeRef",ref:i,class:"print-html-preview-iframe",title:"打印预览"},null,512),[[e.vShow,!a.value&&!c.value]])]))}}),cs=J(ds,[["__scopeId","data-v-6b659619"]]);Object.defineProperty(exports,"DEFAULT_DEMO_DATA",{enumerable:!0,get:()=>w.DEFAULT_DEMO_DATA});Object.defineProperty(exports,"getDemoData",{enumerable:!0,get:()=>w.getDemoData});Object.defineProperty(exports,"browserCodeRenderer",{enumerable:!0,get:()=>Pe.browserCodeRenderer});Object.defineProperty(exports,"renderHtmlPages",{enumerable:!0,get:()=>Pe.renderHtmlPages});exports.PrintDesigner=as;exports.PrintHtmlPreview=cs;exports.UPLOAD_IMAGE_KEY=Ge;exports.createDefaultTemplate=nt;exports.toRuntimePool=Ue;
428
442
  //# sourceMappingURL=index.cjs.map