@nywqs/scada-engine 1.1.15 → 1.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
- (function(U,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@antv/x6"),require("@antv/x6-plugin-selection"),require("@antv/x6-plugin-snapline")):typeof define=="function"&&define.amd?define(["exports","vue","@antv/x6","@antv/x6-plugin-selection","@antv/x6-plugin-snapline"],e):(U=typeof globalThis<"u"?globalThis:U||self,e(U.ScadaEngine={},U.Vue,U.X6,U.X6PluginSelection,U.X6PluginSnapline))})(this,function(U,e,ge,Gt,nn){"use strict";var vp=Object.defineProperty;var bp=(U,e,ge)=>e in U?vp(U,e,{enumerable:!0,configurable:!0,writable:!0,value:ge}):U[e]=ge;var Ue=(U,e,ge)=>bp(U,typeof e!="symbol"?e+"":e,ge);/*!
2
- * @nywqs/scada-engine v1.1.15
1
+ (function(I,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@antv/x6"),require("@antv/x6-plugin-selection"),require("@antv/x6-plugin-snapline")):typeof define=="function"&&define.amd?define(["exports","vue","@antv/x6","@antv/x6-plugin-selection","@antv/x6-plugin-snapline"],e):(I=typeof globalThis<"u"?globalThis:I||self,e(I.ScadaEngine={},I.Vue,I.X6,I.X6PluginSelection,I.X6PluginSnapline))})(this,function(I,e,oe,Ge,pt){"use strict";var Xc=Object.defineProperty;var Kc=(I,e,oe)=>e in I?Xc(I,e,{enumerable:!0,configurable:!0,writable:!0,value:oe}):I[e]=oe;var be=(I,e,oe)=>Kc(I,typeof e!="symbol"?e+"":e,oe);/*!
2
+ * @nywqs/scada-engine v1.1.16
3
3
  * Copyright (c) 2025 leoncheng
4
4
  * Licensed under proprietary license - see LICENSE file
5
5
  * Contact: nywqs@outlook.com
6
- */const an={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},rn=e.defineComponent({name:"AlignHorizontalCenter",render:function(h,o){return e.openBlock(),e.createElementBlock("svg",an,o[0]||(o[0]=[e.createElementVNode("path",{d:"M24 18h-7v-4h3a2.002 2.002 0 0 0 2-2V8a2.002 2.002 0 0 0-2-2h-3V2h-2v4h-3a2.002 2.002 0 0 0-2 2v4a2.002 2.002 0 0 0 2 2h3v4H8a2.002 2.002 0 0 0-2 2v4a2.002 2.002 0 0 0 2 2h7v4h2v-4h7a2.002 2.002 0 0 0 2-2v-4a2.002 2.002 0 0 0-2-2zM12 8h8v4h-8zm12 16H8v-4h16z",fill:"currentColor"},null,-1)]))}}),ln={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},sn=e.defineComponent({name:"AlignHorizontalLeft",render:function(h,o){return e.openBlock(),e.createElementBlock("svg",ln,o[0]||(o[0]=[e.createElementVNode("path",{d:"M26 26H11a2.002 2.002 0 0 1-2-2v-4a2.002 2.002 0 0 1 2-2h15a2.002 2.002 0 0 1 2 2v4a2.002 2.002 0 0 1-2 2zm0-6.001L11 20v4h15z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M18 14h-7a2.002 2.002 0 0 1-2-2V8a2.002 2.002 0 0 1 2-2h7a2.002 2.002 0 0 1 2 2v4a2.002 2.002 0 0 1-2 2zm0-6.001L11 8v4h7z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M4 2h2v28H4z",fill:"currentColor"},null,-1)]))}}),cn={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},dn=e.defineComponent({name:"AlignHorizontalRight",render:function(h,o){return e.openBlock(),e.createElementBlock("svg",cn,o[0]||(o[0]=[e.createElementVNode("path",{d:"M4 24v-4a2.002 2.002 0 0 1 2-2h15a2.002 2.002 0 0 1 2 2v4a2.002 2.002 0 0 1-2 2H6a2.002 2.002 0 0 1-2-2zm2 0h15v-4l-15-.001z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M12 12V8a2.002 2.002 0 0 1 2-2h7a2.002 2.002 0 0 1 2 2v4a2.002 2.002 0 0 1-2 2h-7a2.002 2.002 0 0 1-2-2zm2 0h7V8l-7-.001z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M28 30h-2V2h2z",fill:"currentColor"},null,-1)]))}}),pn={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},xn=e.defineComponent({name:"AlignVerticalBottom",render:function(h,o){return e.openBlock(),e.createElementBlock("svg",pn,o[0]||(o[0]=[e.createElementVNode("path",{d:"M2 26h28v2H2z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M24 23h-4a2.002 2.002 0 0 1-2-2v-7a2.002 2.002 0 0 1 2-2h4a2.002 2.002 0 0 1 2 2v7a2.002 2.002 0 0 1-2 2zm-4-9v7h4.001L24 14z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M12 23H8a2.002 2.002 0 0 1-2-2V6a2.002 2.002 0 0 1 2-2h4a2.002 2.002 0 0 1 2 2v15a2.002 2.002 0 0 1-2 2zM8 6v15h4.001L12 6z",fill:"currentColor"},null,-1)]))}}),fn={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},mn=e.defineComponent({name:"AlignVerticalCenter",render:function(h,o){return e.openBlock(),e.createElementBlock("svg",fn,o[0]||(o[0]=[e.createElementVNode("path",{d:"M30 15h-4v-3a2.002 2.002 0 0 0-2-2h-4a2.002 2.002 0 0 0-2 2v3h-4V8a2.002 2.002 0 0 0-2-2H8a2.002 2.002 0 0 0-2 2v7H2v2h4v7a2.002 2.002 0 0 0 2 2h4a2.002 2.002 0 0 0 2-2v-7h4v3a2.002 2.002 0 0 0 2 2h4a2.002 2.002 0 0 0 2-2v-3h4zM8 24V8h4l.001 16zm12-4v-8h4l.001 8z",fill:"currentColor"},null,-1)]))}}),un={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},gn=e.defineComponent({name:"AlignVerticalTop",render:function(h,o){return e.openBlock(),e.createElementBlock("svg",un,o[0]||(o[0]=[e.createElementVNode("path",{d:"M24 20h-4a2.002 2.002 0 0 1-2-2v-7a2.002 2.002 0 0 1 2-2h4a2.002 2.002 0 0 1 2 2v7a2.002 2.002 0 0 1-2 2zm-4-9v7h4.001L24 11z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M12 28H8a2.002 2.002 0 0 1-2-2V11a2.002 2.002 0 0 1 2-2h4a2.002 2.002 0 0 1 2 2v15a2.002 2.002 0 0 1-2 2zM8 11v15h4.001L12 11z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M2 4h28v2H2z",fill:"currentColor"},null,-1)]))}}),En={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},hn=e.defineComponent({name:"DistributeHorizontalCenter",render:function(h,o){return e.openBlock(),e.createElementBlock("svg",En,o[0]||(o[0]=[e.createElementVNode("path",{d:"M24 10h-1V2h-2v8h-1a2.002 2.002 0 0 0-2 2v8a2.002 2.002 0 0 0 2 2h1v8h2v-8h1a2.002 2.002 0 0 0 2-2v-8a2.002 2.002 0 0 0-2-2zm0 10h-4v-8h4z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M12 6h-1V2H9v4H8a2.002 2.002 0 0 0-2 2v16a2.002 2.002 0 0 0 2 2h1v4h2v-4h1a2.002 2.002 0 0 0 2-2V8a2.002 2.002 0 0 0-2-2zm0 18H8V8h4z",fill:"currentColor"},null,-1)]))}}),vn={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},bn=e.defineComponent({name:"DistributeVerticalCenter",render:function(h,o){return e.openBlock(),e.createElementBlock("svg",vn,o[0]||(o[0]=[e.createElementVNode("path",{d:"M30 21h-4v-1a2.002 2.002 0 0 0-2-2H8a2.002 2.002 0 0 0-2 2v1H2v2h4v1a2.002 2.002 0 0 0 2 2h16a2.002 2.002 0 0 0 2-2v-1h4zm-6 3H8v-4l16-.001z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M30 9h-8V8a2.002 2.002 0 0 0-2-2h-8a2.002 2.002 0 0 0-2 2v1H2v2h8v1a2.002 2.002 0 0 0 2 2h8a2.002 2.002 0 0 0 2-2v-1h8zm-10 3h-8V8l8-.001z",fill:"currentColor"},null,-1)]))}}),yn={class:"scada-header"},Cn={class:"header-left"},Bn={class:"header-center"},kn={class:"tool-group"},Nn={key:0,class:"divider"},Vn={key:1,class:"tool-group"},Dn={key:2,class:"divider"},An={key:3,class:"tool-group"},_n={class:"header-right"},Fn={class:"tool-group"},$n=e.defineComponent({__name:"Header",props:{selectedNodesCount:{default:0}},emits:["save","import","workflow","preview","export","zoomIn","zoomOut","clearAll","alignLeft","alignCenter","alignRight","alignTop","alignMiddle","alignBottom","distributeHorizontal","distributeVertical"],setup(g,{emit:h}){const o=g,r=h;return(n,l)=>(e.openBlock(),e.createElementBlock("header",yn,[e.createElementVNode("div",Cn,[e.renderSlot(n.$slots,"left",{},()=>[l[16]||(l[16]=e.createElementVNode("h1",{class:"logo"},"SCADA 组态引擎",-1)),l[17]||(l[17]=e.createElementVNode("span",{class:"version"},"v1.0.0",-1))],!0)]),e.createElementVNode("div",Bn,[e.createElementVNode("div",kn,[e.createElementVNode("button",{class:"toolbar-btn",onClick:l[0]||(l[0]=E=>r("zoomIn")),title:"放大"},[...l[18]||(l[18]=[e.createElementVNode("span",{class:"icon"},"+",-1)])]),e.createElementVNode("button",{class:"toolbar-btn",onClick:l[1]||(l[1]=E=>r("zoomOut")),title:"缩小"},[...l[19]||(l[19]=[e.createElementVNode("span",{class:"icon"},"-",-1)])]),e.createElementVNode("button",{class:"toolbar-btn",onClick:l[2]||(l[2]=E=>r("clearAll")),title:"清空画布"},[...l[20]||(l[20]=[e.createElementVNode("span",{class:"icon"},"🗑",-1)])])]),o.selectedNodesCount>=2?(e.openBlock(),e.createElementBlock("div",Nn)):e.createCommentVNode("",!0),o.selectedNodesCount>=2?(e.openBlock(),e.createElementBlock("div",Vn,[e.createElementVNode("button",{class:"toolbar-btn",onClick:l[3]||(l[3]=E=>r("alignLeft")),title:"左对齐"},[e.createVNode(e.unref(sn),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:l[4]||(l[4]=E=>r("alignCenter")),title:"水平居中"},[e.createVNode(e.unref(rn),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:l[5]||(l[5]=E=>r("alignRight")),title:"右对齐"},[e.createVNode(e.unref(dn),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:l[6]||(l[6]=E=>r("alignTop")),title:"顶部对齐"},[e.createVNode(e.unref(gn),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:l[7]||(l[7]=E=>r("alignMiddle")),title:"垂直居中"},[e.createVNode(e.unref(mn),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:l[8]||(l[8]=E=>r("alignBottom")),title:"底部对齐"},[e.createVNode(e.unref(xn),{class:"icon-svg"})])])):e.createCommentVNode("",!0),o.selectedNodesCount>=3?(e.openBlock(),e.createElementBlock("div",Dn)):e.createCommentVNode("",!0),o.selectedNodesCount>=3?(e.openBlock(),e.createElementBlock("div",An,[e.createElementVNode("button",{class:"toolbar-btn",onClick:l[9]||(l[9]=E=>r("distributeHorizontal")),title:"横向分布"},[e.createVNode(e.unref(hn),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:l[10]||(l[10]=E=>r("distributeVertical")),title:"纵向分布"},[e.createVNode(e.unref(bn),{class:"icon-svg"})])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",_n,[e.createElementVNode("div",Fn,[e.createElementVNode("button",{class:"header-btn",onClick:l[11]||(l[11]=E=>r("workflow")),title:"流程编排"},[...l[21]||(l[21]=[e.createElementVNode("span",{class:"icon"},"⚡",-1),e.createElementVNode("span",null,"流程编排",-1)])]),e.createElementVNode("button",{class:"header-btn",onClick:l[12]||(l[12]=E=>r("import")),title:"导入"},[...l[22]||(l[22]=[e.createElementVNode("span",{class:"icon"},"📂",-1),e.createElementVNode("span",null,"导入",-1)])]),e.createElementVNode("button",{class:"header-btn",onClick:l[13]||(l[13]=E=>r("export")),title:"导出"},[...l[23]||(l[23]=[e.createElementVNode("span",{class:"icon"},"📤",-1),e.createElementVNode("span",null,"导出",-1)])]),e.createElementVNode("button",{class:"header-btn",onClick:l[14]||(l[14]=E=>r("preview")),title:"预览"},[...l[24]||(l[24]=[e.createElementVNode("span",{class:"icon"},"👁",-1),e.createElementVNode("span",null,"预览",-1)])]),e.createElementVNode("button",{class:"header-btn",onClick:l[15]||(l[15]=E=>r("save")),title:"保存"},[...l[25]||(l[25]=[e.createElementVNode("span",{class:"icon"},"💾",-1),e.createElementVNode("span",null,"保存",-1)])])])])]))}}),re=(g,h)=>{const o=g.__vccOpts||g;for(const[r,n]of h)o[r]=n;return o},Ge=re($n,[["__scopeId","data-v-9bbedc41"]]),Se=[{key:"animationEnabled",label:"启用动画",type:"boolean",path:"data.animation.enabled",defaultValue:!1,description:"是否启用动画效果",bindable:!0},{key:"animationType",label:"动画类型",type:"select",path:"data.animation.type",defaultValue:"none",options:[{label:"无动画",value:"none"},{label:"闪烁",value:"blink"},{label:"缩放",value:"scale"},{label:"旋转",value:"rotate"},{label:"浮动",value:"float"},{label:"脉冲",value:"pulse"}],description:"组件动画效果类型",bindable:!1},{key:"animationDuration",label:"动画时长(ms)",type:"number",path:"data.animation.duration",defaultValue:1e3,min:100,max:5e3,step:100,description:"动画完成一次所需时间",bindable:!1},{key:"animationLoop",label:"循环播放",type:"boolean",path:"data.animation.loop",defaultValue:!0,description:"是否循环播放动画",bindable:!1}],jt={metadata:{id:"rect",name:"矩形",category:"basic",icon:"▢",description:"基础矩形图形组件",version:"1.0.0"},shape:"rect",width:120,height:60,label:"矩形",attrs:{body:{fill:"#3b82f6",stroke:"#2563eb",strokeWidth:2},label:{fill:"#fff",fontSize:14}},ports:{groups:{top:{position:"top",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},bottom:{position:"bottom",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-top",group:"top"},{id:"port-right",group:"right"},{id:"port-bottom",group:"bottom"},{id:"port-left",group:"left"}]},props:[{key:"name",label:"按钮文本",type:"text",path:"attrs.label.text",defaultValue:"矩形",description:"矩形名称"},{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#3b82f6",description:"矩形填充颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#2563eb",description:"矩形边框颜色"},{key:"strokeWidth",label:"边框宽度",type:"number",path:"attrs.body.strokeWidth",defaultValue:2,min:0,max:10,description:"矩形边框宽度"},{key:"opacity",label:"透明度",type:"slider",path:"attrs.body.opacity",defaultValue:1,min:0,max:1,step:.1,description:"矩形透明度"},...Se]},Xt={metadata:{id:"circle",name:"圆形",category:"basic",icon:"○",description:"基础圆形图形组件",version:"1.0.0"},shape:"circle",width:80,height:80,label:"圆形",attrs:{body:{fill:"#10b981",stroke:"#059669",strokeWidth:2},label:{fill:"#fff",fontSize:14}},ports:{groups:{top:{position:"top",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},bottom:{position:"bottom",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-top",group:"top"},{id:"port-right",group:"right"},{id:"port-bottom",group:"bottom"},{id:"port-left",group:"left"}]},props:[{key:"text",label:"初始文本",type:"text",path:"attrs.label.text",defaultValue:"圆形",description:"圆形初始文本"},{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#10b981",description:"圆形填充颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#059669",description:"圆形边框颜色"},{key:"strokeWidth",label:"边框宽度",type:"number",path:"attrs.body.strokeWidth",defaultValue:2,min:0,max:10,description:"圆形边框宽度"},{key:"opacity",label:"透明度",type:"slider",path:"attrs.body.opacity",defaultValue:1,min:0,max:1,step:.1,description:"圆形透明度"},...Se]},Yt={metadata:{id:"text",name:"文本",category:"basic",icon:"T",description:"文本标签组件",version:"1.0.0"},shape:"rect",width:100,height:40,label:"文本",attrs:{body:{fill:"transparent",stroke:"#64748b",strokeWidth:1,strokeDasharray:"5 5"},label:{fill:"#e2e8f0",fontSize:16}},props:[{key:"label",label:"文本内容",type:"text",path:"attrs.label.text",defaultValue:"文本",description:"显示的文本内容"},{key:"fontSize",label:"字体大小",type:"number",path:"attrs.label.fontSize",defaultValue:16,min:12,max:48,description:"文本字体大小"},{key:"fontColor",label:"字体颜色",type:"color",path:"attrs.label.fill",defaultValue:"#e2e8f0",description:"文本字体颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#64748b",description:"边框颜色"},...Se]},wn=Object.freeze(Object.defineProperty({__proto__:null,CircleComponent:Xt,RectComponent:jt,TextComponent:Yt},Symbol.toStringTag,{value:"Module"})),Kt={metadata:{id:"light",name:"灯泡",category:"iot",icon:"💡",description:"IoT灯泡控制组件",version:"1.0.0"},shape:"circle",width:60,height:60,label:"💡",attrs:{body:{fill:"#fbbf24",stroke:"#f59e0b",strokeWidth:2},label:{fill:"#fff",fontSize:24}},data:{type:"light",deviceId:"",property:""},ports:{groups:{left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-left",group:"left"},{id:"port-right",group:"right"}]},props:[{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#fbbf24",description:"灯泡颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#f59e0b",description:"边框颜色"},{key:"deviceId",label:"设备ID",type:"text",path:"data.deviceId",defaultValue:"",description:"绑定的设备ID"},{key:"property",label:"设备属性",type:"text",path:"data.property",defaultValue:"",description:"绑定的设备属性名称"},...Se]},Jt={metadata:{id:"switch",name:"开关",category:"iot",icon:"🔘",description:"IoT开关控制组件",version:"1.0.0"},shape:"rect",width:100,height:50,label:"开关",attrs:{body:{fill:"#64748b",stroke:"#475569",strokeWidth:2,rx:25,ry:25},label:{fill:"#fff",fontSize:14}},data:{type:"switch",deviceId:"",property:"",state:!1},ports:{groups:{left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-left",group:"left"},{id:"port-right",group:"right"}]},props:[{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#64748b",description:"开关颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#475569",description:"边框颜色"},{key:"deviceId",label:"设备ID",type:"text",path:"data.deviceId",defaultValue:"",description:"绑定的设备ID"},{key:"property",label:"设备属性",type:"text",path:"data.property",defaultValue:"",description:"绑定的设备属性名称"},{key:"state",label:"开关状态",type:"boolean",path:"data.state",defaultValue:!1,description:"开关当前状态"},...Se]},Zt={metadata:{id:"gauge",name:"仪表",category:"iot",icon:"📊",description:"IoT仪表盘数据展示组件",version:"1.0.0"},shape:"circle",width:100,height:100,label:"📊",attrs:{body:{fill:"#8b5cf6",stroke:"#7c3aed",strokeWidth:2},label:{fill:"#fff",fontSize:32}},data:{type:"gauge",deviceId:"",property:"",value:0},ports:{groups:{top:{position:"top",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},bottom:{position:"bottom",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-top",group:"top"},{id:"port-right",group:"right"},{id:"port-bottom",group:"bottom"},{id:"port-left",group:"left"}]},props:[{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#8b5cf6",description:"仪表颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#7c3aed",description:"边框颜色"},{key:"deviceId",label:"设备ID",type:"text",path:"data.deviceId",defaultValue:"",description:"绑定的设备ID"},{key:"property",label:"设备属性",type:"text",path:"data.property",defaultValue:"",description:"绑定的设备属性名称"},{key:"value",label:"当前值",type:"number",path:"data.value",defaultValue:0,min:0,max:100,description:"仪表当前显示值"},...Se]},Sn=Object.freeze(Object.defineProperty({__proto__:null,GaugeComponent:Zt,LightComponent:Kt,SwitchComponent:Jt},Symbol.toStringTag,{value:"Module"}));class In{constructor(){Ue(this,"registry",{});this.registerDefaultComponents()}registerDefaultComponents(){this.register(jt),this.register(Xt),this.register(Yt),this.register(Kt),this.register(Jt),this.register(Zt)}register(h){const{id:o}=h.metadata;this.registry[o]&&console.warn(`组件 ${o} 已存在,将被覆盖`),this.registry[o]=h,console.log(`✓ 组件注册成功: ${h.metadata.name} (${o})`)}registerBatch(h){h.forEach(o=>this.register(o))}getComponent(h){return this.registry[h]}getAllComponents(){return{...this.registry}}getComponentsByCategory(h){return Object.values(this.registry).filter(o=>o.metadata.category===h)}getComponentList(){return Object.values(this.registry)}hasComponent(h){return h in this.registry}unregister(h){return this.registry[h]?(delete this.registry[h],console.log(`✓ 组件注销成功: ${h}`),!0):(console.warn(`组件 ${h} 不存在`),!1)}getCount(){return Object.keys(this.registry).length}clear(){this.registry={},console.log("✓ 组件注册表已清空")}}const Pe=new In,je={size:{width:1920,height:1080,preset:"1920*1080"},zoom:{scale:1,min:.1,max:5},offset:{x:0,y:0},background:{color:"#1e293b",size:"origin",repeat:"repeat"},grid:{enabled:!0,size:10,color:"#475569",type:"dot"},snap:{enabled:!0,threshold:10},guides:{enabled:!1,color:"#3b82f6"},magnetism:{enabled:!0,threshold:10}},zn=[{key:"sizePreset",label:"画布尺寸",type:"select",category:"basic",path:"size.preset",defaultValue:"1920*1080",options:[{label:"1920*1080",value:"1920*1080"},{label:"1366*768",value:"1366*768"},{label:"1280*720",value:"1280*720"},{label:"800*600",value:"800*600"}],description:"预设画布尺寸"},{key:"scale",label:"缩放倍数",type:"slider",category:"transform",path:"zoom.scale",defaultValue:1,min:.1,max:5,step:.1,description:"画布缩放比例"},{key:"offsetX",label:"画布X轴偏移",type:"number",category:"transform",path:"offset.x",defaultValue:0,description:"X轴偏移量"},{key:"offsetY",label:"画布Y轴偏移",type:"number",category:"transform",path:"offset.y",defaultValue:0,description:"Y轴偏移量"},{key:"backgroundColor",label:"背景颜色",type:"color",category:"background",path:"background.color",defaultValue:"#1e293b",description:"画布背景颜色"},{key:"backgroundImage",label:"背景图片",type:"image",category:"background",path:"background.image",defaultValue:"",description:"背景图片URL"},{key:"backgroundSize",label:"背景大小",type:"select",category:"background",path:"background.size",defaultValue:"origin",options:[{label:"原始",value:"origin"},{label:"包含",value:"contain"},{label:"覆盖",value:"cover"},{label:"拉伸",value:"stretch"}],description:"背景图片尺寸模式"},{key:"backgroundRepeat",label:"图像重复",type:"select",category:"background",path:"background.repeat",defaultValue:"repeat",options:[{label:"重复",value:"repeat"},{label:"X轴重复",value:"repeat-x"},{label:"Y轴重复",value:"repeat-y"},{label:"不重复",value:"no-repeat"}],description:"背景图片重复模式"},{key:"gridEnabled",label:"网格",type:"boolean",category:"assist",path:"grid.enabled",defaultValue:!0,description:"显示网格"},{key:"gridSize",label:"网格大小",type:"number",category:"assist",path:"grid.size",defaultValue:10,min:5,max:50,description:"网格单元格大小"},{key:"snapEnabled",label:"网格对齐",type:"boolean",category:"assist",path:"snap.enabled",defaultValue:!0,description:"启用网格对齐"},{key:"guidesEnabled",label:"参考线",type:"boolean",category:"assist",path:"guides.enabled",defaultValue:!0,description:"显示参考线"},{key:"magnetismEnabled",label:"吸附",type:"boolean",category:"assist",path:"magnetism.enabled",defaultValue:!0,description:"启用吸附功能"}],Re={"1920*1080":{width:1920,height:1080},"1366*768":{width:1366,height:768},"1280*720":{width:1280,height:720},"800*600":{width:800,height:600}};class Tn{constructor(){Ue(this,"config");this.config=e.reactive({...je})}getConfig(){return this.config}updateConfig(h){Object.assign(this.config,h)}updateByPath(h,o){const r=h.split(".");let n=this.config;for(let l=0;l<r.length-1;l++)n=n[r[l]];if(n[r[r.length-1]]=o,h==="size.preset"&&o in Re){const{width:l,height:E}=Re[o];this.config.size.width=l,this.config.size.height=E}}getByPath(h){const o=h.split(".");let r=this.config;for(const n of o)r=r==null?void 0:r[n];return r}setSize(h,o,r){this.config.size.width=h,this.config.size.height=o,r&&(this.config.size.preset=r)}updateSize(h){this.config.size.width=h.width,this.config.size.height=h.height}setZoom(h){const{min:o=.1,max:r=5}=this.config.zoom;this.config.zoom.scale=Math.max(o,Math.min(r,h))}setOffset(h,o){this.config.offset.x=h,this.config.offset.y=o}setBackgroundColor(h){this.config.background.color=h}updateBackground(h){h.color!==void 0&&(this.config.background.color=h.color),h.image!==void 0&&(this.config.background.image=h.image),h.size!==void 0&&(this.config.background.size=h.size),h.repeat!==void 0&&(this.config.background.repeat=h.repeat)}setBackgroundImage(h){this.config.background.image=h}toggleGrid(h){this.config.grid.enabled=h??!this.config.grid.enabled}setGridSize(h){this.config.grid.size=h}toggleSnap(h){this.config.snap.enabled=h??!this.config.snap.enabled}toggleGuides(h){this.config.guides.enabled=h??!this.config.guides.enabled}toggleMagnetism(h){this.config.magnetism.enabled=h??!this.config.magnetism.enabled}reset(){Object.assign(this.config,je)}export(){return JSON.stringify(this.config,null,2)}import(h){try{const o=JSON.parse(h);Object.assign(this.config,o)}catch(o){console.error("导入画布配置失败:",o)}}}const J=new Tn,Pn={class:"component-library"},Rn={class:"library-content"},Mn={key:0,class:"component-section"},Hn={class:"component-grid"},On=["onClick","title"],Un={class:"component-icon"},Ln={class:"component-name"},Wn={key:1,class:"component-section"},qn={class:"component-grid"},Gn=["onClick","title"],jn={class:"component-icon"},Xn={class:"component-name"},Xe=re(e.defineComponent({__name:"ComponentLibrary",emits:["addComponent"],setup(g,{emit:h}){const o=h,r=e.computed(()=>Pe.getComponentsByCategory("basic")),n=e.computed(()=>Pe.getComponentsByCategory("iot")),l=E=>{o("addComponent",E.metadata.id)};return(E,c)=>(e.openBlock(),e.createElementBlock("aside",Pn,[c[2]||(c[2]=e.createElementVNode("div",{class:"library-header"},[e.createElementVNode("h3",null,"组件库")],-1)),e.createElementVNode("div",Rn,[r.value.length>0?(e.openBlock(),e.createElementBlock("div",Mn,[c[0]||(c[0]=e.createElementVNode("h4",{class:"section-title"},"基础组件",-1)),e.createElementVNode("div",Hn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.metadata.id,class:"component-item",onClick:s=>l(x),title:x.metadata.description||x.metadata.name},[e.createElementVNode("span",Un,e.toDisplayString(x.metadata.icon),1),e.createElementVNode("span",Ln,e.toDisplayString(x.metadata.name),1)],8,On))),128))])])):e.createCommentVNode("",!0),n.value.length>0?(e.openBlock(),e.createElementBlock("div",Wn,[c[1]||(c[1]=e.createElementVNode("h4",{class:"section-title"},"IoT组件",-1)),e.createElementVNode("div",qn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.metadata.id,class:"component-item",onClick:s=>l(x),title:x.metadata.description||x.metadata.name},[e.createElementVNode("span",jn,e.toDisplayString(x.metadata.icon),1),e.createElementVNode("span",Xn,e.toDisplayString(x.metadata.name),1)],8,Gn))),128))])])):e.createCommentVNode("",!0)])]))}}),[["__scopeId","data-v-92bb4e17"]]),Yn={class:"canvas-area"},Kn=re(e.defineComponent({__name:"CanvasArea",setup(g,{expose:h}){const o=e.ref();return h({containerRef:o}),(r,n)=>(e.openBlock(),e.createElementBlock("div",Yn,[e.createElementVNode("div",{ref_key:"containerRef",ref:o,class:"canvas-container"},null,512)]))}}),[["__scopeId","data-v-a869f6aa"]]),Jn={class:"canvas-config-panel"},Zn={class:"panel-content"},Qn={class:"config-section"},e0={class:"config-item"},t0={class:"config-section"},o0={class:"config-item"},n0={class:"slider-group"},a0={class:"value-display"},r0={class:"config-item"},l0={class:"number-input-group"},s0={class:"config-item"},i0={class:"number-input-group"},c0={class:"config-section"},d0={class:"config-item"},p0={class:"config-item"},x0={class:"image-upload"},f0={class:"config-item"},m0={class:"config-item"},u0={class:"config-section"},g0={class:"config-item"},E0={class:"switch"},h0={class:"config-item"},v0={class:"switch"},b0={class:"config-item"},y0={class:"switch"},C0={key:0,class:"config-item"},B0={class:"number-input-group"},Ye=re(e.defineComponent({__name:"CanvasConfigPanel",setup(g){const h=e.computed(()=>J.getConfig()),o=e.ref(),r=()=>{const s=h.value.size.preset;if(s&&s in Re){const{width:a,height:t}=Re[s];J.setSize(a,t,s)}},n=(s,a)=>{const t=h.value.offset[s];J.setOffset(s==="x"?t+a:h.value.offset.x,s==="y"?t+a:h.value.offset.y)},l=s=>{const a=Math.max(5,Math.min(50,h.value.grid.size+s));J.setGridSize(a)},E=()=>{var s;(s=o.value)==null||s.click()},c=s=>{var i;const t=(i=s.target.files)==null?void 0:i[0];if(t){const m=new FileReader;m.onload=u=>{var k;const y=(k=u.target)==null?void 0:k.result;J.updateByPath("background.image",y)},m.readAsDataURL(t)}},x=()=>{J.updateByPath("background.image",""),o.value&&(o.value.value="")};return(s,a)=>(e.openBlock(),e.createElementBlock("div",Jn,[a[40]||(a[40]=e.createElementVNode("div",{class:"panel-header"},[e.createElementVNode("h3",null,"画布配置")],-1)),e.createElementVNode("div",Zn,[e.createElementVNode("div",Qn,[a[19]||(a[19]=e.createElementVNode("h4",{class:"section-title"},"基础配置",-1)),e.createElementVNode("div",e0,[a[18]||(a[18]=e.createElementVNode("label",null,"画布尺寸",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":a[0]||(a[0]=t=>h.value.size.preset=t),onChange:r,class:"config-select"},[...a[17]||(a[17]=[e.createElementVNode("option",{value:"1920*1080"},"1920*1080",-1),e.createElementVNode("option",{value:"1366*768"},"1366*768",-1),e.createElementVNode("option",{value:"1280*720"},"1280*720",-1),e.createElementVNode("option",{value:"800*600"},"800*600",-1)])],544),[[e.vModelSelect,h.value.size.preset]])])]),e.createElementVNode("div",t0,[a[23]||(a[23]=e.createElementVNode("h4",{class:"section-title"},"变换",-1)),e.createElementVNode("div",o0,[a[20]||(a[20]=e.createElementVNode("label",null,"缩放倍数",-1)),e.createElementVNode("div",n0,[e.withDirectives(e.createElementVNode("input",{type:"range","onUpdate:modelValue":a[1]||(a[1]=t=>h.value.zoom.scale=t),min:.1,max:5,step:.1,class:"config-slider"},null,512),[[e.vModelText,h.value.zoom.scale,void 0,{number:!0}]]),e.createElementVNode("span",a0,e.toDisplayString(h.value.zoom.scale.toFixed(1)),1)])]),e.createElementVNode("div",r0,[a[21]||(a[21]=e.createElementVNode("label",null,"画布X轴偏移",-1)),e.createElementVNode("div",l0,[e.createElementVNode("button",{onClick:a[2]||(a[2]=t=>n("x",-10)),class:"adjust-btn"},"-"),e.withDirectives(e.createElementVNode("input",{type:"number","onUpdate:modelValue":a[3]||(a[3]=t=>h.value.offset.x=t),class:"config-number"},null,512),[[e.vModelText,h.value.offset.x,void 0,{number:!0}]]),e.createElementVNode("button",{onClick:a[4]||(a[4]=t=>n("x",10)),class:"adjust-btn"},"+")])]),e.createElementVNode("div",s0,[a[22]||(a[22]=e.createElementVNode("label",null,"画布Y轴偏移",-1)),e.createElementVNode("div",i0,[e.createElementVNode("button",{onClick:a[5]||(a[5]=t=>n("y",-10)),class:"adjust-btn"},"-"),e.withDirectives(e.createElementVNode("input",{type:"number","onUpdate:modelValue":a[6]||(a[6]=t=>h.value.offset.y=t),class:"config-number"},null,512),[[e.vModelText,h.value.offset.y,void 0,{number:!0}]]),e.createElementVNode("button",{onClick:a[7]||(a[7]=t=>n("y",10)),class:"adjust-btn"},"+")])])]),e.createElementVNode("div",c0,[a[31]||(a[31]=e.createElementVNode("h4",{class:"section-title"},"背景",-1)),e.createElementVNode("div",d0,[a[24]||(a[24]=e.createElementVNode("label",null,"背景颜色",-1)),e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":a[8]||(a[8]=t=>h.value.background.color=t),class:"config-color"},null,512),[[e.vModelText,h.value.background.color]])]),e.createElementVNode("div",p0,[a[26]||(a[26]=e.createElementVNode("label",null,"背景图片",-1)),e.createElementVNode("div",x0,[e.createElementVNode("input",{type:"file",accept:"image/*",onChange:c,ref_key:"fileInput",ref:o,style:{display:"none"}},null,544),e.createElementVNode("button",{onClick:E,class:"upload-btn"},[...a[25]||(a[25]=[e.createElementVNode("span",null,"📄",-1)])]),h.value.background.image?(e.openBlock(),e.createElementBlock("button",{key:0,onClick:x,class:"clear-btn",title:"清除背景图"}," ✕ ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",f0,[a[28]||(a[28]=e.createElementVNode("label",null,"背景大小",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":a[9]||(a[9]=t=>h.value.background.size=t),class:"config-select"},[...a[27]||(a[27]=[e.createElementVNode("option",{value:"origin"},"原始",-1),e.createElementVNode("option",{value:"contain"},"包含",-1),e.createElementVNode("option",{value:"cover"},"覆盖",-1),e.createElementVNode("option",{value:"stretch"},"拉伸",-1)])],512),[[e.vModelSelect,h.value.background.size]])]),e.createElementVNode("div",m0,[a[30]||(a[30]=e.createElementVNode("label",null,"图像重复",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":a[10]||(a[10]=t=>h.value.background.repeat=t),class:"config-select"},[...a[29]||(a[29]=[e.createElementVNode("option",{value:"repeat"},"重复",-1),e.createElementVNode("option",{value:"repeat-x"},"X轴重复",-1),e.createElementVNode("option",{value:"repeat-y"},"Y轴重复",-1),e.createElementVNode("option",{value:"no-repeat"},"不重复",-1)])],512),[[e.vModelSelect,h.value.background.repeat]])])]),e.createElementVNode("div",u0,[a[39]||(a[39]=e.createElementVNode("h4",{class:"section-title"},"辅助",-1)),e.createElementVNode("div",g0,[a[33]||(a[33]=e.createElementVNode("label",null,"吸附",-1)),e.createElementVNode("label",E0,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":a[11]||(a[11]=t=>h.value.magnetism.enabled=t)},null,512),[[e.vModelCheckbox,h.value.magnetism.enabled]]),a[32]||(a[32]=e.createElementVNode("span",{class:"slider"},null,-1))])]),e.createElementVNode("div",h0,[a[35]||(a[35]=e.createElementVNode("label",null,"网格",-1)),e.createElementVNode("label",v0,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":a[12]||(a[12]=t=>h.value.grid.enabled=t)},null,512),[[e.vModelCheckbox,h.value.grid.enabled]]),a[34]||(a[34]=e.createElementVNode("span",{class:"slider"},null,-1))])]),e.createElementVNode("div",b0,[a[37]||(a[37]=e.createElementVNode("label",null,"网格对齐",-1)),e.createElementVNode("label",y0,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":a[13]||(a[13]=t=>h.value.snap.enabled=t)},null,512),[[e.vModelCheckbox,h.value.snap.enabled]]),a[36]||(a[36]=e.createElementVNode("span",{class:"slider"},null,-1))])]),h.value.grid.enabled?(e.openBlock(),e.createElementBlock("div",C0,[a[38]||(a[38]=e.createElementVNode("label",null,"网格大小",-1)),e.createElementVNode("div",B0,[e.createElementVNode("button",{onClick:a[14]||(a[14]=t=>l(-5)),class:"adjust-btn"},"-"),e.withDirectives(e.createElementVNode("input",{type:"number","onUpdate:modelValue":a[15]||(a[15]=t=>h.value.grid.size=t),min:5,max:50,class:"config-number"},null,512),[[e.vModelText,h.value.grid.size,void 0,{number:!0}]]),e.createElementVNode("button",{onClick:a[16]||(a[16]=t=>l(5)),class:"adjust-btn"},"+")])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-f309895b"]]),k0={class:"tab-pane"},N0={class:"property-section"},V0={class:"property-item-inline"},D0=["value"],A0={class:"property-item-inline"},_0=["value"],F0={class:"property-item-inline"},$0=["value"],w0={class:"property-section"},S0={class:"property-row"},I0={class:"property-item"},z0=["value"],T0={class:"property-item"},P0=["value"],R0={class:"property-row"},M0={class:"property-item"},H0=["value"],O0={class:"property-item"},U0=["value"],L0={class:"property-section"},W0={class:"property-item-inline"},q0=["value"],G0={class:"property-item-inline"},j0={class:"color-input-wrapper"},X0=["value"],Y0={class:"color-value"},K0={class:"property-item-inline"},J0={class:"color-input-wrapper"},Z0=["value"],Q0={class:"color-value"},ea={class:"property-item-inline"},ta=["value"],oa={class:"property-item-inline"},na=["value"],aa={key:0,class:"property-section"},ra={key:0,class:"property-hint"},la=["value","onInput","placeholder"],sa=["value","onInput","min","max","step"],ia={key:2,class:"color-input-wrapper"},ca=["value","onInput"],da={class:"color-value"},pa={key:3,class:"checkbox-wrapper"},xa=["checked","onChange"],fa={class:"checkbox-label"},ma=["value","onChange"],ua=["value"],Ke=re(e.defineComponent({__name:"BasicPropertiesTab",props:{selectedNode:{},nodePosition:{},nodeSize:{},nodeAttrs:{}},emits:["update-position","update-size","update-label","update-fill","update-stroke","update-stroke-width","update-opacity","update-component-name","update-dynamic-prop"],setup(g,{emit:h}){const o=g,r=h,n=e.computed(()=>{var x,s;if(!((s=(x=o.selectedNode)==null?void 0:x.data)!=null&&s.props))return[];const c=["label","fill","stroke","strokeWidth","opacity"];return o.selectedNode.data.props.filter(a=>!c.includes(a.key))}),l=c=>{if(!c.path)return c.defaultValue;const x=c.path.split(".");let s=o.selectedNode;for(const a of x)if(s&&typeof s=="object")s=s[a];else return c.defaultValue;return s!==void 0?s:c.defaultValue},E=(c,x)=>{const s=x.target;let a;c.type==="number"?a=Number(s.value):c.type==="boolean"?a=s.checked:a=s.value,r("update-dynamic-prop",c.path,a)};return(c,x)=>{var s,a,t,i,m,u,y,k,V,d,p,f,C,b,A,$,S;return e.openBlock(),e.createElementBlock("div",k0,[e.createElementVNode("div",N0,[x[13]||(x[13]=e.createElementVNode("h4",null,"基础信息",-1)),e.createElementVNode("div",V0,[x[10]||(x[10]=e.createElementVNode("label",null,"组件名称",-1)),e.createElementVNode("input",{type:"text",value:((s=g.selectedNode.getData())==null?void 0:s.componentName)||"",onInput:x[0]||(x[0]=B=>c.$emit("update-component-name",B)),placeholder:"请输入组件名称"},null,40,D0)]),e.createElementVNode("div",A0,[x[11]||(x[11]=e.createElementVNode("label",null,"ID",-1)),e.createElementVNode("input",{type:"text",value:g.selectedNode.id,disabled:""},null,8,_0)]),e.createElementVNode("div",F0,[x[12]||(x[12]=e.createElementVNode("label",null,"类型",-1)),e.createElementVNode("input",{type:"text",value:g.selectedNode.shape,disabled:""},null,8,$0)])]),e.createElementVNode("div",w0,[x[18]||(x[18]=e.createElementVNode("h4",null,"位置和尺寸",-1)),e.createElementVNode("div",S0,[e.createElementVNode("div",I0,[x[14]||(x[14]=e.createElementVNode("label",null,"X",-1)),e.createElementVNode("input",{type:"number",value:g.nodePosition.x,onInput:x[1]||(x[1]=B=>c.$emit("update-position","x",B))},null,40,z0)]),e.createElementVNode("div",T0,[x[15]||(x[15]=e.createElementVNode("label",null,"Y",-1)),e.createElementVNode("input",{type:"number",value:g.nodePosition.y,onInput:x[2]||(x[2]=B=>c.$emit("update-position","y",B))},null,40,P0)])]),e.createElementVNode("div",R0,[e.createElementVNode("div",M0,[x[16]||(x[16]=e.createElementVNode("label",null,"宽度",-1)),e.createElementVNode("input",{type:"number",value:g.nodeSize.width,onInput:x[3]||(x[3]=B=>c.$emit("update-size","width",B))},null,40,H0)]),e.createElementVNode("div",O0,[x[17]||(x[17]=e.createElementVNode("label",null,"高度",-1)),e.createElementVNode("input",{type:"number",value:g.nodeSize.height,onInput:x[4]||(x[4]=B=>c.$emit("update-size","height",B))},null,40,U0)])])]),e.createElementVNode("div",L0,[x[24]||(x[24]=e.createElementVNode("h4",null,"样式",-1)),e.createElementVNode("div",W0,[x[19]||(x[19]=e.createElementVNode("label",null,"初始文本",-1)),e.createElementVNode("input",{type:"text",value:((t=(a=g.nodeAttrs)==null?void 0:a.text)==null?void 0:t.text)||((m=(i=g.nodeAttrs)==null?void 0:i.label)==null?void 0:m.text)||g.selectedNode.getProp("label")||"",onInput:x[5]||(x[5]=B=>c.$emit("update-label",B)),placeholder:"设置默认显示文本"},null,40,q0)]),e.createElementVNode("div",G0,[x[20]||(x[20]=e.createElementVNode("label",null,"填充颜色",-1)),e.createElementVNode("div",j0,[e.createElementVNode("input",{type:"color",value:((y=(u=g.nodeAttrs)==null?void 0:u.body)==null?void 0:y.fill)||"#3b82f6",onInput:x[6]||(x[6]=B=>c.$emit("update-fill",B))},null,40,X0),e.createElementVNode("span",Y0,e.toDisplayString(((V=(k=g.nodeAttrs)==null?void 0:k.body)==null?void 0:V.fill)||"#3b82f6"),1)])]),e.createElementVNode("div",K0,[x[21]||(x[21]=e.createElementVNode("label",null,"边框颜色",-1)),e.createElementVNode("div",J0,[e.createElementVNode("input",{type:"color",value:((p=(d=g.nodeAttrs)==null?void 0:d.body)==null?void 0:p.stroke)||"#2563eb",onInput:x[7]||(x[7]=B=>c.$emit("update-stroke",B))},null,40,Z0),e.createElementVNode("span",Q0,e.toDisplayString(((C=(f=g.nodeAttrs)==null?void 0:f.body)==null?void 0:C.stroke)||"#2563eb"),1)])]),e.createElementVNode("div",ea,[x[22]||(x[22]=e.createElementVNode("label",null,"边框宽度",-1)),e.createElementVNode("input",{type:"number",min:"0",max:"10",value:((A=(b=g.nodeAttrs)==null?void 0:b.body)==null?void 0:A.strokeWidth)||2,onInput:x[8]||(x[8]=B=>c.$emit("update-stroke-width",B))},null,40,ta)]),e.createElementVNode("div",oa,[x[23]||(x[23]=e.createElementVNode("label",null,"透明度",-1)),e.createElementVNode("input",{type:"number",min:"0",max:"1",step:"0.1",value:((S=($=g.nodeAttrs)==null?void 0:$.body)==null?void 0:S.opacity)!==void 0?g.nodeAttrs.body.opacity:1,onInput:x[9]||(x[9]=B=>c.$emit("update-opacity",B))},null,40,na)])]),n.value.length>0?(e.openBlock(),e.createElementBlock("div",aa,[x[25]||(x[25]=e.createElementVNode("h4",null,"组件属性",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,B=>(e.openBlock(),e.createElementBlock("div",{key:B.key,class:"property-item-inline"},[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(B.label)+" ",1),B.description?(e.openBlock(),e.createElementBlock("span",ra,e.toDisplayString(B.description),1)):e.createCommentVNode("",!0)]),B.type==="text"?(e.openBlock(),e.createElementBlock("input",{key:0,type:"text",value:l(B),onInput:N=>E(B,N),placeholder:B.defaultValue},null,40,la)):B.type==="number"?(e.openBlock(),e.createElementBlock("input",{key:1,type:"number",value:l(B),onInput:N=>E(B,N),min:B.min,max:B.max,step:B.step},null,40,sa)):B.type==="color"?(e.openBlock(),e.createElementBlock("div",ia,[e.createElementVNode("input",{type:"color",value:l(B),onInput:N=>E(B,N)},null,40,ca),e.createElementVNode("span",da,e.toDisplayString(l(B)),1)])):B.type==="boolean"?(e.openBlock(),e.createElementBlock("div",pa,[e.createElementVNode("input",{type:"checkbox",checked:l(B),onChange:N=>E(B,N)},null,40,xa),e.createElementVNode("span",fa,e.toDisplayString(l(B)?"是":"否"),1)])):B.type==="select"?(e.openBlock(),e.createElementBlock("select",{key:4,value:l(B),onChange:N=>E(B,N)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.options,N=>(e.openBlock(),e.createElementBlock("option",{key:N.value,value:N.value},e.toDisplayString(N.label),9,ua))),128))],40,ma)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])}}}),[["__scopeId","data-v-def84c5f"]]),ga={class:"tab-pane"},Ea={class:"property-section"},ha={class:"property-item-inline"},va=["value"],ba={key:0,class:"property-section"},ya={class:"property-item-inline"},Ca=["value"],Ba={class:"property-item-inline"},ka=["value"],Na={class:"property-item-inline"},Va=["value"],Da={class:"property-item-inline"},Aa=["value"],_a={class:"property-item-inline"},Fa=["value"],$a={class:"property-item-inline"},wa=["value"],Sa={key:1,class:"property-section"},Ia={class:"property-item-inline"},za=["value"],Ta={class:"property-item-inline"},Pa=["value"],Ra={class:"property-item-inline"},Ma=["value"],Ha={class:"property-item-inline"},Oa=["value"],Ua={class:"property-item-inline"},La=["value"],Wa={class:"property-item-inline"},qa=["value"],Ga={key:2,class:"property-section"},ja={class:"property-item-inline"},Xa=["value"],Ya={class:"property-item-inline"},Ka=["value"],Ja={class:"property-item-inline"},Za=["value"],Qa={class:"property-item-inline"},er=["value"],tr={class:"property-item-inline"},or={class:"checkbox-wrapper"},nr=["checked"],ar={class:"checkbox-label"},rr={key:3,class:"property-section"},lr={class:"property-item-inline"},sr=["value"],ir={class:"property-item-inline"},cr=["value"],dr={class:"property-item-inline"},pr=["value"],xr={key:4,class:"property-section"},fr={class:"property-item-inline"},mr=["value"],ur={class:"property-item-inline"},gr=["value"],Er={key:5,class:"property-section"},hr={class:"property-item-inline"},vr={class:"checkbox-wrapper"},br=["checked"],yr={class:"checkbox-label"},Cr={class:"property-item-inline"},Br=["value"],kr=re(e.defineComponent({__name:"DataPropertiesTab",props:{selectedNode:{}},emits:["update-data-source"],setup(g,{emit:h}){const o=g,r=h,n=e.ref({type:"none",enabled:!0,retryCount:3});e.watch(()=>o.selectedNode,a=>{if(a){const t=a.getData();t!=null&&t.dataSource?n.value={...t.dataSource}:n.value={type:"none",enabled:!0,retryCount:3}}},{immediate:!0});const l=a=>{const t=a.target.value;let i={type:t,enabled:!0,retryCount:3};t==="http"?(i.pollInterval=5e3,i.method="GET"):t==="sse"&&(i.autoReconnect=!0),n.value=i,s()},E=(a,t)=>{const i=t.target;let m;i.type==="number"?m=Number(i.value):m=i.value,n.value={...n.value,[a]:m},s()},c=(a,t)=>{const i=t.target.checked;n.value={...n.value,[a]:i},s()},x=a=>{const t=a.target.checked;n.value={...n.value,enabled:t},s()},s=()=>{r("update-data-source",n.value)};return(a,t)=>(e.openBlock(),e.createElementBlock("div",ga,[e.createElementVNode("div",Ea,[t[25]||(t[25]=e.createElementVNode("h4",null,"数据来源",-1)),e.createElementVNode("div",ha,[t[24]||(t[24]=e.createElementVNode("label",null,"来源类型",-1)),e.createElementVNode("select",{value:n.value.type,onChange:l},[...t[23]||(t[23]=[e.createStaticVNode('<option value="none" data-v-5b515f8a>无数据源</option><option value="mqtt" data-v-5b515f8a>MQTT</option><option value="websocket" data-v-5b515f8a>WebSocket</option><option value="http" data-v-5b515f8a>HTTP</option><option value="sse" data-v-5b515f8a>SSE</option><option value="static" data-v-5b515f8a>静态数据</option>',6)])],40,va)])]),n.value.type==="mqtt"?(e.openBlock(),e.createElementBlock("div",ba,[t[32]||(t[32]=e.createElementVNode("h4",null,"MQTT配置",-1)),e.createElementVNode("div",ya,[t[26]||(t[26]=e.createElementVNode("label",null,"服务器",-1)),e.createElementVNode("input",{type:"text",value:n.value.broker||"",onInput:t[0]||(t[0]=i=>E("broker",i)),placeholder:"mqtt://localhost:1883"},null,40,Ca)]),e.createElementVNode("div",Ba,[t[27]||(t[27]=e.createElementVNode("label",null,"客户端ID",-1)),e.createElementVNode("input",{type:"text",value:n.value.clientId||"",onInput:t[1]||(t[1]=i=>E("clientId",i)),placeholder:"自动生成"},null,40,ka)]),e.createElementVNode("div",Na,[t[28]||(t[28]=e.createElementVNode("label",null,"订阅主题",-1)),e.createElementVNode("input",{type:"text",value:n.value.topic||"",onInput:t[2]||(t[2]=i=>E("topic",i)),placeholder:"例如: sensor/temperature"},null,40,Va)]),e.createElementVNode("div",Da,[t[29]||(t[29]=e.createElementVNode("label",null,"用户名",-1)),e.createElementVNode("input",{type:"text",value:n.value.username||"",onInput:t[3]||(t[3]=i=>E("username",i)),placeholder:"可选"},null,40,Aa)]),e.createElementVNode("div",_a,[t[30]||(t[30]=e.createElementVNode("label",null,"密码",-1)),e.createElementVNode("input",{type:"password",value:n.value.password||"",onInput:t[4]||(t[4]=i=>E("password",i)),placeholder:"可选"},null,40,Fa)]),e.createElementVNode("div",$a,[t[31]||(t[31]=e.createElementVNode("label",null,"数据路径",-1)),e.createElementVNode("input",{type:"text",value:n.value.dataPath||"",onInput:t[5]||(t[5]=i=>E("dataPath",i)),placeholder:"例如: value"},null,40,wa)])])):e.createCommentVNode("",!0),n.value.type==="http"?(e.openBlock(),e.createElementBlock("div",Sa,[t[40]||(t[40]=e.createElementVNode("h4",null,"HTTP配置",-1)),e.createElementVNode("div",Ia,[t[33]||(t[33]=e.createElementVNode("label",null,"接口地址",-1)),e.createElementVNode("input",{type:"text",value:n.value.url||"",onInput:t[6]||(t[6]=i=>E("url",i)),placeholder:"https://api.example.com/data"},null,40,za)]),e.createElementVNode("div",Ta,[t[35]||(t[35]=e.createElementVNode("label",null,"请求方法",-1)),e.createElementVNode("select",{value:n.value.method||"GET",onChange:t[7]||(t[7]=i=>E("method",i))},[...t[34]||(t[34]=[e.createElementVNode("option",{value:"GET"},"GET",-1),e.createElementVNode("option",{value:"POST"},"POST",-1),e.createElementVNode("option",{value:"PUT"},"PUT",-1),e.createElementVNode("option",{value:"DELETE"},"DELETE",-1)])],40,Pa)]),e.createElementVNode("div",Ra,[t[36]||(t[36]=e.createElementVNode("label",null,"请求头",-1)),e.createElementVNode("input",{type:"text",value:n.value.headers||"",onInput:t[8]||(t[8]=i=>E("headers",i)),placeholder:"JSON格式"},null,40,Ma)]),e.createElementVNode("div",Ha,[t[37]||(t[37]=e.createElementVNode("label",null,"请求体",-1)),e.createElementVNode("input",{type:"text",value:n.value.body||"",onInput:t[9]||(t[9]=i=>E("body",i)),placeholder:"POST/PUT请求的数据"},null,40,Oa)]),e.createElementVNode("div",Ua,[t[38]||(t[38]=e.createElementVNode("label",null,"数据路径",-1)),e.createElementVNode("input",{type:"text",value:n.value.dataPath||"",onInput:t[10]||(t[10]=i=>E("dataPath",i)),placeholder:"例如: data.value"},null,40,La)]),e.createElementVNode("div",Wa,[t[39]||(t[39]=e.createElementVNode("label",null,"轮询间隔(ms)",-1)),e.createElementVNode("input",{type:"number",value:n.value.pollInterval||5e3,onInput:t[11]||(t[11]=i=>E("pollInterval",i)),min:"1000",step:"1000"},null,40,qa)])])):e.createCommentVNode("",!0),n.value.type==="sse"?(e.openBlock(),e.createElementBlock("div",Ga,[t[46]||(t[46]=e.createElementVNode("h4",null,"SSE配置",-1)),e.createElementVNode("div",ja,[t[41]||(t[41]=e.createElementVNode("label",null,"服务地址",-1)),e.createElementVNode("input",{type:"text",value:n.value.sseUrl||"",onInput:t[12]||(t[12]=i=>E("sseUrl",i)),placeholder:"https://api.example.com/events"},null,40,Xa)]),e.createElementVNode("div",Ya,[t[42]||(t[42]=e.createElementVNode("label",null,"事件类型",-1)),e.createElementVNode("input",{type:"text",value:n.value.eventType||"",onInput:t[13]||(t[13]=i=>E("eventType",i)),placeholder:"留空表示所有事件"},null,40,Ka)]),e.createElementVNode("div",Ja,[t[43]||(t[43]=e.createElementVNode("label",null,"请求头",-1)),e.createElementVNode("input",{type:"text",value:n.value.headers||"",onInput:t[14]||(t[14]=i=>E("headers",i)),placeholder:"JSON格式"},null,40,Za)]),e.createElementVNode("div",Qa,[t[44]||(t[44]=e.createElementVNode("label",null,"数据路径",-1)),e.createElementVNode("input",{type:"text",value:n.value.dataPath||"",onInput:t[15]||(t[15]=i=>E("dataPath",i)),placeholder:"例如: data.value"},null,40,er)]),e.createElementVNode("div",tr,[t[45]||(t[45]=e.createElementVNode("label",null,"自动重连",-1)),e.createElementVNode("div",or,[e.createElementVNode("input",{type:"checkbox",checked:n.value.autoReconnect!==!1,onChange:t[16]||(t[16]=i=>c("autoReconnect",i))},null,40,nr),e.createElementVNode("span",ar,e.toDisplayString(n.value.autoReconnect!==!1?"是":"否"),1)])])])):e.createCommentVNode("",!0),n.value.type==="websocket"?(e.openBlock(),e.createElementBlock("div",rr,[t[50]||(t[50]=e.createElementVNode("h4",null,"WebSocket配置",-1)),e.createElementVNode("div",lr,[t[47]||(t[47]=e.createElementVNode("label",null,"服务地址",-1)),e.createElementVNode("input",{type:"text",value:n.value.wsUrl||"",onInput:t[17]||(t[17]=i=>E("wsUrl",i)),placeholder:"ws://localhost:8080"},null,40,sr)]),e.createElementVNode("div",ir,[t[48]||(t[48]=e.createElementVNode("label",null,"订阅主题",-1)),e.createElementVNode("input",{type:"text",value:n.value.topic||"",onInput:t[18]||(t[18]=i=>E("topic",i)),placeholder:"例如: device/status"},null,40,cr)]),e.createElementVNode("div",dr,[t[49]||(t[49]=e.createElementVNode("label",null,"数据路径",-1)),e.createElementVNode("input",{type:"text",value:n.value.dataPath||"",onInput:t[19]||(t[19]=i=>E("dataPath",i)),placeholder:"例如: payload.value"},null,40,pr)])])):e.createCommentVNode("",!0),n.value.type==="static"?(e.openBlock(),e.createElementBlock("div",xr,[t[54]||(t[54]=e.createElementVNode("h4",null,"静态数据配置",-1)),e.createElementVNode("div",fr,[t[51]||(t[51]=e.createElementVNode("label",null,"数据值",-1)),e.createElementVNode("input",{type:"text",value:n.value.value||"",onInput:t[20]||(t[20]=i=>E("value",i)),placeholder:"请输入数据值"},null,40,mr)]),e.createElementVNode("div",ur,[t[53]||(t[53]=e.createElementVNode("label",null,"数据类型",-1)),e.createElementVNode("select",{value:n.value.valueType||"string",onChange:t[21]||(t[21]=i=>E("valueType",i))},[...t[52]||(t[52]=[e.createElementVNode("option",{value:"string"},"字符串",-1),e.createElementVNode("option",{value:"number"},"数字",-1),e.createElementVNode("option",{value:"boolean"},"布尔值",-1),e.createElementVNode("option",{value:"json"},"JSON对象",-1)])],40,gr)])])):e.createCommentVNode("",!0),n.value.type!=="none"?(e.openBlock(),e.createElementBlock("div",Er,[t[57]||(t[57]=e.createElementVNode("h4",null,"通用配置",-1)),e.createElementVNode("div",hr,[t[55]||(t[55]=e.createElementVNode("label",null,"启用状态",-1)),e.createElementVNode("div",vr,[e.createElementVNode("input",{type:"checkbox",checked:n.value.enabled!==!1,onChange:x},null,40,br),e.createElementVNode("span",yr,e.toDisplayString(n.value.enabled!==!1?"启用":"禁用"),1)])]),e.createElementVNode("div",Cr,[t[56]||(t[56]=e.createElementVNode("label",null,"错误重试",-1)),e.createElementVNode("input",{type:"number",value:n.value.retryCount||3,onInput:t[22]||(t[22]=i=>E("retryCount",i)),min:"0",max:"10"},null,40,Br)])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-5b515f8a"]]),Nr={class:"edge-properties-tab"},Vr={class:"property-section"},Dr={class:"property-item"},Ar={class:"color-input-wrapper"},_r=["value"],Fr=["value"],$r={class:"property-item"},wr={class:"number-input-wrapper"},Sr=["value"],Ir={class:"property-item"},zr=["value"],Tr={class:"property-item"},Pr={class:"slider-wrapper"},Rr=["value"],Mr={class:"slider-value"},Hr={class:"property-item"},Or=["value"],Ur={key:0,class:"property-item"},Lr={class:"number-input-wrapper"},Wr=["value"],qr={class:"property-section"},Gr={class:"property-item"},jr=["value"],Xr={class:"property-item"},Yr=["value"],Kr={class:"property-section"},Jr={class:"property-item"},Zr=["value"],Qr={class:"property-item"},el=["value"],tl=re(e.defineComponent({__name:"EdgePropertiesTab",props:{selectedEdge:{}},emits:["updateEdge","deleteEdge"],setup(g,{emit:h}){const o=g,r=h,n=e.computed(()=>{var C;return((C=o.selectedEdge)==null?void 0:C.getAttrs())||{}}),l=C=>{const b=C.target.value;r("updateEdge",{attrs:{line:{stroke:b}}})},E=C=>{const b=Number(C.target.value);r("updateEdge",{attrs:{line:{strokeWidth:b}}})},c=()=>{var b;const C=(b=n.value.line)==null?void 0:b.strokeDasharray;return C?C==="5,5"?"5,5":C==="2,2"?"2,2":C==="10,5,2,5"?"10,5,2,5":"none":"none"},x=C=>{const b=C.target.value;r("updateEdge",{attrs:{line:{strokeDasharray:b==="none"?void 0:b}}})},s=C=>{const b=Number(C.target.value);r("updateEdge",{attrs:{line:{opacity:b}}})},a=C=>{var A;const b=(A=n.value.line)==null?void 0:A[`${C}Marker`];return!b||typeof b!="object"||!b.name?"none":b.name},t=()=>{var A;const C=(A=n.value.line)==null?void 0:A.opacity;return((C!==void 0&&typeof C=="number"?C:1)*100).toFixed(0)},i=C=>{const b=C.target.value;r("updateEdge",{attrs:{line:{sourceMarker:b==="none"?void 0:{name:b,width:8,height:6}}}})},m=C=>{const b=C.target.value;r("updateEdge",{attrs:{line:{targetMarker:b==="none"?void 0:{name:b,width:8,height:6}}}})},u=C=>{const b=C.target.value;r("updateEdge",{router:b})},y=C=>{const b=C.target.value;r("updateEdge",{connector:{name:b,args:b==="rounded"?{radius:8}:void 0}})},k=()=>{r("deleteEdge")},V=()=>{var b,A;const C=(A=(b=o.selectedEdge)==null?void 0:b.data)==null?void 0:A.animation;return C!=null&&C.enabled?"true":"false"},d=()=>{var b,A;const C=(A=(b=o.selectedEdge)==null?void 0:b.data)==null?void 0:A.animation;return C!=null&&C.duration?C.duration/1e3:2},p=C=>{if(!(C.target.value==="true"))r("updateEdge",{data:{animation:{enabled:!1}},animation:{enabled:!1}});else{const A=d()*1e3;r("updateEdge",{data:{animation:{enabled:!0,duration:A}},animation:{enabled:!0,duration:A}})}},f=C=>{const A=Number(C.target.value)*1e3;r("updateEdge",{data:{animation:{enabled:!0,duration:A}},animation:{enabled:!0,duration:A}})};return(C,b)=>{var A,$,S,B,N,w,I,R;return e.openBlock(),e.createElementBlock("div",Nr,[e.createElementVNode("div",Vr,[b[10]||(b[10]=e.createElementVNode("h4",{class:"section-title"},"线条样式",-1)),e.createElementVNode("div",Dr,[b[0]||(b[0]=e.createElementVNode("label",{class:"property-label"},"线条颜色",-1)),e.createElementVNode("div",Ar,[e.createElementVNode("input",{type:"color",class:"color-input",value:((A=n.value.line)==null?void 0:A.stroke)||"#10b981",onInput:l},null,40,_r),e.createElementVNode("input",{type:"text",class:"color-text",value:(($=n.value.line)==null?void 0:$.stroke)||"#10b981",onInput:l},null,40,Fr)])]),e.createElementVNode("div",$r,[b[2]||(b[2]=e.createElementVNode("label",{class:"property-label"},"线条粗细",-1)),e.createElementVNode("div",wr,[e.createElementVNode("input",{type:"number",class:"property-input",min:"1",max:"20",step:"1",value:((S=n.value.line)==null?void 0:S.strokeWidth)||2,onInput:E},null,40,Sr),b[1]||(b[1]=e.createElementVNode("span",{class:"input-unit"},"px",-1))])]),e.createElementVNode("div",Ir,[b[4]||(b[4]=e.createElementVNode("label",{class:"property-label"},"线条样式",-1)),e.createElementVNode("select",{class:"property-select",value:c(),onChange:x},[...b[3]||(b[3]=[e.createElementVNode("option",{value:"none"},"实线",-1),e.createElementVNode("option",{value:"5,5"},"虚线",-1),e.createElementVNode("option",{value:"2,2"},"点线",-1),e.createElementVNode("option",{value:"10,5,2,5"},"点划线",-1)])],40,zr)]),e.createElementVNode("div",Tr,[b[5]||(b[5]=e.createElementVNode("label",{class:"property-label"},"透明度",-1)),e.createElementVNode("div",Pr,[e.createElementVNode("input",{type:"range",class:"property-slider",min:"0",max:"1",step:"0.1",value:((B=n.value.line)==null?void 0:B.opacity)!==void 0?n.value.line.opacity:1,onInput:s},null,40,Rr),e.createElementVNode("span",Mr,e.toDisplayString(t())+"%",1)])]),e.createElementVNode("div",Hr,[b[7]||(b[7]=e.createElementVNode("label",{class:"property-label"},"流动动画",-1)),e.createElementVNode("select",{class:"property-select",value:V(),onChange:p},[...b[6]||(b[6]=[e.createElementVNode("option",{value:"false"},"关闭",-1),e.createElementVNode("option",{value:"true"},"开启",-1)])],40,Or)]),V()==="true"?(e.openBlock(),e.createElementBlock("div",Ur,[b[9]||(b[9]=e.createElementVNode("label",{class:"property-label"},"动画速度",-1)),e.createElementVNode("div",Lr,[e.createElementVNode("input",{type:"number",class:"property-input",min:"0.5",max:"10",step:"0.5",value:d(),onInput:f},null,40,Wr),b[8]||(b[8]=e.createElementVNode("span",{class:"input-unit"},"秒",-1))])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",qr,[b[15]||(b[15]=e.createElementVNode("h4",{class:"section-title"},"箭头样式",-1)),e.createElementVNode("div",Gr,[b[12]||(b[12]=e.createElementVNode("label",{class:"property-label"},"起点箭头",-1)),e.createElementVNode("select",{class:"property-select",value:a("source"),onChange:i},[...b[11]||(b[11]=[e.createStaticVNode('<option value="none" data-v-e47f1784>无</option><option value="block" data-v-e47f1784>实心箭头</option><option value="classic" data-v-e47f1784>经典箭头</option><option value="diamond" data-v-e47f1784>菱形</option><option value="circle" data-v-e47f1784>圆形</option>',5)])],40,jr)]),e.createElementVNode("div",Xr,[b[14]||(b[14]=e.createElementVNode("label",{class:"property-label"},"终点箭头",-1)),e.createElementVNode("select",{class:"property-select",value:a("target"),onChange:m},[...b[13]||(b[13]=[e.createStaticVNode('<option value="none" data-v-e47f1784>无</option><option value="block" data-v-e47f1784>实心箭头</option><option value="classic" data-v-e47f1784>经典箭头</option><option value="diamond" data-v-e47f1784>菱形</option><option value="circle" data-v-e47f1784>圆形</option>',5)])],40,Yr)])]),e.createElementVNode("div",Kr,[b[20]||(b[20]=e.createElementVNode("h4",{class:"section-title"},"连接器",-1)),e.createElementVNode("div",Jr,[b[17]||(b[17]=e.createElementVNode("label",{class:"property-label"},"路由方式",-1)),e.createElementVNode("select",{class:"property-select",value:((w=(N=g.selectedEdge)==null?void 0:N.getRouter())==null?void 0:w.name)||"manhattan",onChange:u},[...b[16]||(b[16]=[e.createElementVNode("option",{value:"manhattan"},"曼哈顿",-1),e.createElementVNode("option",{value:"orth"},"正交",-1),e.createElementVNode("option",{value:"normal"},"直线",-1)])],40,Zr)]),e.createElementVNode("div",Qr,[b[19]||(b[19]=e.createElementVNode("label",{class:"property-label"},"连接器类型",-1)),e.createElementVNode("select",{class:"property-select",value:((R=(I=g.selectedEdge)==null?void 0:I.getConnector())==null?void 0:R.name)||"rounded",onChange:y},[...b[18]||(b[18]=[e.createElementVNode("option",{value:"rounded"},"圆角",-1),e.createElementVNode("option",{value:"smooth"},"平滑",-1),e.createElementVNode("option",{value:"normal"},"普通",-1)])],40,el)])]),e.createElementVNode("div",{class:"property-section"},[e.createElementVNode("button",{class:"delete-btn",onClick:k}," 删除连线 ")])])}}}),[["__scopeId","data-v-e47f1784"]]),ol={class:"event-card"},nl={class:"header-left"},al={class:"collapse-icon"},rl={class:"event-title"},ll={class:"event-card-body"},sl={class:"event-field"},il=["value"],cl={class:"event-field"},dl=["value"],pl={class:"event-field"},xl=["value"],fl={class:"condition-config"},ml=["value"],ul=["value"],gl=["value"],El=["value"],hl={key:0,class:"config-section"},vl={key:1,class:"config-section"},bl={key:2,class:"config-section"},yl={key:0,class:"selected-workflow-info"},Cl={class:"info-row"},Bl={class:"info-value"},kl={class:"event-field"},Nl=["value"],Je=re(e.defineComponent({__name:"EventCard",props:{event:{},index:{},isCollapsed:{type:Boolean},nodeProperties:{}},emits:["toggle-collapse","remove","update-field","update-condition","update-params","open-attribute-config","open-custom-code","open-workflow-selector"],setup(g){return(h,o)=>{var r,n,l,E,c,x,s;return e.openBlock(),e.createElementBlock("div",ol,[e.createElementVNode("div",{class:"event-card-header",onClick:o[1]||(o[1]=a=>h.$emit("toggle-collapse"))},[e.createElementVNode("div",nl,[e.createElementVNode("span",al,e.toDisplayString(g.isCollapsed?"▶":"▼"),1),e.createElementVNode("span",rl,"事件"+e.toDisplayString(g.index+1),1)]),e.createElementVNode("button",{class:"btn-remove",onClick:o[0]||(o[0]=e.withModifiers(a=>h.$emit("remove"),["stop"])),title:"删除事件"},"🗑")]),e.withDirectives(e.createElementVNode("div",ll,[e.createElementVNode("div",sl,[o[12]||(o[12]=e.createElementVNode("label",null,"事件名称",-1)),e.createElementVNode("input",{type:"text",value:g.event.name||"",onInput:o[2]||(o[2]=a=>h.$emit("update-field","name",a)),placeholder:"输入事件名称,如:温度报警、湿度预警"},null,40,il)]),e.createElementVNode("div",cl,[o[14]||(o[14]=e.createElementVNode("label",null,"事件类型",-1)),e.createElementVNode("select",{value:g.event.type,onChange:o[3]||(o[3]=a=>h.$emit("update-field","type",a))},[...o[13]||(o[13]=[e.createStaticVNode('<option value="click" data-v-af7c633a>单击</option><option value="dblclick" data-v-af7c633a>双击</option><option value="mouseenter" data-v-af7c633a>鼠标移入</option><option value="mouseleave" data-v-af7c633a>鼠标移出</option><option value="focus" data-v-af7c633a>获取焦点</option><option value="blur" data-v-af7c633a>失去焦点</option><option value="input" data-v-af7c633a>输入</option><option value="change" data-v-af7c633a>值变化</option>',8)])],40,dl)]),e.createElementVNode("div",pl,[o[16]||(o[16]=e.createElementVNode("label",null,"事件行为",-1)),e.createElementVNode("select",{value:g.event.action,onChange:o[4]||(o[4]=a=>h.$emit("update-field","action",a))},[...o[15]||(o[15]=[e.createElementVNode("option",{value:"attributeChange"},"更改属性",-1),e.createElementVNode("option",{value:"customCode"},"自定义代码",-1),e.createElementVNode("option",{value:"callProcess"},"调用流程",-1)])],40,xl)]),o[30]||(o[30]=e.createElementVNode("div",{class:"section-title"},"形参配置",-1)),o[31]||(o[31]=e.createElementVNode("div",{class:"field-hint"},"(不填直接触发)",-1)),o[32]||(o[32]=e.createElementVNode("div",{class:"section-title"},"触发规则",-1)),o[33]||(o[33]=e.createElementVNode("div",{class:"field-hint"},"(不填写条件则直接触发,填写后按条件触发)",-1)),e.createElementVNode("div",fl,[o[19]||(o[19]=e.createElementVNode("div",{class:"condition-label"},"当",-1)),o[20]||(o[20]=e.createElementVNode("div",{class:"condition-label"},"当前节点属性",-1)),e.createElementVNode("select",{class:"condition-select",value:((r=g.event.condition)==null?void 0:r.attribute)||"",onChange:o[5]||(o[5]=a=>h.$emit("update-condition","attribute",a))},[o[17]||(o[17]=e.createElementVNode("option",{value:""},"选择属性",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.nodeProperties,a=>(e.openBlock(),e.createElementBlock("option",{key:a.key,value:a.key},e.toDisplayString(a.label),9,ul))),128))],40,ml),o[21]||(o[21]=e.createElementVNode("div",{class:"condition-label"},"运算符",-1)),e.createElementVNode("select",{class:"condition-select",value:((n=g.event.condition)==null?void 0:n.operator)||"==",onChange:o[6]||(o[6]=a=>h.$emit("update-condition","operator",a))},[...o[18]||(o[18]=[e.createStaticVNode('<option value="==" data-v-af7c633a>等于</option><option value="!=" data-v-af7c633a>不等于</option><option value="&gt;" data-v-af7c633a>大于</option><option value="&gt;=" data-v-af7c633a>大于等于</option><option value="&lt;" data-v-af7c633a>小于</option><option value="&lt;=" data-v-af7c633a>小于等于</option><option value="contains" data-v-af7c633a>包含</option>',7)])],40,gl),o[22]||(o[22]=e.createElementVNode("div",{class:"condition-label"},"值",-1)),e.createElementVNode("input",{type:"text",class:"condition-input",value:((l=g.event.condition)==null?void 0:l.value)||"",onInput:o[7]||(o[7]=a=>h.$emit("update-condition","value",a)),placeholder:"输入值"},null,40,El),o[23]||(o[23]=e.createElementVNode("div",{class:"condition-label"},"时",-1)),o[24]||(o[24]=e.createElementVNode("div",{class:"condition-label"},"触发该事件",-1))]),g.event.action==="attributeChange"?(e.openBlock(),e.createElementBlock("div",hl,[o[25]||(o[25]=e.createElementVNode("div",{class:"section-title"},"属性更改",-1)),e.createElementVNode("button",{class:"btn-config",onClick:o[8]||(o[8]=a=>h.$emit("open-attribute-config"))},"点击配置")])):e.createCommentVNode("",!0),g.event.action==="customCode"?(e.openBlock(),e.createElementBlock("div",vl,[o[26]||(o[26]=e.createElementVNode("div",{class:"section-title"},"自定义代码",-1)),e.createElementVNode("button",{class:"btn-config",onClick:o[9]||(o[9]=a=>h.$emit("open-custom-code"))},"点击配置")])):e.createCommentVNode("",!0),g.event.action==="callProcess"?(e.openBlock(),e.createElementBlock("div",bl,[o[29]||(o[29]=e.createElementVNode("div",{class:"section-title"},"调用流程",-1)),e.createElementVNode("button",{class:"btn-config",onClick:o[10]||(o[10]=a=>h.$emit("open-workflow-selector"))},"选择流程"),(E=g.event.params)!=null&&E.processId?(e.openBlock(),e.createElementBlock("div",yl,[e.createElementVNode("div",Cl,[o[27]||(o[27]=e.createElementVNode("span",{class:"info-label"},"已选择:",-1)),e.createElementVNode("span",Bl,e.toDisplayString(((c=g.event.params)==null?void 0:c.processName)||((x=g.event.params)==null?void 0:x.processId)),1)]),e.createElementVNode("div",kl,[o[28]||(o[28]=e.createElementVNode("label",null,"传入参数",-1)),e.createElementVNode("textarea",{value:((s=g.event.params)==null?void 0:s.processParams)||"",onInput:o[11]||(o[11]=a=>h.$emit("update-params","processParams",a)),placeholder:'JSON格式: {"param1":"value1","param2":"value2"}',rows:"3"},null,40,Nl)])])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],512),[[e.vShow,!g.isCollapsed]])])}}}),[["__scopeId","data-v-af7c633a"]]);var pe=(g=>(g.BOOLEAN="boolean",g.NUMBER="number",g.STRING="string",g))(pe||{}),xe=(g=>(g.READ="read",g.WRITE="write",g.READ_WRITE="readWrite",g))(xe||{}),Me=(g=>(g.ONLINE="online",g.OFFLINE="offline",g.ERROR="error",g.MAINTENANCE="maintenance",g))(Me||{}),He=(g=>(g.PLC="plc",g.SENSOR="sensor",g.ACTUATOR="actuator",g.METER="meter",g.CAMERA="camera",g.OTHER="other",g))(He||{});const Ze=[{id:"device_001",name:"1号温控设备",code:"TC-001",type:He.PLC,description:"车间1号温控PLC",status:Me.ONLINE,ipAddress:"192.168.1.101",port:502,protocol:"Modbus TCP",enabled:!0,tags:["车间1","温控","PLC"],points:[{id:"point_001_01",name:"当前温度",code:"40001",description:"实时温度采集",dataType:pe.NUMBER,accessMode:xe.READ,value:25.5,unit:"°C",minValue:-20,maxValue:100,precision:1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_001_02",name:"设定温度",code:"40002",description:"目标温度设定值",dataType:pe.NUMBER,accessMode:xe.READ_WRITE,value:28,unit:"°C",minValue:0,maxValue:50,precision:1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_001_03",name:"加热状态",code:"40003",description:"加热器运行状态",dataType:pe.BOOLEAN,accessMode:xe.READ,value:!0,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_001_04",name:"告警状态",code:"40004",description:"设备告警状态",dataType:pe.BOOLEAN,accessMode:xe.READ,value:!1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"}],createTime:"2025-01-01 00:00:00",updateTime:"2025-12-17 08:15:00"},{id:"device_002",name:"主管道压力传感器",code:"PS-001",type:He.SENSOR,description:"主管道压力监测",status:Me.ONLINE,ipAddress:"192.168.1.102",port:502,protocol:"Modbus TCP",enabled:!0,tags:["管道","压力","传感器"],points:[{id:"point_002_01",name:"当前压力",code:"40001",description:"实时压力值",dataType:pe.NUMBER,accessMode:xe.READ,value:1.25,unit:"MPa",minValue:0,maxValue:5,precision:2,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_002_02",name:"压力上限",code:"40002",description:"压力告警上限",dataType:pe.NUMBER,accessMode:xe.READ_WRITE,value:2,unit:"MPa",minValue:0,maxValue:5,precision:2,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_002_03",name:"压力下限",code:"40003",description:"压力告警下限",dataType:pe.NUMBER,accessMode:xe.READ_WRITE,value:.5,unit:"MPa",minValue:0,maxValue:5,precision:2,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"}],createTime:"2025-01-01 00:00:00",updateTime:"2025-12-17 08:15:00"},{id:"device_003",name:"1号电机控制器",code:"MC-001",type:He.ACTUATOR,description:"主传送带电机控制",status:Me.ONLINE,ipAddress:"192.168.1.103",port:502,protocol:"Modbus TCP",enabled:!0,tags:["电机","控制器","传送带"],points:[{id:"point_003_01",name:"运行状态",code:"40001",description:"电机运行状态",dataType:pe.BOOLEAN,accessMode:xe.READ,value:!0,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_02",name:"启动命令",code:"40002",description:"电机启动控制",dataType:pe.BOOLEAN,accessMode:xe.WRITE,value:!1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_03",name:"停止命令",code:"40003",description:"电机停止控制",dataType:pe.BOOLEAN,accessMode:xe.WRITE,value:!1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_04",name:"当前转速",code:"40004",description:"电机实时转速",dataType:pe.NUMBER,accessMode:xe.READ,value:1450,unit:"RPM",minValue:0,maxValue:3e3,precision:0,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_05",name:"设定转速",code:"40005",description:"目标转速设定",dataType:pe.NUMBER,accessMode:xe.READ_WRITE,value:1500,unit:"RPM",minValue:0,maxValue:3e3,precision:0,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_06",name:"电流",code:"40006",description:"电机运行电流",dataType:pe.NUMBER,accessMode:xe.READ,value:12.5,unit:"A",minValue:0,maxValue:50,precision:1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"}],createTime:"2025-01-01 00:00:00",updateTime:"2025-12-17 08:15:00"},{id:"device_004",name:"进水流量计",code:"FM-001",type:He.METER,description:"进水管道流量监测",status:Me.OFFLINE,ipAddress:"192.168.1.104",port:502,protocol:"Modbus TCP",enabled:!0,tags:["流量","仪表","进水"],points:[{id:"point_004_01",name:"瞬时流量",code:"40001",description:"当前流量值",dataType:pe.NUMBER,accessMode:xe.READ,value:0,unit:"m³/h",minValue:0,maxValue:100,precision:2,enabled:!0,quality:"bad",updateTime:"2025-12-17 07:30:00"},{id:"point_004_02",name:"累计流量",code:"40002",description:"累计流量统计",dataType:pe.NUMBER,accessMode:xe.READ,value:12345.67,unit:"m³",minValue:0,maxValue:999999,precision:2,enabled:!0,quality:"bad",updateTime:"2025-12-17 07:30:00"}],createTime:"2025-01-01 00:00:00",updateTime:"2025-12-17 07:30:00"}];Ze.length;const Qt=g=>Ze.find(h=>h.id===g),Vl=(g,h)=>{const o=Qt(g);if(o)return o.points.find(r=>r.id===h)},Dl={class:"device-point-selector"},Al={class:"device-list-panel"},_l={class:"panel-header"},Fl={class:"device-count"},$l={class:"search-box"},wl={class:"device-list"},Sl=["onClick"],Il={class:"device-info"},zl={class:"device-name"},Tl={class:"device-meta"},Pl={class:"device-code"},Rl={class:"point-count"},Ml={key:0,class:"empty-hint"},Hl={class:"point-list-panel"},Ol={class:"panel-header"},Ul={key:0,class:"point-count"},Ll={key:0,class:"search-box"},Wl={class:"point-list"},ql={key:0,class:"empty-hint"},Gl={key:1,class:"empty-hint"},jl=["onClick"],Xl={class:"point-info"},Yl={class:"point-name"},Kl={class:"point-meta"},Jl={class:"point-code"},Zl={key:0,class:"point-unit"},Ql={class:"point-type"},es={key:0,class:"point-value"},ts={class:"value"},os={class:"modal-footer"},ns=["disabled"],as=re(e.defineComponent({__name:"DevicePointSelector",props:{visible:{type:Boolean},modelValue:{}},emits:["update:visible","update:modelValue","confirm"],setup(g,{emit:h}){const o=g,r=h,n=e.ref(Ze),l=e.ref(null),E=e.ref(null),c=e.ref(""),x=e.ref("");if(o.modelValue){const[d,p]=o.modelValue.split(":"),f=n.value.find(C=>C.id===d);f&&(l.value=f,E.value=f.points.find(C=>C.id===p)||null)}const s=e.computed(()=>{if(!c.value)return n.value;const d=c.value.toLowerCase();return n.value.filter(p=>p.name.toLowerCase().includes(d)||p.code.toLowerCase().includes(d))}),a=e.computed(()=>{if(!l.value)return[];if(!x.value)return l.value.points;const d=x.value.toLowerCase();return l.value.points.filter(p=>p.name.toLowerCase().includes(d)||p.code.toLowerCase().includes(d))}),t=d=>{l.value=d,E.value=null,x.value=""},i=d=>{d.enabled&&(E.value=d)},m=()=>{r("update:visible",!1)},u=()=>{if(!l.value||!E.value)return;const d=`${l.value.id}:${E.value.id}`;r("update:modelValue",d),r("confirm",l.value.id,E.value.id,l.value,E.value),r("update:visible",!1)},y=d=>({read:"只读",write:"只写",readWrite:"读写"})[d]||d,k=d=>({boolean:"布尔",number:"数值",string:"字符",json:"JSON"})[d]||d,V=d=>d.value===void 0||d.value===null?"-":d.dataType==="boolean"?d.value?"是":"否":d.dataType==="number"&&d.precision!==void 0?Number(d.value).toFixed(d.precision):String(d.value);return(d,p)=>g.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"modal-overlay",onClick:m},[e.createElementVNode("div",{class:"modal-container",onClick:p[2]||(p[2]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",{class:"modal-header"},[p[3]||(p[3]=e.createElementVNode("h3",null,"选择设备点位",-1)),e.createElementVNode("button",{class:"btn-close",onClick:m},"✕")]),e.createElementVNode("div",Dl,[e.createElementVNode("div",Al,[e.createElementVNode("div",_l,[p[4]||(p[4]=e.createElementVNode("h4",null,"设备列表",-1)),e.createElementVNode("span",Fl,e.toDisplayString(n.value.length),1)]),e.createElementVNode("div",$l,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[0]||(p[0]=f=>c.value=f),type:"text",placeholder:"搜索设备...",class:"search-input"},null,512),[[e.vModelText,c.value]])]),e.createElementVNode("div",wl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,f=>{var C;return e.openBlock(),e.createElementBlock("div",{key:f.id,class:e.normalizeClass(["device-item",{active:((C=l.value)==null?void 0:C.id)===f.id,offline:f.status==="offline"}]),onClick:b=>t(f)},[e.createElementVNode("div",Il,[e.createElementVNode("div",zl,[e.createElementVNode("span",{class:e.normalizeClass(["status-dot",f.status])},null,2),e.createTextVNode(" "+e.toDisplayString(f.name),1)]),e.createElementVNode("div",Tl,[e.createElementVNode("span",Pl,e.toDisplayString(f.code),1),e.createElementVNode("span",Rl,e.toDisplayString(f.points.length)+" 点",1)])]),p[5]||(p[5]=e.createElementVNode("div",{class:"device-arrow"},"›",-1))],10,Sl)}),128)),s.value.length===0?(e.openBlock(),e.createElementBlock("div",Ml," 暂无设备 ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Hl,[e.createElementVNode("div",Ol,[e.createElementVNode("h4",null,e.toDisplayString(l.value?l.value.name:"点位列表"),1),l.value?(e.openBlock(),e.createElementBlock("span",Ul,e.toDisplayString(a.value.length),1)):e.createCommentVNode("",!0)]),l.value?(e.openBlock(),e.createElementBlock("div",Ll,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[1]||(p[1]=f=>x.value=f),type:"text",placeholder:"搜索点位...",class:"search-input"},null,512),[[e.vModelText,x.value]])])):e.createCommentVNode("",!0),e.createElementVNode("div",Wl,[l.value?a.value.length===0?(e.openBlock(),e.createElementBlock("div",Gl," 暂无点位 ")):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(a.value,f=>{var C;return e.openBlock(),e.createElementBlock("div",{key:f.id,class:e.normalizeClass(["point-item",{active:((C=E.value)==null?void 0:C.id)===f.id,disabled:!f.enabled}]),onClick:b=>i(f)},[e.createElementVNode("div",Xl,[e.createElementVNode("div",Yl,[e.createTextVNode(e.toDisplayString(f.name)+" ",1),e.createElementVNode("span",{class:e.normalizeClass(["access-mode",f.accessMode])},e.toDisplayString(y(f.accessMode)),3)]),e.createElementVNode("div",Kl,[e.createElementVNode("span",Jl,e.toDisplayString(f.code),1),f.unit?(e.openBlock(),e.createElementBlock("span",Zl,e.toDisplayString(f.unit),1)):e.createCommentVNode("",!0),e.createElementVNode("span",Ql,e.toDisplayString(k(f.dataType)),1)]),f.value!==void 0?(e.openBlock(),e.createElementBlock("div",es,[p[6]||(p[6]=e.createTextVNode(" 当前值: ",-1)),e.createElementVNode("span",ts,e.toDisplayString(V(f)),1),e.createElementVNode("span",{class:e.normalizeClass(["quality",f.quality])},e.toDisplayString(f.quality),3)])):e.createCommentVNode("",!0)])],10,jl)}),128)):(e.openBlock(),e.createElementBlock("div",ql," ← 请先选择设备 "))])])]),e.createElementVNode("div",os,[e.createElementVNode("button",{class:"btn-cancel",onClick:m},"取消"),e.createElementVNode("button",{class:"btn-confirm",disabled:!E.value,onClick:u}," 确定 ",8,ns)])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-7884b850"]]);var Ve=(g=>(g.DIRECT="direct",g.BOOLEAN="boolean",g.RANGE="range",g.ENUM="enum",g))(Ve||{}),Oe=(g=>(g.BOOLEAN="boolean",g.NUMBER="number",g.STRING="string",g))(Oe||{});const rs={class:"mapping-configurator"},ls={class:"config-item"},ss={key:0,class:"field-hint error"},is={key:1,class:"field-hint"},cs={class:"config-item"},ds={key:0,class:"field-hint error"},ps={key:1,class:"field-hint"},xs={key:0,class:"config-item"},fs={class:"unit-config"},ms={class:"checkbox-label"},us={key:0,class:"custom-unit"},gs={key:1,class:"mapping-details"},Es={class:"config-item"},hs={class:"config-item"},vs={key:2,class:"mapping-details"},bs={class:"range-rules"},ys=["onUpdate:modelValue"],Cs=["onUpdate:modelValue"],Bs=["onUpdate:modelValue"],ks=["onClick"],Ns={key:3,class:"mapping-details"},Vs={class:"enum-mappings"},Ds=["value","onInput"],As=["onUpdate:modelValue"],_s=["onClick"],Fs={key:4,class:"mapping-preview"},$s={class:"preview-content"},ws={class:"preview-item"},Ss={class:"preview-output"},Is={class:"preview-item"},zs={class:"preview-output"},Ts={class:"preview-input"},Ps={class:"preview-output"},Rs={class:"preview-input"},Ms={class:"preview-output"},Hs=re(e.defineComponent({__name:"MappingConfigurator",props:{visible:{type:Boolean},modelValue:{}},emits:["update:visible","update:modelValue","confirm"],setup(g,{emit:h}){const o=g,r=h,n=e.ref(o.modelValue||{type:"",valueType:""});e.watch(()=>o.modelValue,V=>{V&&(n.value={...V})},{deep:!0});const l=()=>{n.value.type||(n.value.valueType===Oe.BOOLEAN?n.value.type=Ve.BOOLEAN:n.value.valueType===Oe.NUMBER?n.value.type=Ve.RANGE:n.value.type=Ve.DIRECT),n.value.valueType!==Oe.NUMBER&&(delete n.value.keepOriginalUnit,delete n.value.customUnit)},E=V=>({boolean:"适用于开关状态、是否判断等场景",number:"适用于温度、压力、流量等数值型数据",string:"适用于文本、状态码等字符型数据"})[V]||"",c=V=>({direct:"不做任何转换,直接使用原始值",boolean:"根据 true/false 转换为不同的值",range:"根据数值范围转换为对应值",enum:"根据枚举键值对转换"})[V]||"",x=()=>{const V=n.value.valueType;n.value={type:n.value.type,valueType:V},n.value.type===Ve.RANGE?n.value.rangeRules=[]:n.value.type===Ve.ENUM&&(n.value.enumMappings={})},s=()=>{n.value.rangeRules||(n.value.rangeRules=[]),n.value.rangeRules.push({min:0,max:100,value:""})},a=V=>{var d;(d=n.value.rangeRules)==null||d.splice(V,1)},t=()=>{n.value.enumMappings||(n.value.enumMappings={});const V=`key_${Object.keys(n.value.enumMappings).length+1}`;n.value.enumMappings[V]=""},i=V=>{n.value.enumMappings&&delete n.value.enumMappings[V]},m=(V,d)=>{const p=V.target.value;if(!n.value.enumMappings||p===d)return;const f=n.value.enumMappings[d];delete n.value.enumMappings[d],n.value.enumMappings[p]=f},u=()=>{},y=()=>{r("update:visible",!1)},k=()=>{if(!n.value.valueType){alert("请选择值类型!");return}if(!n.value.type){alert("请选择映射类型!");return}r("update:modelValue",{...n.value}),r("confirm",{...n.value}),r("update:visible",!1)};return(V,d)=>g.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"modal-overlay",onClick:y},[e.createElementVNode("div",{class:"modal-container",onClick:d[6]||(d[6]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",{class:"modal-header"},[d[7]||(d[7]=e.createElementVNode("h3",null,"值映射配置",-1)),e.createElementVNode("button",{class:"btn-close",onClick:y},"✕")]),e.createElementVNode("div",rs,[e.createElementVNode("div",ls,[d[9]||(d[9]=e.createElementVNode("label",null,[e.createTextVNode("值类型 "),e.createElementVNode("span",{class:"required"},"*")],-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":d[0]||(d[0]=p=>n.value.valueType=p),onChange:l},[...d[8]||(d[8]=[e.createElementVNode("option",{value:""},"请选择值类型",-1),e.createElementVNode("option",{value:"boolean"},"布尔型 (true/false)",-1),e.createElementVNode("option",{value:"number"},"数值型 (123, 45.6)",-1),e.createElementVNode("option",{value:"string"},'字符串型 ("abc")',-1)])],544),[[e.vModelSelect,n.value.valueType]]),n.value.valueType?(e.openBlock(),e.createElementBlock("div",is,e.toDisplayString(E(n.value.valueType)),1)):(e.openBlock(),e.createElementBlock("div",ss," 值类型为必填项 "))]),e.createElementVNode("div",cs,[d[11]||(d[11]=e.createElementVNode("label",null,[e.createTextVNode("映射类型 "),e.createElementVNode("span",{class:"required"},"*")],-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":d[1]||(d[1]=p=>n.value.type=p),onChange:x},[...d[10]||(d[10]=[e.createStaticVNode('<option value="" data-v-ef9e0ee1>请选择映射类型</option><option value="direct" data-v-ef9e0ee1>直接映射(无转换)</option><option value="boolean" data-v-ef9e0ee1>布尔映射</option><option value="range" data-v-ef9e0ee1>范围映射</option><option value="enum" data-v-ef9e0ee1>枚举映射</option>',5)])],544),[[e.vModelSelect,n.value.type]]),n.value.type?(e.openBlock(),e.createElementBlock("div",ps,e.toDisplayString(c(n.value.type)),1)):(e.openBlock(),e.createElementBlock("div",ds," 映射类型为必填项 "))]),n.value.valueType==="number"?(e.openBlock(),e.createElementBlock("div",xs,[d[13]||(d[13]=e.createElementVNode("label",null,"单位配置",-1)),e.createElementVNode("div",fs,[e.createElementVNode("label",ms,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":d[2]||(d[2]=p=>n.value.keepOriginalUnit=p),onChange:u},null,544),[[e.vModelCheckbox,n.value.keepOriginalUnit]]),d[12]||(d[12]=e.createTextVNode(" 保留点位原始单位 ",-1))]),n.value.keepOriginalUnit?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",us,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[3]||(d[3]=p=>n.value.customUnit=p),type:"text",placeholder:"自定义单位,如: °C, MPa, %",onInput:u},null,544),[[e.vModelText,n.value.customUnit]])]))])])):e.createCommentVNode("",!0),n.value.type==="boolean"?(e.openBlock(),e.createElementBlock("div",gs,[e.createElementVNode("div",Es,[d[14]||(d[14]=e.createElementVNode("label",null,"True 时的值",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[4]||(d[4]=p=>n.value.trueValue=p),type:"text",placeholder:"例如: 运行、#00ff00",onInput:u},null,544),[[e.vModelText,n.value.trueValue]])]),e.createElementVNode("div",hs,[d[15]||(d[15]=e.createElementVNode("label",null,"False 时的值",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[5]||(d[5]=p=>n.value.falseValue=p),type:"text",placeholder:"例如: 停止、#ff0000",onInput:u},null,544),[[e.vModelText,n.value.falseValue]])])])):e.createCommentVNode("",!0),n.value.type==="range"?(e.openBlock(),e.createElementBlock("div",vs,[e.createElementVNode("div",bs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value.rangeRules,(p,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"range-rule"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":C=>p.min=C,type:"number",placeholder:"最小值",onInput:u},null,40,ys),[[e.vModelText,p.min,void 0,{number:!0}]]),d[16]||(d[16]=e.createElementVNode("span",{class:"range-separator"},"~",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":C=>p.max=C,type:"number",placeholder:"最大值",onInput:u},null,40,Cs),[[e.vModelText,p.max,void 0,{number:!0}]]),d[17]||(d[17]=e.createElementVNode("span",{class:"range-arrow"},"→",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":C=>p.value=C,type:"text",placeholder:"映射值",onInput:u},null,40,Bs),[[e.vModelText,p.value]]),e.createElementVNode("button",{class:"btn-remove-rule",onClick:C=>a(f),title:"删除规则"}," ✕ ",8,ks)]))),128))]),e.createElementVNode("button",{class:"btn-add-rule",onClick:s}," + 添加范围规则 ")])):e.createCommentVNode("",!0),n.value.type==="enum"?(e.openBlock(),e.createElementBlock("div",Ns,[e.createElementVNode("div",Vs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value.enumMappings,(p,f,C)=>(e.openBlock(),e.createElementBlock("div",{key:C,class:"enum-mapping"},[e.createElementVNode("input",{value:f,type:"text",placeholder:"原始值",onInput:b=>m(b,f)},null,40,Ds),d[18]||(d[18]=e.createElementVNode("span",{class:"enum-arrow"},"→",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b=>n.value.enumMappings[f]=b,type:"text",placeholder:"映射值",onInput:u},null,40,As),[[e.vModelText,n.value.enumMappings[f]]]),e.createElementVNode("button",{class:"btn-remove-rule",onClick:b=>i(f),title:"删除映射"}," ✕ ",8,_s)]))),128))]),e.createElementVNode("button",{class:"btn-add-rule",onClick:t}," + 添加枚举映射 ")])):e.createCommentVNode("",!0),n.value.type!=="direct"?(e.openBlock(),e.createElementBlock("div",Fs,[d[25]||(d[25]=e.createElementVNode("label",null,"映射预览",-1)),e.createElementVNode("div",$s,[n.value.type==="boolean"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("div",ws,[d[19]||(d[19]=e.createElementVNode("span",{class:"preview-input"},"true",-1)),d[20]||(d[20]=e.createElementVNode("span",{class:"preview-arrow"},"→",-1)),e.createElementVNode("span",Ss,e.toDisplayString(n.value.trueValue||"true"),1)]),e.createElementVNode("div",Is,[d[21]||(d[21]=e.createElementVNode("span",{class:"preview-input"},"false",-1)),d[22]||(d[22]=e.createElementVNode("span",{class:"preview-arrow"},"→",-1)),e.createElementVNode("span",zs,e.toDisplayString(n.value.falseValue||"false"),1)])],64)):n.value.type==="range"?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(n.value.rangeRules,(p,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"preview-item"},[e.createElementVNode("span",Ts,"["+e.toDisplayString(p.min)+" ~ "+e.toDisplayString(p.max)+"]",1),d[23]||(d[23]=e.createElementVNode("span",{class:"preview-arrow"},"→",-1)),e.createElementVNode("span",Ps,e.toDisplayString(p.value),1)]))),128)):n.value.type==="enum"?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(n.value.enumMappings,(p,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"preview-item"},[e.createElementVNode("span",Rs,e.toDisplayString(f),1),d[24]||(d[24]=e.createElementVNode("span",{class:"preview-arrow"},"→",-1)),e.createElementVNode("span",Ms,e.toDisplayString(p),1)]))),128)):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:"modal-footer"},[e.createElementVNode("button",{class:"btn-cancel",onClick:y},"取消"),e.createElementVNode("button",{class:"btn-confirm",onClick:k},"确定")])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-ef9e0ee1"]]),Os={class:"event-card"},Us={class:"header-left"},Ls={class:"collapse-icon"},Ws={class:"event-title"},qs={class:"event-card-body"},Gs={class:"property-item"},js={key:0,class:"selected-point"},Xs={class:"point-main"},Ys={class:"device-name"},Ks={class:"point-name"},Js={class:"point-details"},Zs={class:"point-code"},Qs={key:0,class:"point-unit"},ei={key:1,class:"placeholder"},ti={class:"property-item"},oi=["value"],ni=["value"],ai={class:"property-item"},ri={key:0,class:"mapping-summary"},li={class:"mapping-type-label"},si={class:"mapping-detail"},ii={key:1,class:"placeholder"},Qe=re(e.defineComponent({__name:"BindingCard",props:{binding:{},index:{},isCollapsed:{type:Boolean},nodeProperties:{}},emits:["toggle-collapse","remove","update-field"],setup(g,{emit:h}){const o=g,r=h,n=e.ref(o.binding.devicePointId||""),l=e.ref(!1),E=e.ref(!1),c=e.ref(o.binding.mapping||{type:Ve.DIRECT,valueType:Oe.NUMBER});e.watch(()=>o.binding.devicePointId,m=>{n.value=m||""}),e.watch(()=>o.binding.mapping,m=>{m&&(c.value=m)},{deep:!0});const x=e.computed(()=>{if(!n.value)return null;const[m,u]=n.value.split(":");if(!m||!u)return null;const y=Qt(m),k=y?Vl(m,u):null;return!y||!k?null:{deviceName:y.name,pointName:k.name,pointCode:k.code,pointUnit:k.unit}}),s=(m,u,y,k)=>{const V=new Event("change");Object.defineProperty(V,"target",{value:{value:`${m}:${u}`},writable:!1}),r("update-field","devicePointId",V),console.log("选择了点位:",{device:y.name,point:k.name,dataType:k.dataType,accessMode:k.accessMode})},a=m=>{const u=new Event("change");Object.defineProperty(u,"target",{value:{value:m},writable:!1}),r("update-field","mapping",u)},t=m=>({direct:"直接映射",boolean:"布尔映射",range:"范围映射",enum:"枚举映射"})[m]||m,i=()=>{const m=c.value;return m.type==="boolean"?`True:${m.trueValue||"true"} / False:${m.falseValue||"false"}`:m.type==="range"&&m.rangeRules?`${m.rangeRules.length} 个范围规则`:m.type==="enum"&&m.enumMappings?`${Object.keys(m.enumMappings).length} 个枚举映射`:""};return(m,u)=>(e.openBlock(),e.createElementBlock("div",Os,[e.createElementVNode("div",{class:"event-card-header",onClick:u[1]||(u[1]=y=>m.$emit("toggle-collapse"))},[e.createElementVNode("div",Us,[e.createElementVNode("span",Ls,e.toDisplayString(g.isCollapsed?"▶":"▼"),1),e.createElementVNode("span",Ws,"绑定"+e.toDisplayString(g.index+1),1)]),e.createElementVNode("button",{class:"btn-remove",onClick:u[0]||(u[0]=e.withModifiers(y=>m.$emit("remove"),["stop"])),title:"删除绑定"},"🗑")]),e.withDirectives(e.createElementVNode("div",qs,[e.createElementVNode("div",Gs,[u[10]||(u[10]=e.createElementVNode("label",null,"设备点位",-1)),e.createElementVNode("div",{class:"point-selector-trigger",onClick:u[2]||(u[2]=y=>l.value=!0)},[x.value?(e.openBlock(),e.createElementBlock("div",js,[e.createElementVNode("div",Xs,[e.createElementVNode("span",Ys,e.toDisplayString(x.value.deviceName),1),e.createElementVNode("span",Ks,e.toDisplayString(x.value.pointName),1)]),e.createElementVNode("div",Js,[e.createElementVNode("span",Zs,e.toDisplayString(x.value.pointCode),1),x.value.pointUnit?(e.openBlock(),e.createElementBlock("span",Qs,e.toDisplayString(x.value.pointUnit),1)):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("div",ei," 点击选择设备点位 ")),u[9]||(u[9]=e.createElementVNode("span",{class:"selector-arrow"},"›",-1))])]),e.createVNode(as,{visible:l.value,"onUpdate:visible":u[3]||(u[3]=y=>l.value=y),modelValue:n.value,"onUpdate:modelValue":u[4]||(u[4]=y=>n.value=y),onConfirm:s},null,8,["visible","modelValue"]),e.createElementVNode("div",ti,[u[12]||(u[12]=e.createElementVNode("label",null,"目标属性",-1)),e.createElementVNode("select",{value:g.binding.targetProperty||"",onChange:u[5]||(u[5]=y=>m.$emit("update-field","targetProperty",y))},[u[11]||(u[11]=e.createElementVNode("option",{value:""},"选择属性",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.nodeProperties,y=>(e.openBlock(),e.createElementBlock("option",{key:y.key,value:y.key},e.toDisplayString(y.label),9,ni))),128))],40,oi)]),e.createElementVNode("div",ai,[u[14]||(u[14]=e.createElementVNode("label",null,"值映射配置",-1)),e.createElementVNode("div",{class:"mapping-trigger",onClick:u[6]||(u[6]=y=>E.value=!0)},[c.value.type!=="direct"?(e.openBlock(),e.createElementBlock("div",ri,[e.createElementVNode("span",li,e.toDisplayString(t(c.value.type)),1),e.createElementVNode("span",si,e.toDisplayString(i()),1)])):(e.openBlock(),e.createElementBlock("div",ii," 点击配置值映射 ")),u[13]||(u[13]=e.createElementVNode("span",{class:"selector-arrow"},"›",-1))])]),e.createVNode(Hs,{visible:E.value,"onUpdate:visible":u[7]||(u[7]=y=>E.value=y),modelValue:c.value,"onUpdate:modelValue":u[8]||(u[8]=y=>c.value=y),onConfirm:a},null,8,["visible","modelValue"])],512),[[e.vShow,!g.isCollapsed]])]))}}),[["__scopeId","data-v-3731c19a"]]),ci={class:"dialog-content"},di={class:"dialog-header"},pi={class:"dialog-body"},xi={class:"group-row"},fi={class:"group-field"},mi=["value","onChange"],ui=["value"],gi={class:"group-field group-field-value"},Ei=["value","onInput"],hi=["value","onInput"],vi={key:2,class:"color-input-wrapper"},bi=["value","onInput"],yi={class:"color-value"},Ci=["value","onChange"],Bi=["onClick"],ki={key:0,class:"empty-hint"},Ni={class:"dialog-footer"},et=re(e.defineComponent({__name:"AttributeConfigDialog",props:{attributeGroups:{},nodeProperties:{}},emits:["close","save","add-group","remove-group","update-group"],setup(g,{emit:h}){const o=g,r=h,n=c=>{const x=o.nodeProperties.find(s=>s.key===c);return(x==null?void 0:x.type)||"text"},l=(c,x,s)=>{const a=s.target.value;r("update-group",c,x,a)},E=()=>{for(const c of o.attributeGroups)if(!c.property){alert("请为每组配置选择目标属性");return}r("save")};return(c,x)=>(e.openBlock(),e.createElementBlock("div",{class:"dialog-overlay",onClick:x[3]||(x[3]=e.withModifiers(s=>c.$emit("close"),["self"]))},[e.createElementVNode("div",ci,[e.createElementVNode("div",di,[x[4]||(x[4]=e.createElementVNode("h3",null,"事件属性更改配置",-1)),e.createElementVNode("button",{class:"btn-close",onClick:x[0]||(x[0]=s=>c.$emit("close"))},"×")]),e.createElementVNode("div",pi,[e.createElementVNode("button",{class:"btn-add-group",onClick:x[1]||(x[1]=s=>c.$emit("add-group"))},"新增一组"),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.attributeGroups,(s,a)=>(e.openBlock(),e.createElementBlock("div",{key:a,class:"attribute-group"},[e.createElementVNode("div",xi,[e.createElementVNode("div",fi,[x[6]||(x[6]=e.createElementVNode("label",null,"目标属性",-1)),e.createElementVNode("select",{value:s.property,onChange:t=>l(a,"property",t)},[x[5]||(x[5]=e.createElementVNode("option",{value:""},"选择目标属性",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.nodeProperties,t=>(e.openBlock(),e.createElementBlock("option",{key:t.key,value:t.key},e.toDisplayString(t.label),9,ui))),128))],40,mi)]),e.createElementVNode("div",gi,[x[8]||(x[8]=e.createElementVNode("label",null,"期望值",-1)),!s.property||n(s.property)==="text"?(e.openBlock(),e.createElementBlock("input",{key:0,value:s.value,type:"text",onInput:t=>l(a,"value",t),placeholder:"输入值"},null,40,Ei)):n(s.property)==="number"?(e.openBlock(),e.createElementBlock("input",{key:1,value:s.value,type:"number",onInput:t=>l(a,"value",t),placeholder:"输入数字"},null,40,hi)):n(s.property)==="color"?(e.openBlock(),e.createElementBlock("div",vi,[e.createElementVNode("input",{value:s.value,type:"color",onInput:t=>l(a,"value",t)},null,40,bi),e.createElementVNode("span",yi,e.toDisplayString(s.value||"#000000"),1)])):n(s.property)==="boolean"?(e.openBlock(),e.createElementBlock("select",{key:3,value:s.value,onChange:t=>l(a,"value",t)},[...x[7]||(x[7]=[e.createElementVNode("option",{value:"true"},"是",-1),e.createElementVNode("option",{value:"false"},"否",-1)])],40,Ci)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{class:"btn-delete-group",onClick:t=>c.$emit("remove-group",a),title:"删除"}," 🗑 ",8,Bi)])]))),128)),g.attributeGroups.length===0?(e.openBlock(),e.createElementBlock("div",ki,' 请点击"新增一组"按钮添加属性配置 ')):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ni,[e.createElementVNode("button",{class:"btn-cancel",onClick:x[2]||(x[2]=s=>c.$emit("close"))},"取消"),e.createElementVNode("button",{class:"btn-confirm",onClick:E},"确定")])])]))}}),[["__scopeId","data-v-90af9944"]]),Vi={class:"dialog-content dialog-large"},Di={class:"dialog-header"},Ai={class:"dialog-body dialog-body-split"},_i={class:"code-editor-section"},Fi=["value"],$i={class:"code-preview-section"},wi={class:"section-header"},Si={class:"preview-status"},Ii={key:0,class:"status-success"},zi={key:1,class:"status-error"},Ti={class:"preview-canvas"},Pi={key:0,class:"preview-empty"},Ri={key:1,class:"preview-error-box"},Mi={class:"error-message"},Hi={key:2,class:"preview-node-container"},Oi={key:0,class:"console-output"},Ui={class:"console-logs"},Li={class:"dialog-footer"},Wi=`function execute(node) {
6
+ */const mt={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},ut=e.defineComponent({name:"AlignHorizontalCenter",render:function(l,n){return e.openBlock(),e.createElementBlock("svg",mt,n[0]||(n[0]=[e.createElementVNode("path",{d:"M24 18h-7v-4h3a2.002 2.002 0 0 0 2-2V8a2.002 2.002 0 0 0-2-2h-3V2h-2v4h-3a2.002 2.002 0 0 0-2 2v4a2.002 2.002 0 0 0 2 2h3v4H8a2.002 2.002 0 0 0-2 2v4a2.002 2.002 0 0 0 2 2h7v4h2v-4h7a2.002 2.002 0 0 0 2-2v-4a2.002 2.002 0 0 0-2-2zM12 8h8v4h-8zm12 16H8v-4h16z",fill:"currentColor"},null,-1)]))}}),gt={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},ft=e.defineComponent({name:"AlignHorizontalLeft",render:function(l,n){return e.openBlock(),e.createElementBlock("svg",gt,n[0]||(n[0]=[e.createElementVNode("path",{d:"M26 26H11a2.002 2.002 0 0 1-2-2v-4a2.002 2.002 0 0 1 2-2h15a2.002 2.002 0 0 1 2 2v4a2.002 2.002 0 0 1-2 2zm0-6.001L11 20v4h15z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M18 14h-7a2.002 2.002 0 0 1-2-2V8a2.002 2.002 0 0 1 2-2h7a2.002 2.002 0 0 1 2 2v4a2.002 2.002 0 0 1-2 2zm0-6.001L11 8v4h7z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M4 2h2v28H4z",fill:"currentColor"},null,-1)]))}}),Et={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},yt=e.defineComponent({name:"AlignHorizontalRight",render:function(l,n){return e.openBlock(),e.createElementBlock("svg",Et,n[0]||(n[0]=[e.createElementVNode("path",{d:"M4 24v-4a2.002 2.002 0 0 1 2-2h15a2.002 2.002 0 0 1 2 2v4a2.002 2.002 0 0 1-2 2H6a2.002 2.002 0 0 1-2-2zm2 0h15v-4l-15-.001z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M12 12V8a2.002 2.002 0 0 1 2-2h7a2.002 2.002 0 0 1 2 2v4a2.002 2.002 0 0 1-2 2h-7a2.002 2.002 0 0 1-2-2zm2 0h7V8l-7-.001z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M28 30h-2V2h2z",fill:"currentColor"},null,-1)]))}}),bt={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},Nt=e.defineComponent({name:"AlignVerticalBottom",render:function(l,n){return e.openBlock(),e.createElementBlock("svg",bt,n[0]||(n[0]=[e.createElementVNode("path",{d:"M2 26h28v2H2z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M24 23h-4a2.002 2.002 0 0 1-2-2v-7a2.002 2.002 0 0 1 2-2h4a2.002 2.002 0 0 1 2 2v7a2.002 2.002 0 0 1-2 2zm-4-9v7h4.001L24 14z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M12 23H8a2.002 2.002 0 0 1-2-2V6a2.002 2.002 0 0 1 2-2h4a2.002 2.002 0 0 1 2 2v15a2.002 2.002 0 0 1-2 2zM8 6v15h4.001L12 6z",fill:"currentColor"},null,-1)]))}}),ht={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},Vt=e.defineComponent({name:"AlignVerticalCenter",render:function(l,n){return e.openBlock(),e.createElementBlock("svg",ht,n[0]||(n[0]=[e.createElementVNode("path",{d:"M30 15h-4v-3a2.002 2.002 0 0 0-2-2h-4a2.002 2.002 0 0 0-2 2v3h-4V8a2.002 2.002 0 0 0-2-2H8a2.002 2.002 0 0 0-2 2v7H2v2h4v7a2.002 2.002 0 0 0 2 2h4a2.002 2.002 0 0 0 2-2v-7h4v3a2.002 2.002 0 0 0 2 2h4a2.002 2.002 0 0 0 2-2v-3h4zM8 24V8h4l.001 16zm12-4v-8h4l.001 8z",fill:"currentColor"},null,-1)]))}}),kt={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},Ct=e.defineComponent({name:"AlignVerticalTop",render:function(l,n){return e.openBlock(),e.createElementBlock("svg",kt,n[0]||(n[0]=[e.createElementVNode("path",{d:"M24 20h-4a2.002 2.002 0 0 1-2-2v-7a2.002 2.002 0 0 1 2-2h4a2.002 2.002 0 0 1 2 2v7a2.002 2.002 0 0 1-2 2zm-4-9v7h4.001L24 11z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M12 28H8a2.002 2.002 0 0 1-2-2V11a2.002 2.002 0 0 1 2-2h4a2.002 2.002 0 0 1 2 2v15a2.002 2.002 0 0 1-2 2zM8 11v15h4.001L12 11z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M2 4h28v2H2z",fill:"currentColor"},null,-1)]))}}),$t={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},vt=e.defineComponent({name:"DistributeHorizontalCenter",render:function(l,n){return e.openBlock(),e.createElementBlock("svg",$t,n[0]||(n[0]=[e.createElementVNode("path",{d:"M24 10h-1V2h-2v8h-1a2.002 2.002 0 0 0-2 2v8a2.002 2.002 0 0 0 2 2h1v8h2v-8h1a2.002 2.002 0 0 0 2-2v-8a2.002 2.002 0 0 0-2-2zm0 10h-4v-8h4z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M12 6h-1V2H9v4H8a2.002 2.002 0 0 0-2 2v16a2.002 2.002 0 0 0 2 2h1v4h2v-4h1a2.002 2.002 0 0 0 2-2V8a2.002 2.002 0 0 0-2-2zm0 18H8V8h4z",fill:"currentColor"},null,-1)]))}}),wt={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},Bt=e.defineComponent({name:"DistributeVerticalCenter",render:function(l,n){return e.openBlock(),e.createElementBlock("svg",wt,n[0]||(n[0]=[e.createElementVNode("path",{d:"M30 21h-4v-1a2.002 2.002 0 0 0-2-2H8a2.002 2.002 0 0 0-2 2v1H2v2h4v1a2.002 2.002 0 0 0 2 2h16a2.002 2.002 0 0 0 2-2v-1h4zm-6 3H8v-4l16-.001z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M30 9h-8V8a2.002 2.002 0 0 0-2-2h-8a2.002 2.002 0 0 0-2 2v1H2v2h8v1a2.002 2.002 0 0 0 2 2h8a2.002 2.002 0 0 0 2-2v-1h8zm-10 3h-8V8l8-.001z",fill:"currentColor"},null,-1)]))}}),St={class:"scada-header"},_t={class:"header-left"},xt={class:"header-center"},It={class:"tool-group"},Dt={key:0,class:"divider"},Tt={key:1,class:"tool-group"},Pt={key:2,class:"divider"},At={key:3,class:"tool-group"},Mt={class:"header-right"},zt={class:"tool-group"},Ot=e.defineComponent({__name:"Header",props:{selectedNodesCount:{default:0}},emits:["save","import","workflow","preview","export","zoomIn","zoomOut","clearAll","alignLeft","alignCenter","alignRight","alignTop","alignMiddle","alignBottom","distributeHorizontal","distributeVertical"],setup(i,{emit:l}){const n=i,r=l;return(t,s)=>(e.openBlock(),e.createElementBlock("header",St,[e.createElementVNode("div",_t,[e.renderSlot(t.$slots,"left",{},()=>[s[16]||(s[16]=e.createElementVNode("h1",{class:"logo"},"SCADA 组态引擎",-1)),s[17]||(s[17]=e.createElementVNode("span",{class:"version"},"v1.0.0",-1))],!0)]),e.createElementVNode("div",xt,[e.createElementVNode("div",It,[e.createElementVNode("button",{class:"toolbar-btn",onClick:s[0]||(s[0]=d=>r("zoomIn")),title:"放大"},[...s[18]||(s[18]=[e.createElementVNode("span",{class:"icon"},"+",-1)])]),e.createElementVNode("button",{class:"toolbar-btn",onClick:s[1]||(s[1]=d=>r("zoomOut")),title:"缩小"},[...s[19]||(s[19]=[e.createElementVNode("span",{class:"icon"},"-",-1)])]),e.createElementVNode("button",{class:"toolbar-btn",onClick:s[2]||(s[2]=d=>r("clearAll")),title:"清空画布"},[...s[20]||(s[20]=[e.createElementVNode("span",{class:"icon"},"🗑",-1)])])]),n.selectedNodesCount>=2?(e.openBlock(),e.createElementBlock("div",Dt)):e.createCommentVNode("",!0),n.selectedNodesCount>=2?(e.openBlock(),e.createElementBlock("div",Tt,[e.createElementVNode("button",{class:"toolbar-btn",onClick:s[3]||(s[3]=d=>r("alignLeft")),title:"左对齐"},[e.createVNode(e.unref(ft),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:s[4]||(s[4]=d=>r("alignCenter")),title:"水平居中"},[e.createVNode(e.unref(ut),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:s[5]||(s[5]=d=>r("alignRight")),title:"右对齐"},[e.createVNode(e.unref(yt),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:s[6]||(s[6]=d=>r("alignTop")),title:"顶部对齐"},[e.createVNode(e.unref(Ct),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:s[7]||(s[7]=d=>r("alignMiddle")),title:"垂直居中"},[e.createVNode(e.unref(Vt),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:s[8]||(s[8]=d=>r("alignBottom")),title:"底部对齐"},[e.createVNode(e.unref(Nt),{class:"icon-svg"})])])):e.createCommentVNode("",!0),n.selectedNodesCount>=3?(e.openBlock(),e.createElementBlock("div",Pt)):e.createCommentVNode("",!0),n.selectedNodesCount>=3?(e.openBlock(),e.createElementBlock("div",At,[e.createElementVNode("button",{class:"toolbar-btn",onClick:s[9]||(s[9]=d=>r("distributeHorizontal")),title:"横向分布"},[e.createVNode(e.unref(vt),{class:"icon-svg"})]),e.createElementVNode("button",{class:"toolbar-btn",onClick:s[10]||(s[10]=d=>r("distributeVertical")),title:"纵向分布"},[e.createVNode(e.unref(Bt),{class:"icon-svg"})])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Mt,[e.createElementVNode("div",zt,[e.createElementVNode("button",{class:"header-btn",onClick:s[11]||(s[11]=d=>r("workflow")),title:"流程编排"},[...s[21]||(s[21]=[e.createElementVNode("span",{class:"icon"},"⚡",-1),e.createElementVNode("span",null,"流程编排",-1)])]),e.createElementVNode("button",{class:"header-btn",onClick:s[12]||(s[12]=d=>r("import")),title:"导入"},[...s[22]||(s[22]=[e.createElementVNode("span",{class:"icon"},"📂",-1),e.createElementVNode("span",null,"导入",-1)])]),e.createElementVNode("button",{class:"header-btn",onClick:s[13]||(s[13]=d=>r("export")),title:"导出"},[...s[23]||(s[23]=[e.createElementVNode("span",{class:"icon"},"📤",-1),e.createElementVNode("span",null,"导出",-1)])]),e.createElementVNode("button",{class:"header-btn",onClick:s[14]||(s[14]=d=>r("preview")),title:"预览"},[...s[24]||(s[24]=[e.createElementVNode("span",{class:"icon"},"👁",-1),e.createElementVNode("span",null,"预览",-1)])]),e.createElementVNode("button",{class:"header-btn",onClick:s[15]||(s[15]=d=>r("save")),title:"保存"},[...s[25]||(s[25]=[e.createElementVNode("span",{class:"icon"},"💾",-1),e.createElementVNode("span",null,"保存",-1)])])])])]))}}),H=(i,l)=>{const n=i.__vccOpts||i;for(const[r,t]of l)n[r]=t;return n},we=H(Ot,[["__scopeId","data-v-a2c5b2cf"]]),re=[{key:"animationEnabled",label:"启用动画",type:"boolean",path:"data.animation.enabled",defaultValue:!1,description:"是否启用动画效果",bindable:!0},{key:"animationType",label:"动画类型",type:"select",path:"data.animation.type",defaultValue:"none",options:[{label:"无动画",value:"none"},{label:"闪烁",value:"blink"},{label:"缩放",value:"scale"},{label:"旋转",value:"rotate"},{label:"浮动",value:"float"},{label:"脉冲",value:"pulse"}],description:"组件动画效果类型",bindable:!1},{key:"animationDuration",label:"动画时长(ms)",type:"number",path:"data.animation.duration",defaultValue:1e3,min:100,max:5e3,step:100,description:"动画完成一次所需时间",bindable:!1},{key:"animationLoop",label:"循环播放",type:"boolean",path:"data.animation.loop",defaultValue:!0,description:"是否循环播放动画",bindable:!1}],He={metadata:{id:"rect",name:"矩形",category:"basic",icon:"▢",description:"基础矩形图形组件",version:"1.0.0"},shape:"rect",width:120,height:60,label:"矩形",attrs:{body:{fill:"#3b82f6",stroke:"#2563eb",strokeWidth:2},label:{fill:"#fff",fontSize:14}},ports:{groups:{top:{position:"top",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},bottom:{position:"bottom",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-top",group:"top"},{id:"port-right",group:"right"},{id:"port-bottom",group:"bottom"},{id:"port-left",group:"left"}]},props:[{key:"name",label:"按钮文本",type:"text",path:"attrs.label.text",defaultValue:"矩形",description:"矩形名称"},{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#3b82f6",description:"矩形填充颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#2563eb",description:"矩形边框颜色"},{key:"strokeWidth",label:"边框宽度",type:"number",path:"attrs.body.strokeWidth",defaultValue:2,min:0,max:10,description:"矩形边框宽度"},{key:"opacity",label:"透明度",type:"slider",path:"attrs.body.opacity",defaultValue:1,min:0,max:1,step:.1,description:"矩形透明度"},...re]},Je={metadata:{id:"circle",name:"圆形",category:"basic",icon:"○",description:"基础圆形图形组件",version:"1.0.0"},shape:"circle",width:80,height:80,label:"圆形",attrs:{body:{fill:"#10b981",stroke:"#059669",strokeWidth:2},label:{fill:"#fff",fontSize:14}},ports:{groups:{top:{position:"top",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},bottom:{position:"bottom",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-top",group:"top"},{id:"port-right",group:"right"},{id:"port-bottom",group:"bottom"},{id:"port-left",group:"left"}]},props:[{key:"text",label:"初始文本",type:"text",path:"attrs.label.text",defaultValue:"圆形",description:"圆形初始文本"},{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#10b981",description:"圆形填充颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#059669",description:"圆形边框颜色"},{key:"strokeWidth",label:"边框宽度",type:"number",path:"attrs.body.strokeWidth",defaultValue:2,min:0,max:10,description:"圆形边框宽度"},{key:"opacity",label:"透明度",type:"slider",path:"attrs.body.opacity",defaultValue:1,min:0,max:1,step:.1,description:"圆形透明度"},...re]},qe={metadata:{id:"text",name:"文本",category:"basic",icon:"T",description:"文本标签组件",version:"1.0.0"},shape:"rect",width:100,height:40,label:"文本",attrs:{body:{fill:"transparent",stroke:"#64748b",strokeWidth:1,strokeDasharray:"5 5"},label:{fill:"#e2e8f0",fontSize:16}},props:[{key:"label",label:"文本内容",type:"text",path:"attrs.label.text",defaultValue:"文本",description:"显示的文本内容"},{key:"fontSize",label:"字体大小",type:"number",path:"attrs.label.fontSize",defaultValue:16,min:12,max:48,description:"文本字体大小"},{key:"fontColor",label:"字体颜色",type:"color",path:"attrs.label.fill",defaultValue:"#e2e8f0",description:"文本字体颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#64748b",description:"边框颜色"},...re]},Ut=Object.freeze(Object.defineProperty({__proto__:null,CircleComponent:Je,RectComponent:He,TextComponent:qe},Symbol.toStringTag,{value:"Module"})),Ye={metadata:{id:"light",name:"灯泡",category:"iot",icon:"💡",description:"IoT灯泡控制组件",version:"1.0.0"},shape:"circle",width:60,height:60,label:"💡",attrs:{body:{fill:"#fbbf24",stroke:"#f59e0b",strokeWidth:2},label:{fill:"#fff",fontSize:24}},data:{type:"light",deviceId:"",property:""},ports:{groups:{left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-left",group:"left"},{id:"port-right",group:"right"}]},props:[{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#fbbf24",description:"灯泡颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#f59e0b",description:"边框颜色"},{key:"deviceId",label:"设备ID",type:"text",path:"data.deviceId",defaultValue:"",description:"绑定的设备ID"},{key:"property",label:"设备属性",type:"text",path:"data.property",defaultValue:"",description:"绑定的设备属性名称"},...re]},Xe={metadata:{id:"switch",name:"开关",category:"iot",icon:"🔘",description:"IoT开关控制组件",version:"1.0.0"},shape:"rect",width:100,height:50,label:"开关",attrs:{body:{fill:"#64748b",stroke:"#475569",strokeWidth:2,rx:25,ry:25},label:{fill:"#fff",fontSize:14}},data:{type:"switch",deviceId:"",property:"",state:!1},ports:{groups:{left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-left",group:"left"},{id:"port-right",group:"right"}]},props:[{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#64748b",description:"开关颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#475569",description:"边框颜色"},{key:"deviceId",label:"设备ID",type:"text",path:"data.deviceId",defaultValue:"",description:"绑定的设备ID"},{key:"property",label:"设备属性",type:"text",path:"data.property",defaultValue:"",description:"绑定的设备属性名称"},{key:"state",label:"开关状态",type:"boolean",path:"data.state",defaultValue:!1,description:"开关当前状态"},...re]},Ke={metadata:{id:"gauge",name:"仪表",category:"iot",icon:"📊",description:"IoT仪表盘数据展示组件",version:"1.0.0"},shape:"circle",width:100,height:100,label:"📊",attrs:{body:{fill:"#8b5cf6",stroke:"#7c3aed",strokeWidth:2},label:{fill:"#fff",fontSize:32}},data:{type:"gauge",deviceId:"",property:"",value:0},ports:{groups:{top:{position:"top",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},right:{position:"right",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},bottom:{position:"bottom",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}},left:{position:"left",attrs:{circle:{r:4,magnet:!0,stroke:"#31d0c6",strokeWidth:2,fill:"#fff"}}}},items:[{id:"port-top",group:"top"},{id:"port-right",group:"right"},{id:"port-bottom",group:"bottom"},{id:"port-left",group:"left"}]},props:[{key:"fill",label:"填充色",type:"color",path:"attrs.body.fill",defaultValue:"#8b5cf6",description:"仪表颜色"},{key:"stroke",label:"边框色",type:"color",path:"attrs.body.stroke",defaultValue:"#7c3aed",description:"边框颜色"},{key:"deviceId",label:"设备ID",type:"text",path:"data.deviceId",defaultValue:"",description:"绑定的设备ID"},{key:"property",label:"设备属性",type:"text",path:"data.property",defaultValue:"",description:"绑定的设备属性名称"},{key:"value",label:"当前值",type:"number",path:"data.value",defaultValue:0,min:0,max:100,description:"仪表当前显示值"},...re]},Rt=Object.freeze(Object.defineProperty({__proto__:null,GaugeComponent:Ke,LightComponent:Ye,SwitchComponent:Xe},Symbol.toStringTag,{value:"Module"}));class Lt{constructor(){be(this,"registry",{});this.registerDefaultComponents()}registerDefaultComponents(){this.register(He),this.register(Je),this.register(qe),this.register(Ye),this.register(Xe),this.register(Ke)}register(l){const{id:n}=l.metadata;this.registry[n]&&console.warn(`组件 ${n} 已存在,将被覆盖`),this.registry[n]=l,console.log(`✓ 组件注册成功: ${l.metadata.name} (${n})`)}registerBatch(l){l.forEach(n=>this.register(n))}getComponent(l){return this.registry[l]}getAllComponents(){return{...this.registry}}getComponentsByCategory(l){return Object.values(this.registry).filter(n=>n.metadata.category===l)}getComponentList(){return Object.values(this.registry)}hasComponent(l){return l in this.registry}unregister(l){return this.registry[l]?(delete this.registry[l],console.log(`✓ 组件注销成功: ${l}`),!0):(console.warn(`组件 ${l} 不存在`),!1)}getCount(){return Object.keys(this.registry).length}clear(){this.registry={},console.log("✓ 组件注册表已清空")}}const me=new Lt,Be={size:{width:1920,height:1080,preset:"1920*1080"},zoom:{scale:1,min:.1,max:5},offset:{x:0,y:0},background:{color:"#1e293b",size:"origin",repeat:"repeat"},grid:{enabled:!0,size:10,color:"#475569",type:"dot"},snap:{enabled:!0,threshold:10},guides:{enabled:!1,color:"#3b82f6"},magnetism:{enabled:!0,threshold:10}},Wt=[{key:"sizePreset",label:"画布尺寸",type:"select",category:"basic",path:"size.preset",defaultValue:"1920*1080",options:[{label:"1920*1080",value:"1920*1080"},{label:"1366*768",value:"1366*768"},{label:"1280*720",value:"1280*720"},{label:"800*600",value:"800*600"}],description:"预设画布尺寸"},{key:"scale",label:"缩放倍数",type:"slider",category:"transform",path:"zoom.scale",defaultValue:1,min:.1,max:5,step:.1,description:"画布缩放比例"},{key:"offsetX",label:"画布X轴偏移",type:"number",category:"transform",path:"offset.x",defaultValue:0,description:"X轴偏移量"},{key:"offsetY",label:"画布Y轴偏移",type:"number",category:"transform",path:"offset.y",defaultValue:0,description:"Y轴偏移量"},{key:"backgroundColor",label:"背景颜色",type:"color",category:"background",path:"background.color",defaultValue:"#1e293b",description:"画布背景颜色"},{key:"backgroundImage",label:"背景图片",type:"image",category:"background",path:"background.image",defaultValue:"",description:"背景图片URL"},{key:"backgroundSize",label:"背景大小",type:"select",category:"background",path:"background.size",defaultValue:"origin",options:[{label:"原始",value:"origin"},{label:"包含",value:"contain"},{label:"覆盖",value:"cover"},{label:"拉伸",value:"stretch"}],description:"背景图片尺寸模式"},{key:"backgroundRepeat",label:"图像重复",type:"select",category:"background",path:"background.repeat",defaultValue:"repeat",options:[{label:"重复",value:"repeat"},{label:"X轴重复",value:"repeat-x"},{label:"Y轴重复",value:"repeat-y"},{label:"不重复",value:"no-repeat"}],description:"背景图片重复模式"},{key:"gridEnabled",label:"网格",type:"boolean",category:"assist",path:"grid.enabled",defaultValue:!0,description:"显示网格"},{key:"gridSize",label:"网格大小",type:"number",category:"assist",path:"grid.size",defaultValue:10,min:5,max:50,description:"网格单元格大小"},{key:"snapEnabled",label:"网格对齐",type:"boolean",category:"assist",path:"snap.enabled",defaultValue:!0,description:"启用网格对齐"},{key:"guidesEnabled",label:"参考线",type:"boolean",category:"assist",path:"guides.enabled",defaultValue:!0,description:"显示参考线"},{key:"magnetismEnabled",label:"吸附",type:"boolean",category:"assist",path:"magnetism.enabled",defaultValue:!0,description:"启用吸附功能"}],ue={"1920*1080":{width:1920,height:1080},"1366*768":{width:1366,height:768},"1280*720":{width:1280,height:720},"800*600":{width:800,height:600}};class Ft{constructor(){be(this,"config");this.config=e.reactive({...Be})}getConfig(){return this.config}updateConfig(l){Object.assign(this.config,l)}updateByPath(l,n){const r=l.split(".");let t=this.config;for(let s=0;s<r.length-1;s++)t=t[r[s]];if(t[r[r.length-1]]=n,l==="size.preset"&&n in ue){const{width:s,height:d}=ue[n];this.config.size.width=s,this.config.size.height=d}}getByPath(l){const n=l.split(".");let r=this.config;for(const t of n)r=r==null?void 0:r[t];return r}setSize(l,n,r){this.config.size.width=l,this.config.size.height=n,r&&(this.config.size.preset=r)}updateSize(l){this.config.size.width=l.width,this.config.size.height=l.height}setZoom(l){const{min:n=.1,max:r=5}=this.config.zoom;this.config.zoom.scale=Math.max(n,Math.min(r,l))}setOffset(l,n){this.config.offset.x=l,this.config.offset.y=n}setBackgroundColor(l){this.config.background.color=l}updateBackground(l){l.color!==void 0&&(this.config.background.color=l.color),l.image!==void 0&&(this.config.background.image=l.image),l.size!==void 0&&(this.config.background.size=l.size),l.repeat!==void 0&&(this.config.background.repeat=l.repeat)}setBackgroundImage(l){this.config.background.image=l}toggleGrid(l){this.config.grid.enabled=l??!this.config.grid.enabled}setGridSize(l){this.config.grid.size=l}toggleSnap(l){this.config.snap.enabled=l??!this.config.snap.enabled}toggleGuides(l){this.config.guides.enabled=l??!this.config.guides.enabled}toggleMagnetism(l){this.config.magnetism.enabled=l??!this.config.magnetism.enabled}reset(){Object.assign(this.config,Be)}export(){return JSON.stringify(this.config,null,2)}import(l){try{const n=JSON.parse(l);Object.assign(this.config,n)}catch(n){console.error("导入画布配置失败:",n)}}}const R=new Ft,jt={class:"component-library"},Gt={class:"library-content"},Ht={key:0,class:"component-section"},Jt={class:"component-grid"},qt=["onClick","title"],Yt={class:"component-icon"},Xt={class:"component-name"},Kt={key:1,class:"component-section"},Zt={class:"component-grid"},Qt=["onClick","title"],eo={class:"component-icon"},to={class:"component-name"},Se=H(e.defineComponent({__name:"ComponentLibrary",emits:["addComponent"],setup(i,{emit:l}){const n=l,r=e.computed(()=>me.getComponentsByCategory("basic")),t=e.computed(()=>me.getComponentsByCategory("iot")),s=d=>{n("addComponent",d.metadata.id)};return(d,c)=>(e.openBlock(),e.createElementBlock("aside",jt,[c[2]||(c[2]=e.createElementVNode("div",{class:"library-header"},[e.createElementVNode("h3",null,"组件库")],-1)),e.createElementVNode("div",Gt,[r.value.length>0?(e.openBlock(),e.createElementBlock("div",Ht,[c[0]||(c[0]=e.createElementVNode("h4",{class:"section-title"},"基础组件",-1)),e.createElementVNode("div",Jt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.metadata.id,class:"component-item",onClick:g=>s(p),title:p.metadata.description||p.metadata.name},[e.createElementVNode("span",Yt,e.toDisplayString(p.metadata.icon),1),e.createElementVNode("span",Xt,e.toDisplayString(p.metadata.name),1)],8,qt))),128))])])):e.createCommentVNode("",!0),t.value.length>0?(e.openBlock(),e.createElementBlock("div",Kt,[c[1]||(c[1]=e.createElementVNode("h4",{class:"section-title"},"IoT组件",-1)),e.createElementVNode("div",Zt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.metadata.id,class:"component-item",onClick:g=>s(p),title:p.metadata.description||p.metadata.name},[e.createElementVNode("span",eo,e.toDisplayString(p.metadata.icon),1),e.createElementVNode("span",to,e.toDisplayString(p.metadata.name),1)],8,Qt))),128))])])):e.createCommentVNode("",!0)])]))}}),[["__scopeId","data-v-92bb4e17"]]),oo={class:"canvas-area"},no=H(e.defineComponent({__name:"CanvasArea",setup(i,{expose:l}){const n=e.ref();return l({containerRef:n}),(r,t)=>(e.openBlock(),e.createElementBlock("div",oo,[e.createElementVNode("div",{ref_key:"containerRef",ref:n,class:"canvas-container"},null,512)]))}}),[["__scopeId","data-v-a869f6aa"]]),lo={class:"canvas-config-panel"},ao={class:"panel-content"},so={class:"config-section"},io={class:"config-item"},ro={class:"config-section"},co={class:"config-item"},po={class:"slider-group"},mo={class:"value-display"},uo={class:"config-item"},go={class:"number-input-group"},fo={class:"config-item"},Eo={class:"number-input-group"},yo={class:"config-section"},bo={class:"config-item"},No={class:"config-item"},ho={class:"image-upload"},Vo={class:"config-item"},ko={class:"config-item"},Co={class:"config-section"},$o={class:"config-item"},vo={class:"switch"},wo={class:"config-item"},Bo={class:"switch"},So={class:"config-item"},_o={class:"switch"},xo={key:0,class:"config-item"},Io={class:"number-input-group"},_e=H(e.defineComponent({__name:"CanvasConfigPanel",setup(i){const l=e.computed(()=>R.getConfig()),n=e.ref(),r=()=>{const g=l.value.size.preset;if(g&&g in ue){const{width:a,height:o}=ue[g];R.setSize(a,o,g)}},t=(g,a)=>{const o=l.value.offset[g];R.setOffset(g==="x"?o+a:l.value.offset.x,g==="y"?o+a:l.value.offset.y)},s=g=>{const a=Math.max(5,Math.min(50,l.value.grid.size+g));R.setGridSize(a)},d=()=>{var g;(g=n.value)==null||g.click()},c=g=>{var u;const o=(u=g.target.files)==null?void 0:u[0];if(o){const f=new FileReader;f.onload=b=>{var F;const S=(F=b.target)==null?void 0:F.result;R.updateByPath("background.image",S)},f.readAsDataURL(o)}},p=()=>{R.updateByPath("background.image",""),n.value&&(n.value.value="")};return(g,a)=>(e.openBlock(),e.createElementBlock("div",lo,[a[40]||(a[40]=e.createElementVNode("div",{class:"panel-header"},[e.createElementVNode("h3",null,"画布配置")],-1)),e.createElementVNode("div",ao,[e.createElementVNode("div",so,[a[19]||(a[19]=e.createElementVNode("h4",{class:"section-title"},"基础配置",-1)),e.createElementVNode("div",io,[a[18]||(a[18]=e.createElementVNode("label",null,"画布尺寸",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":a[0]||(a[0]=o=>l.value.size.preset=o),onChange:r,class:"config-select"},[...a[17]||(a[17]=[e.createElementVNode("option",{value:"1920*1080"},"1920*1080",-1),e.createElementVNode("option",{value:"1366*768"},"1366*768",-1),e.createElementVNode("option",{value:"1280*720"},"1280*720",-1),e.createElementVNode("option",{value:"800*600"},"800*600",-1)])],544),[[e.vModelSelect,l.value.size.preset]])])]),e.createElementVNode("div",ro,[a[23]||(a[23]=e.createElementVNode("h4",{class:"section-title"},"变换",-1)),e.createElementVNode("div",co,[a[20]||(a[20]=e.createElementVNode("label",null,"缩放倍数",-1)),e.createElementVNode("div",po,[e.withDirectives(e.createElementVNode("input",{type:"range","onUpdate:modelValue":a[1]||(a[1]=o=>l.value.zoom.scale=o),min:.1,max:5,step:.1,class:"config-slider"},null,512),[[e.vModelText,l.value.zoom.scale,void 0,{number:!0}]]),e.createElementVNode("span",mo,e.toDisplayString(l.value.zoom.scale.toFixed(1)),1)])]),e.createElementVNode("div",uo,[a[21]||(a[21]=e.createElementVNode("label",null,"画布X轴偏移",-1)),e.createElementVNode("div",go,[e.createElementVNode("button",{onClick:a[2]||(a[2]=o=>t("x",-10)),class:"adjust-btn"},"-"),e.withDirectives(e.createElementVNode("input",{type:"number","onUpdate:modelValue":a[3]||(a[3]=o=>l.value.offset.x=o),class:"config-number"},null,512),[[e.vModelText,l.value.offset.x,void 0,{number:!0}]]),e.createElementVNode("button",{onClick:a[4]||(a[4]=o=>t("x",10)),class:"adjust-btn"},"+")])]),e.createElementVNode("div",fo,[a[22]||(a[22]=e.createElementVNode("label",null,"画布Y轴偏移",-1)),e.createElementVNode("div",Eo,[e.createElementVNode("button",{onClick:a[5]||(a[5]=o=>t("y",-10)),class:"adjust-btn"},"-"),e.withDirectives(e.createElementVNode("input",{type:"number","onUpdate:modelValue":a[6]||(a[6]=o=>l.value.offset.y=o),class:"config-number"},null,512),[[e.vModelText,l.value.offset.y,void 0,{number:!0}]]),e.createElementVNode("button",{onClick:a[7]||(a[7]=o=>t("y",10)),class:"adjust-btn"},"+")])])]),e.createElementVNode("div",yo,[a[31]||(a[31]=e.createElementVNode("h4",{class:"section-title"},"背景",-1)),e.createElementVNode("div",bo,[a[24]||(a[24]=e.createElementVNode("label",null,"背景颜色",-1)),e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":a[8]||(a[8]=o=>l.value.background.color=o),class:"config-color"},null,512),[[e.vModelText,l.value.background.color]])]),e.createElementVNode("div",No,[a[26]||(a[26]=e.createElementVNode("label",null,"背景图片",-1)),e.createElementVNode("div",ho,[e.createElementVNode("input",{type:"file",accept:"image/*",onChange:c,ref_key:"fileInput",ref:n,style:{display:"none"}},null,544),e.createElementVNode("button",{onClick:d,class:"upload-btn"},[...a[25]||(a[25]=[e.createElementVNode("span",null,"📄",-1)])]),l.value.background.image?(e.openBlock(),e.createElementBlock("button",{key:0,onClick:p,class:"clear-btn",title:"清除背景图"}," ✕ ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Vo,[a[28]||(a[28]=e.createElementVNode("label",null,"背景大小",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":a[9]||(a[9]=o=>l.value.background.size=o),class:"config-select"},[...a[27]||(a[27]=[e.createElementVNode("option",{value:"origin"},"原始",-1),e.createElementVNode("option",{value:"contain"},"包含",-1),e.createElementVNode("option",{value:"cover"},"覆盖",-1),e.createElementVNode("option",{value:"stretch"},"拉伸",-1)])],512),[[e.vModelSelect,l.value.background.size]])]),e.createElementVNode("div",ko,[a[30]||(a[30]=e.createElementVNode("label",null,"图像重复",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":a[10]||(a[10]=o=>l.value.background.repeat=o),class:"config-select"},[...a[29]||(a[29]=[e.createElementVNode("option",{value:"repeat"},"重复",-1),e.createElementVNode("option",{value:"repeat-x"},"X轴重复",-1),e.createElementVNode("option",{value:"repeat-y"},"Y轴重复",-1),e.createElementVNode("option",{value:"no-repeat"},"不重复",-1)])],512),[[e.vModelSelect,l.value.background.repeat]])])]),e.createElementVNode("div",Co,[a[39]||(a[39]=e.createElementVNode("h4",{class:"section-title"},"辅助",-1)),e.createElementVNode("div",$o,[a[33]||(a[33]=e.createElementVNode("label",null,"吸附",-1)),e.createElementVNode("label",vo,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":a[11]||(a[11]=o=>l.value.magnetism.enabled=o)},null,512),[[e.vModelCheckbox,l.value.magnetism.enabled]]),a[32]||(a[32]=e.createElementVNode("span",{class:"slider"},null,-1))])]),e.createElementVNode("div",wo,[a[35]||(a[35]=e.createElementVNode("label",null,"网格",-1)),e.createElementVNode("label",Bo,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":a[12]||(a[12]=o=>l.value.grid.enabled=o)},null,512),[[e.vModelCheckbox,l.value.grid.enabled]]),a[34]||(a[34]=e.createElementVNode("span",{class:"slider"},null,-1))])]),e.createElementVNode("div",So,[a[37]||(a[37]=e.createElementVNode("label",null,"网格对齐",-1)),e.createElementVNode("label",_o,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":a[13]||(a[13]=o=>l.value.snap.enabled=o)},null,512),[[e.vModelCheckbox,l.value.snap.enabled]]),a[36]||(a[36]=e.createElementVNode("span",{class:"slider"},null,-1))])]),l.value.grid.enabled?(e.openBlock(),e.createElementBlock("div",xo,[a[38]||(a[38]=e.createElementVNode("label",null,"网格大小",-1)),e.createElementVNode("div",Io,[e.createElementVNode("button",{onClick:a[14]||(a[14]=o=>s(-5)),class:"adjust-btn"},"-"),e.withDirectives(e.createElementVNode("input",{type:"number","onUpdate:modelValue":a[15]||(a[15]=o=>l.value.grid.size=o),min:5,max:50,class:"config-number"},null,512),[[e.vModelText,l.value.grid.size,void 0,{number:!0}]]),e.createElementVNode("button",{onClick:a[16]||(a[16]=o=>s(5)),class:"adjust-btn"},"+")])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-f309895b"]]),Do={class:"tab-pane"},To={class:"property-section"},Po={class:"property-item-inline"},Ao=["value"],Mo={class:"property-item-inline"},zo=["value"],Oo={class:"property-item-inline"},Uo=["value"],Ro={class:"property-section"},Lo={class:"property-row"},Wo={class:"property-item"},Fo=["value"],jo={class:"property-item"},Go=["value"],Ho={class:"property-row"},Jo={class:"property-item"},qo=["value"],Yo={class:"property-item"},Xo=["value"],Ko={class:"property-section"},Zo={class:"property-item-inline"},Qo=["value"],en={class:"property-item-inline"},tn={class:"color-input-wrapper"},on=["value"],nn={class:"color-value"},ln={class:"property-item-inline"},an={class:"color-input-wrapper"},sn=["value"],rn={class:"color-value"},dn={class:"property-item-inline"},cn=["value"],pn={class:"property-item-inline"},mn=["value"],un={key:0,class:"property-section"},gn={key:0,class:"property-hint"},fn=["value","onInput","placeholder"],En=["value","onInput","min","max","step"],yn={key:2,class:"color-input-wrapper"},bn=["value","onInput"],Nn={class:"color-value"},hn={key:3,class:"checkbox-wrapper"},Vn=["checked","onChange"],kn={class:"checkbox-label"},Cn=["value","onChange"],$n=["value"],xe=H(e.defineComponent({__name:"BasicPropertiesTab",props:{selectedNode:{},nodePosition:{},nodeSize:{},nodeAttrs:{}},emits:["update-position","update-size","update-label","update-fill","update-stroke","update-stroke-width","update-opacity","update-component-name","update-dynamic-prop"],setup(i,{emit:l}){const n=i,r=l,t=e.computed(()=>{var p,g;if(!((g=(p=n.selectedNode)==null?void 0:p.data)!=null&&g.props))return[];const c=["label","fill","stroke","strokeWidth","opacity"];return n.selectedNode.data.props.filter(a=>!c.includes(a.key))}),s=c=>{if(!c.path)return c.defaultValue;const p=c.path.split(".");let g=n.selectedNode;for(const a of p)if(g&&typeof g=="object")g=g[a];else return c.defaultValue;return g!==void 0?g:c.defaultValue},d=(c,p)=>{const g=p.target;let a;c.type==="number"?a=Number(g.value):c.type==="boolean"?a=g.checked:a=g.value,r("update-dynamic-prop",c.path,a)};return(c,p)=>{var g,a,o,u,f,b,S,F,z,h,N,E,V,y,D,O,A;return e.openBlock(),e.createElementBlock("div",Do,[e.createElementVNode("div",To,[p[13]||(p[13]=e.createElementVNode("h4",null,"基础信息",-1)),e.createElementVNode("div",Po,[p[10]||(p[10]=e.createElementVNode("label",null,"组件名称",-1)),e.createElementVNode("input",{type:"text",value:((g=i.selectedNode.getData())==null?void 0:g.componentName)||"",onInput:p[0]||(p[0]=w=>c.$emit("update-component-name",w)),placeholder:"请输入组件名称"},null,40,Ao)]),e.createElementVNode("div",Mo,[p[11]||(p[11]=e.createElementVNode("label",null,"ID",-1)),e.createElementVNode("input",{type:"text",value:i.selectedNode.id,disabled:""},null,8,zo)]),e.createElementVNode("div",Oo,[p[12]||(p[12]=e.createElementVNode("label",null,"类型",-1)),e.createElementVNode("input",{type:"text",value:i.selectedNode.shape,disabled:""},null,8,Uo)])]),e.createElementVNode("div",Ro,[p[18]||(p[18]=e.createElementVNode("h4",null,"位置和尺寸",-1)),e.createElementVNode("div",Lo,[e.createElementVNode("div",Wo,[p[14]||(p[14]=e.createElementVNode("label",null,"X",-1)),e.createElementVNode("input",{type:"number",value:i.nodePosition.x,onInput:p[1]||(p[1]=w=>c.$emit("update-position","x",w))},null,40,Fo)]),e.createElementVNode("div",jo,[p[15]||(p[15]=e.createElementVNode("label",null,"Y",-1)),e.createElementVNode("input",{type:"number",value:i.nodePosition.y,onInput:p[2]||(p[2]=w=>c.$emit("update-position","y",w))},null,40,Go)])]),e.createElementVNode("div",Ho,[e.createElementVNode("div",Jo,[p[16]||(p[16]=e.createElementVNode("label",null,"宽度",-1)),e.createElementVNode("input",{type:"number",value:i.nodeSize.width,onInput:p[3]||(p[3]=w=>c.$emit("update-size","width",w))},null,40,qo)]),e.createElementVNode("div",Yo,[p[17]||(p[17]=e.createElementVNode("label",null,"高度",-1)),e.createElementVNode("input",{type:"number",value:i.nodeSize.height,onInput:p[4]||(p[4]=w=>c.$emit("update-size","height",w))},null,40,Xo)])])]),e.createElementVNode("div",Ko,[p[24]||(p[24]=e.createElementVNode("h4",null,"样式",-1)),e.createElementVNode("div",Zo,[p[19]||(p[19]=e.createElementVNode("label",null,"初始文本",-1)),e.createElementVNode("input",{type:"text",value:((o=(a=i.nodeAttrs)==null?void 0:a.text)==null?void 0:o.text)||((f=(u=i.nodeAttrs)==null?void 0:u.label)==null?void 0:f.text)||i.selectedNode.getProp("label")||"",onInput:p[5]||(p[5]=w=>c.$emit("update-label",w)),placeholder:"设置默认显示文本"},null,40,Qo)]),e.createElementVNode("div",en,[p[20]||(p[20]=e.createElementVNode("label",null,"填充颜色",-1)),e.createElementVNode("div",tn,[e.createElementVNode("input",{type:"color",value:((S=(b=i.nodeAttrs)==null?void 0:b.body)==null?void 0:S.fill)||"#3b82f6",onInput:p[6]||(p[6]=w=>c.$emit("update-fill",w))},null,40,on),e.createElementVNode("span",nn,e.toDisplayString(((z=(F=i.nodeAttrs)==null?void 0:F.body)==null?void 0:z.fill)||"#3b82f6"),1)])]),e.createElementVNode("div",ln,[p[21]||(p[21]=e.createElementVNode("label",null,"边框颜色",-1)),e.createElementVNode("div",an,[e.createElementVNode("input",{type:"color",value:((N=(h=i.nodeAttrs)==null?void 0:h.body)==null?void 0:N.stroke)||"#2563eb",onInput:p[7]||(p[7]=w=>c.$emit("update-stroke",w))},null,40,sn),e.createElementVNode("span",rn,e.toDisplayString(((V=(E=i.nodeAttrs)==null?void 0:E.body)==null?void 0:V.stroke)||"#2563eb"),1)])]),e.createElementVNode("div",dn,[p[22]||(p[22]=e.createElementVNode("label",null,"边框宽度",-1)),e.createElementVNode("input",{type:"number",min:"0",max:"10",value:((D=(y=i.nodeAttrs)==null?void 0:y.body)==null?void 0:D.strokeWidth)||2,onInput:p[8]||(p[8]=w=>c.$emit("update-stroke-width",w))},null,40,cn)]),e.createElementVNode("div",pn,[p[23]||(p[23]=e.createElementVNode("label",null,"透明度",-1)),e.createElementVNode("input",{type:"number",min:"0",max:"1",step:"0.1",value:((A=(O=i.nodeAttrs)==null?void 0:O.body)==null?void 0:A.opacity)!==void 0?i.nodeAttrs.body.opacity:1,onInput:p[9]||(p[9]=w=>c.$emit("update-opacity",w))},null,40,mn)])]),t.value.length>0?(e.openBlock(),e.createElementBlock("div",un,[p[25]||(p[25]=e.createElementVNode("h4",null,"组件属性",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value,w=>(e.openBlock(),e.createElementBlock("div",{key:w.key,class:"property-item-inline"},[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(w.label)+" ",1),w.description?(e.openBlock(),e.createElementBlock("span",gn,e.toDisplayString(w.description),1)):e.createCommentVNode("",!0)]),w.type==="text"?(e.openBlock(),e.createElementBlock("input",{key:0,type:"text",value:s(w),onInput:B=>d(w,B),placeholder:w.defaultValue},null,40,fn)):w.type==="number"?(e.openBlock(),e.createElementBlock("input",{key:1,type:"number",value:s(w),onInput:B=>d(w,B),min:w.min,max:w.max,step:w.step},null,40,En)):w.type==="color"?(e.openBlock(),e.createElementBlock("div",yn,[e.createElementVNode("input",{type:"color",value:s(w),onInput:B=>d(w,B)},null,40,bn),e.createElementVNode("span",Nn,e.toDisplayString(s(w)),1)])):w.type==="boolean"?(e.openBlock(),e.createElementBlock("div",hn,[e.createElementVNode("input",{type:"checkbox",checked:s(w),onChange:B=>d(w,B)},null,40,Vn),e.createElementVNode("span",kn,e.toDisplayString(s(w)?"是":"否"),1)])):w.type==="select"?(e.openBlock(),e.createElementBlock("select",{key:4,value:s(w),onChange:B=>d(w,B)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.options,B=>(e.openBlock(),e.createElementBlock("option",{key:B.value,value:B.value},e.toDisplayString(B.label),9,$n))),128))],40,Cn)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])}}}),[["__scopeId","data-v-def84c5f"]]),vn={class:"tab-pane"},wn={class:"property-section"},Bn={class:"property-item-inline"},Sn=["value"],_n={key:0,class:"property-section"},xn={class:"property-item-inline"},In=["value"],Dn={class:"property-item-inline"},Tn=["value"],Pn={class:"property-item-inline"},An=["value"],Mn={class:"property-item-inline"},zn=["value"],On={class:"property-item-inline"},Un=["value"],Rn={class:"property-item-inline"},Ln=["value"],Wn={key:1,class:"property-section"},Fn={class:"property-item-inline"},jn=["value"],Gn={class:"property-item-inline"},Hn=["value"],Jn={class:"property-item-inline"},qn=["value"],Yn={class:"property-item-inline"},Xn=["value"],Kn={class:"property-item-inline"},Zn=["value"],Qn={class:"property-item-inline"},el=["value"],tl={key:2,class:"property-section"},ol={class:"property-item-inline"},nl=["value"],ll={class:"property-item-inline"},al=["value"],sl={class:"property-item-inline"},il=["value"],rl={class:"property-item-inline"},dl=["value"],cl={class:"property-item-inline"},pl={class:"checkbox-wrapper"},ml=["checked"],ul={class:"checkbox-label"},gl={key:3,class:"property-section"},fl={class:"property-item-inline"},El=["value"],yl={class:"property-item-inline"},bl=["value"],Nl={class:"property-item-inline"},hl=["value"],Vl={key:4,class:"property-section"},kl={class:"property-item-inline"},Cl=["value"],$l={class:"property-item-inline"},vl=["value"],wl={key:5,class:"property-section"},Bl={class:"property-item-inline"},Sl={class:"checkbox-wrapper"},_l=["checked"],xl={class:"checkbox-label"},Il={class:"property-item-inline"},Dl=["value"],Tl=H(e.defineComponent({__name:"DataPropertiesTab",props:{selectedNode:{}},emits:["update-data-source"],setup(i,{emit:l}){const n=i,r=l,t=e.ref({type:"none",enabled:!0,retryCount:3});e.watch(()=>n.selectedNode,a=>{if(a){const o=a.getData();o!=null&&o.dataSource?t.value={...o.dataSource}:t.value={type:"none",enabled:!0,retryCount:3}}},{immediate:!0});const s=a=>{const o=a.target.value;let u={type:o,enabled:!0,retryCount:3};o==="http"?(u.pollInterval=5e3,u.method="GET"):o==="sse"&&(u.autoReconnect=!0),t.value=u,g()},d=(a,o)=>{const u=o.target;let f;u.type==="number"?f=Number(u.value):f=u.value,t.value={...t.value,[a]:f},g()},c=(a,o)=>{const u=o.target.checked;t.value={...t.value,[a]:u},g()},p=a=>{const o=a.target.checked;t.value={...t.value,enabled:o},g()},g=()=>{r("update-data-source",t.value)};return(a,o)=>(e.openBlock(),e.createElementBlock("div",vn,[e.createElementVNode("div",wn,[o[25]||(o[25]=e.createElementVNode("h4",null,"数据来源",-1)),e.createElementVNode("div",Bn,[o[24]||(o[24]=e.createElementVNode("label",null,"来源类型",-1)),e.createElementVNode("select",{value:t.value.type,onChange:s},[...o[23]||(o[23]=[e.createStaticVNode('<option value="none" data-v-5b515f8a>无数据源</option><option value="mqtt" data-v-5b515f8a>MQTT</option><option value="websocket" data-v-5b515f8a>WebSocket</option><option value="http" data-v-5b515f8a>HTTP</option><option value="sse" data-v-5b515f8a>SSE</option><option value="static" data-v-5b515f8a>静态数据</option>',6)])],40,Sn)])]),t.value.type==="mqtt"?(e.openBlock(),e.createElementBlock("div",_n,[o[32]||(o[32]=e.createElementVNode("h4",null,"MQTT配置",-1)),e.createElementVNode("div",xn,[o[26]||(o[26]=e.createElementVNode("label",null,"服务器",-1)),e.createElementVNode("input",{type:"text",value:t.value.broker||"",onInput:o[0]||(o[0]=u=>d("broker",u)),placeholder:"mqtt://localhost:1883"},null,40,In)]),e.createElementVNode("div",Dn,[o[27]||(o[27]=e.createElementVNode("label",null,"客户端ID",-1)),e.createElementVNode("input",{type:"text",value:t.value.clientId||"",onInput:o[1]||(o[1]=u=>d("clientId",u)),placeholder:"自动生成"},null,40,Tn)]),e.createElementVNode("div",Pn,[o[28]||(o[28]=e.createElementVNode("label",null,"订阅主题",-1)),e.createElementVNode("input",{type:"text",value:t.value.topic||"",onInput:o[2]||(o[2]=u=>d("topic",u)),placeholder:"例如: sensor/temperature"},null,40,An)]),e.createElementVNode("div",Mn,[o[29]||(o[29]=e.createElementVNode("label",null,"用户名",-1)),e.createElementVNode("input",{type:"text",value:t.value.username||"",onInput:o[3]||(o[3]=u=>d("username",u)),placeholder:"可选"},null,40,zn)]),e.createElementVNode("div",On,[o[30]||(o[30]=e.createElementVNode("label",null,"密码",-1)),e.createElementVNode("input",{type:"password",value:t.value.password||"",onInput:o[4]||(o[4]=u=>d("password",u)),placeholder:"可选"},null,40,Un)]),e.createElementVNode("div",Rn,[o[31]||(o[31]=e.createElementVNode("label",null,"数据路径",-1)),e.createElementVNode("input",{type:"text",value:t.value.dataPath||"",onInput:o[5]||(o[5]=u=>d("dataPath",u)),placeholder:"例如: value"},null,40,Ln)])])):e.createCommentVNode("",!0),t.value.type==="http"?(e.openBlock(),e.createElementBlock("div",Wn,[o[40]||(o[40]=e.createElementVNode("h4",null,"HTTP配置",-1)),e.createElementVNode("div",Fn,[o[33]||(o[33]=e.createElementVNode("label",null,"接口地址",-1)),e.createElementVNode("input",{type:"text",value:t.value.url||"",onInput:o[6]||(o[6]=u=>d("url",u)),placeholder:"https://api.example.com/data"},null,40,jn)]),e.createElementVNode("div",Gn,[o[35]||(o[35]=e.createElementVNode("label",null,"请求方法",-1)),e.createElementVNode("select",{value:t.value.method||"GET",onChange:o[7]||(o[7]=u=>d("method",u))},[...o[34]||(o[34]=[e.createElementVNode("option",{value:"GET"},"GET",-1),e.createElementVNode("option",{value:"POST"},"POST",-1),e.createElementVNode("option",{value:"PUT"},"PUT",-1),e.createElementVNode("option",{value:"DELETE"},"DELETE",-1)])],40,Hn)]),e.createElementVNode("div",Jn,[o[36]||(o[36]=e.createElementVNode("label",null,"请求头",-1)),e.createElementVNode("input",{type:"text",value:t.value.headers||"",onInput:o[8]||(o[8]=u=>d("headers",u)),placeholder:"JSON格式"},null,40,qn)]),e.createElementVNode("div",Yn,[o[37]||(o[37]=e.createElementVNode("label",null,"请求体",-1)),e.createElementVNode("input",{type:"text",value:t.value.body||"",onInput:o[9]||(o[9]=u=>d("body",u)),placeholder:"POST/PUT请求的数据"},null,40,Xn)]),e.createElementVNode("div",Kn,[o[38]||(o[38]=e.createElementVNode("label",null,"数据路径",-1)),e.createElementVNode("input",{type:"text",value:t.value.dataPath||"",onInput:o[10]||(o[10]=u=>d("dataPath",u)),placeholder:"例如: data.value"},null,40,Zn)]),e.createElementVNode("div",Qn,[o[39]||(o[39]=e.createElementVNode("label",null,"轮询间隔(ms)",-1)),e.createElementVNode("input",{type:"number",value:t.value.pollInterval||5e3,onInput:o[11]||(o[11]=u=>d("pollInterval",u)),min:"1000",step:"1000"},null,40,el)])])):e.createCommentVNode("",!0),t.value.type==="sse"?(e.openBlock(),e.createElementBlock("div",tl,[o[46]||(o[46]=e.createElementVNode("h4",null,"SSE配置",-1)),e.createElementVNode("div",ol,[o[41]||(o[41]=e.createElementVNode("label",null,"服务地址",-1)),e.createElementVNode("input",{type:"text",value:t.value.sseUrl||"",onInput:o[12]||(o[12]=u=>d("sseUrl",u)),placeholder:"https://api.example.com/events"},null,40,nl)]),e.createElementVNode("div",ll,[o[42]||(o[42]=e.createElementVNode("label",null,"事件类型",-1)),e.createElementVNode("input",{type:"text",value:t.value.eventType||"",onInput:o[13]||(o[13]=u=>d("eventType",u)),placeholder:"留空表示所有事件"},null,40,al)]),e.createElementVNode("div",sl,[o[43]||(o[43]=e.createElementVNode("label",null,"请求头",-1)),e.createElementVNode("input",{type:"text",value:t.value.headers||"",onInput:o[14]||(o[14]=u=>d("headers",u)),placeholder:"JSON格式"},null,40,il)]),e.createElementVNode("div",rl,[o[44]||(o[44]=e.createElementVNode("label",null,"数据路径",-1)),e.createElementVNode("input",{type:"text",value:t.value.dataPath||"",onInput:o[15]||(o[15]=u=>d("dataPath",u)),placeholder:"例如: data.value"},null,40,dl)]),e.createElementVNode("div",cl,[o[45]||(o[45]=e.createElementVNode("label",null,"自动重连",-1)),e.createElementVNode("div",pl,[e.createElementVNode("input",{type:"checkbox",checked:t.value.autoReconnect!==!1,onChange:o[16]||(o[16]=u=>c("autoReconnect",u))},null,40,ml),e.createElementVNode("span",ul,e.toDisplayString(t.value.autoReconnect!==!1?"是":"否"),1)])])])):e.createCommentVNode("",!0),t.value.type==="websocket"?(e.openBlock(),e.createElementBlock("div",gl,[o[50]||(o[50]=e.createElementVNode("h4",null,"WebSocket配置",-1)),e.createElementVNode("div",fl,[o[47]||(o[47]=e.createElementVNode("label",null,"服务地址",-1)),e.createElementVNode("input",{type:"text",value:t.value.wsUrl||"",onInput:o[17]||(o[17]=u=>d("wsUrl",u)),placeholder:"ws://localhost:8080"},null,40,El)]),e.createElementVNode("div",yl,[o[48]||(o[48]=e.createElementVNode("label",null,"订阅主题",-1)),e.createElementVNode("input",{type:"text",value:t.value.topic||"",onInput:o[18]||(o[18]=u=>d("topic",u)),placeholder:"例如: device/status"},null,40,bl)]),e.createElementVNode("div",Nl,[o[49]||(o[49]=e.createElementVNode("label",null,"数据路径",-1)),e.createElementVNode("input",{type:"text",value:t.value.dataPath||"",onInput:o[19]||(o[19]=u=>d("dataPath",u)),placeholder:"例如: payload.value"},null,40,hl)])])):e.createCommentVNode("",!0),t.value.type==="static"?(e.openBlock(),e.createElementBlock("div",Vl,[o[54]||(o[54]=e.createElementVNode("h4",null,"静态数据配置",-1)),e.createElementVNode("div",kl,[o[51]||(o[51]=e.createElementVNode("label",null,"数据值",-1)),e.createElementVNode("input",{type:"text",value:t.value.value||"",onInput:o[20]||(o[20]=u=>d("value",u)),placeholder:"请输入数据值"},null,40,Cl)]),e.createElementVNode("div",$l,[o[53]||(o[53]=e.createElementVNode("label",null,"数据类型",-1)),e.createElementVNode("select",{value:t.value.valueType||"string",onChange:o[21]||(o[21]=u=>d("valueType",u))},[...o[52]||(o[52]=[e.createElementVNode("option",{value:"string"},"字符串",-1),e.createElementVNode("option",{value:"number"},"数字",-1),e.createElementVNode("option",{value:"boolean"},"布尔值",-1),e.createElementVNode("option",{value:"json"},"JSON对象",-1)])],40,vl)])])):e.createCommentVNode("",!0),t.value.type!=="none"?(e.openBlock(),e.createElementBlock("div",wl,[o[57]||(o[57]=e.createElementVNode("h4",null,"通用配置",-1)),e.createElementVNode("div",Bl,[o[55]||(o[55]=e.createElementVNode("label",null,"启用状态",-1)),e.createElementVNode("div",Sl,[e.createElementVNode("input",{type:"checkbox",checked:t.value.enabled!==!1,onChange:p},null,40,_l),e.createElementVNode("span",xl,e.toDisplayString(t.value.enabled!==!1?"启用":"禁用"),1)])]),e.createElementVNode("div",Il,[o[56]||(o[56]=e.createElementVNode("label",null,"错误重试",-1)),e.createElementVNode("input",{type:"number",value:t.value.retryCount||3,onInput:o[22]||(o[22]=u=>d("retryCount",u)),min:"0",max:"10"},null,40,Dl)])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-5b515f8a"]]),Pl={class:"edge-properties-tab"},Al={class:"property-section"},Ml={class:"property-item"},zl={class:"color-input-wrapper"},Ol=["value"],Ul=["value"],Rl={class:"property-item"},Ll={class:"number-input-wrapper"},Wl=["value"],Fl={class:"property-item"},jl=["value"],Gl={class:"property-item"},Hl={class:"slider-wrapper"},Jl=["value"],ql={class:"slider-value"},Yl={class:"property-item"},Xl=["value"],Kl={key:0,class:"property-item"},Zl={class:"number-input-wrapper"},Ql=["value"],ea={class:"property-section"},ta={class:"property-item"},oa=["value"],na={class:"property-item"},la=["value"],aa={class:"property-section"},sa={class:"property-item"},ia=["value"],ra={class:"property-item"},da=["value"],ca=H(e.defineComponent({__name:"EdgePropertiesTab",props:{selectedEdge:{}},emits:["updateEdge","deleteEdge"],setup(i,{emit:l}){const n=i,r=l,t=e.computed(()=>{var V;return((V=n.selectedEdge)==null?void 0:V.getAttrs())||{}}),s=V=>{const y=V.target.value;r("updateEdge",{attrs:{line:{stroke:y}}})},d=V=>{const y=Number(V.target.value);r("updateEdge",{attrs:{line:{strokeWidth:y}}})},c=()=>{var y;const V=(y=t.value.line)==null?void 0:y.strokeDasharray;return V?V==="5,5"?"5,5":V==="2,2"?"2,2":V==="10,5,2,5"?"10,5,2,5":"none":"none"},p=V=>{const y=V.target.value;r("updateEdge",{attrs:{line:{strokeDasharray:y==="none"?void 0:y}}})},g=V=>{const y=Number(V.target.value);r("updateEdge",{attrs:{line:{opacity:y}}})},a=V=>{var D;const y=(D=t.value.line)==null?void 0:D[`${V}Marker`];return!y||typeof y!="object"||!y.name?"none":y.name},o=()=>{var D;const V=(D=t.value.line)==null?void 0:D.opacity;return((V!==void 0&&typeof V=="number"?V:1)*100).toFixed(0)},u=V=>{const y=V.target.value;r("updateEdge",{attrs:{line:{sourceMarker:y==="none"?void 0:{name:y,width:8,height:6}}}})},f=V=>{const y=V.target.value;r("updateEdge",{attrs:{line:{targetMarker:y==="none"?void 0:{name:y,width:8,height:6}}}})},b=V=>{const y=V.target.value;r("updateEdge",{router:y})},S=V=>{const y=V.target.value;r("updateEdge",{connector:{name:y,args:y==="rounded"?{radius:8}:void 0}})},F=()=>{r("deleteEdge")},z=()=>{var y,D;const V=(D=(y=n.selectedEdge)==null?void 0:y.data)==null?void 0:D.animation;return V!=null&&V.enabled?"true":"false"},h=()=>{var y,D;const V=(D=(y=n.selectedEdge)==null?void 0:y.data)==null?void 0:D.animation;return V!=null&&V.duration?V.duration/1e3:2},N=V=>{if(!(V.target.value==="true"))r("updateEdge",{data:{animation:{enabled:!1}},animation:{enabled:!1}});else{const D=h()*1e3;r("updateEdge",{data:{animation:{enabled:!0,duration:D}},animation:{enabled:!0,duration:D}})}},E=V=>{const D=Number(V.target.value)*1e3;r("updateEdge",{data:{animation:{enabled:!0,duration:D}},animation:{enabled:!0,duration:D}})};return(V,y)=>{var D,O,A,w,B,T,K,te;return e.openBlock(),e.createElementBlock("div",Pl,[e.createElementVNode("div",Al,[y[10]||(y[10]=e.createElementVNode("h4",{class:"section-title"},"线条样式",-1)),e.createElementVNode("div",Ml,[y[0]||(y[0]=e.createElementVNode("label",{class:"property-label"},"线条颜色",-1)),e.createElementVNode("div",zl,[e.createElementVNode("input",{type:"color",class:"color-input",value:((D=t.value.line)==null?void 0:D.stroke)||"#10b981",onInput:s},null,40,Ol),e.createElementVNode("input",{type:"text",class:"color-text",value:((O=t.value.line)==null?void 0:O.stroke)||"#10b981",onInput:s},null,40,Ul)])]),e.createElementVNode("div",Rl,[y[2]||(y[2]=e.createElementVNode("label",{class:"property-label"},"线条粗细",-1)),e.createElementVNode("div",Ll,[e.createElementVNode("input",{type:"number",class:"property-input",min:"1",max:"20",step:"1",value:((A=t.value.line)==null?void 0:A.strokeWidth)||2,onInput:d},null,40,Wl),y[1]||(y[1]=e.createElementVNode("span",{class:"input-unit"},"px",-1))])]),e.createElementVNode("div",Fl,[y[4]||(y[4]=e.createElementVNode("label",{class:"property-label"},"线条样式",-1)),e.createElementVNode("select",{class:"property-select",value:c(),onChange:p},[...y[3]||(y[3]=[e.createElementVNode("option",{value:"none"},"实线",-1),e.createElementVNode("option",{value:"5,5"},"虚线",-1),e.createElementVNode("option",{value:"2,2"},"点线",-1),e.createElementVNode("option",{value:"10,5,2,5"},"点划线",-1)])],40,jl)]),e.createElementVNode("div",Gl,[y[5]||(y[5]=e.createElementVNode("label",{class:"property-label"},"透明度",-1)),e.createElementVNode("div",Hl,[e.createElementVNode("input",{type:"range",class:"property-slider",min:"0",max:"1",step:"0.1",value:((w=t.value.line)==null?void 0:w.opacity)!==void 0?t.value.line.opacity:1,onInput:g},null,40,Jl),e.createElementVNode("span",ql,e.toDisplayString(o())+"%",1)])]),e.createElementVNode("div",Yl,[y[7]||(y[7]=e.createElementVNode("label",{class:"property-label"},"流动动画",-1)),e.createElementVNode("select",{class:"property-select",value:z(),onChange:N},[...y[6]||(y[6]=[e.createElementVNode("option",{value:"false"},"关闭",-1),e.createElementVNode("option",{value:"true"},"开启",-1)])],40,Xl)]),z()==="true"?(e.openBlock(),e.createElementBlock("div",Kl,[y[9]||(y[9]=e.createElementVNode("label",{class:"property-label"},"动画速度",-1)),e.createElementVNode("div",Zl,[e.createElementVNode("input",{type:"number",class:"property-input",min:"0.5",max:"10",step:"0.5",value:h(),onInput:E},null,40,Ql),y[8]||(y[8]=e.createElementVNode("span",{class:"input-unit"},"秒",-1))])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ea,[y[15]||(y[15]=e.createElementVNode("h4",{class:"section-title"},"箭头样式",-1)),e.createElementVNode("div",ta,[y[12]||(y[12]=e.createElementVNode("label",{class:"property-label"},"起点箭头",-1)),e.createElementVNode("select",{class:"property-select",value:a("source"),onChange:u},[...y[11]||(y[11]=[e.createStaticVNode('<option value="none" data-v-e47f1784>无</option><option value="block" data-v-e47f1784>实心箭头</option><option value="classic" data-v-e47f1784>经典箭头</option><option value="diamond" data-v-e47f1784>菱形</option><option value="circle" data-v-e47f1784>圆形</option>',5)])],40,oa)]),e.createElementVNode("div",na,[y[14]||(y[14]=e.createElementVNode("label",{class:"property-label"},"终点箭头",-1)),e.createElementVNode("select",{class:"property-select",value:a("target"),onChange:f},[...y[13]||(y[13]=[e.createStaticVNode('<option value="none" data-v-e47f1784>无</option><option value="block" data-v-e47f1784>实心箭头</option><option value="classic" data-v-e47f1784>经典箭头</option><option value="diamond" data-v-e47f1784>菱形</option><option value="circle" data-v-e47f1784>圆形</option>',5)])],40,la)])]),e.createElementVNode("div",aa,[y[20]||(y[20]=e.createElementVNode("h4",{class:"section-title"},"连接器",-1)),e.createElementVNode("div",sa,[y[17]||(y[17]=e.createElementVNode("label",{class:"property-label"},"路由方式",-1)),e.createElementVNode("select",{class:"property-select",value:((T=(B=i.selectedEdge)==null?void 0:B.getRouter())==null?void 0:T.name)||"manhattan",onChange:b},[...y[16]||(y[16]=[e.createElementVNode("option",{value:"manhattan"},"曼哈顿",-1),e.createElementVNode("option",{value:"orth"},"正交",-1),e.createElementVNode("option",{value:"normal"},"直线",-1)])],40,ia)]),e.createElementVNode("div",ra,[y[19]||(y[19]=e.createElementVNode("label",{class:"property-label"},"连接器类型",-1)),e.createElementVNode("select",{class:"property-select",value:((te=(K=i.selectedEdge)==null?void 0:K.getConnector())==null?void 0:te.name)||"rounded",onChange:S},[...y[18]||(y[18]=[e.createElementVNode("option",{value:"rounded"},"圆角",-1),e.createElementVNode("option",{value:"smooth"},"平滑",-1),e.createElementVNode("option",{value:"normal"},"普通",-1)])],40,da)])]),e.createElementVNode("div",{class:"property-section"},[e.createElementVNode("button",{class:"delete-btn",onClick:F}," 删除连线 ")])])}}}),[["__scopeId","data-v-e47f1784"]]),pa={class:"event-card"},ma={class:"header-left"},ua={class:"collapse-icon"},ga={class:"event-title"},fa={class:"event-card-body"},Ea={class:"event-field"},ya=["value"],ba={class:"event-field"},Na=["value"],ha={class:"event-field"},Va=["value"],ka={class:"condition-config"},Ca=["value"],$a=["value"],va=["value"],wa=["value"],Ba={key:0,class:"config-section"},Sa={key:1,class:"config-section"},_a={key:2,class:"config-section"},xa={key:0,class:"selected-workflow-info"},Ia={class:"info-row"},Da={class:"info-value"},Ta={class:"event-field"},Pa=["value"],Ie=H(e.defineComponent({__name:"EventCard",props:{event:{},index:{},isCollapsed:{type:Boolean},nodeProperties:{}},emits:["toggle-collapse","remove","update-field","update-condition","update-params","open-attribute-config","open-custom-code","open-workflow-selector"],setup(i){return(l,n)=>{var r,t,s,d,c,p,g;return e.openBlock(),e.createElementBlock("div",pa,[e.createElementVNode("div",{class:"event-card-header",onClick:n[1]||(n[1]=a=>l.$emit("toggle-collapse"))},[e.createElementVNode("div",ma,[e.createElementVNode("span",ua,e.toDisplayString(i.isCollapsed?"▶":"▼"),1),e.createElementVNode("span",ga,"事件"+e.toDisplayString(i.index+1),1)]),e.createElementVNode("button",{class:"btn-remove",onClick:n[0]||(n[0]=e.withModifiers(a=>l.$emit("remove"),["stop"])),title:"删除事件"},"🗑")]),e.withDirectives(e.createElementVNode("div",fa,[e.createElementVNode("div",Ea,[n[12]||(n[12]=e.createElementVNode("label",null,"事件名称",-1)),e.createElementVNode("input",{type:"text",value:i.event.name||"",onInput:n[2]||(n[2]=a=>l.$emit("update-field","name",a)),placeholder:"输入事件名称,如:温度报警、湿度预警"},null,40,ya)]),e.createElementVNode("div",ba,[n[14]||(n[14]=e.createElementVNode("label",null,"事件类型",-1)),e.createElementVNode("select",{value:i.event.type,onChange:n[3]||(n[3]=a=>l.$emit("update-field","type",a))},[...n[13]||(n[13]=[e.createStaticVNode('<option value="click" data-v-af7c633a>单击</option><option value="dblclick" data-v-af7c633a>双击</option><option value="mouseenter" data-v-af7c633a>鼠标移入</option><option value="mouseleave" data-v-af7c633a>鼠标移出</option><option value="focus" data-v-af7c633a>获取焦点</option><option value="blur" data-v-af7c633a>失去焦点</option><option value="input" data-v-af7c633a>输入</option><option value="change" data-v-af7c633a>值变化</option>',8)])],40,Na)]),e.createElementVNode("div",ha,[n[16]||(n[16]=e.createElementVNode("label",null,"事件行为",-1)),e.createElementVNode("select",{value:i.event.action,onChange:n[4]||(n[4]=a=>l.$emit("update-field","action",a))},[...n[15]||(n[15]=[e.createElementVNode("option",{value:"attributeChange"},"更改属性",-1),e.createElementVNode("option",{value:"customCode"},"自定义代码",-1),e.createElementVNode("option",{value:"callProcess"},"调用流程",-1)])],40,Va)]),n[30]||(n[30]=e.createElementVNode("div",{class:"section-title"},"形参配置",-1)),n[31]||(n[31]=e.createElementVNode("div",{class:"field-hint"},"(不填直接触发)",-1)),n[32]||(n[32]=e.createElementVNode("div",{class:"section-title"},"触发规则",-1)),n[33]||(n[33]=e.createElementVNode("div",{class:"field-hint"},"(不填写条件则直接触发,填写后按条件触发)",-1)),e.createElementVNode("div",ka,[n[19]||(n[19]=e.createElementVNode("div",{class:"condition-label"},"当",-1)),n[20]||(n[20]=e.createElementVNode("div",{class:"condition-label"},"当前节点属性",-1)),e.createElementVNode("select",{class:"condition-select",value:((r=i.event.condition)==null?void 0:r.attribute)||"",onChange:n[5]||(n[5]=a=>l.$emit("update-condition","attribute",a))},[n[17]||(n[17]=e.createElementVNode("option",{value:""},"选择属性",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.nodeProperties,a=>(e.openBlock(),e.createElementBlock("option",{key:a.key,value:a.key},e.toDisplayString(a.label),9,$a))),128))],40,Ca),n[21]||(n[21]=e.createElementVNode("div",{class:"condition-label"},"运算符",-1)),e.createElementVNode("select",{class:"condition-select",value:((t=i.event.condition)==null?void 0:t.operator)||"==",onChange:n[6]||(n[6]=a=>l.$emit("update-condition","operator",a))},[...n[18]||(n[18]=[e.createStaticVNode('<option value="==" data-v-af7c633a>等于</option><option value="!=" data-v-af7c633a>不等于</option><option value="&gt;" data-v-af7c633a>大于</option><option value="&gt;=" data-v-af7c633a>大于等于</option><option value="&lt;" data-v-af7c633a>小于</option><option value="&lt;=" data-v-af7c633a>小于等于</option><option value="contains" data-v-af7c633a>包含</option>',7)])],40,va),n[22]||(n[22]=e.createElementVNode("div",{class:"condition-label"},"值",-1)),e.createElementVNode("input",{type:"text",class:"condition-input",value:((s=i.event.condition)==null?void 0:s.value)||"",onInput:n[7]||(n[7]=a=>l.$emit("update-condition","value",a)),placeholder:"输入值"},null,40,wa),n[23]||(n[23]=e.createElementVNode("div",{class:"condition-label"},"时",-1)),n[24]||(n[24]=e.createElementVNode("div",{class:"condition-label"},"触发该事件",-1))]),i.event.action==="attributeChange"?(e.openBlock(),e.createElementBlock("div",Ba,[n[25]||(n[25]=e.createElementVNode("div",{class:"section-title"},"属性更改",-1)),e.createElementVNode("button",{class:"btn-config",onClick:n[8]||(n[8]=a=>l.$emit("open-attribute-config"))},"点击配置")])):e.createCommentVNode("",!0),i.event.action==="customCode"?(e.openBlock(),e.createElementBlock("div",Sa,[n[26]||(n[26]=e.createElementVNode("div",{class:"section-title"},"自定义代码",-1)),e.createElementVNode("button",{class:"btn-config",onClick:n[9]||(n[9]=a=>l.$emit("open-custom-code"))},"点击配置")])):e.createCommentVNode("",!0),i.event.action==="callProcess"?(e.openBlock(),e.createElementBlock("div",_a,[n[29]||(n[29]=e.createElementVNode("div",{class:"section-title"},"调用流程",-1)),e.createElementVNode("button",{class:"btn-config",onClick:n[10]||(n[10]=a=>l.$emit("open-workflow-selector"))},"选择流程"),(d=i.event.params)!=null&&d.processId?(e.openBlock(),e.createElementBlock("div",xa,[e.createElementVNode("div",Ia,[n[27]||(n[27]=e.createElementVNode("span",{class:"info-label"},"已选择:",-1)),e.createElementVNode("span",Da,e.toDisplayString(((c=i.event.params)==null?void 0:c.processName)||((p=i.event.params)==null?void 0:p.processId)),1)]),e.createElementVNode("div",Ta,[n[28]||(n[28]=e.createElementVNode("label",null,"传入参数",-1)),e.createElementVNode("textarea",{value:((g=i.event.params)==null?void 0:g.processParams)||"",onInput:n[11]||(n[11]=a=>l.$emit("update-params","processParams",a)),placeholder:'JSON格式: {"param1":"value1","param2":"value2"}',rows:"3"},null,40,Pa)])])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],512),[[e.vShow,!i.isCollapsed]])])}}}),[["__scopeId","data-v-af7c633a"]]);var Z=(i=>(i.BOOLEAN="boolean",i.NUMBER="number",i.STRING="string",i))(Z||{}),Q=(i=>(i.READ="read",i.WRITE="write",i.READ_WRITE="readWrite",i))(Q||{}),ge=(i=>(i.ONLINE="online",i.OFFLINE="offline",i.ERROR="error",i.MAINTENANCE="maintenance",i))(ge||{}),fe=(i=>(i.PLC="plc",i.SENSOR="sensor",i.ACTUATOR="actuator",i.METER="meter",i.CAMERA="camera",i.OTHER="other",i))(fe||{});const De=[{id:"device_001",name:"1号温控设备",code:"TC-001",type:fe.PLC,description:"车间1号温控PLC",status:ge.ONLINE,ipAddress:"192.168.1.101",port:502,protocol:"Modbus TCP",enabled:!0,tags:["车间1","温控","PLC"],points:[{id:"point_001_01",name:"当前温度",code:"40001",description:"实时温度采集",dataType:Z.NUMBER,accessMode:Q.READ,value:25.5,unit:"°C",minValue:-20,maxValue:100,precision:1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_001_02",name:"设定温度",code:"40002",description:"目标温度设定值",dataType:Z.NUMBER,accessMode:Q.READ_WRITE,value:28,unit:"°C",minValue:0,maxValue:50,precision:1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_001_03",name:"加热状态",code:"40003",description:"加热器运行状态",dataType:Z.BOOLEAN,accessMode:Q.READ,value:!0,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_001_04",name:"告警状态",code:"40004",description:"设备告警状态",dataType:Z.BOOLEAN,accessMode:Q.READ,value:!1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"}],createTime:"2025-01-01 00:00:00",updateTime:"2025-12-17 08:15:00"},{id:"device_002",name:"主管道压力传感器",code:"PS-001",type:fe.SENSOR,description:"主管道压力监测",status:ge.ONLINE,ipAddress:"192.168.1.102",port:502,protocol:"Modbus TCP",enabled:!0,tags:["管道","压力","传感器"],points:[{id:"point_002_01",name:"当前压力",code:"40001",description:"实时压力值",dataType:Z.NUMBER,accessMode:Q.READ,value:1.25,unit:"MPa",minValue:0,maxValue:5,precision:2,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_002_02",name:"压力上限",code:"40002",description:"压力告警上限",dataType:Z.NUMBER,accessMode:Q.READ_WRITE,value:2,unit:"MPa",minValue:0,maxValue:5,precision:2,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_002_03",name:"压力下限",code:"40003",description:"压力告警下限",dataType:Z.NUMBER,accessMode:Q.READ_WRITE,value:.5,unit:"MPa",minValue:0,maxValue:5,precision:2,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"}],createTime:"2025-01-01 00:00:00",updateTime:"2025-12-17 08:15:00"},{id:"device_003",name:"1号电机控制器",code:"MC-001",type:fe.ACTUATOR,description:"主传送带电机控制",status:ge.ONLINE,ipAddress:"192.168.1.103",port:502,protocol:"Modbus TCP",enabled:!0,tags:["电机","控制器","传送带"],points:[{id:"point_003_01",name:"运行状态",code:"40001",description:"电机运行状态",dataType:Z.BOOLEAN,accessMode:Q.READ,value:!0,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_02",name:"启动命令",code:"40002",description:"电机启动控制",dataType:Z.BOOLEAN,accessMode:Q.WRITE,value:!1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_03",name:"停止命令",code:"40003",description:"电机停止控制",dataType:Z.BOOLEAN,accessMode:Q.WRITE,value:!1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_04",name:"当前转速",code:"40004",description:"电机实时转速",dataType:Z.NUMBER,accessMode:Q.READ,value:1450,unit:"RPM",minValue:0,maxValue:3e3,precision:0,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_05",name:"设定转速",code:"40005",description:"目标转速设定",dataType:Z.NUMBER,accessMode:Q.READ_WRITE,value:1500,unit:"RPM",minValue:0,maxValue:3e3,precision:0,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"},{id:"point_003_06",name:"电流",code:"40006",description:"电机运行电流",dataType:Z.NUMBER,accessMode:Q.READ,value:12.5,unit:"A",minValue:0,maxValue:50,precision:1,enabled:!0,quality:"good",updateTime:"2025-12-17 08:15:00"}],createTime:"2025-01-01 00:00:00",updateTime:"2025-12-17 08:15:00"},{id:"device_004",name:"进水流量计",code:"FM-001",type:fe.METER,description:"进水管道流量监测",status:ge.OFFLINE,ipAddress:"192.168.1.104",port:502,protocol:"Modbus TCP",enabled:!0,tags:["流量","仪表","进水"],points:[{id:"point_004_01",name:"瞬时流量",code:"40001",description:"当前流量值",dataType:Z.NUMBER,accessMode:Q.READ,value:0,unit:"m³/h",minValue:0,maxValue:100,precision:2,enabled:!0,quality:"bad",updateTime:"2025-12-17 07:30:00"},{id:"point_004_02",name:"累计流量",code:"40002",description:"累计流量统计",dataType:Z.NUMBER,accessMode:Q.READ,value:12345.67,unit:"m³",minValue:0,maxValue:999999,precision:2,enabled:!0,quality:"bad",updateTime:"2025-12-17 07:30:00"}],createTime:"2025-01-01 00:00:00",updateTime:"2025-12-17 07:30:00"}];De.length;const Ze=i=>De.find(l=>l.id===i),Aa=(i,l)=>{const n=Ze(i);if(n)return n.points.find(r=>r.id===l)},Ma={class:"device-point-selector"},za={class:"device-list-panel"},Oa={class:"panel-header"},Ua={class:"device-count"},Ra={class:"search-box"},La={class:"device-list"},Wa=["onClick"],Fa={class:"device-info"},ja={class:"device-name"},Ga={class:"device-meta"},Ha={class:"device-code"},Ja={class:"point-count"},qa={key:0,class:"empty-hint"},Ya={class:"point-list-panel"},Xa={class:"panel-header"},Ka={key:0,class:"point-count"},Za={key:0,class:"search-box"},Qa={class:"point-list"},es={key:0,class:"empty-hint"},ts={key:1,class:"empty-hint"},os=["onClick"],ns={class:"point-info"},ls={class:"point-name"},as={class:"point-meta"},ss={class:"point-code"},is={key:0,class:"point-unit"},rs={class:"point-type"},ds={key:0,class:"point-value"},cs={class:"value"},ps={class:"modal-footer"},ms=["disabled"],us=H(e.defineComponent({__name:"DevicePointSelector",props:{visible:{type:Boolean},modelValue:{}},emits:["update:visible","update:modelValue","confirm"],setup(i,{emit:l}){const n=i,r=l,t=e.ref(De),s=e.ref(null),d=e.ref(null),c=e.ref(""),p=e.ref("");if(n.modelValue){const[h,N]=n.modelValue.split(":"),E=t.value.find(V=>V.id===h);E&&(s.value=E,d.value=E.points.find(V=>V.id===N)||null)}const g=e.computed(()=>{if(!c.value)return t.value;const h=c.value.toLowerCase();return t.value.filter(N=>N.name.toLowerCase().includes(h)||N.code.toLowerCase().includes(h))}),a=e.computed(()=>{if(!s.value)return[];if(!p.value)return s.value.points;const h=p.value.toLowerCase();return s.value.points.filter(N=>N.name.toLowerCase().includes(h)||N.code.toLowerCase().includes(h))}),o=h=>{s.value=h,d.value=null,p.value=""},u=h=>{h.enabled&&(d.value=h)},f=()=>{r("update:visible",!1)},b=()=>{if(!s.value||!d.value)return;const h=`${s.value.id}:${d.value.id}`;r("update:modelValue",h),r("confirm",s.value.id,d.value.id,s.value,d.value),r("update:visible",!1)},S=h=>({read:"只读",write:"只写",readWrite:"读写"})[h]||h,F=h=>({boolean:"布尔",number:"数值",string:"字符",json:"JSON"})[h]||h,z=h=>h.value===void 0||h.value===null?"-":h.dataType==="boolean"?h.value?"是":"否":h.dataType==="number"&&h.precision!==void 0?Number(h.value).toFixed(h.precision):String(h.value);return(h,N)=>i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"modal-overlay",onClick:f},[e.createElementVNode("div",{class:"modal-container",onClick:N[2]||(N[2]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",{class:"modal-header"},[N[3]||(N[3]=e.createElementVNode("h3",null,"选择设备点位",-1)),e.createElementVNode("button",{class:"btn-close",onClick:f},"✕")]),e.createElementVNode("div",Ma,[e.createElementVNode("div",za,[e.createElementVNode("div",Oa,[N[4]||(N[4]=e.createElementVNode("h4",null,"设备列表",-1)),e.createElementVNode("span",Ua,e.toDisplayString(t.value.length),1)]),e.createElementVNode("div",Ra,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":N[0]||(N[0]=E=>c.value=E),type:"text",placeholder:"搜索设备...",class:"search-input"},null,512),[[e.vModelText,c.value]])]),e.createElementVNode("div",La,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,E=>{var V;return e.openBlock(),e.createElementBlock("div",{key:E.id,class:e.normalizeClass(["device-item",{active:((V=s.value)==null?void 0:V.id)===E.id,offline:E.status==="offline"}]),onClick:y=>o(E)},[e.createElementVNode("div",Fa,[e.createElementVNode("div",ja,[e.createElementVNode("span",{class:e.normalizeClass(["status-dot",E.status])},null,2),e.createTextVNode(" "+e.toDisplayString(E.name),1)]),e.createElementVNode("div",Ga,[e.createElementVNode("span",Ha,e.toDisplayString(E.code),1),e.createElementVNode("span",Ja,e.toDisplayString(E.points.length)+" 点",1)])]),N[5]||(N[5]=e.createElementVNode("div",{class:"device-arrow"},"›",-1))],10,Wa)}),128)),g.value.length===0?(e.openBlock(),e.createElementBlock("div",qa," 暂无设备 ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Ya,[e.createElementVNode("div",Xa,[e.createElementVNode("h4",null,e.toDisplayString(s.value?s.value.name:"点位列表"),1),s.value?(e.openBlock(),e.createElementBlock("span",Ka,e.toDisplayString(a.value.length),1)):e.createCommentVNode("",!0)]),s.value?(e.openBlock(),e.createElementBlock("div",Za,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":N[1]||(N[1]=E=>p.value=E),type:"text",placeholder:"搜索点位...",class:"search-input"},null,512),[[e.vModelText,p.value]])])):e.createCommentVNode("",!0),e.createElementVNode("div",Qa,[s.value?a.value.length===0?(e.openBlock(),e.createElementBlock("div",ts," 暂无点位 ")):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(a.value,E=>{var V;return e.openBlock(),e.createElementBlock("div",{key:E.id,class:e.normalizeClass(["point-item",{active:((V=d.value)==null?void 0:V.id)===E.id,disabled:!E.enabled}]),onClick:y=>u(E)},[e.createElementVNode("div",ns,[e.createElementVNode("div",ls,[e.createTextVNode(e.toDisplayString(E.name)+" ",1),e.createElementVNode("span",{class:e.normalizeClass(["access-mode",E.accessMode])},e.toDisplayString(S(E.accessMode)),3)]),e.createElementVNode("div",as,[e.createElementVNode("span",ss,e.toDisplayString(E.code),1),E.unit?(e.openBlock(),e.createElementBlock("span",is,e.toDisplayString(E.unit),1)):e.createCommentVNode("",!0),e.createElementVNode("span",rs,e.toDisplayString(F(E.dataType)),1)]),E.value!==void 0?(e.openBlock(),e.createElementBlock("div",ds,[N[6]||(N[6]=e.createTextVNode(" 当前值: ",-1)),e.createElementVNode("span",cs,e.toDisplayString(z(E)),1),e.createElementVNode("span",{class:e.normalizeClass(["quality",E.quality])},e.toDisplayString(E.quality),3)])):e.createCommentVNode("",!0)])],10,os)}),128)):(e.openBlock(),e.createElementBlock("div",es," ← 请先选择设备 "))])])]),e.createElementVNode("div",ps,[e.createElementVNode("button",{class:"btn-cancel",onClick:f},"取消"),e.createElementVNode("button",{class:"btn-confirm",disabled:!d.value,onClick:b}," 确定 ",8,ms)])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-7884b850"]]);var ie=(i=>(i.DIRECT="direct",i.BOOLEAN="boolean",i.RANGE="range",i.ENUM="enum",i))(ie||{}),Ee=(i=>(i.BOOLEAN="boolean",i.NUMBER="number",i.STRING="string",i))(Ee||{});const gs={class:"mapping-configurator"},fs={class:"config-item"},Es={key:0,class:"field-hint error"},ys={key:1,class:"field-hint"},bs={class:"config-item"},Ns={key:0,class:"field-hint error"},hs={key:1,class:"field-hint"},Vs={key:0,class:"config-item"},ks={class:"unit-config"},Cs={class:"checkbox-label"},$s={key:0,class:"custom-unit"},vs={key:1,class:"mapping-details"},ws={class:"config-item"},Bs={class:"config-item"},Ss={key:2,class:"mapping-details"},_s={class:"range-rules"},xs=["onUpdate:modelValue"],Is=["onUpdate:modelValue"],Ds=["onUpdate:modelValue"],Ts=["onClick"],Ps={key:3,class:"mapping-details"},As={class:"enum-mappings"},Ms=["value","onInput"],zs=["onUpdate:modelValue"],Os=["onClick"],Us={key:4,class:"mapping-preview"},Rs={class:"preview-content"},Ls={class:"preview-item"},Ws={class:"preview-output"},Fs={class:"preview-item"},js={class:"preview-output"},Gs={class:"preview-input"},Hs={class:"preview-output"},Js={class:"preview-input"},qs={class:"preview-output"},Ys=H(e.defineComponent({__name:"MappingConfigurator",props:{visible:{type:Boolean},modelValue:{}},emits:["update:visible","update:modelValue","confirm"],setup(i,{emit:l}){const n=i,r=l,t=e.ref(n.modelValue||{type:"",valueType:""});e.watch(()=>n.modelValue,z=>{z&&(t.value={...z})},{deep:!0});const s=()=>{t.value.type||(t.value.valueType===Ee.BOOLEAN?t.value.type=ie.BOOLEAN:t.value.valueType===Ee.NUMBER?t.value.type=ie.RANGE:t.value.type=ie.DIRECT),t.value.valueType!==Ee.NUMBER&&(delete t.value.keepOriginalUnit,delete t.value.customUnit)},d=z=>({boolean:"适用于开关状态、是否判断等场景",number:"适用于温度、压力、流量等数值型数据",string:"适用于文本、状态码等字符型数据"})[z]||"",c=z=>({direct:"不做任何转换,直接使用原始值",boolean:"根据 true/false 转换为不同的值",range:"根据数值范围转换为对应值",enum:"根据枚举键值对转换"})[z]||"",p=()=>{const z=t.value.valueType;t.value={type:t.value.type,valueType:z},t.value.type===ie.RANGE?t.value.rangeRules=[]:t.value.type===ie.ENUM&&(t.value.enumMappings={})},g=()=>{t.value.rangeRules||(t.value.rangeRules=[]),t.value.rangeRules.push({min:0,max:100,value:""})},a=z=>{var h;(h=t.value.rangeRules)==null||h.splice(z,1)},o=()=>{t.value.enumMappings||(t.value.enumMappings={});const z=`key_${Object.keys(t.value.enumMappings).length+1}`;t.value.enumMappings[z]=""},u=z=>{t.value.enumMappings&&delete t.value.enumMappings[z]},f=(z,h)=>{const N=z.target.value;if(!t.value.enumMappings||N===h)return;const E=t.value.enumMappings[h];delete t.value.enumMappings[h],t.value.enumMappings[N]=E},b=()=>{},S=()=>{r("update:visible",!1)},F=()=>{if(!t.value.valueType){alert("请选择值类型!");return}if(!t.value.type){alert("请选择映射类型!");return}r("update:modelValue",{...t.value}),r("confirm",{...t.value}),r("update:visible",!1)};return(z,h)=>i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"modal-overlay",onClick:S},[e.createElementVNode("div",{class:"modal-container",onClick:h[6]||(h[6]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",{class:"modal-header"},[h[7]||(h[7]=e.createElementVNode("h3",null,"值映射配置",-1)),e.createElementVNode("button",{class:"btn-close",onClick:S},"✕")]),e.createElementVNode("div",gs,[e.createElementVNode("div",fs,[h[9]||(h[9]=e.createElementVNode("label",null,[e.createTextVNode("值类型 "),e.createElementVNode("span",{class:"required"},"*")],-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":h[0]||(h[0]=N=>t.value.valueType=N),onChange:s},[...h[8]||(h[8]=[e.createElementVNode("option",{value:""},"请选择值类型",-1),e.createElementVNode("option",{value:"boolean"},"布尔型 (true/false)",-1),e.createElementVNode("option",{value:"number"},"数值型 (123, 45.6)",-1),e.createElementVNode("option",{value:"string"},'字符串型 ("abc")',-1)])],544),[[e.vModelSelect,t.value.valueType]]),t.value.valueType?(e.openBlock(),e.createElementBlock("div",ys,e.toDisplayString(d(t.value.valueType)),1)):(e.openBlock(),e.createElementBlock("div",Es," 值类型为必填项 "))]),e.createElementVNode("div",bs,[h[11]||(h[11]=e.createElementVNode("label",null,[e.createTextVNode("映射类型 "),e.createElementVNode("span",{class:"required"},"*")],-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":h[1]||(h[1]=N=>t.value.type=N),onChange:p},[...h[10]||(h[10]=[e.createStaticVNode('<option value="" data-v-ef9e0ee1>请选择映射类型</option><option value="direct" data-v-ef9e0ee1>直接映射(无转换)</option><option value="boolean" data-v-ef9e0ee1>布尔映射</option><option value="range" data-v-ef9e0ee1>范围映射</option><option value="enum" data-v-ef9e0ee1>枚举映射</option>',5)])],544),[[e.vModelSelect,t.value.type]]),t.value.type?(e.openBlock(),e.createElementBlock("div",hs,e.toDisplayString(c(t.value.type)),1)):(e.openBlock(),e.createElementBlock("div",Ns," 映射类型为必填项 "))]),t.value.valueType==="number"?(e.openBlock(),e.createElementBlock("div",Vs,[h[13]||(h[13]=e.createElementVNode("label",null,"单位配置",-1)),e.createElementVNode("div",ks,[e.createElementVNode("label",Cs,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":h[2]||(h[2]=N=>t.value.keepOriginalUnit=N),onChange:b},null,544),[[e.vModelCheckbox,t.value.keepOriginalUnit]]),h[12]||(h[12]=e.createTextVNode(" 保留点位原始单位 ",-1))]),t.value.keepOriginalUnit?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",$s,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[3]||(h[3]=N=>t.value.customUnit=N),type:"text",placeholder:"自定义单位,如: °C, MPa, %",onInput:b},null,544),[[e.vModelText,t.value.customUnit]])]))])])):e.createCommentVNode("",!0),t.value.type==="boolean"?(e.openBlock(),e.createElementBlock("div",vs,[e.createElementVNode("div",ws,[h[14]||(h[14]=e.createElementVNode("label",null,"True 时的值",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[4]||(h[4]=N=>t.value.trueValue=N),type:"text",placeholder:"例如: 运行、#00ff00",onInput:b},null,544),[[e.vModelText,t.value.trueValue]])]),e.createElementVNode("div",Bs,[h[15]||(h[15]=e.createElementVNode("label",null,"False 时的值",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[5]||(h[5]=N=>t.value.falseValue=N),type:"text",placeholder:"例如: 停止、#ff0000",onInput:b},null,544),[[e.vModelText,t.value.falseValue]])])])):e.createCommentVNode("",!0),t.value.type==="range"?(e.openBlock(),e.createElementBlock("div",Ss,[e.createElementVNode("div",_s,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value.rangeRules,(N,E)=>(e.openBlock(),e.createElementBlock("div",{key:E,class:"range-rule"},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V=>N.min=V,type:"number",placeholder:"最小值",onInput:b},null,40,xs),[[e.vModelText,N.min,void 0,{number:!0}]]),h[16]||(h[16]=e.createElementVNode("span",{class:"range-separator"},"~",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V=>N.max=V,type:"number",placeholder:"最大值",onInput:b},null,40,Is),[[e.vModelText,N.max,void 0,{number:!0}]]),h[17]||(h[17]=e.createElementVNode("span",{class:"range-arrow"},"→",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V=>N.value=V,type:"text",placeholder:"映射值",onInput:b},null,40,Ds),[[e.vModelText,N.value]]),e.createElementVNode("button",{class:"btn-remove-rule",onClick:V=>a(E),title:"删除规则"}," ✕ ",8,Ts)]))),128))]),e.createElementVNode("button",{class:"btn-add-rule",onClick:g}," + 添加范围规则 ")])):e.createCommentVNode("",!0),t.value.type==="enum"?(e.openBlock(),e.createElementBlock("div",Ps,[e.createElementVNode("div",As,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value.enumMappings,(N,E,V)=>(e.openBlock(),e.createElementBlock("div",{key:V,class:"enum-mapping"},[e.createElementVNode("input",{value:E,type:"text",placeholder:"原始值",onInput:y=>f(y,E)},null,40,Ms),h[18]||(h[18]=e.createElementVNode("span",{class:"enum-arrow"},"→",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y=>t.value.enumMappings[E]=y,type:"text",placeholder:"映射值",onInput:b},null,40,zs),[[e.vModelText,t.value.enumMappings[E]]]),e.createElementVNode("button",{class:"btn-remove-rule",onClick:y=>u(E),title:"删除映射"}," ✕ ",8,Os)]))),128))]),e.createElementVNode("button",{class:"btn-add-rule",onClick:o}," + 添加枚举映射 ")])):e.createCommentVNode("",!0),t.value.type!=="direct"?(e.openBlock(),e.createElementBlock("div",Us,[h[25]||(h[25]=e.createElementVNode("label",null,"映射预览",-1)),e.createElementVNode("div",Rs,[t.value.type==="boolean"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("div",Ls,[h[19]||(h[19]=e.createElementVNode("span",{class:"preview-input"},"true",-1)),h[20]||(h[20]=e.createElementVNode("span",{class:"preview-arrow"},"→",-1)),e.createElementVNode("span",Ws,e.toDisplayString(t.value.trueValue||"true"),1)]),e.createElementVNode("div",Fs,[h[21]||(h[21]=e.createElementVNode("span",{class:"preview-input"},"false",-1)),h[22]||(h[22]=e.createElementVNode("span",{class:"preview-arrow"},"→",-1)),e.createElementVNode("span",js,e.toDisplayString(t.value.falseValue||"false"),1)])],64)):t.value.type==="range"?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(t.value.rangeRules,(N,E)=>(e.openBlock(),e.createElementBlock("div",{key:E,class:"preview-item"},[e.createElementVNode("span",Gs,"["+e.toDisplayString(N.min)+" ~ "+e.toDisplayString(N.max)+"]",1),h[23]||(h[23]=e.createElementVNode("span",{class:"preview-arrow"},"→",-1)),e.createElementVNode("span",Hs,e.toDisplayString(N.value),1)]))),128)):t.value.type==="enum"?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(t.value.enumMappings,(N,E)=>(e.openBlock(),e.createElementBlock("div",{key:E,class:"preview-item"},[e.createElementVNode("span",Js,e.toDisplayString(E),1),h[24]||(h[24]=e.createElementVNode("span",{class:"preview-arrow"},"→",-1)),e.createElementVNode("span",qs,e.toDisplayString(N),1)]))),128)):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:"modal-footer"},[e.createElementVNode("button",{class:"btn-cancel",onClick:S},"取消"),e.createElementVNode("button",{class:"btn-confirm",onClick:F},"确定")])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-ef9e0ee1"]]),Xs={class:"event-card"},Ks={class:"header-left"},Zs={class:"collapse-icon"},Qs={class:"event-title"},ei={class:"event-card-body"},ti={class:"property-item"},oi={key:0,class:"selected-point"},ni={class:"point-main"},li={class:"device-name"},ai={class:"point-name"},si={class:"point-details"},ii={class:"point-code"},ri={key:0,class:"point-unit"},di={key:1,class:"placeholder"},ci={class:"property-item"},pi=["value"],mi=["value"],ui={class:"property-item"},gi={key:0,class:"mapping-summary"},fi={class:"mapping-type-label"},Ei={class:"mapping-detail"},yi={key:1,class:"placeholder"},Te=H(e.defineComponent({__name:"BindingCard",props:{binding:{},index:{},isCollapsed:{type:Boolean},nodeProperties:{}},emits:["toggle-collapse","remove","update-field"],setup(i,{emit:l}){const n=i,r=l,t=e.ref(n.binding.devicePointId||""),s=e.ref(!1),d=e.ref(!1),c=e.ref(n.binding.mapping||{type:ie.DIRECT,valueType:Ee.NUMBER});e.watch(()=>n.binding.devicePointId,f=>{t.value=f||""}),e.watch(()=>n.binding.mapping,f=>{f&&(c.value=f)},{deep:!0});const p=e.computed(()=>{if(!t.value)return null;const[f,b]=t.value.split(":");if(!f||!b)return null;const S=Ze(f),F=S?Aa(f,b):null;return!S||!F?null:{deviceName:S.name,pointName:F.name,pointCode:F.code,pointUnit:F.unit}}),g=(f,b,S,F)=>{const z=new Event("change");Object.defineProperty(z,"target",{value:{value:`${f}:${b}`},writable:!1}),r("update-field","devicePointId",z),console.log("选择了点位:",{device:S.name,point:F.name,dataType:F.dataType,accessMode:F.accessMode})},a=f=>{const b=new Event("change");Object.defineProperty(b,"target",{value:{value:f},writable:!1}),r("update-field","mapping",b)},o=f=>({direct:"直接映射",boolean:"布尔映射",range:"范围映射",enum:"枚举映射"})[f]||f,u=()=>{const f=c.value;return f.type==="boolean"?`True:${f.trueValue||"true"} / False:${f.falseValue||"false"}`:f.type==="range"&&f.rangeRules?`${f.rangeRules.length} 个范围规则`:f.type==="enum"&&f.enumMappings?`${Object.keys(f.enumMappings).length} 个枚举映射`:""};return(f,b)=>(e.openBlock(),e.createElementBlock("div",Xs,[e.createElementVNode("div",{class:"event-card-header",onClick:b[1]||(b[1]=S=>f.$emit("toggle-collapse"))},[e.createElementVNode("div",Ks,[e.createElementVNode("span",Zs,e.toDisplayString(i.isCollapsed?"▶":"▼"),1),e.createElementVNode("span",Qs,"绑定"+e.toDisplayString(i.index+1),1)]),e.createElementVNode("button",{class:"btn-remove",onClick:b[0]||(b[0]=e.withModifiers(S=>f.$emit("remove"),["stop"])),title:"删除绑定"},"🗑")]),e.withDirectives(e.createElementVNode("div",ei,[e.createElementVNode("div",ti,[b[10]||(b[10]=e.createElementVNode("label",null,"设备点位",-1)),e.createElementVNode("div",{class:"point-selector-trigger",onClick:b[2]||(b[2]=S=>s.value=!0)},[p.value?(e.openBlock(),e.createElementBlock("div",oi,[e.createElementVNode("div",ni,[e.createElementVNode("span",li,e.toDisplayString(p.value.deviceName),1),e.createElementVNode("span",ai,e.toDisplayString(p.value.pointName),1)]),e.createElementVNode("div",si,[e.createElementVNode("span",ii,e.toDisplayString(p.value.pointCode),1),p.value.pointUnit?(e.openBlock(),e.createElementBlock("span",ri,e.toDisplayString(p.value.pointUnit),1)):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("div",di," 点击选择设备点位 ")),b[9]||(b[9]=e.createElementVNode("span",{class:"selector-arrow"},"›",-1))])]),e.createVNode(us,{visible:s.value,"onUpdate:visible":b[3]||(b[3]=S=>s.value=S),modelValue:t.value,"onUpdate:modelValue":b[4]||(b[4]=S=>t.value=S),onConfirm:g},null,8,["visible","modelValue"]),e.createElementVNode("div",ci,[b[12]||(b[12]=e.createElementVNode("label",null,"目标属性",-1)),e.createElementVNode("select",{value:i.binding.targetProperty||"",onChange:b[5]||(b[5]=S=>f.$emit("update-field","targetProperty",S))},[b[11]||(b[11]=e.createElementVNode("option",{value:""},"选择属性",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.nodeProperties,S=>(e.openBlock(),e.createElementBlock("option",{key:S.key,value:S.key},e.toDisplayString(S.label),9,mi))),128))],40,pi)]),e.createElementVNode("div",ui,[b[14]||(b[14]=e.createElementVNode("label",null,"值映射配置",-1)),e.createElementVNode("div",{class:"mapping-trigger",onClick:b[6]||(b[6]=S=>d.value=!0)},[c.value.type!=="direct"?(e.openBlock(),e.createElementBlock("div",gi,[e.createElementVNode("span",fi,e.toDisplayString(o(c.value.type)),1),e.createElementVNode("span",Ei,e.toDisplayString(u()),1)])):(e.openBlock(),e.createElementBlock("div",yi," 点击配置值映射 ")),b[13]||(b[13]=e.createElementVNode("span",{class:"selector-arrow"},"›",-1))])]),e.createVNode(Ys,{visible:d.value,"onUpdate:visible":b[7]||(b[7]=S=>d.value=S),modelValue:c.value,"onUpdate:modelValue":b[8]||(b[8]=S=>c.value=S),onConfirm:a},null,8,["visible","modelValue"])],512),[[e.vShow,!i.isCollapsed]])]))}}),[["__scopeId","data-v-3731c19a"]]),bi={class:"dialog-content"},Ni={class:"dialog-header"},hi={class:"dialog-body"},Vi={class:"group-row"},ki={class:"group-field"},Ci=["value","onChange"],$i=["value"],vi={class:"group-field group-field-value"},wi=["value","onInput"],Bi=["value","onInput"],Si={key:2,class:"color-input-wrapper"},_i=["value","onInput"],xi={class:"color-value"},Ii=["value","onChange"],Di=["onClick"],Ti={key:0,class:"empty-hint"},Pi={class:"dialog-footer"},Pe=H(e.defineComponent({__name:"AttributeConfigDialog",props:{attributeGroups:{},nodeProperties:{}},emits:["close","save","add-group","remove-group","update-group"],setup(i,{emit:l}){const n=i,r=l,t=c=>{const p=n.nodeProperties.find(g=>g.key===c);return(p==null?void 0:p.type)||"text"},s=(c,p,g)=>{const a=g.target.value;r("update-group",c,p,a)},d=()=>{for(const c of n.attributeGroups)if(!c.property){alert("请为每组配置选择目标属性");return}r("save")};return(c,p)=>(e.openBlock(),e.createElementBlock("div",{class:"dialog-overlay",onClick:p[3]||(p[3]=e.withModifiers(g=>c.$emit("close"),["self"]))},[e.createElementVNode("div",bi,[e.createElementVNode("div",Ni,[p[4]||(p[4]=e.createElementVNode("h3",null,"事件属性更改配置",-1)),e.createElementVNode("button",{class:"btn-close",onClick:p[0]||(p[0]=g=>c.$emit("close"))},"×")]),e.createElementVNode("div",hi,[e.createElementVNode("button",{class:"btn-add-group",onClick:p[1]||(p[1]=g=>c.$emit("add-group"))},"新增一组"),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.attributeGroups,(g,a)=>(e.openBlock(),e.createElementBlock("div",{key:a,class:"attribute-group"},[e.createElementVNode("div",Vi,[e.createElementVNode("div",ki,[p[6]||(p[6]=e.createElementVNode("label",null,"目标属性",-1)),e.createElementVNode("select",{value:g.property,onChange:o=>s(a,"property",o)},[p[5]||(p[5]=e.createElementVNode("option",{value:""},"选择目标属性",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.nodeProperties,o=>(e.openBlock(),e.createElementBlock("option",{key:o.key,value:o.key},e.toDisplayString(o.label),9,$i))),128))],40,Ci)]),e.createElementVNode("div",vi,[p[8]||(p[8]=e.createElementVNode("label",null,"期望值",-1)),!g.property||t(g.property)==="text"?(e.openBlock(),e.createElementBlock("input",{key:0,value:g.value,type:"text",onInput:o=>s(a,"value",o),placeholder:"输入值"},null,40,wi)):t(g.property)==="number"?(e.openBlock(),e.createElementBlock("input",{key:1,value:g.value,type:"number",onInput:o=>s(a,"value",o),placeholder:"输入数字"},null,40,Bi)):t(g.property)==="color"?(e.openBlock(),e.createElementBlock("div",Si,[e.createElementVNode("input",{value:g.value,type:"color",onInput:o=>s(a,"value",o)},null,40,_i),e.createElementVNode("span",xi,e.toDisplayString(g.value||"#000000"),1)])):t(g.property)==="boolean"?(e.openBlock(),e.createElementBlock("select",{key:3,value:g.value,onChange:o=>s(a,"value",o)},[...p[7]||(p[7]=[e.createElementVNode("option",{value:"true"},"是",-1),e.createElementVNode("option",{value:"false"},"否",-1)])],40,Ii)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{class:"btn-delete-group",onClick:o=>c.$emit("remove-group",a),title:"删除"}," 🗑 ",8,Di)])]))),128)),i.attributeGroups.length===0?(e.openBlock(),e.createElementBlock("div",Ti,' 请点击"新增一组"按钮添加属性配置 ')):e.createCommentVNode("",!0)]),e.createElementVNode("div",Pi,[e.createElementVNode("button",{class:"btn-cancel",onClick:p[2]||(p[2]=g=>c.$emit("close"))},"取消"),e.createElementVNode("button",{class:"btn-confirm",onClick:d},"确定")])])]))}}),[["__scopeId","data-v-90af9944"]]),Ai={class:"dialog-content dialog-large"},Mi={class:"dialog-header"},zi={class:"dialog-body dialog-body-split"},Oi={class:"code-editor-section"},Ui=["value"],Ri={class:"code-preview-section"},Li={class:"section-header"},Wi={class:"preview-status"},Fi={key:0,class:"status-success"},ji={key:1,class:"status-error"},Gi={class:"preview-canvas"},Hi={key:0,class:"preview-empty"},Ji={key:1,class:"preview-error-box"},qi={class:"error-message"},Yi={key:2,class:"preview-node-container"},Xi={key:0,class:"console-output"},Ki={class:"console-logs"},Zi={class:"dialog-footer"},Qi=`function execute(node) {
7
7
  // 修改节点填充颜色为红色
8
8
  node.attr('body/fill', '#ff0000');
9
9
 
@@ -13,7 +13,7 @@
13
13
  // 获取当前节点位置
14
14
  const pos = node.getPosition();
15
15
  console.log('X:', pos.x, 'Y:', pos.y);
16
- }`,tt=re(e.defineComponent({__name:"CustomCodeDialog",props:{code:{},selectedNode:{}},emits:["update:code","close","save"],setup(g,{expose:h}){const o=g,r=e.ref(null),n=e.ref(null);let l=null,E=null;const c=async()=>{var i;if(!o.selectedNode){n.value={success:!1,logs:[],error:"没有选中的节点"};return}const s=(i=o.selectedNode.model)==null?void 0:i.graph;if(!s){n.value={success:!1,logs:[],error:"无法获取画布对象"};return}n.value={success:!0,logs:[],result:void 0};const a=[],t=console.log;try{if(await e.nextTick(),await x(),!E||!l){n.value={success:!1,logs:[],error:"预览画布初始化失败"};return}console.log=(...V)=>{a.push(V.map(d=>typeof d=="object"?JSON.stringify(d,null,2):String(d)).join(" ")),t(...V)};let m=o.code.trim();m.startsWith("function")&&(m=`${m}; execute(node, graph, event);`);const u=new Function("node","graph","event",m),y=new Proxy(o.selectedNode,{get(V,d){return d==="attr"?function(...p){return p.length===1?V.attr(p[0]):E?E.attr(p[0],p[1]):void 0}:V[d]}}),k=u(y,s,{});E&&l&&(E.removeTools(),l.drawBackground(),E.toJSON()),n.value={success:!0,logs:a,result:k!==void 0?typeof k=="object"?JSON.stringify(k,null,2):String(k):void 0}}catch(m){n.value={success:!1,logs:a,error:m.message||String(m)}}finally{console.log=t}},x=async()=>{var i;if(!r.value||!o.selectedNode)return;await e.nextTick();const s=r.value.clientWidth,a=r.value.clientHeight;if(s===0||a===0)return;r.value.innerHTML="",l&&(l.dispose(),l=null,E=null),l=new ge.Graph({container:r.value,width:s,height:Math.max(a-100,300),background:{color:"#0f172a"},grid:{size:10,visible:!0,type:"dot",args:{color:"#1e293b",thickness:1}},interacting:!1});const t=o.selectedNode.toJSON();try{E=l.addNode({...t,position:{x:s/2-(((i=t.size)==null?void 0:i.width)||100)/2,y:100}})}catch(m){console.error("添加预览节点失败:",m)}};return h({previewContainer:r,DEFAULT_CODE:Wi}),(s,a)=>{var t,i;return e.openBlock(),e.createElementBlock("div",{class:"dialog-overlay",onClick:a[4]||(a[4]=e.withModifiers(m=>s.$emit("close"),["self"]))},[e.createElementVNode("div",Vi,[e.createElementVNode("div",Di,[a[5]||(a[5]=e.createElementVNode("h3",null,"自定义代码配置",-1)),e.createElementVNode("button",{class:"btn-close",onClick:a[0]||(a[0]=m=>s.$emit("close"))},"×")]),e.createElementVNode("div",Ai,[e.createElementVNode("div",_i,[e.createElementVNode("div",{class:"section-header"},[a[6]||(a[6]=e.createElementVNode("label",null,"JavaScript代码",-1)),e.createElementVNode("button",{class:"btn-test",onClick:c},"测试执行")]),e.createElementVNode("textarea",{value:g.code,onInput:a[1]||(a[1]=m=>s.$emit("update:code",m.target.value)),placeholder:`function execute(node) {
16
+ }`,Ae=H(e.defineComponent({__name:"CustomCodeDialog",props:{code:{},selectedNode:{}},emits:["update:code","close","save"],setup(i,{expose:l}){const n=i,r=e.ref(null),t=e.ref(null);let s=null,d=null;const c=async()=>{var u;if(!n.selectedNode){t.value={success:!1,logs:[],error:"没有选中的节点"};return}const g=(u=n.selectedNode.model)==null?void 0:u.graph;if(!g){t.value={success:!1,logs:[],error:"无法获取画布对象"};return}t.value={success:!0,logs:[],result:void 0};const a=[],o=console.log;try{if(await e.nextTick(),await p(),!d||!s){t.value={success:!1,logs:[],error:"预览画布初始化失败"};return}console.log=(...z)=>{a.push(z.map(h=>typeof h=="object"?JSON.stringify(h,null,2):String(h)).join(" ")),o(...z)};let f=n.code.trim();f.startsWith("function")&&(f=`${f}; execute(node, graph, event);`);const b=new Function("node","graph","event",f),S=new Proxy(n.selectedNode,{get(z,h){return h==="attr"?function(...N){return N.length===1?z.attr(N[0]):d?d.attr(N[0],N[1]):void 0}:z[h]}}),F=b(S,g,{});d&&s&&(d.removeTools(),s.drawBackground(),d.toJSON()),t.value={success:!0,logs:a,result:F!==void 0?typeof F=="object"?JSON.stringify(F,null,2):String(F):void 0}}catch(f){t.value={success:!1,logs:a,error:f.message||String(f)}}finally{console.log=o}},p=async()=>{var u;if(!r.value||!n.selectedNode)return;await e.nextTick();const g=r.value.clientWidth,a=r.value.clientHeight;if(g===0||a===0)return;r.value.innerHTML="",s&&(s.dispose(),s=null,d=null),s=new oe.Graph({container:r.value,width:g,height:Math.max(a-100,300),background:{color:"#0f172a"},grid:{size:10,visible:!0,type:"dot",args:{color:"#1e293b",thickness:1}},interacting:!1});const o=n.selectedNode.toJSON();try{d=s.addNode({...o,position:{x:g/2-(((u=o.size)==null?void 0:u.width)||100)/2,y:100}})}catch(f){console.error("添加预览节点失败:",f)}};return l({previewContainer:r,DEFAULT_CODE:Qi}),(g,a)=>{var o,u;return e.openBlock(),e.createElementBlock("div",{class:"dialog-overlay",onClick:a[4]||(a[4]=e.withModifiers(f=>g.$emit("close"),["self"]))},[e.createElementVNode("div",Ai,[e.createElementVNode("div",Mi,[a[5]||(a[5]=e.createElementVNode("h3",null,"自定义代码配置",-1)),e.createElementVNode("button",{class:"btn-close",onClick:a[0]||(a[0]=f=>g.$emit("close"))},"×")]),e.createElementVNode("div",zi,[e.createElementVNode("div",Oi,[e.createElementVNode("div",{class:"section-header"},[a[6]||(a[6]=e.createElementVNode("label",null,"JavaScript代码",-1)),e.createElementVNode("button",{class:"btn-test",onClick:c},"测试执行")]),e.createElementVNode("textarea",{value:i.code,onInput:a[1]||(a[1]=f=>g.$emit("update:code",f.target.value)),placeholder:`function execute(node) {
17
17
  // 修改节点填充颜色为红色
18
18
  node.attr('body/fill', '#ff0000');
19
19
 
@@ -23,36 +23,23 @@
23
23
  // 获取当前节点位置
24
24
  const pos = node.getPosition();
25
25
  console.log('X:', pos.x, 'Y:', pos.y);
26
- }`,class:"code-textarea code-textarea-full"},null,40,Fi)]),e.createElementVNode("div",$i,[e.createElementVNode("div",wi,[a[7]||(a[7]=e.createElementVNode("label",null,"组件预览",-1)),e.createElementVNode("div",Si,[(t=n.value)!=null&&t.success?(e.openBlock(),e.createElementBlock("span",Ii,"✓ 执行成功")):(i=n.value)!=null&&i.error?(e.openBlock(),e.createElementBlock("span",zi,"✗ 执行失败")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Ti,[n.value?n.value.error?(e.openBlock(),e.createElementBlock("div",Ri,[a[8]||(a[8]=e.createElementVNode("div",{class:"error-title"},"错误信息:",-1)),e.createElementVNode("div",Mi,e.toDisplayString(n.value.error),1)])):(e.openBlock(),e.createElementBlock("div",Hi,[e.createElementVNode("div",{ref_key:"previewContainer",ref:r,class:"node-preview"},null,512),n.value.logs.length>0?(e.openBlock(),e.createElementBlock("div",Oi,[a[9]||(a[9]=e.createElementVNode("div",{class:"console-title"},"控制台输出:",-1)),e.createElementVNode("div",Ui,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value.logs,(m,u)=>(e.openBlock(),e.createElementBlock("div",{key:u,class:"log-item"},e.toDisplayString(m),1))),128))])])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",Pi,' 点击"测试执行"按钮查看组件预览效果 '))])])]),e.createElementVNode("div",Li,[e.createElementVNode("button",{class:"btn-cancel",onClick:a[2]||(a[2]=m=>s.$emit("close"))},"取消"),e.createElementVNode("button",{class:"btn-confirm",onClick:a[3]||(a[3]=m=>s.$emit("save"))},"确定")])])])}}}),[["__scopeId","data-v-add3567b"]]),qi={class:"dialog-container"},Gi={class:"dialog-header"},ji={class:"dialog-body"},Xi={key:0,class:"empty-state"},Yi={key:1,class:"workflow-list"},Ki=["onClick"],Ji={class:"workflow-info"},Zi={class:"workflow-name"},Qi={class:"workflow-meta"},ec={class:"workflow-id"},tc={class:"workflow-date"},oc={class:"workflow-actions"},nc=["onClick"],ac={class:"dialog-footer"},rc=["disabled"],lc=re(e.defineComponent({__name:"WorkflowSelectorDialog",emits:["close","select"],setup(g,{emit:h}){const o=h,r=e.ref([]),n=e.ref(null),l=()=>{try{const a=localStorage.getItem("saved-workflows");a&&(r.value=JSON.parse(a))}catch(a){console.error("加载流程列表失败:",a)}},E=a=>{n.value=a},c=a=>{console.log("预览流程:",a)},x=()=>{n.value&&o("select",n.value)},s=a=>new Date(a).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"});return e.onMounted(()=>{l()}),(a,t)=>(e.openBlock(),e.createElementBlock("div",{class:"dialog-overlay",onClick:t[2]||(t[2]=e.withModifiers(i=>a.$emit("close"),["self"]))},[e.createElementVNode("div",qi,[e.createElementVNode("div",Gi,[t[3]||(t[3]=e.createElementVNode("h3",null,"选择流程",-1)),e.createElementVNode("button",{class:"btn-close",onClick:t[0]||(t[0]=i=>a.$emit("close"))},"×")]),e.createElementVNode("div",ji,[r.value.length===0?(e.openBlock(),e.createElementBlock("div",Xi,[...t[4]||(t[4]=[e.createElementVNode("p",null,"暂无已保存的流程",-1),e.createElementVNode("p",{class:"hint"},"请先在流程编辑器中创建并保存流程",-1)])])):(e.openBlock(),e.createElementBlock("div",Yi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,i=>{var m;return e.openBlock(),e.createElementBlock("div",{key:i.id,class:e.normalizeClass(["workflow-item",{selected:((m=n.value)==null?void 0:m.id)===i.id}]),onClick:u=>E(i)},[e.createElementVNode("div",Ji,[e.createElementVNode("div",Zi,e.toDisplayString(i.name),1),e.createElementVNode("div",Qi,[e.createElementVNode("span",ec,"ID: "+e.toDisplayString(i.id),1),e.createElementVNode("span",tc,e.toDisplayString(s(i.createdAt)),1)])]),e.createElementVNode("div",oc,[e.createElementVNode("button",{class:"btn-icon",onClick:e.withModifiers(u=>c(i),["stop"]),title:"预览"}," 👁️ ",8,nc)])],10,Ki)}),128))]))]),e.createElementVNode("div",ac,[e.createElementVNode("button",{class:"btn-secondary",onClick:t[1]||(t[1]=i=>a.$emit("close"))},"取消"),e.createElementVNode("button",{class:"btn-primary",disabled:!n.value,onClick:x}," 确定 ",8,rc)])])]))}}),[["__scopeId","data-v-c9a88e33"]]),Ie={SCADA_EDITOR_DATA:"scada_editor_data",SCADA_PREVIEW_DATA:"scada_preview_data"},ot=(g,h)=>{try{const o=JSON.stringify(h);return sessionStorage.setItem(g,o),!0}catch(o){return console.error(`保存到 sessionStorage 失败 [${g}]:`,o),!1}},eo=g=>{try{const h=sessionStorage.getItem(g);return h?JSON.parse(h):null}catch(h){return console.error(`从 sessionStorage 读取失败 [${g}]:`,h),null}},to=g=>{try{sessionStorage.removeItem(g)}catch(h){console.error(`从 sessionStorage 删除失败 [${g}]:`,h)}},sc=(g,h)=>{try{const o=JSON.stringify(h);return localStorage.setItem(g,o),!0}catch(o){return console.error(`保存到 localStorage 失败 [${g}]:`,o),!1}},ic=g=>{try{const h=localStorage.getItem(g);return h?JSON.parse(h):null}catch(h){return console.error(`从 localStorage 读取失败 [${g}]:`,h),null}},cc=g=>{try{localStorage.removeItem(g)}catch(h){console.error(`从 localStorage 删除失败 [${g}]:`,h)}},oo=(g,h)=>{try{const o=JSON.stringify(g,null,2),r=new Blob([o],{type:"application/json;charset=utf-8"}),n=URL.createObjectURL(r),l=document.createElement("a");return l.href=n,l.download=`${h}.json`,l.click(),URL.revokeObjectURL(n),!0}catch(o){return console.error("导出 JSON 文件失败:",o),!1}},nt=(g="")=>{const h=Date.now(),o=Math.random().toString(36).substring(2,11);return g?`${g}_${h}_${o}`:`${h}_${o}`},no=()=>nt("evt"),dc=()=>nt("node"),at=(g,h="YYYY-MM-DD HH:mm:ss")=>{const o=new Date(g),r=o.getFullYear(),n=String(o.getMonth()+1).padStart(2,"0"),l=String(o.getDate()).padStart(2,"0"),E=String(o.getHours()).padStart(2,"0"),c=String(o.getMinutes()).padStart(2,"0"),x=String(o.getSeconds()).padStart(2,"0");return h.replace("YYYY",String(r)).replace("MM",n).replace("DD",l).replace("HH",E).replace("mm",c).replace("ss",x)},rt=()=>Date.now(),ao=(g=50,h=50,o=400,r=300)=>({x:Math.random()*o+g,y:Math.random()*r+h}),le=(g,h="info",o=3e3)=>{const r=document.createElement("div");r.className=`scada-toast scada-toast-${h}`,r.textContent=g,Object.assign(r.style,{position:"fixed",top:"20px",left:"50%",transform:"translateX(-50%)",padding:"12px 24px",borderRadius:"6px",fontSize:"14px",fontWeight:"500",zIndex:"10000",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",maxWidth:"80%",wordBreak:"break-word",opacity:"0",transition:"opacity 0.3s ease, transform 0.3s ease"});const l={success:{bg:"#10b981",text:"#fff"},error:{bg:"#ef4444",text:"#fff"},warning:{bg:"#f59e0b",text:"#fff"},info:{bg:"#3b82f6",text:"#fff"}}[h];r.style.backgroundColor=l.bg,r.style.color=l.text,document.body.appendChild(r),requestAnimationFrame(()=>{r.style.opacity="1"}),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>{r.parentNode&&document.body.removeChild(r)},300)},o)},pc={class:"property-panel"},xc={key:1,class:"properties"},fc={key:2,class:"properties"},mc={class:"tabs"},uc={class:"tab-content"},gc={class:"tab-pane"},Ec={class:"property-section"},hc={key:0,class:"empty-hint"},vc={class:"event-list"},bc={class:"tab-pane"},yc={class:"property-section"},Cc={key:0,class:"empty-hint"},Bc={class:"event-list"},lt=re(e.defineComponent({__name:"PropertyPanel",props:{selectedNode:{},selectedEdge:{}},emits:["updateNode","deleteNode","updateEdge","deleteEdge"],setup(g,{emit:h}){const o=g,r=h,n=e.ref("basic"),l=e.ref([]),E=e.ref(new Set),c=e.ref([]),x=e.ref(new Set);e.watch(()=>o.selectedNode,z=>{var T,M;if((T=z==null?void 0:z.data)!=null&&T.events){const W=JSON.parse(JSON.stringify(z.data.events));W.forEach(Y=>{Y.id||(Y.id=N())}),l.value=W}else l.value=[];E.value.clear(),(M=z==null?void 0:z.data)!=null&&M.bindings?c.value=JSON.parse(JSON.stringify(z.data.bindings)):c.value=[],x.value.clear()},{immediate:!0});const s=e.ref(0),a=e.ref(0);let t=null,i={x:0,y:0},m={width:0,height:0};e.watch(()=>o.selectedNode,z=>{if(t&&(clearInterval(t),t=null),z){const T=z.getPosition(),M=z.getSize();T&&typeof T.x=="number"&&typeof T.y=="number"?i=T:(i={x:0,y:0},console.warn("节点位置数据异常:",T)),M&&typeof M.width=="number"&&typeof M.height=="number"?m=M:(m={width:0,height:0},console.warn("节点尺寸数据异常:",M)),t=setInterval(()=>{if(o.selectedNode){const W=o.selectedNode.getPosition(),Y=o.selectedNode.getSize();W&&typeof W.x=="number"&&typeof W.y=="number"&&(W.x!==i.x||W.y!==i.y)&&(i=W,s.value++),Y&&typeof Y.width=="number"&&typeof Y.height=="number"&&(Y.width!==m.width||Y.height!==m.height)&&(m=Y,a.value++)}},50)}}),e.onUnmounted(()=>{t&&clearInterval(t)});const u=e.computed(()=>{var T;return s.value,((T=o.selectedNode)==null?void 0:T.getPosition())||{x:0,y:0}}),y=e.computed(()=>{var T;return a.value,((T=o.selectedNode)==null?void 0:T.getSize())||{width:0,height:0}}),k=e.computed(()=>{var T;return((T=o.selectedNode)==null?void 0:T.getAttrs())||{}}),V=(z,T)=>{const M=Number(T.target.value),W=o.selectedNode.getPosition(),Y=z==="x"?{x:M,y:W.y}:{x:W.x,y:M};r("updateNode",{position:Y})},d=(z,T)=>{const M=Number(T.target.value),W=o.selectedNode.getSize(),Y=z==="width"?{width:M,height:W.height}:{width:W.width,height:M};r("updateNode",{size:Y})},p=z=>{const T=z.target.value;r("updateNode",{attrs:{text:{text:T},label:{text:T}}})},f=z=>{const T=z.target.value;r("updateNode",{attrs:{body:{fill:T}}})},C=z=>{const T=z.target.value;r("updateNode",{attrs:{body:{stroke:T}}})},b=z=>{const T=Number(z.target.value);r("updateNode",{attrs:{body:{strokeWidth:T}}})},A=z=>{const T=Number(z.target.value);r("updateNode",{attrs:{body:{opacity:T}}})},$=z=>{const T=z.target.value,M={...o.selectedNode.data,componentName:T};r("updateNode",{data:M})},S=(z,T)=>{if(!o.selectedNode)return;const M=z.split(".");if(M[0]==="attrs"){const W=M.slice(1).join("/");r("updateNode",{attrs:{[W]:T}})}else if(M[0]==="data"){const W=JSON.parse(JSON.stringify(o.selectedNode.data||{}));let Y=W;for(let me=1;me<M.length-1;me++){const Te=M[me];Y[Te]||(Y[Te]={}),Y=Y[Te]}Y[M[M.length-1]]=T,r("updateNode",{data:W})}},B=z=>{if(!o.selectedNode)return;const T={...o.selectedNode.data,dataSource:z};r("updateNode",{data:T})},N=no,w=()=>{const z={id:N(),name:"",type:"click",conditionType:"always",action:"attributeChange",params:{}};l.value.push(z),Z()},I=z=>{l.value.splice(z,1),Z()},R=(z,T,M)=>{const W=M.target.value;l.value[z][T]=W,Z()},O=(z,T,M)=>{const Y=M.target.value;l.value[z].condition||(l.value[z].condition={}),l.value[z].condition[T]=Y,Z()},j=(z,T,M)=>{const Y=M.target.value;l.value[z].params||(l.value[z].params={}),l.value[z].params[T]=Y,Z()},Z=()=>{l.value.forEach(T=>{T.id||(T.id=N())});const z={...o.selectedNode.data,events:l.value};r("updateNode",{data:z})},ee=z=>{E.value.has(z)?E.value.delete(z):E.value.add(z)},ae=z=>E.value.has(z),oe=()=>{const z={devicePointId:"",targetProperty:"",enabled:!0};c.value.push(z),_()},v=z=>{c.value.splice(z,1),_()},D=(z,T,M)=>{const Y=M.target.value;c.value[z][T]=Y,_()},_=()=>{const z={...o.selectedNode.data,bindings:c.value};r("updateNode",{data:z})},F=z=>{x.value.has(z)?x.value.delete(z):x.value.add(z)},H=z=>x.value.has(z),L=e.ref(!1),G=e.ref(-1),P=e.ref([]),q=z=>{var M;G.value=z;const T=l.value[z];(M=T.params)!=null&&M.attributeGroups&&Array.isArray(T.params.attributeGroups)?P.value=JSON.parse(JSON.stringify(T.params.attributeGroups)):P.value=[{target:"current",property:"",value:""}],L.value=!0},X=()=>{L.value=!1},te=()=>{P.value.push({target:"current",property:"",value:""})},se=z=>{P.value.splice(z,1)},ne=(z,T,M)=>{P.value[z][T]=M},ie=()=>{for(const z of P.value)if(!z.property){alert("请为每组配置选择目标属性");return}l.value[G.value].params||(l.value[G.value].params={}),l.value[G.value].params.attributeGroups=JSON.parse(JSON.stringify(P.value)),Z(),X()},Ee=e.ref(!1),he=e.ref(""),ye=e.ref(-1),_e=z=>{var M;ye.value=z;const T=l.value[z];he.value=((M=T.params)==null?void 0:M.code)||"",Ee.value=!0},ze=()=>{Ee.value=!1},Fe=()=>{l.value[ye.value].params||(l.value[ye.value].params={}),l.value[ye.value].params.code=he.value,Z(),ze()},fe=e.ref(!1),de=e.ref(-1),ve=z=>{de.value=z,fe.value=!0},$e=()=>{fe.value=!1},qe=z=>{l.value[de.value].params||(l.value[de.value].params={});const T=l.value[de.value].params;T.processId=z.id,T.processName=z.name,T.processData=z.data,Z(),$e()},be=()=>{var T;if(!o.selectedNode)return[];const z=[];return(T=o.selectedNode.data)!=null&&T.props&&Array.isArray(o.selectedNode.data.props)&&o.selectedNode.data.props.forEach(M=>{M.bindable!==!1&&z.push({key:M.key,label:M.label,type:M.type||"text"})}),z},we=z=>{r("updateEdge",z)},qt=()=>{r("deleteEdge")};return(z,T)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",pc,[!g.selectedNode&&!g.selectedEdge?(e.openBlock(),e.createBlock(Ye,{key:0})):g.selectedEdge?(e.openBlock(),e.createElementBlock("div",xc,[T[5]||(T[5]=e.createElementVNode("h3",{class:"panel-title"},"连线属性",-1)),e.createVNode(tl,{"selected-edge":g.selectedEdge,onUpdateEdge:we,onDeleteEdge:qt},null,8,["selected-edge"])])):g.selectedNode?(e.openBlock(),e.createElementBlock("div",fc,[T[10]||(T[10]=e.createElementVNode("h3",{class:"panel-title"},"节点属性",-1)),e.createElementVNode("div",mc,[e.createElementVNode("button",{class:e.normalizeClass(["tab-btn",{active:n.value==="basic"}]),onClick:T[0]||(T[0]=M=>n.value="basic")}," 基础 ",2),e.createElementVNode("button",{class:e.normalizeClass(["tab-btn",{active:n.value==="data"}]),onClick:T[1]||(T[1]=M=>n.value="data")}," 数据 ",2),e.createElementVNode("button",{class:e.normalizeClass(["tab-btn",{active:n.value==="binding"}]),onClick:T[2]||(T[2]=M=>n.value="binding")}," 绑定 ",2),e.createElementVNode("button",{class:e.normalizeClass(["tab-btn",{active:n.value==="event"}]),onClick:T[3]||(T[3]=M=>n.value="event")}," 事件 ",2)]),e.createElementVNode("div",uc,[e.withDirectives(e.createVNode(Ke,{"selected-node":g.selectedNode,"node-position":u.value,"node-size":y.value,"node-attrs":k.value,onUpdatePosition:V,onUpdateSize:d,onUpdateLabel:p,onUpdateFill:f,onUpdateStroke:C,onUpdateStrokeWidth:b,onUpdateOpacity:A,onUpdateComponentName:$,onUpdateDynamicProp:S},null,8,["selected-node","node-position","node-size","node-attrs"]),[[e.vShow,n.value==="basic"]]),e.withDirectives(e.createVNode(kr,{"selected-node":g.selectedNode,onUpdateDataSource:B},null,8,["selected-node"]),[[e.vShow,n.value==="data"]]),e.withDirectives(e.createElementVNode("div",gc,[e.createElementVNode("div",Ec,[e.createElementVNode("div",{class:"section-header"},[T[6]||(T[6]=e.createElementVNode("h4",null,"节点事件",-1)),e.createElementVNode("button",{class:"btn-add",onClick:w},"+ 添加事件")]),l.value.length===0?(e.openBlock(),e.createElementBlock("div",hc,[...T[7]||(T[7]=[e.createElementVNode("span",null,"暂无事件,点击上方按钮添加",-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",vc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(M,W)=>(e.openBlock(),e.createBlock(Je,{key:W,event:M,index:W,"is-collapsed":ae(W),"node-properties":be(),onToggleCollapse:Y=>ee(W),onRemove:Y=>I(W),onUpdateField:(Y,me)=>R(W,Y,me),onUpdateCondition:(Y,me)=>O(W,Y,me),onUpdateParams:(Y,me)=>j(W,Y,me),onOpenAttributeConfig:Y=>q(W),onOpenCustomCode:Y=>_e(W),onOpenWorkflowSelector:Y=>ve(W)},null,8,["event","index","is-collapsed","node-properties","onToggleCollapse","onRemove","onUpdateField","onUpdateCondition","onUpdateParams","onOpenAttributeConfig","onOpenCustomCode","onOpenWorkflowSelector"]))),128))])])],512),[[e.vShow,n.value==="event"]]),e.withDirectives(e.createElementVNode("div",bc,[e.createElementVNode("div",yc,[e.createElementVNode("div",{class:"section-header"},[T[8]||(T[8]=e.createElementVNode("h4",null,"数据绑定",-1)),e.createElementVNode("button",{class:"btn-add",onClick:oe},"+ 添加绑定")]),c.value.length===0?(e.openBlock(),e.createElementBlock("div",Cc,[...T[9]||(T[9]=[e.createElementVNode("span",null,"暂无绑定,点击上方按钮添加",-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Bc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(M,W)=>(e.openBlock(),e.createBlock(Qe,{key:W,binding:M,index:W,"is-collapsed":H(W),"node-properties":be(),"event-list":l.value,onToggleCollapse:Y=>F(W),onRemove:Y=>v(W),onUpdateField:(Y,me)=>D(W,Y,me)},null,8,["binding","index","is-collapsed","node-properties","event-list","onToggleCollapse","onRemove","onUpdateField"]))),128))])])],512),[[e.vShow,n.value==="binding"]])])])):e.createCommentVNode("",!0)]),L.value?(e.openBlock(),e.createBlock(et,{key:0,"attribute-groups":P.value,"node-properties":be(),onClose:X,onSave:ie,onAddGroup:te,onRemoveGroup:se,onUpdateGroup:ne},null,8,["attribute-groups","node-properties"])):e.createCommentVNode("",!0),Ee.value?(e.openBlock(),e.createBlock(tt,{key:1,code:he.value,"onUpdate:code":T[4]||(T[4]=M=>he.value=M),"selected-node":g.selectedNode,onClose:ze,onSave:Fe},null,8,["code","selected-node"])):e.createCommentVNode("",!0),fe.value?(e.openBlock(),e.createBlock(lc,{key:2,onClose:$e,onSelect:qe})):e.createCommentVNode("",!0)],64))}}),[["__scopeId","data-v-7d3281c0"]]);var K=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function kc(g){return g&&g.__esModule&&Object.prototype.hasOwnProperty.call(g,"default")?g.default:g}function Nc(g){if(g.__esModule)return g;var h=g.default;if(typeof h=="function"){var o=function r(){return this instanceof r?Reflect.construct(h,arguments,this.constructor):h.apply(this,arguments)};o.prototype=h.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(g).forEach(function(r){var n=Object.getOwnPropertyDescriptor(g,r);Object.defineProperty(o,r,n.get?n:{enumerable:!0,get:function(){return g[r]}})}),o}var ro={exports:{}};function Vc(g){throw new Error('Could not dynamically require "'+g+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var st={exports:{}};const Dc=Nc(Object.freeze(Object.defineProperty({__proto__:null,default:{}},Symbol.toStringTag,{value:"Module"})));var lo;function Q(){return lo||(lo=1,function(g,h){(function(o,r){g.exports=r()})(K,function(){var o=o||function(r,n){var l;if(typeof window<"u"&&window.crypto&&(l=window.crypto),typeof self<"u"&&self.crypto&&(l=self.crypto),typeof globalThis<"u"&&globalThis.crypto&&(l=globalThis.crypto),!l&&typeof window<"u"&&window.msCrypto&&(l=window.msCrypto),!l&&typeof K<"u"&&K.crypto&&(l=K.crypto),!l&&typeof Vc=="function")try{l=Dc}catch{}var E=function(){if(l){if(typeof l.getRandomValues=="function")try{return l.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof l.randomBytes=="function")try{return l.randomBytes(4).readInt32LE()}catch{}}throw new Error("Native crypto module could not be used to get secure random number.")},c=Object.create||function(){function d(){}return function(p){var f;return d.prototype=p,f=new d,d.prototype=null,f}}(),x={},s=x.lib={},a=s.Base=function(){return{extend:function(d){var p=c(this);return d&&p.mixIn(d),(!p.hasOwnProperty("init")||this.init===p.init)&&(p.init=function(){p.$super.init.apply(this,arguments)}),p.init.prototype=p,p.$super=this,p},create:function(){var d=this.extend();return d.init.apply(d,arguments),d},init:function(){},mixIn:function(d){for(var p in d)d.hasOwnProperty(p)&&(this[p]=d[p]);d.hasOwnProperty("toString")&&(this.toString=d.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),t=s.WordArray=a.extend({init:function(d,p){d=this.words=d||[],p!=n?this.sigBytes=p:this.sigBytes=d.length*4},toString:function(d){return(d||m).stringify(this)},concat:function(d){var p=this.words,f=d.words,C=this.sigBytes,b=d.sigBytes;if(this.clamp(),C%4)for(var A=0;A<b;A++){var $=f[A>>>2]>>>24-A%4*8&255;p[C+A>>>2]|=$<<24-(C+A)%4*8}else for(var S=0;S<b;S+=4)p[C+S>>>2]=f[S>>>2];return this.sigBytes+=b,this},clamp:function(){var d=this.words,p=this.sigBytes;d[p>>>2]&=4294967295<<32-p%4*8,d.length=r.ceil(p/4)},clone:function(){var d=a.clone.call(this);return d.words=this.words.slice(0),d},random:function(d){for(var p=[],f=0;f<d;f+=4)p.push(E());return new t.init(p,d)}}),i=x.enc={},m=i.Hex={stringify:function(d){for(var p=d.words,f=d.sigBytes,C=[],b=0;b<f;b++){var A=p[b>>>2]>>>24-b%4*8&255;C.push((A>>>4).toString(16)),C.push((A&15).toString(16))}return C.join("")},parse:function(d){for(var p=d.length,f=[],C=0;C<p;C+=2)f[C>>>3]|=parseInt(d.substr(C,2),16)<<24-C%8*4;return new t.init(f,p/2)}},u=i.Latin1={stringify:function(d){for(var p=d.words,f=d.sigBytes,C=[],b=0;b<f;b++){var A=p[b>>>2]>>>24-b%4*8&255;C.push(String.fromCharCode(A))}return C.join("")},parse:function(d){for(var p=d.length,f=[],C=0;C<p;C++)f[C>>>2]|=(d.charCodeAt(C)&255)<<24-C%4*8;return new t.init(f,p)}},y=i.Utf8={stringify:function(d){try{return decodeURIComponent(escape(u.stringify(d)))}catch{throw new Error("Malformed UTF-8 data")}},parse:function(d){return u.parse(unescape(encodeURIComponent(d)))}},k=s.BufferedBlockAlgorithm=a.extend({reset:function(){this._data=new t.init,this._nDataBytes=0},_append:function(d){typeof d=="string"&&(d=y.parse(d)),this._data.concat(d),this._nDataBytes+=d.sigBytes},_process:function(d){var p,f=this._data,C=f.words,b=f.sigBytes,A=this.blockSize,$=A*4,S=b/$;d?S=r.ceil(S):S=r.max((S|0)-this._minBufferSize,0);var B=S*A,N=r.min(B*4,b);if(B){for(var w=0;w<B;w+=A)this._doProcessBlock(C,w);p=C.splice(0,B),f.sigBytes-=N}return new t.init(p,N)},clone:function(){var d=a.clone.call(this);return d._data=this._data.clone(),d},_minBufferSize:0});s.Hasher=k.extend({cfg:a.extend(),init:function(d){this.cfg=this.cfg.extend(d),this.reset()},reset:function(){k.reset.call(this),this._doReset()},update:function(d){return this._append(d),this._process(),this},finalize:function(d){d&&this._append(d);var p=this._doFinalize();return p},blockSize:16,_createHelper:function(d){return function(p,f){return new d.init(f).finalize(p)}},_createHmacHelper:function(d){return function(p,f){return new V.HMAC.init(d,f).finalize(p)}}});var V=x.algo={};return x}(Math);return o})}(st)),st.exports}var it={exports:{}},so;function Le(){return so||(so=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){return function(r){var n=o,l=n.lib,E=l.Base,c=l.WordArray,x=n.x64={};x.Word=E.extend({init:function(s,a){this.high=s,this.low=a}}),x.WordArray=E.extend({init:function(s,a){s=this.words=s||[],a!=r?this.sigBytes=a:this.sigBytes=s.length*8},toX32:function(){for(var s=this.words,a=s.length,t=[],i=0;i<a;i++){var m=s[i];t.push(m.high),t.push(m.low)}return c.create(t,this.sigBytes)},clone:function(){for(var s=E.clone.call(this),a=s.words=this.words.slice(0),t=a.length,i=0;i<t;i++)a[i]=a[i].clone();return s}})}(),o})}(it)),it.exports}var ct={exports:{}},io;function Ac(){return io||(io=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){return function(){if(typeof ArrayBuffer=="function"){var r=o,n=r.lib,l=n.WordArray,E=l.init,c=l.init=function(x){if(x instanceof ArrayBuffer&&(x=new Uint8Array(x)),(x instanceof Int8Array||typeof Uint8ClampedArray<"u"&&x instanceof Uint8ClampedArray||x instanceof Int16Array||x instanceof Uint16Array||x instanceof Int32Array||x instanceof Uint32Array||x instanceof Float32Array||x instanceof Float64Array)&&(x=new Uint8Array(x.buffer,x.byteOffset,x.byteLength)),x instanceof Uint8Array){for(var s=x.byteLength,a=[],t=0;t<s;t++)a[t>>>2]|=x[t]<<24-t%4*8;E.call(this,a,s)}else E.apply(this,arguments)};c.prototype=l}}(),o.lib.WordArray})}(ct)),ct.exports}var dt={exports:{}},co;function _c(){return co||(co=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){return function(){var r=o,n=r.lib,l=n.WordArray,E=r.enc;E.Utf16=E.Utf16BE={stringify:function(x){for(var s=x.words,a=x.sigBytes,t=[],i=0;i<a;i+=2){var m=s[i>>>2]>>>16-i%4*8&65535;t.push(String.fromCharCode(m))}return t.join("")},parse:function(x){for(var s=x.length,a=[],t=0;t<s;t++)a[t>>>1]|=x.charCodeAt(t)<<16-t%2*16;return l.create(a,s*2)}},E.Utf16LE={stringify:function(x){for(var s=x.words,a=x.sigBytes,t=[],i=0;i<a;i+=2){var m=c(s[i>>>2]>>>16-i%4*8&65535);t.push(String.fromCharCode(m))}return t.join("")},parse:function(x){for(var s=x.length,a=[],t=0;t<s;t++)a[t>>>1]|=c(x.charCodeAt(t)<<16-t%2*16);return l.create(a,s*2)}};function c(x){return x<<8&4278255360|x>>>8&16711935}}(),o.enc.Utf16})}(dt)),dt.exports}var pt={exports:{}},po;function De(){return po||(po=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){return function(){var r=o,n=r.lib,l=n.WordArray,E=r.enc;E.Base64={stringify:function(x){var s=x.words,a=x.sigBytes,t=this._map;x.clamp();for(var i=[],m=0;m<a;m+=3)for(var u=s[m>>>2]>>>24-m%4*8&255,y=s[m+1>>>2]>>>24-(m+1)%4*8&255,k=s[m+2>>>2]>>>24-(m+2)%4*8&255,V=u<<16|y<<8|k,d=0;d<4&&m+d*.75<a;d++)i.push(t.charAt(V>>>6*(3-d)&63));var p=t.charAt(64);if(p)for(;i.length%4;)i.push(p);return i.join("")},parse:function(x){var s=x.length,a=this._map,t=this._reverseMap;if(!t){t=this._reverseMap=[];for(var i=0;i<a.length;i++)t[a.charCodeAt(i)]=i}var m=a.charAt(64);if(m){var u=x.indexOf(m);u!==-1&&(s=u)}return c(x,s,t)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="};function c(x,s,a){for(var t=[],i=0,m=0;m<s;m++)if(m%4){var u=a[x.charCodeAt(m-1)]<<m%4*2,y=a[x.charCodeAt(m)]>>>6-m%4*2,k=u|y;t[i>>>2]|=k<<24-i%4*8,i++}return l.create(t,i)}}(),o.enc.Base64})}(pt)),pt.exports}var xt={exports:{}},xo;function Fc(){return xo||(xo=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){return function(){var r=o,n=r.lib,l=n.WordArray,E=r.enc;E.Base64url={stringify:function(x,s){s===void 0&&(s=!0);var a=x.words,t=x.sigBytes,i=s?this._safe_map:this._map;x.clamp();for(var m=[],u=0;u<t;u+=3)for(var y=a[u>>>2]>>>24-u%4*8&255,k=a[u+1>>>2]>>>24-(u+1)%4*8&255,V=a[u+2>>>2]>>>24-(u+2)%4*8&255,d=y<<16|k<<8|V,p=0;p<4&&u+p*.75<t;p++)m.push(i.charAt(d>>>6*(3-p)&63));var f=i.charAt(64);if(f)for(;m.length%4;)m.push(f);return m.join("")},parse:function(x,s){s===void 0&&(s=!0);var a=x.length,t=s?this._safe_map:this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var m=0;m<t.length;m++)i[t.charCodeAt(m)]=m}var u=t.charAt(64);if(u){var y=x.indexOf(u);y!==-1&&(a=y)}return c(x,a,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_safe_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"};function c(x,s,a){for(var t=[],i=0,m=0;m<s;m++)if(m%4){var u=a[x.charCodeAt(m-1)]<<m%4*2,y=a[x.charCodeAt(m)]>>>6-m%4*2,k=u|y;t[i>>>2]|=k<<24-i%4*8,i++}return l.create(t,i)}}(),o.enc.Base64url})}(xt)),xt.exports}var ft={exports:{}},fo;function Ae(){return fo||(fo=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){return function(r){var n=o,l=n.lib,E=l.WordArray,c=l.Hasher,x=n.algo,s=[];(function(){for(var y=0;y<64;y++)s[y]=r.abs(r.sin(y+1))*4294967296|0})();var a=x.MD5=c.extend({_doReset:function(){this._hash=new E.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(y,k){for(var V=0;V<16;V++){var d=k+V,p=y[d];y[d]=(p<<8|p>>>24)&16711935|(p<<24|p>>>8)&4278255360}var f=this._hash.words,C=y[k+0],b=y[k+1],A=y[k+2],$=y[k+3],S=y[k+4],B=y[k+5],N=y[k+6],w=y[k+7],I=y[k+8],R=y[k+9],O=y[k+10],j=y[k+11],Z=y[k+12],ee=y[k+13],ae=y[k+14],oe=y[k+15],v=f[0],D=f[1],_=f[2],F=f[3];v=t(v,D,_,F,C,7,s[0]),F=t(F,v,D,_,b,12,s[1]),_=t(_,F,v,D,A,17,s[2]),D=t(D,_,F,v,$,22,s[3]),v=t(v,D,_,F,S,7,s[4]),F=t(F,v,D,_,B,12,s[5]),_=t(_,F,v,D,N,17,s[6]),D=t(D,_,F,v,w,22,s[7]),v=t(v,D,_,F,I,7,s[8]),F=t(F,v,D,_,R,12,s[9]),_=t(_,F,v,D,O,17,s[10]),D=t(D,_,F,v,j,22,s[11]),v=t(v,D,_,F,Z,7,s[12]),F=t(F,v,D,_,ee,12,s[13]),_=t(_,F,v,D,ae,17,s[14]),D=t(D,_,F,v,oe,22,s[15]),v=i(v,D,_,F,b,5,s[16]),F=i(F,v,D,_,N,9,s[17]),_=i(_,F,v,D,j,14,s[18]),D=i(D,_,F,v,C,20,s[19]),v=i(v,D,_,F,B,5,s[20]),F=i(F,v,D,_,O,9,s[21]),_=i(_,F,v,D,oe,14,s[22]),D=i(D,_,F,v,S,20,s[23]),v=i(v,D,_,F,R,5,s[24]),F=i(F,v,D,_,ae,9,s[25]),_=i(_,F,v,D,$,14,s[26]),D=i(D,_,F,v,I,20,s[27]),v=i(v,D,_,F,ee,5,s[28]),F=i(F,v,D,_,A,9,s[29]),_=i(_,F,v,D,w,14,s[30]),D=i(D,_,F,v,Z,20,s[31]),v=m(v,D,_,F,B,4,s[32]),F=m(F,v,D,_,I,11,s[33]),_=m(_,F,v,D,j,16,s[34]),D=m(D,_,F,v,ae,23,s[35]),v=m(v,D,_,F,b,4,s[36]),F=m(F,v,D,_,S,11,s[37]),_=m(_,F,v,D,w,16,s[38]),D=m(D,_,F,v,O,23,s[39]),v=m(v,D,_,F,ee,4,s[40]),F=m(F,v,D,_,C,11,s[41]),_=m(_,F,v,D,$,16,s[42]),D=m(D,_,F,v,N,23,s[43]),v=m(v,D,_,F,R,4,s[44]),F=m(F,v,D,_,Z,11,s[45]),_=m(_,F,v,D,oe,16,s[46]),D=m(D,_,F,v,A,23,s[47]),v=u(v,D,_,F,C,6,s[48]),F=u(F,v,D,_,w,10,s[49]),_=u(_,F,v,D,ae,15,s[50]),D=u(D,_,F,v,B,21,s[51]),v=u(v,D,_,F,Z,6,s[52]),F=u(F,v,D,_,$,10,s[53]),_=u(_,F,v,D,O,15,s[54]),D=u(D,_,F,v,b,21,s[55]),v=u(v,D,_,F,I,6,s[56]),F=u(F,v,D,_,oe,10,s[57]),_=u(_,F,v,D,N,15,s[58]),D=u(D,_,F,v,ee,21,s[59]),v=u(v,D,_,F,S,6,s[60]),F=u(F,v,D,_,j,10,s[61]),_=u(_,F,v,D,A,15,s[62]),D=u(D,_,F,v,R,21,s[63]),f[0]=f[0]+v|0,f[1]=f[1]+D|0,f[2]=f[2]+_|0,f[3]=f[3]+F|0},_doFinalize:function(){var y=this._data,k=y.words,V=this._nDataBytes*8,d=y.sigBytes*8;k[d>>>5]|=128<<24-d%32;var p=r.floor(V/4294967296),f=V;k[(d+64>>>9<<4)+15]=(p<<8|p>>>24)&16711935|(p<<24|p>>>8)&4278255360,k[(d+64>>>9<<4)+14]=(f<<8|f>>>24)&16711935|(f<<24|f>>>8)&4278255360,y.sigBytes=(k.length+1)*4,this._process();for(var C=this._hash,b=C.words,A=0;A<4;A++){var $=b[A];b[A]=($<<8|$>>>24)&16711935|($<<24|$>>>8)&4278255360}return C},clone:function(){var y=c.clone.call(this);return y._hash=this._hash.clone(),y}});function t(y,k,V,d,p,f,C){var b=y+(k&V|~k&d)+p+C;return(b<<f|b>>>32-f)+k}function i(y,k,V,d,p,f,C){var b=y+(k&d|V&~d)+p+C;return(b<<f|b>>>32-f)+k}function m(y,k,V,d,p,f,C){var b=y+(k^V^d)+p+C;return(b<<f|b>>>32-f)+k}function u(y,k,V,d,p,f,C){var b=y+(V^(k|~d))+p+C;return(b<<f|b>>>32-f)+k}n.MD5=c._createHelper(a),n.HmacMD5=c._createHmacHelper(a)}(Math),o.MD5})}(ft)),ft.exports}var mt={exports:{}},mo;function uo(){return mo||(mo=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){return function(){var r=o,n=r.lib,l=n.WordArray,E=n.Hasher,c=r.algo,x=[],s=c.SHA1=E.extend({_doReset:function(){this._hash=new l.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(a,t){for(var i=this._hash.words,m=i[0],u=i[1],y=i[2],k=i[3],V=i[4],d=0;d<80;d++){if(d<16)x[d]=a[t+d]|0;else{var p=x[d-3]^x[d-8]^x[d-14]^x[d-16];x[d]=p<<1|p>>>31}var f=(m<<5|m>>>27)+V+x[d];d<20?f+=(u&y|~u&k)+1518500249:d<40?f+=(u^y^k)+1859775393:d<60?f+=(u&y|u&k|y&k)-1894007588:f+=(u^y^k)-899497514,V=k,k=y,y=u<<30|u>>>2,u=m,m=f}i[0]=i[0]+m|0,i[1]=i[1]+u|0,i[2]=i[2]+y|0,i[3]=i[3]+k|0,i[4]=i[4]+V|0},_doFinalize:function(){var a=this._data,t=a.words,i=this._nDataBytes*8,m=a.sigBytes*8;return t[m>>>5]|=128<<24-m%32,t[(m+64>>>9<<4)+14]=Math.floor(i/4294967296),t[(m+64>>>9<<4)+15]=i,a.sigBytes=t.length*4,this._process(),this._hash},clone:function(){var a=E.clone.call(this);return a._hash=this._hash.clone(),a}});r.SHA1=E._createHelper(s),r.HmacSHA1=E._createHmacHelper(s)}(),o.SHA1})}(mt)),mt.exports}var ut={exports:{}},go;function gt(){return go||(go=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){return function(r){var n=o,l=n.lib,E=l.WordArray,c=l.Hasher,x=n.algo,s=[],a=[];(function(){function m(V){for(var d=r.sqrt(V),p=2;p<=d;p++)if(!(V%p))return!1;return!0}function u(V){return(V-(V|0))*4294967296|0}for(var y=2,k=0;k<64;)m(y)&&(k<8&&(s[k]=u(r.pow(y,1/2))),a[k]=u(r.pow(y,1/3)),k++),y++})();var t=[],i=x.SHA256=c.extend({_doReset:function(){this._hash=new E.init(s.slice(0))},_doProcessBlock:function(m,u){for(var y=this._hash.words,k=y[0],V=y[1],d=y[2],p=y[3],f=y[4],C=y[5],b=y[6],A=y[7],$=0;$<64;$++){if($<16)t[$]=m[u+$]|0;else{var S=t[$-15],B=(S<<25|S>>>7)^(S<<14|S>>>18)^S>>>3,N=t[$-2],w=(N<<15|N>>>17)^(N<<13|N>>>19)^N>>>10;t[$]=B+t[$-7]+w+t[$-16]}var I=f&C^~f&b,R=k&V^k&d^V&d,O=(k<<30|k>>>2)^(k<<19|k>>>13)^(k<<10|k>>>22),j=(f<<26|f>>>6)^(f<<21|f>>>11)^(f<<7|f>>>25),Z=A+j+I+a[$]+t[$],ee=O+R;A=b,b=C,C=f,f=p+Z|0,p=d,d=V,V=k,k=Z+ee|0}y[0]=y[0]+k|0,y[1]=y[1]+V|0,y[2]=y[2]+d|0,y[3]=y[3]+p|0,y[4]=y[4]+f|0,y[5]=y[5]+C|0,y[6]=y[6]+b|0,y[7]=y[7]+A|0},_doFinalize:function(){var m=this._data,u=m.words,y=this._nDataBytes*8,k=m.sigBytes*8;return u[k>>>5]|=128<<24-k%32,u[(k+64>>>9<<4)+14]=r.floor(y/4294967296),u[(k+64>>>9<<4)+15]=y,m.sigBytes=u.length*4,this._process(),this._hash},clone:function(){var m=c.clone.call(this);return m._hash=this._hash.clone(),m}});n.SHA256=c._createHelper(i),n.HmacSHA256=c._createHmacHelper(i)}(Math),o.SHA256})}(ut)),ut.exports}var Et={exports:{}},Eo;function $c(){return Eo||(Eo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),gt())})(K,function(o){return function(){var r=o,n=r.lib,l=n.WordArray,E=r.algo,c=E.SHA256,x=E.SHA224=c.extend({_doReset:function(){this._hash=new l.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var s=c._doFinalize.call(this);return s.sigBytes-=4,s}});r.SHA224=c._createHelper(x),r.HmacSHA224=c._createHmacHelper(x)}(),o.SHA224})}(Et)),Et.exports}var ht={exports:{}},ho;function vo(){return ho||(ho=1,function(g,h){(function(o,r,n){g.exports=r(Q(),Le())})(K,function(o){return function(){var r=o,n=r.lib,l=n.Hasher,E=r.x64,c=E.Word,x=E.WordArray,s=r.algo;function a(){return c.create.apply(c,arguments)}var t=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],i=[];(function(){for(var u=0;u<80;u++)i[u]=a()})();var m=s.SHA512=l.extend({_doReset:function(){this._hash=new x.init([new c.init(1779033703,4089235720),new c.init(3144134277,2227873595),new c.init(1013904242,4271175723),new c.init(2773480762,1595750129),new c.init(1359893119,2917565137),new c.init(2600822924,725511199),new c.init(528734635,4215389547),new c.init(1541459225,327033209)])},_doProcessBlock:function(u,y){for(var k=this._hash.words,V=k[0],d=k[1],p=k[2],f=k[3],C=k[4],b=k[5],A=k[6],$=k[7],S=V.high,B=V.low,N=d.high,w=d.low,I=p.high,R=p.low,O=f.high,j=f.low,Z=C.high,ee=C.low,ae=b.high,oe=b.low,v=A.high,D=A.low,_=$.high,F=$.low,H=S,L=B,G=N,P=w,q=I,X=R,te=O,se=j,ne=Z,ie=ee,Ee=ae,he=oe,ye=v,_e=D,ze=_,Fe=F,fe=0;fe<80;fe++){var de,ve,$e=i[fe];if(fe<16)ve=$e.high=u[y+fe*2]|0,de=$e.low=u[y+fe*2+1]|0;else{var qe=i[fe-15],be=qe.high,we=qe.low,qt=(be>>>1|we<<31)^(be>>>8|we<<24)^be>>>7,z=(we>>>1|be<<31)^(we>>>8|be<<24)^(we>>>7|be<<25),T=i[fe-2],M=T.high,W=T.low,Y=(M>>>19|W<<13)^(M<<3|W>>>29)^M>>>6,me=(W>>>19|M<<13)^(W<<3|M>>>29)^(W>>>6|M<<26),Te=i[fe-7],ip=Te.high,cp=Te.low,Ko=i[fe-16],dp=Ko.high,Jo=Ko.low;de=z+cp,ve=qt+ip+(de>>>0<z>>>0?1:0),de=de+me,ve=ve+Y+(de>>>0<me>>>0?1:0),de=de+Jo,ve=ve+dp+(de>>>0<Jo>>>0?1:0),$e.high=ve,$e.low=de}var pp=ne&Ee^~ne&ye,Zo=ie&he^~ie&_e,xp=H&G^H&q^G&q,fp=L&P^L&X^P&X,mp=(H>>>28|L<<4)^(H<<30|L>>>2)^(H<<25|L>>>7),Qo=(L>>>28|H<<4)^(L<<30|H>>>2)^(L<<25|H>>>7),up=(ne>>>14|ie<<18)^(ne>>>18|ie<<14)^(ne<<23|ie>>>9),gp=(ie>>>14|ne<<18)^(ie>>>18|ne<<14)^(ie<<23|ne>>>9),en=t[fe],Ep=en.high,tn=en.low,ue=Fe+gp,Ne=ze+up+(ue>>>0<Fe>>>0?1:0),ue=ue+Zo,Ne=Ne+pp+(ue>>>0<Zo>>>0?1:0),ue=ue+tn,Ne=Ne+Ep+(ue>>>0<tn>>>0?1:0),ue=ue+de,Ne=Ne+ve+(ue>>>0<de>>>0?1:0),on=Qo+fp,hp=mp+xp+(on>>>0<Qo>>>0?1:0);ze=ye,Fe=_e,ye=Ee,_e=he,Ee=ne,he=ie,ie=se+ue|0,ne=te+Ne+(ie>>>0<se>>>0?1:0)|0,te=q,se=X,q=G,X=P,G=H,P=L,L=ue+on|0,H=Ne+hp+(L>>>0<ue>>>0?1:0)|0}B=V.low=B+L,V.high=S+H+(B>>>0<L>>>0?1:0),w=d.low=w+P,d.high=N+G+(w>>>0<P>>>0?1:0),R=p.low=R+X,p.high=I+q+(R>>>0<X>>>0?1:0),j=f.low=j+se,f.high=O+te+(j>>>0<se>>>0?1:0),ee=C.low=ee+ie,C.high=Z+ne+(ee>>>0<ie>>>0?1:0),oe=b.low=oe+he,b.high=ae+Ee+(oe>>>0<he>>>0?1:0),D=A.low=D+_e,A.high=v+ye+(D>>>0<_e>>>0?1:0),F=$.low=F+Fe,$.high=_+ze+(F>>>0<Fe>>>0?1:0)},_doFinalize:function(){var u=this._data,y=u.words,k=this._nDataBytes*8,V=u.sigBytes*8;y[V>>>5]|=128<<24-V%32,y[(V+128>>>10<<5)+30]=Math.floor(k/4294967296),y[(V+128>>>10<<5)+31]=k,u.sigBytes=y.length*4,this._process();var d=this._hash.toX32();return d},clone:function(){var u=l.clone.call(this);return u._hash=this._hash.clone(),u},blockSize:1024/32});r.SHA512=l._createHelper(m),r.HmacSHA512=l._createHmacHelper(m)}(),o.SHA512})}(ht)),ht.exports}var vt={exports:{}},bo;function wc(){return bo||(bo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),Le(),vo())})(K,function(o){return function(){var r=o,n=r.x64,l=n.Word,E=n.WordArray,c=r.algo,x=c.SHA512,s=c.SHA384=x.extend({_doReset:function(){this._hash=new E.init([new l.init(3418070365,3238371032),new l.init(1654270250,914150663),new l.init(2438529370,812702999),new l.init(355462360,4144912697),new l.init(1731405415,4290775857),new l.init(2394180231,1750603025),new l.init(3675008525,1694076839),new l.init(1203062813,3204075428)])},_doFinalize:function(){var a=x._doFinalize.call(this);return a.sigBytes-=16,a}});r.SHA384=x._createHelper(s),r.HmacSHA384=x._createHmacHelper(s)}(),o.SHA384})}(vt)),vt.exports}var bt={exports:{}},yo;function Sc(){return yo||(yo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),Le())})(K,function(o){return function(r){var n=o,l=n.lib,E=l.WordArray,c=l.Hasher,x=n.x64,s=x.Word,a=n.algo,t=[],i=[],m=[];(function(){for(var k=1,V=0,d=0;d<24;d++){t[k+5*V]=(d+1)*(d+2)/2%64;var p=V%5,f=(2*k+3*V)%5;k=p,V=f}for(var k=0;k<5;k++)for(var V=0;V<5;V++)i[k+5*V]=V+(2*k+3*V)%5*5;for(var C=1,b=0;b<24;b++){for(var A=0,$=0,S=0;S<7;S++){if(C&1){var B=(1<<S)-1;B<32?$^=1<<B:A^=1<<B-32}C&128?C=C<<1^113:C<<=1}m[b]=s.create(A,$)}})();var u=[];(function(){for(var k=0;k<25;k++)u[k]=s.create()})();var y=a.SHA3=c.extend({cfg:c.cfg.extend({outputLength:512}),_doReset:function(){for(var k=this._state=[],V=0;V<25;V++)k[V]=new s.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(k,V){for(var d=this._state,p=this.blockSize/2,f=0;f<p;f++){var C=k[V+2*f],b=k[V+2*f+1];C=(C<<8|C>>>24)&16711935|(C<<24|C>>>8)&4278255360,b=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;var A=d[f];A.high^=b,A.low^=C}for(var $=0;$<24;$++){for(var S=0;S<5;S++){for(var B=0,N=0,w=0;w<5;w++){var A=d[S+5*w];B^=A.high,N^=A.low}var I=u[S];I.high=B,I.low=N}for(var S=0;S<5;S++)for(var R=u[(S+4)%5],O=u[(S+1)%5],j=O.high,Z=O.low,B=R.high^(j<<1|Z>>>31),N=R.low^(Z<<1|j>>>31),w=0;w<5;w++){var A=d[S+5*w];A.high^=B,A.low^=N}for(var ee=1;ee<25;ee++){var B,N,A=d[ee],ae=A.high,oe=A.low,v=t[ee];v<32?(B=ae<<v|oe>>>32-v,N=oe<<v|ae>>>32-v):(B=oe<<v-32|ae>>>64-v,N=ae<<v-32|oe>>>64-v);var D=u[i[ee]];D.high=B,D.low=N}var _=u[0],F=d[0];_.high=F.high,_.low=F.low;for(var S=0;S<5;S++)for(var w=0;w<5;w++){var ee=S+5*w,A=d[ee],H=u[ee],L=u[(S+1)%5+5*w],G=u[(S+2)%5+5*w];A.high=H.high^~L.high&G.high,A.low=H.low^~L.low&G.low}var A=d[0],P=m[$];A.high^=P.high,A.low^=P.low}},_doFinalize:function(){var k=this._data,V=k.words;this._nDataBytes*8;var d=k.sigBytes*8,p=this.blockSize*32;V[d>>>5]|=1<<24-d%32,V[(r.ceil((d+1)/p)*p>>>5)-1]|=128,k.sigBytes=V.length*4,this._process();for(var f=this._state,C=this.cfg.outputLength/8,b=C/8,A=[],$=0;$<b;$++){var S=f[$],B=S.high,N=S.low;B=(B<<8|B>>>24)&16711935|(B<<24|B>>>8)&4278255360,N=(N<<8|N>>>24)&16711935|(N<<24|N>>>8)&4278255360,A.push(N),A.push(B)}return new E.init(A,C)},clone:function(){for(var k=c.clone.call(this),V=k._state=this._state.slice(0),d=0;d<25;d++)V[d]=V[d].clone();return k}});n.SHA3=c._createHelper(y),n.HmacSHA3=c._createHmacHelper(y)}(Math),o.SHA3})}(bt)),bt.exports}var yt={exports:{}},Co;function Ic(){return Co||(Co=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){/** @preserve
27
- (c) 2012 by Cédric Mesnil. All rights reserved.
26
+ }`,class:"code-textarea code-textarea-full"},null,40,Ui)]),e.createElementVNode("div",Ri,[e.createElementVNode("div",Li,[a[7]||(a[7]=e.createElementVNode("label",null,"组件预览",-1)),e.createElementVNode("div",Wi,[(o=t.value)!=null&&o.success?(e.openBlock(),e.createElementBlock("span",Fi,"✓ 执行成功")):(u=t.value)!=null&&u.error?(e.openBlock(),e.createElementBlock("span",ji,"✗ 执行失败")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Gi,[t.value?t.value.error?(e.openBlock(),e.createElementBlock("div",Ji,[a[8]||(a[8]=e.createElementVNode("div",{class:"error-title"},"错误信息:",-1)),e.createElementVNode("div",qi,e.toDisplayString(t.value.error),1)])):(e.openBlock(),e.createElementBlock("div",Yi,[e.createElementVNode("div",{ref_key:"previewContainer",ref:r,class:"node-preview"},null,512),t.value.logs.length>0?(e.openBlock(),e.createElementBlock("div",Xi,[a[9]||(a[9]=e.createElementVNode("div",{class:"console-title"},"控制台输出:",-1)),e.createElementVNode("div",Ki,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value.logs,(f,b)=>(e.openBlock(),e.createElementBlock("div",{key:b,class:"log-item"},e.toDisplayString(f),1))),128))])])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",Hi,' 点击"测试执行"按钮查看组件预览效果 '))])])]),e.createElementVNode("div",Zi,[e.createElementVNode("button",{class:"btn-cancel",onClick:a[2]||(a[2]=f=>g.$emit("close"))},"取消"),e.createElementVNode("button",{class:"btn-confirm",onClick:a[3]||(a[3]=f=>g.$emit("save"))},"确定")])])])}}}),[["__scopeId","data-v-add3567b"]]),er={class:"dialog-container"},tr={class:"dialog-header"},or={class:"dialog-body"},nr={key:0,class:"empty-state"},lr={key:1,class:"workflow-list"},ar=["onClick"],sr={class:"workflow-info"},ir={class:"workflow-name"},rr={class:"workflow-meta"},dr={class:"workflow-id"},cr={class:"workflow-date"},pr={class:"workflow-actions"},mr=["onClick"],ur={class:"dialog-footer"},gr=["disabled"],fr=H(e.defineComponent({__name:"WorkflowSelectorDialog",emits:["close","select"],setup(i,{emit:l}){const n=l,r=e.ref([]),t=e.ref(null),s=()=>{try{const a=localStorage.getItem("saved-workflows");a&&(r.value=JSON.parse(a))}catch(a){console.error("加载流程列表失败:",a)}},d=a=>{t.value=a},c=a=>{console.log("预览流程:",a)},p=()=>{t.value&&n("select",t.value)},g=a=>new Date(a).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"});return e.onMounted(()=>{s()}),(a,o)=>(e.openBlock(),e.createElementBlock("div",{class:"dialog-overlay",onClick:o[2]||(o[2]=e.withModifiers(u=>a.$emit("close"),["self"]))},[e.createElementVNode("div",er,[e.createElementVNode("div",tr,[o[3]||(o[3]=e.createElementVNode("h3",null,"选择流程",-1)),e.createElementVNode("button",{class:"btn-close",onClick:o[0]||(o[0]=u=>a.$emit("close"))},"×")]),e.createElementVNode("div",or,[r.value.length===0?(e.openBlock(),e.createElementBlock("div",nr,[...o[4]||(o[4]=[e.createElementVNode("p",null,"暂无已保存的流程",-1),e.createElementVNode("p",{class:"hint"},"请先在流程编辑器中创建并保存流程",-1)])])):(e.openBlock(),e.createElementBlock("div",lr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,u=>{var f;return e.openBlock(),e.createElementBlock("div",{key:u.id,class:e.normalizeClass(["workflow-item",{selected:((f=t.value)==null?void 0:f.id)===u.id}]),onClick:b=>d(u)},[e.createElementVNode("div",sr,[e.createElementVNode("div",ir,e.toDisplayString(u.name),1),e.createElementVNode("div",rr,[e.createElementVNode("span",dr,"ID: "+e.toDisplayString(u.id),1),e.createElementVNode("span",cr,e.toDisplayString(g(u.createdAt)),1)])]),e.createElementVNode("div",pr,[e.createElementVNode("button",{class:"btn-icon",onClick:e.withModifiers(b=>c(u),["stop"]),title:"预览"}," 👁️ ",8,mr)])],10,ar)}),128))]))]),e.createElementVNode("div",ur,[e.createElementVNode("button",{class:"btn-secondary",onClick:o[1]||(o[1]=u=>a.$emit("close"))},"取消"),e.createElementVNode("button",{class:"btn-primary",disabled:!t.value,onClick:p}," 确定 ",8,gr)])])]))}}),[["__scopeId","data-v-c9a88e33"]]),de={SCADA_EDITOR_DATA:"scada_editor_data",SCADA_PREVIEW_DATA:"scada_preview_data"},Me=(i,l)=>{try{const n=JSON.stringify(l);return sessionStorage.setItem(i,n),!0}catch(n){return console.error(`保存到 sessionStorage 失败 [${i}]:`,n),!1}},Qe=i=>{try{const l=sessionStorage.getItem(i);return l?JSON.parse(l):null}catch(l){return console.error(`从 sessionStorage 读取失败 [${i}]:`,l),null}},et=i=>{try{sessionStorage.removeItem(i)}catch(l){console.error(`从 sessionStorage 删除失败 [${i}]:`,l)}},Er=(i,l)=>{try{const n=JSON.stringify(l);return localStorage.setItem(i,n),!0}catch(n){return console.error(`保存到 localStorage 失败 [${i}]:`,n),!1}},yr=i=>{try{const l=localStorage.getItem(i);return l?JSON.parse(l):null}catch(l){return console.error(`从 localStorage 读取失败 [${i}]:`,l),null}},br=i=>{try{localStorage.removeItem(i)}catch(l){console.error(`从 localStorage 删除失败 [${i}]:`,l)}},tt=(i,l)=>{try{const n=JSON.stringify(i,null,2),r=new Blob([n],{type:"application/json;charset=utf-8"}),t=URL.createObjectURL(r),s=document.createElement("a");return s.href=t,s.download=`${l}.json`,s.click(),URL.revokeObjectURL(t),!0}catch(n){return console.error("导出 JSON 文件失败:",n),!1}},ze=(i="")=>{const l=Date.now(),n=Math.random().toString(36).substring(2,11);return i?`${i}_${l}_${n}`:`${l}_${n}`},ot=()=>ze("evt"),Nr=()=>ze("node"),Oe=(i,l="YYYY-MM-DD HH:mm:ss")=>{const n=new Date(i),r=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),s=String(n.getDate()).padStart(2,"0"),d=String(n.getHours()).padStart(2,"0"),c=String(n.getMinutes()).padStart(2,"0"),p=String(n.getSeconds()).padStart(2,"0");return l.replace("YYYY",String(r)).replace("MM",t).replace("DD",s).replace("HH",d).replace("mm",c).replace("ss",p)},Ue=()=>Date.now(),nt=(i=50,l=50,n=400,r=300)=>({x:Math.random()*n+i,y:Math.random()*r+l}),Y=(i,l="info",n=3e3)=>{const r=document.createElement("div");r.className=`scada-toast scada-toast-${l}`,r.textContent=i,Object.assign(r.style,{position:"fixed",top:"20px",left:"50%",transform:"translateX(-50%)",padding:"12px 24px",borderRadius:"6px",fontSize:"14px",fontWeight:"500",zIndex:"10000",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",maxWidth:"80%",wordBreak:"break-word",opacity:"0",transition:"opacity 0.3s ease, transform 0.3s ease"});const s={success:{bg:"#10b981",text:"#fff"},error:{bg:"#ef4444",text:"#fff"},warning:{bg:"#f59e0b",text:"#fff"},info:{bg:"#3b82f6",text:"#fff"}}[l];r.style.backgroundColor=s.bg,r.style.color=s.text,document.body.appendChild(r),requestAnimationFrame(()=>{r.style.opacity="1"}),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>{r.parentNode&&document.body.removeChild(r)},300)},n)},hr={class:"property-panel"},Vr={key:1,class:"properties"},kr={key:2,class:"properties"},Cr={class:"tabs"},$r={class:"tab-content"},vr={class:"tab-pane"},wr={class:"property-section"},Br={key:0,class:"empty-hint"},Sr={class:"event-list"},_r={class:"tab-pane"},xr={class:"property-section"},Ir={key:0,class:"empty-hint"},Dr={class:"event-list"},Re=H(e.defineComponent({__name:"PropertyPanel",props:{selectedNode:{},selectedEdge:{}},emits:["updateNode","deleteNode","updateEdge","deleteEdge"],setup(i,{emit:l}){const n=i,r=l,t=e.ref("basic"),s=e.ref([]),d=e.ref(new Set),c=e.ref([]),p=e.ref(new Set);e.watch(()=>n.selectedNode,C=>{var v,x;if((v=C==null?void 0:C.data)!=null&&v.events){const P=JSON.parse(JSON.stringify(C.data.events));P.forEach(U=>{U.id||(U.id=B())}),s.value=P}else s.value=[];d.value.clear(),(x=C==null?void 0:C.data)!=null&&x.bindings?c.value=JSON.parse(JSON.stringify(C.data.bindings)):c.value=[],p.value.clear()},{immediate:!0});const g=e.ref(0),a=e.ref(0);let o=null,u={x:0,y:0},f={width:0,height:0};e.watch(()=>n.selectedNode,C=>{if(o&&(clearInterval(o),o=null),C){const v=C.getPosition(),x=C.getSize();v&&typeof v.x=="number"&&typeof v.y=="number"?u=v:(u={x:0,y:0},console.warn("节点位置数据异常:",v)),x&&typeof x.width=="number"&&typeof x.height=="number"?f=x:(f={width:0,height:0},console.warn("节点尺寸数据异常:",x)),o=setInterval(()=>{if(n.selectedNode){const P=n.selectedNode.getPosition(),U=n.selectedNode.getSize();P&&typeof P.x=="number"&&typeof P.y=="number"&&(P.x!==u.x||P.y!==u.y)&&(u=P,g.value++),U&&typeof U.width=="number"&&typeof U.height=="number"&&(U.width!==f.width||U.height!==f.height)&&(f=U,a.value++)}},50)}}),e.onUnmounted(()=>{o&&clearInterval(o)});const b=e.computed(()=>{var v;return g.value,((v=n.selectedNode)==null?void 0:v.getPosition())||{x:0,y:0}}),S=e.computed(()=>{var v;return a.value,((v=n.selectedNode)==null?void 0:v.getSize())||{width:0,height:0}}),F=e.computed(()=>{var v;return((v=n.selectedNode)==null?void 0:v.getAttrs())||{}}),z=(C,v)=>{const x=Number(v.target.value),P=n.selectedNode.getPosition(),U=C==="x"?{x,y:P.y}:{x:P.x,y:x};r("updateNode",{position:U})},h=(C,v)=>{const x=Number(v.target.value),P=n.selectedNode.getSize(),U=C==="width"?{width:x,height:P.height}:{width:P.width,height:x};r("updateNode",{size:U})},N=C=>{const v=C.target.value;r("updateNode",{attrs:{text:{text:v},label:{text:v}}})},E=C=>{const v=C.target.value;r("updateNode",{attrs:{body:{fill:v}}})},V=C=>{const v=C.target.value;r("updateNode",{attrs:{body:{stroke:v}}})},y=C=>{const v=Number(C.target.value);r("updateNode",{attrs:{body:{strokeWidth:v}}})},D=C=>{const v=Number(C.target.value);r("updateNode",{attrs:{body:{opacity:v}}})},O=C=>{const v=C.target.value,x={...n.selectedNode.data,componentName:v};r("updateNode",{data:x})},A=(C,v)=>{if(!n.selectedNode)return;const x=C.split(".");if(x[0]==="attrs"){const P=x.slice(1).join("/");r("updateNode",{attrs:{[P]:v}})}else if(x[0]==="data"){const P=JSON.parse(JSON.stringify(n.selectedNode.data||{}));let U=P;for(let ne=1;ne<x.length-1;ne++){const je=x[ne];U[je]||(U[je]={}),U=U[je]}U[x[x.length-1]]=v,r("updateNode",{data:P})}},w=C=>{if(!n.selectedNode)return;const v={...n.selectedNode.data,dataSource:C};r("updateNode",{data:v})},B=ot,T=()=>{const C={id:B(),name:"",type:"click",conditionType:"always",action:"attributeChange",params:{}};s.value.push(C),le()},K=C=>{s.value.splice(C,1),le()},te=(C,v,x)=>{const P=x.target.value;s.value[C][v]=P,le()},ce=(C,v,x)=>{const U=x.target.value;s.value[C].condition||(s.value[C].condition={}),s.value[C].condition[v]=U,le()},Ne=(C,v,x)=>{const U=x.target.value;s.value[C].params||(s.value[C].params={}),s.value[C].params[v]=U,le()},le=()=>{s.value.forEach(v=>{v.id||(v.id=B())});const C={...n.selectedNode.data,events:s.value};r("updateNode",{data:C})},he=C=>{d.value.has(C)?d.value.delete(C):d.value.add(C)},Ve=C=>d.value.has(C),ke=()=>{const C={devicePointId:"",targetProperty:"",enabled:!0};c.value.push(C),$()},m=C=>{c.value.splice(C,1),$()},k=(C,v,x)=>{const U=x.target.value;c.value[C][v]=U,$()},$=()=>{const C={...n.selectedNode.data,bindings:c.value};r("updateNode",{data:C})},_=C=>{p.value.has(C)?p.value.delete(C):p.value.add(C)},j=C=>p.value.has(C),q=e.ref(!1),G=e.ref(-1),L=e.ref([]),M=C=>{var x;G.value=C;const v=s.value[C];(x=v.params)!=null&&x.attributeGroups&&Array.isArray(v.params.attributeGroups)?L.value=JSON.parse(JSON.stringify(v.params.attributeGroups)):L.value=[{target:"current",property:"",value:""}],q.value=!0},W=()=>{q.value=!1},J=()=>{L.value.push({target:"current",property:"",value:""})},ee=C=>{L.value.splice(C,1)},X=(C,v,x)=>{L.value[C][v]=x},pe=()=>{for(const C of L.value)if(!C.property){alert("请为每组配置选择目标属性");return}s.value[G.value].params||(s.value[G.value].params={}),s.value[G.value].params.attributeGroups=JSON.parse(JSON.stringify(L.value)),le(),W()},ye=e.ref(!1),Ce=e.ref(""),$e=e.ref(-1),jc=C=>{var x;$e.value=C;const v=s.value[C];Ce.value=((x=v.params)==null?void 0:x.code)||"",ye.value=!0},dt=()=>{ye.value=!1},Gc=()=>{s.value[$e.value].params||(s.value[$e.value].params={}),s.value[$e.value].params.code=Ce.value,le(),dt()},We=e.ref(!1),ve=e.ref(-1),Hc=C=>{ve.value=C,We.value=!0},ct=()=>{We.value=!1},Jc=C=>{s.value[ve.value].params||(s.value[ve.value].params={});const v=s.value[ve.value].params;v.processId=C.id,v.processName=C.name,v.processData=C.data,le(),ct()},Fe=()=>{var v;if(!n.selectedNode)return[];const C=[];return(v=n.selectedNode.data)!=null&&v.props&&Array.isArray(n.selectedNode.data.props)&&n.selectedNode.data.props.forEach(x=>{x.bindable!==!1&&C.push({key:x.key,label:x.label,type:x.type||"text"})}),C},qc=C=>{r("updateEdge",C)},Yc=()=>{r("deleteEdge")};return(C,v)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",hr,[!i.selectedNode&&!i.selectedEdge?(e.openBlock(),e.createBlock(_e,{key:0})):i.selectedEdge?(e.openBlock(),e.createElementBlock("div",Vr,[v[5]||(v[5]=e.createElementVNode("h3",{class:"panel-title"},"连线属性",-1)),e.createVNode(ca,{"selected-edge":i.selectedEdge,onUpdateEdge:qc,onDeleteEdge:Yc},null,8,["selected-edge"])])):i.selectedNode?(e.openBlock(),e.createElementBlock("div",kr,[v[10]||(v[10]=e.createElementVNode("h3",{class:"panel-title"},"节点属性",-1)),e.createElementVNode("div",Cr,[e.createElementVNode("button",{class:e.normalizeClass(["tab-btn",{active:t.value==="basic"}]),onClick:v[0]||(v[0]=x=>t.value="basic")}," 基础 ",2),e.createElementVNode("button",{class:e.normalizeClass(["tab-btn",{active:t.value==="data"}]),onClick:v[1]||(v[1]=x=>t.value="data")}," 数据 ",2),e.createElementVNode("button",{class:e.normalizeClass(["tab-btn",{active:t.value==="binding"}]),onClick:v[2]||(v[2]=x=>t.value="binding")}," 绑定 ",2),e.createElementVNode("button",{class:e.normalizeClass(["tab-btn",{active:t.value==="event"}]),onClick:v[3]||(v[3]=x=>t.value="event")}," 事件 ",2)]),e.createElementVNode("div",$r,[e.withDirectives(e.createVNode(xe,{"selected-node":i.selectedNode,"node-position":b.value,"node-size":S.value,"node-attrs":F.value,onUpdatePosition:z,onUpdateSize:h,onUpdateLabel:N,onUpdateFill:E,onUpdateStroke:V,onUpdateStrokeWidth:y,onUpdateOpacity:D,onUpdateComponentName:O,onUpdateDynamicProp:A},null,8,["selected-node","node-position","node-size","node-attrs"]),[[e.vShow,t.value==="basic"]]),e.withDirectives(e.createVNode(Tl,{"selected-node":i.selectedNode,onUpdateDataSource:w},null,8,["selected-node"]),[[e.vShow,t.value==="data"]]),e.withDirectives(e.createElementVNode("div",vr,[e.createElementVNode("div",wr,[e.createElementVNode("div",{class:"section-header"},[v[6]||(v[6]=e.createElementVNode("h4",null,"节点事件",-1)),e.createElementVNode("button",{class:"btn-add",onClick:T},"+ 添加事件")]),s.value.length===0?(e.openBlock(),e.createElementBlock("div",Br,[...v[7]||(v[7]=[e.createElementVNode("span",null,"暂无事件,点击上方按钮添加",-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Sr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,(x,P)=>(e.openBlock(),e.createBlock(Ie,{key:P,event:x,index:P,"is-collapsed":Ve(P),"node-properties":Fe(),onToggleCollapse:U=>he(P),onRemove:U=>K(P),onUpdateField:(U,ne)=>te(P,U,ne),onUpdateCondition:(U,ne)=>ce(P,U,ne),onUpdateParams:(U,ne)=>Ne(P,U,ne),onOpenAttributeConfig:U=>M(P),onOpenCustomCode:U=>jc(P),onOpenWorkflowSelector:U=>Hc(P)},null,8,["event","index","is-collapsed","node-properties","onToggleCollapse","onRemove","onUpdateField","onUpdateCondition","onUpdateParams","onOpenAttributeConfig","onOpenCustomCode","onOpenWorkflowSelector"]))),128))])])],512),[[e.vShow,t.value==="event"]]),e.withDirectives(e.createElementVNode("div",_r,[e.createElementVNode("div",xr,[e.createElementVNode("div",{class:"section-header"},[v[8]||(v[8]=e.createElementVNode("h4",null,"数据绑定",-1)),e.createElementVNode("button",{class:"btn-add",onClick:ke},"+ 添加绑定")]),c.value.length===0?(e.openBlock(),e.createElementBlock("div",Ir,[...v[9]||(v[9]=[e.createElementVNode("span",null,"暂无绑定,点击上方按钮添加",-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Dr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(x,P)=>(e.openBlock(),e.createBlock(Te,{key:P,binding:x,index:P,"is-collapsed":j(P),"node-properties":Fe(),"event-list":s.value,onToggleCollapse:U=>_(P),onRemove:U=>m(P),onUpdateField:(U,ne)=>k(P,U,ne)},null,8,["binding","index","is-collapsed","node-properties","event-list","onToggleCollapse","onRemove","onUpdateField"]))),128))])])],512),[[e.vShow,t.value==="binding"]])])])):e.createCommentVNode("",!0)]),q.value?(e.openBlock(),e.createBlock(Pe,{key:0,"attribute-groups":L.value,"node-properties":Fe(),onClose:W,onSave:pe,onAddGroup:J,onRemoveGroup:ee,onUpdateGroup:X},null,8,["attribute-groups","node-properties"])):e.createCommentVNode("",!0),ye.value?(e.openBlock(),e.createBlock(Ae,{key:1,code:Ce.value,"onUpdate:code":v[4]||(v[4]=x=>Ce.value=x),"selected-node":i.selectedNode,onClose:dt,onSave:Gc},null,8,["code","selected-node"])):e.createCommentVNode("",!0),We.value?(e.openBlock(),e.createBlock(fr,{key:2,onClose:ct,onSelect:Jc})):e.createCommentVNode("",!0)],64))}}),[["__scopeId","data-v-7d3281c0"]]);function Le(i){const l=i.replace(/-/g,"+").replace(/_/g,"/"),n=l.length%4?"=".repeat(4-l.length%4):"",r=l+n,t=(typeof atob<"u"?atob:d=>Buffer.from(d,"base64").toString("binary"))(r),s=new Uint8Array(t.length);for(let d=0;d<t.length;d++)s[d]=t.charCodeAt(d);return s}function lt(i){const l=new ArrayBuffer(i.byteLength);return new Uint8Array(l).set(i),l}function Tr(i){const l=i.replace("-----BEGIN PUBLIC KEY-----","").replace("-----END PUBLIC KEY-----","").replace(/\s+/g,""),n=(typeof atob<"u"?atob:t=>Buffer.from(t,"base64").toString("binary"))(l),r=new Uint8Array(n.length);for(let t=0;t<n.length;t++)r[t]=n.charCodeAt(t);return r.buffer}async function Pr(i){const l=Tr(i);return await crypto.subtle.importKey("spki",l,{name:"ECDSA",namedCurve:"P-256"},!1,["verify"])}async function Ar(i,l){try{const[n,r]=i.split(".");if(!n||!r)return!1;const t=await Pr(l),s=Le(n),d=Le(r),c=lt(s),p=lt(d);return await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},t,p,c)}catch{return!1}}async function Mr(i,l){const n=await Ar(i,l);if(!n)return null;const r=i.split(".")[0],t=Le(r),s=new TextDecoder().decode(t),d=JSON.parse(s),c=d.expiryDate?new Date().getTime()<=new Date(d.expiryDate).getTime():!0;return{company:d.company||"未知",expiryDate:d.expiryDate,isValid:!!(n&&c)}}const zr={key:0,class:"scada-footer"},Or={key:1,class:"scada-footer"},Ur={class:"footer-content"},Rr={class:"footer-left"},Lr={class:"copyright",style:{color:"#94a3b8 !important"}},Wr={key:0,class:"divider",style:{color:"#475569 !important"}},Fr={key:1,class:"license",style:{color:"#94a3b8 !important"}},jr={key:0,class:"footer-right"},Gr={class:"text",style:{color:"#94a3b8 !important"}},Hr={key:2,class:"scada-footer"},Jr={class:"footer-content"},qr={class:"footer-left"},Yr={class:"authorized-text",style:{color:"#10b981 !important"}},Xr={class:"footer-right"},Kr={key:0,class:"expiry-text",style:{color:"#94a3b8 !important"}},Zr={key:1,class:"expiry-text",style:{color:"#94a3b8 !important"}},Qr=H(e.defineComponent({__name:"Footer",props:{authCode:{default:""},publicKeyPem:{default:void 0},customFooter:{default:void 0}},setup(i){const l=i,n=e.ref(null),r=e.ref(!1);e.watch(()=>[l.authCode,l.publicKeyPem],async()=>{if(!l.authCode||!l.publicKeyPem){r.value=!1,n.value=null;return}const s=await Mr(l.authCode,l.publicKeyPem);r.value=!!(s!=null&&s.isValid),n.value=s||null},{immediate:!0});const t=e.computed(()=>r.value);return(s,d)=>{var c,p;return t.value?i.customFooter?(e.openBlock(),e.createElementBlock("footer",Or,[e.createElementVNode("div",Ur,[e.createElementVNode("div",Rr,[e.createElementVNode("span",Lr,e.toDisplayString(i.customFooter.copyright),1),i.customFooter.license?(e.openBlock(),e.createElementBlock("span",Wr,"|")):e.createCommentVNode("",!0),i.customFooter.license?(e.openBlock(),e.createElementBlock("span",Fr,e.toDisplayString(i.customFooter.license),1)):e.createCommentVNode("",!0)]),i.customFooter.contact?(e.openBlock(),e.createElementBlock("div",jr,[e.createElementVNode("span",Gr,e.toDisplayString(i.customFooter.contact),1)])):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("footer",Hr,[e.createElementVNode("div",Jr,[e.createElementVNode("div",qr,[d[1]||(d[1]=e.createElementVNode("span",{class:"authorized-icon"},"✅",-1)),e.createElementVNode("span",Yr,"已授权: "+e.toDisplayString(((c=n.value)==null?void 0:c.company)||"未知"),1)]),e.createElementVNode("div",Xr,[(p=n.value)!=null&&p.expiryDate?(e.openBlock(),e.createElementBlock("span",Kr," 📅 有效期至: "+e.toDisplayString(n.value.expiryDate),1)):(e.openBlock(),e.createElementBlock("span",Zr," ∞ 永久授权 "))])])])):(e.openBlock(),e.createElementBlock("footer",zr,[...d[0]||(d[0]=[e.createStaticVNode('<div class="footer-content" data-v-7fd5ce26><div class="footer-left" data-v-7fd5ce26><span class="copyright" style="color:#94a3b8 !important;" data-v-7fd5ce26>© 2025 leoncheng</span><span class="divider" style="color:#475569 !important;" data-v-7fd5ce26>|</span><span class="license" style="color:#94a3b8 !important;" data-v-7fd5ce26>仅供学习研究使用,禁止商业用途</span></div><div class="footer-right" data-v-7fd5ce26><div class="contact-item" data-v-7fd5ce26><span class="icon" data-v-7fd5ce26>📧</span><span class="text" style="color:#94a3b8 !important;" data-v-7fd5ce26>nywqs@outlook.com</span></div><span class="divider" style="color:#475569 !important;" data-v-7fd5ce26>|</span><div class="contact-item" data-v-7fd5ce26><span class="icon" data-v-7fd5ce26>📱</span><span class="text" style="color:#94a3b8 !important;" data-v-7fd5ce26>18637762001</span></div></div></div>',1)])]))}}}),[["__scopeId","data-v-7fd5ce26"]]);var ae=(i=>(i.START="start",i.END="end",i.GET_PROPERTY="getProperty",i.SET_PROPERTY="setProperty",i.CONDITION="condition",i.HTTP_REQUEST="httpRequest",i.CUSTOM_CODE="customCode",i.TIMER="timer",i.CLEAR_TIMER="clearTimer",i))(ae||{});const ed={class:"dialog-body"},td={class:"search-box"},od={class:"element-list"},nd=["onClick"],ld={class:"element-icon"},ad={class:"element-info"},sd={class:"element-name"},id={class:"element-type"},rd={key:0,class:"element-check"},dd={key:0,class:"empty-state"},cd={class:"dialog-footer"},pd=["disabled"],at=H(e.defineComponent({__name:"ElementSelector",props:{visible:{type:Boolean},elements:{default:()=>[]}},emits:["close","select"],setup(i,{emit:l}){const n=i,r=l,t=e.ref(""),s=e.ref(null),d=e.computed(()=>{if(!t.value)return n.elements;const a=t.value.toLowerCase();return n.elements.filter(o=>o.name.toLowerCase().includes(a)||o.id.toLowerCase().includes(a)||o.type.toLowerCase().includes(a))}),c=a=>{s.value=a},p=()=>{t.value="",s.value=null,r("close")},g=()=>{s.value&&(r("select",s.value),p())};return(a,o)=>i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"element-selector-overlay",onClick:p},[e.createElementVNode("div",{class:"element-selector-dialog",onClick:o[1]||(o[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",{class:"dialog-header"},[o[2]||(o[2]=e.createElementVNode("h3",null,"选择图元",-1)),e.createElementVNode("button",{class:"btn-close",onClick:p},"×")]),e.createElementVNode("div",ed,[e.createElementVNode("div",td,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":o[0]||(o[0]=u=>t.value=u),type:"text",placeholder:"搜索图元名称或ID..."},null,512),[[e.vModelText,t.value]])]),e.createElementVNode("div",od,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,u=>{var f,b;return e.openBlock(),e.createElementBlock("div",{key:u.id,class:e.normalizeClass(["element-item",{active:((f=s.value)==null?void 0:f.id)===u.id}]),onClick:S=>c(u)},[e.createElementVNode("div",ld,e.toDisplayString(u.icon),1),e.createElementVNode("div",ad,[e.createElementVNode("div",sd,e.toDisplayString(u.name),1),e.createElementVNode("div",id,e.toDisplayString(u.type),1)]),((b=s.value)==null?void 0:b.id)===u.id?(e.openBlock(),e.createElementBlock("div",rd," ✓ ")):e.createCommentVNode("",!0)],10,nd)}),128)),d.value.length===0?(e.openBlock(),e.createElementBlock("div",dd,[...o[3]||(o[3]=[e.createElementVNode("p",null,"未找到图元",-1),e.createElementVNode("p",{class:"empty-hint"},"请尝试其他搜索关键词",-1)])])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",cd,[e.createElementVNode("button",{class:"btn-secondary",onClick:p},"取消"),e.createElementVNode("button",{class:"btn-primary",disabled:!s.value,onClick:g}," 确定 ",8,pd)])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-882704dd"]]),md={class:"node-config"},ud={class:"config-group"},gd={class:"element-selector"},fd={class:"config-group"},Ed=["disabled"],yd=["value"],bd=H(e.defineComponent({__name:"GetPropertyConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(i,{emit:l}){const n=i,r=l,t=e.reactive({elementId:n.modelValue.elementId||"",propertyName:n.modelValue.propertyName||""}),s=e.ref(""),d=e.ref(!1),c=e.ref([]),p=e.inject("canvasElementService"),g=e.computed(()=>{if(!t.elementId)return[];const f=c.value.find(b=>b.id===t.elementId);return(f==null?void 0:f.properties)||[]}),a=()=>{r("update:modelValue",{...t})},o=()=>{p&&(c.value=p.getElements()),d.value=!0},u=f=>{t.elementId=f.id,s.value=f.name,t.propertyName="",a()};return e.onMounted(()=>{if(p&&(c.value=p.getElements()),t.elementId){const f=c.value.find(b=>b.id===t.elementId);f&&(s.value=f.name)}}),(f,b)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",md,[e.createElementVNode("div",ud,[b[3]||(b[3]=e.createElementVNode("label",null,"图元选择",-1)),e.createElementVNode("div",gd,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[0]||(b[0]=S=>s.value=S),type:"text",placeholder:"点击选择按钮从画布中选择图元",readonly:""},null,512),[[e.vModelText,s.value]]),e.createElementVNode("button",{class:"btn-select",onClick:o}," 选择图元 ")])]),e.createElementVNode("div",fd,[b[5]||(b[5]=e.createElementVNode("label",null,"属性选择",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":b[1]||(b[1]=S=>t.propertyName=S),onChange:a,disabled:!t.elementId},[b[4]||(b[4]=e.createElementVNode("option",{value:""},"请先选择图元",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,S=>(e.openBlock(),e.createElementBlock("option",{key:S.key,value:S.key},e.toDisplayString(S.label),9,yd))),128))],40,Ed),[[e.vModelSelect,t.propertyName]])])]),e.createVNode(at,{visible:d.value,elements:c.value,onClose:b[2]||(b[2]=S=>d.value=!1),onSelect:u},null,8,["visible","elements"])],64))}}),[["__scopeId","data-v-fa65eb56"]]),Nd={class:"node-config"},hd={class:"config-group"},Vd={class:"element-selector"},kd={class:"config-group"},Cd=["disabled"],$d=["value"],vd={class:"config-group"},wd=H(e.defineComponent({__name:"SetPropertyConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(i,{emit:l}){const n=i,r=l,t=e.reactive({elementId:n.modelValue.elementId||"",propertyName:n.modelValue.propertyName||"",value:n.modelValue.value||""}),s=e.ref(""),d=e.ref(!1),c=e.ref([]),p=e.inject("canvasElementService"),g=e.computed(()=>{if(!t.elementId)return[];const f=c.value.find(b=>b.id===t.elementId);return(f==null?void 0:f.properties)||[]}),a=()=>{r("update:modelValue",{...t})},o=()=>{p&&(c.value=p.getElements()),d.value=!0},u=f=>{t.elementId=f.id,s.value=f.name,t.propertyName="",a()};return e.onMounted(()=>{if(p&&(c.value=p.getElements()),t.elementId){const f=c.value.find(b=>b.id===t.elementId);f&&(s.value=f.name)}}),(f,b)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",Nd,[e.createElementVNode("div",hd,[b[4]||(b[4]=e.createElementVNode("label",null,"图元选择",-1)),e.createElementVNode("div",Vd,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[0]||(b[0]=S=>s.value=S),type:"text",placeholder:"点击选择按钮从画布中选择图元",readonly:""},null,512),[[e.vModelText,s.value]]),e.createElementVNode("button",{class:"btn-select",onClick:o}," 选择图元 ")])]),e.createElementVNode("div",kd,[b[6]||(b[6]=e.createElementVNode("label",null,"属性选择",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":b[1]||(b[1]=S=>t.propertyName=S),onChange:a,disabled:!t.elementId},[b[5]||(b[5]=e.createElementVNode("option",{value:""},"请先选择图元",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,S=>(e.openBlock(),e.createElementBlock("option",{key:S.key,value:S.key},e.toDisplayString(S.label),9,$d))),128))],40,Cd),[[e.vModelSelect,t.propertyName]])]),e.createElementVNode("div",vd,[b[7]||(b[7]=e.createElementVNode("label",null,"属性值",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[2]||(b[2]=S=>t.value=S),type:"text",placeholder:"请输入属性值",onInput:a},null,544),[[e.vModelText,t.value]])])]),e.createVNode(at,{visible:d.value,elements:c.value,onClose:b[3]||(b[3]=S=>d.value=!1),onSelect:u},null,8,["visible","elements"])],64))}}),[["__scopeId","data-v-42e029d4"]]),Bd={class:"node-config"},Sd={class:"config-group"},_d={class:"config-group"},xd={class:"branches-section"},Id={class:"branch-list"},Dd={class:"branch-header"},Td={class:"branch-number"},Pd=["onClick"],Ad={key:0,class:"branch-config"},Md={class:"config-row"},zd=["onUpdate:modelValue"],Od={key:0,class:"config-row"},Ud=["onUpdate:modelValue"],Rd={key:1,class:"config-row"},Ld=["onUpdate:modelValue","type"],Wd={key:1,class:"default-branch-label"},Fd=H(e.defineComponent({__name:"ConditionConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(i,{emit:l}){const n=i,r=l,t=()=>`branch_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,s=()=>n.modelValue.branches&&n.modelValue.branches.length>0?n.modelValue.branches:(n.modelValue.dataType||"boolean")==="boolean"?[{id:t(),label:"True",value:!0},{id:t(),label:"False",value:!1,isDefault:!0}]:[{id:t(),label:"分支1",operator:"eq",value:""},{id:t(),label:"默认",isDefault:!0}],d=e.reactive({sourceNodeId:n.modelValue.sourceNodeId||"prev",dataType:n.modelValue.dataType||"boolean",branches:s()}),c=()=>{r("update:modelValue",{...d})},p=()=>{d.dataType==="boolean"?d.branches=[{id:t(),label:"True",value:!0},{id:t(),label:"False",value:!1,isDefault:!0}]:d.branches=[{id:t(),label:"分支1",operator:"eq",value:""},{id:t(),label:"默认",isDefault:!0}],c()},g=()=>{const o={id:t(),label:`分支${d.branches.length}`,operator:"eq",value:""},u=d.branches.findIndex(f=>f.isDefault);u>-1?d.branches.splice(u,0,o):d.branches.push(o),c()},a=o=>{d.branches.length>2&&(d.branches.splice(o,1),c())};return(o,u)=>(e.openBlock(),e.createElementBlock("div",Bd,[e.createElementVNode("div",Sd,[u[3]||(u[3]=e.createElementVNode("label",null,"数据来源节点",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":u[0]||(u[0]=f=>d.sourceNodeId=f),onChange:c},[...u[2]||(u[2]=[e.createElementVNode("option",{value:""},"请选择数据来源节点",-1),e.createElementVNode("option",{value:"prev"},"上一个节点",-1)])],544),[[e.vModelSelect,d.sourceNodeId]])]),e.createElementVNode("div",_d,[u[5]||(u[5]=e.createElementVNode("label",null,"数据类型",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":u[1]||(u[1]=f=>d.dataType=f),onChange:p},[...u[4]||(u[4]=[e.createElementVNode("option",{value:"boolean"},"布尔类型",-1),e.createElementVNode("option",{value:"number"},"数字类型",-1),e.createElementVNode("option",{value:"string"},"字符串类型",-1),e.createElementVNode("option",{value:"any"},"自定义",-1)])],544),[[e.vModelSelect,d.dataType]])]),e.createElementVNode("div",xd,[e.createElementVNode("div",{class:"section-header"},[u[6]||(u[6]=e.createElementVNode("label",null,"条件分支",-1)),e.createElementVNode("button",{class:"btn-add",onClick:g},"添加分支")]),e.createElementVNode("div",Id,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.branches,(f,b)=>(e.openBlock(),e.createElementBlock("div",{key:f.id,class:"branch-item"},[e.createElementVNode("div",Dd,[e.createElementVNode("span",Td,"分支 "+e.toDisplayString(b+1),1),!f.isDefault&&d.branches&&d.branches.length>1?(e.openBlock(),e.createElementBlock("button",{key:0,class:"btn-remove",onClick:S=>a(b)},"×",8,Pd)):e.createCommentVNode("",!0)]),f.isDefault?(e.openBlock(),e.createElementBlock("div",Wd," 默认分支(其他情况) ")):(e.openBlock(),e.createElementBlock("div",Ad,[e.createElementVNode("div",Md,[u[7]||(u[7]=e.createElementVNode("label",null,"分支标签",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":S=>f.label=S,type:"text",placeholder:"如: >10, =A, True",onInput:c},null,40,zd),[[e.vModelText,f.label]])]),d.dataType!=="boolean"?(e.openBlock(),e.createElementBlock("div",Od,[u[9]||(u[9]=e.createElementVNode("label",null,"运算符",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":S=>f.operator=S,onChange:c},[...u[8]||(u[8]=[e.createStaticVNode('<option value="eq" data-v-15975920>等于 (==)</option><option value="ne" data-v-15975920>不等于 (!=)</option><option value="gt" data-v-15975920>大于 (&gt;)</option><option value="gte" data-v-15975920>大于等于 (&gt;=)</option><option value="lt" data-v-15975920>小于 (&lt;)</option><option value="lte" data-v-15975920>小于等于 (&lt;=)</option><option value="contains" data-v-15975920>包含</option><option value="notContains" data-v-15975920>不包含</option>',8)])],40,Ud),[[e.vModelSelect,f.operator]])])):e.createCommentVNode("",!0),d.dataType!=="boolean"?(e.openBlock(),e.createElementBlock("div",Rd,[u[10]||(u[10]=e.createElementVNode("label",null,"比较值",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":S=>f.value=S,type:d.dataType==="number"?"number":"text",placeholder:"请输入比较值",onInput:c},null,40,Ld),[[e.vModelDynamic,f.value]])])):e.createCommentVNode("",!0)]))]))),128))])])]))}}),[["__scopeId","data-v-15975920"]]),jd={class:"node-config"},Gd={class:"config-group"},Hd={class:"config-group"},Jd={class:"config-group"},qd={class:"config-group"},Yd={class:"config-group"},Xd=H(e.defineComponent({__name:"HttpRequestConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(i,{emit:l}){const n=i,r=l,t=e.reactive({url:n.modelValue.url||"",method:n.modelValue.method||"GET",headers:n.modelValue.headers||{},body:n.modelValue.body||"",outputVariable:n.modelValue.outputVariable||""}),s=e.ref(JSON.stringify(t.headers,null,2)),d=()=>{r("update:modelValue",{...t})},c=()=>{try{t.headers=JSON.parse(s.value),d()}catch{}};return e.watch(()=>n.modelValue.headers,p=>{p&&(s.value=JSON.stringify(p,null,2))}),(p,g)=>(e.openBlock(),e.createElementBlock("div",jd,[e.createElementVNode("div",Gd,[g[5]||(g[5]=e.createElementVNode("label",null,"请求URL",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[0]||(g[0]=a=>t.url=a),type:"text",placeholder:"请输入请求URL",onInput:d},null,544),[[e.vModelText,t.url]])]),e.createElementVNode("div",Hd,[g[7]||(g[7]=e.createElementVNode("label",null,"请求方法",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":g[1]||(g[1]=a=>t.method=a),onChange:d},[...g[6]||(g[6]=[e.createElementVNode("option",{value:"GET"},"GET",-1),e.createElementVNode("option",{value:"POST"},"POST",-1),e.createElementVNode("option",{value:"PUT"},"PUT",-1),e.createElementVNode("option",{value:"DELETE"},"DELETE",-1)])],544),[[e.vModelSelect,t.method]])]),e.createElementVNode("div",Jd,[g[8]||(g[8]=e.createElementVNode("label",null,"请求头 (JSON格式)",-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":g[2]||(g[2]=a=>s.value=a),rows:"3",placeholder:'{"Content-Type": "application/json"}',onInput:c},null,544),[[e.vModelText,s.value]])]),e.createElementVNode("div",qd,[g[9]||(g[9]=e.createElementVNode("label",null,"请求体",-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":g[3]||(g[3]=a=>t.body=a),rows:"4",placeholder:"请输入请求体内容",onInput:d},null,544),[[e.vModelText,t.body]])]),e.createElementVNode("div",Yd,[g[10]||(g[10]=e.createElementVNode("label",null,"输出变量",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[4]||(g[4]=a=>t.outputVariable=a),type:"text",placeholder:"请输入输出变量名",onInput:d},null,544),[[e.vModelText,t.outputVariable]])])]))}}),[["__scopeId","data-v-4c312eea"]]),Kd={class:"node-config"},Zd={class:"config-group"},Qd=H(e.defineComponent({__name:"CustomCodeConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(i,{emit:l}){const n=i,r=l,t=e.reactive({code:n.modelValue.code||""}),s=()=>{r("update:modelValue",{...t})};return(d,c)=>(e.openBlock(),e.createElementBlock("div",Kd,[e.createElementVNode("div",Zd,[c[1]||(c[1]=e.createElementVNode("label",null,"JavaScript代码",-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":c[0]||(c[0]=p=>t.code=p),rows:"10",placeholder:"请输入JavaScript代码",onInput:s},null,544),[[e.vModelText,t.code]])]),c[2]||(c[2]=e.createElementVNode("div",{class:"code-hint"},[e.createElementVNode("p",null,"提示:"),e.createElementVNode("ul",null,[e.createElementVNode("li",null,"可以使用 context 对象访问上下文变量"),e.createElementVNode("li",null,"使用 return 返回结果")])],-1))]))}}),[["__scopeId","data-v-f7115383"]]),ec={class:"node-config"},tc={class:"config-group"},oc={class:"config-group"},nc=H(e.defineComponent({__name:"TimerConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(i,{emit:l}){const n=i,r=l,t=e.reactive({interval:n.modelValue.interval||1e3,unit:n.modelValue.unit||"ms"}),s=()=>{r("update:modelValue",{...t})};return(d,c)=>(e.openBlock(),e.createElementBlock("div",ec,[e.createElementVNode("div",tc,[c[2]||(c[2]=e.createElementVNode("label",null,"时间间隔",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[0]||(c[0]=p=>t.interval=p),type:"number",min:"1",placeholder:"请输入时间间隔",onInput:s},null,544),[[e.vModelText,t.interval,void 0,{number:!0}]])]),e.createElementVNode("div",oc,[c[4]||(c[4]=e.createElementVNode("label",null,"时间单位",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":c[1]||(c[1]=p=>t.unit=p),onChange:s},[...c[3]||(c[3]=[e.createElementVNode("option",{value:"ms"},"毫秒 (ms)",-1),e.createElementVNode("option",{value:"s"},"秒 (s)",-1),e.createElementVNode("option",{value:"m"},"分钟 (m)",-1),e.createElementVNode("option",{value:"h"},"小时 (h)",-1)])],544),[[e.vModelSelect,t.unit]])])]))}}),[["__scopeId","data-v-323381bc"]]),lc={class:"node-config"},ac={class:"config-group"},sc=["value"],ic={key:0,class:"timer-hint warning"},rc={key:1,class:"timer-hint"},dc=H(e.defineComponent({__name:"ClearTimerConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(i,{emit:l}){const n=i,r=l,t=e.reactive({timerId:n.modelValue.timerId||""}),s=e.ref([]),d=e.inject("getGraph"),c=()=>{if(!d)return[];const g=d();if(!g)return[];const a=g.getNodes(),o=[];return a.forEach(u=>{const f=u.getData();if((f==null?void 0:f.nodeType)==="timer"){const b=u.getAttrByPath("label/text")||"定时器";o.push({id:u.id,label:b})}}),o};e.onMounted(()=>{s.value=c()}),e.watch(()=>n.modelValue,()=>{s.value=c()},{deep:!0});const p=()=>{r("update:modelValue",{...t})};return(g,a)=>(e.openBlock(),e.createElementBlock("div",lc,[e.createElementVNode("div",ac,[a[2]||(a[2]=e.createElementVNode("label",null,"选择定时器节点",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":a[0]||(a[0]=o=>t.timerId=o),onChange:p},[a[1]||(a[1]=e.createElementVNode("option",{value:""},"请选择要清除的定时器",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,o=>(e.openBlock(),e.createElementBlock("option",{key:o.id,value:o.id},e.toDisplayString(o.label),9,sc))),128))],544),[[e.vModelSelect,t.timerId]])]),s.value.length===0?(e.openBlock(),e.createElementBlock("div",ic,[...a[3]||(a[3]=[e.createElementVNode("p",null,"提示:当前流程中没有定时器节点",-1)])])):(e.openBlock(),e.createElementBlock("div",rc,[...a[4]||(a[4]=[e.createElementVNode("p",null,"提示:选择要清除的定时器节点",-1)])]))]))}}),[["__scopeId","data-v-d102fb63"]]),cc={[ae.GET_PROPERTY]:bd,[ae.SET_PROPERTY]:wd,[ae.CONDITION]:Fd,[ae.HTTP_REQUEST]:Xd,[ae.CUSTOM_CODE]:Qd,[ae.TIMER]:nc,[ae.CLEAR_TIMER]:dc};function pc(i){return cc[i]||null}const mc={class:"property-panel"},uc={key:0,class:"property-content"},gc={class:"property-group"},fc=["value"],Ec={class:"property-group"},yc=["value"],bc={key:0,class:"divider"},Nc={key:1,class:"property-empty"},hc=H(e.defineComponent({__name:"PropertyPanel",props:{selectedCell:{}},emits:["update:label","update:config"],setup(i,{emit:l}){const n=i,r=l,t=()=>{var a,o,u;return((u=(o=(a=n.selectedCell)==null?void 0:a.cell)==null?void 0:o.model)==null?void 0:u.graph)||null};e.provide("getGraph",t);const s=e.ref({}),d=e.computed(()=>n.selectedCell?pc(n.selectedCell.nodeType):null);e.watch(()=>n.selectedCell,a=>{if(a!=null&&a.cell){const o=a.cell.getData();s.value=(o==null?void 0:o.config)||{}}else s.value={}},{immediate:!0});const c=a=>{const o=a.target;r("update:label",o.value)},p=a=>{var o;if(s.value=a,(o=n.selectedCell)!=null&&o.cell){const u=n.selectedCell.cell.getData()||{};n.selectedCell.cell.setData({...u,config:a}),n.selectedCell.nodeType==="condition"&&a.branches&&g(a.branches)}r("update:config",a)},g=a=>{var A,w;if(!((A=n.selectedCell)!=null&&A.cell))return;const o=n.selectedCell.cell,u=(w=o.model)==null?void 0:w.graph;if(!u)return;const f=[];u.getConnectedEdges(o,{outgoing:!0}).forEach(B=>{const T=B.getSourcePortId(),K=B.getTargetCell(),te=B.getTargetPortId();T&&K&&f.push({sourcePortId:T,targetCell:K,targetPortId:te})});const S=f.length>0?f[0].targetCell:null,F=f.length>0?f[0].targetPortId:"port-in";o.getPorts().forEach(B=>{B.group==="out"&&o.removePort(B.id)});const h=30,N=60,E=Math.max(a.length,1),V=Math.max(N,E*h),y=o.size(),D=o.position(),O=V-y.height;O!==0&&o.position(D.x,D.y-O/2),o.resize(y.width,V),a.forEach((B,T)=>{o.addPort({id:`port-out-${T}`,group:"out",attrs:{circle:{r:5,magnet:!0,stroke:"#34d399",strokeWidth:2,fill:"#1e293b"},portLabel:{text:B.label||`分支${T+1}`,fontSize:10,fill:"#94a3b8"}}})}),setTimeout(()=>{S&&a.forEach((B,T)=>{u.addEdge({source:{cell:o,port:`port-out-${T}`},target:{cell:S,port:F},labels:[{attrs:{label:{text:B.label||`分支${T+1}`,fill:"#e2e8f0",fontSize:12},rect:{fill:"#334155",stroke:"#34d399",strokeWidth:1,rx:4,ry:4}},position:.5}]})})},100)};return(a,o)=>(e.openBlock(),e.createElementBlock("div",mc,[o[4]||(o[4]=e.createElementVNode("h3",null,"属性配置",-1)),i.selectedCell?(e.openBlock(),e.createElementBlock("div",uc,[e.createElementVNode("div",gc,[o[1]||(o[1]=e.createElementVNode("label",null,"节点名称",-1)),e.createElementVNode("input",{value:i.selectedCell.label,type:"text",placeholder:"输入节点名称",onInput:c},null,40,fc)]),e.createElementVNode("div",Ec,[o[2]||(o[2]=e.createElementVNode("label",null,"节点类型",-1)),e.createElementVNode("input",{value:i.selectedCell.nodeType,type:"text",readonly:"",disabled:""},null,8,yc)]),d.value?(e.openBlock(),e.createElementBlock("div",bc)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.value),{key:1,modelValue:s.value,"onUpdate:modelValue":[o[0]||(o[0]=u=>s.value=u),p]},null,8,["modelValue"])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",Nc,[...o[3]||(o[3]=[e.createElementVNode("div",{class:"empty-text"},"选择节点以配置属性",-1)])]))]))}}),[["__scopeId","data-v-8304acbc"]]),Vc={class:"toolbar"},kc={class:"toolbar-right"},Cc=H(e.defineComponent({__name:"WorkflowToolbar",props:{showClose:{type:Boolean}},emits:["clear","validate","save","close"],setup(i){return(l,n)=>(e.openBlock(),e.createElementBlock("div",Vc,[n[5]||(n[5]=e.createElementVNode("div",{class:"toolbar-left"},[e.createElementVNode("h2",null,"流程编排")],-1)),e.createElementVNode("div",kc,[e.createElementVNode("button",{class:"btn-secondary",onClick:n[0]||(n[0]=r=>l.$emit("clear"))},"清空"),e.createElementVNode("button",{class:"btn-secondary",onClick:n[1]||(n[1]=r=>l.$emit("validate"))},"验证"),e.createElementVNode("button",{class:"btn-primary",onClick:n[2]||(n[2]=r=>l.$emit("save"))},"保存"),i.showClose?(e.openBlock(),e.createElementBlock("button",{key:0,class:"btn-close",onClick:n[3]||(n[3]=r=>l.$emit("close")),title:"关闭"},[...n[4]||(n[4]=[e.createElementVNode("span",{class:"close-icon"},"×",-1)])])):e.createCommentVNode("",!0)])]))}}),[["__scopeId","data-v-b3e0a4fc"]]),$c={class:"menu-header"},vc={class:"menu-list"},wc=["onClick"],Bc={class:"menu-item-info"},Sc={class:"menu-item-name"},_c={class:"menu-item-desc"},xc=H(e.defineComponent({__name:"AddNodeMenu",props:{visible:{type:Boolean},position:{},nodeTypes:{}},emits:["close","select"],setup(i,{emit:l}){const n=i,r=l,t=e.computed(()=>n.nodeTypes.filter(d=>d.type!=="start"&&d.type!=="end")),s=d=>{r("select",d)};return(d,c)=>(e.openBlock(),e.createElementBlock("div",null,[i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"menu-overlay",onClick:c[0]||(c[0]=p=>d.$emit("close"))})):e.createCommentVNode("",!0),i.visible?(e.openBlock(),e.createElementBlock("div",{key:1,class:"add-node-menu",style:e.normalizeStyle({left:i.position.x+"px",top:i.position.y+"px"})},[e.createElementVNode("div",$c,[c[2]||(c[2]=e.createElementVNode("span",null,"选择节点类型",-1)),e.createElementVNode("button",{class:"btn-close",onClick:c[1]||(c[1]=p=>d.$emit("close"))},"×")]),e.createElementVNode("div",vc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.type,class:"menu-item",onClick:g=>s(p)},[e.createElementVNode("div",{class:e.normalizeClass(["menu-item-icon",`node-icon-${p.type}`])},e.toDisplayString(p.icon),3),e.createElementVNode("div",Bc,[e.createElementVNode("div",Sc,e.toDisplayString(p.name),1),e.createElementVNode("div",_c,e.toDisplayString(p.description),1)])],8,wc))),128))])],4)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-aa6fccf8"]]);class Ic{constructor(){be(this,"graph",null)}setGraph(l){this.graph=l}getElements(){return this.graph?this.graph.getNodes().map(n=>{const r=n.getData()||{},t=r.type||n.shape,s=me.getComponent(t),d=this.getElementProperties(n,s);return{id:n.id,name:r.componentName||n.getAttrByPath("label/text")||`图元_${n.id.slice(0,8)}`,type:(s==null?void 0:s.metadata.name)||t,icon:(s==null?void 0:s.metadata.icon)||"📦",properties:d}}):(console.warn("画布实例未初始化"),[])}getElementProperties(l,n){const r=[],t=new Set;return n!=null&&n.props&&n.props.forEach(s=>{const d=s.path.split("."),c=d[d.length-1];c&&!t.has(c)&&(r.push({key:c,label:s.label||c}),t.add(c))}),r}getElementById(l){return this.getElements().find(r=>r.id===l)||null}searchElements(l){const n=this.getElements(),r=l.toLowerCase();return n.filter(t=>t.name.toLowerCase().includes(r)||t.id.toLowerCase().includes(r)||t.type.toLowerCase().includes(r))}}const st=new Ic,Dc={class:"workflow-editor"},Tc={class:"editor-main"},Pc={class:"canvas-area"},Ac=H(e.defineComponent({__name:"WorkflowEditor",props:{scadaGraph:{default:null},showClose:{type:Boolean,default:!1}},emits:["close"],setup(i){const l=i,n=e.ref([{type:"start",name:"开始",icon:"▶",description:"流程起点",color:"#52c41a"},{type:"end",name:"结束",icon:"⏹",description:"流程终点",color:"#ff4d4f"},{type:"getProperty",name:"获取图元属性",icon:"📥",description:"获取图元的属性值",color:"#1890ff"},{type:"setProperty",name:"设置图元属性",icon:"📤",description:"设置图元的属性值",color:"#13c2c2"},{type:"condition",name:"条件节点",icon:"◆",description:"条件分支判断",color:"#faad14"},{type:"httpRequest",name:"http请求",icon:"🌐",description:"HTTP网络请求",color:"#722ed1"},{type:"customCode",name:"自定义代码",icon:"💻",description:"执行自定义JavaScript代码",color:"#eb2f96"},{type:"timer",name:"定时器节点",icon:"⏰",description:"设置定时执行",color:"#52c41a"},{type:"clearTimer",name:"清除定时器",icon:"🗑",description:"清除定时器",color:"#ff4d4f"}]),r=e.ref();let t=null;l.scadaGraph&&st.setGraph(l.scadaGraph),e.provide("canvasElementService",st);const s=e.ref(null),d=e.ref(!1),c=e.ref({x:0,y:0});let p=null;const g=()=>{n.value.forEach(N=>{const E={inherit:"rect",width:150,height:60,markup:[{tagName:"rect",selector:"body"},{tagName:"text",selector:"icon"},{tagName:"text",selector:"label"}],attrs:{body:{strokeWidth:1,stroke:N.color,fill:"#ffffff",rx:6,ry:6},icon:{text:N.icon,fontSize:24,fill:N.color,refX:20,refY:"50%",textAnchor:"middle",textVerticalAnchor:"middle"},label:{text:N.name,fontSize:14,fill:"#333333",refX:75,refY:"50%",textAnchor:"middle",textVerticalAnchor:"middle"}},ports:{groups:{in:{position:"left",attrs:{circle:{r:5,magnet:!0,stroke:"#10b981",strokeWidth:2,fill:"#1e293b"}}},out:{position:{name:"right"},attrs:{circle:{r:5,magnet:!0,stroke:"#10b981",strokeWidth:2,fill:"#1e293b"},portLabel:{fontSize:10,fill:"#94a3b8"}},markup:[{tagName:"circle",selector:"circle"},{tagName:"text",selector:"portLabel"}],label:{position:{name:"right",args:{x:10,y:0}}}}},items:[]},data:{nodeType:N.type}};N.type==="start"?E.ports.items=[{id:"port-out",group:"out"}]:N.type==="end"?E.ports.items=[{id:"port-in",group:"in"}]:N.type==="condition"?E.ports.items=[{id:"port-in",group:"in"},{id:"port-out-0",group:"out",args:{text:"True"}},{id:"port-out-1",group:"out",args:{text:"False"}}]:E.ports.items=[{id:"port-in",group:"in"},{id:"port-out",group:"out"}],oe.Graph.registerNode(N.type,E,!0)})},a=()=>{if(!r.value)return;g(),t=new oe.Graph({container:r.value,width:r.value.clientWidth,height:r.value.clientHeight,grid:{size:10,visible:!0,type:"dot",args:{color:"#333",thickness:1}},panning:{enabled:!0,modifiers:"shift"},mousewheel:{enabled:!0,modifiers:["ctrl","meta"]},connecting:{router:"manhattan",connector:{name:"rounded",args:{radius:8}},anchor:"center",connectionPoint:"anchor",snap:{radius:20},allowBlank:!1,allowLoop:!1,allowNode:!1,createEdge(){return new oe.Shape.Edge({attrs:{line:{stroke:"#64748b",strokeWidth:3,targetMarker:{name:"block",width:12,height:8,fill:"#64748b"}}},zIndex:0})},validateConnection({targetMagnet:E}){return!!E}},highlighting:{magnetAvailable:{name:"stroke",args:{attrs:{fill:"#34d399",stroke:"#34d399"}}}}}),t.use(new Ge.Selection({enabled:!0,rubberband:!1,showNodeSelectionBox:!0,showEdgeSelectionBox:!0,multiple:!0,movable:!0,strict:!1}));const N=E=>{var V;if(console.log("键盘事件触发:",E.key,"selectedCell存在:",!!s.value),E.key==="Delete"||E.key==="Backspace"){if(!t){console.log("graph不存在,无法删除");return}if((V=s.value)!=null&&V.cell){E.preventDefault();const D=s.value.cell;console.log("删除选中的节点:",s.value.label);const O=t.getIncomingEdges(D),A=t.getOutgoingEdges(D);O&&O.length>0&&A&&A.length>0&&O.forEach(w=>{const B=w.getSourceCell(),T=w.getSourcePortId();A.forEach(K=>{const te=K.getTargetCell(),ce=K.getTargetPortId();B&&te&&t&&(t.addEdge({source:{cell:B,port:T},target:{cell:te,port:ce}}),console.log("已连接前后节点"))})}),t.removeCells([D]),s.value=null,console.log("已删除节点");return}const y=t.getSelectedCells();console.log("选中的cells数量:",y.length,y),y.length?(E.preventDefault(),t.removeCells(y),console.log("已删除cells")):console.log("没有选中的cells")}};document.addEventListener("keydown",N),t.on("node:click",({node:E})=>{var D;const V=E.getAttrByPath("label/text")||"",y=((D=E.getData())==null?void 0:D.nodeType)||E.shape||"";s.value={label:V,nodeType:y,cell:E},console.log("节点已点击,保存到selectedCell:",V)}),t.on("blank:click",()=>{s.value=null,t&&t.cleanSelection()}),t.on("edge:mouseenter",({edge:E})=>{E.setAttrs({line:{stroke:"#10b981",strokeWidth:4}}),E.addTools([{name:"button",args:{markup:[{tagName:"circle",selector:"button",attrs:{r:12,stroke:"#10b981",strokeWidth:2,fill:"#1e293b",cursor:"pointer"}},{tagName:"path",selector:"icon",attrs:{d:"M -5 0 L 5 0 M 0 -5 L 0 5",stroke:"#10b981",strokeWidth:2,fill:"none",pointerEvents:"none"}}],distance:.5,onClick:({e:V,view:y})=>{p=y.cell,d.value=!0,c.value={x:V.clientX,y:V.clientY}}}},{name:"vertices"}])}),t.on("edge:mouseleave",({edge:E})=>{E.setAttrs({line:{stroke:"#64748b",strokeWidth:3}}),E.removeTools()}),t.on("edge:connected",({isNew:E,edge:V})=>{E&&V.setAttrs({line:{stroke:"#64748b",strokeWidth:3}})}),t.on("node:selected",({node:E})=>{E.toFront()}),t.on("edge:selected",({edge:E})=>{E.toFront()}),o()},o=()=>{if(!t)return;const N=t.addNode({shape:"start",x:100,y:200,label:"开始",data:{nodeType:"start"}}),E=t.addNode({shape:"end",x:500,y:200,label:"结束",data:{nodeType:"end"}});t.addEdge({source:{cell:N,port:"port-out"},target:{cell:E,port:"port-in"}})},u=N=>{var E;(E=s.value)!=null&&E.cell&&(s.value.label=N,s.value.cell.setAttrByPath("label/text",N))},f=N=>{if(!t||!p)return;const E=p.getSourceCell(),V=p.getTargetCell();if(!E||!V)return;const y=E.position(),D=V.position(),O=(y.x+D.x)/2,A=(y.y+D.y)/2,w=t.addNode({shape:N.type,x:O,y:A,label:N.name,data:{nodeType:N.type}});p.remove(),t.addEdge({source:{cell:E,port:"port-out"},target:{cell:w,port:"port-in"}}),N.type==="condition"?(t.addEdge({source:{cell:w,port:"port-out-0"},target:{cell:V,port:"port-in"},labels:[{attrs:{label:{text:"True",fill:"#e2e8f0",fontSize:12},rect:{fill:"#334155",stroke:"#64748b",strokeWidth:1,rx:4,ry:4}},position:.5}]}),t.addEdge({source:{cell:w,port:"port-out-1"},target:{cell:V,port:"port-in"},labels:[{attrs:{label:{text:"False",fill:"#e2e8f0",fontSize:12},rect:{fill:"#334155",stroke:"#64748b",strokeWidth:1,rx:4,ry:4}},position:.5}]})):t.addEdge({source:{cell:w,port:"port-out"},target:{cell:V,port:"port-in"}}),d.value=!1,p=null},b=()=>{t&&t.clearCells()},S=()=>{if(!t)return console.log("画布不存在"),{errors:["画布不存在"],warnings:[]};const N=[],E=[],V=t.getNodes(),y=V.filter(O=>{var A;return((A=O.getData())==null?void 0:A.nodeType)==="start"});return y.length===0?N.push("流程中缺少开始节点"):y.length>1&&E.push("流程中有多个开始节点"),V.filter(O=>{var A;return((A=O.getData())==null?void 0:A.nodeType)==="end"}).length===0&&E.push("流程中缺少结束节点"),V.forEach(O=>{const A=O.getData(),w=A==null?void 0:A.nodeType,B=(A==null?void 0:A.config)||{},T=O.getAttrByPath("label/text")||"未命名节点";(w==="getProperty"||w==="setProperty")&&(B.elementId||N.push(`节点「${T}」未配置图元`),B.propertyName||N.push(`节点「${T}」未配置属性`),w==="setProperty"&&!B.value&&E.push(`节点「${T}」未配置属性值`)),w==="httpRequest"&&(B.url||N.push(`节点「${T}」未配置请求URL`)),w==="condition"&&(!B.branches||B.branches.length===0)&&N.push(`节点「${T}」未配置条件分支`),w==="timer"&&(!B.interval||B.interval<=0)&&N.push(`节点「${T}」未配置有效的时间间隔`),w==="clearTimer"&&(B.timerId||N.push(`节点「${T}」未选择定时器`)),w==="customCode"&&(B.code||E.push(`节点「${T}」未编写代码`))}),V.forEach(O=>{var B;const A=(B=O.getData())==null?void 0:B.nodeType,w=O.getAttrByPath("label/text")||"未命名节点";if(A==="start"&&t){const T=t.getOutgoingEdges(O);(!T||T.length===0)&&N.push(`开始节点「${w}」没有连接到下一个节点`)}if(A==="end"&&t){const T=t.getOutgoingEdges(O);T&&T.length>0&&E.push(`结束节点「${w}」不应该有输出连线`)}if(A!=="start"&&A!=="end"&&t){const T=t.getIncomingEdges(O),K=t.getOutgoingEdges(O);(!T||T.length===0)&&E.push(`节点「${w}」没有输入连线`),A!=="clearTimer"&&(!K||K.length===0)&&E.push(`节点「${w}」没有输出连线`)}}),t&&V.forEach(O=>{var K;const A=t.getIncomingEdges(O),w=t.getOutgoingEdges(O),B=(K=O.getData())==null?void 0:K.nodeType,T=O.getAttrByPath("label/text")||"未命名节点";B!=="start"&&(!A||A.length===0)&&(!w||w.length===0)&&E.push(`节点「${T}」是孤立节点`)}),{errors:N,warnings:E}},F=()=>{const{errors:N,warnings:E}=S();if(N.length===0&&E.length===0)alert("✓ 流程验证通过!"),console.log("流程验证通过");else{let V="";N.length>0&&(V+=`错误:
27
+ `+N.map(y=>" • "+y).join(`
28
+ `)),E.length>0&&(V&&(V+=`
28
29
 
29
- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
30
+ `),V+=`警告:
31
+ `+E.map(y=>" • "+y).join(`
32
+ `)),alert(V),console.log("验证结果:",{errors:N,warnings:E})}},z=()=>{if(!t)return;const{errors:N,warnings:E}=S();if(N.length>0){let B=`流程验证失败,无法保存!
30
33
 
31
- - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
32
- - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
33
-
34
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
- */return function(r){var n=o,l=n.lib,E=l.WordArray,c=l.Hasher,x=n.algo,s=E.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),a=E.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),t=E.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),i=E.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),m=E.create([0,1518500249,1859775393,2400959708,2840853838]),u=E.create([1352829926,1548603684,1836072691,2053994217,0]),y=x.RIPEMD160=c.extend({_doReset:function(){this._hash=E.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(b,A){for(var $=0;$<16;$++){var S=A+$,B=b[S];b[S]=(B<<8|B>>>24)&16711935|(B<<24|B>>>8)&4278255360}var N=this._hash.words,w=m.words,I=u.words,R=s.words,O=a.words,j=t.words,Z=i.words,ee,ae,oe,v,D,_,F,H,L,G;_=ee=N[0],F=ae=N[1],H=oe=N[2],L=v=N[3],G=D=N[4];for(var P,$=0;$<80;$+=1)P=ee+b[A+R[$]]|0,$<16?P+=k(ae,oe,v)+w[0]:$<32?P+=V(ae,oe,v)+w[1]:$<48?P+=d(ae,oe,v)+w[2]:$<64?P+=p(ae,oe,v)+w[3]:P+=f(ae,oe,v)+w[4],P=P|0,P=C(P,j[$]),P=P+D|0,ee=D,D=v,v=C(oe,10),oe=ae,ae=P,P=_+b[A+O[$]]|0,$<16?P+=f(F,H,L)+I[0]:$<32?P+=p(F,H,L)+I[1]:$<48?P+=d(F,H,L)+I[2]:$<64?P+=V(F,H,L)+I[3]:P+=k(F,H,L)+I[4],P=P|0,P=C(P,Z[$]),P=P+G|0,_=G,G=L,L=C(H,10),H=F,F=P;P=N[1]+oe+L|0,N[1]=N[2]+v+G|0,N[2]=N[3]+D+_|0,N[3]=N[4]+ee+F|0,N[4]=N[0]+ae+H|0,N[0]=P},_doFinalize:function(){var b=this._data,A=b.words,$=this._nDataBytes*8,S=b.sigBytes*8;A[S>>>5]|=128<<24-S%32,A[(S+64>>>9<<4)+14]=($<<8|$>>>24)&16711935|($<<24|$>>>8)&4278255360,b.sigBytes=(A.length+1)*4,this._process();for(var B=this._hash,N=B.words,w=0;w<5;w++){var I=N[w];N[w]=(I<<8|I>>>24)&16711935|(I<<24|I>>>8)&4278255360}return B},clone:function(){var b=c.clone.call(this);return b._hash=this._hash.clone(),b}});function k(b,A,$){return b^A^$}function V(b,A,$){return b&A|~b&$}function d(b,A,$){return(b|~A)^$}function p(b,A,$){return b&$|A&~$}function f(b,A,$){return b^(A|~$)}function C(b,A){return b<<A|b>>>32-A}n.RIPEMD160=c._createHelper(y),n.HmacRIPEMD160=c._createHmacHelper(y)}(),o.RIPEMD160})}(yt)),yt.exports}var Ct={exports:{}},Bo;function Bt(){return Bo||(Bo=1,function(g,h){(function(o,r){g.exports=r(Q())})(K,function(o){(function(){var r=o,n=r.lib,l=n.Base,E=r.enc,c=E.Utf8,x=r.algo;x.HMAC=l.extend({init:function(s,a){s=this._hasher=new s.init,typeof a=="string"&&(a=c.parse(a));var t=s.blockSize,i=t*4;a.sigBytes>i&&(a=s.finalize(a)),a.clamp();for(var m=this._oKey=a.clone(),u=this._iKey=a.clone(),y=m.words,k=u.words,V=0;V<t;V++)y[V]^=1549556828,k[V]^=909522486;m.sigBytes=u.sigBytes=i,this.reset()},reset:function(){var s=this._hasher;s.reset(),s.update(this._iKey)},update:function(s){return this._hasher.update(s),this},finalize:function(s){var a=this._hasher,t=a.finalize(s);a.reset();var i=a.finalize(this._oKey.clone().concat(t));return i}})})()})}(Ct)),Ct.exports}var kt={exports:{}},ko;function zc(){return ko||(ko=1,function(g,h){(function(o,r,n){g.exports=r(Q(),gt(),Bt())})(K,function(o){return function(){var r=o,n=r.lib,l=n.Base,E=n.WordArray,c=r.algo,x=c.SHA256,s=c.HMAC,a=c.PBKDF2=l.extend({cfg:l.extend({keySize:128/32,hasher:x,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,i){for(var m=this.cfg,u=s.create(m.hasher,t),y=E.create(),k=E.create([1]),V=y.words,d=k.words,p=m.keySize,f=m.iterations;V.length<p;){var C=u.update(i).finalize(k);u.reset();for(var b=C.words,A=b.length,$=C,S=1;S<f;S++){$=u.finalize($),u.reset();for(var B=$.words,N=0;N<A;N++)b[N]^=B[N]}y.concat(C),d[0]++}return y.sigBytes=p*4,y}});r.PBKDF2=function(t,i,m){return a.create(m).compute(t,i)}}(),o.PBKDF2})}(kt)),kt.exports}var Nt={exports:{}},No;function Ce(){return No||(No=1,function(g,h){(function(o,r,n){g.exports=r(Q(),uo(),Bt())})(K,function(o){return function(){var r=o,n=r.lib,l=n.Base,E=n.WordArray,c=r.algo,x=c.MD5,s=c.EvpKDF=l.extend({cfg:l.extend({keySize:128/32,hasher:x,iterations:1}),init:function(a){this.cfg=this.cfg.extend(a)},compute:function(a,t){for(var i,m=this.cfg,u=m.hasher.create(),y=E.create(),k=y.words,V=m.keySize,d=m.iterations;k.length<V;){i&&u.update(i),i=u.update(a).finalize(t),u.reset();for(var p=1;p<d;p++)i=u.finalize(i),u.reset();y.concat(i)}return y.sigBytes=V*4,y}});r.EvpKDF=function(a,t,i){return s.create(i).compute(a,t)}}(),o.EvpKDF})}(Nt)),Nt.exports}var Vt={exports:{}},Vo;function ce(){return Vo||(Vo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),Ce())})(K,function(o){o.lib.Cipher||function(r){var n=o,l=n.lib,E=l.Base,c=l.WordArray,x=l.BufferedBlockAlgorithm,s=n.enc;s.Utf8;var a=s.Base64,t=n.algo,i=t.EvpKDF,m=l.Cipher=x.extend({cfg:E.extend(),createEncryptor:function(B,N){return this.create(this._ENC_XFORM_MODE,B,N)},createDecryptor:function(B,N){return this.create(this._DEC_XFORM_MODE,B,N)},init:function(B,N,w){this.cfg=this.cfg.extend(w),this._xformMode=B,this._key=N,this.reset()},reset:function(){x.reset.call(this),this._doReset()},process:function(B){return this._append(B),this._process()},finalize:function(B){B&&this._append(B);var N=this._doFinalize();return N},keySize:128/32,ivSize:128/32,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function B(N){return typeof N=="string"?S:b}return function(N){return{encrypt:function(w,I,R){return B(I).encrypt(N,w,I,R)},decrypt:function(w,I,R){return B(I).decrypt(N,w,I,R)}}}}()});l.StreamCipher=m.extend({_doFinalize:function(){var B=this._process(!0);return B},blockSize:1});var u=n.mode={},y=l.BlockCipherMode=E.extend({createEncryptor:function(B,N){return this.Encryptor.create(B,N)},createDecryptor:function(B,N){return this.Decryptor.create(B,N)},init:function(B,N){this._cipher=B,this._iv=N}}),k=u.CBC=function(){var B=y.extend();B.Encryptor=B.extend({processBlock:function(w,I){var R=this._cipher,O=R.blockSize;N.call(this,w,I,O),R.encryptBlock(w,I),this._prevBlock=w.slice(I,I+O)}}),B.Decryptor=B.extend({processBlock:function(w,I){var R=this._cipher,O=R.blockSize,j=w.slice(I,I+O);R.decryptBlock(w,I),N.call(this,w,I,O),this._prevBlock=j}});function N(w,I,R){var O,j=this._iv;j?(O=j,this._iv=r):O=this._prevBlock;for(var Z=0;Z<R;Z++)w[I+Z]^=O[Z]}return B}(),V=n.pad={},d=V.Pkcs7={pad:function(B,N){for(var w=N*4,I=w-B.sigBytes%w,R=I<<24|I<<16|I<<8|I,O=[],j=0;j<I;j+=4)O.push(R);var Z=c.create(O,I);B.concat(Z)},unpad:function(B){var N=B.words[B.sigBytes-1>>>2]&255;B.sigBytes-=N}};l.BlockCipher=m.extend({cfg:m.cfg.extend({mode:k,padding:d}),reset:function(){var B;m.reset.call(this);var N=this.cfg,w=N.iv,I=N.mode;this._xformMode==this._ENC_XFORM_MODE?B=I.createEncryptor:(B=I.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==B?this._mode.init(this,w&&w.words):(this._mode=B.call(I,this,w&&w.words),this._mode.__creator=B)},_doProcessBlock:function(B,N){this._mode.processBlock(B,N)},_doFinalize:function(){var B,N=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(N.pad(this._data,this.blockSize),B=this._process(!0)):(B=this._process(!0),N.unpad(B)),B},blockSize:128/32});var p=l.CipherParams=E.extend({init:function(B){this.mixIn(B)},toString:function(B){return(B||this.formatter).stringify(this)}}),f=n.format={},C=f.OpenSSL={stringify:function(B){var N,w=B.ciphertext,I=B.salt;return I?N=c.create([1398893684,1701076831]).concat(I).concat(w):N=w,N.toString(a)},parse:function(B){var N,w=a.parse(B),I=w.words;return I[0]==1398893684&&I[1]==1701076831&&(N=c.create(I.slice(2,4)),I.splice(0,4),w.sigBytes-=16),p.create({ciphertext:w,salt:N})}},b=l.SerializableCipher=E.extend({cfg:E.extend({format:C}),encrypt:function(B,N,w,I){I=this.cfg.extend(I);var R=B.createEncryptor(w,I),O=R.finalize(N),j=R.cfg;return p.create({ciphertext:O,key:w,iv:j.iv,algorithm:B,mode:j.mode,padding:j.padding,blockSize:B.blockSize,formatter:I.format})},decrypt:function(B,N,w,I){I=this.cfg.extend(I),N=this._parse(N,I.format);var R=B.createDecryptor(w,I).finalize(N.ciphertext);return R},_parse:function(B,N){return typeof B=="string"?N.parse(B,this):B}}),A=n.kdf={},$=A.OpenSSL={execute:function(B,N,w,I,R){if(I||(I=c.random(64/8)),R)var O=i.create({keySize:N+w,hasher:R}).compute(B,I);else var O=i.create({keySize:N+w}).compute(B,I);var j=c.create(O.words.slice(N),w*4);return O.sigBytes=N*4,p.create({key:O,iv:j,salt:I})}},S=l.PasswordBasedCipher=b.extend({cfg:b.cfg.extend({kdf:$}),encrypt:function(B,N,w,I){I=this.cfg.extend(I);var R=I.kdf.execute(w,B.keySize,B.ivSize,I.salt,I.hasher);I.iv=R.iv;var O=b.encrypt.call(this,B,N,R.key,I);return O.mixIn(R),O},decrypt:function(B,N,w,I){I=this.cfg.extend(I),N=this._parse(N,I.format);var R=I.kdf.execute(w,B.keySize,B.ivSize,N.salt,I.hasher);I.iv=R.iv;var O=b.decrypt.call(this,B,N,R.key,I);return O}})}()})}(Vt)),Vt.exports}var Dt={exports:{}},Do;function Tc(){return Do||(Do=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.mode.CFB=function(){var r=o.lib.BlockCipherMode.extend();r.Encryptor=r.extend({processBlock:function(l,E){var c=this._cipher,x=c.blockSize;n.call(this,l,E,x,c),this._prevBlock=l.slice(E,E+x)}}),r.Decryptor=r.extend({processBlock:function(l,E){var c=this._cipher,x=c.blockSize,s=l.slice(E,E+x);n.call(this,l,E,x,c),this._prevBlock=s}});function n(l,E,c,x){var s,a=this._iv;a?(s=a.slice(0),this._iv=void 0):s=this._prevBlock,x.encryptBlock(s,0);for(var t=0;t<c;t++)l[E+t]^=s[t]}return r}(),o.mode.CFB})}(Dt)),Dt.exports}var At={exports:{}},Ao;function Pc(){return Ao||(Ao=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.mode.CTR=function(){var r=o.lib.BlockCipherMode.extend(),n=r.Encryptor=r.extend({processBlock:function(l,E){var c=this._cipher,x=c.blockSize,s=this._iv,a=this._counter;s&&(a=this._counter=s.slice(0),this._iv=void 0);var t=a.slice(0);c.encryptBlock(t,0),a[x-1]=a[x-1]+1|0;for(var i=0;i<x;i++)l[E+i]^=t[i]}});return r.Decryptor=n,r}(),o.mode.CTR})}(At)),At.exports}var _t={exports:{}},_o;function Rc(){return _o||(_o=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){/** @preserve
36
- * Counter block mode compatible with Dr Brian Gladman fileenc.c
37
- * derived from CryptoJS.mode.CTR
38
- * Jan Hruby jhruby.web@gmail.com
39
- */return o.mode.CTRGladman=function(){var r=o.lib.BlockCipherMode.extend();function n(c){if((c>>24&255)===255){var x=c>>16&255,s=c>>8&255,a=c&255;x===255?(x=0,s===255?(s=0,a===255?a=0:++a):++s):++x,c=0,c+=x<<16,c+=s<<8,c+=a}else c+=1<<24;return c}function l(c){return(c[0]=n(c[0]))===0&&(c[1]=n(c[1])),c}var E=r.Encryptor=r.extend({processBlock:function(c,x){var s=this._cipher,a=s.blockSize,t=this._iv,i=this._counter;t&&(i=this._counter=t.slice(0),this._iv=void 0),l(i);var m=i.slice(0);s.encryptBlock(m,0);for(var u=0;u<a;u++)c[x+u]^=m[u]}});return r.Decryptor=E,r}(),o.mode.CTRGladman})}(_t)),_t.exports}var Ft={exports:{}},Fo;function Mc(){return Fo||(Fo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.mode.OFB=function(){var r=o.lib.BlockCipherMode.extend(),n=r.Encryptor=r.extend({processBlock:function(l,E){var c=this._cipher,x=c.blockSize,s=this._iv,a=this._keystream;s&&(a=this._keystream=s.slice(0),this._iv=void 0),c.encryptBlock(a,0);for(var t=0;t<x;t++)l[E+t]^=a[t]}});return r.Decryptor=n,r}(),o.mode.OFB})}(Ft)),Ft.exports}var $t={exports:{}},$o;function Hc(){return $o||($o=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.mode.ECB=function(){var r=o.lib.BlockCipherMode.extend();return r.Encryptor=r.extend({processBlock:function(n,l){this._cipher.encryptBlock(n,l)}}),r.Decryptor=r.extend({processBlock:function(n,l){this._cipher.decryptBlock(n,l)}}),r}(),o.mode.ECB})}($t)),$t.exports}var wt={exports:{}},wo;function Oc(){return wo||(wo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.pad.AnsiX923={pad:function(r,n){var l=r.sigBytes,E=n*4,c=E-l%E,x=l+c-1;r.clamp(),r.words[x>>>2]|=c<<24-x%4*8,r.sigBytes+=c},unpad:function(r){var n=r.words[r.sigBytes-1>>>2]&255;r.sigBytes-=n}},o.pad.Ansix923})}(wt)),wt.exports}var St={exports:{}},So;function Uc(){return So||(So=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.pad.Iso10126={pad:function(r,n){var l=n*4,E=l-r.sigBytes%l;r.concat(o.lib.WordArray.random(E-1)).concat(o.lib.WordArray.create([E<<24],1))},unpad:function(r){var n=r.words[r.sigBytes-1>>>2]&255;r.sigBytes-=n}},o.pad.Iso10126})}(St)),St.exports}var It={exports:{}},Io;function Lc(){return Io||(Io=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.pad.Iso97971={pad:function(r,n){r.concat(o.lib.WordArray.create([2147483648],1)),o.pad.ZeroPadding.pad(r,n)},unpad:function(r){o.pad.ZeroPadding.unpad(r),r.sigBytes--}},o.pad.Iso97971})}(It)),It.exports}var zt={exports:{}},zo;function Wc(){return zo||(zo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.pad.ZeroPadding={pad:function(r,n){var l=n*4;r.clamp(),r.sigBytes+=l-(r.sigBytes%l||l)},unpad:function(r){for(var n=r.words,l=r.sigBytes-1,l=r.sigBytes-1;l>=0;l--)if(n[l>>>2]>>>24-l%4*8&255){r.sigBytes=l+1;break}}},o.pad.ZeroPadding})}(zt)),zt.exports}var Tt={exports:{}},To;function qc(){return To||(To=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return o.pad.NoPadding={pad:function(){},unpad:function(){}},o.pad.NoPadding})}(Tt)),Tt.exports}var Pt={exports:{}},Po;function Gc(){return Po||(Po=1,function(g,h){(function(o,r,n){g.exports=r(Q(),ce())})(K,function(o){return function(r){var n=o,l=n.lib,E=l.CipherParams,c=n.enc,x=c.Hex,s=n.format;s.Hex={stringify:function(a){return a.ciphertext.toString(x)},parse:function(a){var t=x.parse(a);return E.create({ciphertext:t})}}}(),o.format.Hex})}(Pt)),Pt.exports}var Rt={exports:{}},Ro;function jc(){return Ro||(Ro=1,function(g,h){(function(o,r,n){g.exports=r(Q(),De(),Ae(),Ce(),ce())})(K,function(o){return function(){var r=o,n=r.lib,l=n.BlockCipher,E=r.algo,c=[],x=[],s=[],a=[],t=[],i=[],m=[],u=[],y=[],k=[];(function(){for(var p=[],f=0;f<256;f++)f<128?p[f]=f<<1:p[f]=f<<1^283;for(var C=0,b=0,f=0;f<256;f++){var A=b^b<<1^b<<2^b<<3^b<<4;A=A>>>8^A&255^99,c[C]=A,x[A]=C;var $=p[C],S=p[$],B=p[S],N=p[A]*257^A*16843008;s[C]=N<<24|N>>>8,a[C]=N<<16|N>>>16,t[C]=N<<8|N>>>24,i[C]=N;var N=B*16843009^S*65537^$*257^C*16843008;m[A]=N<<24|N>>>8,u[A]=N<<16|N>>>16,y[A]=N<<8|N>>>24,k[A]=N,C?(C=$^p[p[p[B^$]]],b^=p[p[b]]):C=b=1}})();var V=[0,1,2,4,8,16,32,64,128,27,54],d=E.AES=l.extend({_doReset:function(){var p;if(!(this._nRounds&&this._keyPriorReset===this._key)){for(var f=this._keyPriorReset=this._key,C=f.words,b=f.sigBytes/4,A=this._nRounds=b+6,$=(A+1)*4,S=this._keySchedule=[],B=0;B<$;B++)B<b?S[B]=C[B]:(p=S[B-1],B%b?b>6&&B%b==4&&(p=c[p>>>24]<<24|c[p>>>16&255]<<16|c[p>>>8&255]<<8|c[p&255]):(p=p<<8|p>>>24,p=c[p>>>24]<<24|c[p>>>16&255]<<16|c[p>>>8&255]<<8|c[p&255],p^=V[B/b|0]<<24),S[B]=S[B-b]^p);for(var N=this._invKeySchedule=[],w=0;w<$;w++){var B=$-w;if(w%4)var p=S[B];else var p=S[B-4];w<4||B<=4?N[w]=p:N[w]=m[c[p>>>24]]^u[c[p>>>16&255]]^y[c[p>>>8&255]]^k[c[p&255]]}}},encryptBlock:function(p,f){this._doCryptBlock(p,f,this._keySchedule,s,a,t,i,c)},decryptBlock:function(p,f){var C=p[f+1];p[f+1]=p[f+3],p[f+3]=C,this._doCryptBlock(p,f,this._invKeySchedule,m,u,y,k,x);var C=p[f+1];p[f+1]=p[f+3],p[f+3]=C},_doCryptBlock:function(p,f,C,b,A,$,S,B){for(var N=this._nRounds,w=p[f]^C[0],I=p[f+1]^C[1],R=p[f+2]^C[2],O=p[f+3]^C[3],j=4,Z=1;Z<N;Z++){var ee=b[w>>>24]^A[I>>>16&255]^$[R>>>8&255]^S[O&255]^C[j++],ae=b[I>>>24]^A[R>>>16&255]^$[O>>>8&255]^S[w&255]^C[j++],oe=b[R>>>24]^A[O>>>16&255]^$[w>>>8&255]^S[I&255]^C[j++],v=b[O>>>24]^A[w>>>16&255]^$[I>>>8&255]^S[R&255]^C[j++];w=ee,I=ae,R=oe,O=v}var ee=(B[w>>>24]<<24|B[I>>>16&255]<<16|B[R>>>8&255]<<8|B[O&255])^C[j++],ae=(B[I>>>24]<<24|B[R>>>16&255]<<16|B[O>>>8&255]<<8|B[w&255])^C[j++],oe=(B[R>>>24]<<24|B[O>>>16&255]<<16|B[w>>>8&255]<<8|B[I&255])^C[j++],v=(B[O>>>24]<<24|B[w>>>16&255]<<16|B[I>>>8&255]<<8|B[R&255])^C[j++];p[f]=ee,p[f+1]=ae,p[f+2]=oe,p[f+3]=v},keySize:256/32});r.AES=l._createHelper(d)}(),o.AES})}(Rt)),Rt.exports}var Mt={exports:{}},Mo;function Xc(){return Mo||(Mo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),De(),Ae(),Ce(),ce())})(K,function(o){return function(){var r=o,n=r.lib,l=n.WordArray,E=n.BlockCipher,c=r.algo,x=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],a=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],t=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],i=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],m=c.DES=E.extend({_doReset:function(){for(var V=this._key,d=V.words,p=[],f=0;f<56;f++){var C=x[f]-1;p[f]=d[C>>>5]>>>31-C%32&1}for(var b=this._subKeys=[],A=0;A<16;A++){for(var $=b[A]=[],S=a[A],f=0;f<24;f++)$[f/6|0]|=p[(s[f]-1+S)%28]<<31-f%6,$[4+(f/6|0)]|=p[28+(s[f+24]-1+S)%28]<<31-f%6;$[0]=$[0]<<1|$[0]>>>31;for(var f=1;f<7;f++)$[f]=$[f]>>>(f-1)*4+3;$[7]=$[7]<<5|$[7]>>>27}for(var B=this._invSubKeys=[],f=0;f<16;f++)B[f]=b[15-f]},encryptBlock:function(V,d){this._doCryptBlock(V,d,this._subKeys)},decryptBlock:function(V,d){this._doCryptBlock(V,d,this._invSubKeys)},_doCryptBlock:function(V,d,p){this._lBlock=V[d],this._rBlock=V[d+1],u.call(this,4,252645135),u.call(this,16,65535),y.call(this,2,858993459),y.call(this,8,16711935),u.call(this,1,1431655765);for(var f=0;f<16;f++){for(var C=p[f],b=this._lBlock,A=this._rBlock,$=0,S=0;S<8;S++)$|=t[S][((A^C[S])&i[S])>>>0];this._lBlock=A,this._rBlock=b^$}var B=this._lBlock;this._lBlock=this._rBlock,this._rBlock=B,u.call(this,1,1431655765),y.call(this,8,16711935),y.call(this,2,858993459),u.call(this,16,65535),u.call(this,4,252645135),V[d]=this._lBlock,V[d+1]=this._rBlock},keySize:64/32,ivSize:64/32,blockSize:64/32});function u(V,d){var p=(this._lBlock>>>V^this._rBlock)&d;this._rBlock^=p,this._lBlock^=p<<V}function y(V,d){var p=(this._rBlock>>>V^this._lBlock)&d;this._lBlock^=p,this._rBlock^=p<<V}r.DES=E._createHelper(m);var k=c.TripleDES=E.extend({_doReset:function(){var V=this._key,d=V.words;if(d.length!==2&&d.length!==4&&d.length<6)throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.");var p=d.slice(0,2),f=d.length<4?d.slice(0,2):d.slice(2,4),C=d.length<6?d.slice(0,2):d.slice(4,6);this._des1=m.createEncryptor(l.create(p)),this._des2=m.createEncryptor(l.create(f)),this._des3=m.createEncryptor(l.create(C))},encryptBlock:function(V,d){this._des1.encryptBlock(V,d),this._des2.decryptBlock(V,d),this._des3.encryptBlock(V,d)},decryptBlock:function(V,d){this._des3.decryptBlock(V,d),this._des2.encryptBlock(V,d),this._des1.decryptBlock(V,d)},keySize:192/32,ivSize:64/32,blockSize:64/32});r.TripleDES=E._createHelper(k)}(),o.TripleDES})}(Mt)),Mt.exports}var Ht={exports:{}},Ho;function Yc(){return Ho||(Ho=1,function(g,h){(function(o,r,n){g.exports=r(Q(),De(),Ae(),Ce(),ce())})(K,function(o){return function(){var r=o,n=r.lib,l=n.StreamCipher,E=r.algo,c=E.RC4=l.extend({_doReset:function(){for(var a=this._key,t=a.words,i=a.sigBytes,m=this._S=[],u=0;u<256;u++)m[u]=u;for(var u=0,y=0;u<256;u++){var k=u%i,V=t[k>>>2]>>>24-k%4*8&255;y=(y+m[u]+V)%256;var d=m[u];m[u]=m[y],m[y]=d}this._i=this._j=0},_doProcessBlock:function(a,t){a[t]^=x.call(this)},keySize:256/32,ivSize:0});function x(){for(var a=this._S,t=this._i,i=this._j,m=0,u=0;u<4;u++){t=(t+1)%256,i=(i+a[t])%256;var y=a[t];a[t]=a[i],a[i]=y,m|=a[(a[t]+a[i])%256]<<24-u*8}return this._i=t,this._j=i,m}r.RC4=l._createHelper(c);var s=E.RC4Drop=c.extend({cfg:c.cfg.extend({drop:192}),_doReset:function(){c._doReset.call(this);for(var a=this.cfg.drop;a>0;a--)x.call(this)}});r.RC4Drop=l._createHelper(s)}(),o.RC4})}(Ht)),Ht.exports}var Ot={exports:{}},Oo;function Kc(){return Oo||(Oo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),De(),Ae(),Ce(),ce())})(K,function(o){return function(){var r=o,n=r.lib,l=n.StreamCipher,E=r.algo,c=[],x=[],s=[],a=E.Rabbit=l.extend({_doReset:function(){for(var i=this._key.words,m=this.cfg.iv,u=0;u<4;u++)i[u]=(i[u]<<8|i[u]>>>24)&16711935|(i[u]<<24|i[u]>>>8)&4278255360;var y=this._X=[i[0],i[3]<<16|i[2]>>>16,i[1],i[0]<<16|i[3]>>>16,i[2],i[1]<<16|i[0]>>>16,i[3],i[2]<<16|i[1]>>>16],k=this._C=[i[2]<<16|i[2]>>>16,i[0]&4294901760|i[1]&65535,i[3]<<16|i[3]>>>16,i[1]&4294901760|i[2]&65535,i[0]<<16|i[0]>>>16,i[2]&4294901760|i[3]&65535,i[1]<<16|i[1]>>>16,i[3]&4294901760|i[0]&65535];this._b=0;for(var u=0;u<4;u++)t.call(this);for(var u=0;u<8;u++)k[u]^=y[u+4&7];if(m){var V=m.words,d=V[0],p=V[1],f=(d<<8|d>>>24)&16711935|(d<<24|d>>>8)&4278255360,C=(p<<8|p>>>24)&16711935|(p<<24|p>>>8)&4278255360,b=f>>>16|C&4294901760,A=C<<16|f&65535;k[0]^=f,k[1]^=b,k[2]^=C,k[3]^=A,k[4]^=f,k[5]^=b,k[6]^=C,k[7]^=A;for(var u=0;u<4;u++)t.call(this)}},_doProcessBlock:function(i,m){var u=this._X;t.call(this),c[0]=u[0]^u[5]>>>16^u[3]<<16,c[1]=u[2]^u[7]>>>16^u[5]<<16,c[2]=u[4]^u[1]>>>16^u[7]<<16,c[3]=u[6]^u[3]>>>16^u[1]<<16;for(var y=0;y<4;y++)c[y]=(c[y]<<8|c[y]>>>24)&16711935|(c[y]<<24|c[y]>>>8)&4278255360,i[m+y]^=c[y]},blockSize:128/32,ivSize:64/32});function t(){for(var i=this._X,m=this._C,u=0;u<8;u++)x[u]=m[u];m[0]=m[0]+1295307597+this._b|0,m[1]=m[1]+3545052371+(m[0]>>>0<x[0]>>>0?1:0)|0,m[2]=m[2]+886263092+(m[1]>>>0<x[1]>>>0?1:0)|0,m[3]=m[3]+1295307597+(m[2]>>>0<x[2]>>>0?1:0)|0,m[4]=m[4]+3545052371+(m[3]>>>0<x[3]>>>0?1:0)|0,m[5]=m[5]+886263092+(m[4]>>>0<x[4]>>>0?1:0)|0,m[6]=m[6]+1295307597+(m[5]>>>0<x[5]>>>0?1:0)|0,m[7]=m[7]+3545052371+(m[6]>>>0<x[6]>>>0?1:0)|0,this._b=m[7]>>>0<x[7]>>>0?1:0;for(var u=0;u<8;u++){var y=i[u]+m[u],k=y&65535,V=y>>>16,d=((k*k>>>17)+k*V>>>15)+V*V,p=((y&4294901760)*y|0)+((y&65535)*y|0);s[u]=d^p}i[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,i[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,i[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,i[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,i[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,i[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,i[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,i[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}r.Rabbit=l._createHelper(a)}(),o.Rabbit})}(Ot)),Ot.exports}var Ut={exports:{}},Uo;function Jc(){return Uo||(Uo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),De(),Ae(),Ce(),ce())})(K,function(o){return function(){var r=o,n=r.lib,l=n.StreamCipher,E=r.algo,c=[],x=[],s=[],a=E.RabbitLegacy=l.extend({_doReset:function(){var i=this._key.words,m=this.cfg.iv,u=this._X=[i[0],i[3]<<16|i[2]>>>16,i[1],i[0]<<16|i[3]>>>16,i[2],i[1]<<16|i[0]>>>16,i[3],i[2]<<16|i[1]>>>16],y=this._C=[i[2]<<16|i[2]>>>16,i[0]&4294901760|i[1]&65535,i[3]<<16|i[3]>>>16,i[1]&4294901760|i[2]&65535,i[0]<<16|i[0]>>>16,i[2]&4294901760|i[3]&65535,i[1]<<16|i[1]>>>16,i[3]&4294901760|i[0]&65535];this._b=0;for(var k=0;k<4;k++)t.call(this);for(var k=0;k<8;k++)y[k]^=u[k+4&7];if(m){var V=m.words,d=V[0],p=V[1],f=(d<<8|d>>>24)&16711935|(d<<24|d>>>8)&4278255360,C=(p<<8|p>>>24)&16711935|(p<<24|p>>>8)&4278255360,b=f>>>16|C&4294901760,A=C<<16|f&65535;y[0]^=f,y[1]^=b,y[2]^=C,y[3]^=A,y[4]^=f,y[5]^=b,y[6]^=C,y[7]^=A;for(var k=0;k<4;k++)t.call(this)}},_doProcessBlock:function(i,m){var u=this._X;t.call(this),c[0]=u[0]^u[5]>>>16^u[3]<<16,c[1]=u[2]^u[7]>>>16^u[5]<<16,c[2]=u[4]^u[1]>>>16^u[7]<<16,c[3]=u[6]^u[3]>>>16^u[1]<<16;for(var y=0;y<4;y++)c[y]=(c[y]<<8|c[y]>>>24)&16711935|(c[y]<<24|c[y]>>>8)&4278255360,i[m+y]^=c[y]},blockSize:128/32,ivSize:64/32});function t(){for(var i=this._X,m=this._C,u=0;u<8;u++)x[u]=m[u];m[0]=m[0]+1295307597+this._b|0,m[1]=m[1]+3545052371+(m[0]>>>0<x[0]>>>0?1:0)|0,m[2]=m[2]+886263092+(m[1]>>>0<x[1]>>>0?1:0)|0,m[3]=m[3]+1295307597+(m[2]>>>0<x[2]>>>0?1:0)|0,m[4]=m[4]+3545052371+(m[3]>>>0<x[3]>>>0?1:0)|0,m[5]=m[5]+886263092+(m[4]>>>0<x[4]>>>0?1:0)|0,m[6]=m[6]+1295307597+(m[5]>>>0<x[5]>>>0?1:0)|0,m[7]=m[7]+3545052371+(m[6]>>>0<x[6]>>>0?1:0)|0,this._b=m[7]>>>0<x[7]>>>0?1:0;for(var u=0;u<8;u++){var y=i[u]+m[u],k=y&65535,V=y>>>16,d=((k*k>>>17)+k*V>>>15)+V*V,p=((y&4294901760)*y|0)+((y&65535)*y|0);s[u]=d^p}i[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,i[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,i[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,i[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,i[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,i[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,i[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,i[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}r.RabbitLegacy=l._createHelper(a)}(),o.RabbitLegacy})}(Ut)),Ut.exports}var Lt={exports:{}},Lo;function Zc(){return Lo||(Lo=1,function(g,h){(function(o,r,n){g.exports=r(Q(),De(),Ae(),Ce(),ce())})(K,function(o){return function(){var r=o,n=r.lib,l=n.BlockCipher,E=r.algo;const c=16,x=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var a={pbox:[],sbox:[]};function t(k,V){let d=V>>24&255,p=V>>16&255,f=V>>8&255,C=V&255,b=k.sbox[0][d]+k.sbox[1][p];return b=b^k.sbox[2][f],b=b+k.sbox[3][C],b}function i(k,V,d){let p=V,f=d,C;for(let b=0;b<c;++b)p=p^k.pbox[b],f=t(k,p)^f,C=p,p=f,f=C;return C=p,p=f,f=C,f=f^k.pbox[c],p=p^k.pbox[c+1],{left:p,right:f}}function m(k,V,d){let p=V,f=d,C;for(let b=c+1;b>1;--b)p=p^k.pbox[b],f=t(k,p)^f,C=p,p=f,f=C;return C=p,p=f,f=C,f=f^k.pbox[1],p=p^k.pbox[0],{left:p,right:f}}function u(k,V,d){for(let A=0;A<4;A++){k.sbox[A]=[];for(let $=0;$<256;$++)k.sbox[A][$]=s[A][$]}let p=0;for(let A=0;A<c+2;A++)k.pbox[A]=x[A]^V[p],p++,p>=d&&(p=0);let f=0,C=0,b=0;for(let A=0;A<c+2;A+=2)b=i(k,f,C),f=b.left,C=b.right,k.pbox[A]=f,k.pbox[A+1]=C;for(let A=0;A<4;A++)for(let $=0;$<256;$+=2)b=i(k,f,C),f=b.left,C=b.right,k.sbox[A][$]=f,k.sbox[A][$+1]=C;return!0}var y=E.Blowfish=l.extend({_doReset:function(){if(this._keyPriorReset!==this._key){var k=this._keyPriorReset=this._key,V=k.words,d=k.sigBytes/4;u(a,V,d)}},encryptBlock:function(k,V){var d=i(a,k[V],k[V+1]);k[V]=d.left,k[V+1]=d.right},decryptBlock:function(k,V){var d=m(a,k[V],k[V+1]);k[V]=d.left,k[V+1]=d.right},blockSize:64/32,keySize:128/32,ivSize:64/32});r.Blowfish=l._createHelper(y)}(),o.Blowfish})}(Lt)),Lt.exports}(function(g,h){(function(o,r,n){g.exports=r(Q(),Le(),Ac(),_c(),De(),Fc(),Ae(),uo(),gt(),$c(),vo(),wc(),Sc(),Ic(),Bt(),zc(),Ce(),ce(),Tc(),Pc(),Rc(),Mc(),Hc(),Oc(),Uc(),Lc(),Wc(),qc(),Gc(),jc(),Xc(),Yc(),Kc(),Jc(),Zc())})(K,function(o){return o})})(ro);var Qc=ro.exports;const We=kc(Qc),Wt="515745617364313233";function Wo(g,h=Wt){try{const o=We.enc.Hex.parse(g),r=We.enc.Base64.stringify(o);if(!r.startsWith("U2FsdGVkX1"))return{success:!1,error:"无效的授权码格式"};const l=We.AES.decrypt(r,h).toString(We.enc.Utf8);if(!l)return{success:!1,error:"授权码解密失败"};const E=l.split("|sv|");return{success:!0,company:E[0]||l,expiryDate:E[1],machineId:E[2],parts:E}}catch(o){return{success:!1,error:o instanceof Error?o.message:"解密异常"}}}function qo(g,h=Wt){if(!g||g.length<32)return!1;const o=Wo(g,h);if(!o.success)return!1;if(o.expiryDate){const r=new Date(o.expiryDate).getTime();if(new Date().getTime()>r)return console.warn("授权已过期"),!1}return!0}function ed(g,h=Wt){const o=Wo(g,h);return o.success?{company:o.company||"未知",expiryDate:o.expiryDate,isValid:qo(g,h)}:null}const td={key:0,class:"scada-footer"},od={key:1,class:"scada-footer"},nd={class:"footer-content"},ad={class:"footer-left"},rd={class:"copyright",style:{color:"#94a3b8 !important"}},ld={key:0,class:"divider",style:{color:"#475569 !important"}},sd={key:1,class:"license",style:{color:"#94a3b8 !important"}},id={key:0,class:"footer-right"},cd={class:"text",style:{color:"#94a3b8 !important"}},dd={key:2,class:"scada-footer"},pd={class:"footer-content"},xd={class:"footer-left"},fd={class:"authorized-text",style:{color:"#10b981 !important"}},md={class:"footer-right"},ud={key:0,class:"expiry-text",style:{color:"#94a3b8 !important"}},gd={key:1,class:"expiry-text",style:{color:"#94a3b8 !important"}},Ed=re(e.defineComponent({__name:"Footer",props:{authCode:{default:""},customFooter:{default:void 0}},setup(g){const h=g,o=e.ref(null),r=e.computed(()=>{if(!h.authCode)return!1;const n=qo(h.authCode);if(n){const l=ed(h.authCode);l&&(o.value=l,console.log("✅ 授权验证成功"),console.log("🏛️ 授权公司:",l.company),l.expiryDate?console.log("📅 有效期至:",l.expiryDate):console.log("∞ 永久授权"))}else o.value=null,console.warn("❌ 授权码验证失败");return n});return(n,l)=>{var E,c;return r.value?g.customFooter?(e.openBlock(),e.createElementBlock("footer",od,[e.createElementVNode("div",nd,[e.createElementVNode("div",ad,[e.createElementVNode("span",rd,e.toDisplayString(g.customFooter.copyright),1),g.customFooter.license?(e.openBlock(),e.createElementBlock("span",ld,"|")):e.createCommentVNode("",!0),g.customFooter.license?(e.openBlock(),e.createElementBlock("span",sd,e.toDisplayString(g.customFooter.license),1)):e.createCommentVNode("",!0)]),g.customFooter.contact?(e.openBlock(),e.createElementBlock("div",id,[e.createElementVNode("span",cd,e.toDisplayString(g.customFooter.contact),1)])):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("footer",dd,[e.createElementVNode("div",pd,[e.createElementVNode("div",xd,[l[1]||(l[1]=e.createElementVNode("span",{class:"authorized-icon"},"✅",-1)),e.createElementVNode("span",fd,"已授权: "+e.toDisplayString(((E=o.value)==null?void 0:E.company)||"未知"),1)]),e.createElementVNode("div",md,[(c=o.value)!=null&&c.expiryDate?(e.openBlock(),e.createElementBlock("span",ud," 📅 有效期至: "+e.toDisplayString(o.value.expiryDate),1)):(e.openBlock(),e.createElementBlock("span",gd," ∞ 永久授权 "))])])])):(e.openBlock(),e.createElementBlock("footer",td,[...l[0]||(l[0]=[e.createStaticVNode('<div class="footer-content" data-v-52b6d4b1><div class="footer-left" data-v-52b6d4b1><span class="copyright" style="color:#94a3b8 !important;" data-v-52b6d4b1>© 2025 leoncheng</span><span class="divider" style="color:#475569 !important;" data-v-52b6d4b1>|</span><span class="license" style="color:#94a3b8 !important;" data-v-52b6d4b1>仅供学习研究使用,禁止商业用途</span></div><div class="footer-right" data-v-52b6d4b1><div class="contact-item" data-v-52b6d4b1><span class="icon" data-v-52b6d4b1>📧</span><span class="text" style="color:#94a3b8 !important;" data-v-52b6d4b1>nywqs@outlook.com</span></div><span class="divider" style="color:#475569 !important;" data-v-52b6d4b1>|</span><div class="contact-item" data-v-52b6d4b1><span class="icon" data-v-52b6d4b1>📱</span><span class="text" style="color:#94a3b8 !important;" data-v-52b6d4b1>18637762001</span></div></div></div>',1)])]))}}}),[["__scopeId","data-v-52b6d4b1"]]);var Be=(g=>(g.START="start",g.END="end",g.GET_PROPERTY="getProperty",g.SET_PROPERTY="setProperty",g.CONDITION="condition",g.HTTP_REQUEST="httpRequest",g.CUSTOM_CODE="customCode",g.TIMER="timer",g.CLEAR_TIMER="clearTimer",g))(Be||{});const hd={class:"dialog-body"},vd={class:"search-box"},bd={class:"element-list"},yd=["onClick"],Cd={class:"element-icon"},Bd={class:"element-info"},kd={class:"element-name"},Nd={class:"element-type"},Vd={key:0,class:"element-check"},Dd={key:0,class:"empty-state"},Ad={class:"dialog-footer"},_d=["disabled"],Go=re(e.defineComponent({__name:"ElementSelector",props:{visible:{type:Boolean},elements:{default:()=>[]}},emits:["close","select"],setup(g,{emit:h}){const o=g,r=h,n=e.ref(""),l=e.ref(null),E=e.computed(()=>{if(!n.value)return o.elements;const a=n.value.toLowerCase();return o.elements.filter(t=>t.name.toLowerCase().includes(a)||t.id.toLowerCase().includes(a)||t.type.toLowerCase().includes(a))}),c=a=>{l.value=a},x=()=>{n.value="",l.value=null,r("close")},s=()=>{l.value&&(r("select",l.value),x())};return(a,t)=>g.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"element-selector-overlay",onClick:x},[e.createElementVNode("div",{class:"element-selector-dialog",onClick:t[1]||(t[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",{class:"dialog-header"},[t[2]||(t[2]=e.createElementVNode("h3",null,"选择图元",-1)),e.createElementVNode("button",{class:"btn-close",onClick:x},"×")]),e.createElementVNode("div",hd,[e.createElementVNode("div",vd,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":t[0]||(t[0]=i=>n.value=i),type:"text",placeholder:"搜索图元名称或ID..."},null,512),[[e.vModelText,n.value]])]),e.createElementVNode("div",bd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value,i=>{var m,u;return e.openBlock(),e.createElementBlock("div",{key:i.id,class:e.normalizeClass(["element-item",{active:((m=l.value)==null?void 0:m.id)===i.id}]),onClick:y=>c(i)},[e.createElementVNode("div",Cd,e.toDisplayString(i.icon),1),e.createElementVNode("div",Bd,[e.createElementVNode("div",kd,e.toDisplayString(i.name),1),e.createElementVNode("div",Nd,e.toDisplayString(i.type),1)]),((u=l.value)==null?void 0:u.id)===i.id?(e.openBlock(),e.createElementBlock("div",Vd," ✓ ")):e.createCommentVNode("",!0)],10,yd)}),128)),E.value.length===0?(e.openBlock(),e.createElementBlock("div",Dd,[...t[3]||(t[3]=[e.createElementVNode("p",null,"未找到图元",-1),e.createElementVNode("p",{class:"empty-hint"},"请尝试其他搜索关键词",-1)])])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Ad,[e.createElementVNode("button",{class:"btn-secondary",onClick:x},"取消"),e.createElementVNode("button",{class:"btn-primary",disabled:!l.value,onClick:s}," 确定 ",8,_d)])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-882704dd"]]),Fd={class:"node-config"},$d={class:"config-group"},wd={class:"element-selector"},Sd={class:"config-group"},Id=["disabled"],zd=["value"],Td=re(e.defineComponent({__name:"GetPropertyConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(g,{emit:h}){const o=g,r=h,n=e.reactive({elementId:o.modelValue.elementId||"",propertyName:o.modelValue.propertyName||""}),l=e.ref(""),E=e.ref(!1),c=e.ref([]),x=e.inject("canvasElementService"),s=e.computed(()=>{if(!n.elementId)return[];const m=c.value.find(u=>u.id===n.elementId);return(m==null?void 0:m.properties)||[]}),a=()=>{r("update:modelValue",{...n})},t=()=>{x&&(c.value=x.getElements()),E.value=!0},i=m=>{n.elementId=m.id,l.value=m.name,n.propertyName="",a()};return e.onMounted(()=>{if(x&&(c.value=x.getElements()),n.elementId){const m=c.value.find(u=>u.id===n.elementId);m&&(l.value=m.name)}}),(m,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",Fd,[e.createElementVNode("div",$d,[u[3]||(u[3]=e.createElementVNode("label",null,"图元选择",-1)),e.createElementVNode("div",wd,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=y=>l.value=y),type:"text",placeholder:"点击选择按钮从画布中选择图元",readonly:""},null,512),[[e.vModelText,l.value]]),e.createElementVNode("button",{class:"btn-select",onClick:t}," 选择图元 ")])]),e.createElementVNode("div",Sd,[u[5]||(u[5]=e.createElementVNode("label",null,"属性选择",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":u[1]||(u[1]=y=>n.propertyName=y),onChange:a,disabled:!n.elementId},[u[4]||(u[4]=e.createElementVNode("option",{value:""},"请先选择图元",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,y=>(e.openBlock(),e.createElementBlock("option",{key:y.key,value:y.key},e.toDisplayString(y.label),9,zd))),128))],40,Id),[[e.vModelSelect,n.propertyName]])])]),e.createVNode(Go,{visible:E.value,elements:c.value,onClose:u[2]||(u[2]=y=>E.value=!1),onSelect:i},null,8,["visible","elements"])],64))}}),[["__scopeId","data-v-fa65eb56"]]),Pd={class:"node-config"},Rd={class:"config-group"},Md={class:"element-selector"},Hd={class:"config-group"},Od=["disabled"],Ud=["value"],Ld={class:"config-group"},Wd=re(e.defineComponent({__name:"SetPropertyConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(g,{emit:h}){const o=g,r=h,n=e.reactive({elementId:o.modelValue.elementId||"",propertyName:o.modelValue.propertyName||"",value:o.modelValue.value||""}),l=e.ref(""),E=e.ref(!1),c=e.ref([]),x=e.inject("canvasElementService"),s=e.computed(()=>{if(!n.elementId)return[];const m=c.value.find(u=>u.id===n.elementId);return(m==null?void 0:m.properties)||[]}),a=()=>{r("update:modelValue",{...n})},t=()=>{x&&(c.value=x.getElements()),E.value=!0},i=m=>{n.elementId=m.id,l.value=m.name,n.propertyName="",a()};return e.onMounted(()=>{if(x&&(c.value=x.getElements()),n.elementId){const m=c.value.find(u=>u.id===n.elementId);m&&(l.value=m.name)}}),(m,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",Pd,[e.createElementVNode("div",Rd,[u[4]||(u[4]=e.createElementVNode("label",null,"图元选择",-1)),e.createElementVNode("div",Md,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=y=>l.value=y),type:"text",placeholder:"点击选择按钮从画布中选择图元",readonly:""},null,512),[[e.vModelText,l.value]]),e.createElementVNode("button",{class:"btn-select",onClick:t}," 选择图元 ")])]),e.createElementVNode("div",Hd,[u[6]||(u[6]=e.createElementVNode("label",null,"属性选择",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":u[1]||(u[1]=y=>n.propertyName=y),onChange:a,disabled:!n.elementId},[u[5]||(u[5]=e.createElementVNode("option",{value:""},"请先选择图元",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,y=>(e.openBlock(),e.createElementBlock("option",{key:y.key,value:y.key},e.toDisplayString(y.label),9,Ud))),128))],40,Od),[[e.vModelSelect,n.propertyName]])]),e.createElementVNode("div",Ld,[u[7]||(u[7]=e.createElementVNode("label",null,"属性值",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[2]||(u[2]=y=>n.value=y),type:"text",placeholder:"请输入属性值",onInput:a},null,544),[[e.vModelText,n.value]])])]),e.createVNode(Go,{visible:E.value,elements:c.value,onClose:u[3]||(u[3]=y=>E.value=!1),onSelect:i},null,8,["visible","elements"])],64))}}),[["__scopeId","data-v-42e029d4"]]),qd={class:"node-config"},Gd={class:"config-group"},jd={class:"config-group"},Xd={class:"branches-section"},Yd={class:"branch-list"},Kd={class:"branch-header"},Jd={class:"branch-number"},Zd=["onClick"],Qd={key:0,class:"branch-config"},e1={class:"config-row"},t1=["onUpdate:modelValue"],o1={key:0,class:"config-row"},n1=["onUpdate:modelValue"],a1={key:1,class:"config-row"},r1=["onUpdate:modelValue","type"],l1={key:1,class:"default-branch-label"},s1=re(e.defineComponent({__name:"ConditionConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(g,{emit:h}){const o=g,r=h,n=()=>`branch_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,l=()=>o.modelValue.branches&&o.modelValue.branches.length>0?o.modelValue.branches:(o.modelValue.dataType||"boolean")==="boolean"?[{id:n(),label:"True",value:!0},{id:n(),label:"False",value:!1,isDefault:!0}]:[{id:n(),label:"分支1",operator:"eq",value:""},{id:n(),label:"默认",isDefault:!0}],E=e.reactive({sourceNodeId:o.modelValue.sourceNodeId||"prev",dataType:o.modelValue.dataType||"boolean",branches:l()}),c=()=>{r("update:modelValue",{...E})},x=()=>{E.dataType==="boolean"?E.branches=[{id:n(),label:"True",value:!0},{id:n(),label:"False",value:!1,isDefault:!0}]:E.branches=[{id:n(),label:"分支1",operator:"eq",value:""},{id:n(),label:"默认",isDefault:!0}],c()},s=()=>{const t={id:n(),label:`分支${E.branches.length}`,operator:"eq",value:""},i=E.branches.findIndex(m=>m.isDefault);i>-1?E.branches.splice(i,0,t):E.branches.push(t),c()},a=t=>{E.branches.length>2&&(E.branches.splice(t,1),c())};return(t,i)=>(e.openBlock(),e.createElementBlock("div",qd,[e.createElementVNode("div",Gd,[i[3]||(i[3]=e.createElementVNode("label",null,"数据来源节点",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":i[0]||(i[0]=m=>E.sourceNodeId=m),onChange:c},[...i[2]||(i[2]=[e.createElementVNode("option",{value:""},"请选择数据来源节点",-1),e.createElementVNode("option",{value:"prev"},"上一个节点",-1)])],544),[[e.vModelSelect,E.sourceNodeId]])]),e.createElementVNode("div",jd,[i[5]||(i[5]=e.createElementVNode("label",null,"数据类型",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":i[1]||(i[1]=m=>E.dataType=m),onChange:x},[...i[4]||(i[4]=[e.createElementVNode("option",{value:"boolean"},"布尔类型",-1),e.createElementVNode("option",{value:"number"},"数字类型",-1),e.createElementVNode("option",{value:"string"},"字符串类型",-1),e.createElementVNode("option",{value:"any"},"自定义",-1)])],544),[[e.vModelSelect,E.dataType]])]),e.createElementVNode("div",Xd,[e.createElementVNode("div",{class:"section-header"},[i[6]||(i[6]=e.createElementVNode("label",null,"条件分支",-1)),e.createElementVNode("button",{class:"btn-add",onClick:s},"添加分支")]),e.createElementVNode("div",Yd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.branches,(m,u)=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"branch-item"},[e.createElementVNode("div",Kd,[e.createElementVNode("span",Jd,"分支 "+e.toDisplayString(u+1),1),!m.isDefault&&E.branches&&E.branches.length>1?(e.openBlock(),e.createElementBlock("button",{key:0,class:"btn-remove",onClick:y=>a(u)},"×",8,Zd)):e.createCommentVNode("",!0)]),m.isDefault?(e.openBlock(),e.createElementBlock("div",l1," 默认分支(其他情况) ")):(e.openBlock(),e.createElementBlock("div",Qd,[e.createElementVNode("div",e1,[i[7]||(i[7]=e.createElementVNode("label",null,"分支标签",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y=>m.label=y,type:"text",placeholder:"如: >10, =A, True",onInput:c},null,40,t1),[[e.vModelText,m.label]])]),E.dataType!=="boolean"?(e.openBlock(),e.createElementBlock("div",o1,[i[9]||(i[9]=e.createElementVNode("label",null,"运算符",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":y=>m.operator=y,onChange:c},[...i[8]||(i[8]=[e.createStaticVNode('<option value="eq" data-v-15975920>等于 (==)</option><option value="ne" data-v-15975920>不等于 (!=)</option><option value="gt" data-v-15975920>大于 (&gt;)</option><option value="gte" data-v-15975920>大于等于 (&gt;=)</option><option value="lt" data-v-15975920>小于 (&lt;)</option><option value="lte" data-v-15975920>小于等于 (&lt;=)</option><option value="contains" data-v-15975920>包含</option><option value="notContains" data-v-15975920>不包含</option>',8)])],40,n1),[[e.vModelSelect,m.operator]])])):e.createCommentVNode("",!0),E.dataType!=="boolean"?(e.openBlock(),e.createElementBlock("div",a1,[i[10]||(i[10]=e.createElementVNode("label",null,"比较值",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y=>m.value=y,type:E.dataType==="number"?"number":"text",placeholder:"请输入比较值",onInput:c},null,40,r1),[[e.vModelDynamic,m.value]])])):e.createCommentVNode("",!0)]))]))),128))])])]))}}),[["__scopeId","data-v-15975920"]]),i1={class:"node-config"},c1={class:"config-group"},d1={class:"config-group"},p1={class:"config-group"},x1={class:"config-group"},f1={class:"config-group"},m1=re(e.defineComponent({__name:"HttpRequestConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(g,{emit:h}){const o=g,r=h,n=e.reactive({url:o.modelValue.url||"",method:o.modelValue.method||"GET",headers:o.modelValue.headers||{},body:o.modelValue.body||"",outputVariable:o.modelValue.outputVariable||""}),l=e.ref(JSON.stringify(n.headers,null,2)),E=()=>{r("update:modelValue",{...n})},c=()=>{try{n.headers=JSON.parse(l.value),E()}catch{}};return e.watch(()=>o.modelValue.headers,x=>{x&&(l.value=JSON.stringify(x,null,2))}),(x,s)=>(e.openBlock(),e.createElementBlock("div",i1,[e.createElementVNode("div",c1,[s[5]||(s[5]=e.createElementVNode("label",null,"请求URL",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":s[0]||(s[0]=a=>n.url=a),type:"text",placeholder:"请输入请求URL",onInput:E},null,544),[[e.vModelText,n.url]])]),e.createElementVNode("div",d1,[s[7]||(s[7]=e.createElementVNode("label",null,"请求方法",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":s[1]||(s[1]=a=>n.method=a),onChange:E},[...s[6]||(s[6]=[e.createElementVNode("option",{value:"GET"},"GET",-1),e.createElementVNode("option",{value:"POST"},"POST",-1),e.createElementVNode("option",{value:"PUT"},"PUT",-1),e.createElementVNode("option",{value:"DELETE"},"DELETE",-1)])],544),[[e.vModelSelect,n.method]])]),e.createElementVNode("div",p1,[s[8]||(s[8]=e.createElementVNode("label",null,"请求头 (JSON格式)",-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":s[2]||(s[2]=a=>l.value=a),rows:"3",placeholder:'{"Content-Type": "application/json"}',onInput:c},null,544),[[e.vModelText,l.value]])]),e.createElementVNode("div",x1,[s[9]||(s[9]=e.createElementVNode("label",null,"请求体",-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":s[3]||(s[3]=a=>n.body=a),rows:"4",placeholder:"请输入请求体内容",onInput:E},null,544),[[e.vModelText,n.body]])]),e.createElementVNode("div",f1,[s[10]||(s[10]=e.createElementVNode("label",null,"输出变量",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":s[4]||(s[4]=a=>n.outputVariable=a),type:"text",placeholder:"请输入输出变量名",onInput:E},null,544),[[e.vModelText,n.outputVariable]])])]))}}),[["__scopeId","data-v-4c312eea"]]),u1={class:"node-config"},g1={class:"config-group"},E1=re(e.defineComponent({__name:"CustomCodeConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(g,{emit:h}){const o=g,r=h,n=e.reactive({code:o.modelValue.code||""}),l=()=>{r("update:modelValue",{...n})};return(E,c)=>(e.openBlock(),e.createElementBlock("div",u1,[e.createElementVNode("div",g1,[c[1]||(c[1]=e.createElementVNode("label",null,"JavaScript代码",-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":c[0]||(c[0]=x=>n.code=x),rows:"10",placeholder:"请输入JavaScript代码",onInput:l},null,544),[[e.vModelText,n.code]])]),c[2]||(c[2]=e.createElementVNode("div",{class:"code-hint"},[e.createElementVNode("p",null,"提示:"),e.createElementVNode("ul",null,[e.createElementVNode("li",null,"可以使用 context 对象访问上下文变量"),e.createElementVNode("li",null,"使用 return 返回结果")])],-1))]))}}),[["__scopeId","data-v-f7115383"]]),h1={class:"node-config"},v1={class:"config-group"},b1={class:"config-group"},y1=re(e.defineComponent({__name:"TimerConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(g,{emit:h}){const o=g,r=h,n=e.reactive({interval:o.modelValue.interval||1e3,unit:o.modelValue.unit||"ms"}),l=()=>{r("update:modelValue",{...n})};return(E,c)=>(e.openBlock(),e.createElementBlock("div",h1,[e.createElementVNode("div",v1,[c[2]||(c[2]=e.createElementVNode("label",null,"时间间隔",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[0]||(c[0]=x=>n.interval=x),type:"number",min:"1",placeholder:"请输入时间间隔",onInput:l},null,544),[[e.vModelText,n.interval,void 0,{number:!0}]])]),e.createElementVNode("div",b1,[c[4]||(c[4]=e.createElementVNode("label",null,"时间单位",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":c[1]||(c[1]=x=>n.unit=x),onChange:l},[...c[3]||(c[3]=[e.createElementVNode("option",{value:"ms"},"毫秒 (ms)",-1),e.createElementVNode("option",{value:"s"},"秒 (s)",-1),e.createElementVNode("option",{value:"m"},"分钟 (m)",-1),e.createElementVNode("option",{value:"h"},"小时 (h)",-1)])],544),[[e.vModelSelect,n.unit]])])]))}}),[["__scopeId","data-v-323381bc"]]),C1={class:"node-config"},B1={class:"config-group"},k1=["value"],N1={key:0,class:"timer-hint warning"},V1={key:1,class:"timer-hint"},D1=re(e.defineComponent({__name:"ClearTimerConfig",props:{modelValue:{}},emits:["update:modelValue"],setup(g,{emit:h}){const o=g,r=h,n=e.reactive({timerId:o.modelValue.timerId||""}),l=e.ref([]),E=e.inject("getGraph"),c=()=>{if(!E)return[];const s=E();if(!s)return[];const a=s.getNodes(),t=[];return a.forEach(i=>{const m=i.getData();if((m==null?void 0:m.nodeType)==="timer"){const u=i.getAttrByPath("label/text")||"定时器";t.push({id:i.id,label:u})}}),t};e.onMounted(()=>{l.value=c()}),e.watch(()=>o.modelValue,()=>{l.value=c()},{deep:!0});const x=()=>{r("update:modelValue",{...n})};return(s,a)=>(e.openBlock(),e.createElementBlock("div",C1,[e.createElementVNode("div",B1,[a[2]||(a[2]=e.createElementVNode("label",null,"选择定时器节点",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":a[0]||(a[0]=t=>n.timerId=t),onChange:x},[a[1]||(a[1]=e.createElementVNode("option",{value:""},"请选择要清除的定时器",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,t=>(e.openBlock(),e.createElementBlock("option",{key:t.id,value:t.id},e.toDisplayString(t.label),9,k1))),128))],544),[[e.vModelSelect,n.timerId]])]),l.value.length===0?(e.openBlock(),e.createElementBlock("div",N1,[...a[3]||(a[3]=[e.createElementVNode("p",null,"提示:当前流程中没有定时器节点",-1)])])):(e.openBlock(),e.createElementBlock("div",V1,[...a[4]||(a[4]=[e.createElementVNode("p",null,"提示:选择要清除的定时器节点",-1)])]))]))}}),[["__scopeId","data-v-d102fb63"]]),A1={[Be.GET_PROPERTY]:Td,[Be.SET_PROPERTY]:Wd,[Be.CONDITION]:s1,[Be.HTTP_REQUEST]:m1,[Be.CUSTOM_CODE]:E1,[Be.TIMER]:y1,[Be.CLEAR_TIMER]:D1};function _1(g){return A1[g]||null}const F1={class:"property-panel"},$1={key:0,class:"property-content"},w1={class:"property-group"},S1=["value"],I1={class:"property-group"},z1=["value"],T1={key:0,class:"divider"},P1={key:1,class:"property-empty"},R1=re(e.defineComponent({__name:"PropertyPanel",props:{selectedCell:{}},emits:["update:label","update:config"],setup(g,{emit:h}){const o=g,r=h,n=()=>{var a,t,i;return((i=(t=(a=o.selectedCell)==null?void 0:a.cell)==null?void 0:t.model)==null?void 0:i.graph)||null};e.provide("getGraph",n);const l=e.ref({}),E=e.computed(()=>o.selectedCell?_1(o.selectedCell.nodeType):null);e.watch(()=>o.selectedCell,a=>{if(a!=null&&a.cell){const t=a.cell.getData();l.value=(t==null?void 0:t.config)||{}}else l.value={}},{immediate:!0});const c=a=>{const t=a.target;r("update:label",t.value)},x=a=>{var t;if(l.value=a,(t=o.selectedCell)!=null&&t.cell){const i=o.selectedCell.cell.getData()||{};o.selectedCell.cell.setData({...i,config:a}),o.selectedCell.nodeType==="condition"&&a.branches&&s(a.branches)}r("update:config",a)},s=a=>{var S,B;if(!((S=o.selectedCell)!=null&&S.cell))return;const t=o.selectedCell.cell,i=(B=t.model)==null?void 0:B.graph;if(!i)return;const m=[];i.getConnectedEdges(t,{outgoing:!0}).forEach(N=>{const w=N.getSourcePortId(),I=N.getTargetCell(),R=N.getTargetPortId();w&&I&&m.push({sourcePortId:w,targetCell:I,targetPortId:R})});const y=m.length>0?m[0].targetCell:null,k=m.length>0?m[0].targetPortId:"port-in";t.getPorts().forEach(N=>{N.group==="out"&&t.removePort(N.id)});const d=30,p=60,f=Math.max(a.length,1),C=Math.max(p,f*d),b=t.size(),A=t.position(),$=C-b.height;$!==0&&t.position(A.x,A.y-$/2),t.resize(b.width,C),a.forEach((N,w)=>{t.addPort({id:`port-out-${w}`,group:"out",attrs:{circle:{r:5,magnet:!0,stroke:"#34d399",strokeWidth:2,fill:"#1e293b"},portLabel:{text:N.label||`分支${w+1}`,fontSize:10,fill:"#94a3b8"}}})}),setTimeout(()=>{y&&a.forEach((N,w)=>{i.addEdge({source:{cell:t,port:`port-out-${w}`},target:{cell:y,port:k},labels:[{attrs:{label:{text:N.label||`分支${w+1}`,fill:"#e2e8f0",fontSize:12},rect:{fill:"#334155",stroke:"#34d399",strokeWidth:1,rx:4,ry:4}},position:.5}]})})},100)};return(a,t)=>(e.openBlock(),e.createElementBlock("div",F1,[t[4]||(t[4]=e.createElementVNode("h3",null,"属性配置",-1)),g.selectedCell?(e.openBlock(),e.createElementBlock("div",$1,[e.createElementVNode("div",w1,[t[1]||(t[1]=e.createElementVNode("label",null,"节点名称",-1)),e.createElementVNode("input",{value:g.selectedCell.label,type:"text",placeholder:"输入节点名称",onInput:c},null,40,S1)]),e.createElementVNode("div",I1,[t[2]||(t[2]=e.createElementVNode("label",null,"节点类型",-1)),e.createElementVNode("input",{value:g.selectedCell.nodeType,type:"text",readonly:"",disabled:""},null,8,z1)]),E.value?(e.openBlock(),e.createElementBlock("div",T1)):e.createCommentVNode("",!0),E.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(E.value),{key:1,modelValue:l.value,"onUpdate:modelValue":[t[0]||(t[0]=i=>l.value=i),x]},null,8,["modelValue"])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",P1,[...t[3]||(t[3]=[e.createElementVNode("div",{class:"empty-text"},"选择节点以配置属性",-1)])]))]))}}),[["__scopeId","data-v-8304acbc"]]),M1={class:"toolbar"},H1={class:"toolbar-right"},O1=re(e.defineComponent({__name:"WorkflowToolbar",props:{showClose:{type:Boolean}},emits:["clear","validate","save","close"],setup(g){return(h,o)=>(e.openBlock(),e.createElementBlock("div",M1,[o[5]||(o[5]=e.createElementVNode("div",{class:"toolbar-left"},[e.createElementVNode("h2",null,"流程编排")],-1)),e.createElementVNode("div",H1,[e.createElementVNode("button",{class:"btn-secondary",onClick:o[0]||(o[0]=r=>h.$emit("clear"))},"清空"),e.createElementVNode("button",{class:"btn-secondary",onClick:o[1]||(o[1]=r=>h.$emit("validate"))},"验证"),e.createElementVNode("button",{class:"btn-primary",onClick:o[2]||(o[2]=r=>h.$emit("save"))},"保存"),g.showClose?(e.openBlock(),e.createElementBlock("button",{key:0,class:"btn-close",onClick:o[3]||(o[3]=r=>h.$emit("close")),title:"关闭"},[...o[4]||(o[4]=[e.createElementVNode("span",{class:"close-icon"},"×",-1)])])):e.createCommentVNode("",!0)])]))}}),[["__scopeId","data-v-b3e0a4fc"]]),U1={class:"menu-header"},L1={class:"menu-list"},W1=["onClick"],q1={class:"menu-item-info"},G1={class:"menu-item-name"},j1={class:"menu-item-desc"},X1=re(e.defineComponent({__name:"AddNodeMenu",props:{visible:{type:Boolean},position:{},nodeTypes:{}},emits:["close","select"],setup(g,{emit:h}){const o=g,r=h,n=e.computed(()=>o.nodeTypes.filter(E=>E.type!=="start"&&E.type!=="end")),l=E=>{r("select",E)};return(E,c)=>(e.openBlock(),e.createElementBlock("div",null,[g.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"menu-overlay",onClick:c[0]||(c[0]=x=>E.$emit("close"))})):e.createCommentVNode("",!0),g.visible?(e.openBlock(),e.createElementBlock("div",{key:1,class:"add-node-menu",style:e.normalizeStyle({left:g.position.x+"px",top:g.position.y+"px"})},[e.createElementVNode("div",U1,[c[2]||(c[2]=e.createElementVNode("span",null,"选择节点类型",-1)),e.createElementVNode("button",{class:"btn-close",onClick:c[1]||(c[1]=x=>E.$emit("close"))},"×")]),e.createElementVNode("div",L1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.type,class:"menu-item",onClick:s=>l(x)},[e.createElementVNode("div",{class:e.normalizeClass(["menu-item-icon",`node-icon-${x.type}`])},e.toDisplayString(x.icon),3),e.createElementVNode("div",q1,[e.createElementVNode("div",G1,e.toDisplayString(x.name),1),e.createElementVNode("div",j1,e.toDisplayString(x.description),1)])],8,W1))),128))])],4)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-aa6fccf8"]]);class Y1{constructor(){Ue(this,"graph",null)}setGraph(h){this.graph=h}getElements(){return this.graph?this.graph.getNodes().map(o=>{const r=o.getData()||{},n=r.type||o.shape,l=Pe.getComponent(n),E=this.getElementProperties(o,l);return{id:o.id,name:r.componentName||o.getAttrByPath("label/text")||`图元_${o.id.slice(0,8)}`,type:(l==null?void 0:l.metadata.name)||n,icon:(l==null?void 0:l.metadata.icon)||"📦",properties:E}}):(console.warn("画布实例未初始化"),[])}getElementProperties(h,o){const r=[],n=new Set;return o!=null&&o.props&&o.props.forEach(l=>{const E=l.path.split("."),c=E[E.length-1];c&&!n.has(c)&&(r.push({key:c,label:l.label||c}),n.add(c))}),r}getElementById(h){return this.getElements().find(r=>r.id===h)||null}searchElements(h){const o=this.getElements(),r=h.toLowerCase();return o.filter(n=>n.name.toLowerCase().includes(r)||n.id.toLowerCase().includes(r)||n.type.toLowerCase().includes(r))}}const jo=new Y1,K1={class:"workflow-editor"},J1={class:"editor-main"},Z1={class:"canvas-area"},Q1=re(e.defineComponent({__name:"WorkflowEditor",props:{scadaGraph:{default:null},showClose:{type:Boolean,default:!1}},emits:["close"],setup(g){const h=g,o=e.ref([{type:"start",name:"开始",icon:"▶",description:"流程起点",color:"#52c41a"},{type:"end",name:"结束",icon:"⏹",description:"流程终点",color:"#ff4d4f"},{type:"getProperty",name:"获取图元属性",icon:"📥",description:"获取图元的属性值",color:"#1890ff"},{type:"setProperty",name:"设置图元属性",icon:"📤",description:"设置图元的属性值",color:"#13c2c2"},{type:"condition",name:"条件节点",icon:"◆",description:"条件分支判断",color:"#faad14"},{type:"httpRequest",name:"http请求",icon:"🌐",description:"HTTP网络请求",color:"#722ed1"},{type:"customCode",name:"自定义代码",icon:"💻",description:"执行自定义JavaScript代码",color:"#eb2f96"},{type:"timer",name:"定时器节点",icon:"⏰",description:"设置定时执行",color:"#52c41a"},{type:"clearTimer",name:"清除定时器",icon:"🗑",description:"清除定时器",color:"#ff4d4f"}]),r=e.ref();let n=null;h.scadaGraph&&jo.setGraph(h.scadaGraph),e.provide("canvasElementService",jo);const l=e.ref(null),E=e.ref(!1),c=e.ref({x:0,y:0});let x=null;const s=()=>{o.value.forEach(p=>{const f={inherit:"rect",width:150,height:60,markup:[{tagName:"rect",selector:"body"},{tagName:"text",selector:"icon"},{tagName:"text",selector:"label"}],attrs:{body:{strokeWidth:1,stroke:p.color,fill:"#ffffff",rx:6,ry:6},icon:{text:p.icon,fontSize:24,fill:p.color,refX:20,refY:"50%",textAnchor:"middle",textVerticalAnchor:"middle"},label:{text:p.name,fontSize:14,fill:"#333333",refX:75,refY:"50%",textAnchor:"middle",textVerticalAnchor:"middle"}},ports:{groups:{in:{position:"left",attrs:{circle:{r:5,magnet:!0,stroke:"#10b981",strokeWidth:2,fill:"#1e293b"}}},out:{position:{name:"right"},attrs:{circle:{r:5,magnet:!0,stroke:"#10b981",strokeWidth:2,fill:"#1e293b"},portLabel:{fontSize:10,fill:"#94a3b8"}},markup:[{tagName:"circle",selector:"circle"},{tagName:"text",selector:"portLabel"}],label:{position:{name:"right",args:{x:10,y:0}}}}},items:[]},data:{nodeType:p.type}};p.type==="start"?f.ports.items=[{id:"port-out",group:"out"}]:p.type==="end"?f.ports.items=[{id:"port-in",group:"in"}]:p.type==="condition"?f.ports.items=[{id:"port-in",group:"in"},{id:"port-out-0",group:"out",args:{text:"True"}},{id:"port-out-1",group:"out",args:{text:"False"}}]:f.ports.items=[{id:"port-in",group:"in"},{id:"port-out",group:"out"}],ge.Graph.registerNode(p.type,f,!0)})},a=()=>{if(!r.value)return;s(),n=new ge.Graph({container:r.value,width:r.value.clientWidth,height:r.value.clientHeight,grid:{size:10,visible:!0,type:"dot",args:{color:"#333",thickness:1}},panning:{enabled:!0,modifiers:"shift"},mousewheel:{enabled:!0,modifiers:["ctrl","meta"]},connecting:{router:"manhattan",connector:{name:"rounded",args:{radius:8}},anchor:"center",connectionPoint:"anchor",snap:{radius:20},allowBlank:!1,allowLoop:!1,allowNode:!1,createEdge(){return new ge.Shape.Edge({attrs:{line:{stroke:"#64748b",strokeWidth:3,targetMarker:{name:"block",width:12,height:8,fill:"#64748b"}}},zIndex:0})},validateConnection({targetMagnet:f}){return!!f}},highlighting:{magnetAvailable:{name:"stroke",args:{attrs:{fill:"#34d399",stroke:"#34d399"}}}}}),n.use(new Gt.Selection({enabled:!0,rubberband:!1,showNodeSelectionBox:!0,showEdgeSelectionBox:!0,multiple:!0,movable:!0,strict:!1}));const p=f=>{var C;if(console.log("键盘事件触发:",f.key,"selectedCell存在:",!!l.value),f.key==="Delete"||f.key==="Backspace"){if(!n){console.log("graph不存在,无法删除");return}if((C=l.value)!=null&&C.cell){f.preventDefault();const A=l.value.cell;console.log("删除选中的节点:",l.value.label);const $=n.getIncomingEdges(A),S=n.getOutgoingEdges(A);$&&$.length>0&&S&&S.length>0&&$.forEach(B=>{const N=B.getSourceCell(),w=B.getSourcePortId();S.forEach(I=>{const R=I.getTargetCell(),O=I.getTargetPortId();N&&R&&n&&(n.addEdge({source:{cell:N,port:w},target:{cell:R,port:O}}),console.log("已连接前后节点"))})}),n.removeCells([A]),l.value=null,console.log("已删除节点");return}const b=n.getSelectedCells();console.log("选中的cells数量:",b.length,b),b.length?(f.preventDefault(),n.removeCells(b),console.log("已删除cells")):console.log("没有选中的cells")}};document.addEventListener("keydown",p),n.on("node:click",({node:f})=>{var A;const C=f.getAttrByPath("label/text")||"",b=((A=f.getData())==null?void 0:A.nodeType)||f.shape||"";l.value={label:C,nodeType:b,cell:f},console.log("节点已点击,保存到selectedCell:",C)}),n.on("blank:click",()=>{l.value=null,n&&n.cleanSelection()}),n.on("edge:mouseenter",({edge:f})=>{f.setAttrs({line:{stroke:"#10b981",strokeWidth:4}}),f.addTools([{name:"button",args:{markup:[{tagName:"circle",selector:"button",attrs:{r:12,stroke:"#10b981",strokeWidth:2,fill:"#1e293b",cursor:"pointer"}},{tagName:"path",selector:"icon",attrs:{d:"M -5 0 L 5 0 M 0 -5 L 0 5",stroke:"#10b981",strokeWidth:2,fill:"none",pointerEvents:"none"}}],distance:.5,onClick:({e:C,view:b})=>{x=b.cell,E.value=!0,c.value={x:C.clientX,y:C.clientY}}}},{name:"vertices"}])}),n.on("edge:mouseleave",({edge:f})=>{f.setAttrs({line:{stroke:"#64748b",strokeWidth:3}}),f.removeTools()}),n.on("edge:connected",({isNew:f,edge:C})=>{f&&C.setAttrs({line:{stroke:"#64748b",strokeWidth:3}})}),n.on("node:selected",({node:f})=>{f.toFront()}),n.on("edge:selected",({edge:f})=>{f.toFront()}),t()},t=()=>{if(!n)return;const p=n.addNode({shape:"start",x:100,y:200,label:"开始",data:{nodeType:"start"}}),f=n.addNode({shape:"end",x:500,y:200,label:"结束",data:{nodeType:"end"}});n.addEdge({source:{cell:p,port:"port-out"},target:{cell:f,port:"port-in"}})},i=p=>{var f;(f=l.value)!=null&&f.cell&&(l.value.label=p,l.value.cell.setAttrByPath("label/text",p))},m=p=>{if(!n||!x)return;const f=x.getSourceCell(),C=x.getTargetCell();if(!f||!C)return;const b=f.position(),A=C.position(),$=(b.x+A.x)/2,S=(b.y+A.y)/2,B=n.addNode({shape:p.type,x:$,y:S,label:p.name,data:{nodeType:p.type}});x.remove(),n.addEdge({source:{cell:f,port:"port-out"},target:{cell:B,port:"port-in"}}),p.type==="condition"?(n.addEdge({source:{cell:B,port:"port-out-0"},target:{cell:C,port:"port-in"},labels:[{attrs:{label:{text:"True",fill:"#e2e8f0",fontSize:12},rect:{fill:"#334155",stroke:"#64748b",strokeWidth:1,rx:4,ry:4}},position:.5}]}),n.addEdge({source:{cell:B,port:"port-out-1"},target:{cell:C,port:"port-in"},labels:[{attrs:{label:{text:"False",fill:"#e2e8f0",fontSize:12},rect:{fill:"#334155",stroke:"#64748b",strokeWidth:1,rx:4,ry:4}},position:.5}]})):n.addEdge({source:{cell:B,port:"port-out"},target:{cell:C,port:"port-in"}}),E.value=!1,x=null},u=()=>{n&&n.clearCells()},y=()=>{if(!n)return console.log("画布不存在"),{errors:["画布不存在"],warnings:[]};const p=[],f=[],C=n.getNodes(),b=C.filter($=>{var S;return((S=$.getData())==null?void 0:S.nodeType)==="start"});return b.length===0?p.push("流程中缺少开始节点"):b.length>1&&f.push("流程中有多个开始节点"),C.filter($=>{var S;return((S=$.getData())==null?void 0:S.nodeType)==="end"}).length===0&&f.push("流程中缺少结束节点"),C.forEach($=>{const S=$.getData(),B=S==null?void 0:S.nodeType,N=(S==null?void 0:S.config)||{},w=$.getAttrByPath("label/text")||"未命名节点";(B==="getProperty"||B==="setProperty")&&(N.elementId||p.push(`节点「${w}」未配置图元`),N.propertyName||p.push(`节点「${w}」未配置属性`),B==="setProperty"&&!N.value&&f.push(`节点「${w}」未配置属性值`)),B==="httpRequest"&&(N.url||p.push(`节点「${w}」未配置请求URL`)),B==="condition"&&(!N.branches||N.branches.length===0)&&p.push(`节点「${w}」未配置条件分支`),B==="timer"&&(!N.interval||N.interval<=0)&&p.push(`节点「${w}」未配置有效的时间间隔`),B==="clearTimer"&&(N.timerId||p.push(`节点「${w}」未选择定时器`)),B==="customCode"&&(N.code||f.push(`节点「${w}」未编写代码`))}),C.forEach($=>{var N;const S=(N=$.getData())==null?void 0:N.nodeType,B=$.getAttrByPath("label/text")||"未命名节点";if(S==="start"&&n){const w=n.getOutgoingEdges($);(!w||w.length===0)&&p.push(`开始节点「${B}」没有连接到下一个节点`)}if(S==="end"&&n){const w=n.getOutgoingEdges($);w&&w.length>0&&f.push(`结束节点「${B}」不应该有输出连线`)}if(S!=="start"&&S!=="end"&&n){const w=n.getIncomingEdges($),I=n.getOutgoingEdges($);(!w||w.length===0)&&f.push(`节点「${B}」没有输入连线`),S!=="clearTimer"&&(!I||I.length===0)&&f.push(`节点「${B}」没有输出连线`)}}),n&&C.forEach($=>{var I;const S=n.getIncomingEdges($),B=n.getOutgoingEdges($),N=(I=$.getData())==null?void 0:I.nodeType,w=$.getAttrByPath("label/text")||"未命名节点";N!=="start"&&(!S||S.length===0)&&(!B||B.length===0)&&f.push(`节点「${w}」是孤立节点`)}),{errors:p,warnings:f}},k=()=>{const{errors:p,warnings:f}=y();if(p.length===0&&f.length===0)alert("✓ 流程验证通过!"),console.log("流程验证通过");else{let C="";p.length>0&&(C+=`错误:
40
- `+p.map(b=>" • "+b).join(`
41
- `)),f.length>0&&(C&&(C+=`
42
-
43
- `),C+=`警告:
44
- `+f.map(b=>" • "+b).join(`
45
- `)),alert(C),console.log("验证结果:",{errors:p,warnings:f})}},V=()=>{if(!n)return;const{errors:p,warnings:f}=y();if(p.length>0){let N=`流程验证失败,无法保存!
46
-
47
- `;N+=`错误:
48
- `+p.map(w=>" • "+w).join(`
49
- `),f.length>0&&(N+=`
34
+ `;B+=`错误:
35
+ `+N.map(T=>" • "+T).join(`
36
+ `),E.length>0&&(B+=`
50
37
 
51
38
  警告:
52
- `+f.map(w=>" • "+w).join(`
53
- `)),alert(N);return}if(f.length>0){let N=`流程存在以下警告:
39
+ `+E.map(T=>" • "+T).join(`
40
+ `)),alert(B);return}if(E.length>0){let B=`流程存在以下警告:
54
41
 
55
- `;if(N+=f.map(w=>" • "+w).join(`
56
- `),N+=`
42
+ `;if(B+=E.map(T=>" • "+T).join(`
43
+ `),B+=`
57
44
 
58
- 是否继续保存?`,!confirm(N))return}const C=prompt("请输入流程名称:","未命名流程");if(!C||!C.trim())return;const b=n.toJSON(),A=n.getNodes().map(N=>({id:N.id,shape:N.shape,position:N.getPosition(),size:N.getSize(),attrs:N.getAttrs(),data:N.getData()})),$=n.getEdges().map(N=>({id:N.id,source:N.getSourceCellId(),target:N.getTargetCellId(),attrs:N.getAttrs(),data:N.getData()})),B={id:"workflow_"+Date.now(),name:C.trim(),data:{...b,nodes:A,edges:$},createdAt:Date.now(),updatedAt:Date.now()};try{const N=localStorage.getItem("saved-workflows"),w=N?JSON.parse(N):[];w.push(B),localStorage.setItem("saved-workflows",JSON.stringify(w)),alert("✓ 流程保存成功!"),console.log("流程已保存:",B)}catch(N){console.error("保存流程失败:",N),alert("保存失败,请重试")}};e.onMounted(()=>{a(),window.addEventListener("resize",d)});const d=()=>{!n||!r.value||n.resize(r.value.clientWidth,r.value.clientHeight)};return e.onBeforeUnmount(()=>{window.removeEventListener("resize",d);const p=f=>{if(f.key==="Delete"||f.key==="Backspace"){if(!n)return;const C=n.getSelectedCells();C.length&&(f.preventDefault(),n.removeCells(C),l.value&&C.includes(l.value.cell)&&(l.value=null))}};document.removeEventListener("keydown",p),n&&n.dispose()}),(p,f)=>(e.openBlock(),e.createElementBlock("div",K1,[e.createVNode(O1,{"show-close":g.showClose,onClear:u,onValidate:k,onSave:V,onClose:f[0]||(f[0]=C=>p.$emit("close"))},null,8,["show-close"]),e.createElementVNode("div",J1,[e.createElementVNode("div",Z1,[e.createElementVNode("div",{id:"workflow-container",ref_key:"containerRef",ref:r},null,512)]),e.createVNode(R1,{"selected-cell":l.value,"onUpdate:label":i},null,8,["selected-cell"])]),e.createVNode(X1,{visible:E.value,position:c.value,"node-types":o.value,onClose:f[1]||(f[1]=C=>E.value=!1),onSelect:m},null,8,["visible","position","node-types"])]))}}),[["__scopeId","data-v-649349a2"]]),ep={key:0,class:"workflow-dialog-overlay"},tp={class:"workflow-dialog"},op=re(e.defineComponent({__name:"WorkflowDialog",props:{visible:{type:Boolean},scadaGraph:{default:null}},emits:["update:visible","close"],setup(g,{emit:h}){const o=g,r=h;e.watch(()=>o.visible,E=>{E?document.body.style.overflow="hidden":document.body.style.overflow=""});const n=()=>{r("update:visible",!1),r("close")},l=E=>{E.key==="Escape"&&o.visible&&n()};return typeof window<"u"&&window.addEventListener("keydown",l),(E,c)=>g.visible?(e.openBlock(),e.createElementBlock("div",ep,[e.createElementVNode("div",tp,[e.createVNode(Q1,{"scada-graph":g.scadaGraph,"show-close":!0,onClose:n},null,8,["scada-graph"])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-4e7f6ab7"]]);class np{constructor(){Ue(this,"animations",new Map)}startAnimation(h,o){if(!h||o.type==="none")return;this.stopAnimation(h.id);const r=h.id;let n=null;switch(o.type){case"blink":n=this.createBlinkAnimation(h,o);break;case"scale":n=this.createScaleAnimation(h,o);break;case"rotate":n=this.createRotateAnimation(h,o);break;case"float":n=this.createFloatAnimation(h,o);break;case"pulse":n=this.createPulseAnimation(h,o);break}n&&this.animations.set(r,n)}stopAnimation(h){const o=this.animations.get(h);o&&(o.stop&&o.stop(),o.intervalId&&clearInterval(o.intervalId),this.animations.delete(h))}createBlinkAnimation(h,o){const r=h.getAttrByPath("body/opacity")||1;let n=!0;const l=setInterval(()=>{n=!n,h.setAttrByPath("body/opacity",n?r:.2),o.loop||(clearInterval(l),h.setAttrByPath("body/opacity",r))},o.duration/2);return{intervalId:l,stop:()=>{clearInterval(l),h.setAttrByPath("body/opacity",r)}}}createScaleAnimation(h,o){const r=h.getSize();let n=!0;const l=.05;let E=1;const c=setInterval(()=>{n?(E+=l,E>=1.2&&(n=!1)):(E-=l,E<=.8&&(n=!0)),h.resize(r.width*E,r.height*E),!o.loop&&E>=.99&&E<=1.01&&(clearInterval(c),h.resize(r.width,r.height))},o.duration/20);return{intervalId:c,stop:()=>{clearInterval(c),h.resize(r.width,r.height)}}}createRotateAnimation(h,o){let r=0;const n=360/(o.duration/50),l=setInterval(()=>{r=(r+n)%360,h.rotate(r,{absolute:!0}),!o.loop&&r>=360&&(clearInterval(l),h.rotate(0,{absolute:!0}))},50);return{intervalId:l,stop:()=>{clearInterval(l),h.rotate(0,{absolute:!0})}}}createFloatAnimation(h,o){const r=h.position();let n=!0;const l=2;let E=r.y;const c=setInterval(()=>{n?(E-=l,E<=r.y-10&&(n=!1)):(E+=l,E>=r.y+10&&(n=!0)),h.position(r.x,E),!o.loop&&Math.abs(E-r.y)<1&&(clearInterval(c),h.position(r.x,r.y))},o.duration/40);return{intervalId:c,stop:()=>{clearInterval(c),h.position(r.x,r.y)}}}createPulseAnimation(h,o){const r=h.getAttrByPath("body/fill"),n=h.getAttrByPath("body/stroke");let l=0,E=!0;const c=setInterval(()=>{E?(l+=.1,l>=1&&(E=!1)):(l-=.1,l<=0&&(E=!0)),h.setAttrByPath("body/opacity",.5+l*.5),!o.loop&&l<=.05&&(clearInterval(c),h.setAttrByPath("body/fill",r),h.setAttrByPath("body/stroke",n),h.setAttrByPath("body/opacity",1))},o.duration/20);return{intervalId:c,stop:()=>{clearInterval(c),h.setAttrByPath("body/fill",r),h.setAttrByPath("body/stroke",n),h.setAttrByPath("body/opacity",1)}}}clearAll(){this.animations.forEach((h,o)=>{this.stopAnimation(o)}),this.animations.clear()}}const ke=new np,ap={class:"scada-layout","data-scada-theme":"dark"},rp={class:"scada-canvas-container"},Xo=re(e.defineComponent({name:"ScadaCanvas",inheritAttrs:!0,__name:"ScadaCanvas",props:{authCode:{default:""},customFooter:{default:void 0},previewMode:{type:Boolean,default:!1},onSave:{type:Function,default:void 0}},emits:["preview"],setup(g,{expose:h,emit:o}){const r=g,n=o,l=e.ref(null),E=e.ref(null),c=e.ref(null),x=e.ref(0),s=e.ref(null),a=e.ref(!1);let t=null;e.onMounted(()=>{var G,P;if(!((G=l.value)!=null&&G.containerRef))return;const v=J.getConfig();ge.Graph.registerEdge("animated-edge",{inherit:"edge",markup:[{tagName:"path",selector:"line",attrs:{fill:"none"}},{tagName:"path",selector:"wrap",attrs:{fill:"none",stroke:"transparent",strokeWidth:20}},{tagName:"circle",selector:"circle"}],attrs:{line:{connection:!0,stroke:"#10b981",strokeWidth:2,targetMarker:{name:"block",width:8,height:6}},wrap:{connection:!0,strokeLinecap:"round",strokeLinejoin:"round"}}},!0);const D=l.value.containerRef,_=v.size.width,F=v.size.height;if((q=>{D.style.width=`${_}px`,D.style.height=`${F}px`,D.style.transform=`scale(${q})`,D.style.transformOrigin="center center"})(v.zoom.scale),t=new ge.Graph({container:D,width:_,height:F,background:v.background.image?{color:v.background.color||"#1e293b",image:v.background.image,size:v.background.size||"cover",repeat:v.background.repeat||"no-repeat",position:"center"}:{color:v.background.color||"#1e293b"},grid:v.grid.enabled?{size:v.grid.size,visible:!0,type:v.grid.type||"dot",args:{color:v.grid.color||"#475569",thickness:1}}:!1,interacting:{nodeMovable:!r.previewMode},panning:{enabled:!0,modifiers:"shift"},mousewheel:{enabled:!0,modifiers:["ctrl","meta"]},connecting:{router:{name:"orth",args:{padding:10}},connector:{name:"rounded",args:{radius:8}},snap:v.magnetism.enabled?{radius:v.magnetism.threshold||10}:!1,allowBlank:!1,allowLoop:!1,allowNode:!1,allowEdge:!1,highlight:!0,createEdge(){return t.createEdge({shape:"animated-edge",zIndex:0})},validateConnection({targetMagnet:q}){return!!q}}}),r.previewMode||t.use(new Gt.Selection({enabled:!0,movable:!0,rubberband:!0,showNodeSelectionBox:!1,showEdgeSelectionBox:!1,multiple:!0,pointerEvents:"none"})),v.guides.enabled&&t.use(new nn.Snapline({enabled:!0,sharp:!0,clean:!0})),!r.previewMode){const q=eo(Ie.SCADA_EDITOR_DATA);if(((P=q==null?void 0:q.cells)==null?void 0:P.length)>0)try{const X=q.cells.map(te=>{var se;return te.position&&typeof te.position=="object"&&(typeof te.position.x!="number"||typeof te.position.y!="number")&&(te.position={x:100,y:100}),(te.shape==="edge"||te.shape==="animated-edge")&&(te.router==="manhattan"||((se=te.router)==null?void 0:se.name)==="manhattan")&&(te.router={name:"orth",args:{padding:10}}),te});t.fromJSON({cells:X}),t.getEdges().forEach(te=>{var ne;const se=te.getData();(ne=se==null?void 0:se.animation)!=null&&ne.enabled&&p(te,se.animation)})}catch(X){console.error("恢复画布数据失败,清空缓存:",X),sessionStorage.removeItem(Ie.SCADA_EDITOR_DATA)}}t.on("selection:changed",({selected:q})=>{var te,se;const X=q?q.filter(ne=>ne.isNode()):[];if(x.value=X.length,q&&q.length>0){const ne=q[0];if(ne.isNode())E.value=ne,c.value=null;else if(ne.isEdge()){c.value=ne,E.value=null;const ie=ne.getAttrs();ne.data={...ne.data,originalAttrs:ie},ne.attr("line/stroke","#3b82f6")}}else{if(c.value&&((te=c.value.data)!=null&&te.originalAttrs)){const ne=c.value.data.originalAttrs;c.value.attr("line/stroke",((se=ne.line)==null?void 0:se.stroke)||"#10b981")}E.value=null,c.value=null}}),t.on("edge:click",({edge:q})=>{t.select(q)}),t.on("blank:click",()=>{c.value=null,E.value=null}),t.on("node:change:position",()=>{}),t.on("node:change:size",()=>{}),t.on("node:change:data",({node:q})=>{const X=q.getData();if(X.animation)if(X.animation.enabled===!0){const te={type:X.animation.type||"none",duration:X.animation.duration||1e3,loop:X.animation.loop!==!1};ke.startAnimation(q,te)}else ke.stopAnimation(q.id)}),t.on("edge:change:data",({edge:q})=>{const X=q.getData();X!=null&&X.animation&&p(q,X.animation)});const L=q=>{if(q.key==="Delete"&&t){if(E.value){const X=E.value.id;ke.stopAnimation(X),t.removeNode(X),E.value=null}else if(c.value){const X=c.value.id;t.removeEdge(X),c.value=null}}};document.addEventListener("keydown",L),e.onUnmounted(()=>{document.removeEventListener("keydown",L)})}),e.onUnmounted(()=>{if(t){ke.clearAll();const v={cells:t.toJSON().cells};ot(Ie.SCADA_EDITOR_DATA,v),t.dispose()}}),e.watch(()=>J.getConfig(),v=>{var _;if(!t)return;v.background.image?t.drawBackground({color:v.background.color||"#1e293b",image:v.background.image,size:v.background.size||"cover",repeat:v.background.repeat||"no-repeat",position:"center"}):t.drawBackground({color:v.background.color||"#1e293b"});const D=(_=l.value)==null?void 0:_.containerRef;D&&(D.style.transform=`scale(${v.zoom.scale})`,D.style.transformOrigin="center center",t.resize(v.size.width,v.size.height),D.style.width=`${v.size.width}px`,D.style.height=`${v.size.height}px`),v.grid.enabled?(t.drawGrid({type:v.grid.type||"dot",args:{color:v.grid.color||"#475569",thickness:1}}),t.showGrid()):t.hideGrid(),v.grid.enabled&&v.grid.size&&t.setGridSize(v.grid.size),t.translate(v.offset.x,v.offset.y)},{deep:!0});const i=e.ref({}),m=(v,D)=>(i.value[v]||(i.value[v]=0),i.value[v]++,`${D}_${i.value[v]}`),u=v=>{var P,q,X,te;if(!t)return;const D=Pe.getComponent(v);if(!D){console.error(`未找到组件配置: ${v}`);return}const _=m(v,D.metadata.name),F={enabled:!1,type:"none",duration:1e3,loop:!0},H=ao(50,50,400,300),L={x:H.x,y:H.y,shape:D.shape,width:D.width,height:D.height,label:D.label,attrs:D.attrs,ports:D.ports,data:{...D.data,componentType:v,componentName:_,props:D.props,animation:F,originalStroke:((q=(P=D.attrs)==null?void 0:P.body)==null?void 0:q.stroke)||"#2563eb",originalStrokeWidth:((te=(X=D.attrs)==null?void 0:X.body)==null?void 0:te.strokeWidth)||2}},G=t.addNode(L);t.cleanSelection(),t.select(G)},y=v=>{if(E.value&&(v.attrs&&Object.keys(v.attrs).forEach(D=>{const _=v.attrs[D];typeof _=="object"?Object.keys(_).forEach(F=>{E.value.attr(`${D}/${F}`,_[F])}):E.value.attr(D,_)}),v.position&&(typeof v.position.x=="number"&&typeof v.position.y=="number"?E.value.setPosition(v.position):console.error("position 数据格式错误:",v.position)),v.size&&(typeof v.size.width=="number"&&typeof v.size.height=="number"?E.value.setSize(v.size):console.error("size 数据格式错误:",v.size)),v.data)){const D={...v.data};delete D.position,delete D.size,E.value.store.set("data",D)}},k=()=>{if(!E.value||!t)return;const v=E.value.id;ke.stopAnimation(v),t.removeNode(v),E.value=null},V=v=>{if(c.value){if(v.attrs){Object.keys(v.attrs).forEach(_=>{const F=v.attrs[_];typeof F=="object"?Object.keys(F).forEach(H=>{var L,G;c.value.attr(`${_}/${H}`,F[H]),(G=(L=c.value.data)==null?void 0:L.originalAttrs)!=null&&G[_]&&(c.value.data.originalAttrs[_][H]=F[H])}):c.value.attr(_,F)});const D=c.value.getAttrs();c.value.data={...c.value.data,originalAttrs:D},c.value.attr("line/stroke","#3b82f6")}v.router&&c.value.setRouter(v.router),v.connector&&c.value.setConnector(v.connector),v.animation&&p(c.value,v.animation),v.data&&c.value.setData({...c.value.data,...v.data})}},d=()=>{!c.value||!t||(t.removeEdge(c.value.id),c.value=null)},p=(v,D)=>{if(!v||typeof v.attr!="function"){console.warn("applyEdgeAnimation: edge 对象无效",v);return}if(!D||!D.enabled){v.attr("line/strokeDasharray",void 0),typeof v.removeAttr=="function"&&v.removeAttr("line/class"),v.attr("circle",void 0),typeof v.stopTransition=="function"&&v.stopTransition("attrs/circle/atConnectionRatio");return}const _=D.duration||2e3;v.attr("circle",{r:4,atConnectionRatio:0,fill:{type:"radialGradient",stops:[{offset:"0%",color:"#FFF"},{offset:"100%",color:v.attr("line/stroke")||"#10b981"}]},stroke:v.attr("line/stroke")||"#10b981",strokeWidth:1});const F=()=>{v.attr("circle/atConnectionRatio",0,{silent:!0}),v.transition("attrs/circle/atConnectionRatio",1,{delay:0,duration:_,timing:"linear",complete:()=>{F()}})};F()},f=()=>{t&&confirm("确定要清空画布吗?")&&(ke.clearAll(),t.clearCells(),E.value=null,to(Ie.SCADA_EDITOR_DATA))},C=()=>{if(!t)return;const v=J.getConfig().zoom.scale,D=Math.min(5,v+.1);J.setZoom(D)},b=()=>{if(!t)return;const v=J.getConfig().zoom.scale,D=Math.max(.1,v-.1);J.setZoom(D)},A=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.min(...v.map(_=>_.getPosition().x));v.forEach(_=>{_.setPosition({x:D,y:_.getPosition().y})})},$=()=>{if(!t)return;const v=t.getSelectedCells().filter(F=>F.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=v.map(F=>F.getPosition().x+F.getSize().width/2),_=D.reduce((F,H)=>F+H,0)/D.length;v.forEach(F=>{const H=_-F.getSize().width/2;F.setPosition({x:H,y:F.getPosition().y})})},S=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.max(...v.map(_=>_.getPosition().x+_.getSize().width));v.forEach(_=>{const F=D-_.getSize().width;_.setPosition({x:F,y:_.getPosition().y})})},B=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.min(...v.map(_=>_.getPosition().y));v.forEach(_=>{_.setPosition({x:_.getPosition().x,y:D})})},N=()=>{if(!t)return;const v=t.getSelectedCells().filter(F=>F.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=v.map(F=>F.getPosition().y+F.getSize().height/2),_=D.reduce((F,H)=>F+H,0)/D.length;v.forEach(F=>{const H=_-F.getSize().height/2;F.setPosition({x:F.getPosition().x,y:H})})},w=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.max(...v.map(_=>_.getPosition().y+_.getSize().height));v.forEach(_=>{const F=D-_.getSize().height;_.setPosition({x:_.getPosition().x,y:F})})},I=()=>{if(!t)return;const v=t.getSelectedCells().filter(G=>G.isNode());if(v.length<3){le("请选择至少三个节点","warning");return}const D=v.sort((G,P)=>G.getPosition().x-P.getPosition().x),_=D[0],L=(D[D.length-1].getPosition().x-_.getPosition().x)/(D.length-1);D.forEach((G,P)=>{if(P===0||P===D.length-1)return;const q=_.getPosition().x+L*P;G.setPosition({x:q,y:G.getPosition().y})})},R=()=>{if(!t)return;const v=t.getSelectedCells().filter(G=>G.isNode());if(v.length<3){le("请选择至少三个节点","warning");return}const D=v.sort((G,P)=>G.getPosition().y-P.getPosition().y),_=D[0],L=(D[D.length-1].getPosition().y-_.getPosition().y)/(D.length-1);D.forEach((G,P)=>{if(P===0||P===D.length-1)return;const q=_.getPosition().y+L*P;G.setPosition({x:G.getPosition().x,y:q})})},O=async()=>{if(!t){le("画布未初始化","error");return}try{if(console.log("[ScadaCanvas] handleSave 被调用"),console.log("[ScadaCanvas] props.onSave:",r.onSave),r.onSave){console.log("[ScadaCanvas] 调用自定义 onSave 回调"),await r.onSave(),console.log("[ScadaCanvas] 自定义 onSave 回调执行完成");return}console.log("[ScadaCanvas] 没有自定义回调,执行默认下载");const v={version:"1.0.0",timestamp:new Date().toISOString(),config:{size:J.getConfig().size,background:J.getConfig().background,grid:J.getConfig().grid,guides:J.getConfig().guides,magnetism:J.getConfig().magnetism,zoom:J.getConfig().zoom},cells:t.toJSON().cells},D=new Blob([JSON.stringify(v,null,2)],{type:"application/json"}),_=URL.createObjectURL(D),F=document.createElement("a"),H=`scada-canvas-${new Date().getTime()}.json`;F.href=_,F.download=H,F.click(),URL.revokeObjectURL(_),le("保存成功","success")}catch(v){console.error("保存失败",v),le("保存失败,请查看控制台","error")}},j=()=>{s.value&&s.value.click()},Z=v=>{var H;const _=(H=v.target.files)==null?void 0:H[0];if(!_){le("请选择文件","error");return}const F=new FileReader;F.onload=L=>{var G;try{const P=JSON.parse((G=L.target)==null?void 0:G.result);if(!P.cells){le("无效的JSON文件格式","error");return}if(!confirm("导入将清空当前画布,是否继续?"))return;if(t){if(t.clearCells(),t.fromJSON({cells:P.cells}),t.getEdges().forEach(q=>{var te;const X=q.getData();(te=X==null?void 0:X.animation)!=null&&te.enabled&&p(q,X.animation)}),P.config&&J.updateConfig(P.config),P.workflows&&Array.isArray(P.workflows)&&P.workflows.length>0)try{const q=localStorage.getItem("saved-workflows"),X=q?JSON.parse(q):[];let te=0,se=0;P.workflows.forEach(ne=>{const ie=X.findIndex(Ee=>Ee.id===ne.id);ie>=0?(X[ie]={...ne,updatedAt:Date.now()},se++):(X.push(ne),te++)}),localStorage.setItem("saved-workflows",JSON.stringify(X)),le(`导入成功 画布已加载,流程: 新增${te}个,更新${se}个`,"success")}catch(q){console.error("导入流程数据失败:",q),le("画布导入成功, 但流程数据导入失败","warning")}else le("导入成功","success");s.value&&(s.value.value="")}}catch(P){console.error("导入失败",P),le("导入失败,JSON格式错误","error"),s.value&&(s.value.value="")}},F.readAsText(_)},ee=()=>{if(console.log("🎬 [ScadaCanvas] handlePreview 被调用"),!t){console.error("⚠️ [ScadaCanvas] graph 不存在");return}const v={cells:t.toJSON().cells,config:{width:J.getConfig().size.width,height:J.getConfig().size.height,background:J.getConfig().background,grid:J.getConfig().grid}};ot(Ie.SCADA_PREVIEW_DATA,v),console.log("✅ [ScadaCanvas] 数据已保存到 sessionStorage"),console.log("📤 [ScadaCanvas] 即将触发 preview 事件"),n("preview"),console.log("✅ [ScadaCanvas] preview 事件已触发")},ae=()=>{a.value=!0},oe=()=>{if(!t){le("画布未初始化","error");return}try{const v={version:"1.0.0",timestamp:at(rt()),config:{size:J.getConfig().size,background:J.getConfig().background,grid:J.getConfig().grid,guides:J.getConfig().guides,magnetism:J.getConfig().magnetism,zoom:J.getConfig().zoom},cells:t.toJSON().cells,nodes:t.getNodes().map(F=>({id:F.id,type:F.shape,position:F.getPosition(),size:F.getSize(),label:F.attr("label/text"),data:F.getData()})),edges:t.getEdges().map(F=>({id:F.id,source:F.getSourceCellId(),target:F.getTargetCellId()})),workflows:[]},D=new Set;if(t.getNodes().forEach(F=>{const H=F.getData();H!=null&&H.events&&Array.isArray(H.events)&&H.events.forEach(L=>{var G;L.action==="callProcess"&&((G=L.params)!=null&&G.processId)&&D.add(L.params.processId)})}),D.size>0)try{const F=localStorage.getItem("saved-workflows");if(F){const H=JSON.parse(F);v.workflows=H.filter(L=>D.has(L.id))}}catch(F){console.error("加载流程数据失败:",F)}const _=oo(v,"scada-export");le(`已导出为 ${_}`,"success")}catch(v){console.error("导出失败",v),le("导出失败,请查看控制台","error")}};return h({save:O,import:j,export:oe,preview:ee,workflow:ae,zoomIn:C,zoomOut:b,clearAll:f,alignLeft:A,alignCenter:$,alignRight:S,alignTop:B,alignMiddle:N,alignBottom:w,distributeHorizontal:I,distributeVertical:R,addNode:u,updateNode:y,deleteNode:k,getSelectedNode:()=>E.value,selectNode:v=>{if(!t)return!1;const D=t.getCellById(v);return D?(t.select(D),!0):!1},clearSelection:()=>{t&&(t.unselect(t.getSelectedCells()),E.value=null)},getGraph:()=>t,getCanvasData:()=>t?{version:"1.0.0",timestamp:at(rt()),config:J.getConfig(),cells:t.toJSON().cells,nodes:t.getNodes().map(v=>({id:v.id,type:v.shape,position:v.getPosition(),size:v.getSize(),label:v.attr("label/text"),data:v.getData()})),edges:t.getEdges().map(v=>({id:v.id,source:v.getSourceCellId(),target:v.getTargetCellId()}))}:null,loadCanvasData:v=>{if(!t)return!1;try{return t.clearCells(),t.fromJSON({cells:v.cells}),v.config&&J.updateConfig(v.config),t.getEdges().forEach(D=>{var F;const _=D.getData();(F=_==null?void 0:_.animation)!=null&&F.enabled&&p(D,_.animation)}),!0}catch(D){return console.error("加载画布数据失败:",D),!1}},getAllNodes:()=>t?t.getNodes().map(v=>({id:v.id,type:v.shape,position:v.getPosition(),size:v.getSize(),label:v.attr("label/text"),data:v.getData()})):[],getNodeById:v=>{if(!t)return null;const D=t.getCellById(v);if(!D||!D.isNode())return null;const _=D;return{id:_.id,type:_.shape,position:_.getPosition(),size:_.getSize(),label:_.attr("label/text"),data:_.getData()}},getConfigManager:()=>J,updateCanvasConfig:v=>{J.updateConfig(v)},setZoom:v=>{J.setZoom(v)},setCanvasSize:(v,D)=>{J.updateSize({width:v,height:D})},setBackgroundColor:v=>{J.updateBackground({color:v})},getAnimationEngine:()=>ke}),(v,D)=>(e.openBlock(),e.createElementBlock("div",ap,[r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Ge,{key:0,"selected-nodes-count":x.value,onSave:O,onImport:j,onWorkflow:ae,onPreview:ee,onExport:oe,onZoomIn:C,onZoomOut:b,onClearAll:f,onAlignLeft:A,onAlignCenter:$,onAlignRight:S,onAlignTop:B,onAlignMiddle:N,onAlignBottom:w,onDistributeHorizontal:I,onDistributeVertical:R},null,8,["selected-nodes-count"])),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("input",{key:1,ref_key:"fileInputRef",ref:s,type:"file",accept:".json",style:{display:"none"},onChange:Z},null,544)),e.createElementVNode("div",rp,[r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Xe,{key:0,onAddComponent:u})),e.createVNode(Kn,{ref_key:"canvasAreaRef",ref:l},null,512),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(lt,{key:1,ref:"propertyPanelRef","selected-node":E.value,"selected-edge":c.value,onUpdateNode:y,onDeleteNode:k,onUpdateEdge:V,onDeleteEdge:d},null,8,["selected-node","selected-edge"]))]),e.createVNode(Ed,{"auth-code":g.authCode,"custom-footer":g.customFooter},null,8,["auth-code","custom-footer"]),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(op,{key:2,visible:a.value,"onUpdate:visible":D[0]||(D[0]=_=>a.value=_),"scada-graph":e.unref(t),onClose:D[1]||(D[1]=_=>a.value=!1)},null,8,["visible","scada-graph"]))]))}}),[["__scopeId","data-v-dd826323"]]),lp={ScadaCanvas:Xo,PropertyPanel:lt,Header:Ge,ComponentLibrary:Xe,CanvasConfigPanel:Ye,BindingCard:Qe,EventCard:Je,BasicPropertiesTab:Ke,AttributeConfigDialog:et,CustomCodeDialog:tt},Yo=g=>{Object.entries(lp).forEach(([h,o])=>{g.component(h,o)})},sp={install:Yo,version:"1.0.0"};U.AttributeConfigDialog=et,U.BasicComponents=wn,U.BasicPropertiesTab=Ke,U.BindingCard=Qe,U.CanvasConfigPanel=Ye,U.ComponentLibrary=Xe,U.CustomCodeDialog=tt,U.EventCard=Je,U.Header=Ge,U.IoTComponents=Sn,U.PropertyPanel=lt,U.STORAGE_KEYS=Ie,U.ScadaCanvas=Xo,U.animationEngine=ke,U.canvasConfigItems=zn,U.canvasConfigManager=J,U.componentRegistry=Pe,U.default=sp,U.defaultCanvasConfig=je,U.exportToJSON=oo,U.formatTimestamp=at,U.generateEventId=no,U.generateNodeId=dc,U.generateUniqueId=nt,U.getCurrentTimestamp=rt,U.install=Yo,U.loadFromLocal=ic,U.loadFromSession=eo,U.randomPosition=ao,U.removeFromLocal=cc,U.removeFromSession=to,U.saveToLocal=sc,U.saveToSession=ot,U.showMessage=le,U.sizePresetMap=Re,Object.defineProperties(U,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
45
+ 是否继续保存?`,!confirm(B))return}const V=prompt("请输入流程名称:","未命名流程");if(!V||!V.trim())return;const y=t.toJSON(),D=t.getNodes().map(B=>({id:B.id,shape:B.shape,position:B.getPosition(),size:B.getSize(),attrs:B.getAttrs(),data:B.getData()})),O=t.getEdges().map(B=>({id:B.id,source:B.getSourceCellId(),target:B.getTargetCellId(),attrs:B.getAttrs(),data:B.getData()})),w={id:"workflow_"+Date.now(),name:V.trim(),data:{...y,nodes:D,edges:O},createdAt:Date.now(),updatedAt:Date.now()};try{const B=localStorage.getItem("saved-workflows"),T=B?JSON.parse(B):[];T.push(w),localStorage.setItem("saved-workflows",JSON.stringify(T)),alert("✓ 流程保存成功!"),console.log("流程已保存:",w)}catch(B){console.error("保存流程失败:",B),alert("保存失败,请重试")}};e.onMounted(()=>{a(),window.addEventListener("resize",h)});const h=()=>{!t||!r.value||t.resize(r.value.clientWidth,r.value.clientHeight)};return e.onBeforeUnmount(()=>{window.removeEventListener("resize",h);const N=E=>{if(E.key==="Delete"||E.key==="Backspace"){if(!t)return;const V=t.getSelectedCells();V.length&&(E.preventDefault(),t.removeCells(V),s.value&&V.includes(s.value.cell)&&(s.value=null))}};document.removeEventListener("keydown",N),t&&t.dispose()}),(N,E)=>(e.openBlock(),e.createElementBlock("div",Dc,[e.createVNode(Cc,{"show-close":i.showClose,onClear:b,onValidate:F,onSave:z,onClose:E[0]||(E[0]=V=>N.$emit("close"))},null,8,["show-close"]),e.createElementVNode("div",Tc,[e.createElementVNode("div",Pc,[e.createElementVNode("div",{id:"workflow-container",ref_key:"containerRef",ref:r},null,512)]),e.createVNode(hc,{"selected-cell":s.value,"onUpdate:label":u},null,8,["selected-cell"])]),e.createVNode(xc,{visible:d.value,position:c.value,"node-types":n.value,onClose:E[1]||(E[1]=V=>d.value=!1),onSelect:f},null,8,["visible","position","node-types"])]))}}),[["__scopeId","data-v-649349a2"]]),Mc={key:0,class:"workflow-dialog-overlay"},zc={class:"workflow-dialog"},Oc=H(e.defineComponent({__name:"WorkflowDialog",props:{visible:{type:Boolean},scadaGraph:{default:null}},emits:["update:visible","close"],setup(i,{emit:l}){const n=i,r=l;e.watch(()=>n.visible,d=>{d?document.body.style.overflow="hidden":document.body.style.overflow=""});const t=()=>{r("update:visible",!1),r("close")},s=d=>{d.key==="Escape"&&n.visible&&t()};return typeof window<"u"&&window.addEventListener("keydown",s),(d,c)=>i.visible?(e.openBlock(),e.createElementBlock("div",Mc,[e.createElementVNode("div",zc,[e.createVNode(Ac,{"scada-graph":i.scadaGraph,"show-close":!0,onClose:t},null,8,["scada-graph"])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-4e7f6ab7"]]);class Uc{constructor(){be(this,"animations",new Map)}startAnimation(l,n){if(!l||n.type==="none")return;this.stopAnimation(l.id);const r=l.id;let t=null;switch(n.type){case"blink":t=this.createBlinkAnimation(l,n);break;case"scale":t=this.createScaleAnimation(l,n);break;case"rotate":t=this.createRotateAnimation(l,n);break;case"float":t=this.createFloatAnimation(l,n);break;case"pulse":t=this.createPulseAnimation(l,n);break}t&&this.animations.set(r,t)}stopAnimation(l){const n=this.animations.get(l);n&&(n.stop&&n.stop(),n.intervalId&&clearInterval(n.intervalId),this.animations.delete(l))}createBlinkAnimation(l,n){const r=l.getAttrByPath("body/opacity")||1;let t=!0;const s=setInterval(()=>{t=!t,l.setAttrByPath("body/opacity",t?r:.2),n.loop||(clearInterval(s),l.setAttrByPath("body/opacity",r))},n.duration/2);return{intervalId:s,stop:()=>{clearInterval(s),l.setAttrByPath("body/opacity",r)}}}createScaleAnimation(l,n){const r=l.getSize();let t=!0;const s=.05;let d=1;const c=setInterval(()=>{t?(d+=s,d>=1.2&&(t=!1)):(d-=s,d<=.8&&(t=!0)),l.resize(r.width*d,r.height*d),!n.loop&&d>=.99&&d<=1.01&&(clearInterval(c),l.resize(r.width,r.height))},n.duration/20);return{intervalId:c,stop:()=>{clearInterval(c),l.resize(r.width,r.height)}}}createRotateAnimation(l,n){let r=0;const t=360/(n.duration/50),s=setInterval(()=>{r=(r+t)%360,l.rotate(r,{absolute:!0}),!n.loop&&r>=360&&(clearInterval(s),l.rotate(0,{absolute:!0}))},50);return{intervalId:s,stop:()=>{clearInterval(s),l.rotate(0,{absolute:!0})}}}createFloatAnimation(l,n){const r=l.position();let t=!0;const s=2;let d=r.y;const c=setInterval(()=>{t?(d-=s,d<=r.y-10&&(t=!1)):(d+=s,d>=r.y+10&&(t=!0)),l.position(r.x,d),!n.loop&&Math.abs(d-r.y)<1&&(clearInterval(c),l.position(r.x,r.y))},n.duration/40);return{intervalId:c,stop:()=>{clearInterval(c),l.position(r.x,r.y)}}}createPulseAnimation(l,n){const r=l.getAttrByPath("body/fill"),t=l.getAttrByPath("body/stroke");let s=0,d=!0;const c=setInterval(()=>{d?(s+=.1,s>=1&&(d=!1)):(s-=.1,s<=0&&(d=!0)),l.setAttrByPath("body/opacity",.5+s*.5),!n.loop&&s<=.05&&(clearInterval(c),l.setAttrByPath("body/fill",r),l.setAttrByPath("body/stroke",t),l.setAttrByPath("body/opacity",1))},n.duration/20);return{intervalId:c,stop:()=>{clearInterval(c),l.setAttrByPath("body/fill",r),l.setAttrByPath("body/stroke",t),l.setAttrByPath("body/opacity",1)}}}clearAll(){this.animations.forEach((l,n)=>{this.stopAnimation(n)}),this.animations.clear()}}const se=new Uc,Rc={class:"scada-layout","data-scada-theme":"dark"},Lc={class:"scada-canvas-container"},it=H(e.defineComponent({name:"ScadaCanvas",inheritAttrs:!0,__name:"ScadaCanvas",props:{authCode:{default:""},customFooter:{default:void 0},previewMode:{type:Boolean,default:!1},onSave:{type:Function,default:void 0}},emits:["preview"],setup(i,{expose:l,emit:n}){const r=i,t=n,s=e.ref(null),d=e.ref(null),c=e.ref(null),p=e.ref(0),g=e.ref(null),a=e.ref(!1);let o=null;e.onMounted(()=>{var G,L;if(!((G=s.value)!=null&&G.containerRef))return;const m=R.getConfig();oe.Graph.registerEdge("animated-edge",{inherit:"edge",markup:[{tagName:"path",selector:"line",attrs:{fill:"none"}},{tagName:"path",selector:"wrap",attrs:{fill:"none",stroke:"transparent",strokeWidth:20}},{tagName:"circle",selector:"circle"}],attrs:{line:{connection:!0,stroke:"#10b981",strokeWidth:2,targetMarker:{name:"block",width:8,height:6}},wrap:{connection:!0,strokeLinecap:"round",strokeLinejoin:"round"}}},!0);const k=s.value.containerRef,$=m.size.width,_=m.size.height;if((M=>{k.style.width=`${$}px`,k.style.height=`${_}px`,k.style.transform=`scale(${M})`,k.style.transformOrigin="center center"})(m.zoom.scale),o=new oe.Graph({container:k,width:$,height:_,background:m.background.image?{color:m.background.color||"#1e293b",image:m.background.image,size:m.background.size||"cover",repeat:m.background.repeat||"no-repeat",position:"center"}:{color:m.background.color||"#1e293b"},grid:m.grid.enabled?{size:m.grid.size,visible:!0,type:m.grid.type||"dot",args:{color:m.grid.color||"#475569",thickness:1}}:!1,interacting:{nodeMovable:!r.previewMode},panning:{enabled:!0,modifiers:"shift"},mousewheel:{enabled:!0,modifiers:["ctrl","meta"]},connecting:{router:{name:"orth",args:{padding:10}},connector:{name:"rounded",args:{radius:8}},snap:m.magnetism.enabled?{radius:m.magnetism.threshold||10}:!1,allowBlank:!1,allowLoop:!1,allowNode:!1,allowEdge:!1,highlight:!0,createEdge(){return o.createEdge({shape:"animated-edge",zIndex:0})},validateConnection({targetMagnet:M}){return!!M}}}),r.previewMode||o.use(new Ge.Selection({enabled:!0,movable:!0,rubberband:!0,showNodeSelectionBox:!1,showEdgeSelectionBox:!1,multiple:!0,pointerEvents:"none"})),m.guides.enabled&&o.use(new pt.Snapline({enabled:!0,sharp:!0,clean:!0})),!r.previewMode){const M=Qe(de.SCADA_EDITOR_DATA);if(((L=M==null?void 0:M.cells)==null?void 0:L.length)>0)try{const W=M.cells.map(J=>{var ee;return J.position&&typeof J.position=="object"&&(typeof J.position.x!="number"||typeof J.position.y!="number")&&(J.position={x:100,y:100}),(J.shape==="edge"||J.shape==="animated-edge")&&(J.router==="manhattan"||((ee=J.router)==null?void 0:ee.name)==="manhattan")&&(J.router={name:"orth",args:{padding:10}}),J});o.fromJSON({cells:W}),o.getEdges().forEach(J=>{var X;const ee=J.getData();(X=ee==null?void 0:ee.animation)!=null&&X.enabled&&N(J,ee.animation)})}catch(W){console.error("恢复画布数据失败,清空缓存:",W),sessionStorage.removeItem(de.SCADA_EDITOR_DATA)}}o.on("selection:changed",({selected:M})=>{var J,ee;const W=M?M.filter(X=>X.isNode()):[];if(p.value=W.length,M&&M.length>0){const X=M[0];if(X.isNode())d.value=X,c.value=null;else if(X.isEdge()){c.value=X,d.value=null;const pe=X.getAttrs();X.data={...X.data,originalAttrs:pe},X.attr("line/stroke","#3b82f6")}}else{if(c.value&&((J=c.value.data)!=null&&J.originalAttrs)){const X=c.value.data.originalAttrs;c.value.attr("line/stroke",((ee=X.line)==null?void 0:ee.stroke)||"#10b981")}d.value=null,c.value=null}}),o.on("edge:click",({edge:M})=>{o.select(M)}),o.on("blank:click",()=>{c.value=null,d.value=null}),o.on("node:change:position",()=>{}),o.on("node:change:size",()=>{}),o.on("node:change:data",({node:M})=>{const W=M.getData();if(W.animation)if(W.animation.enabled===!0){const J={type:W.animation.type||"none",duration:W.animation.duration||1e3,loop:W.animation.loop!==!1};se.startAnimation(M,J)}else se.stopAnimation(M.id)}),o.on("edge:change:data",({edge:M})=>{const W=M.getData();W!=null&&W.animation&&N(M,W.animation)});const q=M=>{if(M.key==="Delete"&&o){if(d.value){const W=d.value.id;se.stopAnimation(W),o.removeNode(W),d.value=null}else if(c.value){const W=c.value.id;o.removeEdge(W),c.value=null}}};document.addEventListener("keydown",q),e.onUnmounted(()=>{document.removeEventListener("keydown",q)})}),e.onUnmounted(()=>{if(o){se.clearAll();const m={cells:o.toJSON().cells};Me(de.SCADA_EDITOR_DATA,m),o.dispose()}}),e.watch(()=>R.getConfig(),m=>{var $;if(!o)return;m.background.image?o.drawBackground({color:m.background.color||"#1e293b",image:m.background.image,size:m.background.size||"cover",repeat:m.background.repeat||"no-repeat",position:"center"}):o.drawBackground({color:m.background.color||"#1e293b"});const k=($=s.value)==null?void 0:$.containerRef;k&&(k.style.transform=`scale(${m.zoom.scale})`,k.style.transformOrigin="center center",o.resize(m.size.width,m.size.height),k.style.width=`${m.size.width}px`,k.style.height=`${m.size.height}px`),m.grid.enabled?(o.drawGrid({type:m.grid.type||"dot",args:{color:m.grid.color||"#475569",thickness:1}}),o.showGrid()):o.hideGrid(),m.grid.enabled&&m.grid.size&&o.setGridSize(m.grid.size),o.translate(m.offset.x,m.offset.y)},{deep:!0});const u=e.ref({}),f=(m,k)=>(u.value[m]||(u.value[m]=0),u.value[m]++,`${k}_${u.value[m]}`),b=m=>{var L,M,W,J;if(!o)return;const k=me.getComponent(m);if(!k){console.error(`未找到组件配置: ${m}`);return}const $=f(m,k.metadata.name),_={enabled:!1,type:"none",duration:1e3,loop:!0},j=nt(50,50,400,300),q={x:j.x,y:j.y,shape:k.shape,width:k.width,height:k.height,label:k.label,attrs:k.attrs,ports:k.ports,data:{...k.data,componentType:m,componentName:$,props:k.props,animation:_,originalStroke:((M=(L=k.attrs)==null?void 0:L.body)==null?void 0:M.stroke)||"#2563eb",originalStrokeWidth:((J=(W=k.attrs)==null?void 0:W.body)==null?void 0:J.strokeWidth)||2}},G=o.addNode(q);o.cleanSelection(),o.select(G)},S=m=>{if(d.value&&(m.attrs&&Object.keys(m.attrs).forEach(k=>{const $=m.attrs[k];typeof $=="object"?Object.keys($).forEach(_=>{d.value.attr(`${k}/${_}`,$[_])}):d.value.attr(k,$)}),m.position&&(typeof m.position.x=="number"&&typeof m.position.y=="number"?d.value.setPosition(m.position):console.error("position 数据格式错误:",m.position)),m.size&&(typeof m.size.width=="number"&&typeof m.size.height=="number"?d.value.setSize(m.size):console.error("size 数据格式错误:",m.size)),m.data)){const k={...m.data};delete k.position,delete k.size,d.value.store.set("data",k)}},F=()=>{if(!d.value||!o)return;const m=d.value.id;se.stopAnimation(m),o.removeNode(m),d.value=null},z=m=>{if(c.value){if(m.attrs){Object.keys(m.attrs).forEach($=>{const _=m.attrs[$];typeof _=="object"?Object.keys(_).forEach(j=>{var q,G;c.value.attr(`${$}/${j}`,_[j]),(G=(q=c.value.data)==null?void 0:q.originalAttrs)!=null&&G[$]&&(c.value.data.originalAttrs[$][j]=_[j])}):c.value.attr($,_)});const k=c.value.getAttrs();c.value.data={...c.value.data,originalAttrs:k},c.value.attr("line/stroke","#3b82f6")}m.router&&c.value.setRouter(m.router),m.connector&&c.value.setConnector(m.connector),m.animation&&N(c.value,m.animation),m.data&&c.value.setData({...c.value.data,...m.data})}},h=()=>{!c.value||!o||(o.removeEdge(c.value.id),c.value=null)},N=(m,k)=>{if(!m||typeof m.attr!="function"){console.warn("applyEdgeAnimation: edge 对象无效",m);return}if(!k||!k.enabled){m.attr("line/strokeDasharray",void 0),typeof m.removeAttr=="function"&&m.removeAttr("line/class"),m.attr("circle",void 0),typeof m.stopTransition=="function"&&m.stopTransition("attrs/circle/atConnectionRatio");return}const $=k.duration||2e3;m.attr("circle",{r:4,atConnectionRatio:0,fill:{type:"radialGradient",stops:[{offset:"0%",color:"#FFF"},{offset:"100%",color:m.attr("line/stroke")||"#10b981"}]},stroke:m.attr("line/stroke")||"#10b981",strokeWidth:1});const _=()=>{m.attr("circle/atConnectionRatio",0,{silent:!0}),m.transition("attrs/circle/atConnectionRatio",1,{delay:0,duration:$,timing:"linear",complete:()=>{_()}})};_()},E=()=>{o&&confirm("确定要清空画布吗?")&&(se.clearAll(),o.clearCells(),d.value=null,et(de.SCADA_EDITOR_DATA))},V=()=>{if(!o)return;const m=R.getConfig().zoom.scale,k=Math.min(5,m+.1);R.setZoom(k)},y=()=>{if(!o)return;const m=R.getConfig().zoom.scale,k=Math.max(.1,m-.1);R.setZoom(k)},D=()=>{if(!o)return;const m=o.getSelectedCells().filter($=>$.isNode());if(m.length<2){Y("请选择至少两个节点","warning");return}const k=Math.min(...m.map($=>$.getPosition().x));m.forEach($=>{$.setPosition({x:k,y:$.getPosition().y})})},O=()=>{if(!o)return;const m=o.getSelectedCells().filter(_=>_.isNode());if(m.length<2){Y("请选择至少两个节点","warning");return}const k=m.map(_=>_.getPosition().x+_.getSize().width/2),$=k.reduce((_,j)=>_+j,0)/k.length;m.forEach(_=>{const j=$-_.getSize().width/2;_.setPosition({x:j,y:_.getPosition().y})})},A=()=>{if(!o)return;const m=o.getSelectedCells().filter($=>$.isNode());if(m.length<2){Y("请选择至少两个节点","warning");return}const k=Math.max(...m.map($=>$.getPosition().x+$.getSize().width));m.forEach($=>{const _=k-$.getSize().width;$.setPosition({x:_,y:$.getPosition().y})})},w=()=>{if(!o)return;const m=o.getSelectedCells().filter($=>$.isNode());if(m.length<2){Y("请选择至少两个节点","warning");return}const k=Math.min(...m.map($=>$.getPosition().y));m.forEach($=>{$.setPosition({x:$.getPosition().x,y:k})})},B=()=>{if(!o)return;const m=o.getSelectedCells().filter(_=>_.isNode());if(m.length<2){Y("请选择至少两个节点","warning");return}const k=m.map(_=>_.getPosition().y+_.getSize().height/2),$=k.reduce((_,j)=>_+j,0)/k.length;m.forEach(_=>{const j=$-_.getSize().height/2;_.setPosition({x:_.getPosition().x,y:j})})},T=()=>{if(!o)return;const m=o.getSelectedCells().filter($=>$.isNode());if(m.length<2){Y("请选择至少两个节点","warning");return}const k=Math.max(...m.map($=>$.getPosition().y+$.getSize().height));m.forEach($=>{const _=k-$.getSize().height;$.setPosition({x:$.getPosition().x,y:_})})},K=()=>{if(!o)return;const m=o.getSelectedCells().filter(G=>G.isNode());if(m.length<3){Y("请选择至少三个节点","warning");return}const k=m.sort((G,L)=>G.getPosition().x-L.getPosition().x),$=k[0],q=(k[k.length-1].getPosition().x-$.getPosition().x)/(k.length-1);k.forEach((G,L)=>{if(L===0||L===k.length-1)return;const M=$.getPosition().x+q*L;G.setPosition({x:M,y:G.getPosition().y})})},te=()=>{if(!o)return;const m=o.getSelectedCells().filter(G=>G.isNode());if(m.length<3){Y("请选择至少三个节点","warning");return}const k=m.sort((G,L)=>G.getPosition().y-L.getPosition().y),$=k[0],q=(k[k.length-1].getPosition().y-$.getPosition().y)/(k.length-1);k.forEach((G,L)=>{if(L===0||L===k.length-1)return;const M=$.getPosition().y+q*L;G.setPosition({x:G.getPosition().x,y:M})})},ce=async()=>{if(!o){Y("画布未初始化","error");return}try{if(console.log("[ScadaCanvas] handleSave 被调用"),console.log("[ScadaCanvas] props.onSave:",r.onSave),r.onSave){console.log("[ScadaCanvas] 调用自定义 onSave 回调"),await r.onSave(),console.log("[ScadaCanvas] 自定义 onSave 回调执行完成");return}console.log("[ScadaCanvas] 没有自定义回调,执行默认下载");const m={version:"1.0.0",timestamp:new Date().toISOString(),config:{size:R.getConfig().size,background:R.getConfig().background,grid:R.getConfig().grid,guides:R.getConfig().guides,magnetism:R.getConfig().magnetism,zoom:R.getConfig().zoom},cells:o.toJSON().cells},k=new Blob([JSON.stringify(m,null,2)],{type:"application/json"}),$=URL.createObjectURL(k),_=document.createElement("a"),j=`scada-canvas-${new Date().getTime()}.json`;_.href=$,_.download=j,_.click(),URL.revokeObjectURL($),Y("保存成功","success")}catch(m){console.error("保存失败",m),Y("保存失败,请查看控制台","error")}},Ne=()=>{g.value&&g.value.click()},le=m=>{var j;const $=(j=m.target.files)==null?void 0:j[0];if(!$){Y("请选择文件","error");return}const _=new FileReader;_.onload=q=>{var G;try{const L=JSON.parse((G=q.target)==null?void 0:G.result);if(!L.cells){Y("无效的JSON文件格式","error");return}if(!confirm("导入将清空当前画布,是否继续?"))return;if(o){if(o.clearCells(),o.fromJSON({cells:L.cells}),o.getEdges().forEach(M=>{var J;const W=M.getData();(J=W==null?void 0:W.animation)!=null&&J.enabled&&N(M,W.animation)}),L.config&&R.updateConfig(L.config),L.workflows&&Array.isArray(L.workflows)&&L.workflows.length>0)try{const M=localStorage.getItem("saved-workflows"),W=M?JSON.parse(M):[];let J=0,ee=0;L.workflows.forEach(X=>{const pe=W.findIndex(ye=>ye.id===X.id);pe>=0?(W[pe]={...X,updatedAt:Date.now()},ee++):(W.push(X),J++)}),localStorage.setItem("saved-workflows",JSON.stringify(W)),Y(`导入成功 画布已加载,流程: 新增${J}个,更新${ee}个`,"success")}catch(M){console.error("导入流程数据失败:",M),Y("画布导入成功, 但流程数据导入失败","warning")}else Y("导入成功","success");g.value&&(g.value.value="")}}catch(L){console.error("导入失败",L),Y("导入失败,JSON格式错误","error"),g.value&&(g.value.value="")}},_.readAsText($)},he=()=>{if(console.log("🎬 [ScadaCanvas] handlePreview 被调用"),!o){console.error("⚠️ [ScadaCanvas] graph 不存在");return}const m={cells:o.toJSON().cells,config:{width:R.getConfig().size.width,height:R.getConfig().size.height,background:R.getConfig().background,grid:R.getConfig().grid}};Me(de.SCADA_PREVIEW_DATA,m),console.log("✅ [ScadaCanvas] 数据已保存到 sessionStorage"),console.log("📤 [ScadaCanvas] 即将触发 preview 事件"),t("preview"),console.log("✅ [ScadaCanvas] preview 事件已触发")},Ve=()=>{a.value=!0},ke=()=>{if(!o){Y("画布未初始化","error");return}try{const m={version:"1.0.0",timestamp:Oe(Ue()),config:{size:R.getConfig().size,background:R.getConfig().background,grid:R.getConfig().grid,guides:R.getConfig().guides,magnetism:R.getConfig().magnetism,zoom:R.getConfig().zoom},cells:o.toJSON().cells,nodes:o.getNodes().map(_=>({id:_.id,type:_.shape,position:_.getPosition(),size:_.getSize(),label:_.attr("label/text"),data:_.getData()})),edges:o.getEdges().map(_=>({id:_.id,source:_.getSourceCellId(),target:_.getTargetCellId()})),workflows:[]},k=new Set;if(o.getNodes().forEach(_=>{const j=_.getData();j!=null&&j.events&&Array.isArray(j.events)&&j.events.forEach(q=>{var G;q.action==="callProcess"&&((G=q.params)!=null&&G.processId)&&k.add(q.params.processId)})}),k.size>0)try{const _=localStorage.getItem("saved-workflows");if(_){const j=JSON.parse(_);m.workflows=j.filter(q=>k.has(q.id))}}catch(_){console.error("加载流程数据失败:",_)}const $=tt(m,"scada-export");Y(`已导出为 ${$}`,"success")}catch(m){console.error("导出失败",m),Y("导出失败,请查看控制台","error")}};return l({save:ce,import:Ne,export:ke,preview:he,workflow:Ve,zoomIn:V,zoomOut:y,clearAll:E,alignLeft:D,alignCenter:O,alignRight:A,alignTop:w,alignMiddle:B,alignBottom:T,distributeHorizontal:K,distributeVertical:te,addNode:b,updateNode:S,deleteNode:F,getSelectedNode:()=>d.value,selectNode:m=>{if(!o)return!1;const k=o.getCellById(m);return k?(o.select(k),!0):!1},clearSelection:()=>{o&&(o.unselect(o.getSelectedCells()),d.value=null)},getGraph:()=>o,getCanvasData:()=>o?{version:"1.0.0",timestamp:Oe(Ue()),config:R.getConfig(),cells:o.toJSON().cells,nodes:o.getNodes().map(m=>({id:m.id,type:m.shape,position:m.getPosition(),size:m.getSize(),label:m.attr("label/text"),data:m.getData()})),edges:o.getEdges().map(m=>({id:m.id,source:m.getSourceCellId(),target:m.getTargetCellId()}))}:null,loadCanvasData:m=>{if(!o)return!1;try{return o.clearCells(),o.fromJSON({cells:m.cells}),m.config&&R.updateConfig(m.config),o.getEdges().forEach(k=>{var _;const $=k.getData();(_=$==null?void 0:$.animation)!=null&&_.enabled&&N(k,$.animation)}),!0}catch(k){return console.error("加载画布数据失败:",k),!1}},getAllNodes:()=>o?o.getNodes().map(m=>({id:m.id,type:m.shape,position:m.getPosition(),size:m.getSize(),label:m.attr("label/text"),data:m.getData()})):[],getNodeById:m=>{if(!o)return null;const k=o.getCellById(m);if(!k||!k.isNode())return null;const $=k;return{id:$.id,type:$.shape,position:$.getPosition(),size:$.getSize(),label:$.attr("label/text"),data:$.getData()}},getConfigManager:()=>R,updateCanvasConfig:m=>{R.updateConfig(m)},setZoom:m=>{R.setZoom(m)},setCanvasSize:(m,k)=>{R.updateSize({width:m,height:k})},setBackgroundColor:m=>{R.updateBackground({color:m})},getAnimationEngine:()=>se}),(m,k)=>(e.openBlock(),e.createElementBlock("div",Rc,[r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(we,{key:0,"selected-nodes-count":p.value,onSave:ce,onImport:Ne,onWorkflow:Ve,onPreview:he,onExport:ke,onZoomIn:V,onZoomOut:y,onClearAll:E,onAlignLeft:D,onAlignCenter:O,onAlignRight:A,onAlignTop:w,onAlignMiddle:B,onAlignBottom:T,onDistributeHorizontal:K,onDistributeVertical:te},null,8,["selected-nodes-count"])),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("input",{key:1,ref_key:"fileInputRef",ref:g,type:"file",accept:".json",style:{display:"none"},onChange:le},null,544)),e.createElementVNode("div",Lc,[r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Se,{key:0,onAddComponent:b})),e.createVNode(no,{ref_key:"canvasAreaRef",ref:s},null,512),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Re,{key:1,ref:"propertyPanelRef","selected-node":d.value,"selected-edge":c.value,onUpdateNode:S,onDeleteNode:F,onUpdateEdge:z,onDeleteEdge:h},null,8,["selected-node","selected-edge"]))]),e.createVNode(Qr,{"auth-code":i.authCode,"custom-footer":i.customFooter},null,8,["auth-code","custom-footer"]),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Oc,{key:2,visible:a.value,"onUpdate:visible":k[0]||(k[0]=$=>a.value=$),"scada-graph":e.unref(o),onClose:k[1]||(k[1]=$=>a.value=!1)},null,8,["visible","scada-graph"]))]))}}),[["__scopeId","data-v-dd826323"]]),Wc={ScadaCanvas:it,PropertyPanel:Re,Header:we,ComponentLibrary:Se,CanvasConfigPanel:_e,BindingCard:Te,EventCard:Ie,BasicPropertiesTab:xe,AttributeConfigDialog:Pe,CustomCodeDialog:Ae},rt=i=>{Object.entries(Wc).forEach(([l,n])=>{i.component(l,n)})},Fc={install:rt,version:"1.0.0"};I.AttributeConfigDialog=Pe,I.BasicComponents=Ut,I.BasicPropertiesTab=xe,I.BindingCard=Te,I.CanvasConfigPanel=_e,I.ComponentLibrary=Se,I.CustomCodeDialog=Ae,I.EventCard=Ie,I.Header=we,I.IoTComponents=Rt,I.PropertyPanel=Re,I.STORAGE_KEYS=de,I.ScadaCanvas=it,I.animationEngine=se,I.canvasConfigItems=Wt,I.canvasConfigManager=R,I.componentRegistry=me,I.default=Fc,I.defaultCanvasConfig=Be,I.exportToJSON=tt,I.formatTimestamp=Oe,I.generateEventId=ot,I.generateNodeId=Nr,I.generateUniqueId=ze,I.getCurrentTimestamp=Ue,I.install=rt,I.loadFromLocal=yr,I.loadFromSession=Qe,I.randomPosition=nt,I.removeFromLocal=br,I.removeFromSession=et,I.saveToLocal=Er,I.saveToSession=Me,I.showMessage=Y,I.sizePresetMap=ue,Object.defineProperties(I,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});