aiflowui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +36 -0
- package/README.md +267 -0
- package/dist-lib/aiflowui.es.js +7686 -0
- package/dist-lib/aiflowui.umd.js +1 -0
- package/dist-lib/style.css +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(te,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@element-plus/icons-vue"),require("element-plus"),require("pinia"),require("@vue-flow/core"),require("@vue-flow/background"),require("@vue-flow/controls"),require("@vue-flow/node-resizer")):typeof define=="function"&&define.amd?define(["exports","vue","@element-plus/icons-vue","element-plus","pinia","@vue-flow/core","@vue-flow/background","@vue-flow/controls","@vue-flow/node-resizer"],e):(te=typeof globalThis<"u"?globalThis:te||self,e(te.AIFlowUI={},te.Vue,te.ElementPlusIconsVue,te.ElementPlus,te.Pinia,te.VueFlowCore,te.VueFlowBackground,te.VueFlowControls,te.VueFlowNodeResizer))})(this,(function(te,e,U,Y,_e,J,Ge,ze,He){"use strict";const $={START:"start",END:"end",DATA_SOURCE:"dataSource",SMALL_MODEL:"smallModel",DETECTION_TARGET:"detectionTarget",CLASSIFICATION_MODEL:"classificationModel",OCR:"ocr",LICENSE_PLATE:"licensePlate",TARGET_COUNT:"targetCount",TIMER_TARGET:"timerTarget",FACE_RECOGNITION:"faceRecognition"},oe={IMAGE_BRANCH:"imageBranch",SMALL_MODEL:"smallModel",SMALL_MODEL_BRANCH:"smallModelBranch"},Ue={[$.DETECTION_TARGET]:"检测目标",[$.CLASSIFICATION_MODEL]:"分类模型",[$.OCR]:"OCR识别",[$.LICENSE_PLATE]:"车牌识别",[$.TARGET_COUNT]:"目标计数",[$.TIMER_TARGET]:"目标计时",[$.FACE_RECOGNITION]:"人脸识别",[$.SMALL_MODEL]:"小模型"},Pe={cls:$.CLASSIFICATION_MODEL,ocr:$.OCR,license_plate:$.LICENSE_PLATE,target_count:$.TARGET_COUNT,timer_target:$.TIMER_TARGET,face_recognition:$.FACE_RECOGNITION},me={ALGORITHM:"algorithm",TASK:"task"},pe={CREATE:"create",EDIT:"edit",DETAIL:"detail"},ae=c=>`${c}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,Ne=c=>({id:ae("start"),type:"start",position:c,data:{label:"开始",algorithmName:"",algorithmDescription:"",enableBranch:!0,branchLogic:"and",groupWindowSeconds:null}}),ge=c=>({id:ae("end"),type:"end",position:c,data:{label:"结束",input_schema:{properties:{reportFrequency:{type:"string",title:"上报频率",description:"选择告警上报的频率方式",enum:["always","interval"],enumLabels:["实时上报","按时间间隔上报"],default:"always"},reportInterval:{type:"integer",title:"上报间隔(秒)",description:"按时间间隔上报时的间隔秒数",minimum:1,maximum:3600,default:30,dependsOn:{field:"reportFrequency",value:"interval"}},enableDeduplication:{type:"boolean",title:"相同预警自动去重",description:"开启后,系统会自动过滤相似度高于阈值的重复告警",default:!1},similarityThreshold:{type:"integer",title:"预警目标相似度(%)",description:"相似度高于此阈值的告警将被自动去重",minimum:0,maximum:100,default:80,dependsOn:{field:"enableDeduplication",value:!0}}},required:["reportFrequency"]},arguments:{reportFrequency:"always",reportInterval:30,enableDeduplication:!1,similarityThreshold:80}}}),he=c=>({id:ae("dataSource"),type:"dataSource",position:c,data:{label:"数据源",enableImageSequence:!1,input_schema:{properties:{description:{type:"string",title:"描述信息",maxLength:64,default:""},needCooperativeDetection:{type:"boolean",title:"是否需要协同检测",description:"开启协同检测后,该数据源下的多个摄像机画面会按协同条件检测。使用此算法的任务将不支持轮巡",default:!1},windowSeconds:{type:"number",title:"协同窗口(秒)",description:"协同检测的时间窗口,单位为秒",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},enableImageSequence:{type:"boolean",title:"开启图片时序",description:"开启后将区分首帧检测和后续帧检测",default:!1}},required:[]},arguments:{description:"",needCooperativeDetection:!1,windowSeconds:5,enableImageSequence:!1},enableBranch:!0,branchLogic:"and"}}),Ce=(c,o="默认模型")=>({id:ae("smallModel"),type:"smallModel",position:c,data:{label:"小模型",modelName:o,modelId:null,input_schema:{},arguments:{}}}),ke=(c,o="检测目标")=>({id:ae("detectionTarget"),type:"detectionTarget",position:c,data:{label:"检测目标",targetName:o,targetId:null,input_schema:{},arguments:{}}}),xe=(c,o="分类模型")=>({id:ae("classificationModel"),type:"classificationModel",position:c,data:{label:"分类模型",modelName:o,input_schema:{},arguments:{}}}),be=c=>({id:ae("ocr"),type:"ocr",position:c,data:{label:"OCR识别",input_schema:{},arguments:{}}}),Ee=c=>({id:ae("licensePlate"),type:"licensePlate",position:c,data:{label:"车牌识别",input_schema:{},arguments:{}}}),we=c=>({id:ae("targetCount"),type:"targetCount",position:c,data:{label:"目标计数",description:"",arguments:{targets:[],alertConditions:[{operator:">",value:0}],conditionRelation:"OR"},input_schema:{targets:{required:!0,type:"array",minLength:1},alertConditions:{required:!1,type:"array"}}}}),Be=c=>({id:ae("timerTarget"),type:"timerTarget",position:c,data:{label:"目标计时",description:"",arguments:{duration:30,condition_type:"similarity",similarity_threshold:90,hit_rate_threshold:80,overlap_detection:{enabled:!1,operator:"gt",threshold:null},reset_timer:!1},input_schema:{duration:{required:!0,type:"integer",min:1,max:3600},condition_type:{required:!0,type:"string",enum:["similarity","hit_rate"]},similarity_threshold:{required:!1,type:"integer",min:0,max:100},hit_rate_threshold:{required:!1,type:"integer",min:0,max:100},reset_timer:{required:!0,type:"boolean"}}}}),je=(c,o={width:300,height:160},t="and",B=null)=>({id:ae("group"),type:"group",position:c,style:{width:`${o.width}px`,height:`${o.height}px`},data:{label:"并行组",branchLogic:t,sourceNodeId:B},selectable:!0,deletable:!1,zIndex:-1}),Ve=c=>({id:ae("faceRecognition"),type:"faceRecognition",position:c,data:{label:"人脸识别",input_schema:{},arguments:{}}}),Se=()=>{const c=Ne({x:80,y:300}),o=he({x:320,y:300}),t=ge({x:1e3,y:300}),B={id:`e_${c.id}_${o.id}`,source:c.id,target:o.id};return{nodes:[c,o,t],edges:[B]}},Z=_e.defineStore("workflow",()=>{const c=Se(),o=e.ref(c.nodes),t=e.ref(c.edges),B=e.ref(null),C=e.ref(null),s=e.ref(new Set),p=e.ref(new Set),h=e.computed(()=>B.value?o.value.find(n=>n.id===B.value):null),w=e.computed(()=>C.value?t.value.find(n=>n.id===C.value):null),A=n=>o.value.filter(a=>a.type===n).length,D=()=>{const n=o.value.filter(a=>a.type===$.DATA_SOURCE);n.length!==0&&(n.length===1?n[0].data.label="数据源":n.forEach((a,r)=>{a.data.label=`数据源 ${r+1}`}))},N=()=>o.value.filter(n=>n.type===$.DATA_SOURCE).length,_=()=>o.value.filter(a=>a.type===$.DATA_SOURCE).some(a=>a.data.arguments?.needCooperativeDetection===!0),T=()=>{const n=N(),a=_();return!(n>1||a)},O=n=>{o.value.push(n),n.type===$.DATA_SOURCE&&D()},g=n=>{const a=o.value.find(y=>y.id===n),r=a?.type===$.DATA_SOURCE;if(a?.type==="group"){f(n),t.value=t.value.filter(y=>y.source!==n&&y.target!==n),B.value===n&&(B.value=null);return}o.value=o.value.filter(y=>y.id!==n),t.value=t.value.filter(y=>y.source!==n&&y.target!==n),B.value===n&&(B.value=null),r&&D()},k=(n,a)=>{const r=o.value.find(y=>y.id===n);r&&(r.data={...r.data,...a})},i=(n,a)=>{const r=o.value.find(y=>y.id===n);r&&(r.position=a)},u=n=>{const a=o.value.find(r=>r.id===n.source);if(a&&(a.type===$.START||a.type===$.DATA_SOURCE)){const y=t.value.filter(R=>R.source===n.source).length+1;n={...n,data:{...n.data,branchOrder:y}}}t.value=J.addEdge(n,t.value)},d=n=>{const a=t.value.find(r=>r.id===n);if(t.value=t.value.filter(r=>r.id!==n),C.value===n&&(C.value=null),a&&a.data?.branchOrder!==void 0){const r=o.value.find(y=>y.id===a.source);r&&(r.type===$.START||r.type===$.DATA_SOURCE)&&t.value.filter(R=>R.source===a.source).sort((R,z)=>(R.data?.branchOrder||0)-(z.data?.branchOrder||0)).forEach((R,z)=>{R.data?R.data.branchOrder=z+1:R.data={branchOrder:z+1}})}},l=(n,a="and",r=null)=>{const y=je(n,{width:300,height:160},a,r);return o.value.unshift(y),y.id},b=(n,a)=>{const r=o.value.find(z=>z.id===n),y=o.value.find(z=>z.id===a);if(!r||!y||r.parentNode===a)return;r.parentNode&&S(n);const R=o.value.find(z=>z.id===n);R&&(o.value=o.value.map(z=>z.id!==n?z:{...z,position:{x:R.position.x-y.position.x,y:R.position.y-y.position.y},parentNode:a,extent:"parent"}))},S=n=>{const a=o.value.find(z=>z.id===n);if(!a||!a.parentNode)return;const r=o.value.find(z=>z.id===a.parentNode),y=r?a.position.x+r.position.x:a.position.x,R=r?a.position.y+r.position.y:a.position.y;o.value=o.value.map(z=>{if(z.id!==n)return z;const P={...z,position:{x:y,y:R}};return delete P.parentNode,delete P.extent,P})},f=n=>{const a=o.value.find(r=>r.id===n);a&&(o.value=o.value.filter(r=>r.id!==n).map(r=>{if(r.parentNode!==n)return r;const y={...r,position:{x:r.position.x+a.position.x,y:r.position.y+a.position.y}};return delete y.parentNode,delete y.extent,y}))};return{nodes:o,edges:t,selectedNodeId:B,selectedEdgeId:C,invalidNodeIds:s,invalidEdgeIds:p,selectedNode:h,selectedEdge:w,getNodeCountByType:A,getDataSourceCount:N,hasCooperativeDetection:_,supportPatrol:T,addNode:O,removeNode:g,updateNodeData:k,updateNodePosition:i,addConnection:u,removeEdge:d,updateEdgeData:(n,a)=>{const r=t.value.find(y=>y.id===n);if(r){if(a.branchOrder!==void 0){const y=o.value.find(R=>R.id===r.source);if(y&&(y.type===$.START||y.type===$.DATA_SOURCE)){const R=r.data?.branchOrder,z=a.branchOrder;if(R!==z&&z!==null){const W=t.value.filter(j=>j.source===r.source&&j.id!==n).find(j=>j.data?.branchOrder===z);W&&(W.data?W.data.branchOrder=R:W.data={branchOrder:R})}}}r.data={...r.data,...a}}},selectNode:n=>{B.value=n,C.value=null},selectEdge:n=>{C.value=n,B.value=null},clearSelection:()=>{B.value=null,C.value=null},resetWorkflow:()=>{const n=Se();o.value=n.nodes,t.value=n.edges,B.value=null,C.value=null},loadWorkflow:(n,a)=>{o.value=n,t.value=a,B.value=null,C.value=null},refreshDataSourceLabels:D,createEmptyGroup:l,addNodeToGroup:b,removeNodeFromGroup:S,dissolveParallelGroup:f,initializeSubsequentFrames:n=>{o.value.find(r=>r.id===n)&&k(n,{subsequentFrames:[{id:"default-subsequent",label:"后续帧检测",handleId:"subsequent-frame"}]})},addSubsequentFrame:(n,a)=>{const r=o.value.find(y=>y.id===n);!r||r.type!=="dataSource"||(r.data.subsequentFrames||(r.data.subsequentFrames=[]),r.data.subsequentFrames.push(a),k(n,{subsequentFrames:[...r.data.subsequentFrames]}))},removeSubsequentFrame:(n,a)=>{const r=o.value.find(z=>z.id===n);if(!r||r.type!=="dataSource")return;const y=r.data.subsequentFrames.find(z=>z.id===a);y&&t.value.filter(P=>P.source===n&&P.sourceHandle===y.handleId).forEach(P=>d(P.id));const R=r.data.subsequentFrames.filter(z=>z.id!==a);R.forEach((z,P)=>{z.id==="default-subsequent"?z.label="后续帧检测":z.label=`后续帧检测${P+1}`}),k(n,{subsequentFrames:R})},setInvalidIds:(n,a)=>{s.value=new Set(n),p.value=new Set(a)},clearInvalidIds:()=>{s.value=new Set,p.value=new Set}}}),We="",Je=3e4;async function Ye(c,o={}){const t=new AbortController,B=setTimeout(()=>t.abort(),Je),C={headers:{"Content-Type":"application/json",...o.headers},signal:t.signal,...o};try{const s=`${We}${c}`,p=await fetch(s,C);if(clearTimeout(B),!p.ok){const h=await p.text().catch(()=>"请求失败");throw new Error(`HTTP error! status: ${p.status}, message: ${h}`)}return p.json()}catch(s){throw clearTimeout(B),s.name==="AbortError"?new Error("请求超时"):s}}const ye=(c,o)=>Ye(c,{method:"POST",body:o?JSON.stringify(o):void 0}),Xe="/api/v1/linglong/workflow/tools/list",Qe="/api/v1/linglong/workflow/rules/insert",Ke="/api/v1/linglong/model/find-all",le={DETECTION:"detection",CLASSIFICATION:"classification",OCR:"ocr",FACE:"face",LICENSE_PLATE:"license_plate",STREAM:"stream",SMALL:"small",END:"end"},ue=(c,o="")=>ye(Xe,{type:c,name:o}).then(t=>t.data||[]),Ze=c=>ye(Ke,{catalog:"classify",subCatalog:"macro",cuType:"4",userId:"012fef30a0828c611f19994b04fa6c1a52e",...c}).then(o=>{if(o.code===200&&o.data)return o.data;throw new Error(o.resultDesc||"获取模型列表失败")}),ve=c=>ye(Qe,c);class Te{static backendToFrontend(o){const{id:t,title:B,name:C,inputSchema:s,extraConfig:p}=o,h={id:t,title:B,label:C,type:"DETECTION_TARGET",inputSchema:s,extraConfig:p,data:{targetId:B,targetName:C,description:C,areas:s?.properties?.areas?.default||[],threshold:s?.properties?.threshold?.default||.5,targetWidth:s?.properties?.targetWidth?.default||20,targetHeight:s?.properties?.targetHeight?.default||20,postmodel:s?.properties?.postmodel?.default||"ClipVit",expandRect:s?.properties?.expandRect?.default!==void 0?s.properties.expandRect.default:!1,topScale:s?.properties?.topScale?.default||1.6,bottomScale:s?.properties?.bottomScale?.default||1.6,leftScale:s?.properties?.leftScale?.default||1.6,rightScale:s?.properties?.rightScale?.default||1.6,enableStructure:p?.showStruct!==void 0?!1:void 0}};return Object.keys(h.data).forEach(w=>{h.data[w]===void 0&&delete h.data[w]}),h}}const et=()=>{const c=Z(),o={START_X:80,START_Y:300,H_GAP:240,V_GAP:180},t=V=>Pe[V]||$.DETECTION_TARGET,B=V=>Ue[V]||V,C=V=>{if(!V)return{targets:[],alertConditions:[{operator:">",value:0}],conditionRelation:"OR"};const M=V.rules||[],G=V.logic||"AND";return{targets:[],countType:"conditional_count",conditionRelation:G,alertConditions:M.map(m=>({operator:m.op,value:m.value}))}},s=V=>{if(!V)return{duration:30,condition_type:"similarity",similarity_threshold:90,hit_rate_threshold:80,overlap_detection:{enabled:!1,operator:"gt",threshold:null},reset_timer:!1};const M={">":"gt","=":"eq","<":"lt"};return{duration:V.value??30,condition_type:V.similarity?"similarity":"hit_rate",similarity_enabled:!!V.similarity,similarity_threshold:V.similarity?.value??90,hit_rate_enabled:!!V.hitCount,hit_rate_threshold:V.hitCount?.value??80,overlap_detection:V.overlap?{enabled:!0,operator:M[V.overlap.op]||"gt",threshold:V.overlap.value}:{enabled:!1,operator:"gt",threshold:null},reset_timer:!1}},p=V=>{if(!V)return{};const M={};return V.interval&&(M.reportFrequency="interval",M.reportInterval=V.interval.value),V.dedup&&(M.enableDeduplication=!0,M.similarityThreshold=V.dedup.value),M},h=(V,M)=>V.streamConfig?(V.children||[]).some(E=>(E.branchRefs||[]).some(H=>M.branches?.[H]))?oe.SMALL_MODEL_BRANCH:oe.SMALL_MODEL:oe.IMAGE_BRANCH,w=V=>!V||typeof V!="object"?"无效的JSON格式":!V.ruleName&&V.ruleName!==""?"缺少 ruleName 字段":V.ruleSchema?.sourceGroups?.length?null:"缺少 ruleSchema.sourceGroups",A=(V,M,G={})=>({id:ae(V),type:V,position:{...M},data:{label:G.label||B(V),...G}}),D=(V,M,G={})=>{const{sourceHandle:m,...E}=G,H={id:`e_${V}_${M}`,source:V,target:M};return m&&(H.sourceHandle=m),Object.keys(E).length>0&&(H.data=E),H};let N={};const _=async V=>(N[V]||(N[V]=await ue(V,"")),N[V]),T=()=>{N={}},O=async(V,M)=>{V.modelName=M||"",V.title=M||"",V.modelId=M||null;try{const m=(await _(le.SMALL)).find(E=>E.title===M);m&&(V.input_schema=m.inputSchema||m.input_schema||{},V.modelId=m.id||m.title,V.modelName=m.name||M,V.modelType=m.type,V.supportDirectAlert=m.supportDirectAlert||!1,V.extraConfig=m.extraConfig)}catch(G){console.warn("Failed to load small model schema:",G)}},g=async(V,M)=>{const G=t(V.toolTitle),m={label:V.nodeName||B(G),arguments:V.arguments||{},input_schema:{}};switch(G){case $.DETECTION_TARGET:m.targetId=V.toolTitle,m.targetName=V.nodeName||"检测目标";try{const H=(await _(le.DETECTION)).find(I=>I.title===V.toolTitle);if(H){let L=Te.backendToFrontend(H).inputSchema||{};if(V.toolTitle==="other"){const n={type:"object",properties:{object:{type:"array",title:"检测目标",description:"输入检测目标名称",items:{type:"string"},default:[""],minItems:1,"x-component":"paired-array","x-paired-with":"threshold"},threshold:{type:"array",title:"检测阈值",description:"每个目标的检测阈值",items:{type:"number",minimum:0,maximum:1},default:[.5],minItems:1}},required:["object","threshold"]};L={...L,properties:{...L.properties,...n.properties}}}m.input_schema=L}}catch(E){console.warn("Failed to load detection target schema:",E)}break;case $.CLASSIFICATION_MODEL:m.modelName=V.nodeName||"分类模型";break;case $.SMALL_MODEL:await O(m,V.toolTitle);break}return V.branchLogic&&(m.enableBranch=!0,m.branchLogic=V.branchLogic),A(G,M,m)},k=()=>({properties:{reportFrequency:{type:"string",title:"上报频率",description:"选择告警上报的频率方式",enum:["always","interval"],enumLabels:["实时上报","按时间间隔上报"],default:"always"},reportInterval:{type:"integer",title:"上报间隔(秒)",description:"按时间间隔上报时的间隔秒数",minimum:1,maximum:3600,default:30,dependsOn:{field:"reportFrequency",value:"interval"}},enableDeduplication:{type:"boolean",title:"相同预警自动去重",description:"开启后,系统会自动过滤相似度高于阈值的重复告警",default:!1},similarityThreshold:{type:"integer",title:"预警目标相似度(%)",description:"相似度高于此阈值的告警将被自动去重",minimum:0,maximum:100,default:80,dependsOn:{field:"enableDeduplication",value:!0}}},required:["reportFrequency"]}),i=()=>({properties:{description:{type:"string",title:"描述信息",maxLength:64,default:""},needCooperativeDetection:{type:"boolean",title:"是否需要协同检测",default:!1},windowSeconds:{type:"number",title:"协同窗口(秒)",description:"协同检测的时间窗口,单位为秒",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},enableImageSequence:{type:"boolean",title:"开启图片时序",default:!1}},required:[]}),u=async(V,M,G,m)=>{const E={label:"小模型",input_schema:{},arguments:V.arguments||{}};return await O(E,V.toolTitle),M===oe.SMALL_MODEL_BRANCH&&(E.enableBranch=!0,E.branchLogic=G.logic||"and"),A("smallModel",m,E)},d=async(V,M,G,m,E,H)=>{let I=M,L=m;const n={branchOrder:V.sortOrder??1,branchName:V.branchName||""};V.sourceHandle&&(n.sourceHandle=V.sourceHandle),V.timeWindowSeconds!==void 0&&(n.timeWindowSeconds=V.timeWindowSeconds),V.description&&(n.branchDescription=V.description);const a=V.nodes||[];for(let r=0;r<a.length;r++){const y=a[r],R=await g(y,{x:L,y:G});E.push(R),r===0?H.push(D(I,R.id,n)):H.push(D(I,R.id)),I=R.id,L+=o.H_GAP}if(V.targetCount){const r=C(V.targetCount),y=A("targetCount",{x:L,y:G},{label:"目标计数",arguments:r,input_schema:{targets:{required:!0,type:"array",minLength:1},alertConditions:{required:!1,type:"array"}}});E.push(y),H.push(D(I,y.id)),I=y.id,L+=o.H_GAP}if(V.duration){const r=s(V.duration),y=A("timerTarget",{x:L,y:G},{label:"目标计时",arguments:r,input_schema:{duration:{required:!0,type:"integer",min:1,max:3600},condition_type:{required:!0,type:"string",enum:["similarity","hit_rate"]},similarity_threshold:{required:!1,type:"integer",min:0,max:100},hit_rate_threshold:{required:!1,type:"integer",min:0,max:100},reset_timer:{required:!0,type:"boolean"}}});E.push(y),H.push(D(I,y.id)),I=y.id,L+=o.H_GAP}return{lastNodeId:I,endX:L}},l=V=>{const M=V.ruleSchema.sourceGroups||[],G=V.ruleSchema.groupLogic||"and",m=M.length>1;return A("start",{x:o.START_X,y:o.START_Y},{label:"开始",algorithmName:V.ruleName||"",algorithmDescription:V.description||"",enableBranch:m?!0:G!=="and",branchLogic:G,groupWindowSeconds:V.ruleSchema.groupWindowSeconds??null})},b=V=>{const M=p(V.extraConfig);return A("end",{x:0,y:o.START_Y},{label:"结束",input_schema:k(),arguments:{reportFrequency:"always",reportInterval:30,enableDeduplication:!1,similarityThreshold:80,...M}})},S=(V,M)=>(V||[]).map(G=>{const m=h(G,M),E=[];return(G.children||[]).forEach(H=>{(H.branchRefs||[]).forEach(I=>{M.branches?.[I]&&E.push(M.branches[I])})}),{sg:G,mode:m,refBranches:E}}),f=V=>{const G=(V.reduce((m,E)=>m+Math.max(E.refBranches.length,1),0)-1)*o.V_GAP;return o.START_Y-G/2},x=async(V,M,G,m,E,H)=>{const{sg:I,mode:L,refBranches:n}=V,a=Math.max(n.length,1),r=G+(a-1)*o.V_GAP/2;let y=o.START_X+o.H_GAP,R=o.START_X;const z=I.logic==="order",P=A("dataSource",{x:y,y:r},{label:I.name||"数据源",enableImageSequence:z,input_schema:i(),arguments:{description:"",needCooperativeDetection:!!I.synEnabled,windowSeconds:I.windowSeconds||5,enableImageSequence:z},enableBranch:!0,branchLogic:z?"order":I.logic||"and"});m.push(P),E.push(D(M.id,P.id));const W=z?{dataSourceNode:P,refBranches:n}:null;let j=P.id;if(L===oe.SMALL_MODEL||L===oe.SMALL_MODEL_BRANCH){y+=o.H_GAP;const X=await u(I.streamConfig,L,I,{x:y,y:r});m.push(X),E.push(D(P.id,X.id)),j=X.id}if(n.length>0)for(let X=0;X<n.length;X++){const v=G+X*o.V_GAP,{lastNodeId:ee,endX:K}=await d(n[X],j,v,y+o.H_GAP,m,E);E.push(D(ee,H.id)),K>R&&(R=K)}else{E.push(D(j,H.id));const X=y+o.H_GAP;X>R&&(R=X)}return{branchY:G+a*o.V_GAP,maxX:R,imageSequenceInfo:W}},q=V=>{for(const{dataSourceNode:M,refBranches:G}of V){const m=G.filter(E=>E.sourceHandle&&E.sourceHandle!=="first-frame");m.length>0&&(M.data.subsequentFrames=m.map((E,H)=>({id:H===0?"default-subsequent":`subsequent-${Date.now()}-${H}`,label:H===0?"后续帧检测":`后续帧检测${H+1}`,handleId:E.sourceHandle})))}};return{importFromJSON:async V=>{const M=w(V);if(M)return Y.ElMessage.error(M),!1;try{T();const G=[],m=[],E=l(V),H=b(V);G.push(E);const I=S(V.ruleSchema.sourceGroups,V);let L=f(I),n=o.START_X;const a=[];for(const r of I){const y=await x(r,E,L,G,m,H);L=y.branchY,y.maxX>n&&(n=y.maxX),y.imageSequenceInfo&&a.push(y.imageSequenceInfo)}return H.position.x=n+o.H_GAP,G.push(H),q(a),c.loadWorkflow(G,m),Y.ElMessage.success("导入成功"),!0}catch(G){return Y.ElMessage.error("导入失败: "+(G.message||"未知错误")),!1}},validateImportJSON:w}},Q=(c,o)=>{const t=c.__vccOpts||c;for(const[B,C]of o)t[B]=C;return t},tt={key:0,class:"error-msg"},nt=Q({__name:"ImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","imported"],setup(c,{emit:o}){const t=c,B=o,{importFromJSON:C}=et(),s=e.ref(!1),p=e.ref("paste"),h=e.ref(""),w=e.ref(""),A=e.ref(""),D=e.ref(null);e.watch(()=>t.modelValue,g=>{s.value=g}),e.watch(s,g=>{B("update:modelValue",g)});const N=g=>{A.value="";const k=new FileReader;k.onload=i=>{w.value=i.target.result},k.onerror=()=>{A.value="文件读取失败"},k.readAsText(g.raw)},_=()=>{w.value=""},T=async()=>{A.value="";const g=p.value==="paste"?h.value:w.value;if(!g||!g.trim()){A.value="请输入或上传JSON数据";return}let k;try{k=JSON.parse(g)}catch{A.value="JSON格式不正确,请检查";return}await C(k)&&(B("imported"),O())},O=()=>{s.value=!1,h.value="",w.value="",A.value="",p.value="paste",D.value?.clearFiles()};return(g,k)=>{const i=e.resolveComponent("el-input"),u=e.resolveComponent("el-tab-pane"),d=e.resolveComponent("el-icon"),l=e.resolveComponent("el-upload"),b=e.resolveComponent("el-tabs"),S=e.resolveComponent("el-button"),f=e.resolveComponent("el-dialog");return e.openBlock(),e.createBlock(f,{modelValue:s.value,"onUpdate:modelValue":k[2]||(k[2]=x=>s.value=x),title:"导入工作流",width:"600px","close-on-click-modal":!1,onClose:O},{footer:e.withCtx(()=>[e.createVNode(S,{onClick:O},{default:e.withCtx(()=>[...k[5]||(k[5]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(S,{type:"primary",onClick:T},{default:e.withCtx(()=>[...k[6]||(k[6]=[e.createTextVNode("确认导入",-1)])]),_:1})]),default:e.withCtx(()=>[e.createVNode(b,{modelValue:p.value,"onUpdate:modelValue":k[1]||(k[1]=x=>p.value=x)},{default:e.withCtx(()=>[e.createVNode(u,{label:"粘贴JSON",name:"paste"},{default:e.withCtx(()=>[e.createVNode(i,{modelValue:h.value,"onUpdate:modelValue":k[0]||(k[0]=x=>h.value=x),type:"textarea",rows:12,placeholder:"请粘贴导出的JSON数据...",class:"json-input"},null,8,["modelValue"])]),_:1}),e.createVNode(u,{label:"上传文件",name:"upload"},{default:e.withCtx(()=>[e.createVNode(l,{ref_key:"uploadRef",ref:D,"auto-upload":!1,limit:1,accept:".json","on-change":N,"on-remove":_,drag:""},{tip:e.withCtx(()=>[...k[3]||(k[3]=[e.createElementVNode("div",{class:"el-upload__tip"},"仅支持 .json 文件",-1)])]),default:e.withCtx(()=>[e.createVNode(d,{class:"el-icon--upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Upload))]),_:1}),k[4]||(k[4]=e.createElementVNode("div",{class:"el-upload__text"},[e.createTextVNode(" 将 JSON 文件拖到此处,或"),e.createElementVNode("em",null,"点击上传")],-1))]),_:1},512)]),_:1})]),_:1},8,["modelValue"]),A.value?(e.openBlock(),e.createElementBlock("div",tt,e.toDisplayString(A.value),1)):e.createCommentVNode("",!0)]),_:1},8,["modelValue"])}}},[["__scopeId","data-v-87854a39"]]),De=(c,o)=>{const t=[],B=[],C=c.filter(i=>i.type!=="group"),s=C.filter(i=>i.type===$.START);s.length===0?t.push("工作流必须包含一个开始节点"):s.length>1&&t.push("工作流只能包含一个开始节点"),C.filter(i=>i.type===$.END).length===0&&t.push("工作流必须至少包含一个结束节点");const h=C.filter(i=>i.type===$.DATA_SOURCE);h.length===0&&t.push("工作流必须至少包含一个数据源节点"),C.filter(i=>i.type===$.DETECTION_TARGET||i.type===$.SMALL_MODEL||i.type===$.CLASSIFICATION_MODEL).length===0&&t.push("工作流必须至少包含一个检测目标、内置小模型或分类模型");const A=C.some(i=>i.type===$.SMALL_MODEL),D=h.some(i=>i.data.arguments?.needCooperativeDetection===!0),N=h.length>1;(D||N)&&B.push("当前配置下,算法任务将不支持轮巡"),A&&B.push("包含内置小模型的算法任务不支持轮巡"),C.forEach(i=>{const u=o.filter(l=>l.target===i.id),d=o.filter(l=>l.source===i.id);if(i.type===$.START&&u.length>0&&B.push("开始节点不应有输入连接"),i.type===$.END&&d.length>0&&B.push("结束节点不应有输出连接"),i.type===$.START&&d.length===0&&t.push("开始节点必须有输出连接"),i.type===$.END&&u.length===0&&t.push("结束节点必须有输入连接"),i.type===$.DATA_SOURCE&&i.data.enableImageSequence)if(d.length===0)t.push({nodeId:i.id,message:`数据源节点"${i.data.label}"开启了图片时序但未连接到任何处理节点`});else{const l=d.filter(x=>x.sourceHandle==="first-frame"),b=i.data.subsequentFrames||[],S=new Set(d.map(x=>x.sourceHandle)),f=b.filter(x=>!S.has(x.handleId));l.length===0&&B.push({nodeId:i.id,message:`数据源节点"${i.data.label}"的首帧检测未连接`}),f.length>0&&B.push({nodeId:i.id,message:`数据源节点"${i.data.label}"有${f.length}个后续帧未连接`})}i.type!==$.START&&i.type!==$.END&&!i.parentNode&&(u.length===0||d.length===0)&&B.push(`节点 "${i.data.label}" 可能未正确连接`)});const _=new Set;o.forEach(i=>{const u=c.find(d=>d.id===i.source);u?.type==="dataSource"&&u.data?.enableImageSequence===!0&&i.sourceHandle!=="first-frame"&&(!i.data?.timeWindowSeconds||i.data.timeWindowSeconds<1)&&t.push({edgeId:i.id,message:`分支"${i.data?.branchName||"未命名"}"缺少必填项:后续检测帧的持续时间`}),_.add(i.source),_.add(i.target)}),C.forEach(i=>{i.parentNode||!_.has(i.id)&&C.length>1&&B.push(`节点 "${i.data.label}" 未连接到工作流`)});const T=ot(C,o);t.push(...T);const O=at(C,o);t.push(...O);const g=lt(C,o);t.push(...g);const k=rt(C,o);return t.push(...k),{valid:t.length===0,errors:t,warnings:B}},ot=(c,o)=>{const t=[],B=c.find(p=>p.type===$.START);if(!B)return t;const C=new Set,s=(p,h,w,A)=>{if(h.includes(p))return;const D=c.find(g=>g.id===p);if(!D)return;const N=[...h,p];let _=[...w],T=[...A];if(D.type===$.TARGET_COUNT&&_.push(D),D.type===$.TIMER_TARGET&&T.push(D),D.type===$.END){const g=N.join("->");C.has(g)||(C.add(g),_.length>1&&t.push(`工作流分支中存在多个目标计数节点(${_.map(k=>`"${k.data.label}"`).join("、")}),每条分支只允许一个目标计数节点`),T.length>1&&t.push(`工作流分支中存在多个目标计时节点(${T.map(k=>`"${k.data.label}"`).join("、")}),每条分支只允许一个目标计时节点`));return}const O=o.filter(g=>g.source===p);O.length===0?(_.length>1&&t.push(`工作流分支中存在多个目标计数节点(${_.map(g=>`"${g.data.label}"`).join("、")}),每条分支只允许一个目标计数节点`),T.length>1&&t.push(`工作流分支中存在多个目标计时节点(${T.map(g=>`"${g.data.label}"`).join("、")}),每条分支只允许一个目标计时节点`)):O.forEach(g=>{s(g.target,N,_,T)})};return s(B.id,[],[],[]),t},at=(c,o)=>{const t=[];return c.filter(C=>C.type===$.DATA_SOURCE).forEach(C=>{const s=o.filter(p=>p.source===C.id);if(s.length>1){const p=s.map(A=>A.target),w=c.filter(A=>p.includes(A.id)).filter(A=>A.type===$.SMALL_MODEL);if(w.length>0){const A=w.map(D=>`"${D.data.label||D.data.modelName}"`).join("、");t.push(`数据源节点"${C.data.label}"开启了多分支,不能包含小模型节点(${A})。小模型节点只能出现在单分支场景中(数据源只有一个直连下游节点)`)}}}),t},lt=(c,o)=>{const t=[],B=[$.TARGET_COUNT,$.TIMER_TARGET],C={[$.TARGET_COUNT]:"目标计数",[$.TIMER_TARGET]:"目标计时"};return c.filter(p=>p.type===$.SMALL_MODEL).forEach(p=>{o.filter(w=>w.source===p.id).forEach(w=>{const A=c.find(D=>D.id===w.target);if(A&&B.includes(A.type)){const D=C[A.type]||A.type;t.push(`小模型节点"${p.data.label||p.data.modelName}"不能直接连接${D}节点"${A.data.label}",请先连接检测目标节点`)}})}),t},rt=(c,o)=>{const t=[],B=[$.OCR,$.LICENSE_PLATE,$.FACE_RECOGNITION],C={[$.OCR]:"OCR识别",[$.LICENSE_PLATE]:"车牌识别",[$.FACE_RECOGNITION]:"人脸识别"};return c.filter(p=>B.includes(p.type)).forEach(p=>{const h=o.filter(D=>D.source===p.id),w=B.filter(D=>D!==p.type).concat($.END),A=p.data.label||C[p.type];h.forEach(D=>{const N=c.find(_=>_.id===D.target);N&&!w.includes(N.type)&&t.push(`${A}节点"${A}"只能连接除自身外的辅助节点或结束节点,当前连接到了"${N.data.label||N.type}"节点`)}),h.length===0&&t.push(`${A}节点"${A}"必须连接到其他辅助节点或结束节点`)}),t},Ae=()=>{const c=Z(),o=e.inject("editorMode",me.ALGORITHM),t=e.inject("pageMode",pe.CREATE),B=e.computed(()=>De(c.nodes,c.edges)),C=n=>{const a=new Map;return n.forEach(r=>a.set(r.id,r)),a},s=(n,a,r)=>(n[a]||[]).map(y=>r.get(y)).filter(Boolean),p=(n,a)=>{const r={},y=new Set(n.filter(R=>R.type==="group").map(R=>R.id));return a.forEach(R=>{if(y.has(R.source)&&y.has(R.target))return;let z=R.source,P=R.target;if(y.has(z)){const W=a.find(j=>j.target===z&&!y.has(j.source));if(!W)return;z=W.source}if(y.has(P)){const W=a.find(j=>j.source===P&&!y.has(j.target));if(!W)return;P=W.target}r[z]||(r[z]=[]),r[z].includes(P)||r[z].push(P)}),r},h=(n,a)=>{const r=[...a.values()].find(P=>P.type===$.START);if(!r)return[];const y=new Set,R=[],z=P=>{if(y.has(P))return;y.add(P);const W=a.get(P);if(!W)return;W.type!==$.START&&W.type!==$.END&&W.type!=="group"&&R.push(W),(n[P]||[]).forEach(X=>z(X))};return z(r.id),R},w=(n,a,r,y)=>{if(r){const R=s(n,r.id,a).find(z=>z.type===$.SMALL_MODEL);if(R)return R}return y.find(R=>R.type===$.SMALL_MODEL)||null},A=(n,a,r)=>{const R=s(a,n.id,r).find(P=>P.type===$.SMALL_MODEL);return R?s(a,R.id,r).filter(P=>P.type!==$.END&&P.type!==$.START&&P.type!==$.DATA_SOURCE).length>0?oe.SMALL_MODEL_BRANCH:oe.SMALL_MODEL:oe.IMAGE_BRANCH},D=(n,a,r,y,R)=>{if(a===oe.SMALL_MODEL||a===oe.SMALL_MODEL_BRANCH){const P=w(y,R,r,n);return P?{toolTitle:P.data.title||P.data.modelName||"",toolType:"small",arguments:k(P.data.arguments,$.SMALL_MODEL)}:null}const z=n.find(P=>P.type===$.DETECTION_TARGET);return z?{toolTitle:z.data.targetId||"",toolType:"stream",decoder:{swDecoding:!1,mode:0,interval:0},arguments:k(z.data.arguments,$.DETECTION_TARGET)}:null},N=()=>{const n=c.nodes.find(y=>y.type===$.END);if(!n||!n.data.arguments)return{};const a=n.data.arguments,r={};return a.reportFrequency==="interval"&&a.reportInterval&&(r.interval={value:a.reportInterval}),a.enableDeduplication&&a.similarityThreshold!==void 0&&(r.dedup={value:a.similarityThreshold}),r},_=n=>{const a=n.alertConditions||[];return{targetCount:{logic:n.conditionRelation||"AND",rules:a.map(y=>({op:y.operator,value:y.value}))}}},T=n=>{const a={op:">",value:n.duration??30,unit:"seconds"};if(n.hit_rate_enabled&&n.hit_rate_threshold!==void 0&&(a.hitCount={op:">=",value:n.hit_rate_threshold}),n.overlap_detection?.enabled&&n.overlap_detection?.threshold!==void 0){const r=n.overlap_detection.operator||"gt",y={gt:">",eq:"=",lt:"<"};a.overlap={op:y[r]||">",value:n.overlap_detection.threshold,matchFrames:3}}return n.similarity_enabled&&n.similarity_threshold!==void 0&&(a.similarity={op:">",value:n.similarity_threshold,matchFrames:3}),{duration:a}},O={[$.TARGET_COUNT]:_,[$.TIMER_TARGET]:T},g=["detectionScope","description","detectionType","builtinTarget","universalTargetName","customModel","cloudModel","enableMultiFrame","continuousTime","lines","target_class"],k=(n,a)=>{if(!n)return{};const r=O[a];if(r)return r(n);const y={...n};return g.forEach(R=>{delete y[R]}),Object.keys(y).forEach(R=>{const z=y[R];(z==null||z==="")&&delete y[R]}),y},i=(n,a,r,y)=>{const R={toolTitle:d(n),nodeName:n.data.label||n.data.targetName||"",sortOrder:a,arguments:k(n.data.arguments,n.type)};if(n.data.enableBranch&&n.data.branchLogic&&(R.branchLogic=n.data.branchLogic),r){const z=y.find(P=>P.source===r&&P.target===n.id);z?.data?.branchOrder!==void 0&&z?.data?.branchOrder!==null&&(R.branchOrder=z.data.branchOrder)}return R},u=(n,a,r,y)=>{const R=n.nodes.findIndex(P=>P.toolTitle===a);if(R===-1)return;const z=n.nodes[R];z.arguments?.[r]&&(n[y]=z.arguments[r]),n.nodes=n.nodes.filter((P,W)=>W!==R),n.nodes.forEach((P,W)=>{P.sortOrder=W+1})},d=n=>{switch(n.type){case $.DETECTION_TARGET:return n.data.targetId||"";case $.CLASSIFICATION_MODEL:return"cls";case $.OCR:return"ocr";case $.LICENSE_PLATE:return"license_plate";case $.SMALL_MODEL:return n.data.title||n.data.modelName||"";case $.TARGET_COUNT:return"target_count";case $.TIMER_TARGET:return"timer_target";case $.FACE_RECOGNITION:return"face";default:return n.data.label||""}},l=(n,a,r,y,R)=>{const z=[],P=Array.isArray(n)?[...n]:[n],W=new Set;let j=1;for(;P.length>0;){const X=[...P];P.length=0;const v=[];X.forEach(ee=>{if(W.has(ee))return;W.add(ee);const K=y.get(ee);if(!K||K.type===$.END||K.type===$.START||K.type===$.DATA_SOURCE)return;v.push(K),(r[ee]||[]).forEach(fe=>{const ie=y.get(fe);ie&&ie.type!==$.END&&P.push(fe)})}),v.length>0&&(v.forEach(ee=>{const K=i(ee,j,a,R);v.length>1&&(K.nodeLogic="or"),z.push(K)}),j++)}return z},b=n=>{if(n.length<=1)return;const a=n.map(y=>y.sortOrder);if(new Set(a).size!==a.length){const y=a.filter((R,z)=>a.indexOf(R)!==z);throw new Error(`分支执行顺序存在重复:${[...new Set(y)].join(", ")}。请在配置面板中修改分支边的执行顺序,确保每个分支的执行顺序唯一。`)}},S=(n,a,r,y,R)=>{let z=[],P;if(n===oe.IMAGE_BRANCH)a&&(z=s(y,a.id,R).filter(W=>W.type!==$.END)),P=a?.id||r.find(W=>W.type===$.DATA_SOURCE)?.id;else if(n===oe.SMALL_MODEL_BRANCH){const W=w(y,R,a,r);W&&(z=s(y,W.id,R).filter(j=>j.type!==$.END),P=W.id)}return{branchStartNodes:z,sourceNodeId:P}},f=(n,a,r,y,R,z)=>{const{branchStartNodes:P,sourceNodeId:W}=S(a,r,n,y,R);if(P.length===0)return[];const j=[];return P.forEach((X,v)=>{const ee=l([X.id],W,y,R,z);if(ee.length===0)return;const K=W?z.find(qe=>qe.source===W&&qe.target===X.id):null,ne=K?.data||{},fe=ne.branchOrder!==void 0&&ne.branchOrder!==null?ne.branchOrder:v+1,ie={branchName:ne.branchName||ee[0]?.nodeName||`分支${v+1}`,sortOrder:fe,nodes:ee};K?.sourceHandle&&(ie.sourceHandle=K.sourceHandle),u(ie,"target_count","targetCount","targetCount"),u(ie,"timer_target","duration","duration"),ne.timeWindowSeconds!==void 0&&ne.timeWindowSeconds!==null&&(ie.timeWindowSeconds=ne.timeWindowSeconds),ne.branchDescription&&(ie.description=ne.branchDescription),j.push(ie)}),b(j),j},x=()=>{const n=B.value;return n.errors.length>0?(Y.ElMessage.error(`验证失败: ${n.errors.join(", ")}`),!1):(n.warnings.length>0&&Y.ElMessage.warning(`警告: ${n.warnings.join(", ")}`),!0)},q=()=>{const n=c.nodes,a=c.edges,r=C(n),y=p(n,a),R=h(y,r),z=[...r.values()].find(P=>P.type===$.START);return{allNodes:n,edges:a,nodeMap:r,adj:y,orderedNodes:R,startNode:z}},F=n=>{const a={userId:"0",ruleName:n?.data?.algorithmName||"",description:n?.data?.algorithmDescription||"",webhookUrl:""},r=N();return Object.keys(r).length>0&&(a.extraConfig=r),a.attach={},a},V=(n,a)=>{const r=n.filter(y=>y.type===$.DATA_SOURCE);if(r.length===0){const y=a.find(R=>R.type===$.DATA_SOURCE);y&&r.push(y)}return r},M=n=>n?.data?.enableImageSequence||n?.data?.arguments?.enableImageSequence||!1?"order":n?.data?.enableBranch&&n.data.branchLogic||"and",G=(n,a,r)=>{const{orderedNodes:y,adj:R,nodeMap:z,edges:P}=a,W=A(n,R,z),j=!!n.data.arguments?.needCooperativeDetection,X={sourceGroupId:null,name:n.data.label||"数据源",synEnabled:j};if(j&&(X.windowSeconds=n.data.arguments?.windowSeconds||5),W===oe.SMALL_MODEL){const K=D(y,W,n,R,z);return K&&(X.streamConfig=K),X.logic="and",X.children=[],X}if(W===oe.SMALL_MODEL_BRANCH){const K=D(y,W,n,R,z);K&&(X.streamConfig=K)}X.logic=M(n);const v=f(y,W,n,R,z,P),ee=r.length;return X.children=v.map((K,ne)=>({name:K.branchName,branchRefs:[ee+ne]})),r.push(...v),X},m=(n,a)=>{const y={groupLogic:n?.data?.enableBranch&&n.data.branchLogic||"and",sourceGroups:a};return n?.data?.enableBranch&&n.data.groupWindowSeconds!=null&&(y.groupWindowSeconds=n.data.groupWindowSeconds),y},E=()=>{if(!x())return null;try{const n=q(),a=F(n.startNode),r=V(n.orderedNodes,n.allNodes),y=[],R=r.map(z=>G(z,n,y));return a.ruleSchema=m(n.startNode,R),y.length>0&&(a.branches=y),a.mode=o,a.pageMode=t?.value??t,a}catch(n){return Y.ElMessage.error(n.message||"导出失败"),null}};return{validation:B,exportToJSON:E,copyToClipboard:()=>{try{const n=E();if(!n)return;const a=JSON.stringify(n,null,2);if(navigator.clipboard?.writeText)navigator.clipboard.writeText(a).then(()=>{Y.ElMessage.success("已复制到剪贴板")}).catch(()=>{Y.ElMessage.error("复制失败")});else{const r=document.createElement("textarea");r.value=a,r.style.position="fixed",r.style.opacity="0",document.body.appendChild(r),r.select(),document.execCommand("copy"),document.body.removeChild(r),Y.ElMessage.success("已复制到剪贴板")}}catch(n){console.error("复制JSON失败:",n),Y.ElMessage.error(`复制失败: ${n.message}`)}},downloadJSON:()=>{const n=E();if(!n)return;const a=JSON.stringify(n,null,2),r=new Blob([a],{type:"application/json"}),y=URL.createObjectURL(r),R=document.createElement("a");R.href=y,R.download=`workflow_${Date.now()}.json`,R.click(),URL.revokeObjectURL(y),Y.ElMessage.success("导出成功")},createWorkflowRule:async()=>{const n=E();return n?{success:!0,result:await ve(n)}:{success:!1}}}},st={style:{color:"var(--el-text-color-regular)","line-height":"1.6"}},it={__name:"CreateRuleDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(c,{emit:o}){const t=c,B=o,C=Z(),{createWorkflowRule:s}=Ae(),p=e.ref(!1),h=e.ref(!1);e.watch(()=>t.modelValue,N=>{p.value=N}),e.watch(p,N=>{B("update:modelValue",N)});const w=e.computed(()=>C.nodes.find(_=>_.type==="start")?.data?.algorithmName||""),A=e.computed(()=>C.nodes.find(_=>_.type==="start")?.data?.algorithmDescription||""),D=async()=>{h.value=!0;try{await s(),Y.ElMessage.success("工作流规则创建成功"),p.value=!1}catch(N){Y.ElMessage.error(`创建失败: ${N.message||"请检查网络或联系管理员"}`)}finally{h.value=!1}};return(N,_)=>{const T=e.resolveComponent("el-descriptions-item"),O=e.resolveComponent("el-descriptions"),g=e.resolveComponent("el-button"),k=e.resolveComponent("el-dialog");return e.openBlock(),e.createBlock(k,{modelValue:p.value,"onUpdate:modelValue":_[1]||(_[1]=i=>p.value=i),title:"确认创建工作流规则",width:"480px","close-on-click-modal":!1},{footer:e.withCtx(()=>[e.createVNode(g,{onClick:_[0]||(_[0]=i=>p.value=!1)},{default:e.withCtx(()=>[..._[3]||(_[3]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(g,{type:"primary",loading:h.value,onClick:D},{default:e.withCtx(()=>[..._[4]||(_[4]=[e.createTextVNode("确认创建",-1)])]),_:1},8,["loading"])]),default:e.withCtx(()=>[e.createElementVNode("div",st,[_[2]||(_[2]=e.createElementVNode("p",null,"将当前工作流配置提交到后端创建,请确认以下信息:",-1)),e.createVNode(O,{column:1,border:"",size:"small",style:{"margin-top":"12px"}},{default:e.withCtx(()=>[e.createVNode(T,{label:"算法名称"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(w.value||"(未填写)"),1)]),_:1}),e.createVNode(T,{label:"算法描述"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(A.value||"(未填写)"),1)]),_:1})]),_:1})])]),_:1},8,["modelValue"])}}},ct={class:"json-preview"},dt={style:{margin:"8px 0","padding-left":"20px"}},mt={style:{margin:"8px 0","padding-left":"20px"}},pt={class:"json-content"},ut=Q({__name:"JsonPreviewDialog",props:{modelValue:{type:Boolean,default:!1},jsonContent:{type:String,default:""},validation:{type:Object,default:()=>({errors:[],warnings:[]})}},emits:["update:modelValue"],setup(c,{emit:o}){const t=c,B=o,C=e.ref(!1);return e.watch(()=>t.modelValue,s=>{C.value=s}),e.watch(C,s=>{B("update:modelValue",s)}),(s,p)=>{const h=e.resolveComponent("el-alert"),w=e.resolveComponent("el-dialog");return e.openBlock(),e.createBlock(w,{modelValue:C.value,"onUpdate:modelValue":p[0]||(p[0]=A=>C.value=A),title:"工作流JSON预览",width:"60%","close-on-click-modal":!1},{default:e.withCtx(()=>[e.createElementVNode("div",ct,[c.validation.errors.length>0?(e.openBlock(),e.createBlock(h,{key:0,type:"error",closable:!1,style:{"margin-bottom":"16px"}},{title:e.withCtx(()=>[p[1]||(p[1]=e.createElementVNode("div",null,"验证错误:",-1)),e.createElementVNode("ul",dt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.validation.errors,(A,D)=>(e.openBlock(),e.createElementBlock("li",{key:D},e.toDisplayString(A),1))),128))])]),_:1})):e.createCommentVNode("",!0),c.validation.warnings.length>0?(e.openBlock(),e.createBlock(h,{key:1,type:"warning",closable:!1,style:{"margin-bottom":"16px"}},{title:e.withCtx(()=>[p[2]||(p[2]=e.createElementVNode("div",null,"警告:",-1)),e.createElementVNode("ul",mt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.validation.warnings,(A,D)=>(e.openBlock(),e.createElementBlock("li",{key:D},e.toDisplayString(A),1))),128))])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("pre",pt,e.toDisplayString(c.jsonContent),1)])]),_:1},8,["modelValue"])}}},[["__scopeId","data-v-2a04a031"]]),Le=10,ft=_e.defineStore("draft",()=>{const c=e.ref([]);return{drafts:c,saveDraft:(s,p,h)=>{if(c.value.length>=Le)return Y.ElMessage.warning(`草稿箱已满,最多保存 ${Le} 条草稿`),!1;const w={id:`draft_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,name:s,nodes:JSON.parse(JSON.stringify(p)),edges:JSON.parse(JSON.stringify(h)),createdAt:Date.now()};return c.value.unshift(w),Y.ElMessage.success("草稿保存成功"),!0},getDraft:s=>{const p=c.value.find(h=>h.id===s);return p?{nodes:JSON.parse(JSON.stringify(p.nodes)),edges:JSON.parse(JSON.stringify(p.edges))}:null},removeDraft:s=>{c.value=c.value.filter(p=>p.id!==s),Y.ElMessage.success("草稿已删除")},renameDraft:(s,p)=>{const h=c.value.find(w=>w.id===s);h&&(h.name=p)}}},{persist:!0}),gt={class:"draft-save"},ht={key:0,class:"draft-tip"},yt={class:"draft-list"},_t={key:0,class:"draft-empty"},Nt={class:"draft-info"},Ct={class:"draft-name"},kt={class:"draft-time"},xt={class:"draft-actions"},bt=Q({__name:"DraftDrawer",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(c,{emit:o}){const t=c,B=o,C=e.computed({get:()=>t.modelValue,set:_=>B("update:modelValue",_)}),s=ft(),p=Z(),h=e.ref(""),w=()=>{const _=h.value.trim();if(!_)return;s.saveDraft(_,p.nodes,p.edges)&&(h.value="")},A=_=>{Y.ElMessageBox.confirm("加载草稿将覆盖当前画布内容,是否继续?","确认加载",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{const T=s.getDraft(_.id);T&&(p.loadWorkflow(T.nodes,T.edges),C.value=!1)}).catch(()=>{})},D=_=>{Y.ElMessageBox.confirm(`确定删除草稿「${_.name}」吗?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{s.removeDraft(_.id)}).catch(()=>{})},N=_=>{const T=new Date(_),O=g=>String(g).padStart(2,"0");return`${T.getFullYear()}-${O(T.getMonth()+1)}-${O(T.getDate())} ${O(T.getHours())}:${O(T.getMinutes())}`};return(_,T)=>{const O=e.resolveComponent("el-input"),g=e.resolveComponent("el-button"),k=e.resolveComponent("el-drawer");return e.openBlock(),e.createBlock(k,{modelValue:C.value,"onUpdate:modelValue":T[1]||(T[1]=i=>C.value=i),title:"草稿箱",direction:"rtl",size:"400px"},{default:e.withCtx(()=>[e.createElementVNode("div",gt,[e.createVNode(O,{modelValue:h.value,"onUpdate:modelValue":T[0]||(T[0]=i=>h.value=i),placeholder:"请输入草稿名称",maxlength:"30","show-word-limit":"",clearable:"",onKeyup:e.withKeys(w,["enter"])},null,8,["modelValue"]),e.createVNode(g,{type:"primary",disabled:!h.value.trim()||e.unref(s).drafts.length>=10,onClick:w},{default:e.withCtx(()=>[...T[2]||(T[2]=[e.createTextVNode(" 保存当前草稿 ",-1)])]),_:1},8,["disabled"])]),e.unref(s).drafts.length>=10?(e.openBlock(),e.createElementBlock("div",ht," 草稿箱已满(最多10条),请删除后再保存 ")):e.createCommentVNode("",!0),e.createElementVNode("div",yt,[e.unref(s).drafts.length===0?(e.openBlock(),e.createElementBlock("div",_t," 暂无草稿 ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s).drafts,i=>(e.openBlock(),e.createElementBlock("div",{key:i.id,class:"draft-item"},[e.createElementVNode("div",Nt,[e.createElementVNode("span",Ct,e.toDisplayString(i.name),1),e.createElementVNode("span",kt,e.toDisplayString(N(i.createdAt)),1)]),e.createElementVNode("div",xt,[e.createVNode(g,{type:"primary",link:"",size:"small",onClick:u=>A(i)},{default:e.withCtx(()=>[...T[3]||(T[3]=[e.createTextVNode(" 加载 ",-1)])]),_:1},8,["onClick"]),e.createVNode(g,{type:"danger",link:"",size:"small",onClick:u=>D(i)},{default:e.withCtx(()=>[...T[4]||(T[4]=[e.createTextVNode(" 删除 ",-1)])]),_:1},8,["onClick"])])]))),128))])]),_:1},8,["modelValue"])}}},[["__scopeId","data-v-c812f47e"]]);function Et(){const c=Z(),o=C=>{const{type:s,data:p}=C,h=p.arguments||{},w=[];switch(s){case $.START:p.algorithmName?.trim()||w.push("算法名称");break;case $.SMALL_MODEL:p.modelId||w.push("模型选择");break;case $.DETECTION_TARGET:p.targetId||w.push("检测目标选择");break;case $.CLASSIFICATION_MODEL:h.modelId||w.push("分类模型选择");break;case $.TARGET_COUNT:(!h.targets||h.targets.length===0)&&w.push("检测目标");break;case $.TIMER_TARGET:(!h.duration||h.duration<1)&&w.push("持续时间"),h.condition_type||w.push("条件类型");break}return w},t=C=>{const s=c.nodes.find(h=>h.id===C.source);if(!s)return[];const p=[];return s.type===$.DATA_SOURCE&&s.data?.enableImageSequence===!0&&C.sourceHandle!=="first-frame"&&(!C.data?.timeWindowSeconds||C.data.timeWindowSeconds<1)&&p.push("后续检测帧的持续时间"),p};return{runValidation:()=>{const{nodes:C,edges:s}=c;c.clearInvalidIds();const p=De(C,s),h=p.errors,w=[],A=[],D=[];C.filter(k=>k.type!=="group").forEach(k=>{const i=o(k);i.length>0&&(w.push(k.id),D.push(`节点"${k.data.label}"缺少必填参数:${i.join("、")}`))}),s.forEach(k=>{const i=t(k);i.length>0&&(A.push(k.id),D.push(`分支"${k.data?.branchName||"未命名"}"缺少:${i.join("、")}`))}),h.forEach(k=>{typeof k=="object"&&(k.nodeId&&w.push(k.nodeId),k.edgeId&&A.push(k.edgeId))}),(w.length>0||A.length>0)&&(c.setInvalidIds(w,A),setTimeout(()=>{c.clearInvalidIds()},5e3));const _=h.map(k=>typeof k=="object"?k.message:k),T=p.warnings.map(k=>typeof k=="object"?k.message:k),O=[..._.map(k=>({msg:k,type:"error"})),...D.map(k=>({msg:k,type:"warning"})),...T.map(k=>({msg:k,type:"warning"}))],g=_.length===0&&D.length===0;if(g&&T.length===0)Y.ElMessage.success("校验通过,所有节点和分支参数配置正确");else if(O.length>0){const k=O[0];Y.ElMessage[k.type](k.msg)}return g}}}const wt={class:"toolbar"},Bt={class:"toolbar-right"},Vt=Q({__name:"WorkflowToolbar",setup(c){const o=Z(),{validation:t,exportToJSON:B,copyToClipboard:C,downloadJSON:s}=Ae(),{runValidation:p}=Et(),h=e.ref(!1),w=e.ref(""),A=e.ref(!1),D=e.ref(!1),N=e.ref(!1),_=()=>{Y.ElMessageBox.confirm("确定要重置工作流吗?所有节点和连接将被清空。","确认重置",{confirmButtonText:"重置",cancelButtonText:"取消",type:"warning"}).then(()=>{o.resetWorkflow(),Y.ElMessage.success("工作流已重置")}).catch(()=>{})},T=()=>{p()},O=()=>{const u=B();if(u)w.value=JSON.stringify(u,null,2),h.value=!0;else if(t.value.errors.length>0){const d={_errors:t.value.errors,userId:"0",ruleName:"",description:"",webhookUrl:"",attach:{}};w.value=JSON.stringify(d,null,2),h.value=!0}},g=()=>{C()},k=()=>{s()},i=()=>{B()&&(D.value=!0)};return(u,d)=>{const l=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",wt,[d[14]||(d[14]=e.createElementVNode("div",{class:"toolbar-left"},[e.createElementVNode("h2",null,"AIPass 算法编排系统")],-1)),e.createElementVNode("div",Bt,[e.createVNode(l,{type:"info",icon:e.unref(U.RefreshLeft),onClick:_},{default:e.withCtx(()=>[...d[6]||(d[6]=[e.createTextVNode(" 重置 ",-1)])]),_:1},8,["icon"]),e.createVNode(l,{type:"danger",icon:e.unref(U.CircleCheck),onClick:T},{default:e.withCtx(()=>[...d[7]||(d[7]=[e.createTextVNode(" 运行测试 ",-1)])]),_:1},8,["icon"]),e.createVNode(l,{type:"primary",icon:e.unref(U.Box),onClick:d[0]||(d[0]=b=>N.value=!0)},{default:e.withCtx(()=>[...d[8]||(d[8]=[e.createTextVNode(" 草稿箱 ",-1)])]),_:1},8,["icon"]),e.createVNode(l,{type:"primary",icon:e.unref(U.View),onClick:O},{default:e.withCtx(()=>[...d[9]||(d[9]=[e.createTextVNode(" 预览JSON ",-1)])]),_:1},8,["icon"]),e.createVNode(l,{type:"success",icon:e.unref(U.CopyDocument),onClick:g},{default:e.withCtx(()=>[...d[10]||(d[10]=[e.createTextVNode(" 复制JSON ",-1)])]),_:1},8,["icon"]),e.createVNode(l,{type:"warning",icon:e.unref(U.Download),onClick:k},{default:e.withCtx(()=>[...d[11]||(d[11]=[e.createTextVNode(" 导出JSON ",-1)])]),_:1},8,["icon"]),e.createVNode(l,{type:"success",icon:e.unref(U.FolderOpened),onClick:d[1]||(d[1]=b=>A.value=!0)},{default:e.withCtx(()=>[...d[12]||(d[12]=[e.createTextVNode(" 导入JSON ",-1)])]),_:1},8,["icon"]),e.createVNode(l,{type:"primary",icon:e.unref(U.Upload),onClick:i},{default:e.withCtx(()=>[...d[13]||(d[13]=[e.createTextVNode(" 创建工作流规则 ",-1)])]),_:1},8,["icon"])])]),e.createVNode(it,{modelValue:D.value,"onUpdate:modelValue":d[2]||(d[2]=b=>D.value=b)},null,8,["modelValue"]),e.createVNode(nt,{modelValue:A.value,"onUpdate:modelValue":d[3]||(d[3]=b=>A.value=b)},null,8,["modelValue"]),e.createVNode(ut,{modelValue:h.value,"onUpdate:modelValue":d[4]||(d[4]=b=>h.value=b),"json-content":w.value,validation:e.unref(t)},null,8,["modelValue","json-content","validation"]),e.createVNode(bt,{modelValue:N.value,"onUpdate:modelValue":d[5]||(d[5]=b=>N.value=b)},null,8,["modelValue"])],64)}}},[["__scopeId","data-v-4fe98d50"]]),St={key:0},Tt={class:"node-list"},Dt={class:"node-list"},At={class:"node-list"},Lt={class:"node-list"},Ot=Q({__name:"NodeToolbox",setup(c){const o=e.ref(!0),t=e.ref(["basic","data","calculation","algorithm"]),B=(C,s)=>{C.dataTransfer&&(C.dataTransfer.setData("application/vueflow",s),C.dataTransfer.effectAllowed="move")};return(C,s)=>{const p=e.resolveComponent("el-icon"),h=e.resolveComponent("VideoPlay"),w=e.resolveComponent("CircleClose"),A=e.resolveComponent("el-collapse-item"),D=e.resolveComponent("FolderOpened"),N=e.resolveComponent("Cpu"),_=e.resolveComponent("View"),T=e.resolveComponent("el-collapse");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["node-toolbox",{collapsed:!o.value}])},[e.createElementVNode("div",{class:"toolbox-header",onClick:s[1]||(s[1]=O=>!o.value&&(o.value=!0))},[o.value?(e.openBlock(),e.createElementBlock("h3",St,"节点工具箱")):(e.openBlock(),e.createBlock(p,{key:1,class:"collapsed-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Grid))]),_:1})),o.value?(e.openBlock(),e.createBlock(p,{key:2,class:"toggle-btn",onClick:s[0]||(s[0]=e.withModifiers(O=>o.value=!1,["stop"]))},{default:e.withCtx(()=>[e.createVNode(e.unref(U.DArrowLeft))]),_:1})):e.createCommentVNode("",!0)]),o.value?(e.openBlock(),e.createBlock(T,{key:0,modelValue:t.value,"onUpdate:modelValue":s[13]||(s[13]=O=>t.value=O),class:"toolbox-content"},{default:e.withCtx(()=>[e.createVNode(A,{title:"基础节点",name:"basic"},{default:e.withCtx(()=>[e.createElementVNode("div",Tt,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[2]||(s[2]=O=>B(O,"start"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(h)]),_:1}),s[14]||(s[14]=e.createElementVNode("span",null,"开始节点",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[3]||(s[3]=O=>B(O,"end"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(w)]),_:1}),s[15]||(s[15]=e.createElementVNode("span",null,"结束节点",-1))],32)])]),_:1}),e.createVNode(A,{title:"规则节点",name:"data"},{default:e.withCtx(()=>[e.createElementVNode("div",Dt,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[4]||(s[4]=O=>B(O,"dataSource"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(D)]),_:1}),s[16]||(s[16]=e.createElementVNode("span",null,"数据源",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[5]||(s[5]=O=>B(O,"smallModel"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(N)]),_:1}),s[17]||(s[17]=e.createElementVNode("span",null,"小模型",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[6]||(s[6]=O=>B(O,"detectionTarget"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(_)]),_:1}),s[18]||(s[18]=e.createElementVNode("span",null,"检测目标",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[7]||(s[7]=O=>B(O,"classificationModel"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.Grid))]),_:1}),s[19]||(s[19]=e.createElementVNode("span",null,"分类模型",-1))],32)])]),_:1}),e.createVNode(A,{title:"计算节点",name:"calculation"},{default:e.withCtx(()=>[e.createElementVNode("div",At,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[8]||(s[8]=O=>B(O,"targetCount"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.DataAnalysis))]),_:1}),s[20]||(s[20]=e.createElementVNode("span",null,"目标计数",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[9]||(s[9]=O=>B(O,"timerTarget"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.Timer))]),_:1}),s[21]||(s[21]=e.createElementVNode("span",null,"目标计时",-1))],32)])]),_:1}),e.createVNode(A,{title:"辅助节点",name:"algorithm"},{default:e.withCtx(()=>[e.createElementVNode("div",Lt,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[10]||(s[10]=O=>B(O,"ocr"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.Document))]),_:1}),s[22]||(s[22]=e.createElementVNode("span",null,"OCR识别",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[11]||(s[11]=O=>B(O,"licensePlate"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.Document))]),_:1}),s[23]||(s[23]=e.createElementVNode("span",null,"车牌识别",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:s[12]||(s[12]=O=>B(O,"faceRecognition"))},[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.User))]),_:1}),s[24]||(s[24]=e.createElementVNode("span",null,"人脸识别",-1))],32)])]),_:1})]),_:1},8,["modelValue"])):e.createCommentVNode("",!0)],2)}}},[["__scopeId","data-v-d85c2cfd"]]),$t={class:"node-content"},It={class:"node-label"},Mt=Q({__name:"StartNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){return(o,t)=>{const B=e.resolveComponent("VideoPlay"),C=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["start-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"]),e.createElementVNode("div",$t,[e.createVNode(C,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(B)]),_:1}),e.createElementVNode("span",It,e.toDisplayString(c.data.label),1)])],2)}}},[["__scopeId","data-v-0677a092"]]),Ft={class:"node-content"},Rt={class:"node-label"},qt=Q({__name:"EndNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){return(o,t)=>{const B=e.resolveComponent("CircleClose"),C=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["end-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",Ft,[e.createVNode(C,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(B)]),_:1}),e.createElementVNode("span",Rt,e.toDisplayString(c.data.label),1)])],2)}}},[["__scopeId","data-v-505a54fa"]]),Gt={class:"node-content"},zt={class:"node-info"},Ht={class:"node-label"},Ut={key:1,class:"sequence-handles"},Pt={class:"handle-item"},jt={class:"handle-label"},Wt={class:"handle-item add-button-item"},Jt=Q({__name:"DataSourceNode",props:{id:{type:String,required:!0},data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){const o=c,t=Z(),B=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,w=>{const A=Math.random()*16|0;return(w==="x"?A:A&3|8).toString(16)}),C=e.computed(()=>!o.data.subsequentFrames&&o.data.enableImageSequence?[{id:"default-subsequent",label:"后续帧检测",handleId:"subsequent-frame"}]:o.data.subsequentFrames||[]);let s=!1;const p=()=>{if(s)return;s=!0;const w=o.data.subsequentFrames||[],A={id:B(),label:`后续帧检测${w.length+1}`,handleId:B()};t.addSubsequentFrame(o.id,A),setTimeout(()=>{s=!1},300)},h=async w=>{const A=o.data.subsequentFrames.find(N=>N.id===w);if(t.edges.some(N=>N.source===o.id&&N.sourceHandle===A.handleId))try{await Y.ElMessageBox.confirm(`删除"${A.label}"将同时删除其连接,是否继续?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}t.removeSubsequentFrame(o.id,w)};return(w,A)=>{const D=e.resolveComponent("FolderOpened"),N=e.resolveComponent("el-icon"),_=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["data-source-node",{"sequence-mode":c.data.enableImageSequence,selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",Gt,[e.createVNode(N,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(D)]),_:1}),e.createElementVNode("div",zt,[e.createElementVNode("div",Ht,e.toDisplayString(c.data.label),1)])]),c.data.enableImageSequence?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(J.Handle),{key:0,type:"source",position:e.unref(J.Position).Right},null,8,["position"])),c.data.enableImageSequence?(e.openBlock(),e.createElementBlock("div",Ut,[e.createElementVNode("div",Pt,[A[0]||(A[0]=e.createElementVNode("span",{class:"handle-label"},"首帧检测",-1)),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right,id:"first-frame",class:"handle-right"},null,8,["position"])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,T=>(e.openBlock(),e.createElementBlock("div",{key:T.id,class:"handle-item"},[e.createElementVNode("span",jt,e.toDisplayString(T.label),1),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right,id:T.handleId,class:"handle-right"},null,8,["position","id"]),T.id!=="default-subsequent"?(e.openBlock(),e.createBlock(N,{key:0,class:"delete-icon",onClick:e.withModifiers(O=>h(T.id),["stop"])},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Close))]),_:1},8,["onClick"])):e.createCommentVNode("",!0)]))),128)),e.createElementVNode("div",Wt,[e.createVNode(_,{size:"small",type:"primary",icon:e.unref(U.Plus),circle:"",onClick:e.withModifiers(p,["stop"])},null,8,["icon"])])])):e.createCommentVNode("",!0)],2)}}},[["__scopeId","data-v-17ba882f"]]),Yt={class:"node-content"},Xt={class:"node-info"},Qt={class:"node-label"},Kt={key:0,class:"node-model"},Zt={key:1,class:"node-placeholder"},vt={key:0,class:"direct-alert-badge"},en=Q({__name:"SmallModelNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){return(o,t)=>{const B=e.resolveComponent("Cpu"),C=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["small-model-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",Yt,[e.createVNode(C,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(B)]),_:1}),e.createElementVNode("div",Xt,[e.createElementVNode("div",Qt,e.toDisplayString(c.data.label),1),c.data.modelName?(e.openBlock(),e.createElementBlock("div",Kt,e.toDisplayString(c.data.modelName),1)):(e.openBlock(),e.createElementBlock("div",Zt,"未选择模型"))])]),c.data.supportDirectAlert?(e.openBlock(),e.createElementBlock("div",vt,[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.Warning))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-b95de270"]]),tn={class:"node-content"},nn={class:"node-info"},on={class:"node-target"},an={class:"node-params"},ln=Q({__name:"DetectionTargetNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){const o=c,t=()=>o.data.targetName||o.data.label||"检测目标",B=e.computed(()=>o.data.targetId==="other"?!1:o.data.arguments?.threshold!==void 0&&typeof o.data.arguments.threshold=="number"),C=e.computed(()=>{if(o.data.targetId==="other"&&o.data.arguments?.object){const s=o.data.arguments.object;if(Array.isArray(s))return s.filter(h=>h&&h.trim()!=="").length}return null});return(s,p)=>{const h=e.resolveComponent("View"),w=e.resolveComponent("el-icon"),A=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["detection-target-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",tn,[e.createVNode(w,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(h)]),_:1}),e.createElementVNode("div",nn,[p[1]||(p[1]=e.createElementVNode("div",{class:"node-label"},"检测目标",-1)),e.createElementVNode("div",on,e.toDisplayString(t()),1),e.createElementVNode("div",an,[C.value?(e.openBlock(),e.createBlock(A,{key:0,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C.value)+"个目标 ",1)]),_:1})):e.createCommentVNode("",!0),B.value?(e.openBlock(),e.createBlock(A,{key:1,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(c.data.arguments?.threshold),1)]),_:1})):e.createCommentVNode("",!0),c.data.arguments?.targetHeight&&c.data.arguments?.targetWidth?(e.openBlock(),e.createBlock(A,{key:2,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 尺寸: "+e.toDisplayString(c.data.arguments.targetWidth)+"x"+e.toDisplayString(c.data.arguments.targetHeight),1)]),_:1})):e.createCommentVNode("",!0),c.data.arguments?.enableStructure?(e.openBlock(),e.createBlock(A,{key:3,size:"small",type:"warning"},{default:e.withCtx(()=>[...p[0]||(p[0]=[e.createTextVNode(" 结构化 ",-1)])]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-2ea74416"]]),rn={class:"node-content"},sn={class:"node-info"},cn={class:"node-label"},dn={key:0,class:"node-model"},mn={key:1,class:"node-placeholder"},pn={key:2,class:"node-stats"},un=Q({__name:"ClassificationModelNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){return(o,t)=>{const B=e.resolveComponent("Grid"),C=e.resolveComponent("el-icon"),s=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["classification-model-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",rn,[e.createVNode(C,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(B)]),_:1}),e.createElementVNode("div",sn,[e.createElementVNode("div",cn,e.toDisplayString(c.data.label),1),c.data.arguments?.modelName?(e.openBlock(),e.createElementBlock("div",dn,e.toDisplayString(c.data.arguments.modelName),1)):(e.openBlock(),e.createElementBlock("div",mn,"未选择模型")),c.data.arguments?.modelName?(e.openBlock(),e.createElementBlock("div",pn,[c.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(s,{key:0,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(c.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),c.data.arguments?.categories?.length>0?(e.openBlock(),e.createBlock(s,{key:1,size:"small",type:"warning"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.data.arguments.categories.length)+" 类 ",1)]),_:1})):e.createCommentVNode("",!0),c.data.arguments?.topK?(e.openBlock(),e.createBlock(s,{key:2,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" Top-"+e.toDisplayString(c.data.arguments.topK),1)]),_:1})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-5835c18a"]]),fn={class:"node-content"},gn={class:"node-info"},hn={class:"node-label"},yn={class:"node-scope"},_n={class:"node-params"},Nn=Q({__name:"OCRNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){const o=c,t=Z(),B=()=>{const s=o.data.arguments?.detectionScope;if(!s||s==="original")return"原图";const p=t.nodes.find(h=>h.id===s);return p&&p.type==="detectionTarget"?p.data.label||"检测目标":s},C=()=>({auto:"自动",zh:"中文",en:"英文",zh_en:"中英文"})[o.data.arguments?.language]||"自动";return(s,p)=>{const h=e.resolveComponent("el-icon"),w=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ocr-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",fn,[e.createVNode(h,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Document))]),_:1}),e.createElementVNode("div",gn,[e.createElementVNode("div",hn,e.toDisplayString(c.data.label),1),e.createElementVNode("div",yn,e.toDisplayString(B()),1),e.createElementVNode("div",_n,[c.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(w,{key:0,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(c.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),c.data.arguments?.skipOnEnglish?(e.openBlock(),e.createBlock(w,{key:1,size:"small",type:"warning"},{default:e.withCtx(()=>[...p[0]||(p[0]=[e.createTextVNode(" 英文跳过 ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createVNode(w,{size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C()),1)]),_:1})])])]),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-24c085ff"]]),Cn={class:"node-content"},kn={class:"node-info"},xn={class:"node-label"},bn={class:"node-scope"},En={class:"node-params"},wn=Q({__name:"LicensePlateNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){const o=c,t=Z(),B=()=>{const C=o.data.arguments?.detectionScope;if(!C)return"";const s=t.nodes.find(p=>p.id===C);return s?s.data.label:"检测范围"};return(C,s)=>{const p=e.resolveComponent("Document"),h=e.resolveComponent("el-icon"),w=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["license-plate-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",Cn,[e.createVNode(h,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(p)]),_:1}),e.createElementVNode("div",kn,[e.createElementVNode("div",xn,e.toDisplayString(c.data.label),1),e.createElementVNode("div",bn,e.toDisplayString(B()),1),e.createElementVNode("div",En,[c.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(w,{key:0,size:"small",type:"primary"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(c.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),c.data.arguments?.minPlateWidth!==void 0&&c.data.arguments?.minPlateHeight!==void 0?(e.openBlock(),e.createBlock(w,{key:1,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 最小尺寸: "+e.toDisplayString(c.data.arguments.minPlateWidth)+"×"+e.toDisplayString(c.data.arguments.minPlateHeight)+"px ",1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-28986d7c"]]),Bn={class:"node-content"},Vn={class:"node-info"},Sn={class:"node-params"},Tn=Q({__name:"TargetCountNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){const o=c,t={"=":"=","!=":"≠",">":">","<":"<",">=":"≥","<=":"≤"},B=e.computed(()=>{const C=o.data.arguments?.alertConditions||[];if(C.length===0)return"";if(C.length===1){const p=C[0];return`数量 ${t[p.operator]||p.operator} ${p.value}`}const s=o.data.arguments?.conditionRelation||"OR";return`${C.length} 个条件(${s})`});return(C,s)=>{const p=e.resolveComponent("el-icon"),h=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["target-count-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",Bn,[e.createVNode(p,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.DataAnalysis))]),_:1}),e.createElementVNode("div",Vn,[s[0]||(s[0]=e.createElementVNode("div",{class:"node-label"},"目标计数",-1)),e.createElementVNode("div",Sn,[B.value?(e.openBlock(),e.createBlock(h,{key:0,size:"small",type:"warning"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(B.value),1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-81ea4df9"]]),Dn={class:"node-content"},An={class:"node-info"},Ln={class:"node-label"},On={class:"node-params"},$n=Q({__name:"TimerTargetNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){const o=c,t=e.computed(()=>o.data.description||"目标计时"),B=e.computed(()=>`${o.data.arguments?.duration||30}秒`),C=e.computed(()=>{const s=o.data.arguments?.condition_type;return s==="similarity"?`相似度 ${o.data.arguments?.similarity_threshold||90}%`:s==="hit_rate"?`命中率 ${o.data.arguments?.hit_rate_threshold||80}%`:""});return(s,p)=>{const h=e.resolveComponent("el-icon"),w=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["timer-target-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",Dn,[e.createVNode(h,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Timer))]),_:1}),e.createElementVNode("div",An,[e.createElementVNode("div",Ln,e.toDisplayString(t.value),1),e.createElementVNode("div",On,[e.createVNode(w,{size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(B.value),1)]),_:1}),C.value?(e.openBlock(),e.createBlock(w,{key:0,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C.value),1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-10379815"]]),In={class:"group-label"},Mn=Q({__name:"GroupNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){const o=c,t={and:"ALL",or:"SOME"},B=e.computed(()=>t[o.data.branchLogic]??"ALL"),C=e.computed(()=>o.data.branchLogic==="or"?"warning":"primary"),s={width:"8px",height:"8px",borderRadius:"2px"},p={borderColor:"var(--color-brand-primary)",borderStyle:"dashed"};return(h,w)=>{const A=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["group-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"]),e.createElementVNode("div",In,[e.createVNode(A,{type:C.value,size:"small",effect:"dark"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(B.value),1)]),_:1},8,["type"]),w[0]||(w[0]=e.createElementVNode("span",null,"并行组",-1))]),e.createVNode(e.unref(He.NodeResizer),{"min-width":200,"min-height":100,"handle-style":s,"line-style":p})],2)}}},[["__scopeId","data-v-3b68005c"]]),Fn={class:"node-content"},Rn={class:"node-info"},qn={class:"node-label"},Gn={class:"node-scope"},zn={class:"node-params"},Hn=Q({__name:"FaceRecognitionNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(c){const o=c,t=Z(),B=()=>{const C=o.data.arguments?.detectionScope;if(!C)return"";const s=t.nodes.find(p=>p.id===C);return s?s.data.label:"检测范围"};return(C,s)=>{const p=e.resolveComponent("el-icon"),h=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["face-recognition-node",{selected:c.selected}])},[e.createVNode(e.unref(J.Handle),{type:"target",position:e.unref(J.Position).Left},null,8,["position"]),e.createElementVNode("div",Fn,[e.createVNode(p,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.User))]),_:1}),e.createElementVNode("div",Rn,[e.createElementVNode("div",qn,e.toDisplayString(c.data.label),1),e.createElementVNode("div",Gn,e.toDisplayString(B()),1),e.createElementVNode("div",zn,[c.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(h,{key:0,size:"small",type:"primary"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(c.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),c.data.arguments?.minFaceWidth!==void 0&&c.data.arguments?.minFaceHeight!==void 0?(e.openBlock(),e.createBlock(h,{key:1,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 最小尺寸: "+e.toDisplayString(c.data.arguments.minFaceWidth)+"×"+e.toDisplayString(c.data.arguments.minFaceHeight)+"px ",1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(J.Handle),{type:"source",position:e.unref(J.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-3b35cb9b"]]),Un={class:"quick-add-menu__list"},Pn=["onClick"],jn={class:"quick-add-menu__icon"},Wn={class:"quick-add-menu__label"},Jn={key:0,class:"quick-add-menu__empty"},ce=8,Yn=Q({__name:"NodeQuickAddMenu",props:{visible:{type:Boolean,default:!1},position:{type:Object,default:()=>({x:0,y:0})},sourceNodeType:{type:String,default:""}},emits:["select","close"],setup(c){const o=c,t=e.ref(null),B=e.ref({x:0,y:0});e.watch(()=>o.visible,async h=>{if(!h||(B.value={x:o.position.x,y:o.position.y},await e.nextTick(),!t.value))return;const w=t.value.getBoundingClientRect(),A=window.innerWidth,D=window.innerHeight;let{x:N,y:_}=o.position;N+w.width>A-ce&&(N=A-w.width-ce),_+w.height>D-ce&&(_=D-w.height-ce),N<ce&&(N=ce),_<ce&&(_=ce),B.value={x:N,y:_}});const C=e.computed(()=>({left:B.value.x+"px",top:B.value.y+"px"})),s=[{type:"dataSource",label:"数据源",icon:"📦"},{type:"smallModel",label:"小模型",icon:"🤖"},{type:"detectionTarget",label:"检测目标",icon:"🎯"},{type:"classificationModel",label:"分类模型",icon:"🏷️"},{type:"ocr",label:"OCR识别",icon:"📝"},{type:"licensePlate",label:"车牌识别",icon:"🚗"},{type:"faceRecognition",label:"人脸识别",icon:"👤"},{type:"targetCount",label:"目标计数",icon:"📊"},{type:"timerTarget",label:"目标计时",icon:"⏱️"},{type:"end",label:"结束节点",icon:"🏁"}],p=e.computed(()=>{switch(o.sourceNodeType){case"start":return s.filter(h=>h.type==="dataSource");case"dataSource":return s.filter(h=>h.type==="smallModel"||h.type==="detectionTarget"||h.type==="classificationModel");case"smallModel":return s.filter(h=>h.type!=="dataSource"&&h.type!=="smallModel"&&h.type!=="targetCount"&&h.type!=="timerTarget");case"detectionTarget":case"classificationModel":return s.filter(h=>h.type!=="dataSource"&&h.type!=="smallModel");case"timerTarget":return s.filter(h=>["ocr","faceRecognition","licensePlate","end"].includes(h.type));case"targetCount":return s.filter(h=>["timerTarget","ocr","faceRecognition","licensePlate","end"].includes(h.type));case"ocr":return s.filter(h=>["licensePlate","faceRecognition","end"].includes(h.type));case"licensePlate":return s.filter(h=>["ocr","faceRecognition","end"].includes(h.type));case"faceRecognition":return s.filter(h=>["ocr","licensePlate","end"].includes(h.type));default:return[]}});return(h,w)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[c.visible?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuRef",ref:t,class:"quick-add-menu",style:e.normalizeStyle(C.value)},[w[1]||(w[1]=e.createElementVNode("div",{class:"quick-add-menu__header"},"添加节点",-1)),e.createElementVNode("ul",Un,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,A=>(e.openBlock(),e.createElementBlock("li",{key:A.type,class:"quick-add-menu__item",onClick:D=>h.$emit("select",A.type)},[e.createElementVNode("span",jn,e.toDisplayString(A.icon),1),e.createElementVNode("span",Wn,e.toDisplayString(A.label),1)],8,Pn))),128)),p.value.length===0?(e.openBlock(),e.createElementBlock("li",Jn," 无可连接节点 ")):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),c.visible?(e.openBlock(),e.createElementBlock("div",{key:1,class:"quick-add-menu__overlay",onClick:w[0]||(w[0]=A=>h.$emit("close"))})):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-57f25906"]]),Xn={class:"workflow-canvas"},Oe=5,Qn=Q({__name:"WorkflowCanvas",setup(c){const o=Z(),{screenToFlowCoordinate:t,findNode:B,onConnectStart:C,onConnectEnd:s}=J.useVueFlow(),p=e.reactive({visible:!1,screenPos:{x:0,y:0},sourceNodeId:null,sourceNodeType:null,sourceHandleId:null,flowPos:{x:0,y:0}}),h=()=>{p.visible=!1,p.sourceNodeId=null,p.sourceNodeType=null,p.sourceHandleId=null};let w=null,A=!1,D=null,N=null;const _=()=>{D&&(document.removeEventListener("mousemove",D),D=null),N&&(document.removeEventListener("mouseup",N),N=null)};C(({nodeId:I,handleId:L,handleType:n,event:a})=>{if(n!=="source")return;const r=o.nodes.find(j=>j.id===I);if(!r||r.type==="end")return;if(r.type===$.DATA_SOURCE&&r.data?.enableImageSequence){if(L&&o.edges.filter(X=>X.source===I&&X.sourceHandle===L).length>=1)return}else if(r.type!==$.START&&r.type!==$.DATA_SOURCE&&o.edges.filter(X=>X.source===I).length>=1)return;const y=a?.target;let R=0,z=0;if(y){const j=y.getBoundingClientRect();R=j.right+12,z=j.top-8}w={nodeId:I,sourceNodeType:r.type,handleId:L,menuX:R,menuY:z,flowPos:{...r.position}},A=!1;const P=a?.clientX??0,W=a?.clientY??0;_(),D=j=>{(Math.abs(j.clientX-P)>Oe||Math.abs(j.clientY-W)>Oe)&&(A=!0,_())},N=()=>{if(_(),!A&&w){const j=w;p.visible=!0,p.screenPos={x:j.menuX,y:j.menuY},p.sourceNodeId=j.nodeId,p.sourceNodeType=j.sourceNodeType,p.sourceHandleId=j.handleId,p.flowPos=j.flowPos}w=null},document.addEventListener("mousemove",D),document.addEventListener("mouseup",N)});const T=I=>{const L=p.sourceNodeId,n=o.nodes.find(v=>v.id===L);if(!n){h();return}const a=n.position.x+250,r=n.position.y;let y={x:a,y:r};const R=60,z=80;let P=0,W=!0;for(;W;){W=!1;const v=r+P;for(const ee of o.nodes)if(Math.abs(ee.position.x-a)<100&&Math.abs(ee.position.y-v)<R+20){W=!0,P+=z;break}}if(y.y=r+P,I==="end"){const v=o.nodes.find(ee=>ee.type==="end");if(v){if(o.edges.some(ne=>ne.source===L&&ne.target===v.id)){Y.ElMessage.warning("已经连接到结束节点"),h();return}const K=g(n,v);if(!K.valid){Y.ElMessage.warning(K.message),h();return}o.addConnection({source:L,target:v.id,sourceHandle:p.sourceHandleId||null,targetHandle:null}),x(),h(),Y.ElMessage.success("已连接到结束节点");return}}let j;switch(I){case"end":j=ge(y);break;case"dataSource":j=he(y);break;case"smallModel":j=Ce(y);break;case"detectionTarget":j=ke(y);break;case"classificationModel":j=xe(y);break;case"ocr":j=be(y);break;case"licensePlate":j=Ee(y);break;case"faceRecognition":j=Ve(y);break;case"targetCount":j=we(y);break;case"timerTarget":j=Be(y);break;default:h();return}const X=g(n,j);if(!X.valid){Y.ElMessage.warning(X.message),h();return}o.addNode(j),o.addConnection({source:L,target:j.id,sourceHandle:p.sourceHandleId||null,targetHandle:null}),x(),h(),Y.ElMessage.success(`已添加${j.data.label}并连接`)},O=["smallModel","detectionTarget","classificationModel","ocr","licensePlate","faceRecognition","targetCount","timerTarget"],g=(I,L)=>{if(I?.parentNode&&L?.type!=="group")return{valid:!1,message:"组内节点不能直接连接到外部节点,请通过并行组的连接点连线"};if(L?.parentNode&&I?.type!=="group")return{valid:!1,message:"外部节点不能直接连接到组内节点,请通过并行组的连接点连线"};if(I?.type===$.START&&L?.type!==$.DATA_SOURCE)return{valid:!1,message:"开始节点只能连接数据源节点"};if(L?.type===$.SMALL_MODEL){if(I?.type!==$.DATA_SOURCE)return{valid:!1,message:"小模型节点的上游节点只能是数据源节点"};if(o.edges.filter(r=>r.source===I.id).length>0)return{valid:!1,message:"小模型节点只能出现在单分支场景中。数据源节点已有其他连接,不能再连接小模型节点"}}if(I?.type===$.DATA_SOURCE){if(L?.type!==$.SMALL_MODEL&&L?.type!==$.DETECTION_TARGET&&L?.type!==$.CLASSIFICATION_MODEL)return{valid:!1,message:"数据源节点的下游节点只能是小模型节点、检测目标节点或分类模型节点"};if(o.edges.filter(y=>y.source===I.id).some(y=>o.nodes.find(z=>z.id===y.target)?.type===$.SMALL_MODEL))return{valid:!1,message:"数据源节点已连接小模型节点(单分支场景),不能再连接其他节点"}}if(I?.type===$.SMALL_MODEL&&(L?.type===$.TARGET_COUNT||L?.type===$.TIMER_TARGET))return{valid:!1,message:"小模型节点不能直接连接目标计数或目标计时节点,请先连接检测目标节点"};if(I?.type===$.TARGET_COUNT&&![$.TIMER_TARGET,$.OCR,$.FACE_RECOGNITION,$.LICENSE_PLATE,$.END].includes(L?.type))return{valid:!1,message:"目标计数节点只能连接目标计时、辅助节点或结束节点"};if(I?.type===$.TIMER_TARGET&&![$.OCR,$.FACE_RECOGNITION,$.LICENSE_PLATE,$.END].includes(L?.type))return{valid:!1,message:"目标计时节点只能连接辅助节点或结束节点"};const n=[$.OCR,$.LICENSE_PLATE,$.FACE_RECOGNITION];return n.includes(I?.type)&&!n.filter(r=>r!==I.type).concat($.END).includes(L?.type)?{valid:!1,message:"辅助节点只能连接除自身外的辅助节点或结束节点"}:{valid:!0}},k=e.markRaw({start:Mt,end:qt,dataSource:Jt,smallModel:en,detectionTarget:ln,classificationModel:un,ocr:Nn,licensePlate:wn,targetCount:Tn,timerTarget:$n,group:Mn,faceRecognition:Hn}),i=e.computed({get:()=>o.nodes,set:I=>{o.nodes=I}}),u=e.computed({get:()=>o.edges,set:I=>{o.edges=I}}),d=I=>{I.forEach(L=>{if(L.type==="position"&&L.position)o.updateNodePosition(L.id,L.position);else if(L.type==="remove"){const n=o.nodes.find(r=>r.id===L.id);if(n&&n.type===$.START){Y.ElMessage.warning("开始节点不可删除");return}if(n&&n.type===$.END){Y.ElMessage.warning("结束节点不可删除");return}if(n&&n.type==="group"){Y.ElMessage.warning('并行组不可手动删除,请关闭对应节点的"开启分支"选项');return}const a=n?.parentNode;o.removeNode(L.id),a&&o.nodes.filter(y=>y.parentNode===a).length===0&&o.dissolveParallelGroup(a)}})},l=I=>{I.forEach(L=>{L.type==="remove"&&o.removeEdge(L.id)})},b=I=>{const L=o.nodes.find(r=>r.id===I.source),n=o.nodes.find(r=>r.id===I.target),a=g(L,n);if(!a.valid){Y.ElMessage.warning(a.message),h();return}if(L?.type===$.DATA_SOURCE&&L.data.enableImageSequence&&I.sourceHandle&&o.edges.filter(y=>y.source===I.source&&y.sourceHandle===I.sourceHandle).length>=1){const y=I.sourceHandle==="first-frame"?"首帧检测":"后续帧检测";Y.ElMessage.warning(`${y}连接点只能连接一个节点`);return}if(O.includes(L?.type)&&!L.data.enableBranch&&o.edges.filter(y=>y.source===I.source).length>=1){Y.ElMessage.warning("该节点只能连接一个节点。");return}o.addConnection(I),x(),h()},S=I=>({and:"ALL",or:"SOME"})[I]||"ALL",f=I=>{const L=o.nodes.find(n=>n.id===I.source);if(!L)return"";if(L.type===$.START){const n=L.data.branchLogic||"and",a=S(n),r=I.data?.branchOrder;return r!=null?`${a} - 执行顺序 ${r}`:a}if(L.type===$.DATA_SOURCE){const n=L.data.branchLogic||"and",a=S(n),r=I.data?.branchOrder;return r!=null?`${a} - 执行顺序 ${r}`:a}if(O.includes(L.type)&&L.data.enableBranch){const n=L.data.branchLogic||"and";return S(n)}return""},x=()=>{o.edges.forEach(I=>{const L=f(I);I.label!==L&&(I.label=L,I.labelStyle=L?{fill:"#fff",fontWeight:600,fontSize:"11px"}:void 0,I.labelBgStyle=L?{fill:"var(--color-brand-primary)",rx:4,ry:4}:void 0,I.labelBgPadding=L?[4,6]:void 0)})},q=()=>{o.nodes.forEach(I=>{if(I.type!=="group")return;const L=I.data.sourceNodeId;if(!L)return;const n=o.nodes.find(a=>a.id===L);n?.data?.enableBranch&&n.data.branchLogic!==I.data.branchLogic&&o.updateNodeData(I.id,{branchLogic:n.data.branchLogic||"and"})})};e.watch(()=>o.nodes.filter(I=>O.includes(I.type)).map(I=>({id:I.id,enableBranch:I.data.enableBranch,branchLogic:I.data.branchLogic})),(I,L)=>{L&&I.forEach(n=>{const a=L.find(r=>r.id===n.id);if(a){if(n.enableBranch&&!a.enableBranch){const r=o.nodes.find(y=>y.id===n.id);if(!r)return;o.createEmptyGroup({x:r.position.x+200,y:r.position.y-30},r.data.branchLogic||"and",n.id)}else if(!n.enableBranch&&a.enableBranch){const r=o.nodes.find(y=>y.type==="group"&&y.data.sourceNodeId===n.id);r&&o.dissolveParallelGroup(r.id)}if(n.enableBranch&&a.branchLogic!==n.branchLogic){const r=o.nodes.find(y=>y.type==="group"&&y.data.sourceNodeId===n.id);r&&o.updateNodeData(r.id,{branchLogic:n.branchLogic})}}})}),e.watch(()=>o.nodes.filter(I=>I.type!=="group").map(I=>({id:I.id,enableBranch:I.data.enableBranch,branchLogic:I.data.branchLogic,branchOrder:I.data.branchOrder})),()=>{x(),q()},{deep:!0}),e.watch(()=>o.edges.map(I=>({id:I.id,branchOrder:I.data?.branchOrder})),(I,L)=>{x(),L&&I.forEach(n=>{const a=L.find(r=>r.id===n.id);if(a&&a.branchOrder!==n.branchOrder&&n.branchOrder!==void 0){const r=o.edges.find(y=>y.id===n.id);if(r){const y=o.nodes.find(R=>R.id===r.source);y&&y.type===$.DATA_SOURCE&&o.updateNodePosition(y.id,{x:y.position.x,y:y.position.y-.001})}}})},{deep:!0}),e.watch(()=>[o.invalidNodeIds,o.invalidEdgeIds],([I,L])=>{o.nodes.forEach(n=>{I.has(n.id)?n.class="invalid-node":n.class==="invalid-node"&&(n.class="")}),o.edges.forEach(n=>{L.has(n.id)?n.class="invalid-edge":n.class==="invalid-edge"&&(n.class="")})},{deep:!0});const F=I=>{I.event?.target?.closest(".vue-flow__handle")||o.selectNode(I.node.id)},V=I=>{o.selectEdge(I.edge.id)},M=I=>{o.removeEdge(I.edge.id)},G=()=>{o.clearSelection()},m=({node:I})=>{if(I.type==="group"||!O.includes(I.type))return;const L=o.nodes.filter(a=>a.type==="group");let n=null;for(const a of L){const r=B(a.id);if(!r)continue;const y=r.dimensions?.width||parseInt(a.style?.width)||300,R=r.dimensions?.height||parseInt(a.style?.height)||160;let z=I.position.x,P=I.position.y;if(I.parentNode){const K=o.nodes.find(ne=>ne.id===I.parentNode);K&&(z+=K.position.x,P+=K.position.y)}const W=B(I.id),j=W?.dimensions?.width||160,X=W?.dimensions?.height||60,v=z+j/2,ee=P+X/2;if(v>=a.position.x&&v<=a.position.x+y&&ee>=a.position.y&&ee<=a.position.y+R){n=a.id;break}}n?I.parentNode!==n&&o.addNodeToGroup(I.id,n):I.parentNode&&o.removeNodeFromGroup(I.id)},E=I=>{I.preventDefault(),I.dataTransfer&&(I.dataTransfer.dropEffect="move")},H=I=>{I.preventDefault();const L=I.dataTransfer?.getData("application/vueflow");if(!L)return;if(L===$.START&&o.getNodeCountByType($.START)>=1){Y.ElMessage.warning("工作流只能有一个开始节点");return}const n=160,a=60,r=t({x:I.clientX,y:I.clientY}),y={x:r.x-n/2,y:r.y-a/2};let R;switch(L){case $.START:R=Ne(y);break;case $.END:R=ge(y);break;case $.DATA_SOURCE:R=he(y);break;case $.SMALL_MODEL:R=Ce(y);break;case $.DETECTION_TARGET:R=ke(y);break;case $.CLASSIFICATION_MODEL:R=xe(y);break;case $.OCR:R=be(y);break;case $.LICENSE_PLATE:R=Ee(y);break;case $.TARGET_COUNT:R=we(y);break;case $.TIMER_TARGET:R=Be(y);break;case $.FACE_RECOGNITION:R=Ve(y);break;default:return}o.addNode(R),Y.ElMessage.success("节点已添加")};return(I,L)=>(e.openBlock(),e.createElementBlock("div",Xn,[e.createVNode(e.unref(J.VueFlow),{nodes:i.value,"onUpdate:nodes":L[0]||(L[0]=n=>i.value=n),edges:u.value,"onUpdate:edges":L[1]||(L[1]=n=>u.value=n),"node-types":e.unref(k),onNodesChange:d,onEdgesChange:l,onConnect:b,onNodeClick:F,onEdgeClick:V,onEdgeDoubleClick:M,onPaneClick:G,onDrop:H,onDragover:E,onNodeDragStop:m,"snap-to-grid":!0,"snap-grid":[15,15],"default-zoom":1,"min-zoom":.2,"max-zoom":4},{default:e.withCtx(()=>[e.createVNode(e.unref(Ge.Background),{"pattern-color":"#aaa",gap:16,variant:"dots"}),e.createVNode(e.unref(ze.Controls))]),_:1},8,["nodes","edges","node-types"]),e.createVNode(Yn,{visible:p.visible,position:p.screenPos,"source-node-type":p.sourceNodeType,onSelect:T,onClose:h},null,8,["visible","position","source-node-type"])]))}},[["__scopeId","data-v-f4705e02"]]),Kn={class:"config-section"},Zn={key:0,class:"config-section"},vn={key:1,class:"config-section"},eo=Q({__name:"EdgeConfig",setup(c){const o=Z(),t=e.computed(()=>{const h=o.selectedEdge;return h&&o.nodes.find(A=>A.id===h.source)?.data?.enableBranch?h:null}),B=e.computed(()=>{if(!t.value)return!1;const h=o.nodes.find(w=>w.id===t.value.source);return(h?.type==="dataSource"||h?.type==="start")&&h?.data?.enableBranch}),C=e.computed(()=>{if(!t.value)return 1;const h=o.nodes.find(w=>w.id===t.value.source);return h?o.edges.filter(w=>w.source===h.id).length:1}),s=e.computed(()=>{if(!t.value)return!1;const h=o.nodes.find(w=>w.id===t.value.source);return h?h.type==="dataSource"&&h.data?.enableImageSequence===!0&&t.value.sourceHandle!=="first-frame":!1}),p=h=>{t.value&&o.updateEdgeData(t.value.id,h)};return(h,w)=>{const A=e.resolveComponent("el-divider"),D=e.resolveComponent("el-input"),N=e.resolveComponent("el-form-item"),_=e.resolveComponent("el-form"),T=e.resolveComponent("el-input-number"),O=e.resolveComponent("el-text"),g=e.resolveComponent("el-option"),k=e.resolveComponent("el-select");return e.openBlock(),e.createElementBlock("div",null,[w[9]||(w[9]=e.createElementVNode("div",{class:"config-header"},[e.createElementVNode("h3",null,"分支配置")],-1)),e.createVNode(A),e.createElementVNode("div",Kn,[w[4]||(w[4]=e.createElementVNode("h4",null,"基本信息",-1)),e.createVNode(_,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(N,{label:"分支名称"},{default:e.withCtx(()=>[e.createVNode(D,{"model-value":t.value?.data?.branchName||"",onInput:w[0]||(w[0]=i=>p({branchName:i})),placeholder:"请输入分支名称",maxlength:"50","show-word-limit":""},null,8,["model-value"])]),_:1}),e.createVNode(N,{label:"分支描述"},{default:e.withCtx(()=>[e.createVNode(D,{"model-value":t.value?.data?.branchDescription||"",onInput:w[1]||(w[1]=i=>p({branchDescription:i})),type:"textarea",rows:3,placeholder:"请输入分支描述",maxlength:"200","show-word-limit":""},null,8,["model-value"])]),_:1})]),_:1})]),s.value?(e.openBlock(),e.createElementBlock("div",Zn,[w[6]||(w[6]=e.createElementVNode("h4",null,"后续检测帧的持续时间",-1)),e.createVNode(_,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(N,{label:"后续检测帧的持续时间(秒)",required:""},{default:e.withCtx(()=>[e.createVNode(T,{"model-value":t.value?.data?.timeWindowSeconds??null,onChange:w[2]||(w[2]=i=>p({timeWindowSeconds:i})),min:1,precision:0,style:{width:"100%"},"controls-position":"right",placeholder:"请输入持续时间"},null,8,["model-value"]),e.createVNode(O,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...w[5]||(w[5]=[e.createTextVNode(" 后续帧检测需要持续的时间(必填) ",-1)])]),_:1})]),_:1})]),_:1})])):e.createCommentVNode("",!0),B.value?(e.openBlock(),e.createElementBlock("div",vn,[w[8]||(w[8]=e.createElementVNode("h4",null,"分支顺序",-1)),e.createVNode(_,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(N,{label:"执行顺序"},{default:e.withCtx(()=>[e.createVNode(k,{"model-value":t.value?.data?.branchOrder??null,onChange:w[3]||(w[3]=i=>p({branchOrder:i})),style:{width:"100%"},placeholder:"请选择执行顺序",clearable:""},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,i=>(e.openBlock(),e.createBlock(g,{key:i,label:`执行顺序 ${i}`,value:i},null,8,["label","value"]))),128))]),_:1},8,["model-value"]),e.createVNode(O,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...w[7]||(w[7]=[e.createTextVNode(" 系统会根据连接顺序自动分配执行顺序,数字越小越先执行。可手动调整顺序 ",-1)])]),_:1})]),_:1})]),_:1})])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-00ce7bd1"]]),to={class:"config-section"},no=Q({__name:"GroupNodeConfig",setup(c){return(o,t)=>{const B=e.resolveComponent("el-divider"),C=e.resolveComponent("el-text");return e.openBlock(),e.createElementBlock("div",null,[t[1]||(t[1]=e.createElementVNode("div",{class:"config-header"},[e.createElementVNode("h3",null,"并行组")],-1)),e.createVNode(B),e.createElementVNode("div",to,[e.createVNode(C,{type:"info",size:"small"},{default:e.withCtx(()=>[...t[0]||(t[0]=[e.createTextVNode("并行组由系统自动管理,断开连接后自动解散。",-1)])]),_:1})])])}}},[["__scopeId","data-v-ce8a9246"]]);function oo(c,o,t,B){const C=B?.[c];if(!C)return{schema:o,arguments:t};const s={};return C.schema?.properties&&Object.entries(C.schema.properties).forEach(([p,h])=>{s[p]={...h,"x-extension":!0}}),{schema:{...o,properties:{...o?.properties||{},...s},required:[...o?.required||[],...C.schema?.required||[]]},arguments:{...t||{},...C.arguments||{}}}}function re(){const c=e.inject("nodeConfigExtensions",null),o=()=>e.isRef(c)?c.value:c,t=e.computed(()=>o()),B=(w,A,D)=>oo(w,A,D,o()),C=(w,A,D,N,_,T)=>{const g=o()?.[A]?.[w];if(g&&typeof g=="function")try{g(D,N,_,T)}catch(k){console.warn(`[nodeConfigExtension] ${w} callback error for ${A}:`,k)}};return{extensions:t,apply:B,notifyChange:(w,A,D,N,_)=>{C("onChange",w,A,D,N,_)},notifyFocus:(w,A,D,N,_)=>{C("onFocus",w,A,D,N,_)},notifyBlur:(w,A,D,N,_)=>{C("onBlur",w,A,D,N,_)}}}const ao={key:0,class:"config-section"},lo={key:3,class:"array-input"},se={__name:"ExtensionFields",props:{fields:{type:Array,required:!0},nodeData:{type:Object,required:!0}},emits:["update","focus","blur"],setup(c,{emit:o}){const t=c,B=o,C=N=>t.nodeData?.arguments?.[N],s=(N,_)=>B("update",N,_),p=N=>B("focus",N,C(N)),h=N=>B("blur",N,C(N)),w=N=>{if(!N.dependsOn)return!0;const{field:_,value:T}=N.dependsOn,O=C(_);return typeof T=="string"&&T.startsWith("!")?O!==T.substring(1):Array.isArray(T)?T.includes(O):O===T},A=N=>{const _=C(N);return Array.isArray(_)?JSON.stringify(_):""},D=(N,_)=>{try{const T=JSON.parse(_);Array.isArray(T)&&B("update",N,T)}catch{}};return(N,_)=>{const T=e.resolveComponent("el-icon"),O=e.resolveComponent("el-tooltip"),g=e.resolveComponent("el-option"),k=e.resolveComponent("el-select"),i=e.resolveComponent("el-switch"),u=e.resolveComponent("el-input-number"),d=e.resolveComponent("el-input"),l=e.resolveComponent("el-form-item"),b=e.resolveComponent("el-form");return c.fields.length>0?(e.openBlock(),e.createElementBlock("div",ao,[_[0]||(_[0]=e.createElementVNode("h4",null,"扩展参数",-1)),e.createVNode(b,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.fields,S=>e.withDirectives((e.openBlock(),e.createBlock(l,{key:S.key,required:S.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(S.label),1),S.description?(e.openBlock(),e.createBlock(O,{key:0,content:S.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(T,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[S.options&&S.type==="string"?(e.openBlock(),e.createBlock(k,{key:0,"model-value":C(S.key),onChange:f=>s(S.key,f),onFocus:f=>p(S.key),onBlur:f=>h(S.key),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.options,(f,x)=>(e.openBlock(),e.createBlock(g,{key:f,label:S.optionLabels?S.optionLabels[x]:f,value:f},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange","onFocus","onBlur"])):S.type==="boolean"?(e.openBlock(),e.createBlock(i,{key:1,"model-value":C(S.key),onChange:f=>s(S.key,f),onFocus:f=>p(S.key),onBlur:f=>h(S.key)},null,8,["model-value","onChange","onFocus","onBlur"])):S.type==="number"||S.type==="integer"?(e.openBlock(),e.createBlock(u,{key:2,"model-value":C(S.key),onChange:f=>s(S.key,f),onFocus:f=>p(S.key),onBlur:f=>h(S.key),min:S.min,max:S.max,step:S.step||(S.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","onFocus","onBlur","min","max","step"])):S.type==="array"&&!S.options?(e.openBlock(),e.createElementBlock("div",lo,[e.createVNode(d,{"model-value":A(S.key),onChange:f=>D(S.key,f),onFocus:f=>p(S.key),onBlur:f=>h(S.key),type:"textarea",rows:3,placeholder:S.description||"输入JSON数组"},null,8,["model-value","onChange","onFocus","onBlur","placeholder"])])):S.type==="array"&&S.options?(e.openBlock(),e.createBlock(k,{key:4,"model-value":C(S.key),onChange:f=>s(S.key,f),onFocus:f=>p(S.key),onBlur:f=>h(S.key),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.options,(f,x)=>(e.openBlock(),e.createBlock(g,{key:f,label:S.optionLabels?S.optionLabels[x]:f,value:f},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange","onFocus","onBlur"])):(e.openBlock(),e.createBlock(d,{key:5,"model-value":C(S.key),onInput:f=>s(S.key,f),onFocus:f=>p(S.key),onBlur:f=>h(S.key),maxlength:S.maxLength,"show-word-limit":!!S.maxLength},null,8,["model-value","onInput","onFocus","onBlur","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!S.dependsOn||w(S)]])),128))]),_:1})])):e.createCommentVNode("",!0)}}},ro={class:"config-section"},so={class:"config-section"},io=Q({__name:"StartNodeConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{extensions:B,notifyChange:C,notifyFocus:s,notifyBlur:p}=re(),h=e.computed(()=>{const _=B.value?.start;return!_||!_.schema?.properties?[]:Object.entries(_.schema.properties).map(([T,O])=>({key:T,type:O.type,label:O.title||T,description:O.description||"",default:O.default,required:(_.schema.required||[]).includes(T),min:O.minimum,max:O.maximum,step:O.step,options:O.enum,optionLabels:O.enumLabels||O.enum}))}),w=(_,T)=>{if(!t.value)return;const O={...t.value.data.arguments,[_]:T};o.updateNodeData(t.value.id,{arguments:O}),C("start",_,T,O,t.value.id)};e.watch(()=>t.value?.id,()=>{const _=B.value?.start;if(!_||!_.arguments)return;const T=t.value?.data?.arguments||{};Object.keys(_.arguments).some(g=>T[g]===void 0)&&o.updateNodeData(t.value.id,{arguments:{..._.arguments,...T}})},{immediate:!0});const A=e.computed(()=>t.value?o.edges.filter(T=>T.source===t.value.id).length>=2:!1),D=_=>{t.value&&o.updateNodeData(t.value.id,{algorithmName:_})},N=_=>{t.value&&o.updateNodeData(t.value.id,{algorithmDescription:_})};return(_,T)=>{const O=e.resolveComponent("el-divider"),g=e.resolveComponent("el-input"),k=e.resolveComponent("el-form-item"),i=e.resolveComponent("el-form"),u=e.resolveComponent("el-option"),d=e.resolveComponent("el-select"),l=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",null,[T[8]||(T[8]=e.createElementVNode("div",{class:"config-header"},[e.createElementVNode("h3",null,"节点配置")],-1)),e.createVNode(O),e.createElementVNode("div",ro,[T[6]||(T[6]=e.createElementVNode("h4",null,"算法信息",-1)),e.createVNode(i,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(k,{label:"算法名称",required:""},{default:e.withCtx(()=>[e.createVNode(g,{"model-value":t.value?.data.algorithmName,onInput:T[0]||(T[0]=b=>D(b)),placeholder:"请输入算法名称",maxlength:"50","show-word-limit":""},null,8,["model-value"])]),_:1}),e.createVNode(k,{label:"算法描述"},{default:e.withCtx(()=>[e.createVNode(g,{"model-value":t.value?.data.algorithmDescription,onInput:T[1]||(T[1]=b=>N(b)),type:"textarea",rows:4,placeholder:"请输入算法描述",maxlength:"200","show-word-limit":""},null,8,["model-value"])]),_:1})]),_:1})]),e.createElementVNode("div",so,[T[7]||(T[7]=e.createElementVNode("h4",null,"分支配置",-1)),e.createVNode(i,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(k,{label:"分支关系"},{default:e.withCtx(()=>[e.createVNode(d,{"model-value":t.value?.data.branchLogic||"and",onChange:T[2]||(T[2]=b=>e.unref(o).updateNodeData(t.value.id,{branchLogic:b})),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(u,{label:"ALL(满足所有分支)",value:"and"}),e.createVNode(u,{label:"SOME(满足至少一个分支)",value:"or"})]),_:1},8,["model-value"])]),_:1}),A.value?(e.openBlock(),e.createBlock(k,{key:0,label:"组间聚合窗口(秒)"},{default:e.withCtx(()=>[e.createVNode(l,{"model-value":t.value?.data.groupWindowSeconds,onChange:T[3]||(T[3]=b=>e.unref(o).updateNodeData(t.value.id,{groupWindowSeconds:b})),min:1,max:3600,step:1,placeholder:"请输入聚合窗口时间",style:{width:"100%"}},null,8,["model-value"])]),_:1})):e.createCommentVNode("",!0)]),_:1})]),e.createVNode(se,{fields:h.value,"node-data":t.value?.data,onUpdate:w,onFocus:T[4]||(T[4]=(b,S)=>e.unref(s)("start",b,S,t.value?.data?.arguments,t.value?.id)),onBlur:T[5]||(T[5]=(b,S)=>e.unref(p)("start",b,S,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"])])}}},[["__scopeId","data-v-5c3b25e1"]]),co={detectionTarget:le.DETECTION,classificationModel:le.CLASSIFICATION,ocr:le.OCR,face:le.FACE,faceRecognition:le.FACE,licensePlate:le.LICENSE_PLATE,dataSource:le.STREAM,smallModel:le.SMALL,end:le.END},mo=["smallModel","detectionTarget"],de=()=>{const c=e.ref(!1),o=s=>co[s]||null,t=s=>mo.includes(s),B=async(s,p="")=>{c.value=!0;try{const h=await ue(s,p);if(!h||h.length===0)return null;const w=p&&h.find(N=>N.title===p||N.name===p)||h[0],A=w.inputSchema||w.input_schema||{},D={};return A.properties&&Object.entries(A.properties).forEach(([N,_])=>{_.default!==void 0&&(D[N]=_.default)}),{inputSchema:A,arguments:D,extraConfig:w.extraConfig||null,toolId:w.id,toolTitle:w.title,toolName:w.name}}catch(h){return console.error(`获取工具 Schema 失败 (type=${s}):`,h),null}finally{c.value=!1}};return{schemaLoading:c,getToolType:o,needsToolSelection:t,fetchToolSchema:B,fetchSchemaForNodeType:async(s,p="")=>{const h=o(s);return h?await B(h,p):null}}},po={class:"config-header"},uo={key:0,class:"config-section"},fo={key:3,class:"array-input"},go={key:1,class:"config-section"},ho=Q({__name:"EndNodeConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{schemaLoading:B,fetchSchemaForNodeType:C}=de(),{apply:s,notifyChange:p,notifyFocus:h,notifyBlur:w}=re(),A=e.computed(()=>{if(!t.value)return[];const i=t.value.data.input_schema||t.value.data.inputSchema;if(!i||!i.properties)return[];const u=i.required||[];return Object.entries(i.properties).map(([d,l])=>({key:d,type:l.type,label:l.title||l.label||l.description||d,description:l.description||"",default:l.default,required:u.includes(d)||l.required||!1,min:l.minimum!==void 0?l.minimum:l.min,max:l.maximum!==void 0?l.maximum:l.max,step:l.step,maxLength:l.maxLength,options:l.enum,optionLabels:l.enumLabels||l.enum,dependsOn:l.dependsOn,isExtension:l["x-extension"]||!1}))}),D=e.computed(()=>A.value.filter(i=>!i.isExtension)),N=i=>{if(t.value)return t.value.data.arguments?.[i]},_=(i,u)=>{if(!t.value)return;const l={...t.value.data.arguments||{},[i]:u};o.updateNodeData(t.value.id,{arguments:l}),p("end",i,u,l,t.value.id)},T=i=>{if(!i.dependsOn||!t.value)return!0;const{field:u,value:d}=i.dependsOn,l=N(u);if(typeof d=="string"&&d.startsWith("!")){const b=d.substring(1);return l!==b}return Array.isArray(d)?d.includes(l):l===d},O=i=>{const u=N(i);return Array.isArray(u)?JSON.stringify(u):""},g=(i,u)=>{try{const d=JSON.parse(u);Array.isArray(d)&&_(i,d)}catch{}},k=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async i=>{if(!i||!t.value)return;const u=t.value.type,d=t.value.data,l=d.input_schema||d.inputSchema;if(l&&l.properties&&Object.keys(l.properties).length>0){const x=s("end",l,d.arguments||{});(x.schema!==l||x.arguments!==(d.arguments||{}))&&o.updateNodeData(t.value.id,{input_schema:x.schema,arguments:x.arguments});return}const b=await C(u);if(!b)return;const S=t.value?.data;if(!S)return;const f=s("end",b.inputSchema,{...b.arguments,...S.arguments});o.updateNodeData(t.value.id,{...S,input_schema:f.schema,extraConfig:b.extraConfig,arguments:f.arguments})},{immediate:!0}),(i,u)=>{const d=e.resolveComponent("el-button"),l=e.resolveComponent("el-divider"),b=e.resolveComponent("el-icon"),S=e.resolveComponent("el-tooltip"),f=e.resolveComponent("el-option"),x=e.resolveComponent("el-select"),q=e.resolveComponent("el-switch"),F=e.resolveComponent("el-input-number"),V=e.resolveComponent("el-input"),M=e.resolveComponent("el-form-item"),G=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",po,[u[2]||(u[2]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(d,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:k},null,8,["icon"])]),e.createVNode(l),D.value.length>0?(e.openBlock(),e.createElementBlock("div",uo,[u[3]||(u[3]=e.createElementVNode("h4",null,"告警上报配置",-1)),e.createVNode(G,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,m=>e.withDirectives((e.openBlock(),e.createBlock(M,{key:m.key,required:m.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(m.label),1),m.description?(e.openBlock(),e.createBlock(S,{key:0,content:m.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(b,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[m.options&&m.type==="string"?(e.openBlock(),e.createBlock(x,{key:0,"model-value":N(m.key),onChange:E=>_(m.key,E),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.options,(E,H)=>(e.openBlock(),e.createBlock(f,{key:E,label:m.optionLabels?m.optionLabels[H]:E,value:E},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):m.type==="boolean"?(e.openBlock(),e.createBlock(q,{key:1,"model-value":N(m.key),onChange:E=>_(m.key,E)},null,8,["model-value","onChange"])):m.type==="number"||m.type==="integer"?(e.openBlock(),e.createBlock(F,{key:2,"model-value":N(m.key),onChange:E=>_(m.key,E),min:m.min,max:m.max,step:m.step||(m.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):m.type==="array"&&!m.options?(e.openBlock(),e.createElementBlock("div",fo,[e.createVNode(V,{"model-value":O(m.key),onChange:E=>g(m.key,E),type:"textarea",rows:3,placeholder:m.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):m.type==="array"&&m.options?(e.openBlock(),e.createBlock(x,{key:4,"model-value":N(m.key),onChange:E=>_(m.key,E),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.options,(E,H)=>(e.openBlock(),e.createBlock(f,{key:E,label:m.optionLabels?m.optionLabels[H]:E,value:E},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(V,{key:5,"model-value":N(m.key),onInput:E=>_(m.key,E),maxlength:m.maxLength,"show-word-limit":!!m.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!m.dependsOn||T(m)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(se,{fields:A.value.filter(m=>m.isExtension),"node-data":t.value?.data,onUpdate:_,onFocus:u[0]||(u[0]=(m,E)=>e.unref(h)("end",m,E,t.value?.data?.arguments,t.value?.id)),onBlur:u[1]||(u[1]=(m,E)=>e.unref(w)("end",m,E,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"]),e.unref(B)&&A.value.length===0?(e.openBlock(),e.createElementBlock("div",go,[...u[4]||(u[4]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-cc1e3c65"]]),yo={class:"config-header"},_o={class:"config-section"},No={style:{display:"flex","justify-content":"space-between","align-items":"center"}},Co={style:{color:"var(--el-text-color-secondary)","font-size":"12px"}},ko={key:0,style:{"margin-top":"8px",color:"var(--el-text-color-secondary)","font-size":"12px"}},xo={key:0,class:"config-section"},bo={key:3,class:"array-input"},Eo={key:1,class:"config-section"},wo={key:2,class:"config-section"},Bo=Q({__name:"ClassificationModelConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{schemaLoading:B,fetchSchemaForNodeType:C}=de(),{apply:s,notifyChange:p,notifyFocus:h,notifyBlur:w}=re(),A=e.ref([]),D=e.ref(!1),N=e.computed({get:()=>t.value?.data.arguments?.modelId||null,set:f=>{t.value&&f&&u("modelId",f)}}),_=async()=>{try{D.value=!0,A.value=await Ze()}catch(f){console.error("加载模型列表失败:",f),Y.ElMessage.error("加载模型列表失败,请稍后重试"),A.value=[]}finally{D.value=!1}},T=async f=>{if(!t.value||!f)return;const x=A.value.find(G=>G.id===f);if(!x)return;const q=t.value.data.arguments||{};o.updateNodeData(t.value.id,{arguments:{...q,modelId:x.id,modelName:x.name}});const F=await C(t.value.type,"");if(!F)return;const V=t.value?.data;if(!V)return;o.updateNodeData(t.value.id,{...V,input_schema:F.inputSchema,extraConfig:F.extraConfig,arguments:{modelId:x.id,modelName:x.name,...F.arguments,...V.arguments}});const M=t.value?.data;if(M){const G=s("classificationModel",M.input_schema,M.arguments||{});o.updateNodeData(t.value.id,{input_schema:G.schema,arguments:G.arguments})}},O=()=>{t.value&&(o.updateNodeData(t.value.id,{arguments:{},input_schema:{},extraConfig:null}),p("classificationModel",null,null,{},t.value.id))},g=e.computed(()=>{if(!t.value)return[];const f=t.value.data.input_schema||t.value.data.inputSchema;if(!f||!f.properties)return[];const x=f.required||[];return Object.entries(f.properties).map(([q,F])=>({key:q,type:F.type,label:F.title||F.label||F.description||q,description:F.description||"",default:F.default,required:x.includes(q)||F.required||!1,min:F.minimum!==void 0?F.minimum:F.min,max:F.maximum!==void 0?F.maximum:F.max,step:F.step,maxLength:F.maxLength,options:F.enum,optionLabels:F.enumLabels||F.enum,dependsOn:F.dependsOn,sort:F.sort,isExtension:F["x-extension"]||!1})).sort((q,F)=>(q.sort??1/0)-(F.sort??1/0))}),k=e.computed(()=>g.value.filter(f=>!f.isExtension)),i=f=>{if(t.value)return t.value.data.arguments?.[f]},u=(f,x)=>{if(!t.value)return;const F={...t.value.data.arguments||{},[f]:x};o.updateNodeData(t.value.id,{arguments:F}),p("classificationModel",f,x,F,t.value.id)},d=f=>{if(!f.dependsOn||!t.value)return!0;const{field:x,value:q}=f.dependsOn,F=i(x);if(typeof q=="string"&&q.startsWith("!")){const V=q.substring(1);return F!==V}return Array.isArray(q)?q.includes(F):F===q},l=f=>{const x=i(f);return Array.isArray(x)?JSON.stringify(x):""},b=(f,x)=>{try{const q=JSON.parse(x);Array.isArray(q)&&u(f,q)}catch{}},S=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async f=>{if(!f||!t.value)return;A.value.length===0&&await _();const x=t.value.type,q=t.value.data,F=q.input_schema||q.inputSchema,V=q.arguments?.modelId;if(V&&F&&F.properties&&Object.keys(F.properties).length>0||!V)return;const M=await C(x,"");if(!M)return;const G=t.value?.data;if(!G)return;const m=s("classificationModel",M.inputSchema,{...M.arguments,...G.arguments});o.updateNodeData(t.value.id,{...G,input_schema:m.schema,extraConfig:M.extraConfig,arguments:m.arguments})},{immediate:!0}),(f,x)=>{const q=e.resolveComponent("el-button"),F=e.resolveComponent("el-divider"),V=e.resolveComponent("el-option"),M=e.resolveComponent("el-select"),G=e.resolveComponent("el-form-item"),m=e.resolveComponent("el-form"),E=e.resolveComponent("el-icon"),H=e.resolveComponent("el-tooltip"),I=e.resolveComponent("el-switch"),L=e.resolveComponent("el-input-number"),n=e.resolveComponent("el-input");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",yo,[x[3]||(x[3]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(q,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:S},null,8,["icon"])]),e.createVNode(F),e.createElementVNode("div",_o,[x[4]||(x[4]=e.createElementVNode("h4",null,"选择模型",-1)),e.createVNode(m,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(G,{label:"模型",required:""},{default:e.withCtx(()=>[e.createVNode(M,{modelValue:N.value,"onUpdate:modelValue":x[0]||(x[0]=a=>N.value=a),filterable:"",clearable:"",placeholder:"请选择模型",style:{width:"100%"},loading:D.value,onChange:T,onClear:O},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,a=>(e.openBlock(),e.createBlock(V,{key:a.id,label:`${a.name} (${a.modelTypeStr})`,value:a.id},{default:e.withCtx(()=>[e.createElementVNode("div",No,[e.createElementVNode("span",null,e.toDisplayString(a.name),1),e.createElementVNode("span",Co,e.toDisplayString(a.modelTypeStr),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","loading"]),A.value.length===0&&!D.value?(e.openBlock(),e.createElementBlock("div",ko," 暂无可用模型 ")):e.createCommentVNode("",!0)]),_:1})]),_:1})]),N.value&&k.value.length>0?(e.openBlock(),e.createElementBlock("div",xo,[x[5]||(x[5]=e.createElementVNode("h4",null,"分类模型参数",-1)),e.createVNode(m,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,a=>e.withDirectives((e.openBlock(),e.createBlock(G,{key:a.key,required:a.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(a.label),1),a.description?(e.openBlock(),e.createBlock(H,{key:0,content:a.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(E,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[a.options&&a.type==="string"?(e.openBlock(),e.createBlock(M,{key:0,"model-value":i(a.key),onChange:r=>u(a.key,r),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.options,(r,y)=>(e.openBlock(),e.createBlock(V,{key:r,label:a.optionLabels?a.optionLabels[y]:r,value:r},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):a.type==="boolean"?(e.openBlock(),e.createBlock(I,{key:1,"model-value":i(a.key),onChange:r=>u(a.key,r)},null,8,["model-value","onChange"])):a.type==="number"||a.type==="integer"?(e.openBlock(),e.createBlock(L,{key:2,"model-value":i(a.key),onChange:r=>u(a.key,r),min:a.min,max:a.max,step:a.step||(a.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):a.type==="array"&&!a.options?(e.openBlock(),e.createElementBlock("div",bo,[e.createVNode(n,{"model-value":l(a.key),onChange:r=>b(a.key,r),type:"textarea",rows:3,placeholder:a.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):a.type==="array"&&a.options?(e.openBlock(),e.createBlock(M,{key:4,"model-value":i(a.key),onChange:r=>u(a.key,r),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.options,(r,y)=>(e.openBlock(),e.createBlock(V,{key:r,label:a.optionLabels?a.optionLabels[y]:r,value:r},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(n,{key:5,"model-value":i(a.key),onInput:r=>u(a.key,r),maxlength:a.maxLength,"show-word-limit":!!a.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!a.dependsOn||d(a)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(se,{fields:g.value.filter(a=>a.isExtension),"node-data":t.value?.data,onUpdate:u,onFocus:x[1]||(x[1]=(a,r)=>e.unref(h)("classificationModel",a,r,t.value?.data?.arguments,t.value?.id)),onBlur:x[2]||(x[2]=(a,r)=>e.unref(w)("classificationModel",a,r,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"]),N.value&&e.unref(B)&&g.value.length===0?(e.openBlock(),e.createElementBlock("div",Eo,[...x[6]||(x[6]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0),!N.value&&!D.value?(e.openBlock(),e.createElementBlock("div",wo,[...x[7]||(x[7]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--color-text-secondary)"}}," 请先选择模型 ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-65278495"]]),Vo={class:"config-header"},So={key:0,class:"config-section"},To={key:3,class:"array-input"},Do={key:1,class:"config-section"},Ao=Q({__name:"OcrConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{schemaLoading:B,fetchSchemaForNodeType:C}=de(),{apply:s,notifyChange:p,notifyFocus:h,notifyBlur:w}=re(),A=e.computed(()=>{if(!t.value)return[];const i=t.value.data.input_schema||t.value.data.inputSchema;if(!i||!i.properties)return[];const u=i.required||[];return Object.entries(i.properties).map(([d,l])=>({key:d,type:l.type,label:l.title||l.label||l.description||d,description:l.description||"",default:l.default,required:u.includes(d)||l.required||!1,min:l.minimum!==void 0?l.minimum:l.min,max:l.maximum!==void 0?l.maximum:l.max,step:l.step,maxLength:l.maxLength,options:l.enum,optionLabels:l.enumLabels||l.enum,dependsOn:l.dependsOn,sort:l.sort,isExtension:l["x-extension"]||!1})).sort((d,l)=>(d.sort??1/0)-(l.sort??1/0))}),D=e.computed(()=>A.value.filter(i=>!i.isExtension)),N=i=>{if(t.value)return t.value.data.arguments?.[i]},_=(i,u)=>{if(!t.value)return;const l={...t.value.data.arguments||{},[i]:u};o.updateNodeData(t.value.id,{arguments:l}),p("ocr",i,u,l,t.value.id)},T=i=>{if(!i.dependsOn||!t.value)return!0;const{field:u,value:d}=i.dependsOn,l=N(u);if(typeof d=="string"&&d.startsWith("!")){const b=d.substring(1);return l!==b}return Array.isArray(d)?d.includes(l):l===d},O=i=>{const u=N(i);return Array.isArray(u)?JSON.stringify(u):""},g=(i,u)=>{try{const d=JSON.parse(u);Array.isArray(d)&&_(i,d)}catch{}},k=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async i=>{if(!i||!t.value)return;const u=t.value.type,d=t.value.data,l=d.input_schema||d.inputSchema;if(l&&l.properties&&Object.keys(l.properties).length>0)return;const b=await C(u);if(!b)return;const S=t.value?.data;if(!S)return;const f=s("ocr",b.inputSchema,{...b.arguments,...S.arguments});o.updateNodeData(t.value.id,{...S,input_schema:f.schema,extraConfig:b.extraConfig,arguments:f.arguments})},{immediate:!0}),(i,u)=>{const d=e.resolveComponent("el-button"),l=e.resolveComponent("el-divider"),b=e.resolveComponent("el-icon"),S=e.resolveComponent("el-tooltip"),f=e.resolveComponent("el-option"),x=e.resolveComponent("el-select"),q=e.resolveComponent("el-switch"),F=e.resolveComponent("el-input-number"),V=e.resolveComponent("el-input"),M=e.resolveComponent("el-form-item"),G=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Vo,[u[2]||(u[2]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(d,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:k},null,8,["icon"])]),e.createVNode(l),D.value.length>0?(e.openBlock(),e.createElementBlock("div",So,[u[3]||(u[3]=e.createElementVNode("h4",null,"OCR识别参数",-1)),e.createVNode(G,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,m=>e.withDirectives((e.openBlock(),e.createBlock(M,{key:m.key,required:m.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(m.label),1),m.description?(e.openBlock(),e.createBlock(S,{key:0,content:m.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(b,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[m.options&&m.type==="string"?(e.openBlock(),e.createBlock(x,{key:0,"model-value":N(m.key),onChange:E=>_(m.key,E),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.options,(E,H)=>(e.openBlock(),e.createBlock(f,{key:E,label:m.optionLabels?m.optionLabels[H]:E,value:E},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):m.type==="boolean"?(e.openBlock(),e.createBlock(q,{key:1,"model-value":N(m.key),onChange:E=>_(m.key,E)},null,8,["model-value","onChange"])):m.type==="number"||m.type==="integer"?(e.openBlock(),e.createBlock(F,{key:2,"model-value":N(m.key),onChange:E=>_(m.key,E),min:m.min,max:m.max,step:m.step||(m.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):m.type==="array"&&!m.options?(e.openBlock(),e.createElementBlock("div",To,[e.createVNode(V,{"model-value":O(m.key),onChange:E=>g(m.key,E),type:"textarea",rows:3,placeholder:m.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):m.type==="array"&&m.options?(e.openBlock(),e.createBlock(x,{key:4,"model-value":N(m.key),onChange:E=>_(m.key,E),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.options,(E,H)=>(e.openBlock(),e.createBlock(f,{key:E,label:m.optionLabels?m.optionLabels[H]:E,value:E},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(V,{key:5,"model-value":N(m.key),onInput:E=>_(m.key,E),maxlength:m.maxLength,"show-word-limit":!!m.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!m.dependsOn||T(m)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(se,{fields:A.value.filter(m=>m.isExtension),"node-data":t.value?.data,onUpdate:_,onFocus:u[0]||(u[0]=(m,E)=>e.unref(h)("ocr",m,E,t.value?.data?.arguments,t.value?.id)),onBlur:u[1]||(u[1]=(m,E)=>e.unref(w)("ocr",m,E,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"]),e.unref(B)&&A.value.length===0?(e.openBlock(),e.createElementBlock("div",Do,[...u[4]||(u[4]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-a1412d69"]]),Lo={class:"config-header"},Oo={key:0,class:"config-section"},$o={key:4,class:"array-input"},Io={key:1,class:"config-section"},Mo=Q({__name:"LicensePlateConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{schemaLoading:B,fetchSchemaForNodeType:C}=de(),{apply:s,notifyChange:p,notifyFocus:h,notifyBlur:w}=re(),A=e.computed(()=>o.nodes.filter(d=>d.type==="detectionTarget").map(d=>({id:d.id,label:d.data.label||"检测目标"}))),D=e.computed(()=>{if(!t.value)return[];const u=t.value.data.input_schema||t.value.data.inputSchema;if(!u||!u.properties)return[];const d=u.required||[];return Object.entries(u.properties).map(([l,b])=>({key:l,type:b.type,label:b.title||b.label||b.description||l,description:b.description||"",default:b.default,required:d.includes(l)||b.required||!1,min:b.minimum!==void 0?b.minimum:b.min,max:b.maximum!==void 0?b.maximum:b.max,step:b.step,maxLength:b.maxLength,options:b.enum,optionLabels:b.enumLabels||b.enum,dependsOn:b.dependsOn,sort:b.sort,isExtension:b["x-extension"]||!1})).sort((l,b)=>(l.sort??1/0)-(b.sort??1/0))}),N=e.computed(()=>D.value.filter(u=>!u.isExtension)),_=u=>{if(t.value)return t.value.data.arguments?.[u]},T=(u,d)=>{if(!t.value)return;const b={...t.value.data.arguments||{},[u]:d};o.updateNodeData(t.value.id,{arguments:b}),p("licensePlate",u,d,b,t.value.id)},O=u=>{if(!u.dependsOn||!t.value)return!0;const{field:d,value:l}=u.dependsOn,b=_(d);if(typeof l=="string"&&l.startsWith("!")){const S=l.substring(1);return b!==S}return Array.isArray(l)?l.includes(b):b===l},g=u=>{const d=_(u);return Array.isArray(d)?JSON.stringify(d):""},k=(u,d)=>{try{const l=JSON.parse(d);Array.isArray(l)&&T(u,l)}catch{}},i=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async u=>{if(!u||!t.value)return;const d=t.value.type,l=t.value.data,b=l.input_schema||l.inputSchema;if(b&&b.properties&&Object.keys(b.properties).length>0){if(!l.arguments||Object.keys(l.arguments).length===0){const q={};if(Object.entries(b.properties).forEach(([F,V])=>{V.default!==void 0&&(q[F]=V.default)}),Object.keys(q).length>0){const F=s("licensePlate",b,q);o.updateNodeData(t.value.id,{input_schema:F.schema,arguments:F.arguments})}}else{const q=s("licensePlate",b,l.arguments);q.schema!==b&&o.updateNodeData(t.value.id,{input_schema:q.schema,arguments:q.arguments})}return}const S=await C(d);if(!S)return;const f=t.value?.data;if(!f)return;const x=s("licensePlate",S.inputSchema,{...S.arguments,...f.arguments});o.updateNodeData(t.value.id,{...f,input_schema:x.schema,extraConfig:S.extraConfig,arguments:x.arguments})},{immediate:!0}),(u,d)=>{const l=e.resolveComponent("el-button"),b=e.resolveComponent("el-divider"),S=e.resolveComponent("el-icon"),f=e.resolveComponent("el-tooltip"),x=e.resolveComponent("el-option"),q=e.resolveComponent("el-select"),F=e.resolveComponent("el-switch"),V=e.resolveComponent("el-input-number"),M=e.resolveComponent("el-input"),G=e.resolveComponent("el-form-item"),m=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Lo,[d[2]||(d[2]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(l,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:i},null,8,["icon"])]),e.createVNode(b),N.value.length>0?(e.openBlock(),e.createElementBlock("div",Oo,[d[3]||(d[3]=e.createElementVNode("h4",null,"车牌识别参数",-1)),e.createVNode(m,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,E=>e.withDirectives((e.openBlock(),e.createBlock(G,{key:E.key,required:E.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(E.label),1),E.description?(e.openBlock(),e.createBlock(f,{key:0,content:E.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(S,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[E.key==="detectionScope"?(e.openBlock(),e.createBlock(q,{key:0,"model-value":_(E.key),onChange:H=>T(E.key,H),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,H=>(e.openBlock(),e.createBlock(x,{key:H.id,label:H.label,value:H.id},null,8,["label","value"]))),128))]),_:1},8,["model-value","onChange"])):E.options&&E.type==="string"?(e.openBlock(),e.createBlock(q,{key:1,"model-value":_(E.key),onChange:H=>T(E.key,H),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.options,(H,I)=>(e.openBlock(),e.createBlock(x,{key:H,label:E.optionLabels?E.optionLabels[I]:H,value:H},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):E.type==="boolean"?(e.openBlock(),e.createBlock(F,{key:2,"model-value":_(E.key),onChange:H=>T(E.key,H)},null,8,["model-value","onChange"])):E.type==="number"||E.type==="integer"?(e.openBlock(),e.createBlock(V,{key:3,"model-value":_(E.key),onChange:H=>T(E.key,H),min:E.min,max:E.max,step:E.step||(E.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):E.type==="array"&&!E.options?(e.openBlock(),e.createElementBlock("div",$o,[e.createVNode(M,{"model-value":g(E.key),onChange:H=>k(E.key,H),type:"textarea",rows:3,placeholder:E.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):E.type==="array"&&E.options?(e.openBlock(),e.createBlock(q,{key:5,"model-value":_(E.key),onChange:H=>T(E.key,H),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.options,(H,I)=>(e.openBlock(),e.createBlock(x,{key:H,label:E.optionLabels?E.optionLabels[I]:H,value:H},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(M,{key:6,"model-value":_(E.key),onInput:H=>T(E.key,H),maxlength:E.maxLength,"show-word-limit":!!E.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!E.dependsOn||O(E)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(se,{fields:D.value.filter(E=>E.isExtension),"node-data":t.value?.data,onUpdate:T,onFocus:d[0]||(d[0]=(E,H)=>e.unref(h)("licensePlate",E,H,t.value?.data?.arguments,t.value?.id)),onBlur:d[1]||(d[1]=(E,H)=>e.unref(w)("licensePlate",E,H,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"]),e.unref(B)&&D.value.length===0?(e.openBlock(),e.createElementBlock("div",Io,[...d[4]||(d[4]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-90705836"]]),Fo={class:"config-header"},Ro={class:"config-section"},qo={key:0,class:"config-section"},Go={key:4,class:"array-input"},zo={key:1,class:"config-section"},$e=Q({__name:"FaceConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{schemaLoading:B,fetchSchemaForNodeType:C}=de(),{apply:s,notifyChange:p,notifyFocus:h,notifyBlur:w}=re(),A=e.ref([]),D=e.ref(!1);(async()=>{D.value=!0;try{const b=[{id:"2037143480766062593",name:"测试",personNum:0}];A.value=b}finally{D.value=!1}})();const _=e.computed(()=>o.nodes.filter(S=>S.type==="detectionTarget").map(S=>({id:S.id,label:S.data.label||"检测目标"}))),T=e.computed(()=>{if(!t.value)return[];const b=t.value.data.input_schema||t.value.data.inputSchema;if(!b||!b.properties)return[];const S=b.required||[];return Object.entries(b.properties).map(([f,x])=>({key:f,type:x.type,label:x.title||x.label||x.description||f,description:x.description||"",default:x.default,required:S.includes(f)||x.required||!1,min:x.minimum!==void 0?x.minimum:x.min,max:x.maximum!==void 0?x.maximum:x.max,step:x.step,maxLength:x.maxLength,options:x.enum,optionLabels:x.enumLabels||x.enum,dependsOn:x.dependsOn,sort:x.sort,isExtension:x["x-extension"]||!1})).sort((f,x)=>(f.sort??1/0)-(x.sort??1/0))}),O=e.computed(()=>T.value.filter(b=>!b.isExtension)),g=b=>{if(t.value)return t.value.data.arguments?.[b]},k=(b,S)=>{if(!t.value)return;const x={...t.value.data.arguments||{},[b]:S};o.updateNodeData(t.value.id,{arguments:x}),p(t.value.type,b,S,x,t.value.id)},i=b=>{if(!b.dependsOn||!t.value)return!0;const{field:S,value:f}=b.dependsOn,x=g(S);if(typeof f=="string"&&f.startsWith("!")){const q=f.substring(1);return x!==q}return Array.isArray(f)?f.includes(x):x===f},u=b=>{const S=g(b);return Array.isArray(S)?JSON.stringify(S):""},d=(b,S)=>{try{const f=JSON.parse(S);Array.isArray(f)&&k(b,f)}catch{}},l=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async b=>{if(!b||!t.value)return;const S=t.value.type,f=t.value.data,x=f.input_schema||f.inputSchema;if(x&&x.properties&&Object.keys(x.properties).length>0){if(!f.arguments||Object.keys(f.arguments).length===0){const M={};if(Object.entries(x.properties).forEach(([G,m])=>{m.default!==void 0&&(M[G]=m.default)}),Object.keys(M).length>0){const G=s(S,x,M);o.updateNodeData(t.value.id,{input_schema:G.schema,arguments:G.arguments})}}else{const M=s(S,x,f.arguments);M.schema!==x&&o.updateNodeData(t.value.id,{input_schema:M.schema,arguments:M.arguments})}return}const q=await C(S);if(!q)return;const F=t.value?.data;if(!F)return;const V=s(S,q.inputSchema,{...q.arguments,...F.arguments});o.updateNodeData(t.value.id,{...F,input_schema:V.schema,extraConfig:q.extraConfig,arguments:V.arguments})},{immediate:!0}),(b,S)=>{const f=e.resolveComponent("el-button"),x=e.resolveComponent("el-divider"),q=e.resolveComponent("el-option"),F=e.resolveComponent("el-select"),V=e.resolveComponent("el-form-item"),M=e.resolveComponent("el-form"),G=e.resolveComponent("el-icon"),m=e.resolveComponent("el-tooltip"),E=e.resolveComponent("el-switch"),H=e.resolveComponent("el-input-number"),I=e.resolveComponent("el-input");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Fo,[S[3]||(S[3]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(f,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:l},null,8,["icon"])]),e.createVNode(x),e.createElementVNode("div",Ro,[S[4]||(S[4]=e.createElementVNode("h4",null,"人脸库选择",-1)),e.createVNode(M,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(V,{label:"人脸库"},{default:e.withCtx(()=>[e.createVNode(F,{"model-value":g("repositoryId"),onChange:S[0]||(S[0]=L=>k("repositoryId",L)),placeholder:"请选择人脸库",loading:D.value,style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,L=>(e.openBlock(),e.createBlock(q,{key:L.id,label:L.name,value:L.id},null,8,["label","value"]))),128))]),_:1},8,["model-value","loading"])]),_:1})]),_:1})]),O.value.length>0?(e.openBlock(),e.createElementBlock("div",qo,[S[5]||(S[5]=e.createElementVNode("h4",null,"人脸识别参数",-1)),e.createVNode(M,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,L=>e.withDirectives((e.openBlock(),e.createBlock(V,{key:L.key,required:L.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(L.label),1),L.description?(e.openBlock(),e.createBlock(m,{key:0,content:L.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(G,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[L.key==="detectionScope"?(e.openBlock(),e.createBlock(F,{key:0,"model-value":g(L.key),onChange:n=>k(L.key,n),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,n=>(e.openBlock(),e.createBlock(q,{key:n.id,label:n.label,value:n.id},null,8,["label","value"]))),128))]),_:1},8,["model-value","onChange"])):L.options&&L.type==="string"?(e.openBlock(),e.createBlock(F,{key:1,"model-value":g(L.key),onChange:n=>k(L.key,n),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.options,(n,a)=>(e.openBlock(),e.createBlock(q,{key:n,label:L.optionLabels?L.optionLabels[a]:n,value:n},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):L.type==="boolean"?(e.openBlock(),e.createBlock(E,{key:2,"model-value":g(L.key),onChange:n=>k(L.key,n)},null,8,["model-value","onChange"])):L.type==="number"||L.type==="integer"?(e.openBlock(),e.createBlock(H,{key:3,"model-value":g(L.key),onChange:n=>k(L.key,n),min:L.min,max:L.max,step:L.step||(L.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):L.type==="array"&&!L.options?(e.openBlock(),e.createElementBlock("div",Go,[e.createVNode(I,{"model-value":u(L.key),onChange:n=>d(L.key,n),type:"textarea",rows:3,placeholder:L.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):L.type==="array"&&L.options?(e.openBlock(),e.createBlock(F,{key:5,"model-value":g(L.key),onChange:n=>k(L.key,n),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.options,(n,a)=>(e.openBlock(),e.createBlock(q,{key:n,label:L.optionLabels?L.optionLabels[a]:n,value:n},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(I,{key:6,"model-value":g(L.key),onInput:n=>k(L.key,n),maxlength:L.maxLength,"show-word-limit":!!L.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!L.dependsOn||i(L)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(se,{fields:T.value.filter(L=>L.isExtension),"node-data":t.value?.data,onUpdate:k,onFocus:S[1]||(S[1]=(L,n)=>e.unref(h)(t.value?.type,L,n,t.value?.data?.arguments,t.value?.id)),onBlur:S[2]||(S[2]=(L,n)=>e.unref(w)(t.value?.type,L,n,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"]),e.unref(B)&&T.value.length===0?(e.openBlock(),e.createElementBlock("div",zo,[...S[6]||(S[6]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-4782d162"]]),Ho={class:"config-header"},Uo={key:0,class:"config-section"},Po={key:3,class:"array-input"},jo={key:1,class:"config-section"},Wo=Q({__name:"StreamConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{schemaLoading:B,fetchSchemaForNodeType:C}=de(),{apply:s,notifyChange:p,notifyFocus:h,notifyBlur:w}=re(),A=e.computed(()=>{if(!t.value)return[];const i=t.value.data.input_schema||t.value.data.inputSchema;if(!i||!i.properties)return[];const u=i.required||[];return Object.entries(i.properties).map(([d,l])=>({key:d,type:l.type,label:l.title||l.label||l.description||d,description:l.description||"",default:l.default,required:u.includes(d)||l.required||!1,min:l.minimum!==void 0?l.minimum:l.min,max:l.maximum!==void 0?l.maximum:l.max,step:l.step,maxLength:l.maxLength,options:l.enum,optionLabels:l.enumLabels||l.enum,dependsOn:l.dependsOn,sort:l.sort,isExtension:l["x-extension"]||!1})).sort((d,l)=>(d.sort??1/0)-(l.sort??1/0))}),D=e.computed(()=>A.value.filter(i=>!i.isExtension)),N=i=>{if(t.value)return t.value.data.arguments?.[i]},_=(i,u)=>{if(!t.value)return;const l={...t.value.data.arguments||{},[i]:u};o.updateNodeData(t.value.id,{arguments:l}),p("stream",i,u,l,t.value.id)},T=i=>{if(!i.dependsOn||!t.value)return!0;const{field:u,value:d}=i.dependsOn,l=N(u);if(typeof d=="string"&&d.startsWith("!")){const b=d.substring(1);return l!==b}return Array.isArray(d)?d.includes(l):l===d},O=i=>{const u=N(i);return Array.isArray(u)?JSON.stringify(u):""},g=(i,u)=>{try{const d=JSON.parse(u);Array.isArray(d)&&_(i,d)}catch{}},k=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async i=>{if(!i||!t.value)return;const u=t.value.type,d=t.value.data,l=d.input_schema||d.inputSchema;if(l&&l.properties&&Object.keys(l.properties).length>0)return;const b=await C(u);if(!b)return;const S=t.value?.data;if(!S)return;const f=s("stream",b.inputSchema,{...b.arguments,...S.arguments});o.updateNodeData(t.value.id,{...S,input_schema:f.schema,extraConfig:b.extraConfig,arguments:f.arguments})},{immediate:!0}),(i,u)=>{const d=e.resolveComponent("el-button"),l=e.resolveComponent("el-divider"),b=e.resolveComponent("el-icon"),S=e.resolveComponent("el-tooltip"),f=e.resolveComponent("el-option"),x=e.resolveComponent("el-select"),q=e.resolveComponent("el-switch"),F=e.resolveComponent("el-input-number"),V=e.resolveComponent("el-input"),M=e.resolveComponent("el-form-item"),G=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Ho,[u[2]||(u[2]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(d,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:k},null,8,["icon"])]),e.createVNode(l),D.value.length>0?(e.openBlock(),e.createElementBlock("div",Uo,[u[3]||(u[3]=e.createElementVNode("h4",null,"流处理参数",-1)),e.createVNode(G,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,m=>e.withDirectives((e.openBlock(),e.createBlock(M,{key:m.key,required:m.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(m.label),1),m.description?(e.openBlock(),e.createBlock(S,{key:0,content:m.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(b,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[m.options&&m.type==="string"?(e.openBlock(),e.createBlock(x,{key:0,"model-value":N(m.key),onChange:E=>_(m.key,E),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.options,(E,H)=>(e.openBlock(),e.createBlock(f,{key:E,label:m.optionLabels?m.optionLabels[H]:E,value:E},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):m.type==="boolean"?(e.openBlock(),e.createBlock(q,{key:1,"model-value":N(m.key),onChange:E=>_(m.key,E)},null,8,["model-value","onChange"])):m.type==="number"||m.type==="integer"?(e.openBlock(),e.createBlock(F,{key:2,"model-value":N(m.key),onChange:E=>_(m.key,E),min:m.min,max:m.max,step:m.step||(m.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):m.type==="array"&&!m.options?(e.openBlock(),e.createElementBlock("div",Po,[e.createVNode(V,{"model-value":O(m.key),onChange:E=>g(m.key,E),type:"textarea",rows:3,placeholder:m.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):m.type==="array"&&m.options?(e.openBlock(),e.createBlock(x,{key:4,"model-value":N(m.key),onChange:E=>_(m.key,E),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.options,(E,H)=>(e.openBlock(),e.createBlock(f,{key:E,label:m.optionLabels?m.optionLabels[H]:E,value:E},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(V,{key:5,"model-value":N(m.key),onInput:E=>_(m.key,E),maxlength:m.maxLength,"show-word-limit":!!m.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!m.dependsOn||T(m)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(se,{fields:A.value.filter(m=>m.isExtension),"node-data":t.value?.data,onUpdate:_,onFocus:u[0]||(u[0]=(m,E)=>e.unref(h)("stream",m,E,t.value?.data?.arguments,t.value?.id)),onBlur:u[1]||(u[1]=(m,E)=>e.unref(w)("stream",m,E,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"]),e.unref(B)&&A.value.length===0?(e.openBlock(),e.createElementBlock("div",jo,[...u[4]||(u[4]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-6c51757a"]]),Jo={class:"config-header"},Yo={class:"config-section"},Xo={class:"config-section"},Qo=Q({__name:"DataSourceConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{fetchSchemaForNodeType:B}=de(),{apply:C,notifyChange:s,notifyFocus:p,notifyBlur:h}=re(),w=e.computed(()=>{if(!t.value)return[];const g=t.value.data.input_schema||t.value.data.inputSchema;if(!g||!g.properties)return[];const k=g.required||[];return Object.entries(g.properties).map(([i,u])=>({key:i,type:u.type,label:u.title||u.label||u.description||i,description:u.description||"",default:u.default,required:k.includes(i)||u.required||!1,min:u.minimum!==void 0?u.minimum:u.min,max:u.maximum!==void 0?u.maximum:u.max,step:u.step,maxLength:u.maxLength,options:u.enum,optionLabels:u.enumLabels||u.enum,dependsOn:u.dependsOn,isExtension:u["x-extension"]||!1}))}),A=e.computed(()=>w.value.filter(g=>!g.isExtension)),D=g=>{if(t.value)return t.value.data.arguments?.[g]},N=(g,k)=>{if(!t.value)return;const u={...t.value.data.arguments||{},[g]:k};o.updateNodeData(t.value.id,{arguments:u}),s("dataSource",g,k,u,t.value.id)},_=async g=>{if(!t.value)return;if(o.edges.some(i=>i.source===t.value.id))try{await Y.ElMessageBox.confirm("切换模式将清除该节点的所有输出连接,是否继续?","确认切换",{confirmButtonText:"继续",cancelButtonText:"取消",type:"warning"}),o.edges.filter(u=>u.source===t.value.id).forEach(u=>{o.removeEdge(u.id)}),o.updateNodeData(t.value.id,{enableImageSequence:g}),N("enableImageSequence",g),g&&o.initializeSubsequentFrames(t.value.id)}catch{return}else o.updateNodeData(t.value.id,{enableImageSequence:g}),N("enableImageSequence",g),g&&o.initializeSubsequentFrames(t.value.id)},T=g=>{if(!g.dependsOn||!t.value)return!0;const{field:k,value:i}=g.dependsOn,u=D(k);if(typeof i=="string"&&i.startsWith("!")){const d=i.substring(1);return u!==d}return Array.isArray(i)?i.includes(u):u===i},O=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async g=>{if(!g||!t.value)return;const k=t.value.type,i=t.value.data,u=i.input_schema||i.inputSchema;if(k==="dataSource"&&u&&u.properties&&!u.properties.windowSeconds){u.properties.windowSeconds={type:"number",title:"协同窗口(秒)",description:"协同检测的时间窗口,单位为秒",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},i.arguments.windowSeconds||o.updateNodeData(t.value.id,{...i,input_schema:u,arguments:{...i.arguments,windowSeconds:5}});return}if(u&&u.properties&&Object.keys(u.properties).length>0)return;const d=await B(k);if(!d)return;const l=t.value?.data;if(!l)return;const b=C("dataSource",d.inputSchema,{...d.arguments,...l.arguments});o.updateNodeData(t.value.id,{...l,input_schema:b.schema,extraConfig:d.extraConfig,arguments:b.arguments})},{immediate:!0}),(g,k)=>{const i=e.resolveComponent("el-button"),u=e.resolveComponent("el-divider"),d=e.resolveComponent("el-icon"),l=e.resolveComponent("el-tooltip"),b=e.resolveComponent("el-option"),S=e.resolveComponent("el-select"),f=e.resolveComponent("el-switch"),x=e.resolveComponent("el-input-number"),q=e.resolveComponent("el-input"),F=e.resolveComponent("el-form-item"),V=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Jo,[k[3]||(k[3]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(i,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:O},null,8,["icon"])]),e.createVNode(u),e.createElementVNode("div",Yo,[k[4]||(k[4]=e.createElementVNode("h4",null,"数据源配置",-1)),e.createVNode(V,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,M=>e.withDirectives((e.openBlock(),e.createBlock(F,{key:M.key,required:M.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(M.label),1),M.description?(e.openBlock(),e.createBlock(l,{key:0,content:M.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(d,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[M.options&&M.type==="string"?(e.openBlock(),e.createBlock(S,{key:0,"model-value":D(M.key),onChange:G=>N(M.key,G),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.options,(G,m)=>(e.openBlock(),e.createBlock(b,{key:G,label:M.optionLabels?M.optionLabels[m]:G,value:G},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):M.type==="boolean"?(e.openBlock(),e.createBlock(f,{key:1,"model-value":D(M.key),onChange:G=>M.key==="enableImageSequence"?_(G):N(M.key,G)},null,8,["model-value","onChange"])):M.type==="number"||M.type==="integer"?(e.openBlock(),e.createBlock(x,{key:2,"model-value":D(M.key),onChange:G=>N(M.key,G),min:M.min,max:M.max,step:M.step||(M.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):(e.openBlock(),e.createBlock(q,{key:3,"model-value":D(M.key),onInput:G=>N(M.key,G),maxlength:M.maxLength,"show-word-limit":!!M.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!M.dependsOn||T(M)]])),128))]),_:1})]),e.createElementVNode("div",Xo,[k[5]||(k[5]=e.createElementVNode("h4",null,"分支配置",-1)),e.createVNode(V,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(F,{label:"分支关系"},{default:e.withCtx(()=>[e.createVNode(S,{"model-value":t.value?.data.branchLogic||"and",onChange:k[0]||(k[0]=M=>e.unref(o).updateNodeData(t.value.id,{branchLogic:M})),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(b,{label:"ALL(满足所有分支)",value:"and"}),e.createVNode(b,{label:"SOME(满足至少一个分支)",value:"or"})]),_:1},8,["model-value"])]),_:1})]),_:1})]),e.createVNode(se,{fields:w.value.filter(M=>M.isExtension),"node-data":t.value?.data,onUpdate:N,onFocus:k[1]||(k[1]=(M,G)=>e.unref(p)("dataSource",M,G,t.value?.data?.arguments,t.value?.id)),onBlur:k[2]||(k[2]=(M,G)=>e.unref(h)("dataSource",M,G,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"])])}}},[["__scopeId","data-v-73134f32"]]),Ko={safety:"安全检测",security:"安防监控",traffic:"交通监控",behavior:"行为分析"},Ie=()=>{const c=e.ref([]),o=e.ref(!1),t=e.ref(null),B=e.ref(""),C=async(_=!1)=>{o.value=!0,t.value=null;try{const T=await ue(le.SMALL,"");c.value=T}catch(T){console.error("加载小模型列表失败:",T),t.value="加载小模型列表失败,请稍后重试",c.value=[]}finally{o.value=!1}},s=async()=>{c.value=[],await C(!0)},p=_=>c.value.find(T=>T.id===_||T.title===_),h=_=>{const T=p(_);if(!T)return{};const O=T.inputSchema||T.input_schema;if(!O||!O.properties)return{};const g={};return Object.entries(O.properties).forEach(([k,i])=>{i.default!==void 0&&(g[k]=i.default)}),g},w=_=>{const T=p(_);if(!T)return[];const O=T.inputSchema||T.input_schema;if(!O||!O.properties)return[];const g=O.required||[];return Object.entries(O.properties).map(([k,i])=>({key:k,type:i.type,label:i.title||i.description||k,description:i.description||"",default:i.default,required:g.includes(k)||i.required||!1,min:i.minimum,max:i.maximum,step:i.step,options:i.enum,optionLabels:i.enumLabels||i.enum,dependsOn:i.dependsOn}))},A=e.computed(()=>{if(!B.value)return c.value;const _=B.value.toLowerCase();return c.value.filter(T=>T.name?.toLowerCase().includes(_)||T.type?.toLowerCase().includes(_)||T.title?.toLowerCase().includes(_)||T.description&&T.description.toLowerCase().includes(_)||D(T.type).toLowerCase().includes(_))}),D=_=>Ko[_]||_;return{models:c,loading:o,error:t,searchKeyword:B,filteredModels:A,loadSmallModels:C,reloadSmallModels:s,getModelConfig:p,getTypeLabel:D,getDefaultArguments:h,getSchemaFields:w,validateArguments:(_,T)=>{const O=p(_);if(!O)return{valid:!1,errors:["模型不存在"]};const g=[],k=O.inputSchema||O.input_schema;return!k||!k.properties?{valid:!0,errors:[]}:(Object.entries(k.properties).forEach(([i,u])=>{const d=T[i];if(u.required&&(d==null||d==="")){g.push(`${u.title||i} 为必填项`);return}if(d!=null&&(u.type==="number"||u.type==="integer")){if(typeof d!="number"){g.push(`${u.title||i} 必须是数字`);return}u.minimum!==void 0&&d<u.minimum&&g.push(`${u.title||i} 不能小于 ${u.minimum}`),u.maximum!==void 0&&d>u.maximum&&g.push(`${u.title||i} 不能大于 ${u.maximum}`)}}),{valid:g.length===0,errors:g})}}},Zo={class:"small-model-selector"},vo={key:0,class:"loading-state"},ea={key:1,class:"error-state"},ta={key:2,class:"model-list"},na=["onClick"],oa={class:"model-header"},aa={class:"model-name"},la={class:"model-description"},ra={class:"model-meta"},sa={class:"param-count"},ia={key:3,class:"empty-state"},ca=Q({__name:"SmallModelSelector",props:{modelValue:{type:String,default:null}},emits:["update:modelValue","select"],setup(c,{emit:o}){const t=o,{loading:B,error:C,searchKeyword:s,filteredModels:p,loadSmallModels:h,reloadSmallModels:w,getTypeLabel:A}=Ie(),D=O=>{t("update:modelValue",O.id),t("select",O)},N=()=>{w()},_=O=>({safety:"warning",security:"danger",traffic:"info"})[O]||"info",T=O=>{const g=O.inputSchema||O.input_schema;return!g||!g.properties?0:Object.keys(g.properties).length};return e.onMounted(()=>{h()}),(O,g)=>{const k=e.resolveComponent("el-input"),i=e.resolveComponent("el-icon"),u=e.resolveComponent("el-button"),d=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",Zo,[e.createVNode(k,{modelValue:e.unref(s),"onUpdate:modelValue":g[0]||(g[0]=l=>e.isRef(s)?s.value=l:null),placeholder:"搜索小模型(名称、类型、描述)",clearable:"","prefix-icon":e.unref(U.Search),size:"default",class:"search-input"},null,8,["modelValue","prefix-icon"]),e.unref(B)?(e.openBlock(),e.createElementBlock("div",vo,[e.createVNode(i,{class:"is-loading"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Loading))]),_:1}),g[2]||(g[2]=e.createElementVNode("span",null,"加载中...",-1))])):e.unref(C)?(e.openBlock(),e.createElementBlock("div",ea,[e.createVNode(i,{class:"error-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.CircleClose))]),_:1}),e.createElementVNode("p",null,e.toDisplayString(e.unref(C)),1),e.createVNode(u,{type:"primary",onClick:N},{default:e.withCtx(()=>[...g[3]||(g[3]=[e.createTextVNode("重试",-1)])]),_:1})])):e.unref(p).length>0?(e.openBlock(),e.createElementBlock("div",ta,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(p),l=>(e.openBlock(),e.createElementBlock("div",{key:l.id,class:e.normalizeClass(["model-item",{selected:c.modelValue===l.id}]),onClick:b=>D(l)},[e.createElementVNode("div",oa,[e.createElementVNode("div",aa,[e.createVNode(i,{class:"model-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Cpu))]),_:1}),e.createTextVNode(" "+e.toDisplayString(l.name),1)]),e.createVNode(d,{type:_(l.type),size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(A)(l.type)),1)]),_:2},1032,["type"])]),e.createElementVNode("div",la,e.toDisplayString(l.description),1),e.createElementVNode("div",ra,[l.supportDirectAlert?(e.openBlock(),e.createBlock(d,{key:0,size:"small",type:"success",effect:"plain"},{default:e.withCtx(()=>[...g[4]||(g[4]=[e.createTextVNode(" 支持直通预警 ",-1)])]),_:1})):e.createCommentVNode("",!0),e.createElementVNode("span",sa,e.toDisplayString(T(l))+" 个参数 ",1)])],10,na))),128))])):(e.openBlock(),e.createElementBlock("div",ia,[e.createVNode(i,{class:"empty-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Search))]),_:1}),g[6]||(g[6]=e.createElementVNode("p",null,"未找到匹配的小模型",-1)),e.createVNode(u,{text:"",onClick:g[1]||(g[1]=l=>s.value="")},{default:e.withCtx(()=>[...g[5]||(g[5]=[e.createTextVNode("清空搜索",-1)])]),_:1})]))])}}},[["__scopeId","data-v-6febf217"]]),da={class:"config-header"},ma={class:"config-section"},pa={key:0,class:"model-selector-wrapper"},ua={key:1,class:"selected-model-info"},fa={class:"model-info-header"},ga={class:"model-info-name"},ha={class:"model-info-description"},ya={key:0,class:"config-section"},_a={key:3,class:"array-input"},Na=Q({__name:"SmallModelConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{models:B,loadSmallModels:C}=Ie(),{apply:s,notifyChange:p,notifyFocus:h,notifyBlur:w}=re(),A=e.computed(()=>{if(!t.value)return[];const l=t.value.data.input_schema||t.value.data.inputSchema;if(!l||!l.properties)return[];const b=l.required||[];return Object.entries(l.properties).map(([S,f])=>({key:S,type:f.type,label:f.title||f.label||f.description||S,description:f.description||"",default:f.default,required:b.includes(S)||f.required||!1,min:f.minimum!==void 0?f.minimum:f.min,max:f.maximum!==void 0?f.maximum:f.max,step:f.step,maxLength:f.maxLength,options:f.enum,optionLabels:f.enumLabels||f.enum,dependsOn:f.dependsOn,sort:f.sort,isExtension:f["x-extension"]||!1})).sort((S,f)=>(S.sort??1/0)-(f.sort??1/0))}),D=e.computed(()=>A.value.filter(l=>!l.isExtension)),N=l=>{if(t.value)return t.value.data.arguments?.[l]},_=(l,b)=>{if(!t.value)return;const f={...t.value.data.arguments||{},[l]:b};o.updateNodeData(t.value.id,{arguments:f}),p("smallModel",l,b,f,t.value.id)},T=l=>{if(!l.dependsOn||!t.value)return!0;const{field:b,value:S}=l.dependsOn,f=N(b);if(typeof S=="string"&&S.startsWith("!")){const x=S.substring(1);return f!==x}return Array.isArray(S)?S.includes(f):f===S},O=l=>{const b=N(l);return Array.isArray(b)?JSON.stringify(b):""},g=(l,b)=>{try{const S=JSON.parse(b);Array.isArray(S)&&_(l,S)}catch{}},k=async l=>{if(!t.value)return;await C(!0);const b=l.inputSchema||l.input_schema||{},S={};b.properties&&Object.entries(b.properties).forEach(([x,q])=>{q.default!==void 0&&(S[x]=q.default)});const f=s("smallModel",b,S);o.updateNodeData(t.value.id,{...t.value.data,modelId:l.id||l.title,title:l.title,modelName:l.name,modelType:l.type,input_schema:f.schema,extraConfig:l.extraConfig,supportDirectAlert:l.supportDirectAlert||!1,arguments:f.arguments})},i=()=>{t.value&&Y.ElMessageBox.confirm("更换模型将清空当前配置,是否继续?","确认更换",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{o.updateNodeData(t.value.id,{modelId:null,modelName:"",supportDirectAlert:!1,input_schema:null,arguments:{}}),p("smallModel",null,null,{},t.value.id)}).catch(()=>{})},u=()=>t.value?.data.modelId?B.value.find(b=>b.id===t.value.data.modelId)?.description||"暂无描述":"",d=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(l,b)=>{const S=e.resolveComponent("el-button"),f=e.resolveComponent("el-divider"),x=e.resolveComponent("el-icon"),q=e.resolveComponent("el-tag"),F=e.resolveComponent("el-tooltip"),V=e.resolveComponent("el-option"),M=e.resolveComponent("el-select"),G=e.resolveComponent("el-switch"),m=e.resolveComponent("el-input-number"),E=e.resolveComponent("el-input"),H=e.resolveComponent("el-text"),I=e.resolveComponent("el-form-item"),L=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",da,[b[2]||(b[2]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(S,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:d},null,8,["icon"])]),e.createVNode(f),e.createElementVNode("div",ma,[b[5]||(b[5]=e.createElementVNode("h4",null,"选择小模型",-1)),t.value?.data.modelId?(e.openBlock(),e.createElementBlock("div",ua,[e.createElementVNode("div",fa,[e.createElementVNode("div",ga,[e.createVNode(x,{class:"model-info-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.Cpu))]),_:1}),e.createElementVNode("span",null,e.toDisplayString(t.value?.data.modelName),1)]),e.createVNode(S,{type:"primary",text:"",size:"small",onClick:i},{default:e.withCtx(()=>[...b[3]||(b[3]=[e.createTextVNode(" 更换模型 ",-1)])]),_:1})]),e.createElementVNode("div",ha,e.toDisplayString(u()),1),t.value?.data.supportDirectAlert?(e.openBlock(),e.createBlock(q,{key:0,size:"small",type:"success",effect:"plain"},{default:e.withCtx(()=>[...b[4]||(b[4]=[e.createTextVNode(" 支持直通预警模式 ",-1)])]),_:1})):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",pa,[e.createVNode(ca,{"model-value":t.value?.data.modelId,onSelect:k},null,8,["model-value"])]))]),t.value?.data.modelId?(e.openBlock(),e.createElementBlock("div",ya,[b[6]||(b[6]=e.createElementVNode("h4",null,"模型参数",-1)),e.createVNode(L,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,n=>e.withDirectives((e.openBlock(),e.createBlock(I,{key:n.key,required:n.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(n.label),1),n.description?(e.openBlock(),e.createBlock(F,{key:0,content:n.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(x,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[n.options&&n.type==="string"?(e.openBlock(),e.createBlock(M,{key:0,"model-value":N(n.key),onChange:a=>_(n.key,a),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.options,(a,r)=>(e.openBlock(),e.createBlock(V,{key:a,label:n.optionLabels?n.optionLabels[r]:a,value:a},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):n.type==="boolean"?(e.openBlock(),e.createBlock(G,{key:1,"model-value":N(n.key),onChange:a=>_(n.key,a)},null,8,["model-value","onChange"])):n.type==="number"||n.type==="integer"?(e.openBlock(),e.createBlock(m,{key:2,"model-value":N(n.key),onChange:a=>_(n.key,a),min:n.min,max:n.max,step:n.step||(n.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):n.type==="array"&&!n.options?(e.openBlock(),e.createElementBlock("div",_a,[e.createVNode(E,{"model-value":O(n.key),onChange:a=>g(n.key,a),type:"textarea",rows:3,placeholder:"输入坐标,例如: [[100,100], [200,100], [200,200], [100,200]]"},null,8,["model-value","onChange"]),e.createVNode(H,{size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.description||"输入多边形顶点坐标,格式: [[x1,y1], [x2,y2], ...]"),1)]),_:2},1024)])):n.type==="array"&&n.options?(e.openBlock(),e.createBlock(M,{key:4,"model-value":N(n.key),onChange:a=>_(n.key,a),multiple:"",placeholder:"请选择",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.options,(a,r)=>(e.openBlock(),e.createBlock(V,{key:a,label:n.optionLabels?n.optionLabels[r]:a,value:a},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(E,{key:5,"model-value":N(n.key),onInput:a=>_(n.key,a)},null,8,["model-value","onInput"]))]),_:2},1032,["required"])),[[e.vShow,!n.dependsOn||T(n)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(se,{fields:A.value.filter(n=>n.isExtension),"node-data":t.value?.data,onUpdate:_,onFocus:b[0]||(b[0]=(n,a)=>e.unref(h)("smallModel",n,a,t.value?.data?.arguments,t.value?.id)),onBlur:b[1]||(b[1]=(n,a)=>e.unref(w)("smallModel",n,a,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"])])}}},[["__scopeId","data-v-45931342"]]),Ca=()=>{const c=Z(),o=e.ref([]),t=e.ref(!1),B=e.ref(null),C=async(D=!1)=>{t.value=!0,B.value=null;try{const N=await ue(le.DETECTION,"");o.value=N.map(_=>Te.backendToFrontend(_))}catch(N){console.error("Failed to load detection targets:",N),B.value="加载检测目标失败",o.value=[]}finally{t.value=!1}},s=D=>o.value.find(N=>N.title===D)||null,p=D=>{const N=s(D);return N?{targetId:N.title,targetName:N.label,threshold:N.data.threshold||.5,targetWidth:N.data.targetWidth||20,targetHeight:N.data.targetHeight||20,postmodel:N.data.postmodel||"ClipVit",areas:N.data.areas||[],expandRect:N.data.expandRect!==void 0?N.data.expandRect:!1,topScale:N.data.topScale||1.6,bottomScale:N.data.bottomScale||1.6,leftScale:N.data.leftScale||1.6,rightScale:N.data.rightScale||1.6,enableStructure:N.data.enableStructure}:{}},h=(D=null)=>c.nodes.filter(N=>N.type==="detectionTarget"&&N.id!==D).map(N=>({value:N.id,label:N.data.targetName||N.data.label})),w=(D=null)=>{const N=[{value:"original",label:"原图"}],_=h(D);return[...N,..._]},A=e.computed(()=>o.value.map(D=>({value:D.title,label:D.label,...D})));return e.onMounted(()=>{C()}),{detectionTargets:o,loading:t,error:B,loadDetectionTargets:C,getTargetById:s,getDefaultConfig:p,getDetectionTargetNodes:h,getDetectionScopeOptions:w,getTargetOptions:A}},ka={class:"paired-array-input"},Me=Q({__name:"PairedArrayInput",props:{primaryField:{type:Object,required:!0},pairedField:{type:Object,required:!0},primaryValue:{type:Array,default:()=>[]},pairedValue:{type:Array,default:()=>[]}},emits:["update"],setup(c,{emit:o}){const t=(D,N)=>{let _;return(...T)=>{clearTimeout(_),_=setTimeout(()=>D(...T),N)}},B=c,C=o,s=e.ref([]),p=()=>{const D=B.primaryValue||[],N=B.pairedValue||[],_=Math.max(D.length,N.length,1);s.value=Array.from({length:_},(T,O)=>({primary:D[O]||"",paired:N[O]!==void 0?N[O]:B.pairedField.default?.[0]||.5}))};e.watch(()=>[B.primaryValue,B.pairedValue],()=>{p()},{immediate:!0,deep:!0});const h=t((D,N)=>{C("update",D,N)},300);e.watch(s,D=>{const N=D.map(T=>T.primary),_=D.map(T=>T.paired);h(N,_)},{deep:!0});const w=()=>{s.value.push({primary:"",paired:B.pairedField.default?.[0]||.5})},A=D=>{s.value.length>1&&s.value.splice(D,1)};return(D,N)=>{const _=e.resolveComponent("el-input"),T=e.resolveComponent("el-input-number"),O=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",ka,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,(g,k)=>(e.openBlock(),e.createElementBlock("div",{key:k,class:"input-row"},[e.createVNode(_,{modelValue:s.value[k].primary,"onUpdate:modelValue":i=>s.value[k].primary=i,placeholder:c.primaryField.description||"输入内容",class:e.normalizeClass([{"is-error":!s.value[k].primary||s.value[k].primary.trim()===""},"primary-input"])},null,8,["modelValue","onUpdate:modelValue","placeholder","class"]),e.createVNode(T,{modelValue:s.value[k].paired,"onUpdate:modelValue":i=>s.value[k].paired=i,min:c.pairedField.min||0,max:c.pairedField.max||1,step:c.pairedField.step||.1,class:"paired-input"},null,8,["modelValue","onUpdate:modelValue","min","max","step"]),e.createVNode(O,{type:"danger",icon:e.unref(U.Delete),circle:"",size:"small",disabled:s.value.length===1,onClick:i=>A(k)},null,8,["icon","disabled","onClick"])]))),128)),e.createVNode(O,{type:"primary",icon:e.unref(U.Plus),size:"small",onClick:w},{default:e.withCtx(()=>[e.createTextVNode(" 添加"+e.toDisplayString(c.primaryField.label),1)]),_:1},8,["icon"])])}}},[["__scopeId","data-v-a6234427"]]),xa={class:"config-header"},ba={class:"config-section"},Ea={class:"flex items-center justify-between"},wa={key:0,class:"config-section"},Ba={key:1,class:"config-section"},Va={key:4,class:"array-input"},Sa=Q({__name:"DetectionTargetConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{detectionTargets:B,loading:C,loadDetectionTargets:s}=Ca(),{apply:p,notifyChange:h,notifyFocus:w,notifyBlur:A}=re(),D=e.computed(()=>{if(!t.value)return[];const f=t.value.data.input_schema||t.value.data.inputSchema;if(!f||!f.properties)return[];const x=f.required||[];return Object.entries(f.properties).map(([q,F])=>({key:q,type:F.type,label:F.title||F.label||F.description||q,description:F.description||"",default:F.default,required:x.includes(q)||F.required||!1,min:F.minimum!==void 0?F.minimum:F.min,max:F.maximum!==void 0?F.maximum:F.max,step:F.step,maxLength:F.maxLength,options:F.enum,optionLabels:F.enumLabels||F.enum,dependsOn:F.dependsOn,"x-component":F["x-component"],"x-paired-with":F["x-paired-with"],sort:F.sort,isExtension:F["x-extension"]||!1})).sort((q,F)=>(q.sort??1/0)-(F.sort??1/0))}),N=f=>f.type==="array"&&f["x-component"]==="paired-array"&&f["x-paired-with"],_=f=>{const x=f["x-paired-with"];return D.value.find(q=>q.key===x)},T=e.computed(()=>{const f=new Set;return D.value.forEach(x=>{x["x-paired-with"]&&f.add(x["x-paired-with"])}),D.value.filter(x=>x.key!=="target_class"&&!f.has(x.key)&&!N(x)&&!x.isExtension)}),O=e.computed(()=>D.value.filter(f=>N(f)));e.computed(()=>D.value.filter(f=>!f.isExtension));const g=f=>{if(t.value)return t.value.data.arguments?.[f]},k=(f,x)=>{if(!t.value)return;const F={...t.value.data.arguments||{},[f]:x};o.updateNodeData(t.value.id,{arguments:F}),h("detectionTarget",f,x,F,t.value.id)},i=f=>{if(!f.dependsOn||!t.value)return!0;const{field:x,value:q}=f.dependsOn,F=g(x);if(typeof q=="string"&&q.startsWith("!")){const V=q.substring(1);return F!==V}return Array.isArray(q)?q.includes(F):F===q},u=f=>{const x=g(f);return Array.isArray(x)?JSON.stringify(x):""},d=(f,x)=>{try{const q=JSON.parse(x);Array.isArray(q)&&k(f,q)}catch{}},l=(f,x,q,F)=>{if(!t.value)return;const M={...t.value.data.arguments||{},[f]:x,[q]:F};o.updateNodeData(t.value.id,{arguments:M}),h("detectionTarget",f,x,M,t.value.id)},b=async f=>{if(!t.value||!f)return;await s(!0);const x=B.value.find(m=>m.title===f);if(!x)return;let q=x.inputSchema||x.input_schema||{};if(f==="other"){const m={properties:{object:{type:"array",title:"检测目标",description:"输入检测目标名称",items:{type:"string"},default:[""],minItems:1,"x-component":"paired-array","x-paired-with":"threshold"},threshold:{type:"array",title:"检测阈值",description:"每个目标的检测阈值",items:{type:"number",minimum:0,maximum:1},default:[.5],minItems:1}}};q={...q,properties:{...q.properties,...m.properties}}}const F={};q.properties&&Object.entries(q.properties).forEach(([m,E])=>{E.default!==void 0&&(F[m]=E.default)});const V=t.value.data,M={...F,target_class:x.title},G=p("detectionTarget",q,M);o.updateNodeData(t.value.id,{...V,targetId:x.title,targetName:x.label,label:x.label,input_schema:G.schema,inputSchema:G.schema,extraConfig:x.extraConfig,arguments:G.arguments})},S=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.data.targetId,f=>{if(!f||!t.value)return;const x=B.value.find(M=>M.title===f);if(!x)return;const q=t.value.data;if(q.input_schema&&Object.keys(q.input_schema).length>0)return;const F={...x.defaultArguments,...q.arguments,target_class:x.title},V=p("detectionTarget",x.inputSchema,F);o.updateNodeData(t.value.id,{...q,input_schema:V.schema,arguments:V.arguments})}),(f,x)=>{const q=e.resolveComponent("el-button"),F=e.resolveComponent("el-divider"),V=e.resolveComponent("el-option"),M=e.resolveComponent("el-select"),G=e.resolveComponent("el-form-item"),m=e.resolveComponent("el-form"),E=e.resolveComponent("el-icon"),H=e.resolveComponent("el-tooltip"),I=e.resolveComponent("el-switch"),L=e.resolveComponent("el-input-number"),n=e.resolveComponent("el-input");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",xa,[x[2]||(x[2]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(q,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:S},null,8,["icon"])]),e.createVNode(F),e.createElementVNode("div",ba,[x[3]||(x[3]=e.createElementVNode("h4",null,"检测目标选择",-1)),e.createVNode(m,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(G,{label:"选择检测目标",required:""},{default:e.withCtx(()=>[e.createVNode(M,{"model-value":t.value?.data.targetId,onChange:b,placeholder:"请选择检测目标",style:{width:"100%"},loading:e.unref(C),filterable:""},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(B),a=>(e.openBlock(),e.createBlock(V,{key:a.title,label:a.label,value:a.title},{default:e.withCtx(()=>[e.createElementVNode("div",Ea,[e.createElementVNode("span",null,e.toDisplayString(a.label),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["model-value","loading"])]),_:1})]),_:1})]),O.value.length>0?(e.openBlock(),e.createElementBlock("div",wa,[x[4]||(x[4]=e.createElementVNode("h4",null,"检测目标",-1)),e.createVNode(m,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,a=>(e.openBlock(),e.createBlock(G,{key:a.key,required:a.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(a.label),1),a.description?(e.openBlock(),e.createBlock(H,{key:0,content:a.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(E,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[e.createVNode(Me,{"primary-field":a,"paired-field":_(a),"primary-value":g(a.key),"paired-value":g(a["x-paired-with"]),onUpdate:(r,y)=>l(a.key,r,a["x-paired-with"],y)},null,8,["primary-field","paired-field","primary-value","paired-value","onUpdate"])]),_:2},1032,["required"]))),128))]),_:1})])):e.createCommentVNode("",!0),t.value?.data.targetId?(e.openBlock(),e.createElementBlock("div",Ba,[x[5]||(x[5]=e.createElementVNode("h4",null,"检测目标参数",-1)),e.createVNode(m,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,a=>e.withDirectives((e.openBlock(),e.createBlock(G,{key:a.key,required:a.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(a.label),1),a.description?(e.openBlock(),e.createBlock(H,{key:0,content:a.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(E,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[a.options&&a.type==="string"?(e.openBlock(),e.createBlock(M,{key:0,"model-value":g(a.key),onChange:r=>k(a.key,r),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.options,(r,y)=>(e.openBlock(),e.createBlock(V,{key:r,label:a.optionLabels?a.optionLabels[y]:r,value:r},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):a.type==="boolean"?(e.openBlock(),e.createBlock(I,{key:1,"model-value":g(a.key),onChange:r=>k(a.key,r)},null,8,["model-value","onChange"])):a.type==="number"||a.type==="integer"?(e.openBlock(),e.createBlock(L,{key:2,"model-value":g(a.key),onChange:r=>k(a.key,r),min:a.min,max:a.max,step:a.step||(a.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):N(a)?(e.openBlock(),e.createBlock(Me,{key:3,"primary-field":a,"paired-field":_(a),"primary-value":g(a.key),"paired-value":g(a["x-paired-with"]),onUpdate:(r,y)=>l(a.key,r,a["x-paired-with"],y)},null,8,["primary-field","paired-field","primary-value","paired-value","onUpdate"])):a.type==="array"&&!a.options?(e.openBlock(),e.createElementBlock("div",Va,[e.createVNode(n,{"model-value":u(a.key),onChange:r=>d(a.key,r),type:"textarea",rows:3,placeholder:a.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):a.type==="array"&&a.options?(e.openBlock(),e.createBlock(M,{key:5,"model-value":g(a.key),onChange:r=>k(a.key,r),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.options,(r,y)=>(e.openBlock(),e.createBlock(V,{key:r,label:a.optionLabels?a.optionLabels[y]:r,value:r},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(n,{key:6,"model-value":g(a.key),onInput:r=>k(a.key,r),maxlength:a.maxLength,"show-word-limit":!!a.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!a.dependsOn||i(a)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(se,{fields:D.value.filter(a=>a.isExtension),"node-data":t.value?.data,onUpdate:k,onFocus:x[0]||(x[0]=(a,r)=>e.unref(w)("detectionTarget",a,r,t.value?.data?.arguments,t.value?.id)),onBlur:x[1]||(x[1]=(a,r)=>e.unref(A)("detectionTarget",a,r,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"])])}}},[["__scopeId","data-v-47b88595"]]),Ta={class:"config-header"},Da={class:"config-section"},Aa={key:0,style:{"margin-bottom":"8px"}},La=Q({__name:"TargetCountConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{extensions:B,notifyChange:C,notifyFocus:s,notifyBlur:p}=re(),h=e.computed(()=>{const O=B.value?.targetCount;return!O||!O.schema?.properties?[]:Object.entries(O.schema.properties).map(([g,k])=>({key:g,type:k.type,label:k.title||g,description:k.description||"",default:k.default,required:(O.schema.required||[]).includes(g),min:k.minimum,max:k.maximum,step:k.step,options:k.enum,optionLabels:k.enumLabels||k.enum}))}),w=(O,g)=>{if(!t.value)return;const k={...t.value.data.arguments,[O]:g};o.updateNodeData(t.value.id,{arguments:k}),C("targetCount",O,g,k,t.value.id)};e.watch(()=>t.value?.id,()=>{const O=B.value?.targetCount;if(!O||!O.arguments)return;const g=t.value?.data?.arguments||{};Object.keys(O.arguments).some(i=>g[i]===void 0)&&o.updateNodeData(t.value.id,{arguments:{...O.arguments,...g}})},{immediate:!0});const A=O=>{if(!t.value)return;const g={...t.value.data.arguments,conditionRelation:O};o.updateNodeData(t.value.id,{arguments:g}),C("targetCount","conditionRelation",O,g,t.value.id)},D=()=>{if(!t.value)return;const g=[...t.value.data.arguments?.alertConditions||[],{operator:">",value:1}],k={...t.value.data.arguments,alertConditions:g};o.updateNodeData(t.value.id,{arguments:k}),C("targetCount","alertConditions",g,k,t.value.id)},N=(O,g,k)=>{if(!t.value)return;const i=[...t.value.data.arguments?.alertConditions||[]];i[O]={...i[O],[g]:k};const u={...t.value.data.arguments,alertConditions:i};o.updateNodeData(t.value.id,{arguments:u}),C("targetCount","alertConditions",i,u,t.value.id)},_=O=>{if(!t.value)return;const g=[...t.value.data.arguments?.alertConditions||[]];g.splice(O,1);const k={...t.value.data.arguments,alertConditions:g};o.updateNodeData(t.value.id,{arguments:k}),C("targetCount","alertConditions",g,k,t.value.id)},T=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(O,g)=>{const k=e.resolveComponent("el-button"),i=e.resolveComponent("el-divider"),u=e.resolveComponent("el-text"),d=e.resolveComponent("el-option"),l=e.resolveComponent("el-select"),b=e.resolveComponent("el-input-number"),S=e.resolveComponent("el-radio"),f=e.resolveComponent("el-radio-group"),x=e.resolveComponent("el-form-item"),q=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Ta,[g[3]||(g[3]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(k,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:T},null,8,["icon"])]),e.createVNode(i),e.createElementVNode("div",Da,[g[11]||(g[11]=e.createElementVNode("h4",null,"目标计数配置",-1)),e.createVNode(q,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(x,null,{label:e.withCtx(()=>[g[5]||(g[5]=e.createElementVNode("span",null,"计数条件",-1)),e.createVNode(u,{size:"small",type:"info",style:{"margin-left":"8px"}},{default:e.withCtx(()=>[...g[4]||(g[4]=[e.createTextVNode("(必填)",-1)])]),_:1})]),default:e.withCtx(()=>[e.createVNode(u,{size:"small",type:"info",style:{display:"block","margin-bottom":"8px"}},{default:e.withCtx(()=>[...g[6]||(g[6]=[e.createTextVNode(" 当目标数量满足下列条件时才上报 ",-1)])]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value?.data.arguments?.alertConditions||[],(F,V)=>(e.openBlock(),e.createElementBlock("div",{key:V,style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},[e.createVNode(l,{"model-value":F.operator,onChange:M=>N(V,"operator",M),style:{width:"120px","flex-shrink":"0"}},{default:e.withCtx(()=>[e.createVNode(d,{label:"等于 =",value:"="}),e.createVNode(d,{label:"不等于 ≠",value:"!="}),e.createVNode(d,{label:"大于 >",value:">"}),e.createVNode(d,{label:"小于 <",value:"<"}),e.createVNode(d,{label:"大于等于 ≥",value:">="}),e.createVNode(d,{label:"小于等于 ≤",value:"<="})]),_:1},8,["model-value","onChange"]),e.createVNode(b,{"model-value":F.value,onChange:M=>N(V,"value",M),min:1,precision:0,style:{flex:"1"},"controls-position":"right",placeholder:"请输入数值"},null,8,["model-value","onChange"]),(t.value?.data.arguments?.alertConditions||[]).length>1?(e.openBlock(),e.createBlock(k,{key:0,type:"danger",icon:e.unref(U.Delete),circle:"",size:"small",onClick:M=>_(V)},null,8,["icon","onClick"])):e.createCommentVNode("",!0)]))),128)),(t.value?.data.arguments?.alertConditions||[]).length>=2?(e.openBlock(),e.createElementBlock("div",Aa,[e.createVNode(u,{size:"small",style:{"margin-right":"8px"}},{default:e.withCtx(()=>[...g[7]||(g[7]=[e.createTextVNode("条件关系:",-1)])]),_:1}),e.createVNode(f,{"model-value":t.value?.data.arguments?.conditionRelation||"OR",onChange:g[0]||(g[0]=F=>A(F))},{default:e.withCtx(()=>[e.createVNode(S,{value:"OR"},{default:e.withCtx(()=>[...g[8]||(g[8]=[e.createTextVNode("OR(满足任一)",-1)])]),_:1}),e.createVNode(S,{value:"AND"},{default:e.withCtx(()=>[...g[9]||(g[9]=[e.createTextVNode("AND(同时满足)",-1)])]),_:1})]),_:1},8,["model-value"])])):e.createCommentVNode("",!0),e.createVNode(k,{type:"primary",link:"",icon:e.unref(U.Plus),onClick:D},{default:e.withCtx(()=>[...g[10]||(g[10]=[e.createTextVNode(" 添加条件 ",-1)])]),_:1},8,["icon"])]),_:1})]),_:1})]),e.createVNode(se,{fields:h.value,"node-data":t.value?.data,onUpdate:w,onFocus:g[1]||(g[1]=(F,V)=>e.unref(s)("targetCount",F,V,t.value?.data?.arguments,t.value?.id)),onBlur:g[2]||(g[2]=(F,V)=>e.unref(p)("targetCount",F,V,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"])])}}},[["__scopeId","data-v-27bdc740"]]),Oa={class:"config-header"},$a={class:"config-section"},Ia={style:{display:"flex","align-items":"center",gap:"8px"}},Ma={style:{display:"flex","align-items":"center",gap:"8px"}},Fa={style:{display:"flex","align-items":"center",gap:"8px"}},Ra=Q({__name:"TimerTargetConfig",setup(c){const o=Z(),t=e.computed(()=>o.selectedNode),{extensions:B,notifyChange:C,notifyFocus:s,notifyBlur:p}=re(),h=e.computed(()=>{const d=B.value?.timerTarget;return!d||!d.schema?.properties?[]:Object.entries(d.schema.properties).map(([l,b])=>({key:l,type:b.type,label:b.title||l,description:b.description||"",default:b.default,required:(d.schema.required||[]).includes(l),min:b.minimum,max:b.maximum,step:b.step,options:b.enum,optionLabels:b.enumLabels||b.enum}))}),w=(d,l)=>{if(!t.value)return;const b={...t.value.data.arguments,[d]:l};o.updateNodeData(t.value.id,{arguments:b}),C("timerTarget",d,l,b,t.value.id)};e.watch(()=>t.value?.id,()=>{const d=B.value?.timerTarget;if(!d||!d.arguments)return;const l=t.value?.data?.arguments||{};Object.keys(d.arguments).some(S=>l[S]===void 0)&&o.updateNodeData(t.value.id,{arguments:{...d.arguments,...l}})},{immediate:!0});const A=d=>{if(!t.value)return;const l={...t.value.data.arguments,duration:d};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","duration",d,l,t.value.id)},D=d=>{if(!t.value)return;const l={...t.value.data.arguments,similarity_enabled:d};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","similarity_enabled",d,l,t.value.id)},N=d=>{if(!t.value)return;const l={...t.value.data.arguments,similarity_threshold:d};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","similarity_threshold",d,l,t.value.id)},_=d=>{if(!t.value)return;const l={...t.value.data.arguments,hit_rate_enabled:d};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","hit_rate_enabled",d,l,t.value.id)},T=d=>{if(!t.value)return;const l={...t.value.data.arguments,hit_rate_threshold:d};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","hit_rate_threshold",d,l,t.value.id)},O=d=>{if(!t.value)return;const l={...t.value.data.arguments,overlap_detection:{...t.value.data.arguments?.overlap_detection,enabled:d}};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","overlap_detection",l.overlap_detection,l,t.value.id)},g=d=>{if(!t.value)return;const l={...t.value.data.arguments,overlap_detection:{...t.value.data.arguments?.overlap_detection,operator:d}};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","overlap_detection",l.overlap_detection,l,t.value.id)},k=d=>{if(!t.value)return;const l={...t.value.data.arguments,overlap_detection:{...t.value.data.arguments?.overlap_detection,threshold:d}};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","overlap_detection",l.overlap_detection,l,t.value.id)},i=d=>{if(!t.value)return;const l={...t.value.data.arguments,reset_timer:d};o.updateNodeData(t.value.id,{arguments:l}),C("timerTarget","reset_timer",d,l,t.value.id)},u=()=>{t.value&&Y.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(d,l)=>{const b=e.resolveComponent("el-button"),S=e.resolveComponent("el-divider"),f=e.resolveComponent("el-input-number"),x=e.resolveComponent("el-text"),q=e.resolveComponent("el-form-item"),F=e.resolveComponent("el-switch"),V=e.resolveComponent("el-icon"),M=e.resolveComponent("el-tooltip"),G=e.resolveComponent("el-slider"),m=e.resolveComponent("el-option"),E=e.resolveComponent("el-select"),H=e.resolveComponent("el-radio"),I=e.resolveComponent("el-radio-group"),L=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Oa,[l[11]||(l[11]=e.createElementVNode("h3",null,"节点配置",-1)),e.createVNode(b,{type:"danger",size:"small",icon:e.unref(U.Delete),circle:"",onClick:u},null,8,["icon"])]),e.createVNode(S),e.createElementVNode("div",$a,[l[18]||(l[18]=e.createElementVNode("h4",null,"目标计时配置",-1)),e.createVNode(L,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(q,{label:"持续时间(秒)",required:""},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":t.value?.data.arguments?.duration??30,onChange:l[0]||(l[0]=n=>A(n)),min:1,max:3600,precision:0,style:{width:"100%"},"controls-position":"right"},null,8,["model-value"]),e.createVNode(x,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...l[12]||(l[12]=[e.createTextVNode(" 目标需要持续出现的时间阈值(1-3600秒) ",-1)])]),_:1})]),_:1}),e.createVNode(q,{label:"目标追踪"},{default:e.withCtx(()=>[e.createElementVNode("div",Ia,[e.createVNode(F,{"model-value":t.value?.data.arguments?.similarity_enabled??!1,onChange:l[1]||(l[1]=n=>D(n))},null,8,["model-value"]),e.createVNode(M,{content:"当连续多张图片中目标的相似度大于阈值时,表示多张图片中的目标为同一个目标",placement:"top"},{default:e.withCtx(()=>[e.createVNode(V,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.similarity_enabled?(e.openBlock(),e.createBlock(q,{key:0,label:"目标相似度阈值(%)",required:""},{default:e.withCtx(()=>[e.createVNode(G,{"model-value":t.value?.data.arguments?.similarity_threshold??90,onInput:l[2]||(l[2]=n=>N(n)),min:0,max:100,step:1,"show-input":"","show-input-controls":!1},null,8,["model-value"]),e.createVNode(x,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...l[13]||(l[13]=[e.createTextVNode(" 判定为同一目标的相似度阈值 ",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(q,{label:"目标命中次数"},{default:e.withCtx(()=>[e.createElementVNode("div",Ma,[e.createVNode(F,{"model-value":t.value?.data.arguments?.hit_rate_enabled??!1,onChange:l[3]||(l[3]=n=>_(n))},null,8,["model-value"]),e.createVNode(M,{content:"当连续多张图片中多次出现了目标时,表示目标行为在持续",placement:"top"},{default:e.withCtx(()=>[e.createVNode(V,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.hit_rate_enabled?(e.openBlock(),e.createBlock(q,{key:1,label:"目标命中次数",required:""},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":t.value?.data.arguments?.hit_rate_threshold??80,onChange:l[4]||(l[4]=n=>T(n)),min:0,max:100,precision:0,style:{width:"100%"},"controls-position":"right",placeholder:"请输入目标命中次数比例"},null,8,["model-value"]),e.createVNode(x,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...l[14]||(l[14]=[e.createTextVNode(" 连续图片中目标出现的最低比例(0-100%) ",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(q,{label:"目标框重合检测"},{default:e.withCtx(()=>[e.createElementVNode("div",Fa,[e.createVNode(F,{"model-value":t.value?.data.arguments?.overlap_detection?.enabled||!1,onChange:l[5]||(l[5]=n=>O(n))},null,8,["model-value"]),e.createVNode(M,{content:"通过检测相邻画面中目标框的重合比例来判断目标是否发生了移动",placement:"top"},{default:e.withCtx(()=>[e.createVNode(V,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(U.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.overlap_detection?.enabled?(e.openBlock(),e.createBlock(q,{key:2,label:"重合运算条件",required:""},{default:e.withCtx(()=>[e.createVNode(E,{"model-value":t.value?.data.arguments?.overlap_detection?.operator??"gt",onChange:l[6]||(l[6]=n=>g(n)),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(m,{label:"大于 >",value:"gt"}),e.createVNode(m,{label:"等于 =",value:"eq"}),e.createVNode(m,{label:"小于 <",value:"lt"})]),_:1},8,["model-value"])]),_:1})):e.createCommentVNode("",!0),t.value?.data.arguments?.overlap_detection?.enabled?(e.openBlock(),e.createBlock(q,{key:3,label:"重合比例(%)",required:""},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":t.value?.data.arguments?.overlap_detection?.threshold,onChange:l[7]||(l[7]=n=>k(n)),min:0,max:100,precision:0,style:{width:"100%"},"controls-position":"right",placeholder:"请输入重合比例"},null,8,["model-value"])]),_:1})):e.createCommentVNode("",!0),e.createVNode(q,{label:"满足持续时间后是否重新计时",required:""},{default:e.withCtx(()=>[e.createVNode(I,{"model-value":t.value?.data.arguments?.reset_timer??!1,onChange:l[8]||(l[8]=n=>i(n))},{default:e.withCtx(()=>[e.createVNode(H,{value:!0},{default:e.withCtx(()=>[...l[15]||(l[15]=[e.createTextVNode("是",-1)])]),_:1}),e.createVNode(H,{value:!1},{default:e.withCtx(()=>[...l[16]||(l[16]=[e.createTextVNode("否",-1)])]),_:1})]),_:1},8,["model-value"]),e.createVNode(x,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...l[17]||(l[17]=[e.createTextVNode(" 重新计时表示目标满足首次持续时间后,当后续图片中目标还存在时是否需要重新计算目标的持续时间 ",-1)])]),_:1})]),_:1})]),_:1})]),e.createVNode(se,{fields:h.value,"node-data":t.value?.data,onUpdate:w,onFocus:l[9]||(l[9]=(n,a)=>e.unref(s)("timerTarget",n,a,t.value?.data?.arguments,t.value?.id)),onBlur:l[10]||(l[10]=(n,a)=>e.unref(p)("timerTarget",n,a,t.value?.data?.arguments,t.value?.id))},null,8,["fields","node-data"])])}}},[["__scopeId","data-v-21bba915"]]),qa={class:"node-config-panel"},Ga={class:"config-content"},za=Q({__name:"NodeConfigPanel",setup(c){const o=Z(),t={edge:eo,group:no,start:io,end:ho,classificationModel:Bo,ocr:Ao,licensePlate:Mo,face:$e,stream:Wo,dataSource:Qo,smallModel:Na,detectionTarget:Sa,targetCount:La,timerTarget:Ra,faceRecognition:$e},B=e.computed(()=>{const C=o.selectedEdge;if(C)return o.nodes.find(h=>h.id===C.source)?.data?.enableBranch&&t.edge||null;const s=o.selectedNode;return s&&t[s.type]||null});return(C,s)=>(e.openBlock(),e.createElementBlock("div",qa,[e.createElementVNode("div",Ga,[B.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(B.value),{key:0})):e.createCommentVNode("",!0)])]))}},[["__scopeId","data-v-3f5afb56"]]),Ha={class:"workflow-editor"},Ua={class:"editor-content"},Pa={__name:"WorkflowEditor",props:{mode:{type:String,default:me.ALGORITHM,validator:c=>Object.values(me).includes(c)},pageMode:{type:String,default:pe.CREATE,validator:c=>Object.values(pe).includes(c)},nodeConfigExtensions:{type:Object,default:()=>null}},setup(c){const o=c;e.provide("editorMode",o.mode),e.provide("nodeConfigExtensions",e.computed(()=>o.nodeConfigExtensions)),e.provide("pageMode",e.computed(()=>o.pageMode));const t=Z(),B=e.computed(()=>{if(t.selectedNodeId)return!0;const C=t.selectedEdge;return C?!!t.nodes.find(p=>p.id===C.source)?.data?.enableBranch:!1});return(C,s)=>(e.openBlock(),e.createElementBlock("div",Ha,[e.createVNode(Vt),e.createElementVNode("div",Ua,[e.createVNode(Ot),e.createVNode(Qn),e.createVNode(e.Transition,{name:"slide-right"},{default:e.withCtx(()=>[B.value?(e.openBlock(),e.createBlock(za,{key:0})):e.createCommentVNode("",!0)]),_:1})])]))}},Fe=Q(Pa,[["__scopeId","data-v-7184f8a0"]]),ja={Box:U.Box,CircleCheck:U.CircleCheck,CircleClose:U.CircleClose,Close:U.Close,CopyDocument:U.CopyDocument,Cpu:U.Cpu,DArrowLeft:U.DArrowLeft,DataAnalysis:U.DataAnalysis,Delete:U.Delete,Document:U.Document,Download:U.Download,FolderOpened:U.FolderOpened,Grid:U.Grid,Loading:U.Loading,Plus:U.Plus,QuestionFilled:U.QuestionFilled,RefreshLeft:U.RefreshLeft,Search:U.Search,Timer:U.Timer,Upload:U.Upload,User:U.User,View:U.View,VideoPlay:U.VideoPlay,Warning:U.Warning},Re=c=>{Object.entries(ja).forEach(([o,t])=>{c.component(o,t)}),c.component("WorkflowEditor",Fe)},Wa={install:Re};te.EditorMode=me,te.NodeType=$,te.PageMode=pe,te.WorkflowEditor=Fe,te.default=Wa,te.install=Re,Object.defineProperties(te,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|