aiflowui 1.0.17 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- (function(se,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):(se=typeof globalThis<"u"?globalThis:se||self,e(se.AIFlowUI={},se.Vue,se.ElementPlusIconsVue,se.ElementPlus,se.Pinia,se.VueFlowCore,se.VueFlowBackground,se.VueFlowControls,se.VueFlowNodeResizer))})(this,(function(se,e,Q,v,et,ee,tt,ot,nt){"use strict";const k={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"},de={IMAGE_BRANCH:"imageBranch",SMALL_MODEL:"smallModel",SMALL_MODEL_BRANCH:"smallModelBranch"},at={[k.DETECTION_TARGET]:"检测目标",[k.CLASSIFICATION_MODEL]:"分类模型",[k.OCR]:"OCR识别",[k.LICENSE_PLATE]:"车牌识别",[k.TARGET_COUNT]:"目标计数",[k.TIMER_TARGET]:"目标计时",[k.FACE_RECOGNITION]:"人脸识别",[k.SMALL_MODEL]:"小模型"},lt={cls:k.CLASSIFICATION_MODEL,ocr:k.OCR,license_plate:k.LICENSE_PLATE,target_count:k.TARGET_COUNT,timer_target:k.TIMER_TARGET,face:k.FACE_RECOGNITION,face_recognition:k.FACE_RECOGNITION},oe={ALGORITHM:"algorithm",TASK:"task"},Ne={CREATE:"create",EDIT:"edit",DETAIL:"detail"},me=a=>`${a}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,Ae=a=>({id:me("start"),type:"start",position:a,data:{label:"开始",algorithmName:"",enableBranch:!0,branchLogic:"and",groupWindowSeconds:5,taskName:"",streamType:"image",enableAlertVideo:!1,executionTime:"",schedule:[]}}),Ee=a=>({id:me("end"),type:"end",position:a,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}}}),we=a=>({id:me("dataSource"),type:"dataSource",position:a,data:{label:"数据源",enableImageSequence:!1,input_schema:{properties:{needCooperativeDetection:{type:"boolean",title:"是否需要协同检测",description:"开启协同检测后,该数据源下的多个摄像机画面会按协同条件检测。使用此算法的任务将不支持轮巡",default:!1},windowSeconds:{type:"integer",title:"协同检测等待时间(秒)",description:"等待接收数据源下所有摄像机返回图片的最大时长。若超时仍未收齐全部图片,将自动终止本次协同分析",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},enableImageSequence:{type:"boolean",title:"开启图片时序",description:"开启后将区分首帧检测和后续帧检测",default:!1}},required:[]},arguments:{needCooperativeDetection:!1,windowSeconds:5,enableImageSequence:!1,deviceType:"camera"},enableBranch:!0,branchLogic:"and"}}),De=(a,o="默认模型")=>({id:me("smallModel"),type:"smallModel",position:a,data:{label:"小模型",modelName:o,modelId:null,input_schema:{},arguments:{}}}),Le=(a,o="检测目标")=>({id:me("detectionTarget"),type:"detectionTarget",position:a,data:{label:"检测目标",targetName:o,targetId:null,input_schema:{},arguments:{}}}),Me=(a,o="分类模型")=>({id:me("classificationModel"),type:"classificationModel",position:a,data:{label:"分类模型",modelName:o,input_schema:{},arguments:{}}}),Oe=a=>({id:me("ocr"),type:"ocr",position:a,data:{label:"OCR识别",input_schema:{},arguments:{}}}),Ie=a=>({id:me("licensePlate"),type:"licensePlate",position:a,data:{label:"车牌识别",input_schema:{},arguments:{}}}),Re=a=>({id:me("targetCount"),type:"targetCount",position:a,data:{label:"目标计数",description:"",arguments:{targets:[],alertConditions:[{operator:">",value:0}],conditionRelation:"AND"},input_schema:{targets:{required:!0,type:"array",minLength:1},alertConditions:{required:!1,type:"array"}}}}),$e=a=>({id:me("timerTarget"),type:"timerTarget",position:a,data:{label:"目标计时",description:"",arguments:{duration:30,similarity_enabled:!1,similarity_threshold:90,hit_rate_enabled:!1,hit_rate_operator:"gte",hit_rate_threshold:2,overlap_detection:{enabled:!1,operator:"gt",threshold:90}},input_schema:{}}}),rt=(a,o={width:300,height:160},t="and",d=null)=>({id:me("group"),type:"group",position:a,style:{width:`${o.width}px`,height:`${o.height}px`},data:{label:"并行组",branchLogic:t,sourceNodeId:d},selectable:!0,deletable:!1,zIndex:-1}),Fe=a=>({id:me("faceRecognition"),type:"faceRecognition",position:a,data:{label:"人脸识别",input_schema:{},arguments:{}}}),ye=new Map,qe=()=>{const a=Ae({x:80,y:300}),o=we({x:320,y:300}),t=Ee({x:1e3,y:300}),d={id:`e_${a.id}_${o.id}`,source:a.id,target:o.id,data:{branchOrder:1}};return{nodes:[a,o,t],edges:[d]}},st=a=>et.defineStore(`aiflow-workflow-${a}`,()=>{const o=qe(),t=e.ref(o.nodes),d=e.ref(o.edges),_=e.ref(null),l=e.ref(null),C=e.ref(new Set),T=e.ref(new Set),D=e.ref({}),G=(R,n,E,H)=>{D.value[R]||(D.value[R]={}),D.value[R][n]||(D.value[R][n]={}),D.value[R][n][E]={...H}},L=(R,n,E,H,Y)=>{D.value[R]||(D.value[R]={}),D.value[R][n]||(D.value[R][n]={}),D.value[R][n][E]||(D.value[R][n][E]={}),D.value[R][n][E][H]=Y},p=(R,n,E)=>D.value[R]?.[n]?.[E]??null,S=()=>{D.value={}},V=e.computed(()=>_.value?t.value.find(R=>R.id===_.value):null),r=e.computed(()=>l.value?d.value.find(R=>R.id===l.value):null),y=R=>t.value.filter(n=>n.type===R).length,s=()=>{const R=t.value.filter(n=>n.type===k.DATA_SOURCE);R.length!==0&&(R.length===1?R[0].data.label="数据源":R.forEach((n,E)=>{n.data.label=`数据源 ${E+1}`}))},M=()=>t.value.filter(R=>R.type===k.DATA_SOURCE).length,P=()=>t.value.filter(n=>n.type===k.DATA_SOURCE).some(n=>n.data.arguments?.needCooperativeDetection===!0),g=()=>{const R=M(),n=P();return!(R>1||n)},F=R=>{t.value.push(R),R.type===k.DATA_SOURCE&&s()},u=R=>{const n=t.value.find(H=>H.id===R),E=n?.type===k.DATA_SOURCE;if(n?.type==="group"){N(R),d.value=d.value.filter(H=>H.source!==R&&H.target!==R),_.value===R&&(_.value=null);return}t.value=t.value.filter(H=>H.id!==R),d.value=d.value.filter(H=>H.source!==R&&H.target!==R),_.value===R&&(_.value=null),E&&s()},w=(R,n)=>{const E=t.value.find(H=>H.id===R);E&&(E.data={...E.data,...n})},c=(R,n)=>{const E=t.value.find(H=>H.id===R);E&&(E.position=n)},b=R=>{const n=t.value.find(E=>E.id===R.source);if(n&&(n.type===k.START||n.type===k.DATA_SOURCE)&&n.data?.enableBranch===!0){const H=d.value.filter(Y=>Y.source===R.source).length+1;R={...R,data:{...R.data,branchOrder:H}}}d.value=ee.addEdge(R,d.value)},q=R=>{const n=d.value.find(E=>E.id===R);if(d.value=d.value.filter(E=>E.id!==R),l.value===R&&(l.value=null),n&&n.data?.branchOrder!==void 0){const E=t.value.find(H=>H.id===n.source);E&&(E.type===k.START||E.type===k.DATA_SOURCE)&&d.value.filter(Y=>Y.source===n.source).sort((Y,z)=>(Y.data?.branchOrder||0)-(z.data?.branchOrder||0)).forEach((Y,z)=>{Y.data?Y.data.branchOrder=z+1:Y.data={branchOrder:z+1}})}},m=(R,n="and",E=null)=>{const H=rt(R,{width:300,height:160},n,E);return t.value.unshift(H),H.id},f=(R,n)=>{const E=t.value.find(z=>z.id===R),H=t.value.find(z=>z.id===n);if(!E||!H||E.parentNode===n)return;E.parentNode&&i(R);const Y=t.value.find(z=>z.id===R);Y&&(t.value=t.value.map(z=>z.id!==R?z:{...z,position:{x:Y.position.x-H.position.x,y:Y.position.y-H.position.y},parentNode:n,extent:"parent"}))},i=R=>{const n=t.value.find(z=>z.id===R);if(!n||!n.parentNode)return;const E=t.value.find(z=>z.id===n.parentNode),H=E?n.position.x+E.position.x:n.position.x,Y=E?n.position.y+E.position.y:n.position.y;t.value=t.value.map(z=>{if(z.id!==R)return z;const X={...z,position:{x:H,y:Y}};return delete X.parentNode,delete X.extent,X})},N=R=>{const n=t.value.find(E=>E.id===R);n&&(t.value=t.value.filter(E=>E.id!==R).map(E=>{if(E.parentNode!==R)return E;const H={...E,position:{x:E.position.x+n.position.x,y:E.position.y+n.position.y}};return delete H.parentNode,delete H.extent,H}))};return{nodes:t,edges:d,selectedNodeId:_,selectedEdgeId:l,invalidNodeIds:C,invalidEdgeIds:T,selectedNode:V,selectedEdge:r,getNodeCountByType:y,getDataSourceCount:M,hasCooperativeDetection:P,supportPatrol:g,addNode:F,removeNode:u,updateNodeData:w,updateNodePosition:c,addConnection:b,removeEdge:q,updateEdgeData:(R,n)=>{const E=d.value.find(H=>H.id===R);if(E){if(n.branchOrder!==void 0){const H=t.value.find(Y=>Y.id===E.source);if(H&&(H.type===k.START||H.type===k.DATA_SOURCE)){const Y=E.data?.branchOrder,z=n.branchOrder;if(Y!==z&&z!==null){const te=d.value.filter(le=>le.source===E.source&&le.id!==R).find(le=>le.data?.branchOrder===z);te&&(te.data?te.data.branchOrder=Y:te.data={branchOrder:Y})}}}E.data={...E.data,...n}}},selectNode:R=>{_.value=R,l.value=null},selectEdge:R=>{l.value=R,_.value=null},clearSelection:()=>{_.value=null,l.value=null},resetWorkflow:()=>{const R=qe();t.value=R.nodes,d.value=R.edges,_.value=null,l.value=null,S()},loadWorkflow:(R,n)=>{t.value=R,d.value=n,_.value=null,l.value=null,S()},refreshDataSourceLabels:s,createEmptyGroup:m,addNodeToGroup:f,removeNodeFromGroup:i,dissolveParallelGroup:N,initializeSubsequentFrames:R=>{t.value.find(E=>E.id===R)&&w(R,{subsequentFrames:[{id:"default-subsequent",label:"后续帧检测",handleId:"subsequent-frame"}]})},addSubsequentFrame:(R,n)=>{const E=t.value.find(H=>H.id===R);!E||E.type!=="dataSource"||(E.data.subsequentFrames||(E.data.subsequentFrames=[]),E.data.subsequentFrames.push(n),w(R,{subsequentFrames:[...E.data.subsequentFrames]}))},removeSubsequentFrame:(R,n)=>{const E=t.value.find(z=>z.id===R);if(!E||E.type!=="dataSource")return;const H=E.data.subsequentFrames.find(z=>z.id===n);H&&d.value.filter(X=>X.source===R&&X.sourceHandle===H.handleId).forEach(X=>q(X.id));const Y=E.data.subsequentFrames.filter(z=>z.id!==n);Y.forEach((z,X)=>{z.id==="default-subsequent"?z.label="后续帧检测":z.label=`后续帧检测${X+1}`}),w(R,{subsequentFrames:Y})},setInvalidIds:(R,n)=>{C.value=new Set(R),T.value=new Set(n)},clearInvalidIds:()=>{C.value=new Set,T.value=new Set},taskSources:D,setTaskSourceArguments:G,updateTaskSourceArgument:L,getTaskSourceArguments:p,clearTaskSources:S}}),ae=(a=null)=>{const o=a??e.inject("workflowInstanceId","default");return ye.has(o)||ye.set(o,st(o)),ye.get(o)()},it=a=>{if(ye.has(a)){try{ye.get(a)().$dispose()}catch{}ye.delete(a)}},Ge=(a,o,t)=>{const d=[],_=[],l=a.filter(s=>s.type!=="group"),C=l.filter(s=>s.type===k.START);C.length===0?d.push("工作流必须包含一个开始节点"):C.length>1&&d.push("工作流只能包含一个开始节点");const T=l.filter(s=>s.type===k.END);T.length===0?d.push("工作流必须包含一个结束节点"):T.length>1&&d.push("工作流只能包含一个结束节点");const D=l.filter(s=>s.type===k.DATA_SOURCE);D.length===0&&d.push("工作流必须至少包含一个数据源节点"),l.filter(s=>s.type===k.DETECTION_TARGET||s.type===k.SMALL_MODEL||s.type===k.CLASSIFICATION_MODEL).length===0&&d.push("工作流必须至少包含一个检测目标、内置小模型或分类模型"),l.some(s=>s.type===k.SMALL_MODEL),D.some(s=>s.data.arguments?.needCooperativeDetection===!0),D.length>1,l.forEach(s=>{const M=o.filter(g=>g.target===s.id),P=o.filter(g=>g.source===s.id);if(s.type===k.START&&M.length>0&&_.push("开始节点不应有输入连接"),s.type===k.END&&P.length>0&&_.push("结束节点不应有输出连接"),s.type===k.START&&P.length===0&&d.push("开始节点必须有输出连接"),s.type===k.END&&M.length===0&&d.push("结束节点必须有输入连接"),s.type===k.DATA_SOURCE&&s.data.enableImageSequence)if(P.length===0)d.push({nodeId:s.id,message:`数据源节点"${s.data.label}"开启了图片时序但未连接到任何处理节点`});else{const g=P.filter(c=>c.sourceHandle==="first-frame"),F=s.data.subsequentFrames||[],u=new Set(P.map(c=>c.sourceHandle)),w=F.filter(c=>!u.has(c.handleId));g.length===0&&_.push({nodeId:s.id,message:`数据源节点"${s.data.label}"的首帧检测未连接`}),w.length>0&&_.push({nodeId:s.id,message:`数据源节点"${s.data.label}"有${w.length}个后续帧未连接`})}s.type!==k.START&&s.type!==k.END&&!s.parentNode&&(M.length===0||P.length===0)&&_.push(`节点 "${s.data.label}" 可能未正确连接`)});const L=new Set;o.forEach(s=>{const M=a.find(P=>P.id===s.source);M?.type==="dataSource"&&M.data?.enableImageSequence===!0&&s.sourceHandle!=="first-frame"&&(!s.data?.timeWindowSeconds||s.data.timeWindowSeconds<1)&&d.push({edgeId:s.id,message:`分支"${s.data?.branchName||"未命名"}"缺少必填项:后续检测帧的持续时间`}),L.add(s.source),L.add(s.target)}),l.forEach(s=>{s.parentNode||!L.has(s.id)&&l.length>1&&_.push(`节点 "${s.data.label}" 未连接到工作流`)});const p=ct(l,o);d.push(...p);const S=mt(l,o);d.push(...S);const V=dt(l);d.push(...V);const r=pt(l,o);d.push(...r);const y=ut(l,o);return d.push(...y),t==="task"&&l.filter(M=>M.type===k.FACE_RECOGNITION).forEach(M=>{(!M.data.arguments?.repositoryId||Array.isArray(M.data.arguments.repositoryId)&&M.data.arguments.repositoryId.length===0)&&d.push({nodeId:M.id,message:`人脸识别节点"${M.data.label}"未选择人脸库,任务模式下人脸库为必选项`})}),{valid:d.length===0,errors:d,warnings:_}},ct=(a,o)=>{const t=[],d=a.find(C=>C.type===k.START);if(!d)return t;const _=new Set,l=(C,T,D,G)=>{if(T.includes(C))return;const L=a.find(y=>y.id===C);if(!L)return;const p=[...T,C];let S=[...D],V=[...G];if(L.type===k.TARGET_COUNT&&S.push(L),L.type===k.TIMER_TARGET&&V.push(L),L.type===k.END){const y=p.join("->");_.has(y)||(_.add(y),S.length>1&&t.push(`工作流分支中存在多个目标计数节点(${S.map(s=>`"${s.data.label}"`).join("、")}),每条分支只允许一个目标计数节点`),V.length>1&&t.push(`工作流分支中存在多个目标计时节点(${V.map(s=>`"${s.data.label}"`).join("、")}),每条分支只允许一个目标计时节点`));return}const r=o.filter(y=>y.source===C);r.length===0?(S.length>1&&t.push(`工作流分支中存在多个目标计数节点(${S.map(y=>`"${y.data.label}"`).join("、")}),每条分支只允许一个目标计数节点`),V.length>1&&t.push(`工作流分支中存在多个目标计时节点(${V.map(y=>`"${y.data.label}"`).join("、")}),每条分支只允许一个目标计时节点`)):r.forEach(y=>{l(y.target,p,S,V)})};return l(d.id,[],[],[]),t},dt=a=>{const o=[],t=a.filter(_=>_.type===k.DATA_SOURCE),d=a.filter(_=>_.type===k.SMALL_MODEL);return d.length>0&&t.length>1&&d.forEach(_=>{o.push({nodeId:_.id,message:`小模型节点"${_.data.label||_.data.modelName}"不支持多数据源场景,请确保工作流中只有一个数据源节点`})}),o},mt=(a,o)=>{const t=[];return a.filter(_=>_.type===k.DATA_SOURCE).forEach(_=>{const l=o.filter(C=>C.source===_.id);if(l.length>1){const C=l.map(G=>G.target),D=a.filter(G=>C.includes(G.id)).filter(G=>G.type===k.SMALL_MODEL);if(D.length>0){const G=D.map(L=>`"${L.data.label||L.data.modelName}"`).join("、");t.push(`数据源节点"${_.data.label}"开启了多分支,不能包含小模型节点(${G})。小模型节点只能出现在单分支场景中(数据源只有一个直连下游节点)`)}}}),t},pt=(a,o)=>{const t=[],d=[k.TARGET_COUNT,k.TIMER_TARGET],_={[k.TARGET_COUNT]:"目标计数",[k.TIMER_TARGET]:"目标计时"};return a.filter(C=>C.type===k.SMALL_MODEL).forEach(C=>{o.filter(D=>D.source===C.id).forEach(D=>{const G=a.find(L=>L.id===D.target);if(G&&d.includes(G.type)){const L=_[G.type]||G.type;t.push(`小模型节点"${C.data.label||C.data.modelName}"不能直接连接${L}节点"${G.data.label}",请先连接检测目标节点`)}})}),t},ut=(a,o)=>{const t=[],d=[k.OCR,k.LICENSE_PLATE,k.FACE_RECOGNITION],_={[k.OCR]:"OCR识别",[k.LICENSE_PLATE]:"车牌识别",[k.FACE_RECOGNITION]:"人脸识别"};return a.filter(C=>d.includes(C.type)).forEach(C=>{const T=o.filter(L=>L.source===C.id),D=d.filter(L=>L!==C.type).concat(k.END),G=C.data.label||_[C.type];T.forEach(L=>{const p=a.find(S=>S.id===L.target);p&&!D.includes(p.type)&&t.push(`${G}节点"${G}"只能连接除自身外的辅助节点或结束节点,当前连接到了"${p.data.label||p.type}"节点`)}),T.length===0&&t.push(`${G}节点"${G}"必须连接到其他辅助节点或结束节点`)}),t},He=a=>{const o=new Map;return a.forEach(t=>o.set(t.id,t)),o},ue=(a,o,t)=>(a[o]||[]).map(d=>t.get(d)).filter(Boolean),je=(a,o)=>{const t={},d=new Set(a.filter(l=>l.type==="group").map(l=>l.id));return[...o].sort((l,C)=>{const T=l.data?.branchOrder??1/0,D=C.data?.branchOrder??1/0;return T-D}).forEach(l=>{if(d.has(l.source)&&d.has(l.target))return;let C=l.source,T=l.target;if(d.has(C)){const D=o.find(G=>G.target===C&&!d.has(G.source));if(!D)return;C=D.source}if(d.has(T)){const D=o.find(G=>G.source===T&&!d.has(G.target));if(!D)return;T=D.target}t[C]||(t[C]=[]),t[C].includes(T)||t[C].push(T)}),t},Pe=(a,o)=>{const t=[...o.values()].find(C=>C.type===k.START);if(!t)return[];const d=new Set,_=[],l=C=>{if(d.has(C))return;d.add(C);const T=o.get(C);if(!T)return;T.type!==k.START&&T.type!==k.END&&T.type!=="group"&&_.push(T),(a[C]||[]).forEach(G=>l(G))};return l(t.id),_},ft=["detectionScope","description","detectionType","builtinTarget","universalTargetName","customModel","cloudModel","enableMultiFrame","continuousTime","lines","target_class"],be=(a,o,t,d)=>{const _=a.nodes.findIndex(C=>C.toolTitle===o);if(_===-1)return;const l=a.nodes[_];l.arguments?.[t]&&(a[d]=l.arguments[t]),a.nodes=a.nodes.filter((C,T)=>T!==_),a.nodes.forEach((C,T)=>{C.sortOrder=T+1})},gt=a=>{const o=a.alertConditions||[];return{targetCount:{logic:a.conditionRelation||"AND",rules:o.map(d=>({op:d.operator,value:d.value}))}}},ht=a=>{const o={op:">",value:a.duration??30,unit:"seconds"};if(a.hit_rate_enabled&&a.hit_rate_threshold!==void 0){const d={gt:">",gte:">=",eq:"=",lte:"<=",lt:"<"};o.hitCount={op:d[a.hit_rate_operator||"gte"]||">=",value:a.hit_rate_threshold}}const t=a.overlap_detection;if(t?.enabled&&t?.threshold!==void 0){const d=t.operator||"gt",_={gt:">",eq:"=",lt:"<"};o.overlap={op:_[d]||">",value:t.threshold,matchFrames:3}}return a.similarity_enabled&&a.similarity_threshold!==void 0&&(o.similarity={op:">",value:a.similarity_threshold,matchFrames:3}),{duration:o}},yt={[k.TARGET_COUNT]:gt,[k.TIMER_TARGET]:ht},Ce=(a,o)=>{if(!a)return{};const t=yt[o];if(t)return t(a);const d={...a};return ft.forEach(_=>{delete d[_]}),Object.keys(d).forEach(_=>{const l=d[_];(l==null||l==="")&&delete d[_]}),o===k.FACE_RECOGNITION&&d.repositoryId!==void 0&&(Array.isArray(d.repositoryId)||(d.repositoryId=[d.repositoryId]),d.repositoryId.length===0&&delete d.repositoryId),d},_t=a=>{switch(a.type){case k.DETECTION_TARGET:return a.data.targetId||"";case k.CLASSIFICATION_MODEL:return"cls";case k.OCR:return"ocr";case k.LICENSE_PLATE:return"license_plate";case k.SMALL_MODEL:return a.data.title||a.data.modelName||"";case k.TARGET_COUNT:return"target_count";case k.TIMER_TARGET:return"timer_target";case k.FACE_RECOGNITION:return"face";default:return a.data.label||""}},Nt=(a,o,t,d,_=null)=>{const l={toolTitle:_t(a),nodeName:a.data.label||a.data.targetName||"",sortOrder:o,arguments:Ce(_??a.data.arguments,a.type)};if(a.data.enableBranch&&a.data.branchLogic&&(l.branchLogic=a.data.branchLogic),t){const C=d.find(T=>T.source===t&&T.target===a.id);C?.data?.branchOrder!==void 0&&C?.data?.branchOrder!==null&&(l.branchOrder=C.data.branchOrder)}return l},ze=(a,o,t,d,_,l=null,C=[])=>{const T=[],D=Array.isArray(a)?[...a]:[a],G=new Set;let L=1;for(;D.length>0;){const p=[...D];D.length=0;const S=[];p.forEach(V=>{if(G.has(V))return;G.add(V);const r=d.get(V);!r||r.type===k.END||r.type===k.START||r.type===k.DATA_SOURCE||((t[V]||[]).forEach(s=>{const M=d.get(s);M&&M.type!==k.END&&D.push(s)}),C.includes(r.type))||S.push(r)}),S.length>0&&(S.forEach(V=>{const r=l?.(V.id)??null,y=Nt(V,L,o,_,r);S.length>1&&(y.nodeLogic="or"),T.push(y)}),L++)}return T},Ct=(a=null,o=null)=>{const t=a??ae(),d=e.inject("editorMode",oe.ALGORITHM);e.inject("pageMode",Ne.CREATE);const _=o??e.inject("editorConfig",null),l=e.computed(()=>Ge(t.nodes,t.edges,d)),C=(m,f,i,N)=>{if(i){const x=ue(m,i.id,f).find(W=>W.type===k.SMALL_MODEL);if(x)return x}return N.find(x=>x.type===k.SMALL_MODEL)||null},T=(m,f,i)=>{const x=ue(f,m.id,i).find(A=>A.type===k.SMALL_MODEL);return x?ue(f,x.id,i).filter(A=>A.type!==k.END&&A.type!==k.START&&A.type!==k.DATA_SOURCE).length>0?de.SMALL_MODEL_BRANCH:de.SMALL_MODEL:de.IMAGE_BRANCH},D=(m,f,i,N,x)=>{if(f===de.SMALL_MODEL||f===de.SMALL_MODEL_BRANCH){const A=C(N,x,i,m);return A?{toolTitle:A.data.title||A.data.modelName||"",toolType:"small",arguments:Ce(A.data.arguments,k.SMALL_MODEL)}:null}const W=m.find(A=>A.type===k.DETECTION_TARGET);return W?{toolTitle:W.data.targetId||"",toolType:"stream",decoder:{swDecoding:!1,mode:0,interval:0},arguments:Ce(W.data.arguments,k.DETECTION_TARGET)}:null},G=()=>{const m=t.nodes.find(N=>N.type===k.END);if(!m||!m.data.arguments)return{};const f=m.data.arguments,i={};return f.reportFrequency==="interval"&&f.reportInterval&&(i.interval={value:f.reportInterval}),f.enableDeduplication&&f.similarityThreshold!==void 0&&(i.dedup={value:f.similarityThreshold}),i},L=m=>{if(m.length<=1)return;const f=m.map(N=>N.sortOrder);if(new Set(f).size!==f.length){const N=f.filter((x,W)=>f.indexOf(x)!==W);throw new Error(`分支执行顺序存在重复:${[...new Set(N)].join(", ")}。请在配置面板中修改分支边的执行顺序,确保每个分支的执行顺序唯一。`)}},p=(m,f,i,N,x)=>{let W=[],A;if(m===de.IMAGE_BRANCH)f&&(W=ue(N,f.id,x).filter(B=>B.type!==k.END)),A=f?.id||i.find(B=>B.type===k.DATA_SOURCE)?.id;else if(m===de.SMALL_MODEL_BRANCH){const B=C(N,x,f,i);B&&(W=ue(N,B.id,x).filter($=>$.type!==k.END),A=B.id)}return{branchStartNodes:W,sourceNodeId:A}},S=new Set([k.DETECTION_TARGET,k.CLASSIFICATION_MODEL,k.SMALL_MODEL]),V=(m,f,i)=>{const N=new Set,x=[],W=A=>{if(N.has(A))return;N.add(A);const B=i.get(A);if(!B||B.type===k.END)return;S.has(B.type)&&x.push(B),(f[A]||[]).forEach(U=>W(U))};return W(m),x.length>0?x[x.length-1]:null},r=(m,f,i,N,x)=>{const W=`分支${x+1}`,A=V(f,i,N);if(!A)return m?.data?.nodeName||W;if(A.type===k.DETECTION_TARGET&&A.data?.targetId==="other"){const $=A.data?.arguments?.object;if(Array.isArray($)&&$.length>0){const U=$.join(",");return U.length>32?U.slice(0,32):U}}if(A.type===k.CLASSIFICATION_MODEL){const $=A.data?.arguments?.modelName||A.data?.label;if(!$)return W;const U=A.data?.arguments?.resultNegate?"(取反)":"";return $+U}return A.data?.label||A.data?.targetName||W},y=(m,f,i,N,x,W)=>{const{branchStartNodes:A,sourceNodeId:B}=p(f,i,m,N,x);if(A.length===0)return[];const $=[];return A.forEach((U,h)=>{const O=ze([U.id],B,N,x,W);if(O.length===0)return;const j=B?W.find(n=>n.source===B&&n.target===U.id):null,J=j?.data||{},Z=J.branchOrder!==void 0&&J.branchOrder!==null?J.branchOrder:h+1,R={branchName:J.branchName||r(U,U.id,N,x,h),sortOrder:Z,nodes:O};j?.sourceHandle&&(R.sourceHandle=j.sourceHandle),be(R,"target_count","targetCount","targetCount"),be(R,"timer_target","duration","duration"),J.timeWindowSeconds!==void 0&&J.timeWindowSeconds!==null&&(R.timeWindowSeconds=J.timeWindowSeconds),J.branchDescription&&(R.description=J.branchDescription),$.push(R)}),L($),$},s=()=>{const m=l.value;if(m.errors.length>0){const f=m.errors.map(i=>typeof i=="object"?i.message:i);return v.ElMessage.error(`验证失败: ${f.join(", ")}`),!1}return m.warnings.length>0&&v.ElMessage.warning(`警告: ${m.warnings.join(", ")}`),!0},M=()=>{const m=t.nodes,f=t.edges,i=He(m),N=je(m,f),x=Pe(N,i),W=[...i.values()].find(A=>A.type===k.START);return{allNodes:m,edges:f,nodeMap:i,adj:N,orderedNodes:x,startNode:W}},P=m=>{const f={ruleName:m?.data?.algorithmName||"",description:"",webhookUrl:""},i=G();Object.keys(i).length>0&&(f.extraConfig=i);const x=(_?.value??_)?.platform;return f.attach=x?{platform:x}:{},f},g=(m,f)=>{const i=m.filter(N=>N.type===k.DATA_SOURCE);if(i.length===0){const N=f.find(x=>x.type===k.DATA_SOURCE);N&&i.push(N)}return i},F=m=>m?.data?.enableImageSequence||m?.data?.arguments?.enableImageSequence||!1?"order":m?.data?.enableBranch&&m.data.branchLogic||"and",u=(m,f,i,N)=>{const{orderedNodes:x,adj:W,nodeMap:A,edges:B}=f,$=T(m,W,A),U=!!m.data.arguments?.needCooperativeDetection,h=B.find(R=>R.target===m.id),O=h?.data?.branchOrder!==void 0&&h?.data?.branchOrder!==null?h.data.branchOrder:N+1,j={sourceGroupId:null,name:m.data.label||"数据源",sort:O,synEnabled:U};if(U&&(j.windowSeconds=m.data.arguments?.windowSeconds||5),$===de.SMALL_MODEL){const R=D(x,$,m,W,A);return R&&(j.streamConfig=R),j.logic="and",j.children=[],j}if($===de.SMALL_MODEL_BRANCH){const R=D(x,$,m,W,A);R&&(j.streamConfig=R)}j.logic=F(m);const J=y(x,$,m,W,A,B),Z=i.length;return j.children=J.map((R,n)=>({name:R.branchName,branchRefs:[Z+n]})),i.push(...J),j},w=(m,f)=>{const N={groupLogic:m?.data?.enableBranch&&m.data.branchLogic||"and",sourceGroups:f};return f.length>=2&&(N.groupWindowSeconds=m.data.groupWindowSeconds),N},c=()=>{if(!s())return null;try{const m=M(),f=P(m.startNode),i=g(m.orderedNodes,m.allNodes),N=[],x=i.map((W,A)=>u(W,m,N,A));return f.ruleSchema=w(m.startNode,x),N.length>0&&(f.branches=N),f}catch(m){return v.ElMessage.error(m.message||"导出失败"),null}};return{validation:l,exportToJSON:c,copyToClipboard:()=>{try{const m=c();if(!m)return;const f=JSON.stringify(m,null,2);if(navigator.clipboard?.writeText)navigator.clipboard.writeText(f).then(()=>{v.ElMessage.success("已复制到剪贴板")}).catch(()=>{v.ElMessage.error("复制失败")});else{const i=document.createElement("textarea");i.value=f,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),v.ElMessage.success("已复制到剪贴板")}}catch(m){console.error("复制JSON失败:",m),v.ElMessage.error(`复制失败: ${m.message}`)}},downloadJSON:()=>{const m=c();if(!m)return;const f=JSON.stringify(m,null,2),i=new Blob([f],{type:"application/json"}),N=URL.createObjectURL(i),x=document.createElement("a");x.href=N,x.download=`workflow_${Date.now()}.json`,x.click(),URL.revokeObjectURL(N),v.ElMessage.success("导出成功")}}},kt=(a=null,o=null)=>{const t=a??ae();e.inject("editorMode",oe.TASK),e.inject("pageMode",Ne.CREATE);const d=e.inject("editorConfig",null),_=e.inject("taskModeConfig",null),l=o??d,C=o??_,T=e.inject("echoTaskData",null),D=e.inject("selectedDevicesMap",null),G=e.computed(()=>({errors:[],warnings:[]})),L=(g,F)=>{const u={},w=F?.data?.arguments??{};w.reportFrequency==="interval"&&w.reportInterval&&(u.interval={value:w.reportInterval}),w.enableDeduplication&&w.similarityThreshold!==void 0&&(u.dedup={value:w.similarityThreshold}),t.nodes.filter(q=>q.type===k.DATA_SOURCE).length>=2&&g?.data?.groupWindowSeconds!==void 0&&(u.groupWindowSeconds=g.data.groupWindowSeconds),u.enableVideo=!!g?.data?.enableAlertVideo;const b=g?.data?.schedule;return Array.isArray(b)&&b.length>0?u.schedule=b:u.schedule=[{dayType:"0",timePeriod:[{startTime:"00:00",endTime:"24:00"}]}],u},p=(g,F,u,w,c="image")=>{const b=ue(F,g.id,u).find(q=>q.type===k.SMALL_MODEL);if(b){const q=g.data?.arguments??{};return{toolTitle:b.data.title||b.data.modelName||"",toolType:"small",arguments:Ce(b.data.arguments,k.SMALL_MODEL),decoder:S(q,!0)}}if(c==="stream"){const q=w.find(f=>f.type===k.DETECTION_TARGET);if(!q)return null;const m=g.data?.arguments??{};return{toolTitle:q.data.targetId||"",toolType:"stream",arguments:Ce(q.data.arguments,k.DETECTION_TARGET),decoder:S(m,!1)}}return null},S=(g,F)=>{const u=g.mode??(F?3:0),w=g.interval??0,c=g.sw_decoding??(F?"CPU":"GPU");let b=0,q=0;return F?u===3?(b=0,q=0):u===2?(b=1,q=0):u===1&&(b=0,q=w):u===0?(b=0,q=w*25):u===1?(b=0,q=w):u===2&&(b=1,q=0),{sw_decoding:c==="CPU",mode:b,interval:q}},V=(g,F,u,w,c=null)=>{let b=g.id,q=ue(F,g.id,u).filter(i=>i.type!==k.END&&i.type!==k.START);q.length===1&&q[0].type===k.SMALL_MODEL&&(b=q[0].id,q=ue(F,b,u).filter(i=>i.type!==k.END&&i.type!==k.START));const m=q;if(m.length===0)return[];const f=c?i=>t.getTaskSourceArguments(g.id,c,i):null;return m.map((i,N)=>{const x=ze([i.id],b,F,u,w,f,[k.SMALL_MODEL]),W=w.find(h=>h.source===b&&h.target===i.id),A=W?.data??{},B=A.branchOrder??N+1,$=A.branchId??null,U={branchId:$,id:$,branchName:A.branchName||i.data?.label||`分支${N+1}`,sortOrder:B,nodes:x};return W?.sourceHandle&&(U.sourceHandle=W.sourceHandle),A.timeWindowSeconds!==void 0&&A.timeWindowSeconds!==null&&(U.timeWindowSeconds=A.timeWindowSeconds),A.branchDescription&&(U.description=A.branchDescription),be(U,"target_count","targetCount","targetCount"),be(U,"timer_target","duration","duration"),U})},r=(g,F,u,w,c=null,b=null,q=null,m=1,f=!1,i=!1)=>{const N=c??g.deviceType??"",x=N==="1400"||N==="2",W=x?"1400":"camera",A=F==="stream"?2:1,B=x&&b!==null?b==="device"?1:2:g.detectionType??2,U=(T?.value??T)?.graph?.sources??[],h=String(g.sourceId??g.id??""),j=U.find(Z=>String(Z.sourceId)===h)?.attach??{},J={deviceType:W,detectionType:B,dataSourceType:A,sourceOrder:u,timeTemplateId:j.timeTemplateId??"",timeTemplateName:j.timeTemplateName??"",platform:w?.platform??"TAI"};if(!x){const Z=q?.mode??0;Z===3?(J.frameExtractionType=0,J.frameInterval=0):Z===2?(J.frameExtractionType=i?1:3,J.frameInterval=0):(J.frameExtractionType=Z+1,J.frameInterval=q?.interval??30);const R=q?.sw_decoding??"CPU";J.frameExtractionSourceType=R==="GPU"?2:1,m===1&&F==="image"&&!f&&!!q?.enablePatrol?J.pollingConfig={enablePolling:1,pollingAmount:String(Math.max(1,q?.patrolGroupSize??1)),pollingInterval:"0"}:J.pollingConfig={enablePolling:0},J.thirdId=g.thirdId??""}return J},y=(g,F,u,w,c,b,q)=>{const m=C?.value??C,f=m?.value??m,i=D?.value?.[g.id]??[],N=g.data?.sourceGroupId??null,x=!!g.data?.arguments?.needCooperativeDetection,W=x?g.data?.arguments?.windowSeconds??5:void 0,A=F?.data?.streamType??"image",B=ue(u,g.id,w).some(n=>n.type===k.SMALL_MODEL),$=B?"small":A,U=p(g,u,w,q,A),h=g.data?.arguments?.deviceType??null,O=g.data?.arguments?.detectionMode??null,j=g.data?.arguments??null,J=t.getDataSourceCount();if(i.length>0)return i.map((n,E)=>{const H=String(n.sourceId??n.id??""),Y=V(g,u,w,c,H),z={sourceId:n.sourceId??n.id??"",sourceName:n.sourceName??n.name??"",sourceType:$,sourceGroupId:N,areas:n.area??n.areas??[],lines:n.lines??null,direction:n.direction??null,branches:Y,attach:r(n,A,E,f,h,O,j,J,x,B),synEnabled:x,...W!==void 0&&{windowSeconds:W}};return U&&(z.streamConfig=U,z.streamUrl="rtsp"),z});const Z=V(g,u,w,c),R={sourceId:"",sourceName:g.data?.label??"数据源",sourceType:$,sourceGroupId:N,areas:[],branches:Z,attach:r({},A,0,f,h,O,j,J,x,B),synEnabled:x};return U&&(R.streamConfig=U,R.streamUrl="rtsp"),[R]},s=()=>{try{const g=t.nodes,F=t.edges,u=He(g),w=je(g,F),c=[...u.values()].find(W=>W.type===k.START),b=[...u.values()].find(W=>W.type===k.END),q=l?.value??l,m=q?.value??q,f=Pe(w,u);let i=f.filter(W=>W.type===k.DATA_SOURCE);i.length===0&&(i=g.filter(W=>W.type===k.DATA_SOURCE));const N=i.flatMap((W,A)=>y(W,c,w,u,F,A,f)),x={workflowName:c?.data?.taskName??"",ruleId:m?.ruleId??"",sources:N,extraConfig:L(c,b),description:""};if((m?.platform??"TAI")==="THIRD"){const A=i[0]?.data?.arguments??{},B=A.mode??0,$=A.interval??0;let U,h,O;return B===0?(U="time",h=$,O=0):(U="frame",h=0,B===3?O=0:B===2?O=-1:O=$),{name:x.workflowName,type:"simple",plan:x.extraConfig.schedule??[],inferStrategy:U,timeInterval:h,frameInterval:O,mps:x.extraConfig.enableVideo??!1,graph:x}}return x}catch(g){return v.ElMessage.error(g.message||"导出失败"),null}};return{validation:G,exportToJSON:s,copyToClipboard:()=>{const g=s();if(!g)return;const F=JSON.stringify(g,null,2);if(navigator.clipboard?.writeText)navigator.clipboard.writeText(F).then(()=>v.ElMessage.success("已复制到剪贴板")).catch(()=>v.ElMessage.error("复制失败"));else{const u=document.createElement("textarea");u.value=F,u.style.position="fixed",u.style.opacity="0",document.body.appendChild(u),u.select(),document.execCommand("copy"),document.body.removeChild(u),v.ElMessage.success("已复制到剪贴板")}},downloadJSON:()=>{const g=s();if(!g)return;const F=JSON.stringify(g,null,2),u=new Blob([F],{type:"application/json"}),w=URL.createObjectURL(u),c=document.createElement("a");c.href=w,c.download=`task_workflow_${Date.now()}.json`,c.click(),URL.revokeObjectURL(w),v.ElMessage.success("导出成功")}}},Ue=(a=null,o=null,t=null)=>{const d=e.inject("editorMode",oe.ALGORITHM);return(a??d)===oe.TASK?kt(o,t):Ct(o,t)},bt=a=>{if(!a)return null;const o=a.indexOf("{");if(o===-1)return null;try{return JSON.parse(a.slice(o))}catch{return null}};function We(a=null,o=null,t=null){const d=o??ae(),_=e.inject("editorMode",oe.ALGORITHM),l=a??_,C=e.inject("taskModeConfig",null),T=t??C,D=p=>{const{type:S,data:V}=p,r=V.arguments||{},y=[];switch(S){case k.START:if(l===oe.TASK)if(V.taskName?.trim()||y.push("任务名称"),!V.executionTime?.trim())y.push("任务执行时间");else{const s=bt(V.executionTime);(!s||!Array.isArray(s.plan)||s.plan.length===0)&&y.push("任务执行时间(计划为空)")}else V.algorithmName?.trim()||y.push("算法名称");break;case k.SMALL_MODEL:V.modelId||y.push("模型选择");break;case k.DETECTION_TARGET:V.targetId||y.push("检测目标选择");break;case k.CLASSIFICATION_MODEL:r.modelId||y.push("分类模型选择");break;case k.DATA_SOURCE:l===oe.TASK&&((T?.value??T)?.datasource?.getDevices?.(p.id)??[]).length===0&&y.push("设备选择");break;case k.TARGET_COUNT:break;case k.TIMER_TARGET:(!r.duration||r.duration<1)&&y.push("持续时间");break}return y},G=p=>{const S=d.nodes.find(r=>r.id===p.source);if(!S)return[];const V=[];return S.type===k.DATA_SOURCE&&S.data?.enableImageSequence===!0&&p.sourceHandle!=="first-frame"&&(!p.data?.timeWindowSeconds||p.data.timeWindowSeconds<1)&&V.push("后续检测帧的持续时间"),V};return{runValidation:()=>{const{nodes:p,edges:S}=d;d.clearInvalidIds();const V=Ge(p,S,l),r=V.errors,y=[],s=[],M=[];p.filter(c=>c.type!=="group").forEach(c=>{const b=D(c);b.length>0&&(y.push(c.id),M.push(`节点"${c.data.label}"缺少必填参数:${b.join("、")}`))}),S.forEach(c=>{const b=G(c);b.length>0&&(s.push(c.id),M.push(`分支"${c.data?.branchName||"未命名"}"缺少:${b.join("、")}`))}),r.forEach(c=>{typeof c=="object"&&(c.nodeId&&y.push(c.nodeId),c.edgeId&&s.push(c.edgeId))}),(y.length>0||s.length>0)&&(d.setInvalidIds(y,s),setTimeout(()=>{d.clearInvalidIds()},5e3));const g=r.map(c=>typeof c=="object"?c.message:c),F=V.warnings.map(c=>typeof c=="object"?c.message:c),u=[...g.map(c=>({msg:c,type:"error"})),...M.map(c=>({msg:c,type:"warning"})),...F.map(c=>({msg:c,type:"warning"}))],w=g.length===0&&M.length===0;if(w&&F.length===0)v.ElMessage.success("校验通过,所有节点和分支参数配置正确");else if(u.length>0){const c=u[0];v.ElMessage[c.type](c.msg)}return{passed:w,errors:[...g,...M],warnings:F}}}}const ne=(a,o)=>{const t=a.__vccOpts||a;for(const[d,_]of o)t[d]=_;return t},xt={class:"toolbar"},Et={class:"toolbar-right"},wt=ne({__name:"WorkflowToolbar",setup(a){const o=ae(),{copyToClipboard:t,downloadJSON:d}=Ue(),{runValidation:_}=We(),l=()=>{o.resetWorkflow()},C=()=>{_()},T=()=>{t()},D=()=>{d()};return(G,L)=>{const p=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",xt,[L[4]||(L[4]=e.createElementVNode("div",{class:"toolbar-left"},[e.createElementVNode("h2",null,"AIPass 算法编排系统")],-1)),e.createElementVNode("div",Et,[e.createVNode(p,{type:"info",icon:e.unref(Q.RefreshLeft),onClick:l},{default:e.withCtx(()=>[...L[0]||(L[0]=[e.createTextVNode(" 重置 ",-1)])]),_:1},8,["icon"]),e.createVNode(p,{type:"danger",icon:e.unref(Q.CircleCheck),onClick:C},{default:e.withCtx(()=>[...L[1]||(L[1]=[e.createTextVNode(" 运行测试 ",-1)])]),_:1},8,["icon"]),e.createVNode(p,{type:"success",icon:e.unref(Q.CopyDocument),onClick:T},{default:e.withCtx(()=>[...L[2]||(L[2]=[e.createTextVNode(" 复制JSON ",-1)])]),_:1},8,["icon"]),e.createVNode(p,{type:"warning",icon:e.unref(Q.Download),onClick:D},{default:e.withCtx(()=>[...L[3]||(L[3]=[e.createTextVNode(" 导出JSON ",-1)])]),_:1},8,["icon"])])])}}},[["__scopeId","data-v-17ee463c"]]),Tt={key:0},St={class:"node-list"},Vt={class:"node-list"},Bt={class:"node-list"},At={class:"node-list"},Dt=ne({__name:"NodeToolbox",setup(a){const o=e.ref(!0),t=e.ref(["basic","data","calculation","algorithm"]),d=(_,l)=>{_.dataTransfer&&(_.dataTransfer.setData("application/vueflow",l),_.dataTransfer.effectAllowed="move")};return(_,l)=>{const C=e.resolveComponent("el-icon"),T=e.resolveComponent("VideoPlay"),D=e.resolveComponent("CircleClose"),G=e.resolveComponent("el-collapse-item"),L=e.resolveComponent("FolderOpened"),p=e.resolveComponent("Cpu"),S=e.resolveComponent("View"),V=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:l[1]||(l[1]=r=>!o.value&&(o.value=!0))},[o.value?(e.openBlock(),e.createElementBlock("h3",Tt,"节点工具箱")):(e.openBlock(),e.createBlock(C,{key:1,class:"collapsed-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Grid))]),_:1})),o.value?(e.openBlock(),e.createBlock(C,{key:2,class:"toggle-btn",onClick:l[0]||(l[0]=e.withModifiers(r=>o.value=!1,["stop"]))},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.DArrowLeft))]),_:1})):e.createCommentVNode("",!0)]),o.value?(e.openBlock(),e.createBlock(V,{key:0,modelValue:t.value,"onUpdate:modelValue":l[13]||(l[13]=r=>t.value=r),class:"toolbox-content"},{default:e.withCtx(()=>[e.createVNode(G,{title:"基础节点",name:"basic"},{default:e.withCtx(()=>[e.createElementVNode("div",St,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[2]||(l[2]=r=>d(r,"start"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(T)]),_:1}),l[14]||(l[14]=e.createElementVNode("span",null,"开始节点",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[3]||(l[3]=r=>d(r,"end"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(D)]),_:1}),l[15]||(l[15]=e.createElementVNode("span",null,"结束节点",-1))],32)])]),_:1}),e.createVNode(G,{title:"规则节点",name:"data"},{default:e.withCtx(()=>[e.createElementVNode("div",Vt,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[4]||(l[4]=r=>d(r,"dataSource"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(L)]),_:1}),l[16]||(l[16]=e.createElementVNode("span",null,"数据源",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[5]||(l[5]=r=>d(r,"smallModel"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(p)]),_:1}),l[17]||(l[17]=e.createElementVNode("span",null,"小模型",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[6]||(l[6]=r=>d(r,"detectionTarget"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(S)]),_:1}),l[18]||(l[18]=e.createElementVNode("span",null,"检测目标",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[7]||(l[7]=r=>d(r,"classificationModel"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Grid))]),_:1}),l[19]||(l[19]=e.createElementVNode("span",null,"分类模型",-1))],32)])]),_:1}),e.createVNode(G,{title:"计算节点",name:"calculation"},{default:e.withCtx(()=>[e.createElementVNode("div",Bt,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[8]||(l[8]=r=>d(r,"targetCount"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.DataAnalysis))]),_:1}),l[20]||(l[20]=e.createElementVNode("span",null,"目标计数",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[9]||(l[9]=r=>d(r,"timerTarget"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Timer))]),_:1}),l[21]||(l[21]=e.createElementVNode("span",null,"目标计时",-1))],32)])]),_:1}),e.createVNode(G,{title:"辅助节点",name:"algorithm"},{default:e.withCtx(()=>[e.createElementVNode("div",At,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[10]||(l[10]=r=>d(r,"ocr"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Document))]),_:1}),l[22]||(l[22]=e.createElementVNode("span",null,"OCR识别",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[11]||(l[11]=r=>d(r,"licensePlate"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Document))]),_:1}),l[23]||(l[23]=e.createElementVNode("span",null,"车牌识别",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[12]||(l[12]=r=>d(r,"faceRecognition"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.User))]),_:1}),l[24]||(l[24]=e.createElementVNode("span",null,"人脸识别",-1))],32)])]),_:1})]),_:1},8,["modelValue"])):e.createCommentVNode("",!0)],2)}}},[["__scopeId","data-v-fac9714d"]]);class Te{static backendToFrontend(o){const{id:t,title:d,name:_,inputSchema:l,extraConfig:C}=o,T={id:t,title:d,label:_,type:"DETECTION_TARGET",inputSchema:l,extraConfig:C,data:{targetId:d,targetName:_,description:_,areas:l?.properties?.areas?.default||[],threshold:l?.properties?.threshold?.default||.5,targetWidth:l?.properties?.targetWidth?.default||20,targetHeight:l?.properties?.targetHeight?.default||20,postmodel:l?.properties?.postmodel?.default||"ClipVit",expandRect:l?.properties?.expandRect?.default!==void 0?l.properties.expandRect.default:!1,topScale:l?.properties?.topScale?.default||1.6,bottomScale:l?.properties?.bottomScale?.default||1.6,leftScale:l?.properties?.leftScale?.default||1.6,rightScale:l?.properties?.rightScale?.default||1.6,enableStructure:C?.showStruct!==void 0?!1:void 0}};return Object.keys(T.data).forEach(D=>{T.data[D]===void 0&&delete T.data[D]}),T}}const ie={START_X:80,START_Y:300,H_GAP:240,V_GAP:180},Je=a=>at[a]||a,he=(a,o,t={})=>({id:me(a),type:a,position:{...o},data:{label:t.label||Je(a),...t}}),ke=(a,o,t={})=>{const{sourceHandle:d,..._}=t,l={id:`e_${a}_${o}`,source:a,target:o};return d&&(l.sourceHandle=d),Object.keys(_).length>0&&(l.data=_),l},Lt=a=>{if(!a)return{targets:[],alertConditions:[{operator:">",value:0}],conditionRelation:"AND"};const o=a.rules||[],t=a.logic||"AND";return{targets:[],countType:"conditional_count",conditionRelation:t,alertConditions:o.map(d=>({operator:d.op,value:d.value}))}},Mt=a=>{if(!a)return{duration:30,condition_type:"similarity",similarity_threshold:90,hit_rate_enabled:!1,hit_rate_operator:"gt",hit_rate_threshold:2,overlap_detection:{enabled:!1,operator:"gt",threshold:null},reset_timer:!1};const o={">":"gt",">=":"gte","=":"eq","<=":"lte","<":"lt"};return{duration:a.value??30,condition_type:a.similarity?"similarity":"hit_rate",similarity_enabled:!!a.similarity,similarity_threshold:a.similarity?.value??90,hit_rate_enabled:!!a.hitCount,hit_rate_operator:o[a.hitCount?.op]||"gt",hit_rate_threshold:a.hitCount?.value??2,overlap_detection:a.overlap?{enabled:!0,operator:o[a.overlap.op]||"gt",threshold:a.overlap.value}:{enabled:!1,operator:"gt",threshold:null},reset_timer:!1}},Ot=a=>{if(!a)return{};const o={};return a.interval&&(o.reportFrequency="interval",o.reportInterval=a.interval.value),a.dedup&&(o.enableDeduplication=!0,o.similarityThreshold=a.dedup.value),o},It=()=>({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"]}),Rt=()=>({properties:{needCooperativeDetection:{type:"boolean",title:"是否需要协同检测",default:!1},windowSeconds:{type:"integer",title:"协同检测等待时间(秒)",description:"等待接收数据源下所有摄像机返回图片的最大时长。若超时仍未收齐全部图片,将自动终止本次协同分析",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},enableImageSequence:{type:"boolean",title:"开启图片时序",default:!1}},required:[]}),$t=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,a=>{const o=Math.random()*16|0;return(a==="x"?o:o&3|8).toString(16)}),Ye=()=>{const a=ae(),o=e.inject("editorConfig",null),t=g=>lt[g]||k.DETECTION_TARGET,d=(g,F)=>g?.find(u=>u.id===String(F))??g?.[F],_=(g,F)=>g.streamConfig?(g.children||[]).some(c=>(c.branchRefs||[]).some(b=>d(F.branches,b)))?de.SMALL_MODEL_BRANCH:de.SMALL_MODEL:de.IMAGE_BRANCH,l=g=>!g||typeof g!="object"?"无效的JSON格式":!g.ruleName&&g.ruleName!==""?"缺少 ruleName 字段":g.ruleSchema?.sourceGroups?.length?null:"缺少 ruleSchema.sourceGroups",C=g=>{const F=o?.value??o;return g==="small"?F?.smallModels||[]:g==="detection"?F?.detection||[]:g==="classification"?F?.classification?.models||[]:[]},T=()=>{},D=(g,F)=>{g.modelName=F||"",g.title=F||"",g.modelId=F||null;const w=C("small").find(c=>c.title===F);w&&(g.input_schema=w.inputSchema||w.input_schema||{},g.modelId=w.id||w.title,g.modelName=w.name||F,g.modelType=w.type,g.supportDirectAlert=w.supportDirectAlert||!1,g.extraConfig=w.extraConfig)},G=async(g,F)=>{const u=t(g.toolTitle),w={label:g.nodeName||Je(u),arguments:g.arguments||{},input_schema:{}};switch(u){case k.DETECTION_TARGET:w.targetId=g.toolTitle,w.targetName=g.nodeName||"检测目标";{const b=C("detection").find(q=>q.title===g.toolTitle);if(b){let m=Te.backendToFrontend(b).inputSchema||{};if(g.toolTitle==="other"){const f={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}}};m={...m,properties:{...m.properties,...f.properties}}}w.input_schema=m}}break;case k.CLASSIFICATION_MODEL:w.modelName=g.nodeName||"分类模型";break;case k.SMALL_MODEL:D(w,g.toolTitle);break}return g.branchLogic&&(w.enableBranch=!0,w.branchLogic=g.branchLogic),he(u,F,w)},L=(g,F,u,w)=>{const c={label:"小模型",input_schema:{},arguments:g.arguments||{}};return D(c,g.toolTitle),F===de.SMALL_MODEL_BRANCH&&(c.enableBranch=!0,c.branchLogic=u.logic||"and"),he("smallModel",w,c)},p=async(g,F,u,w,c,b)=>{let q=F,m=w;const f={branchOrder:g.sortOrder??1,branchName:g.branchName||"",branchId:g.id??null};g.sourceHandle&&(f.sourceHandle=g.sourceHandle);const i=g.timeWindowSeconds??g.extraConfig?.timeWindowSeconds;i!==void 0&&(f.timeWindowSeconds=i),g.description&&(f.branchDescription=g.description);const N=[...g.nodes||[]].sort((h,O)=>(h.sortOrder??0)-(O.sortOrder??0)),x=new Set([k.DETECTION_TARGET,k.CLASSIFICATION_MODEL,k.SMALL_MODEL]);let W=-1;N.forEach((h,O)=>{x.has(t(h.toolTitle))&&(W=O)});const A=N.map(h=>({kind:"regular",data:h})),B=g.targetCount??g.extraConfig?.targetCount,$=g.duration??g.extraConfig?.duration,U=[];B&&U.push({kind:"targetCount",data:B}),$&&U.push({kind:"timerTarget",data:$}),U.length>0&&A.splice(W+1,0,...U);for(let h=0;h<A.length;h++){const O=A[h];let j;if(O.kind==="regular")j=await G(O.data,{x:m,y:u});else if(O.kind==="targetCount"){const J=Lt(O.data);j=he("targetCount",{x:m,y:u},{label:"目标计数",arguments:J,input_schema:{targets:{required:!0,type:"array",minLength:1},alertConditions:{required:!1,type:"array"}}})}else{const J=Mt(O.data);j=he("timerTarget",{x:m,y:u},{label:"目标计时",arguments:J,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"}}})}c.push(j),b.push(ke(q,j.id,h===0?f:void 0)),q=j.id,m+=ie.H_GAP}return{lastNodeId:q,endX:m}},S=g=>{const F=g.ruleSchema.sourceGroups||[],u=g.ruleSchema.groupLogic||"and",w=F.length>1;return he("start",{x:ie.START_X,y:ie.START_Y},{label:"开始",algorithmName:g.ruleName||"",enableBranch:w?!0:u!=="and",branchLogic:u,groupWindowSeconds:g.ruleSchema.groupWindowSeconds??null})},V=g=>{const F=Ot(g.extraConfig);return he("end",{x:0,y:ie.START_Y},{label:"结束",input_schema:It(),arguments:{reportFrequency:"always",reportInterval:30,enableDeduplication:!1,similarityThreshold:80,...F}})},r=(g,F)=>[...g||[]].sort((u,w)=>(u.sort??0)-(w.sort??0)).map(u=>{const w=_(u,F),c=[];return(u.children||[]).forEach(b=>{(b.branchRefs||[]).forEach(q=>{const m=d(F.branches,q);m&&c.push(m)})}),c.sort((b,q)=>(b.sortOrder??0)-(q.sortOrder??0)),{sg:u,mode:w,refBranches:c}}),y=g=>{const u=(g.reduce((w,c)=>w+Math.max(c.refBranches.length,1),0)-1)*ie.V_GAP;return ie.START_Y-u/2},s=async(g,F,u,w,c,b)=>{const{sg:q,mode:m,refBranches:f}=g,i=Math.max(f.length,1),N=u+(i-1)*ie.V_GAP/2;let x=ie.START_X+ie.H_GAP,W=ie.START_X;const A=q.logic==="order",B=he("dataSource",{x,y:N},{label:q.name||"数据源",sourceGroupId:q.sourceGroupId??null,enableImageSequence:A,input_schema:Rt(),arguments:{needCooperativeDetection:!!q.synEnabled,windowSeconds:q.windowSeconds||5,enableImageSequence:A},enableBranch:!0,branchLogic:A?"order":q.logic||"and"});w.push(B),c.push(ke(F.id,B.id,{branchOrder:q.sort??null,branchName:q.name||""})),A&&f.forEach((h,O)=>{h.sourceHandle||(h.sourceHandle=O===0?"first-frame":$t())});const $=A?{dataSourceNode:B,refBranches:f}:null;let U=B.id;if(m===de.SMALL_MODEL||m===de.SMALL_MODEL_BRANCH){x+=ie.H_GAP;const h=L(q.streamConfig,m,q,{x,y:N});w.push(h),c.push(ke(B.id,h.id)),U=h.id}if(f.length>0)for(let h=0;h<f.length;h++){const O=u+h*ie.V_GAP,{lastNodeId:j,endX:J}=await p(f[h],U,O,x+ie.H_GAP,w,c);c.push(ke(j,b.id)),J>W&&(W=J)}else{c.push(ke(U,b.id));const h=x+ie.H_GAP;h>W&&(W=h)}return{branchY:u+i*ie.V_GAP,maxX:W,imageSequenceInfo:$}},M=g=>{for(const{dataSourceNode:F,refBranches:u}of g){const w=u.filter(c=>c.sourceHandle&&c.sourceHandle!=="first-frame");w.length>0&&(F.data.subsequentFrames=w.map((c,b)=>({id:b===0?"default-subsequent":`subsequent-${Date.now()}-${b}`,label:b===0?"后续帧检测":`后续帧检测${b+1}`,handleId:c.sourceHandle})))}};return{importFromJSON:async g=>{const F=l(g);if(F)return v.ElMessage.error(F),!1;try{T();const u=[],w=[],c=S(g),b=V(g);u.push(c);const q=r(g.ruleSchema.sourceGroups,g);let m=y(q),f=ie.START_X;const i=[];for(const N of q){const x=await s(N,c,m,u,w,b);m=x.branchY,x.maxX>f&&(f=x.maxX),x.imageSequenceInfo&&i.push(x.imageSequenceInfo)}return b.position.x=f+ie.H_GAP,u.push(b),M(i),a.loadWorkflow(u,w),v.ElMessage.success("导入成功"),!0}catch(u){return v.ElMessage.error("导入失败: "+(u.message||"未知错误")),!1}},validateImportJSON:l}},Ft=()=>{const a=e.inject("echoTaskData",null);e.inject("taskModeConfig",null);const o=e.inject("selectedDevicesMap",null),t=ae(),{importFromJSON:d,validateImportJSON:_}=Ye(),l=(r,y)=>{const s=r.mode??0,M=r.interval??0,P=r.sw_decoding===!1?"GPU":"CPU";let g,F;return y?s===1?(g=2,F=0):s===0&&M===0?(g=3,F=0):(g=1,F=M):s===1?(g=2,F=0):M===0?(g=0,F=30):(g=0,F=M),{mode:g,interval:F,sw_decoding:P}},C=(r,y)=>{const s=r.frameExtractionType??1,M=r.frameInterval??0,g=(r.frameExtractionSourceType??1)===2?"GPU":"CPU";let F,u;return s===0?(F=3,u=0):s===1&&M===0?(F=y?2:0,u=30):s===1?(F=0,u=M):s===2?(F=1,u=M):s===3?(F=2,u=0):(F=y?3:0,u=30),{mode:F,interval:u,sw_decoding:g}},T=r=>r===1?"device":"platform",D=r=>!r||r.enablePolling!==1?{enablePatrol:!1}:{enablePatrol:!0,patrolGroupSize:Number(r.pollingAmount??1)},G=(r,y,s)=>{if(y){const M=r.find(P=>P.sourceGroupId===y);if(M)return M}return r[s]??null},L=(r,y)=>{if(!r?.branches)return null;for(const s of r.branches){const M=s.nodes?.find(P=>P.toolTitle===y);if(M?.arguments)return{...M.arguments}}return null},p=r=>{if(!Array.isArray(r)||r.length===0)return{timeZone:"",planType:0};const y=r.map(M=>({dayType:Number(M.dayType??0),timePeriod:(M.timePeriod??[]).map(P=>({startTime:P.startTime,endTime:P.endTime}))})),s=y.some(M=>M.dayType===0)?1:0;return{timeZone:JSON.stringify({plan:y}),planType:s}},S=async()=>{const r=a?.value??a;if(!r||typeof r!="object"||Object.keys(r).length===0)return;const y=r.graph??{},s=y.sources??[],M=y.extraConfig??{},P=t.nodes.find(c=>c.type===k.START);if(P){const c=r.name??y.workflowName??"",b=!!M.enableVideo,q=M.schedule??[],{timeZone:m,planType:f}=p(q);t.updateNodeData(P.id,{taskName:c,enableAlertVideo:b,schedule:q,timeZone:m,planType:f,...m?{executionTime:m}:{}})}const g=t.nodes.filter(c=>c.type===k.DATA_SOURCE),F=t.nodes.some(c=>c.type===k.SMALL_MODEL);return g.forEach((c,b)=>{const q=c.data?.sourceGroupId??null,m=G(s,q,b);if(!m)return;const f=m.attach??{},i=m.streamConfig?.decoder??null,N=f.deviceType==="1400"?"1400":"camera",x=N==="camera"?i?l(i,F):C(f,F):{},W=N==="camera"?D(f.pollingConfig):{},A=N==="1400"?{detectionMode:T(f.detectionType)}:{},B=c.data?.arguments??{};if(t.updateNodeData(c.id,{arguments:{...B,deviceType:N,...x,...W,...A}}),o){const $=q?s.filter(O=>O.sourceGroupId===q):[],h=($.length>0?$:[m]).map(O=>({sourceId:O.sourceId??"",sourceName:O.sourceName??"",thirdId:O.attach?.thirdId??"",area:O.areas??[],lines:O.lines??[],direction:O.direction??[]}));o.value[c.id]=h}}),t.nodes.filter(c=>c.type===k.DETECTION_TARGET).forEach(c=>{const b=new Set,q=[c.id];let m=null;for(;q.length&&!m;){const B=q.shift();if(b.has(B))continue;b.add(B);const $=t.edges.filter(U=>U.target===B);for(const U of $){const h=t.nodes.find(O=>O.id===U.source);if(h){if(h.type===k.DATA_SOURCE){m=h.id;break}q.push(h.id)}}}if(!m)return;const f=o?.value?.[m]??[];if(f.length<=1)return;const i=c.data?.targetId;if(!i)return;const N=f.map(B=>{const $=String(B.sourceId??B.id??""),U=s.find(h=>String(h.sourceId)===$);if(!U?.branches)return{deviceId:$,args:null};for(const h of U.branches){const O=h.nodes?.find(j=>j.toolTitle===i);if(O?.arguments)return{deviceId:$,args:{...O.arguments}}}return{deviceId:$,args:null}}),x=N.filter(B=>B.args!==null);if(x.length===0)return;const W=JSON.stringify(x[0].args);if(x.some(B=>JSON.stringify(B.args)!==W)){const B=c.data?.arguments??{};t.updateNodeData(c.id,{arguments:{...B,configMode:"perDevice"}}),N.forEach(({deviceId:$,args:U})=>{U&&t.setTaskSourceArguments(m,$,c.id,U)})}}),t.nodes.filter(c=>c.type===k.FACE_RECOGNITION).forEach(c=>{const b=new Set,q=[c.id];let m=null;for(;q.length&&!m;){const B=q.shift();if(b.has(B))continue;b.add(B);const $=t.edges.filter(U=>U.target===B);for(const U of $){const h=t.nodes.find(O=>O.id===U.source);if(h){if(h.type===k.DATA_SOURCE){m=h.id;break}q.push(h.id)}}}const i=(m?t.nodes.find(B=>B.id===m):null)?.data?.sourceGroupId??null,N=g.findIndex(B=>B.id===m),x=G(s,i,N>=0?N:0);if(!x)return;const W=L(x,"face");if(!W?.repositoryId)return;const A=c.data?.arguments??{};t.updateNodeData(c.id,{arguments:{...A,repositoryId:Array.isArray(W.repositoryId)?W.repositoryId:[W.repositoryId]}})}),!0};return{importFromJSON:async r=>{const y=_(r);return y?(v.ElMessage.error(y),!1):await d(r)?(await S(),!0):!1},applyTaskData:S,validateImportJSON:_}},qt=()=>{if(e.inject("editorMode",oe.ALGORITHM)===oe.TASK)return Ft();const{importFromJSON:o,validateImportJSON:t}=Ye();return{importFromJSON:o,validateImportJSON:t,applyTaskData:async()=>{}}},Gt={class:"node-content"},Ht={class:"node-label"},jt=ne({__name:"StartNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return(o,t)=>{const d=e.resolveComponent("VideoPlay"),_=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["start-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"]),e.createElementVNode("div",Gt,[e.createVNode(_,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(d)]),_:1}),e.createElementVNode("span",Ht,e.toDisplayString(a.data.label),1)])],2)}}},[["__scopeId","data-v-9bc41abb"]]),Pt={class:"node-content"},zt={class:"node-label"},Ut=ne({__name:"EndNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return(o,t)=>{const d=e.resolveComponent("CircleClose"),_=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["end-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Pt,[e.createVNode(_,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(d)]),_:1}),e.createElementVNode("span",zt,e.toDisplayString(a.data.label),1)])],2)}}},[["__scopeId","data-v-2a723d0b"]]),Wt={class:"node-content"},Jt={class:"node-info"},Yt={class:"node-label"},Xt={key:1,class:"sequence-handles"},Qt={class:"handle-item"},Kt={class:"handle-label"},Zt={key:0,class:"handle-item add-button-item"},vt=ne({__name:"DataSourceNode",props:{id:{type:String,required:!0},data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=ae(),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,L=>{const p=Math.random()*16|0;return(L==="x"?p:p&3|8).toString(16)}),C=e.computed(()=>!o.data.subsequentFrames&&o.data.enableImageSequence?[{id:"default-subsequent",label:"后续帧检测",handleId:"subsequent-frame"}]:o.data.subsequentFrames||[]);let T=!1;const D=()=>{if(T)return;T=!0;const L=o.data.subsequentFrames||[],p={id:l(),label:`后续帧检测${L.length+1}`,handleId:l()};t.addSubsequentFrame(o.id,p),setTimeout(()=>{T=!1},300)},G=async L=>{const p=o.data.subsequentFrames.find(V=>V.id===L);if(t.edges.some(V=>V.source===o.id&&V.sourceHandle===p.handleId))try{await v.ElMessageBox.confirm(`删除"${p.label}"将同时删除其连接,是否继续?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}t.removeSubsequentFrame(o.id,L)};return(L,p)=>{const S=e.resolveComponent("FolderOpened"),V=e.resolveComponent("el-icon"),r=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["data-source-node",{"sequence-mode":a.data.enableImageSequence,selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Wt,[e.createVNode(V,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(S)]),_:1}),e.createElementVNode("div",Jt,[e.createElementVNode("div",Yt,e.toDisplayString(a.data.label),1)])]),a.data.enableImageSequence?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(ee.Handle),{key:0,type:"source",position:e.unref(ee.Position).Right},null,8,["position"])),a.data.enableImageSequence?(e.openBlock(),e.createElementBlock("div",Xt,[e.createElementVNode("div",Qt,[p[0]||(p[0]=e.createElementVNode("span",{class:"handle-label"},"首帧检测",-1)),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right,id:"first-frame",class:"handle-right"},null,8,["position"])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,y=>(e.openBlock(),e.createElementBlock("div",{key:y.id,class:"handle-item"},[e.createElementVNode("span",Kt,e.toDisplayString(y.label),1),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right,id:y.handleId,class:"handle-right"},null,8,["position","id"]),y.id!=="default-subsequent"&&!_.value?(e.openBlock(),e.createBlock(V,{key:0,class:"delete-icon",onClick:e.withModifiers(s=>G(y.id),["stop"])},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Close))]),_:1},8,["onClick"])):e.createCommentVNode("",!0)]))),128)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Zt,[e.createVNode(r,{size:"small",type:"primary",icon:e.unref(Q.Plus),circle:"",onClick:e.withModifiers(D,["stop"])},null,8,["icon"])]))])):e.createCommentVNode("",!0)],2)}}},[["__scopeId","data-v-7df8ef65"]]),eo={class:"node-content"},to={class:"node-info"},oo={class:"node-label"},no={key:0,class:"node-model"},ao={key:1,class:"node-placeholder"},lo={key:0,class:"direct-alert-badge"},ro=ne({__name:"SmallModelNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return(o,t)=>{const d=e.resolveComponent("Cpu"),_=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["small-model-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",eo,[e.createVNode(_,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(d)]),_:1}),e.createElementVNode("div",to,[e.createElementVNode("div",oo,e.toDisplayString(a.data.label),1),a.data.modelName?(e.openBlock(),e.createElementBlock("div",no,e.toDisplayString(a.data.modelName),1)):(e.openBlock(),e.createElementBlock("div",ao,"未选择模型"))])]),a.data.supportDirectAlert?(e.openBlock(),e.createElementBlock("div",lo,[e.createVNode(_,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Warning))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-e278c903"]]),so={class:"node-content"},io={class:"node-info"},co={class:"node-target"},mo={class:"node-params"},po=ne({__name:"DetectionTargetNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=()=>o.data.targetName||o.data.label||"检测目标",d=e.computed(()=>o.data.targetId==="other"?!1:o.data.arguments?.threshold!==void 0&&typeof o.data.arguments.threshold=="number"),_=e.computed(()=>{if(o.data.targetId==="other"&&o.data.arguments?.object){const l=o.data.arguments.object;if(Array.isArray(l))return l.filter(T=>T&&T.trim()!=="").length}return null});return(l,C)=>{const T=e.resolveComponent("View"),D=e.resolveComponent("el-icon"),G=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["detection-target-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",so,[e.createVNode(D,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(T)]),_:1}),e.createElementVNode("div",io,[C[1]||(C[1]=e.createElementVNode("div",{class:"node-label"},"检测目标",-1)),e.createElementVNode("div",co,e.toDisplayString(t()),1),e.createElementVNode("div",mo,[_.value?(e.openBlock(),e.createBlock(G,{key:0,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.value)+"个目标 ",1)]),_:1})):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createBlock(G,{key:1,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments?.threshold),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.targetHeight&&a.data.arguments?.targetWidth?(e.openBlock(),e.createBlock(G,{key:2,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 尺寸: "+e.toDisplayString(a.data.arguments.targetWidth)+"x"+e.toDisplayString(a.data.arguments.targetHeight),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.enableStructure?(e.openBlock(),e.createBlock(G,{key:3,size:"small",type:"warning"},{default:e.withCtx(()=>[...C[0]||(C[0]=[e.createTextVNode(" 结构化 ",-1)])]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-9a7ce2ec"]]),uo={class:"node-content"},fo={class:"node-info"},go={class:"node-label"},ho={key:0,class:"node-model"},yo={key:1,class:"node-placeholder"},_o={key:2,class:"node-stats"},No=ne({__name:"ClassificationModelNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return(o,t)=>{const d=e.resolveComponent("Grid"),_=e.resolveComponent("el-icon"),l=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["classification-model-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",uo,[e.createVNode(_,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(d)]),_:1}),e.createElementVNode("div",fo,[e.createElementVNode("div",go,e.toDisplayString(a.data.label),1),a.data.arguments?.modelName?(e.openBlock(),e.createElementBlock("div",ho,e.toDisplayString(a.data.arguments.modelName),1)):(e.openBlock(),e.createElementBlock("div",yo,"未选择模型")),a.data.arguments?.modelName?(e.openBlock(),e.createElementBlock("div",_o,[a.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(l,{key:0,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.categories?.length>0?(e.openBlock(),e.createBlock(l,{key:1,size:"small",type:"warning"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.data.arguments.categories.length)+" 类 ",1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.topK?(e.openBlock(),e.createBlock(l,{key:2,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" Top-"+e.toDisplayString(a.data.arguments.topK),1)]),_:1})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-0af49326"]]),Co={class:"node-content"},ko={class:"node-info"},bo={class:"node-label"},xo={class:"node-params"},Eo=ne({__name:"OCRNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return ae(),(o,t)=>{const d=e.resolveComponent("el-icon"),_=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ocr-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Co,[e.createVNode(d,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Document))]),_:1}),e.createElementVNode("div",ko,[e.createElementVNode("div",bo,e.toDisplayString(a.data.label),1),e.createElementVNode("div",xo,[a.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(_,{key:0,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-79c5c0a1"]]),wo={class:"node-content"},To={class:"node-info"},So={class:"node-label"},Vo={class:"node-scope"},Bo={class:"node-params"},Ao=ne({__name:"LicensePlateNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=ae(),d=()=>{const _=o.data.arguments?.detectionScope;if(!_)return"";const l=t.nodes.find(C=>C.id===_);return l?l.data.label:"检测范围"};return(_,l)=>{const C=e.resolveComponent("Document"),T=e.resolveComponent("el-icon"),D=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["license-plate-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",wo,[e.createVNode(T,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(C)]),_:1}),e.createElementVNode("div",To,[e.createElementVNode("div",So,e.toDisplayString(a.data.label),1),e.createElementVNode("div",Vo,e.toDisplayString(d()),1),e.createElementVNode("div",Bo,[a.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(D,{key:0,size:"small",type:"primary"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.minPlateWidth!==void 0&&a.data.arguments?.minPlateHeight!==void 0?(e.openBlock(),e.createBlock(D,{key:1,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 最小尺寸: "+e.toDisplayString(a.data.arguments.minPlateWidth)+"×"+e.toDisplayString(a.data.arguments.minPlateHeight)+"px ",1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-6d767970"]]),Do={class:"node-content"},Lo={class:"node-info"},Mo={class:"node-params"},Oo=ne({__name:"TargetCountNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t={"=":"=","!=":"≠",">":">","<":"<",">=":"≥","<=":"≤"},d=e.computed(()=>{const _=o.data.arguments?.alertConditions||[];if(_.length===0)return"";if(_.length===1){const C=_[0];return`数量 ${t[C.operator]||C.operator} ${C.value}`}const l=o.data.arguments?.conditionRelation||"OR";return`${_.length} 个条件(${l})`});return(_,l)=>{const C=e.resolveComponent("el-icon"),T=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["target-count-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Do,[e.createVNode(C,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.DataAnalysis))]),_:1}),e.createElementVNode("div",Lo,[l[0]||(l[0]=e.createElementVNode("div",{class:"node-label"},"目标计数",-1)),e.createElementVNode("div",Mo,[d.value?(e.openBlock(),e.createBlock(T,{key:0,size:"small",type:"warning"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-18949ab9"]]),Io={class:"node-content"},Ro={class:"node-info"},$o={class:"node-label"},Fo={class:"node-params"},qo=ne({__name:"TimerTargetNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=e.computed(()=>o.data.description||"目标计时"),d=e.computed(()=>`${o.data.arguments?.duration||30}秒`),_=e.computed(()=>{const l=o.data.arguments?.condition_type;return l==="similarity"?`相似度 ${o.data.arguments?.similarity_threshold||90}%`:l==="hit_rate"?`命中率 ${o.data.arguments?.hit_rate_threshold||80}%`:""});return(l,C)=>{const T=e.resolveComponent("el-icon"),D=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["timer-target-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Io,[e.createVNode(T,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Timer))]),_:1}),e.createElementVNode("div",Ro,[e.createElementVNode("div",$o,e.toDisplayString(t.value),1),e.createElementVNode("div",Fo,[e.createVNode(D,{size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),_:1}),_.value?(e.openBlock(),e.createBlock(D,{key:0,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.value),1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-44ea79f7"]]),Go={class:"group-label"},Ho=ne({__name:"GroupNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t={and:"ALL",or:"SOME"},d=e.computed(()=>t[o.data.branchLogic]??"ALL"),_=e.computed(()=>o.data.branchLogic==="or"?"warning":"primary"),l={width:"8px",height:"8px",borderRadius:"2px"},C={borderColor:"var(--aiflow-color-brand-primary)",borderStyle:"dashed"};return(T,D)=>{const G=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["group-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"]),e.createElementVNode("div",Go,[e.createVNode(G,{type:_.value,size:"small",effect:"dark"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),_:1},8,["type"]),D[0]||(D[0]=e.createElementVNode("span",null,"并行组",-1))]),e.createVNode(e.unref(nt.NodeResizer),{"min-width":200,"min-height":100,"handle-style":l,"line-style":C})],2)}}},[["__scopeId","data-v-adf6607d"]]),jo={class:"node-content"},Po={class:"node-info"},zo={class:"node-label"},Uo={class:"node-scope"},Wo={class:"node-params"},Jo=ne({__name:"FaceRecognitionNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=ae(),d=()=>{const _=o.data.arguments?.detectionScope;if(!_)return"";const l=t.nodes.find(C=>C.id===_);return l?l.data.label:"检测范围"};return(_,l)=>{const C=e.resolveComponent("el-icon"),T=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["face-recognition-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",jo,[e.createVNode(C,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.User))]),_:1}),e.createElementVNode("div",Po,[e.createElementVNode("div",zo,e.toDisplayString(a.data.label),1),e.createElementVNode("div",Uo,e.toDisplayString(d()),1),e.createElementVNode("div",Wo,[a.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(T,{key:0,size:"small",type:"primary"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.minFaceWidth!==void 0&&a.data.arguments?.minFaceHeight!==void 0?(e.openBlock(),e.createBlock(T,{key:1,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 最小尺寸: "+e.toDisplayString(a.data.arguments.minFaceWidth)+"×"+e.toDisplayString(a.data.arguments.minFaceHeight)+"px ",1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-cedaa1a2"]]),Yo={class:"quick-add-menu__list"},Xo=["onClick"],Qo={class:"quick-add-menu__icon"},Ko={class:"quick-add-menu__label"},Zo={key:0,class:"quick-add-menu__empty"},fe=8,vo=ne({__name:"NodeQuickAddMenu",props:{visible:{type:Boolean,default:!1},position:{type:Object,default:()=>({x:0,y:0})},sourceNodeType:{type:String,default:""}},emits:["select","close"],setup(a){const o=a,t=e.ref(null),d=e.ref({x:0,y:0});e.watch(()=>o.visible,async T=>{if(!T||(d.value={x:o.position.x,y:o.position.y},await e.nextTick(),!t.value))return;const D=t.value.getBoundingClientRect(),G=window.innerWidth,L=window.innerHeight;let{x:p,y:S}=o.position;p+D.width>G-fe&&(p=G-D.width-fe),S+D.height>L-fe&&(S=L-D.height-fe),p<fe&&(p=fe),S<fe&&(S=fe),d.value={x:p,y:S}});const _=e.computed(()=>({left:d.value.x+"px",top:d.value.y+"px"})),l=[{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:"🏁"}],C=e.computed(()=>{switch(o.sourceNodeType){case"start":return l.filter(T=>T.type==="dataSource");case"dataSource":return l.filter(T=>T.type==="smallModel"||T.type==="detectionTarget"||T.type==="classificationModel");case"smallModel":return l.filter(T=>T.type!=="dataSource"&&T.type!=="smallModel"&&T.type!=="targetCount"&&T.type!=="timerTarget");case"detectionTarget":case"classificationModel":return l.filter(T=>T.type!=="dataSource"&&T.type!=="smallModel");case"timerTarget":return l.filter(T=>["ocr","faceRecognition","licensePlate","end"].includes(T.type));case"targetCount":return l.filter(T=>["timerTarget","ocr","faceRecognition","licensePlate","end"].includes(T.type));case"ocr":return l.filter(T=>["licensePlate","faceRecognition","end"].includes(T.type));case"licensePlate":return l.filter(T=>["ocr","faceRecognition","end"].includes(T.type));case"faceRecognition":return l.filter(T=>["ocr","licensePlate","end"].includes(T.type));default:return[]}});return(T,D)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.visible?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuRef",ref:t,class:"quick-add-menu",style:e.normalizeStyle(_.value)},[D[1]||(D[1]=e.createElementVNode("div",{class:"quick-add-menu__header"},"添加节点",-1)),e.createElementVNode("ul",Yo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,G=>(e.openBlock(),e.createElementBlock("li",{key:G.type,class:"quick-add-menu__item",onClick:L=>T.$emit("select",G.type)},[e.createElementVNode("span",Qo,e.toDisplayString(G.icon),1),e.createElementVNode("span",Ko,e.toDisplayString(G.label),1)],8,Xo))),128)),C.value.length===0?(e.openBlock(),e.createElementBlock("li",Zo," 无可连接节点 ")):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),a.visible?(e.openBlock(),e.createElementBlock("div",{key:1,class:"quick-add-menu__overlay",onClick:D[0]||(D[0]=G=>T.$emit("close"))})):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-05a5ee6d"]]),en={class:"workflow-canvas"},Xe=5,tn=ne({__name:"WorkflowCanvas",setup(a){const o=ae(),{screenToFlowCoordinate:t,findNode:d,onConnectStart:_,onConnectEnd:l}=ee.useVueFlow(),C=e.inject("editorConfig",null),T=e.inject("editorMode",oe.ALGORITHM),D=e.computed(()=>T===oe.TASK),G=e.inject("echoAlgodata",null),L=e.inject("echoTaskData",null),{importFromJSON:p,applyTaskData:S}=qt();e.watch(G,async n=>{if(n&&Object.keys(n).length>0){await e.nextTick();const E=n.graph??n;if(await p(E),D.value){const H=E?.ruleSchema?.sourceGroups??[];let Y=null;if(H.some(z=>z.streamConfig)?Y="stream":(H.length>1||H.some(z=>(z.children??[]).length>1))&&(Y="image"),Y){const z=o.nodes.find(X=>X.type===k.START);z&&o.updateNodeData(z.id,{streamType:Y})}await S()}}},{immediate:!0}),e.watch(L,async n=>{D.value&&(!n||typeof n!="object"||Object.keys(n).length===0||o.nodes.length!==0&&await S())},{immediate:!1});const V=(n,E)=>{if(!E?.properties)return n;const H={};return Object.entries(E.properties).forEach(([Y,z])=>{z.default!==void 0&&(H[Y]=z.default)}),n.data.arguments={...H,...n.data.arguments},n},r=e.reactive({visible:!1,screenPos:{x:0,y:0},sourceNodeId:null,sourceNodeType:null,sourceHandleId:null,flowPos:{x:0,y:0}}),y=()=>{r.visible=!1,r.sourceNodeId=null,r.sourceNodeType=null,r.sourceHandleId=null,F=!1};let s=null,M=!1,P=null,g=null,F=!1;const u=()=>{P&&(document.removeEventListener("mousemove",P),P=null),g&&(document.removeEventListener("mouseup",g),g=null)};e.onUnmounted(()=>{u()}),_(({nodeId:n,handleId:E,handleType:H,event:Y})=>{if(H!=="source")return;if(D.value){v.ElMessage.warning("算法任务模式下不允许添加连接线");return}const z=o.nodes.find(K=>K.id===n);if(!z||z.type==="end")return;if(z.type===k.DATA_SOURCE&&z.data?.enableImageSequence){if(E&&o.edges.filter(re=>re.source===n&&re.sourceHandle===E).length>=1)return}else if(z.type!==k.START&&z.type!==k.DATA_SOURCE&&o.edges.filter(re=>re.source===n).length>=1)return;const X=Y?.target;let te=0,le=0;if(X){const K=X.getBoundingClientRect();te=K.right+12,le=K.top-8}s={nodeId:n,sourceNodeType:z.type,handleId:E,menuX:te,menuY:le,flowPos:{...z.position}},M=!1;const pe=Y?.clientX??0,I=Y?.clientY??0;u(),P=K=>{(Math.abs(K.clientX-pe)>Xe||Math.abs(K.clientY-I)>Xe)&&(M=!0,u())},g=()=>{if(u(),!M&&s){F=!0;const K=s;r.visible=!0,r.screenPos={x:K.menuX,y:K.menuY},r.sourceNodeId=K.nodeId,r.sourceNodeType=K.sourceNodeType,r.sourceHandleId=K.handleId,r.flowPos=K.flowPos}s=null},document.addEventListener("mousemove",P),document.addEventListener("mouseup",g)});const w=n=>{const E=r.sourceNodeId,H=o.nodes.find(ce=>ce.id===E);if(!H){y();return}if(D.value){v.ElMessage.warning("算法任务模式下不允许添加节点"),y();return}const Y=H.position.x+250,z=H.position.y;let X={x:Y,y:z};const te=60,le=80;let pe=0,I=!0;for(;I;){I=!1;const ce=z+pe;for(const ge of o.nodes)if(Math.abs(ge.position.x-Y)<100&&Math.abs(ge.position.y-ce)<te+20){I=!0,pe+=le;break}}if(X.y=z+pe,n==="end"){const ce=o.nodes.find(ge=>ge.type==="end");if(ce){if(o.edges.some(xe=>xe.source===E&&xe.target===ce.id)){v.ElMessage.warning("已经连接到结束节点"),y();return}const _e=b(H,ce);if(!_e.valid){v.ElMessage.warning(_e.message),y();return}o.addConnection({source:E,target:ce.id,sourceHandle:r.sourceHandleId||null,targetHandle:null}),B(),y(),v.ElMessage.success("已连接到结束节点");return}}let K;switch(n){case"end":K=Ee(X);break;case"dataSource":K=we(X);break;case"smallModel":K=De(X);break;case"detectionTarget":K=Le(X);break;case"classificationModel":K=Me(X);break;case"ocr":{const ce=C?.value??C;K=V(Oe(X),ce?.ocr?.[0]?.inputSchema);break}case"licensePlate":{const ce=C?.value??C;K=V(Ie(X),ce?.license_plate?.[0]?.inputSchema);break}case"faceRecognition":{const ce=C?.value??C;K=V(Fe(X),ce?.face?.faceParams?.[0]?.inputSchema);break}case"targetCount":K=Re(X);break;case"timerTarget":K=$e(X);break;default:y();return}const re=b(H,K);if(!re.valid){v.ElMessage.warning(re.message),y();return}o.addNode(K),o.addConnection({source:E,target:K.id,sourceHandle:r.sourceHandleId||null,targetHandle:null}),B(),y(),v.ElMessage.success(`已添加${K.data.label}并连接`)},c=["smallModel","detectionTarget","classificationModel","ocr","licensePlate","faceRecognition","targetCount","timerTarget"],b=(n,E)=>{if(n?.parentNode&&E?.type!=="group")return{valid:!1,message:"组内节点不能直接连接到外部节点,请通过并行组的连接点连线"};if(E?.parentNode&&n?.type!=="group")return{valid:!1,message:"外部节点不能直接连接到组内节点,请通过并行组的连接点连线"};if(n?.type===k.START){if(E?.type!==k.DATA_SOURCE)return{valid:!1,message:"开始节点只能连接数据源节点"};if(o.edges.filter(z=>z.source===n.id).some(z=>o.nodes.find(te=>te.id===z.target)?.data?.enableImageSequence===!0))return{valid:!1,message:"已有数据源节点开启了图片时序,不能再连接其他数据源节点"}}if(E?.type===k.SMALL_MODEL){if(n?.type!==k.DATA_SOURCE)return{valid:!1,message:"小模型节点的上游节点只能是数据源节点"};if(o.edges.filter(X=>X.source===n.id).some(X=>o.nodes.find(le=>le.id===X.target)?.type!==k.SMALL_MODEL))return{valid:!1,message:"小模型节点只能出现在单分支场景中。数据源节点已有其他连接,不能再连接小模型节点"}}if(n?.type===k.DATA_SOURCE){if(E?.type!==k.SMALL_MODEL&&E?.type!==k.DETECTION_TARGET&&E?.type!==k.CLASSIFICATION_MODEL)return{valid:!1,message:"数据源节点的下游节点只能是小模型节点、检测目标节点或分类模型节点"};if(o.edges.filter(X=>X.source===n.id).some(X=>o.nodes.find(le=>le.id===X.target)?.type===k.SMALL_MODEL))return{valid:!1,message:"数据源节点已连接小模型节点(单分支场景),不能再连接其他节点"}}if(n?.type===k.SMALL_MODEL&&(E?.type===k.TARGET_COUNT||E?.type===k.TIMER_TARGET))return{valid:!1,message:"小模型节点不能直接连接目标计数或目标计时节点,请先连接检测目标节点"};if(n?.type===k.TARGET_COUNT&&![k.TIMER_TARGET,k.OCR,k.FACE_RECOGNITION,k.LICENSE_PLATE,k.END].includes(E?.type))return{valid:!1,message:"目标计数节点只能连接目标计时、辅助节点或结束节点"};if(n?.type===k.TIMER_TARGET&&![k.OCR,k.FACE_RECOGNITION,k.LICENSE_PLATE,k.END].includes(E?.type))return{valid:!1,message:"目标计时节点只能连接辅助节点或结束节点"};const H=[k.OCR,k.LICENSE_PLATE,k.FACE_RECOGNITION];return H.includes(n?.type)&&!H.filter(z=>z!==n.type).concat(k.END).includes(E?.type)?{valid:!1,message:"辅助节点只能连接除自身外的辅助节点或结束节点"}:E?.type!==k.END&&o.edges.filter(z=>z.target===E?.id).length>=1?{valid:!1,message:"该节点已有入口连接,该节点只允许有一条入口边"}:{valid:!0}},q=e.markRaw({start:jt,end:Ut,dataSource:vt,smallModel:ro,detectionTarget:po,classificationModel:No,ocr:Eo,licensePlate:Ao,targetCount:Oo,timerTarget:qo,group:Ho,faceRecognition:Jo}),m=e.computed({get:()=>o.nodes,set:n=>{o.nodes=n}}),f=e.computed({get:()=>o.edges,set:n=>{o.edges=n}}),i=n=>{n.forEach(E=>{if(E.type==="position"&&E.position)o.updateNodePosition(E.id,E.position);else if(E.type==="remove"){if(D.value){v.ElMessage.warning("算法任务模式下不允许删除节点");return}const H=o.nodes.find(z=>z.id===E.id);if(H&&H.type===k.START){v.ElMessage.warning("开始节点不可删除");return}if(H&&H.type===k.END){v.ElMessage.warning("结束节点不可删除");return}if(H&&H.type==="group"){v.ElMessage.warning('并行组不可手动删除,请关闭对应节点的"开启分支"选项');return}const Y=H?.parentNode;o.removeNode(E.id),Y&&o.nodes.filter(X=>X.parentNode===Y).length===0&&o.dissolveParallelGroup(Y)}})},N=n=>{n.forEach(E=>{if(E.type==="remove"){if(D.value){v.ElMessage.warning("算法任务模式下不允许删除连接线");return}o.removeEdge(E.id)}})},x=n=>{if(F)return;if(D.value){v.ElMessage.warning("算法任务模式下不允许添加连接线"),y();return}const E=o.nodes.find(z=>z.id===n.source),H=o.nodes.find(z=>z.id===n.target),Y=b(E,H);if(!Y.valid){v.ElMessage.warning(Y.message),y();return}if(E?.type===k.DATA_SOURCE&&E.data.enableImageSequence&&n.sourceHandle&&o.edges.filter(X=>X.source===n.source&&X.sourceHandle===n.sourceHandle).length>=1){const X=n.sourceHandle==="first-frame"?"首帧检测":"后续帧检测";v.ElMessage.warning(`${X}连接点只能连接一个节点`);return}if(c.includes(E?.type)&&!E.data.enableBranch&&o.edges.filter(X=>X.source===n.source).length>=1){v.ElMessage.warning("该节点只能连接一个节点。");return}o.addConnection(n),B(),y()},W=n=>({and:"ALL",or:"SOME"})[n]||"ALL",A=n=>{const E=o.nodes.find(H=>H.id===n.source);if(!E)return"";if(E.type===k.START){const H=E.data.branchLogic||"and",Y=W(H),z=n.data?.branchOrder;return z!=null?`${Y} - 执行顺序 ${z}`:Y}if(E.type===k.DATA_SOURCE){if(E.data?.enableImageSequence){const X=n.sourceHandle==="first-frame"?"首帧":"后续帧",te=n.data?.branchOrder;return te!=null?`${X} - 执行顺序 ${te}`:X}const H=E.data.branchLogic||"and",Y=W(H),z=n.data?.branchOrder;return z!=null?`${Y} - 执行顺序 ${z}`:Y}return""},B=()=>{o.edges.forEach(n=>{const E=A(n);n.label!==E&&(n.label=E,n.labelStyle=E?{fill:"#fff",fontWeight:600,fontSize:"11px"}:void 0,n.labelBgStyle=E?{fill:"var(--aiflow-color-brand-primary)",rx:4,ry:4}:void 0,n.labelBgPadding=E?[4,6]:void 0)})},$=()=>{o.nodes.forEach(n=>{if(n.type!=="group")return;const E=n.data.sourceNodeId;if(!E)return;const H=o.nodes.find(Y=>Y.id===E);H?.data?.enableBranch&&H.data.branchLogic!==n.data.branchLogic&&o.updateNodeData(n.id,{branchLogic:H.data.branchLogic||"and"})})};e.watch(()=>o.nodes.filter(n=>c.includes(n.type)).map(n=>({id:n.id,enableBranch:n.data.enableBranch,branchLogic:n.data.branchLogic})),(n,E)=>{E&&n.forEach(H=>{const Y=E.find(z=>z.id===H.id);if(Y){if(H.enableBranch&&!Y.enableBranch){const z=o.nodes.find(X=>X.id===H.id);if(!z)return;o.createEmptyGroup({x:z.position.x+200,y:z.position.y-30},z.data.branchLogic||"and",H.id)}else if(!H.enableBranch&&Y.enableBranch){const z=o.nodes.find(X=>X.type==="group"&&X.data.sourceNodeId===H.id);z&&o.dissolveParallelGroup(z.id)}if(H.enableBranch&&Y.branchLogic!==H.branchLogic){const z=o.nodes.find(X=>X.type==="group"&&X.data.sourceNodeId===H.id);z&&o.updateNodeData(z.id,{branchLogic:H.branchLogic})}}})}),e.watch(()=>o.nodes.filter(n=>n.type!=="group").map(n=>({id:n.id,enableBranch:n.data.enableBranch,branchLogic:n.data.branchLogic,branchOrder:n.data.branchOrder})),()=>{B(),$()},{deep:!0}),e.watch(()=>o.edges.map(n=>({id:n.id,branchOrder:n.data?.branchOrder})),(n,E)=>{B(),E&&n.forEach(H=>{const Y=E.find(z=>z.id===H.id);if(Y&&Y.branchOrder!==H.branchOrder&&H.branchOrder!==void 0){const z=o.edges.find(X=>X.id===H.id);if(z){const X=o.nodes.find(te=>te.id===z.source);X&&X.type===k.DATA_SOURCE&&o.updateNodePosition(X.id,{x:X.position.x,y:X.position.y-.001})}}})},{deep:!0}),e.watch(()=>[o.invalidNodeIds,o.invalidEdgeIds],([n,E])=>{o.nodes.forEach(H=>{n.has(H.id)?H.class="invalid-node":H.class==="invalid-node"&&(H.class="")}),o.edges.forEach(H=>{E.has(H.id)?H.class="invalid-edge":H.class==="invalid-edge"&&(H.class="")})},{deep:!0});const U=n=>{n.event?.target?.closest(".vue-flow__handle")||o.selectNode(n.node.id)},h=n=>{o.selectEdge(n.edge.id)},O=n=>{if(D.value){v.ElMessage.warning("算法任务模式下不允许删除连接线");return}o.removeEdge(n.edge.id)},j=()=>{o.clearSelection()},J=({node:n})=>{if(n.type==="group"||!c.includes(n.type))return;const E=o.nodes.filter(Y=>Y.type==="group");let H=null;for(const Y of E){const z=d(Y.id);if(!z)continue;const X=z.dimensions?.width||parseInt(Y.style?.width)||300,te=z.dimensions?.height||parseInt(Y.style?.height)||160;let le=n.position.x,pe=n.position.y;if(n.parentNode){const _e=o.nodes.find(xe=>xe.id===n.parentNode);_e&&(le+=_e.position.x,pe+=_e.position.y)}const I=d(n.id),K=I?.dimensions?.width||160,re=I?.dimensions?.height||60,ce=le+K/2,ge=pe+re/2;if(ce>=Y.position.x&&ce<=Y.position.x+X&&ge>=Y.position.y&&ge<=Y.position.y+te){H=Y.id;break}}H?n.parentNode!==H&&o.addNodeToGroup(n.id,H):n.parentNode&&o.removeNodeFromGroup(n.id)},Z=n=>{n.preventDefault(),n.dataTransfer&&(n.dataTransfer.dropEffect="move")},R=n=>{n.preventDefault();const E=n.dataTransfer?.getData("application/vueflow");if(!E)return;if(D.value){v.ElMessage.warning("算法任务模式下不允许添加节点");return}if(E===k.START&&o.getNodeCountByType(k.START)>=1){v.ElMessage.warning("工作流只能有一个开始节点");return}if(E===k.END&&o.getNodeCountByType(k.END)>=1){v.ElMessage.warning("工作流只能有一个结束节点");return}const H=160,Y=60,z=t({x:n.clientX,y:n.clientY}),X={x:z.x-H/2,y:z.y-Y/2};let te;switch(E){case k.START:te=Ae(X);break;case k.END:te=Ee(X);break;case k.DATA_SOURCE:te=we(X);break;case k.SMALL_MODEL:te=De(X);break;case k.DETECTION_TARGET:te=Le(X);break;case k.CLASSIFICATION_MODEL:te=Me(X);break;case k.OCR:{const le=C?.value??C;te=V(Oe(X),le?.ocr?.[0]?.inputSchema);break}case k.LICENSE_PLATE:{const le=C?.value??C;te=V(Ie(X),le?.license_plate?.[0]?.inputSchema);break}case k.TARGET_COUNT:te=Re(X);break;case k.TIMER_TARGET:te=$e(X);break;case k.FACE_RECOGNITION:{const le=C?.value??C;te=V(Fe(X),le?.face?.faceParams?.[0]?.inputSchema);break}default:return}o.addNode(te),v.ElMessage.success("节点已添加")};return(n,E)=>(e.openBlock(),e.createElementBlock("div",en,[e.createVNode(e.unref(ee.VueFlow),{nodes:m.value,"onUpdate:nodes":E[0]||(E[0]=H=>m.value=H),edges:f.value,"onUpdate:edges":E[1]||(E[1]=H=>f.value=H),"node-types":e.unref(q),onNodesChange:i,onEdgesChange:N,onConnect:x,onNodeClick:U,onEdgeClick:h,onEdgeDoubleClick:O,onPaneClick:j,onDrop:R,onDragover:Z,onNodeDragStop:J,"snap-to-grid":!0,"snap-grid":[15,15],"default-zoom":1,"min-zoom":.2,"max-zoom":4},{default:e.withCtx(()=>[e.createVNode(e.unref(tt.Background),{"pattern-color":"#aaa",gap:16,variant:"dots"}),e.createVNode(e.unref(ot.Controls))]),_:1},8,["nodes","edges","node-types"]),e.createVNode(vo,{visible:r.visible,position:r.screenPos,"source-node-type":r.sourceNodeType,onSelect:w,onClose:y},null,8,["visible","position","source-node-type"])]))}},[["__scopeId","data-v-cf0301e9"]]),on={class:"config-header"},nn={key:0,class:"config-section"},an={key:1,class:"config-section"},ln=ne({__name:"EdgeConfig",setup(a){const o=ae(),t=e.inject("editorMode",oe.ALGORITHM),d=e.computed(()=>t===oe.TASK),_=e.computed(()=>{const L=o.selectedEdge;return L&&o.nodes.find(S=>S.id===L.source)?.data?.enableBranch?L:null}),l=e.computed(()=>_.value&&o.nodes.find(p=>p.id===_.value.source)?.type==="start"?"多数据源分支配置":"分支配置"),C=e.computed(()=>{if(!_.value)return!1;const L=o.nodes.find(p=>p.id===_.value.source);return(L?.type==="dataSource"||L?.type==="start")&&L?.data?.enableBranch}),T=e.computed(()=>{if(!_.value)return 1;const L=o.nodes.find(p=>p.id===_.value.source);return L?o.edges.filter(p=>p.source===L.id).length:1}),D=e.computed(()=>{if(!_.value)return!1;const L=o.nodes.find(p=>p.id===_.value.source);return L?L.type==="dataSource"&&L.data?.enableImageSequence===!0&&_.value.sourceHandle!=="first-frame":!1}),G=L=>{_.value&&o.updateEdgeData(_.value.id,L)};return(L,p)=>{const S=e.resolveComponent("el-divider"),V=e.resolveComponent("el-input-number"),r=e.resolveComponent("el-text"),y=e.resolveComponent("el-form-item"),s=e.resolveComponent("el-form"),M=e.resolveComponent("el-option"),P=e.resolveComponent("el-select");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",on,[e.createElementVNode("h3",null,e.toDisplayString(l.value),1)]),e.createVNode(S),D.value?(e.openBlock(),e.createElementBlock("div",nn,[p[3]||(p[3]=e.createElementVNode("h4",null,"后续检测帧的持续时间",-1)),e.createVNode(s,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(y,{label:"后续检测帧的持续时间(秒)",required:""},{default:e.withCtx(()=>[e.createVNode(V,{"model-value":_.value?.data?.timeWindowSeconds??null,onChange:p[0]||(p[0]=g=>G({timeWindowSeconds:g})),min:1,precision:0,style:{width:"100%"},"controls-position":"right",placeholder:"请输入持续时间"},null,8,["model-value"]),e.createVNode(r,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...p[2]||(p[2]=[e.createTextVNode(" 后续帧检测需要持续的时间(必填) ",-1)])]),_:1})]),_:1})]),_:1})])):e.createCommentVNode("",!0),C.value?(e.openBlock(),e.createElementBlock("div",an,[p[5]||(p[5]=e.createElementVNode("h4",null,"分支顺序",-1)),e.createVNode(s,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(y,{label:"执行顺序"},{default:e.withCtx(()=>[e.createVNode(P,{"model-value":_.value?.data?.branchOrder??null,disabled:d.value,onChange:p[1]||(p[1]=g=>G({branchOrder:g})),style:{width:"100%"},placeholder:"请选择执行顺序",clearable:""},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,g=>(e.openBlock(),e.createBlock(M,{key:g,label:`执行顺序 ${g}`,value:g},null,8,["label","value"]))),128))]),_:1},8,["model-value","disabled"]),e.createVNode(r,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createTextVNode(" 系统会根据连接顺序自动分配执行顺序,数字越小越先执行。可手动调整顺序 ",-1)])]),_:1})]),_:1})]),_:1})])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-61177f45"]]),rn={class:"config-section"},sn=ne({__name:"GroupNodeConfig",setup(a){return(o,t)=>{const d=e.resolveComponent("el-divider"),_=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(d),e.createElementVNode("div",rn,[e.createVNode(_,{type:"info",size:"small"},{default:e.withCtx(()=>[...t[0]||(t[0]=[e.createTextVNode("并行组由系统自动管理,断开连接后自动解散。",-1)])]),_:1})])])}}},[["__scopeId","data-v-60b47589"]]),cn={class:"time-init-container"},dn={key:0,class:"time-header flex-x-start"},mn={class:"tab-type flex-x"},pn={class:"time-content"},un={id:"time-content-table-body"},fn=["onClick"],gn=["onClick"],hn=["data-sort","data-value","data-day","data-type","onMousedown"],yn={key:1},_n=["data-sort","data-value","data-type","onMousedown"],Nn={class:"time-list"},Cn={key:0,class:"time-list-title"},kn={key:1,style:{"margin-right":"10px"}},bn=ne({__name:"TimeInit",props:{operationType:{type:Number,default:1}},setup(a,{expose:o}){const t=a,d=e.ref(0);let _,l,C,T,D;const G=e.ref(new Map),L=e.ref(new Map),p=e.computed(()=>d.value===0?G.value:L.value);e.onMounted(()=>{_=document.querySelector("#time-content-table-body"),l=_.querySelectorAll("td.sel-able[data-type]"),t.operationType!=3&&document.body.addEventListener("mouseup",s)}),e.onBeforeUnmount(()=>{t.operationType!=3&&document.body.removeEventListener("mouseup",s)});const S=i=>{d.value!==i&&(d.value=i,e.nextTick(()=>{l=_.querySelectorAll("td.sel-able[data-type]"),l.forEach(x=>x.classList.remove("selected")),(i===0?G.value:L.value).forEach((x,W)=>{x.origin.forEach(A=>{Array.from(l).forEach(B=>{Number(B.dataset.sort)==A.sort&&Number(B.dataset.value)==A.value&&Number(B.dataset.day)==W&&B.classList.add("selected")})})})}))},V=e.ref([{name:"每日",value:0},{name:"一",value:1},{name:"二",value:2},{name:"三",value:3},{name:"四",value:4},{name:"五",value:5},{name:"六",value:6},{name:"日",value:7}]),r=(i,N,x)=>{t.operationType!=3&&x.which==1&&(T=i,C=Number(x.target.dataset.value),x.target.classList.contains("selected")?(x.target.classList.remove("selected"),D=""):(D="selected",x.target.classList.add("selected")),y(),u())},y=()=>{l.forEach(i=>{i.addEventListener("mouseover",M,!1,{once:!0})})},s=()=>{l.forEach(i=>{i.removeEventListener("mouseover",M)})},M=i=>{i.target.classList.remove("selected"),D&&i.target.classList.add(D);let N=Number(i.target.dataset.value),x=Number(i.target.dataset.day),W=x>T?x:T,A=x<T?x:T,B=N>C?N:C,$=N<C?N:C;for(let U=A;U<=W;U++)for(let h=$;h<=B;h++){let O=document.querySelector(`td[data-value="${h}"][data-day="${U}"]`);O.classList.remove("selected"),D&&O.classList.add(D)}u()},P=i=>{if(t.operationType==3)return;let N=[];l.forEach(x=>{Number(x.dataset.day)==i&&N.push(x)}),N.find(x=>!x.classList.contains("selected"))?N.forEach(x=>x.classList.add("selected")):N.forEach(x=>x.classList.remove("selected")),u()},g=i=>{if(t.operationType==3)return;let N=[];l.forEach(x=>{Number(x.dataset.sort)==i&&N.push(x)}),N.find(x=>!x.classList.contains("selected"))?N.forEach(x=>x.classList.add("selected")):N.forEach(x=>x.classList.remove("selected")),u()},F=()=>{l.forEach(N=>{N.classList.remove("selected")}),(d.value===0?G:L).value.clear()},u=()=>{const i=d.value===0?G:L;i.value.clear(),l.forEach(N=>{if(N.classList.contains("selected")){let x=N.dataset.day,W=N.dataset.sort,A=N.dataset.value;i.value.get(x)?i.value.get(x).origin.push({sort:Number(W),value:Number(A)}):i.value.set(x,{origin:[{sort:Number(W),value:Number(A)}],timeList:[]})}})},w=i=>{let W=p.value.get(i).origin.map(A=>A.value).reduce((A,B,$,U)=>($==0?A.push([B]):B==U[$-1]+1?A[A.length-1].push(B):A.push([B]),A),[]);return W=W.map(A=>{let B=Math.max(...A)+1,$=Math.min(...A)+1,U=$%2==0?30:0,h=B%2==0?0:30,O=c(Math.ceil($/2)-1),j=c(Math.ceil(B/2)-(h==0?0:1));return{dayType:i,startTime:O+":"+(U==0?"00":U),endTime:j+":"+(h==0?"00":h)}}),p.value.get(i).timeList=W,W.map(A=>A.startTime+"-"+A.endTime).join()};function c(i){return i<10?"0"+i:i}const b=(i,N)=>{G.value.clear(),L.value.clear(),l.forEach(B=>B.classList.remove("selected")),d.value=N;const x=N===0?G:L,W=JSON.parse(i);let A=[];W.plan.forEach(B=>{B.timePeriod.forEach($=>{A.push({...$,dayType:B.dayType})})}),e.nextTick(()=>{l=_.querySelectorAll("td.sel-able[data-type]"),A.forEach(B=>{x.value.get(B.dayType)?x.value.get(B.dayType).timeList.push(B):x.value.set(B.dayType,{origin:[],timeList:[{...B}]})}),x.value.forEach((B,$)=>{B.timeList.forEach(U=>{let h=Number(U.startTime.split(":")[1]),O=Number(U.endTime.split(":")[1]),j=Number(U.startTime.split(":")[0]),J=Number(U.endTime.split(":")[0]);if(j==J){B.origin.push({sort:j,value:2*j});return}for(let Z=j;Z<=J;Z++)if(Z==j)h==0?(B.origin.push({sort:Z,value:2*Z}),B.origin.push({sort:Z,value:2*Z+1})):B.origin.push({sort:Z,value:2*Z+1});else if(Z>j&&Z<J)B.origin.push({sort:Z,value:2*Z}),B.origin.push({sort:Z,value:2*Z+1});else if(O==0){if(Z==J)return;B.origin.push({sort:Z,value:2*Z}),B.origin.push({sort:Z,value:2*Z+1})}else B.origin.push({sort:Z,value:2*Z})}),B.origin.forEach(U=>{Array.from(l).find(h=>{Number(h.dataset.sort)==U.sort&&Number(h.dataset.value)==U.value&&Number(h.dataset.day)==$&&h.classList.add("selected")})})})})},q=(i,N)=>i.map(A=>A.value).sort((A,B)=>A-B).reduce((A,B,$,U)=>($==0?A.push([B]):B==U[$-1]+1?A[A.length-1].push(B):A.push([B]),A),[]).map(A=>{let B=Math.max(...A)+1,$=Math.min(...A)+1,U=$%2==0?30:0,h=B%2==0?0:30,O=c(Math.ceil($/2)-1),j=c(Math.ceil(B/2)-(h==0?0:1));return{dayType:N,startTime:O+":"+(U==0?"00":U),endTime:j+":"+(h==0?"00":h)}});return o({getTimeData:()=>{(d.value===0?L:G).value.clear();let N=[];p.value.forEach((A,B)=>{const $=q(A.origin,B);N=N.concat($)});let x={plan:[]},W=N.map(A=>A.dayType).filter((A,B,$)=>$.indexOf(A)===B);return W.length?(W.forEach(A=>{x.plan.push({dayType:A,timePeriod:N.filter(B=>B.dayType===A).map(B=>({startTime:B.startTime,endTime:B.endTime}))})}),{validTime:!0,timeZone:JSON.stringify(x),planType:d.value}):{validTime:!1}},revertByTime:b,resetFn:()=>{d.value=0,G.value.clear(),L.value.clear(),e.nextTick(()=>{l.forEach(i=>{i.classList.remove("selected")}),l=_.querySelectorAll("td.sel-able[data-type]")})}}),(i,N)=>{const x=e.resolveComponent("el-icon"),W=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",cn,[a.operationType!=3?(e.openBlock(),e.createElementBlock("div",dn,[e.createElementVNode("div",mn,[e.createElementVNode("div",{class:e.normalizeClass(["type",{active:d.value==0}]),onClick:N[0]||(N[0]=A=>S(0))}," 周计划 ",2),e.createElementVNode("div",{class:e.normalizeClass(["type",{active:d.value==1}]),onClick:N[1]||(N[1]=A=>S(1))}," 日计划 ",2)]),e.createVNode(W,{class:"rm-icon",link:"",type:"danger",onClick:F},{default:e.withCtx(()=>[e.createVNode(x,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Delete))]),_:1})]),_:1})])):e.createCommentVNode("",!0),e.createElementVNode("div",pn,[e.createElementVNode("table",{class:"time-content-table",onContextmenu:N[3]||(N[3]=A=>A.preventDefault())},[N[5]||(N[5]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th"),e.createElementVNode("th",{colspan:"24"},"上午"),e.createElementVNode("th",{colspan:"24"},"下午")])],-1)),e.createElementVNode("tbody",un,[e.createElementVNode("tr",null,[N[4]||(N[4]=e.createElementVNode("th",null,null,-1)),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(24,A=>e.createElementVNode("td",{class:"sel-able",colspan:"2",onClick:B=>g(A-1)},e.toDisplayString(A-1),9,fn)),64))]),d.value==0?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(V.value.filter(A=>A.value!=0),A=>(e.openBlock(),e.createElementBlock("tr",null,[e.createElementVNode("th",{onClick:B=>P(A.value)},e.toDisplayString(A.name),9,gn),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(48,B=>e.createElementVNode("td",{class:"sel-able","data-sort":parseInt((B-1)/2),"data-value":B-1,"data-day":A.value,"data-type":d.value,onMousedown:$=>r(A.value,B,$)},null,40,hn)),64))]))),256)):e.createCommentVNode("",!0),d.value==1?(e.openBlock(),e.createElementBlock("tr",yn,[e.createElementVNode("th",{onClick:N[2]||(N[2]=A=>P(0))},"每日"),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(48,A=>e.createElementVNode("td",{class:"sel-able","data-sort":parseInt((A-1)/2),"data-value":A-1,"data-day":0,"data-type":d.value,onMousedown:B=>r(0,A,B)},null,40,_n)),64))])):e.createCommentVNode("",!0)])],32)]),e.createElementVNode("div",Nn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value.keys(),A=>(e.openBlock(),e.createElementBlock("div",null,[d.value==0?(e.openBlock(),e.createElementBlock("span",Cn,[N[6]||(N[6]=e.createElementVNode("span",null,"星期",-1)),e.createTextVNode(" "+e.toDisplayString(V.value.find(B=>B.value==A).name),1)])):(e.openBlock(),e.createElementBlock("span",kn,e.toDisplayString(V.value.find(B=>B.value==A).name),1)),e.createTextVNode(" ("+e.toDisplayString(w(A))+") ",1)]))),256))])])}}},[["__scopeId","data-v-fd17fb3f"]]),xn={class:"time-template-dialog"},En={class:"time-editor-panel"},wn=ne({__name:"TimeTemplateDialog",props:{modelValue:{type:Object,default:()=>({timeTemplateId:"",timeTemplateName:"",schedule:[]})}},emits:["update:modelValue"],setup(a,{expose:o,emit:t}){const d=a,_=t,l=e.ref(null),C=e.ref(""),T=e.ref(""),D=e.ref(d.modelValue?.timeTemplateName||""),G=e.ref([]);return e.computed(()=>C.value?G.value.filter(S=>S.name.toLowerCase().includes(C.value.toLowerCase())):G.value),e.watch(D,S=>{_("update:modelValue",{...d.modelValue,timeTemplateName:S})}),o({getFormData:()=>{const S=l.value?.getTimeData();return{timeTemplateId:T.value,timeTemplateName:D.value,...S}},revertByTime:(S,V)=>{l.value?.revertByTime(S,V)}}),(S,V)=>(e.resolveComponent("el-icon"),e.resolveComponent("el-input"),e.resolveComponent("el-button"),e.resolveComponent("el-form-item"),e.resolveComponent("el-form"),e.openBlock(),e.createElementBlock("div",xn,[e.createCommentVNode("",!0),e.createElementVNode("div",En,[e.createCommentVNode("",!0),e.createVNode(bn,{ref_key:"timeInitRef",ref:l},null,512)])]))}},[["__scopeId","data-v-a39aee75"]]),Tn={class:"config-section"},Sn={key:0,class:"config-section"},Vn={key:0,style:{"font-size":"12px",color:"var(--el-color-info)","margin-top":"4px"}},Bn={class:"config-section"},An=ne({__name:"StartNodeConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=e.inject("echoAlgodata",null),C=e.computed(()=>{const V=l?.value??l,y=(V?.graph??V)?.ruleSchema?.sourceGroups??[];if(y.some(P=>P.streamConfig))return{value:"stream",locked:!0,reason:"算法含小模型节点,固定为视频流"};const s=y.length>1,M=y.some(P=>(P.children??[]).length>1);return s||M?{value:"image",locked:!0,reason:"算法含多数据源或多分支,固定为图片流"}:{value:null,locked:!1,reason:""}});e.watch(C,V=>{V.locked&&t.value&&o.updateNodeData(t.value.id,{streamType:V.value})},{immediate:!0});const T=e.ref(!1),D=e.ref(null),G=()=>{const V=D.value?.getFormData();if(V?.validTime){const y=(JSON.parse(V.timeZone)?.plan??[]).map(s=>({dayType:String(s.dayType),timePeriod:s.timePeriod.map(M=>({startTime:M.startTime,endTime:M.endTime}))}));o.updateNodeData(t.value.id,{executionTime:V.timeZone,schedule:y,timeZone:V.timeZone,planType:V.planType??0})}else o.updateNodeData(t.value.id,{executionTime:"",schedule:[],timeZone:"",planType:0});T.value=!1},L=()=>{const V=t.value?.data;V?.timeZone&&D.value?.revertByTime(V.timeZone,V.planType??0)},p=e.computed(()=>t.value?o.edges.filter(r=>r.source===t.value.id).length>=2:!1),S=V=>{t.value&&o.updateNodeData(t.value.id,{algorithmName:V})};return(V,r)=>{const y=e.resolveComponent("el-divider"),s=e.resolveComponent("el-input"),M=e.resolveComponent("el-form-item"),P=e.resolveComponent("el-form"),g=e.resolveComponent("el-option"),F=e.resolveComponent("el-select"),u=e.resolveComponent("el-switch"),w=e.resolveComponent("el-button"),c=e.resolveComponent("el-dialog"),b=e.resolveComponent("el-icon"),q=e.resolveComponent("el-tooltip"),m=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",null,[r[15]||(r[15]=e.createElementVNode("div",{class:"config-header"},[e.createElementVNode("h3",null,"节点配置")],-1)),e.createVNode(y),e.createElementVNode("div",Tn,[r[9]||(r[9]=e.createElementVNode("h4",null,"算法信息",-1)),e.createVNode(P,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(M,{label:"算法名称",required:""},{default:e.withCtx(()=>[e.createVNode(s,{"model-value":t.value?.data.algorithmName,disabled:_.value,onInput:r[0]||(r[0]=f=>S(f)),placeholder:"请输入算法名称",maxlength:"50","show-word-limit":""},null,8,["model-value","disabled"])]),_:1})]),_:1})]),_.value?(e.openBlock(),e.createElementBlock("div",Sn,[r[10]||(r[10]=e.createElementVNode("h4",null,"任务信息",-1)),e.createVNode(P,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(M,{label:"任务名称",required:""},{default:e.withCtx(()=>[e.createVNode(s,{"model-value":t.value?.data.taskName,onInput:r[1]||(r[1]=f=>e.unref(o).updateNodeData(t.value.id,{taskName:f})),placeholder:"请输入任务名称",maxlength:"50","show-word-limit":""},null,8,["model-value"])]),_:1}),e.createVNode(M,{label:"任务数据流"},{default:e.withCtx(()=>[e.createVNode(F,{"model-value":C.value.locked?C.value.value:t.value?.data.streamType||"image",disabled:C.value.locked,onChange:r[2]||(r[2]=f=>e.unref(o).updateNodeData(t.value.id,{streamType:f})),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(g,{label:"图片流",value:"image"}),e.createVNode(g,{label:"视频流",value:"stream"})]),_:1},8,["model-value","disabled"]),C.value.locked?(e.openBlock(),e.createElementBlock("div",Vn,e.toDisplayString(C.value.reason),1)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(M,{label:"开启告警短视频"},{default:e.withCtx(()=>[e.createVNode(u,{"model-value":t.value?.data.enableAlertVideo,onChange:r[3]||(r[3]=f=>e.unref(o).updateNodeData(t.value.id,{enableAlertVideo:f}))},null,8,["model-value"])]),_:1}),e.createVNode(M,{label:"任务执行时间",required:""},{default:e.withCtx(()=>[e.createVNode(s,{"model-value":t.value?.data.timeZone?"已设置执行时段":"请选择执行时段",readonly:"",onClick:r[4]||(r[4]=f=>T.value=!0),style:{cursor:"pointer"}},null,8,["model-value"])]),_:1})]),_:1})])):e.createCommentVNode("",!0),e.createVNode(c,{modelValue:T.value,"onUpdate:modelValue":r[6]||(r[6]=f=>T.value=f),title:"执行时段",width:"1200px","append-to-body":"",onOpened:L},{footer:e.withCtx(()=>[e.createVNode(w,{onClick:r[5]||(r[5]=f=>T.value=!1)},{default:e.withCtx(()=>[...r[11]||(r[11]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(w,{type:"primary",onClick:G},{default:e.withCtx(()=>[...r[12]||(r[12]=[e.createTextVNode("确认",-1)])]),_:1})]),default:e.withCtx(()=>[e.createVNode(wn,{ref_key:"timeTemplateRef",ref:D},null,512)]),_:1},8,["modelValue"]),e.createElementVNode("div",Bn,[r[14]||(r[14]=e.createElementVNode("h4",null,"多数据源配置",-1)),e.createVNode(P,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(M,{label:"多数据源关系"},{default:e.withCtx(()=>[e.createVNode(F,{"model-value":t.value?.data.branchLogic||"and",disabled:_.value,onChange:r[7]||(r[7]=f=>e.unref(o).updateNodeData(t.value.id,{branchLogic:f})),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(g,{label:"ALL(满足所有数据源)",value:"and"}),e.createVNode(g,{label:"SOME(满足至少一个数据源)",value:"or"})]),_:1},8,["model-value","disabled"])]),_:1}),p.value?(e.openBlock(),e.createBlock(M,{key:0},{label:e.withCtx(()=>[r[13]||(r[13]=e.createElementVNode("span",null,"多数据协同检测等待时间(秒)",-1)),e.createVNode(q,{content:"等待接收多数据源下所有摄像机返回图片的最大时长。若超时仍未收齐全部图片,将自动终止本次协同分析",placement:"top"},{default:e.withCtx(()=>[e.createVNode(b,{style:{"margin-left":"4px",color:"var(--aiflow-color-text-tertiary)",cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(m,{"model-value":t.value?.data.groupWindowSeconds??5,onChange:r[8]||(r[8]=f=>e.unref(o).updateNodeData(t.value.id,{groupWindowSeconds:f})),min:1,max:3600,step:1,style:{width:"100%"}},null,8,["model-value"])]),_:1})):e.createCommentVNode("",!0)]),_:1})])])}}},[["__scopeId","data-v-40d5bdc3"]]),Dn={detectionTarget:"detection",classificationModel:"classification",ocr:"ocr",face:"face",faceRecognition:"face",licensePlate:"licensePlate",dataSource:"stream",smallModel:"small",end:"end"},Ln=["smallModel","detectionTarget"],Se=()=>({schemaLoading:e.ref(!1),getToolType:l=>Dn[l]||null,needsToolSelection:l=>Ln.includes(l),fetchToolSchema:async(l,C="")=>(console.warn("fetchToolSchema is deprecated, use editorConfig instead"),null),fetchSchemaForNodeType:async(l,C="")=>(console.warn("fetchSchemaForNodeType is deprecated, use editorConfig instead"),null)}),Mn={key:0,class:"config-section"},On={key:3,class:"array-input"},In={key:1,class:"config-section"},Rn=ne({__name:"EndNodeConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),{schemaLoading:d,fetchSchemaForNodeType:_}=Se(),l=e.computed(()=>{if(!t.value)return[];const p=t.value.data.input_schema||t.value.data.inputSchema;if(!p||!p.properties)return[];const S=p.required||[];return Object.entries(p.properties).map(([V,r])=>({key:V,type:r.type,label:r.title||r.label||r.description||V,description:r.description||"",default:r.default,required:S.includes(V)||r.required||!1,min:r.minimum!==void 0?r.minimum:r.min,max:r.maximum!==void 0?r.maximum:r.max,step:r.step,maxLength:r.maxLength,options:r.enum,optionLabels:r.enumLabels||r.enum,dependsOn:r.dependsOn}))}),C=p=>{if(t.value)return t.value.data.arguments?.[p]},T=(p,S)=>{if(!t.value)return;const r={...t.value.data.arguments||{},[p]:S};o.updateNodeData(t.value.id,{arguments:r})},D=p=>{if(!p.dependsOn||!t.value)return!0;const{field:S,value:V}=p.dependsOn,r=C(S);if(typeof V=="string"&&V.startsWith("!")){const y=V.substring(1);return r!==y}return Array.isArray(V)?V.includes(r):r===V},G=p=>{const S=C(p);return Array.isArray(S)?JSON.stringify(S):""},L=(p,S)=>{try{const V=JSON.parse(S);Array.isArray(V)&&T(p,V)}catch{}};return e.watch(()=>t.value?.id,async p=>{if(!p||!t.value)return;const S=t.value.type,V=t.value.data,r=V.input_schema||V.inputSchema;if(r&&r.properties&&Object.keys(r.properties).length>0)return;const y=await _(S);if(!y)return;const s=t.value?.data;s&&o.updateNodeData(t.value.id,{...s,input_schema:y.inputSchema,extraConfig:y.extraConfig,arguments:{...y.arguments,...s.arguments}})},{immediate:!0}),(p,S)=>{const V=e.resolveComponent("el-divider"),r=e.resolveComponent("el-icon"),y=e.resolveComponent("el-tooltip"),s=e.resolveComponent("el-option"),M=e.resolveComponent("el-select"),P=e.resolveComponent("el-switch"),g=e.resolveComponent("el-input-number"),F=e.resolveComponent("el-input"),u=e.resolveComponent("el-form-item"),w=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[S[2]||(S[2]=e.createElementVNode("div",{class:"config-header"},[e.createElementVNode("h3",null,"节点配置")],-1)),e.createVNode(V),l.value.length>0?(e.openBlock(),e.createElementBlock("div",Mn,[S[0]||(S[0]=e.createElementVNode("h4",null,"告警上报配置",-1)),e.createVNode(w,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,c=>e.withDirectives((e.openBlock(),e.createBlock(u,{key:c.key,required:c.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(c.label),1),c.description?(e.openBlock(),e.createBlock(y,{key:0,content:c.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(r,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[c.options&&c.type==="string"?(e.openBlock(),e.createBlock(M,{key:0,"model-value":C(c.key),onChange:b=>T(c.key,b),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.options,(b,q)=>(e.openBlock(),e.createBlock(s,{key:b,label:c.optionLabels?c.optionLabels[q]:b,value:b},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):c.type==="boolean"?(e.openBlock(),e.createBlock(P,{key:1,"model-value":C(c.key),onChange:b=>T(c.key,b)},null,8,["model-value","onChange"])):c.type==="number"||c.type==="integer"?(e.openBlock(),e.createBlock(g,{key:2,"model-value":C(c.key),onChange:b=>T(c.key,b),min:c.min,max:c.max,step:c.step||(c.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):c.type==="array"&&!c.options?(e.openBlock(),e.createElementBlock("div",On,[e.createVNode(F,{"model-value":G(c.key),onChange:b=>L(c.key,b),type:"textarea",rows:3,placeholder:c.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):c.type==="array"&&c.options?(e.openBlock(),e.createBlock(M,{key:4,"model-value":C(c.key),onChange:b=>T(c.key,b),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.options,(b,q)=>(e.openBlock(),e.createBlock(s,{key:b,label:c.optionLabels?c.optionLabels[q]:b,value:b},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(F,{key:5,"model-value":C(c.key),onInput:b=>T(c.key,b),maxlength:c.maxLength,"show-word-limit":!!c.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!c.dependsOn||D(c)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.unref(d)&&l.value.length===0?(e.openBlock(),e.createElementBlock("div",In,[...S[1]||(S[1]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--aiflow-color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-8a2e6388"]]),$n={class:"config-header"},Fn={class:"config-section"},qn={key:0,style:{"margin-top":"8px",color:"var(--el-text-color-secondary)","font-size":"12px"}},Gn={key:0,class:"config-section"},Hn={key:3,class:"array-input"},jn={key:1,class:"config-section"},Pn={key:2,class:"config-section"},zn=ne({__name:"ClassificationModelConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.classification?.models??[]),T=e.computed(()=>(l?.value??l)?.classification?.modelParams??null),D=e.ref([]),G=e.ref(!1),L=e.computed({get:()=>t.value?.data.arguments?.modelId||null,set:u=>{t.value&&u&&s("modelId",u)}}),p=()=>{D.value=C.value},S=async u=>{if(!t.value||!u)return;const w=D.value.find(m=>m.id===u);if(!w)return;const c=t.value?.data;if(!c)return;const b=w.inputSchema||w.input_schema||T.value?.inputSchema||{},q={};b.properties&&Object.entries(b.properties).forEach(([m,f])=>{f.default!==void 0&&(q[m]=f.default)}),o.updateNodeData(t.value.id,{...c,input_schema:b,extraConfig:w.extraConfig||null,arguments:{...q,modelId:w.id,modelName:w.name}})},V=()=>{t.value&&o.updateNodeData(t.value.id,{arguments:{},input_schema:{},extraConfig:null})},r=e.computed(()=>{if(!t.value)return[];const u=t.value.data.input_schema||t.value.data.inputSchema;if(!u||!u.properties)return[];const w=u.required||[];return Object.entries(u.properties).map(([c,b])=>({key:c,type:b.type,label:b.title||b.label||b.description||c,description:b.description||"",default:b.default,required:w.includes(c)||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,hidden:b["x-hidden"]||!1})).filter(c=>!c.hidden).sort((c,b)=>(c.sort??1/0)-(b.sort??1/0))}),y=u=>{if(t.value)return t.value.data.arguments?.[u]},s=(u,w)=>{if(!t.value)return;const b={...t.value.data.arguments||{},[u]:w};o.updateNodeData(t.value.id,{arguments:b})},M=u=>{if(!u.dependsOn||!t.value)return!0;const{field:w,value:c}=u.dependsOn,b=y(w);if(typeof c=="string"&&c.startsWith("!")){const q=c.substring(1);return b!==q}return Array.isArray(c)?c.includes(b):b===c},P=u=>{const w=y(u);return Array.isArray(w)?JSON.stringify(w):""},g=(u,w)=>{try{const c=JSON.parse(w);Array.isArray(c)&&s(u,c)}catch{}},F=()=>{t.value&&v.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;D.value.length===0&&p();const w=t.value.data,c=w.input_schema||w.inputSchema,b=w.arguments?.modelId;if(b&&c&&c.properties&&Object.keys(c.properties).length>0||!b)return;const q=D.value.find(N=>N.id===b);if(!q)return;const m=q.inputSchema||q.input_schema||T.value?.inputSchema||{},f={};m.properties&&Object.entries(m.properties).forEach(([N,x])=>{x.default!==void 0&&(f[N]=x.default)});const i=t.value?.data;i&&o.updateNodeData(t.value.id,{...i,input_schema:m,extraConfig:q.extraConfig||null,arguments:{...f,...i.arguments}})},{immediate:!0}),(u,w)=>{const c=e.resolveComponent("el-button"),b=e.resolveComponent("el-divider"),q=e.resolveComponent("el-option"),m=e.resolveComponent("el-select"),f=e.resolveComponent("el-form-item"),i=e.resolveComponent("el-form"),N=e.resolveComponent("el-icon"),x=e.resolveComponent("el-tooltip"),W=e.resolveComponent("el-switch"),A=e.resolveComponent("el-input-number"),B=e.resolveComponent("el-input");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",$n,[w[1]||(w[1]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(c,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:F},null,8,["icon"]))]),e.createVNode(b),e.createElementVNode("div",Fn,[w[2]||(w[2]=e.createElementVNode("h4",null,"选择模型",-1)),e.createVNode(i,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(f,{label:"模型",required:""},{default:e.withCtx(()=>[e.createVNode(m,{modelValue:L.value,"onUpdate:modelValue":w[0]||(w[0]=$=>L.value=$),filterable:"",clearable:"",placeholder:"请选择模型",style:{width:"100%"},loading:G.value,disabled:_.value,onChange:S,onClear:V},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,$=>(e.openBlock(),e.createBlock(q,{key:$.id,label:$.name,value:$.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading","disabled"]),D.value.length===0&&!G.value?(e.openBlock(),e.createElementBlock("div",qn," 暂无可用模型 ")):e.createCommentVNode("",!0)]),_:1})]),_:1})]),L.value&&r.value.length>0?(e.openBlock(),e.createElementBlock("div",Gn,[w[3]||(w[3]=e.createElementVNode("h4",null,"分类模型参数",-1)),e.createVNode(i,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,$=>e.withDirectives((e.openBlock(),e.createBlock(f,{key:$.key,required:$.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString($.label),1),$.description?(e.openBlock(),e.createBlock(x,{key:0,content:$.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(N,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[$.options&&$.type==="string"?(e.openBlock(),e.createBlock(m,{key:0,"model-value":y($.key),disabled:_.value&&$.key!=="threshold",onChange:U=>s($.key,U),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.options,(U,h)=>(e.openBlock(),e.createBlock(q,{key:U,label:$.optionLabels?$.optionLabels[h]:U,value:U},null,8,["label","value"]))),128))]),_:2},1032,["model-value","disabled","onChange"])):$.type==="boolean"?(e.openBlock(),e.createBlock(W,{key:1,"model-value":y($.key),disabled:_.value&&$.key!=="threshold",onChange:U=>s($.key,U)},null,8,["model-value","disabled","onChange"])):$.type==="number"||$.type==="integer"?(e.openBlock(),e.createBlock(A,{key:2,"model-value":y($.key),disabled:_.value&&$.key!=="threshold",onChange:U=>s($.key,U),min:$.min,max:$.max,step:$.step||($.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","disabled","onChange","min","max","step"])):$.type==="array"&&!$.options?(e.openBlock(),e.createElementBlock("div",Hn,[e.createVNode(B,{"model-value":P($.key),disabled:_.value&&$.key!=="threshold",onChange:U=>g($.key,U),type:"textarea",rows:3,placeholder:$.description||"输入JSON数组"},null,8,["model-value","disabled","onChange","placeholder"])])):$.type==="array"&&$.options?(e.openBlock(),e.createBlock(m,{key:4,"model-value":y($.key),disabled:_.value&&$.key!=="threshold",onChange:U=>s($.key,U),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.options,(U,h)=>(e.openBlock(),e.createBlock(q,{key:U,label:$.optionLabels?$.optionLabels[h]:U,value:U},null,8,["label","value"]))),128))]),_:2},1032,["model-value","disabled","onChange"])):(e.openBlock(),e.createBlock(B,{key:5,"model-value":y($.key),disabled:_.value&&$.key!=="threshold",onInput:U=>s($.key,U),maxlength:$.maxLength,"show-word-limit":!!$.maxLength},null,8,["model-value","disabled","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!$.dependsOn||M($)]])),128))]),_:1})])):e.createCommentVNode("",!0),L.value&&G.value&&r.value.length===0?(e.openBlock(),e.createElementBlock("div",jn,[...w[4]||(w[4]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--aiflow-color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0),!L.value&&!G.value?(e.openBlock(),e.createElementBlock("div",Pn,[...w[5]||(w[5]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--aiflow-color-text-secondary)"}}," 请先选择模型 ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-5103b9a3"]]),Un={class:"config-header"},Wn={class:"config-section"},Jn=ne({__name:"OcrConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.ocr?.[0]?.inputSchema??null),T=e.computed(()=>t.value?.data.arguments?.threshold??.5),D=(L,p)=>{if(!t.value)return;const S=t.value.data.arguments||{};o.updateNodeData(t.value.id,{arguments:{...S,[L]:p}})},G=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,L=>{if(!L||!t.value)return;const p=C.value,S=t.value.data.arguments||{},V={};p?.properties&&Object.entries(p.properties).forEach(([r,y])=>{y.default!==void 0&&(V[r]=y.default)}),o.updateNodeData(t.value.id,{arguments:{...V,...S}})},{immediate:!0}),(L,p)=>{const S=e.resolveComponent("el-button"),V=e.resolveComponent("el-divider"),r=e.resolveComponent("el-input-number"),y=e.resolveComponent("el-form-item"),s=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Un,[p[1]||(p[1]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(S,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:G},null,8,["icon"]))]),e.createVNode(V),e.createElementVNode("div",Wn,[p[2]||(p[2]=e.createElementVNode("h4",null,"OCR识别参数",-1)),e.createVNode(s,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(y,{label:"检测阈值"},{default:e.withCtx(()=>[e.createVNode(r,{"model-value":T.value,onChange:p[0]||(p[0]=M=>D("threshold",M)),min:0,max:1,step:.01,precision:2,style:{width:"100%"}},null,8,["model-value"])]),_:1})]),_:1})])])}}},[["__scopeId","data-v-583b9f13"]]),Yn={class:"config-header"},Xn={class:"config-section"},Qn=ne({__name:"LicensePlateConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.license_plate?.[0]?.inputSchema??null),T=e.computed(()=>t.value?.data.arguments?.threshold??.5),D=(L,p)=>{if(!t.value)return;const S=t.value.data.arguments||{};o.updateNodeData(t.value.id,{arguments:{...S,[L]:p}})},G=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,L=>{if(!L||!t.value)return;const p=C.value,S=t.value.data.arguments||{},V={};p?.properties&&Object.entries(p.properties).forEach(([r,y])=>{y.default!==void 0&&(V[r]=y.default)}),o.updateNodeData(t.value.id,{arguments:{...V,...S}})},{immediate:!0}),(L,p)=>{const S=e.resolveComponent("el-button"),V=e.resolveComponent("el-divider"),r=e.resolveComponent("el-input-number"),y=e.resolveComponent("el-form-item"),s=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Yn,[p[1]||(p[1]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(S,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:G},null,8,["icon"]))]),e.createVNode(V),e.createElementVNode("div",Xn,[p[2]||(p[2]=e.createElementVNode("h4",null,"车牌识别参数",-1)),e.createVNode(s,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(y,{label:"检测阈值"},{default:e.withCtx(()=>[e.createVNode(r,{"model-value":T.value,onChange:p[0]||(p[0]=M=>D("threshold",M)),min:0,max:1,step:.01,precision:2,style:{width:"100%"}},null,8,["model-value"])]),_:1})]),_:1})])])}}},[["__scopeId","data-v-8c4d3477"]]),Kn={class:"config-header"},Zn={class:"config-section"},vn={key:0,class:"config-section"},Qe=ne({__name:"FaceConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.face?.faceRepos??[]),T=e.ref(null),D=e.computed(()=>({repositoryId:S.value})),G={repositoryId:[{required:!0,message:"请选择人脸库",trigger:"change"}]},L=e.computed(()=>t.value?.data.arguments?.threshold??.5),p=y=>t.value?.data.arguments?.[y],S=e.computed(()=>{const y=p("repositoryId");return y?Array.isArray(y)?y:[y]:[]}),V=(y,s)=>{if(!t.value)return;const M=t.value.data.arguments||{};o.updateNodeData(t.value.id,{arguments:{...M,[y]:s}})},r=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,y=>{if(!y||!t.value)return;const M=(l?.value??l)?.face?.faceParams?.[0]?.inputSchema??null,P=t.value.data.arguments||{},g={};M?.properties&&Object.entries(M.properties).forEach(([F,u])=>{u.default!==void 0&&(g[F]=u.default)}),o.updateNodeData(t.value.id,{arguments:{...g,...P}})},{immediate:!0}),(y,s)=>{const M=e.resolveComponent("el-button"),P=e.resolveComponent("el-divider"),g=e.resolveComponent("el-input-number"),F=e.resolveComponent("el-form-item"),u=e.resolveComponent("el-form"),w=e.resolveComponent("el-option"),c=e.resolveComponent("el-select");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Kn,[s[2]||(s[2]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(M,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:r},null,8,["icon"]))]),e.createVNode(P),e.createElementVNode("div",Zn,[s[3]||(s[3]=e.createElementVNode("h4",null,"人脸识别参数",-1)),e.createVNode(u,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(F,{label:"检测阈值"},{default:e.withCtx(()=>[e.createVNode(g,{"model-value":L.value,onChange:s[0]||(s[0]=b=>V("threshold",b)),min:0,max:1,step:.01,precision:2,style:{width:"100%"}},null,8,["model-value"])]),_:1})]),_:1})]),e.unref(d)==="task"?(e.openBlock(),e.createElementBlock("div",vn,[s[4]||(s[4]=e.createElementVNode("h4",null,"人脸库选择",-1)),e.createVNode(u,{model:D.value,rules:G,ref_key:"faceFormRef",ref:T,"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(F,{label:"人脸库",prop:"repositoryId",required:""},{default:e.withCtx(()=>[e.createVNode(c,{"model-value":S.value,onChange:s[1]||(s[1]=b=>V("repositoryId",b)),placeholder:"请选择人脸库(可多选)",style:{width:"100%"},multiple:"",filterable:"",clearable:"","collapse-tags":"","collapse-tags-tooltip":""},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,b=>(e.openBlock(),e.createBlock(w,{key:b.id,label:b.name,value:b.id},null,8,["label","value"]))),128))]),_:1},8,["model-value"])]),_:1})]),_:1},8,["model"])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-5094495d"]]),ea={class:"config-header"},ta={key:0,class:"config-section"},oa={key:3,class:"array-input"},na={key:1,class:"config-section"},aa=ne({__name:"StreamConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),{schemaLoading:l,fetchSchemaForNodeType:C}=Se(),T=e.computed(()=>{if(!t.value)return[];const r=t.value.data.input_schema||t.value.data.inputSchema;if(!r||!r.properties)return[];const y=r.required||[];return Object.entries(r.properties).map(([s,M])=>({key:s,type:M.type,label:M.title||M.label||M.description||s,description:M.description||"",default:M.default,required:y.includes(s)||M.required||!1,min:M.minimum!==void 0?M.minimum:M.min,max:M.maximum!==void 0?M.maximum:M.max,step:M.step,maxLength:M.maxLength,options:M.enum,optionLabels:M.enumLabels||M.enum,dependsOn:M.dependsOn,sort:M.sort})).sort((s,M)=>(s.sort??1/0)-(M.sort??1/0))}),D=r=>{if(t.value)return t.value.data.arguments?.[r]},G=(r,y)=>{if(!t.value)return;const M={...t.value.data.arguments||{},[r]:y};o.updateNodeData(t.value.id,{arguments:M})},L=r=>{if(!r.dependsOn||!t.value)return!0;const{field:y,value:s}=r.dependsOn,M=D(y);if(typeof s=="string"&&s.startsWith("!")){const P=s.substring(1);return M!==P}return Array.isArray(s)?s.includes(M):M===s},p=r=>{const y=D(r);return Array.isArray(y)?JSON.stringify(y):""},S=(r,y)=>{try{const s=JSON.parse(y);Array.isArray(s)&&G(r,s)}catch{}},V=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async r=>{if(!r||!t.value)return;const y=t.value.type,s=t.value.data,M=s.input_schema||s.inputSchema;if(M&&M.properties&&Object.keys(M.properties).length>0)return;const P=await C(y);if(!P)return;const g=t.value?.data;g&&o.updateNodeData(t.value.id,{...g,input_schema:P.inputSchema,extraConfig:P.extraConfig,arguments:{...P.arguments,...g.arguments}})},{immediate:!0}),(r,y)=>{const s=e.resolveComponent("el-button"),M=e.resolveComponent("el-divider"),P=e.resolveComponent("el-icon"),g=e.resolveComponent("el-tooltip"),F=e.resolveComponent("el-option"),u=e.resolveComponent("el-select"),w=e.resolveComponent("el-switch"),c=e.resolveComponent("el-input-number"),b=e.resolveComponent("el-input"),q=e.resolveComponent("el-form-item"),m=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",ea,[y[0]||(y[0]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(s,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:V},null,8,["icon"]))]),e.createVNode(M),T.value.length>0?(e.openBlock(),e.createElementBlock("div",ta,[y[1]||(y[1]=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,f=>e.withDirectives((e.openBlock(),e.createBlock(q,{key:f.key,required:f.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(f.label),1),f.description?(e.openBlock(),e.createBlock(g,{key:0,content:f.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(P,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[f.options&&f.type==="string"?(e.openBlock(),e.createBlock(u,{key:0,"model-value":D(f.key),onChange:i=>G(f.key,i),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.options,(i,N)=>(e.openBlock(),e.createBlock(F,{key:i,label:f.optionLabels?f.optionLabels[N]:i,value:i},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):f.type==="boolean"?(e.openBlock(),e.createBlock(w,{key:1,"model-value":D(f.key),onChange:i=>G(f.key,i)},null,8,["model-value","onChange"])):f.type==="number"||f.type==="integer"?(e.openBlock(),e.createBlock(c,{key:2,"model-value":D(f.key),onChange:i=>G(f.key,i),min:f.min,max:f.max,step:f.step||(f.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):f.type==="array"&&!f.options?(e.openBlock(),e.createElementBlock("div",oa,[e.createVNode(b,{"model-value":p(f.key),onChange:i=>S(f.key,i),type:"textarea",rows:3,placeholder:f.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):f.type==="array"&&f.options?(e.openBlock(),e.createBlock(u,{key:4,"model-value":D(f.key),onChange:i=>G(f.key,i),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.options,(i,N)=>(e.openBlock(),e.createBlock(F,{key:i,label:f.optionLabels?f.optionLabels[N]:i,value:i},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(b,{key:5,"model-value":D(f.key),onInput:i=>G(f.key,i),maxlength:f.maxLength,"show-word-limit":!!f.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!f.dependsOn||L(f)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.unref(l)&&T.value.length===0?(e.openBlock(),e.createElementBlock("div",na,[...y[2]||(y[2]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--aiflow-color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-e9fc5ade"]]),la={class:"config-header"},ra={class:"config-section"},sa={key:0,class:"config-section"},ia={key:1,class:"config-section"},ca={key:0,class:"el-form-item__error"},da={key:2,class:"config-section"},ma={key:3,class:"config-section"},pa={key:4,class:"config-section"},ua=ne({__name:"DataSourceConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.inject("taskModeConfig",null),l=e.inject("selectedDevicesMap",null),C=e.inject("echoAlgodata",null),T=e.computed(()=>d==="task"),D=e.computed(()=>P("deviceType")??"camera"),G=e.computed(()=>{const f=o.nodes.find(N=>N.type===k.START);return f?.data?.streamType?f.data.streamType:(_?.value??_)?.streamType??"image"}),L=e.computed(()=>{const f=t.value?.id;return l?.value?.[f]?.length??0}),p=()=>{const f=_?.value??_,i=t.value?.id,N=t.value?.data?.label??"",x=l?.value?.[i]??[],W=o.nodes.filter(h=>h.type===k.DATA_SOURCE).findIndex(h=>h.id===i),A=C?.value??C,B=A?.graph??A,$=t.value?.data?.sourceGroupId??B?.ruleSchema?.sourceGroups?.[W]?.sourceGroupId??i,U=h=>{l&&(l.value[i]=h)};f?.datasource?.onDeviceClick?.(i,N,$,x,D.value,U)},{fetchSchemaForNodeType:S}=Se(),V=e.computed(()=>o.nodes.some(f=>f.type===k.SMALL_MODEL)),r=e.computed(()=>o.getDataSourceCount()>=2),y=e.computed(()=>!o.supportPatrol()),s=e.computed(()=>o.getDataSourceCount()>=2?"存在多个数据源节点时不支持轮巡分析":o.hasCooperativeDetection()?"开启协同检测时不支持轮巡分析":""),M=e.computed(()=>{if(!t.value)return[];const f=t.value.data.input_schema||t.value.data.inputSchema;if(!f||!f.properties)return[];const i=f.required||[];return Object.entries(f.properties).map(([N,x])=>({key:N,type:x.type,label:x.title||x.label||x.description||N,description:x.description||"",default:x.default,required:i.includes(N)||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}))}),P=f=>{if(t.value)return t.value.data.arguments?.[f]},g=e.computed(()=>!!P("enableImageSequence")),F=e.computed(()=>!!P("needCooperativeDetection")),u=(f,i)=>{if(!t.value)return;const x={...t.value.data.arguments||{},[f]:i};o.updateNodeData(t.value.id,{arguments:x})},w=async f=>{if(!t.value)return;if(o.edges.some(N=>N.source===t.value.id))try{await v.ElMessageBox.confirm("切换模式将清除该节点的所有输出连接,是否继续?","确认切换",{confirmButtonText:"继续",cancelButtonText:"取消",type:"warning"}),o.edges.filter(x=>x.source===t.value.id).forEach(x=>{o.removeEdge(x.id)}),f&&u("needCooperativeDetection",!1),o.updateNodeData(t.value.id,{enableImageSequence:f}),u("enableImageSequence",f),f&&o.initializeSubsequentFrames(t.value.id)}catch{return}else f&&u("needCooperativeDetection",!1),o.updateNodeData(t.value.id,{enableImageSequence:f}),u("enableImageSequence",f),f&&o.initializeSubsequentFrames(t.value.id)},c=f=>{t.value&&(f&&(o.updateNodeData(t.value.id,{enableImageSequence:!1}),u("enableImageSequence",!1),u("enablePatrol",!1)),u("needCooperativeDetection",f))};e.watch(G,f=>{f==="stream"&&t.value&&P("deviceType")==="1400"&&u("deviceType","camera")},{immediate:!0});const b=e.computed(()=>T.value&&D.value==="camera"&&G.value!=="stream"&&o.supportPatrol());e.watch(b,f=>{!f&&t.value&&P("enablePatrol")&&u("enablePatrol",!1)}),e.watch(L,f=>{f>0&&P("enablePatrol")&&(P("patrolGroupSize")??1)>f&&u("patrolGroupSize",f)});const q=f=>{if(!f.dependsOn||!t.value)return!0;const{field:i,value:N}=f.dependsOn,x=P(i);if(typeof N=="string"&&N.startsWith("!")){const W=N.substring(1);return x!==W}return Array.isArray(N)?N.includes(x):x===N},m=()=>{t.value&&v.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;const i=t.value.type,N=t.value.data;if(i==="dataSource"&&T.value){const B=N.arguments||{},$={},U=o.nodes.some(h=>h.type===k.SMALL_MODEL);B.mode===void 0&&($.mode=U?3:0),B.interval===void 0&&($.interval=30),G.value==="stream"&&B.sw_decoding===void 0&&($.sw_decoding="CPU"),Object.keys($).length>0&&o.updateNodeData(f,{arguments:{...B,...$}})}const x=N.input_schema||N.inputSchema;if(i==="dataSource"&&x&&x.properties&&!x.properties.windowSeconds){x.properties.windowSeconds={type:"integer",title:"协同检测等待时间(秒)",description:"等待接收数据源下所有摄像机返回图片的最大时长。若超时仍未收齐全部图片,将自动终止本次协同分析",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},N.arguments.windowSeconds||o.updateNodeData(t.value.id,{...N,input_schema:x,arguments:{...N.arguments,windowSeconds:5}});return}if(x&&x.properties&&Object.keys(x.properties).length>0)return;const W=await S(i);if(!W)return;const A=t.value?.data;A&&o.updateNodeData(t.value.id,{...A,input_schema:W.inputSchema,extraConfig:W.extraConfig,arguments:{...W.arguments,...A.arguments}})},{immediate:!0}),(f,i)=>{const N=e.resolveComponent("el-button"),x=e.resolveComponent("el-divider"),W=e.resolveComponent("el-icon"),A=e.resolveComponent("el-tooltip"),B=e.resolveComponent("el-option"),$=e.resolveComponent("el-select"),U=e.resolveComponent("el-switch"),h=e.resolveComponent("el-input-number"),O=e.resolveComponent("el-input"),j=e.resolveComponent("el-form-item"),J=e.resolveComponent("el-form"),Z=e.resolveComponent("el-radio"),R=e.resolveComponent("el-radio-group");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",la,[i[11]||(i[11]=e.createElementVNode("h3",null,"节点配置",-1)),T.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(N,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:m},null,8,["icon"]))]),e.createVNode(x),e.createElementVNode("div",ra,[i[12]||(i[12]=e.createElementVNode("h4",null,"数据源配置",-1)),e.createVNode(J,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.value,n=>e.withDirectives((e.openBlock(),e.createBlock(j,{key:n.key,required:n.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(n.label),1),n.description?(e.openBlock(),e.createBlock(A,{key:0,content:n.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(W,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[n.options&&n.type==="string"?(e.openBlock(),e.createBlock($,{key:0,"model-value":P(n.key),onChange:E=>u(n.key,E),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.options,(E,H)=>(e.openBlock(),e.createBlock(B,{key:E,label:n.optionLabels?n.optionLabels[H]:E,value:E},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):n.type==="boolean"?(e.openBlock(),e.createBlock(A,{key:1,content:T.value&&(n.key==="needCooperativeDetection"||n.key==="enableImageSequence")?"算法任务模式下不允许修改此配置":n.key==="needCooperativeDetection"&&g.value?"已开启图片时序,无法同时开启协同检测":n.key==="enableImageSequence"&&F.value?"已开启协同检测,无法同时开启图片时序":n.key==="enableImageSequence"&&r.value?"多数据源场景下不允许开启图片时序":"",disabled:!(T.value&&(n.key==="needCooperativeDetection"||n.key==="enableImageSequence"))&&!(n.key==="needCooperativeDetection"&&g.value)&&!(n.key==="enableImageSequence"&&F.value)&&!(n.key==="enableImageSequence"&&r.value),placement:"top"},{default:e.withCtx(()=>[e.createVNode(U,{"model-value":P(n.key),disabled:T.value&&(n.key==="needCooperativeDetection"||n.key==="enableImageSequence")||n.key==="needCooperativeDetection"&&g.value||n.key==="enableImageSequence"&&F.value||n.key==="enableImageSequence"&&r.value,onChange:E=>n.key==="enableImageSequence"?w(E):n.key==="needCooperativeDetection"?c(E):u(n.key,E)},null,8,["model-value","disabled","onChange"])]),_:2},1032,["content","disabled"])):n.type==="number"||n.type==="integer"?(e.openBlock(),e.createBlock(h,{key:2,"model-value":P(n.key),onChange:E=>u(n.key,E),min:n.min,max:n.max,step:n.step||(n.type==="integer"?1:.1),precision:n.type==="integer"?0:void 0,style:{width:"100%"}},null,8,["model-value","onChange","min","max","step","precision"])):(e.openBlock(),e.createBlock(O,{key:3,"model-value":P(n.key),onInput:E=>u(n.key,E),maxlength:n.maxLength,"show-word-limit":!!n.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!n.dependsOn||q(n)]])),128))]),_:1})]),t.value?.data?.enableImageSequence?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",sa,[i[13]||(i[13]=e.createElementVNode("h4",null,"分支配置",-1)),e.createVNode(J,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(j,{label:"分支关系"},{default:e.withCtx(()=>[e.createVNode($,{"model-value":t.value?.data.branchLogic||"and",disabled:T.value,onChange:i[0]||(i[0]=n=>e.unref(o).updateNodeData(t.value.id,{branchLogic:n})),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"ALL(满足所有分支)",value:"and"}),e.createVNode(B,{label:"SOME(满足至少一个分支)",value:"or"}),e.createVNode(B,{label:"ONE(有且只满足一个分支)",value:"more"})]),_:1},8,["model-value","disabled"])]),_:1})]),_:1})])),T.value?(e.openBlock(),e.createElementBlock("div",ia,[i[16]||(i[16]=e.createElementVNode("h4",null,"设备配置",-1)),e.createVNode(J,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(j,{label:"设备类型",required:""},{default:e.withCtx(()=>[e.createVNode(R,{"model-value":P("deviceType")??"camera",onChange:i[1]||(i[1]=n=>u("deviceType",n))},{default:e.withCtx(()=>[e.createVNode(Z,{value:"camera"},{default:e.withCtx(()=>[...i[14]||(i[14]=[e.createTextVNode("摄像机",-1)])]),_:1}),e.createVNode(Z,{value:"1400",disabled:G.value==="stream"},{default:e.withCtx(()=>[...i[15]||(i[15]=[e.createTextVNode("1400设备",-1)])]),_:1},8,["disabled"])]),_:1},8,["model-value"])]),_:1}),e.createVNode(j,{label:"设备选择",required:""},{default:e.withCtx(()=>[e.createVNode(O,{"model-value":`已选 ${L.value} 个设备`,readonly:"",style:{cursor:"pointer"},class:e.normalizeClass({"is-error":L.value===0}),onClick:p},null,8,["model-value","class"]),L.value===0?(e.openBlock(),e.createElementBlock("div",ca,"请选择至少一个设备")):e.createCommentVNode("",!0)]),_:1})]),_:1})])):e.createCommentVNode("",!0),T.value&&D.value==="1400"?(e.openBlock(),e.createElementBlock("div",da,[i[19]||(i[19]=e.createElementVNode("h4",null,"目标检测方式",-1)),e.createVNode(J,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(j,{label:"检测方式",required:""},{default:e.withCtx(()=>[e.createVNode(R,{"model-value":P("detectionMode")??"platform",onChange:i[2]||(i[2]=n=>u("detectionMode",n))},{default:e.withCtx(()=>[e.createVNode(Z,{value:"platform"},{default:e.withCtx(()=>[...i[17]||(i[17]=[e.createTextVNode("平台检测",-1)])]),_:1}),e.createVNode(Z,{value:"device"},{default:e.withCtx(()=>[...i[18]||(i[18]=[e.createTextVNode("前端设备检测",-1)])]),_:1})]),_:1},8,["model-value"])]),_:1})]),_:1})])):e.createCommentVNode("",!0),T.value&&D.value==="camera"&&G.value!=="stream"&&e.unref(o).supportPatrol()?(e.openBlock(),e.createElementBlock("div",ma,[i[21]||(i[21]=e.createElementVNode("h4",null,"轮巡分析",-1)),e.createVNode(J,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(j,{label:"启用轮巡分析"},{default:e.withCtx(()=>[e.createVNode(A,{disabled:!y.value,content:s.value,placement:"top"},{default:e.withCtx(()=>[e.createVNode(U,{"model-value":y.value?!1:P("enablePatrol"),disabled:y.value,onChange:i[3]||(i[3]=n=>u("enablePatrol",n))},null,8,["model-value","disabled"])]),_:1},8,["disabled","content"])]),_:1}),P("enablePatrol")?(e.openBlock(),e.createBlock(j,{key:0},{label:e.withCtx(()=>[i[20]||(i[20]=e.createElementVNode("span",null,"每组设备数量",-1)),e.createVNode(A,{content:"提示:每组设备数量需要根据抽帧间隔设置,建议每组设备数量不超过:10*抽帧间隔的秒数",placement:"top"},{default:e.withCtx(()=>[e.createVNode(W,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(h,{"model-value":P("patrolGroupSize")??1,onChange:i[4]||(i[4]=n=>u("patrolGroupSize",n)),min:1,max:L.value>0?L.value:void 0,style:{width:"100%"}},null,8,["model-value","max"])]),_:1})):e.createCommentVNode("",!0)]),_:1})])):e.createCommentVNode("",!0),T.value&&D.value==="camera"?(e.openBlock(),e.createElementBlock("div",pa,[i[22]||(i[22]=e.createElementVNode("h4",null,"抽帧配置",-1)),e.createVNode(J,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(j,{label:"抽帧策略"},{default:e.withCtx(()=>[G.value==="image"?(e.openBlock(),e.createBlock($,{key:0,"model-value":0,disabled:"",style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"按时间间隔抽帧",value:0})]),_:1})):V.value?(e.openBlock(),e.createBlock($,{key:1,"model-value":P("mode")??3,onChange:i[5]||(i[5]=n=>{u("mode",n),n===1&&u("interval",V.value?5:25)}),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"每一帧都检测",value:3}),e.createVNode(B,{label:"跳帧检测",value:1}),e.createVNode(B,{label:"关键帧",value:2})]),_:1},8,["model-value"])):(e.openBlock(),e.createBlock($,{key:2,"model-value":P("mode")??0,onChange:i[6]||(i[6]=n=>{u("mode",n),n===0&&u("interval",30),n===1&&u("interval",25)}),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"按时间间隔抽帧",value:0}),e.createVNode(B,{label:"跳帧检测",value:1}),e.createVNode(B,{label:"关键I帧检测",value:2})]),_:1},8,["model-value"]))]),_:1}),G.value==="image"||G.value==="stream"&&(P("mode")??0)===0?(e.openBlock(),e.createBlock(j,{key:0,label:"抽帧间隔时间(秒)"},{default:e.withCtx(()=>[e.createVNode(h,{"model-value":P("interval")??30,onChange:i[7]||(i[7]=n=>u("interval",n)),min:1,max:G.value==="image"?600:60,step:1,style:{width:"100%"}},null,8,["model-value","max"])]),_:1})):e.createCommentVNode("",!0),G.value==="stream"&&(P("mode")??0)===1?(e.openBlock(),e.createBlock(j,{key:1,label:"跳帧数量(帧)"},{default:e.withCtx(()=>[V.value?(e.openBlock(),e.createBlock(h,{key:0,"model-value":P("interval")??5,onChange:i[8]||(i[8]=n=>u("interval",n)),min:1,max:30,step:1,precision:0,style:{width:"100%"}},null,8,["model-value"])):(e.openBlock(),e.createBlock($,{key:1,"model-value":P("interval")??25,onChange:i[9]||(i[9]=n=>u("interval",n)),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:25,value:25}),e.createVNode(B,{label:50,value:50}),e.createVNode(B,{label:75,value:75}),e.createVNode(B,{label:125,value:125}),e.createVNode(B,{label:250,value:250}),e.createVNode(B,{label:375,value:375}),e.createVNode(B,{label:750,value:750})]),_:1},8,["model-value"]))]),_:1})):e.createCommentVNode("",!0),G.value==="stream"?(e.openBlock(),e.createBlock(j,{key:2,label:"抽帧硬件资源"},{default:e.withCtx(()=>[e.createVNode($,{"model-value":P("sw_decoding")??"CPU",onChange:i[10]||(i[10]=n=>u("sw_decoding",n)),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"GPU",value:"GPU"}),e.createVNode(B,{label:"CPU",value:"CPU"})]),_:1},8,["model-value"])]),_:1})):e.createCommentVNode("",!0)]),_:1})])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-a941b904"]]),fa={safety:"安全检测",security:"安防监控",traffic:"交通监控",behavior:"行为分析"},Ke=(a=null)=>{const o=e.ref(a||[]),t=e.ref(!1),d=e.ref(null),_=e.ref(""),l=async(V=!1)=>{if(a){o.value=a;return}},C=async()=>{o.value=[],await l(!0)},T=V=>o.value.find(r=>r.id===V||r.title===V),D=V=>{const r=T(V);if(!r)return{};const y=r.inputSchema||r.input_schema;if(!y||!y.properties)return{};const s={};return Object.entries(y.properties).forEach(([M,P])=>{P.default!==void 0&&(s[M]=P.default)}),s},G=V=>{const r=T(V);if(!r)return[];const y=r.inputSchema||r.input_schema;if(!y||!y.properties)return[];const s=y.required||[];return Object.entries(y.properties).map(([M,P])=>({key:M,type:P.type,label:P.title||P.description||M,description:P.description||"",default:P.default,required:s.includes(M)||P.required||!1,min:P.minimum,max:P.maximum,step:P.step,options:P.enum,optionLabels:P.enumLabels||P.enum,dependsOn:P.dependsOn}))},L=e.computed(()=>{if(!_.value)return o.value;const V=_.value.toLowerCase();return o.value.filter(r=>r.name?.toLowerCase().includes(V)||r.type?.toLowerCase().includes(V)||r.title?.toLowerCase().includes(V)||r.description&&r.description.toLowerCase().includes(V)||p(r.type).toLowerCase().includes(V))}),p=V=>fa[V]||V;return{models:o,loading:t,error:d,searchKeyword:_,filteredModels:L,loadSmallModels:l,reloadSmallModels:C,getModelConfig:T,getTypeLabel:p,getDefaultArguments:D,getSchemaFields:G,validateArguments:(V,r)=>{const y=T(V);if(!y)return{valid:!1,errors:["模型不存在"]};const s=[],M=y.inputSchema||y.input_schema;return!M||!M.properties?{valid:!0,errors:[]}:(Object.entries(M.properties).forEach(([P,g])=>{const F=r[P];if(g.required&&(F==null||F==="")){s.push(`${g.title||P} 为必填项`);return}if(F!=null&&(g.type==="number"||g.type==="integer")){if(typeof F!="number"){s.push(`${g.title||P} 必须是数字`);return}g.minimum!==void 0&&F<g.minimum&&s.push(`${g.title||P} 不能小于 ${g.minimum}`),g.maximum!==void 0&&F>g.maximum&&s.push(`${g.title||P} 不能大于 ${g.maximum}`)}}),{valid:s.length===0,errors:s})}}},ga={class:"small-model-selector"},ha={key:0,class:"loading-state"},ya={key:1,class:"error-state"},_a={key:2,class:"model-list"},Na=["onClick"],Ca={class:"model-header"},ka={class:"model-name"},ba={class:"model-description"},xa={class:"model-meta"},Ea={key:3,class:"empty-state"},wa=ne({__name:"SmallModelSelector",props:{modelValue:{type:String,default:null},externalModels:{type:Array,default:null}},emits:["update:modelValue","select"],setup(a,{emit:o}){const t=a,d=o,{loading:_,error:l,searchKeyword:C,filteredModels:T,loadSmallModels:D,reloadSmallModels:G,getTypeLabel:L}=Ke(t.externalModels),p=r=>{d("update:modelValue",r.id),d("select",r)},S=()=>{G()},V=r=>({safety:"warning",security:"danger",traffic:"info"})[r]||"info";return e.onMounted(()=>{t.externalModels||D()}),(r,y)=>{const s=e.resolveComponent("el-input"),M=e.resolveComponent("el-icon"),P=e.resolveComponent("el-button"),g=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",ga,[e.createVNode(s,{modelValue:e.unref(C),"onUpdate:modelValue":y[0]||(y[0]=F=>e.isRef(C)?C.value=F:null),placeholder:"搜索小模型(名称、类型、描述)",clearable:"","prefix-icon":e.unref(Q.Search),size:"default",class:"search-input"},null,8,["modelValue","prefix-icon"]),e.unref(_)?(e.openBlock(),e.createElementBlock("div",ha,[e.createVNode(M,{class:"is-loading"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Loading))]),_:1}),y[2]||(y[2]=e.createElementVNode("span",null,"加载中...",-1))])):e.unref(l)?(e.openBlock(),e.createElementBlock("div",ya,[e.createVNode(M,{class:"error-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.CircleClose))]),_:1}),e.createElementVNode("p",null,e.toDisplayString(e.unref(l)),1),e.createVNode(P,{type:"primary",onClick:S},{default:e.withCtx(()=>[...y[3]||(y[3]=[e.createTextVNode("重试",-1)])]),_:1})])):e.unref(T).length>0?(e.openBlock(),e.createElementBlock("div",_a,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(T),F=>(e.openBlock(),e.createElementBlock("div",{key:F.id,class:e.normalizeClass(["model-item",{selected:a.modelValue===F.id}]),onClick:u=>p(F)},[e.createElementVNode("div",Ca,[e.createElementVNode("div",ka,[e.createVNode(M,{class:"model-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Cpu))]),_:1}),e.createTextVNode(" "+e.toDisplayString(F.name),1)]),e.createVNode(g,{type:V(F.type),size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(L)(F.type)),1)]),_:2},1032,["type"])]),e.createElementVNode("div",ba,e.toDisplayString(F.description),1),e.createElementVNode("div",xa,[F.supportDirectAlert?(e.openBlock(),e.createBlock(g,{key:0,size:"small",type:"success",effect:"plain"},{default:e.withCtx(()=>[...y[4]||(y[4]=[e.createTextVNode(" 支持直通预警 ",-1)])]),_:1})):e.createCommentVNode("",!0)])],10,Na))),128))])):(e.openBlock(),e.createElementBlock("div",Ea,[e.createVNode(M,{class:"empty-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Search))]),_:1}),y[6]||(y[6]=e.createElementVNode("p",null,"未找到匹配的小模型",-1)),e.createVNode(P,{text:"",onClick:y[1]||(y[1]=F=>C.value="")},{default:e.withCtx(()=>[...y[5]||(y[5]=[e.createTextVNode("清空搜索",-1)])]),_:1})]))])}}},[["__scopeId","data-v-6e0d51c6"]]),Ta={class:"position-tooltip"},Ve=ne({__name:"PositionTooltip",setup(a){return(o,t)=>(e.openBlock(),e.createElementBlock("div",Ta,[...t[0]||(t[0]=[e.createStaticVNode('<div class="tooltip-title" data-v-6ac23ee8>提示说明</div><div class="tooltip-desc" data-v-6ac23ee8> 目标点为点位代表目标位置的点,系统默认使用目标框的中心点表示目标的位置。只有当目标的重心点满足检测框完整落在检测区域时,才表示目标进入检测框或者离开检测区域。 </div><div class="tooltip-examples" data-v-6ac23ee8><div class="tooltip-example" data-v-6ac23ee8><div class="example-title" data-v-6ac23ee8>示例1:以目标框的中心点代表目标位置</div><div class="example-figure" data-v-6ac23ee8><svg viewBox="0 0 120 180" width="120" height="180" xmlns="http://www.w3.org/2000/svg" data-v-6ac23ee8><rect x="5" y="5" width="110" height="170" rx="6" fill="#fff" stroke="#ddd" stroke-width="1" data-v-6ac23ee8></rect><ellipse cx="60" cy="32" rx="18" ry="20" fill="#2d3a4a" data-v-6ac23ee8></ellipse><ellipse cx="60" cy="36" rx="14" ry="16" fill="#f5c5a3" data-v-6ac23ee8></ellipse><path d="M54 42 Q60 47 66 42" stroke="#c8956a" stroke-width="1.5" fill="none" stroke-linecap="round" data-v-6ac23ee8></path><rect x="42" y="58" width="36" height="52" rx="4" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="26" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="78" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><ellipse cx="34" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><ellipse cx="86" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><rect x="44" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><rect x="62" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><circle cx="60" cy="90" r="5" fill="#e74c3c" data-v-6ac23ee8></circle></svg></div><div class="example-coords" data-v-6ac23ee8>X轴: 0.5   Y轴: 0.5</div></div><div class="tooltip-example" data-v-6ac23ee8><div class="example-title" data-v-6ac23ee8>示例2:以目标框的最左上角代表目标位置</div><div class="example-figure" data-v-6ac23ee8><svg viewBox="0 0 120 180" width="120" height="180" xmlns="http://www.w3.org/2000/svg" data-v-6ac23ee8><rect x="5" y="5" width="110" height="170" rx="6" fill="#fff" stroke="#ddd" stroke-width="1" data-v-6ac23ee8></rect><ellipse cx="60" cy="32" rx="18" ry="20" fill="#2d3a4a" data-v-6ac23ee8></ellipse><ellipse cx="60" cy="36" rx="14" ry="16" fill="#f5c5a3" data-v-6ac23ee8></ellipse><path d="M54 42 Q60 47 66 42" stroke="#c8956a" stroke-width="1.5" fill="none" stroke-linecap="round" data-v-6ac23ee8></path><rect x="42" y="58" width="36" height="52" rx="4" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="26" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="78" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><ellipse cx="34" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><ellipse cx="86" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><rect x="44" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><rect x="62" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><circle cx="5" cy="5" r="5" fill="#e74c3c" data-v-6ac23ee8></circle></svg></div><div class="example-coords" data-v-6ac23ee8>X轴: 0   Y轴: 0</div></div><div class="tooltip-example" data-v-6ac23ee8><div class="example-title" data-v-6ac23ee8>示例3:以目标框的最右下角代表目标位置</div><div class="example-figure" data-v-6ac23ee8><svg viewBox="0 0 120 180" width="120" height="180" xmlns="http://www.w3.org/2000/svg" data-v-6ac23ee8><rect x="5" y="5" width="110" height="170" rx="6" fill="#fff" stroke="#ddd" stroke-width="1" data-v-6ac23ee8></rect><ellipse cx="60" cy="32" rx="18" ry="20" fill="#2d3a4a" data-v-6ac23ee8></ellipse><ellipse cx="60" cy="36" rx="14" ry="16" fill="#f5c5a3" data-v-6ac23ee8></ellipse><path d="M54 42 Q60 47 66 42" stroke="#c8956a" stroke-width="1.5" fill="none" stroke-linecap="round" data-v-6ac23ee8></path><rect x="42" y="58" width="36" height="52" rx="4" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="26" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="78" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><ellipse cx="34" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><ellipse cx="86" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><rect x="44" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><rect x="62" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><circle cx="115" cy="175" r="5" fill="#e74c3c" data-v-6ac23ee8></circle></svg></div><div class="example-coords" data-v-6ac23ee8>X轴: 1   Y轴: 1</div></div></div>',3)])]))}},[["__scopeId","data-v-6ac23ee8"]]),Sa={class:"config-header"},Va={class:"config-section"},Ba={key:0,class:"model-selector-wrapper"},Aa={key:1,class:"selected-model-info"},Da={class:"model-info-header"},La={class:"model-info-name"},Ma={class:"model-info-description"},Oa={key:0,class:"config-section"},Ia={key:3,class:"array-input"},Ra="检测到事件后,连续两次告警上报的时间间隔",$a=ne({__name:"SmallModelConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.smallModels??null),{models:T}=Ke(C.value),D=new Set(["threshold","interval","bottomScale","leftScale","rightScale","topScale","targetHeight","targetWidth","x_ratio","y_ratio","targetNumber","overloadNumber","targetDuration"]),G={CrowdInAndOut:"上报在告警间隔时间内的进入和离开的人员数量",MotorInAndOut:"上报在告警间隔时间内的进入和离开的车辆数量"},L=e.computed(()=>{if(!t.value)return[];const u=t.value.data.input_schema||t.value.data.inputSchema;if(!u||!u.properties)return[];const w=u.required||[],c=t.value.data.title||"";return Object.entries(u.properties).filter(([b])=>D.has(b)).map(([b,q])=>{const m={key:b,type:q.type,label:q.title||q.label||q.description||b,description:q.description||"",default:q.default,required:w.includes(b)||q.required||!1,min:q.minimum!==void 0?q.minimum:q.min,max:q.maximum!==void 0?q.maximum:q.max,step:q.step,maxLength:q.maxLength,options:q.enum,optionLabels:q.enumLabels||q.enum,dependsOn:q.dependsOn,sort:q.sort};return b==="interval"&&(m.label="告警间隔(秒)",m.description=G[c]||Ra,m.isInterval=!0,m.default=m.default!=null?m.default/1e3:10,m.min=m.min!=null?m.min/1e3:1,m.max=m.max!=null?m.max/1e3:void 0,m.step=1,m.precision=0),b==="threshold"&&(m.label="小模型阈值",m.step=.01,m.precision=2),b==="targetWidth"&&(m.label="最小目标宽度",m.default=60,m.min=20,m.max=1920,m.step=1,m.precision=0),b==="targetHeight"&&(m.label="最小目标高度",m.default=60,m.min=20,m.max=1080,m.step=1,m.precision=0),b==="topScale"&&(m.label="调整目标框高度比例 (上)",m.max=10,m.step=.1,m.precision=1),b==="bottomScale"&&(m.label="调整目标框高度比例 (下)",m.max=10,m.step=.1,m.precision=1),b==="leftScale"&&(m.label="调整目标框宽度比例 (左)",m.max=10,m.step=.1,m.precision=1),b==="rightScale"&&(m.label="调整目标框宽度比例 (右)",m.max=10,m.step=.1,m.precision=1),b==="x_ratio"&&(m.label="X轴位置信息",m.step=.01,m.precision=2),b==="y_ratio"&&(m.label="Y轴位置信息",m.step=.01,m.precision=2),b==="targetDuration"&&(m.label="目标持续时间(秒)",m.default=m.default!=null?m.default/1e3:1,m.min=m.min!=null?m.min/1e3:1,m.max=m.max!=null?m.max/1e3:void 0,m.step=.01,m.precision=2),b==="overloadNumber"&&(m.precision=0),b==="targetNumber"&&(m.precision=0),m}).filter(b=>!["areas","darwin","direction","lines"].includes(b.key)).filter(b=>!(b.key==="targetDuration"&&c==="NonMotorCounter")).sort((b,q)=>(b.sort??1/0)-(q.sort??1/0))}),p=["interval","targetDuration"],S=u=>{if(!t.value)return;const w=t.value.data.arguments?.[u];return p.includes(u)&&w!=null?w/1e3:w},V=(u,w)=>{if(!t.value)return;let c=w;p.includes(u)&&w!=null&&(c=w*1e3);const q={...t.value.data.arguments||{},[u]:c};o.updateNodeData(t.value.id,{arguments:q})},r=u=>{if(!u.dependsOn||!t.value)return!0;const{field:w,value:c}=u.dependsOn,b=S(w);if(typeof c=="string"&&c.startsWith("!")){const q=c.substring(1);return b!==q}return Array.isArray(c)?c.includes(b):b===c},y=u=>{const w=S(u);return Array.isArray(w)?JSON.stringify(w):""},s=(u,w)=>{try{const c=JSON.parse(w);Array.isArray(c)&&V(u,c)}catch{}},M=async u=>{if(!t.value)return;const w=u.inputSchema||u.input_schema||{},c={};w.properties&&Object.entries(w.properties).forEach(([b,q])=>{q.default!==void 0&&(c[b]=q.default)}),o.updateNodeData(t.value.id,{...t.value.data,modelId:u.id||u.title,title:u.title,modelName:u.name,modelType:u.type,input_schema:w,extraConfig:u.extraConfig,supportDirectAlert:u.supportDirectAlert||!1,arguments:c})},P=()=>{t.value&&v.ElMessageBox.confirm("更换模型将清空当前配置,是否继续?","确认更换",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{o.updateNodeData(t.value.id,{modelId:null,modelName:"",supportDirectAlert:!1,input_schema:null,arguments:{}})}).catch(()=>{})},g=()=>t.value?.data.modelId?T.value.find(w=>w.id===t.value.data.modelId)?.description||"暂无描述":"",F=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(u,w)=>{const c=e.resolveComponent("el-button"),b=e.resolveComponent("el-divider"),q=e.resolveComponent("el-icon"),m=e.resolveComponent("el-tag"),f=e.resolveComponent("el-tooltip"),i=e.resolveComponent("el-option"),N=e.resolveComponent("el-select"),x=e.resolveComponent("el-switch"),W=e.resolveComponent("el-input-number"),A=e.resolveComponent("el-input"),B=e.resolveComponent("el-text"),$=e.resolveComponent("el-form-item"),U=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Sa,[w[0]||(w[0]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(c,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:F},null,8,["icon"]))]),e.createVNode(b),e.createElementVNode("div",Va,[w[3]||(w[3]=e.createElementVNode("h4",null,"选择小模型",-1)),!t.value?.data.modelId&&!_.value?(e.openBlock(),e.createElementBlock("div",Ba,[e.createVNode(wa,{"model-value":t.value?.data.modelId,"external-models":C.value,onSelect:M},null,8,["model-value","external-models"])])):t.value?.data.modelId?(e.openBlock(),e.createElementBlock("div",Aa,[e.createElementVNode("div",Da,[e.createElementVNode("div",La,[e.createVNode(q,{class:"model-info-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Cpu))]),_:1}),e.createElementVNode("span",null,e.toDisplayString(t.value?.data.modelName),1)]),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(c,{key:0,type:"text",text:"",size:"small",onClick:P},{default:e.withCtx(()=>[...w[1]||(w[1]=[e.createTextVNode(" 更换模型 ",-1)])]),_:1}))]),e.createElementVNode("div",Ma,e.toDisplayString(g()),1),t.value?.data.supportDirectAlert?(e.openBlock(),e.createBlock(m,{key:0,size:"small",type:"success",effect:"plain"},{default:e.withCtx(()=>[...w[2]||(w[2]=[e.createTextVNode(" 支持直通预警模式 ",-1)])]),_:1})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),t.value?.data.modelId?(e.openBlock(),e.createElementBlock("div",Oa,[w[4]||(w[4]=e.createElementVNode("h4",null,"模型参数",-1)),e.createVNode(U,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,h=>e.withDirectives((e.openBlock(),e.createBlock($,{key:h.key,required:h.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(h.label),1),h.key==="x_ratio"||h.key==="y_ratio"?(e.openBlock(),e.createBlock(f,{key:0,placement:"right","show-arrow":!0,"popper-class":"position-info-tooltip","hide-after":0},{content:e.withCtx(()=>[e.createVNode(Ve)]),default:e.withCtx(()=>[e.createVNode(q,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})):h.description?(e.openBlock(),e.createBlock(f,{key:1,content:h.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(q,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[h.options&&h.type==="string"?(e.openBlock(),e.createBlock(N,{key:0,"model-value":S(h.key),onChange:O=>V(h.key,O),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.options,(O,j)=>(e.openBlock(),e.createBlock(i,{key:O,label:h.optionLabels?h.optionLabels[j]:O,value:O},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):h.type==="boolean"?(e.openBlock(),e.createBlock(x,{key:1,"model-value":S(h.key),onChange:O=>V(h.key,O)},null,8,["model-value","onChange"])):h.type==="number"||h.type==="integer"||h.type==="float"?(e.openBlock(),e.createBlock(W,{key:2,"model-value":S(h.key),onChange:O=>V(h.key,O),min:h.min,max:h.max,step:h.step||(h.type==="integer"||h.type==="number"?1:.01),precision:h.precision??(h.type==="integer"?0:2),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step","precision"])):h.type==="array"&&!h.options?(e.openBlock(),e.createElementBlock("div",Ia,[e.createVNode(A,{"model-value":y(h.key),onChange:O=>s(h.key,O),type:"textarea",rows:3,placeholder:"输入坐标,例如: [[100,100], [200,100], [200,200], [100,200]]"},null,8,["model-value","onChange"]),e.createVNode(B,{size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h.description||"输入多边形顶点坐标,格式: [[x1,y1], [x2,y2], ...]"),1)]),_:2},1024)])):h.type==="array"&&h.options?(e.openBlock(),e.createBlock(N,{key:4,"model-value":S(h.key),onChange:O=>V(h.key,O),multiple:"",placeholder:"请选择",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.options,(O,j)=>(e.openBlock(),e.createBlock(i,{key:O,label:h.optionLabels?h.optionLabels[j]:O,value:O},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(A,{key:5,"model-value":S(h.key),onInput:O=>V(h.key,O)},null,8,["model-value","onInput"]))]),_:2},1032,["required"])),[[e.vShow,!h.dependsOn||r(h)]])),128))]),_:1})])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-ecf7f01b"]]),Fa=(a=null)=>{const o=ae(),t=e.ref(a?a.map(p=>Te.backendToFrontend(p)):[]),d=e.ref(!1),_=e.ref(null),l=async(p=!1)=>{if(a){t.value=a.map(S=>Te.backendToFrontend(S));return}},C=p=>t.value.find(S=>S.title===p)||null,T=p=>{const S=C(p);return S?{targetId:S.title,targetName:S.label,threshold:S.data.threshold||.5,targetWidth:S.data.targetWidth||20,targetHeight:S.data.targetHeight||20,postmodel:S.data.postmodel||"ClipVit",areas:S.data.areas||[],expandRect:S.data.expandRect!==void 0?S.data.expandRect:!1,topScale:S.data.topScale||1.6,bottomScale:S.data.bottomScale||1.6,leftScale:S.data.leftScale||1.6,rightScale:S.data.rightScale||1.6,enableStructure:S.data.enableStructure}:{}},D=(p=null)=>o.nodes.filter(S=>S.type==="detectionTarget"&&S.id!==p).map(S=>({value:S.id,label:S.data.targetName||S.data.label})),G=(p=null)=>{const S=[{value:"original",label:"原图"}],V=D(p);return[...S,...V]},L=e.computed(()=>t.value.map(p=>({value:p.title,label:p.label,...p})));return{detectionTargets:t,loading:d,error:_,loadDetectionTargets:l,getTargetById:C,getDefaultConfig:T,getDetectionTargetNodes:D,getDetectionScopeOptions:G,getTargetOptions:L}},qa={class:"paired-array-input"},Be=ne({__name:"PairedArrayInput",props:{primaryField:{type:Object,required:!0},pairedField:{type:Object,required:!0},primaryValue:{type:Array,default:()=>[]},pairedValue:{type:Array,default:()=>[]}},emits:["update"],setup(a,{emit:o}){const t=(L,p)=>{let S;return(...V)=>{clearTimeout(S),S=setTimeout(()=>L(...V),p)}},d=a,_=o,l=e.ref([]),C=()=>{const L=d.primaryValue||[],p=d.pairedValue||[],S=Math.max(L.length,p.length,1);l.value=Array.from({length:S},(V,r)=>({primary:L[r]||"",paired:p[r]!==void 0?p[r]:d.pairedField.default?.[0]||.5}))};e.watch(()=>[d.primaryValue,d.pairedValue],()=>{C()},{immediate:!0,deep:!0});const T=t((L,p)=>{_("update",L,p)},300);e.watch(l,L=>{const p=L.map(V=>V.primary),S=L.map(V=>V.paired);T(p,S)},{deep:!0});const D=()=>{l.value.length>=10||l.value.push({primary:"",paired:d.pairedField.default?.[0]||.5})},G=L=>{l.value.length>1&&l.value.splice(L,1)};return(L,p)=>{const S=e.resolveComponent("el-input"),V=e.resolveComponent("el-input-number"),r=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",qa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(y,s)=>(e.openBlock(),e.createElementBlock("div",{key:s,class:"input-row"},[e.createVNode(S,{modelValue:l.value[s].primary,"onUpdate:modelValue":M=>l.value[s].primary=M,placeholder:a.primaryField.description||"输入内容",class:e.normalizeClass([{"is-error":!l.value[s].primary||l.value[s].primary.trim()===""},"primary-input"])},null,8,["modelValue","onUpdate:modelValue","placeholder","class"]),e.createVNode(V,{modelValue:l.value[s].paired,"onUpdate:modelValue":M=>l.value[s].paired=M,min:a.pairedField.min||0,max:a.pairedField.max||1,step:a.pairedField.step||.1,class:"paired-input"},null,8,["modelValue","onUpdate:modelValue","min","max","step"]),e.createVNode(r,{type:"danger",icon:e.unref(Q.Delete),circle:"",size:"small",disabled:l.value.length===1,onClick:M=>G(s)},null,8,["icon","disabled","onClick"])]))),128)),e.createVNode(r,{type:"primary",icon:e.unref(Q.Plus),size:"small",disabled:l.value.length>=10,onClick:D},{default:e.withCtx(()=>[e.createTextVNode(" 添加"+e.toDisplayString(a.primaryField.label)+e.toDisplayString(l.value.length>=10?"(已达上限)":""),1)]),_:1},8,["icon","disabled"])])}}},[["__scopeId","data-v-05218f96"]]),Ga={class:"config-header"},Ha={class:"config-section"},ja={class:"flex items-center justify-between"},Pa={key:0,class:"config-section"},za={key:1,class:"config-section"},Ua={key:2,class:"config-section"},Wa={class:"device-list"},Ja=["onClick"],Ya={class:"device-name"},Xa={key:0,class:"device-list-empty"},Qa={key:4,class:"array-input"},Ka={key:4,class:"array-input"},Za=ne({__name:"DetectionTargetConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d==="task");e.inject("taskModeConfig",null);const l=e.inject("echoAlgodata",null),C=e.inject("echoTaskData",null),T=e.inject("selectedDevicesMap",null),D=e.computed(()=>{if(!t.value)return null;const h=new Set,O=[t.value.id];for(;O.length;){const j=O.shift();if(h.has(j))continue;h.add(j);const J=o.edges.filter(Z=>Z.target===j);for(const Z of J){const R=o.nodes.find(n=>n.id===Z.source);if(R){if(R.type==="dataSource")return R.id;O.push(R.id)}}}return null}),G=e.computed(()=>{const h=D.value;return h?T?.value?.[h]??[]:[]}),L=e.computed(()=>_.value&&G.value.length>0),p=e.ref(""),S=e.ref(""),V=e.computed(()=>{const h=S.value.trim().toLowerCase();return h?G.value.filter(O=>(O.sourceName??O.name??String(O.sourceId??O.id??O)).toLowerCase().includes(h)):G.value}),r=e.computed(()=>{const h={},O=D.value,j=t.value?.id;if(!O||!j)return h;const J={...t.value?.data?.arguments??{}};delete J.configMode;for(const Z of G.value){const R=String(Z.sourceId??Z.id??Z),n=o.getTaskSourceArguments(O,R,j);if(n===null){h[R]=!1;continue}const E=new Set([...Object.keys(n),...Object.keys(J)]);let H=!1;for(const Y of E)if(JSON.stringify(n[Y])!==JSON.stringify(J[Y])){H=!0;break}h[R]=H}return h});e.watch([G,()=>t.value?.data?.arguments?.configMode],([h])=>{h.length>0?p.value=String(h[0]?.sourceId??h[0]?.id??h[0]):p.value=""},{immediate:!0});const y=(h,O=null)=>{if(O){const n=((C?.value??C)?.graph?.sources??[]).find(E=>String(E.sourceId)===String(O));if(n?.branches)for(const E of n.branches){const H=E.nodes?.find(Y=>Y.toolTitle===h);if(H?.arguments)return{...H.arguments}}return null}const j=l?.value??l,J=j?.graph??j;if(!J?.branches)return null;for(const Z of J.branches){const R=Z.nodes?.find(n=>n.toolTitle===h);if(R?.arguments)return{...R.arguments}}return null},s=h=>{const O=D.value,j=t.value?.id;if(!O||!j||!h||o.getTaskSourceArguments(O,h,j)!==null)return;const J=t.value?.data?.targetId,Z=J?y(J,h):null,R=t.value?.data?.arguments??{},n={...Z??R};delete n.configMode,o.setTaskSourceArguments(O,h,j,n)};e.watch(p,h=>{h&&t.value?.data?.arguments?.configMode==="perDevice"&&s(h)}),e.watch(()=>t.value?.data?.arguments?.configMode,h=>{h==="perDevice"&&p.value&&s(p.value)});const M=e.inject("editorConfig",null),P=e.computed(()=>(M?.value??M)?.detection??null),{detectionTargets:g,loading:F}=Fa(P.value),u=e.computed(()=>{if(!t.value)return[];const h=t.value.data.input_schema||t.value.data.inputSchema;if(!h||!h.properties)return[];const O=h.required||[];return Object.entries(h.properties).map(([j,J])=>({key:j,type:J.type,label:J.title||J.label||J.description||j,description:J.description||"",default:J.default,required:O.includes(j)||J.required||!1,min:J.minimum!==void 0?J.minimum:J.min,max:J.maximum!==void 0?J.maximum:J.max,step:J.step,maxLength:J.maxLength,options:J.enum,optionLabels:J.enumLabels||J.enum,dependsOn:J.dependsOn,"x-component":J["x-component"],"x-paired-with":J["x-paired-with"],sort:J.sort})).sort((j,J)=>(j.sort??1/0)-(J.sort??1/0))}),w=h=>h.type==="array"&&h["x-component"]==="paired-array"&&h["x-paired-with"],c=h=>{const O=h["x-paired-with"];return u.value.find(j=>j.key===O)},b={targetWidth:{label:"最小目标宽度",min:20,max:1920,step:1,precision:0,default:60},targetHeight:{label:"最小目标高度",min:20,max:1080,step:1,precision:0,default:60},threshold:{label:"检测阈值",step:.01,precision:2},topScale:{label:"调整目标框高度比例 (上)",description:"按照目标框中心点坐标,向上缩放目标框y轴方向大小",max:10,step:.1,default:1.6,precision:1},bottomScale:{label:"调整目标框高度比例 (下)",description:"按照目标框中心点坐标,向下缩放目标框y轴方向大小",max:10,step:.1,default:1.6,precision:1},rightScale:{label:"调整目标框宽度比例 (右)",description:"按照目标框中心点坐标,向右缩放目标框x轴方向大小",max:10,step:.1,default:1.6,precision:1},leftScale:{label:"调整目标框宽度比例 (左)",description:"按照目标框中心点坐标,向左缩放目标框x轴方向大小",max:10,step:.1,default:1.6,precision:1},enableStruct:{label:"属性检测"},x_ratio:{label:"X轴位置信息",step:.01,precision:2},y_ratio:{label:"Y轴位置信息",step:.01,precision:2}},q=new Set(Object.keys(b)),m=e.computed(()=>{const h=t.value?.data.targetId,O=new Set;return u.value.forEach(j=>{j["x-paired-with"]&&O.add(j["x-paired-with"])}),u.value.filter(j=>h==="traffic_accident"?j.key==="threshold":q.has(j.key)&&!O.has(j.key)&&!w(j)).map(j=>{const J=b[j.key]||{};return{...j,label:J.label||j.label,description:J.description||j.description,min:J.min??j.min,max:J.max??j.max,step:J.step??j.step,precision:J.precision,default:J.default??j.default}})}),f=e.computed(()=>u.value.filter(h=>w(h))),i=h=>{if(!t.value)return;if(t.value.data.arguments?.configMode==="perDevice"&&p.value){const j=D.value,J=o.getTaskSourceArguments(j,p.value,t.value.id);if(J!==null)return J[h]}return t.value.data.arguments?.[h]},N=(h,O)=>{if(!t.value)return;const j=t.value.data.arguments?.configMode;if(h!=="configMode"&&j==="perDevice"&&p.value){const R=D.value;o.updateTaskSourceArgument(R,p.value,t.value.id,h,O);return}const Z={...t.value.data.arguments||{},[h]:O};o.updateNodeData(t.value.id,{arguments:Z})},x=h=>{if(!h.dependsOn||!t.value)return!0;const{field:O,value:j}=h.dependsOn,J=i(O);if(typeof j=="string"&&j.startsWith("!")){const Z=j.substring(1);return J!==Z}return Array.isArray(j)?j.includes(J):J===j},W=h=>{const O=i(h);return Array.isArray(O)?JSON.stringify(O):""},A=(h,O)=>{try{const j=JSON.parse(O);Array.isArray(j)&&N(h,j)}catch{}},B=(h,O,j,J)=>{if(!t.value)return;if(t.value.data.arguments?.configMode==="perDevice"&&p.value){const E=D.value;o.updateTaskSourceArgument(E,p.value,t.value.id,h,O),o.updateTaskSourceArgument(E,p.value,t.value.id,j,J);return}const n={...t.value.data.arguments||{},[h]:O,[j]:J};o.updateNodeData(t.value.id,{arguments:n})},$=async h=>{if(!t.value||!h)return;const O=g.value.find(n=>n.title===h);if(!O)return;let j=O.inputSchema||O.input_schema||{};if(h==="other"){const n={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}}};j={...j,properties:{...j.properties,...n.properties}}}const J={};j.properties&&Object.entries(j.properties).forEach(([n,E])=>{E.default!==void 0&&(J[n]=E.default)});const Z=t.value.data,R={...J,target_class:O.title};o.updateNodeData(t.value.id,{...Z,targetId:O.title,targetName:O.label,label:O.label,input_schema:j,inputSchema:j,extraConfig:O.extraConfig,arguments:R})},U=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.data.targetId,h=>{if(!h||!t.value)return;const O=g.value.find(Z=>Z.title===h);if(!O)return;const j=t.value.data;if(j.input_schema&&Object.keys(j.input_schema).length>0)return;const J={...O.defaultArguments,...j.arguments,target_class:O.title};o.updateNodeData(t.value.id,{...j,input_schema:O.inputSchema,arguments:J})}),(h,O)=>{const j=e.resolveComponent("el-button"),J=e.resolveComponent("el-divider"),Z=e.resolveComponent("el-option"),R=e.resolveComponent("el-select"),n=e.resolveComponent("el-form-item"),E=e.resolveComponent("el-form"),H=e.resolveComponent("el-radio"),Y=e.resolveComponent("el-radio-group"),z=e.resolveComponent("el-icon"),X=e.resolveComponent("el-tooltip"),te=e.resolveComponent("el-input"),le=e.resolveComponent("el-switch"),pe=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Ga,[O[2]||(O[2]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(j,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:U},null,8,["icon"]))]),e.createVNode(J),e.createElementVNode("div",Ha,[O[3]||(O[3]=e.createElementVNode("h4",null,"检测目标选择",-1)),e.createVNode(E,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(n,{label:"选择检测目标",required:""},{default:e.withCtx(()=>[e.createVNode(R,{"model-value":t.value?.data.targetId,disabled:_.value,onChange:$,placeholder:"请选择检测目标",style:{width:"100%"},loading:e.unref(F),filterable:""},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(g),I=>(e.openBlock(),e.createBlock(Z,{key:I.title,label:I.label,value:I.title},{default:e.withCtx(()=>[e.createElementVNode("div",ja,[e.createElementVNode("span",null,e.toDisplayString(I.label),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["model-value","disabled","loading"])]),_:1})]),_:1})]),L.value?(e.openBlock(),e.createElementBlock("div",Pa,[O[6]||(O[6]=e.createElementVNode("h4",null,"配置方式",-1)),e.createVNode(E,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(n,{label:"配置方式"},{default:e.withCtx(()=>[e.createVNode(Y,{"model-value":t.value?.data?.arguments?.configMode??"unified",onChange:O[0]||(O[0]=I=>N("configMode",I))},{default:e.withCtx(()=>[e.createVNode(H,{value:"unified"},{default:e.withCtx(()=>[...O[4]||(O[4]=[e.createTextVNode("所有设备统一配置",-1)])]),_:1}),e.createVNode(H,{value:"perDevice"},{default:e.withCtx(()=>[...O[5]||(O[5]=[e.createTextVNode("单设备分别配置",-1)])]),_:1})]),_:1},8,["model-value"])]),_:1})]),_:1})])):e.createCommentVNode("",!0),f.value.length>0?(e.openBlock(),e.createElementBlock("div",za,[O[7]||(O[7]=e.createElementVNode("h4",null,"检测目标",-1)),e.createVNode(E,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,I=>(e.openBlock(),e.createBlock(n,{key:I.key,required:I.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(I.label),1),I.description?(e.openBlock(),e.createBlock(X,{key:0,content:I.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[e.createVNode(Be,{"primary-field":I,"paired-field":c(I),"primary-value":i(I.key),"paired-value":i(I["x-paired-with"]),onUpdate:(K,re)=>B(I.key,K,I["x-paired-with"],re)},null,8,["primary-field","paired-field","primary-value","paired-value","onUpdate"])]),_:2},1032,["required"]))),128))]),_:1})])):e.createCommentVNode("",!0),t.value?.data.targetId&&t.value?.data.targetId!=="full"?(e.openBlock(),e.createElementBlock("div",Ua,[O[9]||(O[9]=e.createElementVNode("h4",null,"检测目标参数",-1)),t.value?.data?.arguments?.configMode==="perDevice"&&G.value.length>0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(te,{modelValue:S.value,"onUpdate:modelValue":O[1]||(O[1]=I=>S.value=I),placeholder:"搜索设备...",clearable:"",size:"small",class:"device-search"},{prefix:e.withCtx(()=>[e.createVNode(z,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Search))]),_:1})]),_:1},8,["modelValue"]),e.createElementVNode("div",Wa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,I=>(e.openBlock(),e.createElementBlock("div",{key:String(I.sourceId??I.id??I),class:e.normalizeClass(["device-list-item",{"is-active":p.value===String(I.sourceId??I.id??I),"has-custom":r.value[String(I.sourceId??I.id??I)]}]),onClick:K=>p.value=String(I.sourceId??I.id??I)},[e.createElementVNode("span",Ya,e.toDisplayString(I.sourceName??I.name??String(I.sourceId??I.id??I)),1),r.value[String(I.sourceId??I.id??I)]?(e.openBlock(),e.createBlock(X,{key:0,content:"已单独配置参数",placement:"right"},{default:e.withCtx(()=>[...O[8]||(O[8]=[e.createElementVNode("span",{class:"custom-dot"},"✔",-1)])]),_:1})):e.createCommentVNode("",!0)],10,Ja))),128)),V.value.length===0?(e.openBlock(),e.createElementBlock("div",Xa," 无匹配设备 ")):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createBlock(E,{key:0,"label-position":"top",size:"default",style:{"margin-top":"12px"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,I=>e.withDirectives((e.openBlock(),e.createBlock(n,{key:I.key,required:I.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(I.label),1),I.key==="x_ratio"||I.key==="y_ratio"?(e.openBlock(),e.createBlock(X,{key:0,placement:"right","show-arrow":!0,"popper-class":"position-info-tooltip","hide-after":0},{content:e.withCtx(()=>[e.createVNode(Ve)]),default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})):I.description?(e.openBlock(),e.createBlock(X,{key:1,content:I.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[I.options&&I.type==="string"?(e.openBlock(),e.createBlock(R,{key:0,"model-value":i(I.key),onChange:K=>N(I.key,K),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.options,(K,re)=>(e.openBlock(),e.createBlock(Z,{key:K,label:I.optionLabels?I.optionLabels[re]:K,value:K},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):I.type==="boolean"?(e.openBlock(),e.createBlock(le,{key:1,"model-value":i(I.key),onChange:K=>N(I.key,K)},null,8,["model-value","onChange"])):I.type==="number"||I.type==="integer"?(e.openBlock(),e.createBlock(pe,{key:2,"model-value":i(I.key),onChange:K=>N(I.key,K),min:I.min,max:I.max,step:I.step||(I.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):w(I)?(e.openBlock(),e.createBlock(Be,{key:3,"primary-field":I,"paired-field":c(I),"primary-value":i(I.key),"paired-value":i(I["x-paired-with"]),onUpdate:(K,re)=>B(I.key,K,I["x-paired-with"],re)},null,8,["primary-field","paired-field","primary-value","paired-value","onUpdate"])):I.type==="array"&&!I.options?(e.openBlock(),e.createElementBlock("div",Qa,[e.createVNode(te,{"model-value":W(I.key),onChange:K=>A(I.key,K),type:"textarea",rows:3,placeholder:I.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):I.type==="array"&&I.options?(e.openBlock(),e.createBlock(R,{key:5,"model-value":i(I.key),onChange:K=>N(I.key,K),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.options,(K,re)=>(e.openBlock(),e.createBlock(Z,{key:K,label:I.optionLabels?I.optionLabels[re]:K,value:K},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(te,{key:6,"model-value":i(I.key),onInput:K=>N(I.key,K),maxlength:I.maxLength,"show-word-limit":!!I.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!I.dependsOn||x(I)]])),128))]),_:1})):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createBlock(E,{key:1,"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,I=>e.withDirectives((e.openBlock(),e.createBlock(n,{key:I.key,required:I.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(I.label),1),I.key==="x_ratio"||I.key==="y_ratio"?(e.openBlock(),e.createBlock(X,{key:0,placement:"right","show-arrow":!0,"popper-class":"position-info-tooltip","hide-after":0},{content:e.withCtx(()=>[e.createVNode(Ve)]),default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})):I.description?(e.openBlock(),e.createBlock(X,{key:1,content:I.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[I.options&&I.type==="string"?(e.openBlock(),e.createBlock(R,{key:0,"model-value":i(I.key),onChange:K=>N(I.key,K),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.options,(K,re)=>(e.openBlock(),e.createBlock(Z,{key:K,label:I.optionLabels?I.optionLabels[re]:K,value:K},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):I.type==="boolean"?(e.openBlock(),e.createBlock(le,{key:1,"model-value":i(I.key),onChange:K=>N(I.key,K)},null,8,["model-value","onChange"])):I.type==="number"||I.type==="integer"?(e.openBlock(),e.createBlock(pe,{key:2,"model-value":i(I.key),onChange:K=>N(I.key,K),min:I.min,max:I.max,step:I.step||(I.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):w(I)?(e.openBlock(),e.createBlock(Be,{key:3,"primary-field":I,"paired-field":c(I),"primary-value":i(I.key),"paired-value":i(I["x-paired-with"]),onUpdate:(K,re)=>B(I.key,K,I["x-paired-with"],re)},null,8,["primary-field","paired-field","primary-value","paired-value","onUpdate"])):I.type==="array"&&!I.options?(e.openBlock(),e.createElementBlock("div",Ka,[e.createVNode(te,{"model-value":W(I.key),onChange:K=>A(I.key,K),type:"textarea",rows:3,placeholder:I.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):I.type==="array"&&I.options?(e.openBlock(),e.createBlock(R,{key:5,"model-value":i(I.key),onChange:K=>N(I.key,K),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.options,(K,re)=>(e.openBlock(),e.createBlock(Z,{key:K,label:I.optionLabels?I.optionLabels[re]:K,value:K},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(te,{key:6,"model-value":i(I.key),onInput:K=>N(I.key,K),maxlength:I.maxLength,"show-word-limit":!!I.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!I.dependsOn||x(I)]])),128))]),_:1}))])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-d53c8063"]]),va={class:"config-header"},el={class:"config-section"},tl={key:0,style:{"margin-bottom":"8px"}},ol=ne({__name:"TargetCountConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=L=>{if(!t.value)return;const p={...t.value.data.arguments,conditionRelation:L};o.updateNodeData(t.value.id,{arguments:p})},C=()=>{if(!t.value)return;const p=[...t.value.data.arguments?.alertConditions||[],{operator:">",value:0}],S={...t.value.data.arguments,alertConditions:p};o.updateNodeData(t.value.id,{arguments:S})},T=(L,p,S)=>{if(!t.value)return;const V=[...t.value.data.arguments?.alertConditions||[]];V[L]={...V[L],[p]:S};const r={...t.value.data.arguments,alertConditions:V};o.updateNodeData(t.value.id,{arguments:r})},D=L=>{if(!t.value)return;const p=[...t.value.data.arguments?.alertConditions||[]];p.splice(L,1);const S={...t.value.data.arguments,alertConditions:p};o.updateNodeData(t.value.id,{arguments:S})},G=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(L,p)=>{const S=e.resolveComponent("el-button"),V=e.resolveComponent("el-divider"),r=e.resolveComponent("el-text"),y=e.resolveComponent("el-option"),s=e.resolveComponent("el-select"),M=e.resolveComponent("el-input-number"),P=e.resolveComponent("el-radio"),g=e.resolveComponent("el-radio-group"),F=e.resolveComponent("el-form-item"),u=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",va,[p[1]||(p[1]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(S,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:G},null,8,["icon"]))]),e.createVNode(V),e.createElementVNode("div",el,[p[9]||(p[9]=e.createElementVNode("h4",null,"目标计数配置",-1)),e.createVNode(u,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(F,null,{label:e.withCtx(()=>[p[3]||(p[3]=e.createElementVNode("span",null,"计数条件",-1)),e.createVNode(r,{size:"small",type:"info",style:{"margin-left":"8px"}},{default:e.withCtx(()=>[...p[2]||(p[2]=[e.createTextVNode("(必填)",-1)])]),_:1})]),default:e.withCtx(()=>[e.createVNode(r,{size:"small",type:"info",style:{display:"block","margin-bottom":"8px"}},{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createTextVNode(" 当目标数量满足下列条件时才上报 ",-1)])]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value?.data.arguments?.alertConditions||[],(w,c)=>(e.openBlock(),e.createElementBlock("div",{key:c,style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px",width:"100%","box-sizing":"border-box"}},[e.createVNode(s,{"model-value":w.operator,onChange:b=>T(c,"operator",b),style:{width:"120px","flex-shrink":"0"}},{default:e.withCtx(()=>[e.createVNode(y,{label:"等于 =",value:"="}),e.createVNode(y,{label:"大于 >",value:">"}),e.createVNode(y,{label:"小于 <",value:"<"}),e.createVNode(y,{label:"大于等于 ≥",value:">="}),e.createVNode(y,{label:"小于等于 ≤",value:"<="})]),_:1},8,["model-value","onChange"]),e.createVNode(M,{"model-value":w.value,onChange:b=>T(c,"value",b),min:0,precision:0,max:9999,style:{flex:"1"},"controls-position":"right",placeholder:"请输入数值"},null,8,["model-value","onChange"]),(t.value?.data.arguments?.alertConditions||[]).length>1?(e.openBlock(),e.createBlock(S,{key:0,type:"danger",icon:e.unref(Q.Delete),circle:"",size:"small",onClick:b=>D(c)},null,8,["icon","onClick"])):e.createCommentVNode("",!0)]))),128)),(t.value?.data.arguments?.alertConditions||[]).length>=2?(e.openBlock(),e.createElementBlock("div",tl,[e.createVNode(r,{size:"small",style:{"margin-right":"8px"}},{default:e.withCtx(()=>[...p[5]||(p[5]=[e.createTextVNode("条件关系:",-1)])]),_:1}),e.createVNode(g,{"model-value":t.value?.data.arguments?.conditionRelation||"OR",onChange:p[0]||(p[0]=w=>l(w))},{default:e.withCtx(()=>[e.createVNode(P,{value:"OR"},{default:e.withCtx(()=>[...p[6]||(p[6]=[e.createTextVNode("OR(满足任一)",-1)])]),_:1}),e.createVNode(P,{value:"AND"},{default:e.withCtx(()=>[...p[7]||(p[7]=[e.createTextVNode("AND(同时满足)",-1)])]),_:1})]),_:1},8,["model-value"])])):e.createCommentVNode("",!0),e.createVNode(S,{type:"text",link:"",icon:e.unref(Q.Plus),onClick:C},{default:e.withCtx(()=>[...p[8]||(p[8]=[e.createTextVNode(" 添加条件 ",-1)])]),_:1},8,["icon"])]),_:1})]),_:1})])])}}},[["__scopeId","data-v-3dcd1bfb"]]),nl={class:"config-header"},al={class:"config-section"},ll={style:{display:"flex","align-items":"center",gap:"8px"}},rl={style:{display:"flex","align-items":"center",gap:"8px"}},sl={style:{display:"flex","align-items":"center",gap:"8px"}},il=ne({__name:"TimerTargetConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),d=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>d===oe.TASK),l=y=>{if(!t.value)return;const s={...t.value.data.arguments,duration:y};o.updateNodeData(t.value.id,{arguments:s})},C=y=>{if(!t.value)return;const s={...t.value.data.arguments,similarity_enabled:y};o.updateNodeData(t.value.id,{arguments:s})},T=y=>{if(!t.value)return;const s={...t.value.data.arguments,similarity_threshold:y};o.updateNodeData(t.value.id,{arguments:s})},D=y=>{if(!t.value)return;const s={...t.value.data.arguments,hit_rate_enabled:y};o.updateNodeData(t.value.id,{arguments:s})},G=y=>{if(!t.value)return;const s={...t.value.data.arguments,hit_rate_operator:y};o.updateNodeData(t.value.id,{arguments:s})},L=y=>{if(!t.value)return;const s={...t.value.data.arguments,hit_rate_threshold:y};o.updateNodeData(t.value.id,{arguments:s})},p=y=>{if(!t.value)return;const s=t.value.data.arguments?.overlap_detection||{},M={...t.value.data.arguments,overlap_detection:{operator:s.operator??"gt",threshold:s.threshold??90,...s,enabled:y}};o.updateNodeData(t.value.id,{arguments:M})},S=y=>{if(!t.value)return;const s={...t.value.data.arguments,overlap_detection:{...t.value.data.arguments?.overlap_detection,operator:y}};o.updateNodeData(t.value.id,{arguments:s})},V=y=>{if(!t.value)return;const s={...t.value.data.arguments,overlap_detection:{...t.value.data.arguments?.overlap_detection,threshold:y}};o.updateNodeData(t.value.id,{arguments:s})},r=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(y,s)=>{const M=e.resolveComponent("el-button"),P=e.resolveComponent("el-divider"),g=e.resolveComponent("el-input-number"),F=e.resolveComponent("el-text"),u=e.resolveComponent("el-form-item"),w=e.resolveComponent("el-switch"),c=e.resolveComponent("el-icon"),b=e.resolveComponent("el-tooltip"),q=e.resolveComponent("el-slider"),m=e.resolveComponent("el-option"),f=e.resolveComponent("el-select"),i=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",nl,[s[9]||(s[9]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(M,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:r},null,8,["icon"]))]),e.createVNode(P),e.createElementVNode("div",al,[s[13]||(s[13]=e.createElementVNode("h4",null,"目标计时配置",-1)),e.createVNode(i,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(u,{label:"持续时间(秒)",required:""},{default:e.withCtx(()=>[e.createVNode(g,{"model-value":t.value?.data.arguments?.duration??30,onChange:s[0]||(s[0]=N=>l(N)),min:1,max:3600,precision:0,style:{width:"100%"},"controls-position":"right"},null,8,["model-value"]),e.createVNode(F,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...s[10]||(s[10]=[e.createTextVNode(" 目标需要持续出现的时间阈值(1-3600秒) ",-1)])]),_:1})]),_:1}),e.createVNode(u,{label:"目标追踪"},{default:e.withCtx(()=>[e.createElementVNode("div",ll,[e.createVNode(w,{"model-value":t.value?.data.arguments?.similarity_enabled??!1,onChange:s[1]||(s[1]=N=>C(N))},null,8,["model-value"]),e.createVNode(b,{content:"当连续多张图片中目标的相似度大于阈值时,表示多张图片中的目标为同一个目标",placement:"top"},{default:e.withCtx(()=>[e.createVNode(c,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.similarity_enabled?(e.openBlock(),e.createBlock(u,{key:0,label:"目标相似度阈值(%)",required:""},{default:e.withCtx(()=>[e.createVNode(q,{"model-value":t.value?.data.arguments?.similarity_threshold??90,onInput:s[2]||(s[2]=N=>T(N)),min:0,max:100,step:1,"show-input":"","show-input-controls":!1},null,8,["model-value"]),e.createVNode(F,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...s[11]||(s[11]=[e.createTextVNode(" 判定为同一目标的相似度阈值 ",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(u,{label:"目标命中次数"},{default:e.withCtx(()=>[e.createElementVNode("div",rl,[e.createVNode(w,{"model-value":t.value?.data.arguments?.hit_rate_enabled??!1,onChange:s[3]||(s[3]=N=>D(N))},null,8,["model-value"]),e.createVNode(b,{content:"当连续多张图片中多次出现了目标时,表示目标行为在持续",placement:"top"},{default:e.withCtx(()=>[e.createVNode(c,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.hit_rate_enabled?(e.openBlock(),e.createBlock(u,{key:1,label:"命中次数判断条件",required:""},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":t.value?.data.arguments?.hit_rate_operator??"gte",onChange:s[4]||(s[4]=N=>G(N)),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(m,{label:"大于 >",value:"gt"}),e.createVNode(m,{label:"大于等于 >=",value:"gte"}),e.createVNode(m,{label:"等于 =",value:"eq"}),e.createVNode(m,{label:"小于等于 <=",value:"lte"}),e.createVNode(m,{label:"小于 <",value:"lt"})]),_:1},8,["model-value"])]),_:1})):e.createCommentVNode("",!0),t.value?.data.arguments?.hit_rate_enabled?(e.openBlock(),e.createBlock(u,{key:2,label:"目标命中次数",required:""},{default:e.withCtx(()=>[e.createVNode(g,{"model-value":t.value?.data.arguments?.hit_rate_threshold??2,onChange:s[5]||(s[5]=N=>L(N)),min:2,max:1e3,precision:0,style:{width:"100%"},"controls-position":"right"},null,8,["model-value"]),e.createVNode(F,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...s[12]||(s[12]=[e.createTextVNode(" 连续图片中目标出现的最低次数(2-1000) ",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(u,{label:"目标框重合检测"},{default:e.withCtx(()=>[e.createElementVNode("div",sl,[e.createVNode(w,{"model-value":t.value?.data.arguments?.overlap_detection?.enabled||!1,onChange:s[6]||(s[6]=N=>p(N))},null,8,["model-value"]),e.createVNode(b,{content:"通过检测相邻画面中目标框的重合比例来判断目标是否发生了移动",placement:"top"},{default:e.withCtx(()=>[e.createVNode(c,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.overlap_detection?.enabled?(e.openBlock(),e.createBlock(u,{key:3,label:"重合运算条件",required:""},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":t.value?.data.arguments?.overlap_detection?.operator??"gt",onChange:s[7]||(s[7]=N=>S(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(u,{key:4,label:"重合比例(%)",required:""},{default:e.withCtx(()=>[e.createVNode(g,{"model-value":t.value?.data.arguments?.overlap_detection?.threshold??90,onChange:s[8]||(s[8]=N=>V(N)),min:0,max:100,precision:2,style:{width:"100%"},"controls-position":"right"},null,8,["model-value"])]),_:1})):e.createCommentVNode("",!0)]),_:1})])])}}},[["__scopeId","data-v-2969d123"]]),cl={class:"node-config-panel"},dl={class:"config-content"},ml=ne({__name:"NodeConfigPanel",setup(a){const o=ae(),t={edge:ln,group:sn,start:An,end:Rn,classificationModel:zn,ocr:Jn,licensePlate:Qn,face:Qe,stream:aa,dataSource:ua,smallModel:$a,detectionTarget:Za,targetCount:ol,timerTarget:il,faceRecognition:Qe},d=e.computed(()=>{const _=o.selectedEdge;if(_)return o.nodes.find(T=>T.id===_.source)?.data?.enableBranch&&t.edge||null;const l=o.selectedNode;return l&&t[l.type]||null});return(_,l)=>(e.openBlock(),e.createElementBlock("div",cl,[e.createElementVNode("div",dl,[d.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.value),{key:0})):e.createCommentVNode("",!0)])]))}},[["__scopeId","data-v-5b5a9ed3"]]),pl={class:"workflow-editor",id:"workflow-editor"},ul={class:"editor-content"},fl={__name:"WorkflowEditor",props:{mode:{type:String,default:oe.ALGORITHM,validator:a=>Object.values(oe).includes(a)},pageMode:{type:String,default:Ne.CREATE,validator:a=>Object.values(Ne).includes(a)},taskModeConfig:{type:Object,default:()=>null},algorithmModeConfig:{type:Object,default:()=>null},echoAlgodata:{type:Object,default:()=>null},echoTaskData:{type:Object,default:()=>null}},setup(a,{expose:o}){const t=a,d=String(e.getCurrentInstance()?.uid??Math.random().toString(36).slice(2));e.provide("workflowInstanceId",d),e.provide("editorMode",t.mode),e.provide("pageMode",e.computed(()=>t.pageMode)),e.provide("taskModeConfig",e.computed(()=>t.taskModeConfig)),e.provide("selectedDevicesMap",e.ref({}));const _=e.computed(()=>t.mode==="task"?t.taskModeConfig:t.algorithmModeConfig);e.provide("editorConfig",_),e.provide("echoAlgodata",e.computed(()=>t.echoAlgodata)),e.provide("echoTaskData",e.computed(()=>t.echoTaskData));const l=ae(d),{copyToClipboard:C,downloadJSON:T,exportToJSON:D}=Ue(t.mode,l,_),{runValidation:G}=We(t.mode,l,e.computed(()=>t.taskModeConfig));e.onUnmounted(()=>{it(d)});const L=e.computed(()=>{if(l.selectedNodeId)return!0;const S=l.selectedEdge;return S?!!l.nodes.find(r=>r.id===S.source)?.data?.enableBranch:!1});return o({reset:()=>{l.resetWorkflow()},runTest:G,copyJSON:C,exportJSON:D}),(S,V)=>(e.openBlock(),e.createElementBlock("div",pl,[e.createVNode(wt),e.createElementVNode("div",ul,[e.createVNode(Dt),e.createVNode(tn),e.createVNode(e.Transition,{name:"slide-right"},{default:e.withCtx(()=>[L.value?(e.openBlock(),e.createBlock(ml,{key:0})):e.createCommentVNode("",!0)]),_:1})])]))}},Ze=ne(fl,[["__scopeId","data-v-aa57c0fe"]]),gl={Box:Q.Box,CircleCheck:Q.CircleCheck,CircleClose:Q.CircleClose,Close:Q.Close,CopyDocument:Q.CopyDocument,Cpu:Q.Cpu,DArrowLeft:Q.DArrowLeft,DataAnalysis:Q.DataAnalysis,Delete:Q.Delete,Document:Q.Document,Download:Q.Download,FolderOpened:Q.FolderOpened,Grid:Q.Grid,Loading:Q.Loading,Plus:Q.Plus,QuestionFilled:Q.QuestionFilled,RefreshLeft:Q.RefreshLeft,Search:Q.Search,Timer:Q.Timer,Upload:Q.Upload,User:Q.User,View:Q.View,VideoPlay:Q.VideoPlay,Warning:Q.Warning},ve=a=>{Object.entries(gl).forEach(([o,t])=>{a.component(o,t)}),a.component("WorkflowEditor",Ze)},hl={install:ve};se.EditorMode=oe,se.NodeType=k,se.PageMode=Ne,se.WorkflowEditor=Ze,se.default=hl,se.install=ve,Object.defineProperties(se,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
1
+ (function(se,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):(se=typeof globalThis<"u"?globalThis:se||self,e(se.AIFlowUI={},se.Vue,se.ElementPlusIconsVue,se.ElementPlus,se.Pinia,se.VueFlowCore,se.VueFlowBackground,se.VueFlowControls,se.VueFlowNodeResizer))})(this,(function(se,e,Q,v,et,ee,tt,ot,nt){"use strict";const b={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"},de={IMAGE_BRANCH:"imageBranch",SMALL_MODEL:"smallModel",SMALL_MODEL_BRANCH:"smallModelBranch"},at={[b.DETECTION_TARGET]:"检测目标",[b.CLASSIFICATION_MODEL]:"分类模型",[b.OCR]:"OCR识别",[b.LICENSE_PLATE]:"车牌识别",[b.TARGET_COUNT]:"目标计数",[b.TIMER_TARGET]:"目标计时",[b.FACE_RECOGNITION]:"人脸识别",[b.SMALL_MODEL]:"小模型"},lt={cls:b.CLASSIFICATION_MODEL,ocr:b.OCR,license_plate:b.LICENSE_PLATE,target_count:b.TARGET_COUNT,timer_target:b.TIMER_TARGET,face:b.FACE_RECOGNITION,face_recognition:b.FACE_RECOGNITION},oe={ALGORITHM:"algorithm",TASK:"task"},Ne={CREATE:"create",EDIT:"edit",DETAIL:"detail"},me=a=>`${a}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,Ae=a=>({id:me("start"),type:"start",position:a,data:{label:"开始",algorithmName:"",enableBranch:!0,branchLogic:"and",groupWindowSeconds:5,taskName:"",streamType:"image",enableAlertVideo:!1,executionTime:"",schedule:[]}}),Ee=a=>({id:me("end"),type:"end",position:a,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}}}),we=a=>({id:me("dataSource"),type:"dataSource",position:a,data:{label:"数据源",enableImageSequence:!1,input_schema:{properties:{needCooperativeDetection:{type:"boolean",title:"是否需要协同检测",description:"开启协同检测后,该数据源下的多个摄像机画面会按协同条件检测。使用此算法的任务将不支持轮巡",default:!1},windowSeconds:{type:"integer",title:"协同检测等待时间(秒)",description:"等待接收数据源下所有摄像机返回图片的最大时长。若超时仍未收齐全部图片,将自动终止本次协同分析",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},enableImageSequence:{type:"boolean",title:"开启图片时序",description:"开启后将区分首帧检测和后续帧检测",default:!1}},required:[]},arguments:{needCooperativeDetection:!1,windowSeconds:5,enableImageSequence:!1,deviceType:"camera"},enableBranch:!0,branchLogic:"and"}}),De=(a,o="默认模型")=>({id:me("smallModel"),type:"smallModel",position:a,data:{label:"小模型",modelName:o,modelId:null,input_schema:{},arguments:{}}}),Le=(a,o="检测目标")=>({id:me("detectionTarget"),type:"detectionTarget",position:a,data:{label:"检测目标",targetName:o,targetId:null,input_schema:{},arguments:{}}}),Me=(a,o="分类模型")=>({id:me("classificationModel"),type:"classificationModel",position:a,data:{label:"分类模型",modelName:o,input_schema:{},arguments:{}}}),Oe=a=>({id:me("ocr"),type:"ocr",position:a,data:{label:"OCR识别",input_schema:{},arguments:{}}}),Ie=a=>({id:me("licensePlate"),type:"licensePlate",position:a,data:{label:"车牌识别",input_schema:{},arguments:{}}}),Re=a=>({id:me("targetCount"),type:"targetCount",position:a,data:{label:"目标计数",description:"",arguments:{targets:[],alertConditions:[{operator:">",value:0}],conditionRelation:"AND"},input_schema:{targets:{required:!0,type:"array",minLength:1},alertConditions:{required:!1,type:"array"}}}}),$e=a=>({id:me("timerTarget"),type:"timerTarget",position:a,data:{label:"目标计时",description:"",arguments:{duration:30,similarity_enabled:!1,similarity_threshold:90,hit_rate_enabled:!1,hit_rate_operator:"gte",hit_rate_threshold:2,overlap_detection:{enabled:!1,operator:"gt",threshold:90}},input_schema:{}}}),rt=(a,o={width:300,height:160},t="and",c=null)=>({id:me("group"),type:"group",position:a,style:{width:`${o.width}px`,height:`${o.height}px`},data:{label:"并行组",branchLogic:t,sourceNodeId:c},selectable:!0,deletable:!1,zIndex:-1}),Fe=a=>({id:me("faceRecognition"),type:"faceRecognition",position:a,data:{label:"人脸识别",input_schema:{},arguments:{}}}),ye=new Map,qe=()=>{const a=Ae({x:80,y:300}),o=we({x:320,y:300}),t=Ee({x:1e3,y:300}),c={id:`e_${a.id}_${o.id}`,source:a.id,target:o.id,data:{branchOrder:1}};return{nodes:[a,o,t],edges:[c]}},st=a=>et.defineStore(`aiflow-workflow-${a}`,()=>{const o=qe(),t=e.ref(o.nodes),c=e.ref(o.edges),_=e.ref(null),l=e.ref(null),C=e.ref(new Set),T=e.ref(new Set),D=e.ref({}),G=(R,n,x,j)=>{D.value[R]||(D.value[R]={}),D.value[R][n]||(D.value[R][n]={}),D.value[R][n][x]={...j}},M=(R,n,x,j,Y)=>{D.value[R]||(D.value[R]={}),D.value[R][n]||(D.value[R][n]={}),D.value[R][n][x]||(D.value[R][n][x]={}),D.value[R][n][x][j]=Y},y=(R,n,x)=>D.value[R]?.[n]?.[x]??null,S=()=>{D.value={}},V=e.computed(()=>_.value?t.value.find(R=>R.id===_.value):null),r=e.computed(()=>l.value?c.value.find(R=>R.id===l.value):null),N=R=>t.value.filter(n=>n.type===R).length,s=()=>{const R=t.value.filter(n=>n.type===b.DATA_SOURCE);R.length!==0&&(R.length===1?R[0].data.label="数据源":R.forEach((n,x)=>{n.data.label=`数据源 ${x+1}`}))},L=()=>t.value.filter(R=>R.type===b.DATA_SOURCE).length,P=()=>t.value.filter(n=>n.type===b.DATA_SOURCE).some(n=>n.data.arguments?.needCooperativeDetection===!0),f=()=>{const R=L(),n=P();return!(R>1||n)},q=R=>{t.value.push(R),R.type===b.DATA_SOURCE&&s()},p=R=>{const n=t.value.find(j=>j.id===R),x=n?.type===b.DATA_SOURCE;if(n?.type==="group"){k(R),c.value=c.value.filter(j=>j.source!==R&&j.target!==R),_.value===R&&(_.value=null);return}t.value=t.value.filter(j=>j.id!==R),c.value=c.value.filter(j=>j.source!==R&&j.target!==R),_.value===R&&(_.value=null),x&&s()},w=(R,n)=>{const x=t.value.find(j=>j.id===R);x&&(x.data={...x.data,...n})},g=(R,n)=>{const x=t.value.find(j=>j.id===R);x&&(x.position=n)},u=R=>{const n=t.value.find(x=>x.id===R.source);if(n&&(n.type===b.START||n.type===b.DATA_SOURCE)&&n.data?.enableBranch===!0){const j=c.value.filter(Y=>Y.source===R.source).length+1;R={...R,data:{...R.data,branchOrder:j}}}c.value=ee.addEdge(R,c.value)},$=R=>{const n=c.value.find(x=>x.id===R);if(c.value=c.value.filter(x=>x.id!==R),l.value===R&&(l.value=null),n&&n.data?.branchOrder!==void 0){const x=t.value.find(j=>j.id===n.source);x&&(x.type===b.START||x.type===b.DATA_SOURCE)&&c.value.filter(Y=>Y.source===n.source).sort((Y,z)=>(Y.data?.branchOrder||0)-(z.data?.branchOrder||0)).forEach((Y,z)=>{Y.data?Y.data.branchOrder=z+1:Y.data={branchOrder:z+1}})}},d=(R,n="and",x=null)=>{const j=rt(R,{width:300,height:160},n,x);return t.value.unshift(j),j.id},m=(R,n)=>{const x=t.value.find(z=>z.id===R),j=t.value.find(z=>z.id===n);if(!x||!j||x.parentNode===n)return;x.parentNode&&i(R);const Y=t.value.find(z=>z.id===R);Y&&(t.value=t.value.map(z=>z.id!==R?z:{...z,position:{x:Y.position.x-j.position.x,y:Y.position.y-j.position.y},parentNode:n,extent:"parent"}))},i=R=>{const n=t.value.find(z=>z.id===R);if(!n||!n.parentNode)return;const x=t.value.find(z=>z.id===n.parentNode),j=x?n.position.x+x.position.x:n.position.x,Y=x?n.position.y+x.position.y:n.position.y;t.value=t.value.map(z=>{if(z.id!==R)return z;const X={...z,position:{x:j,y:Y}};return delete X.parentNode,delete X.extent,X})},k=R=>{const n=t.value.find(x=>x.id===R);n&&(t.value=t.value.filter(x=>x.id!==R).map(x=>{if(x.parentNode!==R)return x;const j={...x,position:{x:x.position.x+n.position.x,y:x.position.y+n.position.y}};return delete j.parentNode,delete j.extent,j}))};return{nodes:t,edges:c,selectedNodeId:_,selectedEdgeId:l,invalidNodeIds:C,invalidEdgeIds:T,selectedNode:V,selectedEdge:r,getNodeCountByType:N,getDataSourceCount:L,hasCooperativeDetection:P,supportPatrol:f,addNode:q,removeNode:p,updateNodeData:w,updateNodePosition:g,addConnection:u,removeEdge:$,updateEdgeData:(R,n)=>{const x=c.value.find(j=>j.id===R);if(x){if(n.branchOrder!==void 0){const j=t.value.find(Y=>Y.id===x.source);if(j&&(j.type===b.START||j.type===b.DATA_SOURCE)){const Y=x.data?.branchOrder,z=n.branchOrder;if(Y!==z&&z!==null){const te=c.value.filter(le=>le.source===x.source&&le.id!==R).find(le=>le.data?.branchOrder===z);te&&(te.data?te.data.branchOrder=Y:te.data={branchOrder:Y})}}}x.data={...x.data,...n}}},selectNode:R=>{_.value=R,l.value=null},selectEdge:R=>{l.value=R,_.value=null},clearSelection:()=>{_.value=null,l.value=null},resetWorkflow:()=>{const R=qe();t.value=R.nodes,c.value=R.edges,_.value=null,l.value=null,S()},loadWorkflow:(R,n)=>{t.value=R,c.value=n,_.value=null,l.value=null,S()},refreshDataSourceLabels:s,createEmptyGroup:d,addNodeToGroup:m,removeNodeFromGroup:i,dissolveParallelGroup:k,initializeSubsequentFrames:R=>{t.value.find(x=>x.id===R)&&w(R,{subsequentFrames:[{id:"default-subsequent",label:"后续帧检测",handleId:"subsequent-frame"}]})},addSubsequentFrame:(R,n)=>{const x=t.value.find(j=>j.id===R);!x||x.type!=="dataSource"||(x.data.subsequentFrames||(x.data.subsequentFrames=[]),x.data.subsequentFrames.push(n),w(R,{subsequentFrames:[...x.data.subsequentFrames]}))},removeSubsequentFrame:(R,n)=>{const x=t.value.find(z=>z.id===R);if(!x||x.type!=="dataSource")return;const j=x.data.subsequentFrames.find(z=>z.id===n);j&&c.value.filter(X=>X.source===R&&X.sourceHandle===j.handleId).forEach(X=>$(X.id));const Y=x.data.subsequentFrames.filter(z=>z.id!==n);Y.forEach((z,X)=>{z.id==="default-subsequent"?z.label="后续帧检测":z.label=`后续帧检测${X+1}`}),w(R,{subsequentFrames:Y})},setInvalidIds:(R,n)=>{C.value=new Set(R),T.value=new Set(n)},clearInvalidIds:()=>{C.value=new Set,T.value=new Set},taskSources:D,setTaskSourceArguments:G,updateTaskSourceArgument:M,getTaskSourceArguments:y,clearTaskSources:S}}),ae=(a=null)=>{const o=a??e.inject("workflowInstanceId","default");return ye.has(o)||ye.set(o,st(o)),ye.get(o)()},it=a=>{if(ye.has(a)){try{ye.get(a)().$dispose()}catch{}ye.delete(a)}},Ge=(a,o,t)=>{const c=[],_=[],l=a.filter(s=>s.type!=="group"),C=l.filter(s=>s.type===b.START);C.length===0?c.push("工作流必须包含一个开始节点"):C.length>1&&c.push("工作流只能包含一个开始节点");const T=l.filter(s=>s.type===b.END);T.length===0?c.push("工作流必须包含一个结束节点"):T.length>1&&c.push("工作流只能包含一个结束节点");const D=l.filter(s=>s.type===b.DATA_SOURCE);D.length===0&&c.push("工作流必须至少包含一个数据源节点"),l.filter(s=>s.type===b.DETECTION_TARGET||s.type===b.SMALL_MODEL||s.type===b.CLASSIFICATION_MODEL).length===0&&c.push("工作流必须至少包含一个检测目标、内置小模型或分类模型"),l.some(s=>s.type===b.SMALL_MODEL),D.some(s=>s.data.arguments?.needCooperativeDetection===!0),D.length>1,l.forEach(s=>{const L=o.filter(f=>f.target===s.id),P=o.filter(f=>f.source===s.id);if(s.type===b.START&&L.length>0&&_.push("开始节点不应有输入连接"),s.type===b.END&&P.length>0&&_.push("结束节点不应有输出连接"),s.type===b.START&&P.length===0&&c.push("开始节点必须有输出连接"),s.type===b.END&&L.length===0&&c.push("结束节点必须有输入连接"),s.type===b.DATA_SOURCE&&s.data.enableImageSequence)if(P.length===0)c.push({nodeId:s.id,message:`数据源节点"${s.data.label}"开启了图片时序但未连接到任何处理节点`});else{const f=P.filter(g=>g.sourceHandle==="first-frame"),q=s.data.subsequentFrames||[],p=new Set(P.map(g=>g.sourceHandle)),w=q.filter(g=>!p.has(g.handleId));f.length===0&&_.push({nodeId:s.id,message:`数据源节点"${s.data.label}"的首帧检测未连接`}),w.length>0&&_.push({nodeId:s.id,message:`数据源节点"${s.data.label}"有${w.length}个后续帧未连接`})}s.type!==b.START&&s.type!==b.END&&!s.parentNode&&(L.length===0||P.length===0)&&_.push(`节点 "${s.data.label}" 可能未正确连接`)});const M=new Set;o.forEach(s=>{const L=a.find(P=>P.id===s.source);L?.type==="dataSource"&&L.data?.enableImageSequence===!0&&s.sourceHandle!=="first-frame"&&(!s.data?.timeWindowSeconds||s.data.timeWindowSeconds<1)&&c.push({edgeId:s.id,message:`分支"${s.data?.branchName||"未命名"}"缺少必填项:后续检测帧的持续时间`}),M.add(s.source),M.add(s.target)}),l.forEach(s=>{s.parentNode||!M.has(s.id)&&l.length>1&&_.push(`节点 "${s.data.label}" 未连接到工作流`)});const y=ct(l,o);c.push(...y);const S=mt(l,o);c.push(...S);const V=dt(l);c.push(...V);const r=pt(l,o);c.push(...r);const N=ut(l,o);return c.push(...N),t==="task"&&l.filter(L=>L.type===b.FACE_RECOGNITION).forEach(L=>{(!L.data.arguments?.repositoryId||Array.isArray(L.data.arguments.repositoryId)&&L.data.arguments.repositoryId.length===0)&&c.push({nodeId:L.id,message:`人脸识别节点"${L.data.label}"未选择人脸库,任务模式下人脸库为必选项`})}),{valid:c.length===0,errors:c,warnings:_}},ct=(a,o)=>{const t=[],c=a.find(C=>C.type===b.START);if(!c)return t;const _=new Set,l=(C,T,D,G)=>{if(T.includes(C))return;const M=a.find(N=>N.id===C);if(!M)return;const y=[...T,C];let S=[...D],V=[...G];if(M.type===b.TARGET_COUNT&&S.push(M),M.type===b.TIMER_TARGET&&V.push(M),M.type===b.END){const N=y.join("->");_.has(N)||(_.add(N),S.length>1&&t.push(`工作流分支中存在多个目标计数节点(${S.map(s=>`"${s.data.label}"`).join("、")}),每条分支只允许一个目标计数节点`),V.length>1&&t.push(`工作流分支中存在多个目标计时节点(${V.map(s=>`"${s.data.label}"`).join("、")}),每条分支只允许一个目标计时节点`));return}const r=o.filter(N=>N.source===C);r.length===0?(S.length>1&&t.push(`工作流分支中存在多个目标计数节点(${S.map(N=>`"${N.data.label}"`).join("、")}),每条分支只允许一个目标计数节点`),V.length>1&&t.push(`工作流分支中存在多个目标计时节点(${V.map(N=>`"${N.data.label}"`).join("、")}),每条分支只允许一个目标计时节点`)):r.forEach(N=>{l(N.target,y,S,V)})};return l(c.id,[],[],[]),t},dt=a=>{const o=[],t=a.filter(_=>_.type===b.DATA_SOURCE),c=a.filter(_=>_.type===b.SMALL_MODEL);return c.length>0&&t.length>1&&c.forEach(_=>{o.push({nodeId:_.id,message:`小模型节点"${_.data.label||_.data.modelName}"不支持多数据源场景,请确保工作流中只有一个数据源节点`})}),o},mt=(a,o)=>{const t=[];return a.filter(_=>_.type===b.DATA_SOURCE).forEach(_=>{const l=o.filter(C=>C.source===_.id);if(l.length>1){const C=l.map(G=>G.target),D=a.filter(G=>C.includes(G.id)).filter(G=>G.type===b.SMALL_MODEL);if(D.length>0){const G=D.map(M=>`"${M.data.label||M.data.modelName}"`).join("、");t.push(`数据源节点"${_.data.label}"开启了多分支,不能包含小模型节点(${G})。小模型节点只能出现在单分支场景中(数据源只有一个直连下游节点)`)}}}),t},pt=(a,o)=>{const t=[],c=[b.TARGET_COUNT,b.TIMER_TARGET],_={[b.TARGET_COUNT]:"目标计数",[b.TIMER_TARGET]:"目标计时"};return a.filter(C=>C.type===b.SMALL_MODEL).forEach(C=>{o.filter(D=>D.source===C.id).forEach(D=>{const G=a.find(M=>M.id===D.target);if(G&&c.includes(G.type)){const M=_[G.type]||G.type;t.push(`小模型节点"${C.data.label||C.data.modelName}"不能直接连接${M}节点"${G.data.label}",请先连接检测目标节点`)}})}),t},ut=(a,o)=>{const t=[],c=[b.OCR,b.LICENSE_PLATE,b.FACE_RECOGNITION],_={[b.OCR]:"OCR识别",[b.LICENSE_PLATE]:"车牌识别",[b.FACE_RECOGNITION]:"人脸识别"};return a.filter(C=>c.includes(C.type)).forEach(C=>{const T=o.filter(M=>M.source===C.id),D=c.filter(M=>M!==C.type).concat(b.END),G=C.data.label||_[C.type];T.forEach(M=>{const y=a.find(S=>S.id===M.target);y&&!D.includes(y.type)&&t.push(`${G}节点"${G}"只能连接除自身外的辅助节点或结束节点,当前连接到了"${y.data.label||y.type}"节点`)}),T.length===0&&t.push(`${G}节点"${G}"必须连接到其他辅助节点或结束节点`)}),t},He=a=>{const o=new Map;return a.forEach(t=>o.set(t.id,t)),o},ue=(a,o,t)=>(a[o]||[]).map(c=>t.get(c)).filter(Boolean),je=(a,o)=>{const t={},c=new Set(a.filter(l=>l.type==="group").map(l=>l.id));return[...o].sort((l,C)=>{const T=l.data?.branchOrder??1/0,D=C.data?.branchOrder??1/0;return T-D}).forEach(l=>{if(c.has(l.source)&&c.has(l.target))return;let C=l.source,T=l.target;if(c.has(C)){const D=o.find(G=>G.target===C&&!c.has(G.source));if(!D)return;C=D.source}if(c.has(T)){const D=o.find(G=>G.source===T&&!c.has(G.target));if(!D)return;T=D.target}t[C]||(t[C]=[]),t[C].includes(T)||t[C].push(T)}),t},Pe=(a,o)=>{const t=[...o.values()].find(C=>C.type===b.START);if(!t)return[];const c=new Set,_=[],l=C=>{if(c.has(C))return;c.add(C);const T=o.get(C);if(!T)return;T.type!==b.START&&T.type!==b.END&&T.type!=="group"&&_.push(T),(a[C]||[]).forEach(G=>l(G))};return l(t.id),_},ft=["detectionScope","description","detectionType","builtinTarget","universalTargetName","customModel","cloudModel","enableMultiFrame","continuousTime","lines","target_class"],be=(a,o,t,c)=>{const _=a.nodes.findIndex(C=>C.toolTitle===o);if(_===-1)return;const l=a.nodes[_];l.arguments?.[t]&&(a[c]=l.arguments[t]),a.nodes=a.nodes.filter((C,T)=>T!==_),a.nodes.forEach((C,T)=>{C.sortOrder=T+1})},gt=a=>{const o=a.alertConditions||[];return{targetCount:{logic:a.conditionRelation||"AND",rules:o.map(c=>({op:c.operator,value:c.value}))}}},ht=a=>{const o={op:">",value:a.duration??30,unit:"seconds"};if(a.hit_rate_enabled&&a.hit_rate_threshold!==void 0){const c={gt:">",gte:">=",eq:"=",lte:"<=",lt:"<"};o.hitCount={op:c[a.hit_rate_operator||"gte"]||">=",value:a.hit_rate_threshold}}const t=a.overlap_detection;if(t?.enabled&&t?.threshold!==void 0){const c=t.operator||"gt",_={gt:">",eq:"=",lt:"<"};o.overlap={op:_[c]||">",value:t.threshold,matchFrames:3}}return a.similarity_enabled&&a.similarity_threshold!==void 0&&(o.similarity={op:">",value:a.similarity_threshold,matchFrames:3}),{duration:o}},yt={[b.TARGET_COUNT]:gt,[b.TIMER_TARGET]:ht},Ce=(a,o)=>{if(!a)return{};const t=yt[o];if(t)return t(a);const c={...a};return ft.forEach(_=>{delete c[_]}),Object.keys(c).forEach(_=>{const l=c[_];(l==null||l==="")&&delete c[_]}),o===b.FACE_RECOGNITION&&c.repositoryId!==void 0&&(Array.isArray(c.repositoryId)||(c.repositoryId=[c.repositoryId]),c.repositoryId.length===0&&delete c.repositoryId),c},_t=a=>{switch(a.type){case b.DETECTION_TARGET:return a.data.targetId||"";case b.CLASSIFICATION_MODEL:return"cls";case b.OCR:return"ocr";case b.LICENSE_PLATE:return"license_plate";case b.SMALL_MODEL:return a.data.title||a.data.modelName||"";case b.TARGET_COUNT:return"target_count";case b.TIMER_TARGET:return"timer_target";case b.FACE_RECOGNITION:return"face";default:return a.data.label||""}},Nt=(a,o,t,c,_=null)=>{const l={toolTitle:_t(a),nodeName:a.data.label||a.data.targetName||"",sortOrder:o,arguments:Ce(_??a.data.arguments,a.type)};if(a.data.enableBranch&&a.data.branchLogic&&(l.branchLogic=a.data.branchLogic),t){const C=c.find(T=>T.source===t&&T.target===a.id);C?.data?.branchOrder!==void 0&&C?.data?.branchOrder!==null&&(l.branchOrder=C.data.branchOrder)}return l},ze=(a,o,t,c,_,l=null,C=[])=>{const T=[],D=Array.isArray(a)?[...a]:[a],G=new Set;let M=1;for(;D.length>0;){const y=[...D];D.length=0;const S=[];y.forEach(V=>{if(G.has(V))return;G.add(V);const r=c.get(V);!r||r.type===b.END||r.type===b.START||r.type===b.DATA_SOURCE||((t[V]||[]).forEach(s=>{const L=c.get(s);L&&L.type!==b.END&&D.push(s)}),C.includes(r.type))||S.push(r)}),S.length>0&&(S.forEach(V=>{const r=l?.(V.id)??null,N=Nt(V,M,o,_,r);S.length>1&&(N.nodeLogic="or"),T.push(N)}),M++)}return T},Ct=(a=null,o=null)=>{const t=a??ae(),c=e.inject("editorMode",oe.ALGORITHM);e.inject("pageMode",Ne.CREATE);const _=o??e.inject("editorConfig",null),l=e.computed(()=>Ge(t.nodes,t.edges,c)),C=(d,m,i,k)=>{if(i){const E=ue(d,i.id,m).find(J=>J.type===b.SMALL_MODEL);if(E)return E}return k.find(E=>E.type===b.SMALL_MODEL)||null},T=(d,m,i)=>{const E=ue(m,d.id,i).find(A=>A.type===b.SMALL_MODEL);return E?ue(m,E.id,i).filter(A=>A.type!==b.END&&A.type!==b.START&&A.type!==b.DATA_SOURCE).length>0?de.SMALL_MODEL_BRANCH:de.SMALL_MODEL:de.IMAGE_BRANCH},D=(d,m,i,k,E)=>{if(m===de.SMALL_MODEL||m===de.SMALL_MODEL_BRANCH){const A=C(k,E,i,d);return A?{toolTitle:A.data.title||A.data.modelName||"",toolType:"small",arguments:Ce(A.data.arguments,b.SMALL_MODEL)}:null}const J=d.find(A=>A.type===b.DETECTION_TARGET);return J?{toolTitle:J.data.targetId||"",toolType:"stream",decoder:{swDecoding:!1,mode:0,interval:0},arguments:Ce(J.data.arguments,b.DETECTION_TARGET)}:null},G=()=>{const d=t.nodes.find(k=>k.type===b.END);if(!d||!d.data.arguments)return{};const m=d.data.arguments,i={};return m.reportFrequency==="interval"&&m.reportInterval&&(i.interval={value:m.reportInterval}),m.enableDeduplication&&m.similarityThreshold!==void 0&&(i.dedup={value:m.similarityThreshold}),i},M=d=>{if(d.length<=1)return;const m=d.map(k=>k.sortOrder);if(new Set(m).size!==m.length){const k=m.filter((E,J)=>m.indexOf(E)!==J);throw new Error(`分支执行顺序存在重复:${[...new Set(k)].join(", ")}。请在配置面板中修改分支边的执行顺序,确保每个分支的执行顺序唯一。`)}},y=(d,m,i,k,E)=>{let J=[],A;if(d===de.IMAGE_BRANCH)m&&(J=ue(k,m.id,E).filter(B=>B.type!==b.END)),A=m?.id||i.find(B=>B.type===b.DATA_SOURCE)?.id;else if(d===de.SMALL_MODEL_BRANCH){const B=C(k,E,m,i);B&&(J=ue(k,B.id,E).filter(F=>F.type!==b.END),A=B.id)}return{branchStartNodes:J,sourceNodeId:A}},S=new Set([b.DETECTION_TARGET,b.CLASSIFICATION_MODEL,b.SMALL_MODEL]),V=(d,m,i)=>{const k=new Set,E=[],J=A=>{if(k.has(A))return;k.add(A);const B=i.get(A);if(!B||B.type===b.END)return;S.has(B.type)&&E.push(B),(m[A]||[]).forEach(W=>J(W))};return J(d),E.length>0?E[E.length-1]:null},r=(d,m,i,k,E)=>{const J=`分支${E+1}`,A=V(m,i,k);if(!A)return d?.data?.nodeName||J;if(A.type===b.DETECTION_TARGET&&A.data?.targetId==="other"){const F=A.data?.arguments?.object;if(Array.isArray(F)&&F.length>0){const W=F.join(",");return W.length>32?W.slice(0,32):W}}if(A.type===b.CLASSIFICATION_MODEL){const F=A.data?.arguments?.modelName||A.data?.label;if(!F)return J;const W=A.data?.arguments?.resultNegate?"(取反)":"";return F+W}return A.data?.label||A.data?.targetName||J},N=(d,m,i,k,E,J)=>{const{branchStartNodes:A,sourceNodeId:B}=y(m,i,d,k,E);if(A.length===0)return[];const F=[];return A.forEach((W,h)=>{const O=ze([W.id],B,k,E,J);if(O.length===0)return;const H=B?J.find(n=>n.source===B&&n.target===W.id):null,U=H?.data||{},Z=U.branchOrder!==void 0&&U.branchOrder!==null?U.branchOrder:h+1,R={branchName:U.branchName||r(W,W.id,k,E,h),sortOrder:Z,nodes:O};H?.sourceHandle&&(R.sourceHandle=H.sourceHandle),be(R,"target_count","targetCount","targetCount"),be(R,"timer_target","duration","duration"),U.timeWindowSeconds!==void 0&&U.timeWindowSeconds!==null&&(R.timeWindowSeconds=U.timeWindowSeconds),U.branchDescription&&(R.description=U.branchDescription),F.push(R)}),M(F),F},s=()=>{const d=l.value;if(d.errors.length>0){const m=d.errors.map(i=>typeof i=="object"?i.message:i);return v.ElMessage.error(`验证失败: ${m.join(", ")}`),!1}return d.warnings.length>0&&v.ElMessage.warning(`警告: ${d.warnings.join(", ")}`),!0},L=()=>{const d=t.nodes,m=t.edges,i=He(d),k=je(d,m),E=Pe(k,i),J=[...i.values()].find(A=>A.type===b.START);return{allNodes:d,edges:m,nodeMap:i,adj:k,orderedNodes:E,startNode:J}},P=d=>{const m={ruleName:d?.data?.algorithmName||"",description:"",webhookUrl:""},i=G();Object.keys(i).length>0&&(m.extraConfig=i);const E=(_?.value??_)?.platform;return m.attach=E?{platform:E}:{},m},f=(d,m)=>{const i=d.filter(k=>k.type===b.DATA_SOURCE);if(i.length===0){const k=m.find(E=>E.type===b.DATA_SOURCE);k&&i.push(k)}return i},q=d=>d?.data?.enableImageSequence||d?.data?.arguments?.enableImageSequence||!1?"order":d?.data?.enableBranch&&d.data.branchLogic||"and",p=(d,m,i,k)=>{const{orderedNodes:E,adj:J,nodeMap:A,edges:B}=m,F=T(d,J,A),W=!!d.data.arguments?.needCooperativeDetection,h=B.find(R=>R.target===d.id),O=h?.data?.branchOrder!==void 0&&h?.data?.branchOrder!==null?h.data.branchOrder:k+1,H={sourceGroupId:null,name:d.data.label||"数据源",sort:O,synEnabled:W};if(W&&(H.windowSeconds=d.data.arguments?.windowSeconds||5),F===de.SMALL_MODEL){const R=D(E,F,d,J,A);return R&&(H.streamConfig=R),H.logic="and",H.children=[],H}if(F===de.SMALL_MODEL_BRANCH){const R=D(E,F,d,J,A);R&&(H.streamConfig=R)}H.logic=q(d);const U=N(E,F,d,J,A,B),Z=i.length;return H.children=U.map((R,n)=>({name:R.branchName,branchRefs:[Z+n]})),i.push(...U),H},w=(d,m)=>{const k={groupLogic:d?.data?.enableBranch&&d.data.branchLogic||"and",sourceGroups:m};return m.length>=2&&(k.groupWindowSeconds=d.data.groupWindowSeconds),k},g=()=>{if(!s())return null;try{const d=L(),m=P(d.startNode),i=f(d.orderedNodes,d.allNodes),k=[],E=i.map((J,A)=>p(J,d,k,A));return m.ruleSchema=w(d.startNode,E),k.length>0&&(m.branches=k),{name:m.ruleName,description:m.description,graph:m}}catch(d){return v.ElMessage.error(d.message||"导出失败"),null}};return{validation:l,exportToJSON:g,copyToClipboard:()=>{try{const d=g();if(!d)return;const m=JSON.stringify(d,null,2);if(navigator.clipboard?.writeText)navigator.clipboard.writeText(m).then(()=>{v.ElMessage.success("已复制到剪贴板")}).catch(()=>{v.ElMessage.error("复制失败")});else{const i=document.createElement("textarea");i.value=m,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),v.ElMessage.success("已复制到剪贴板")}}catch(d){console.error("复制JSON失败:",d),v.ElMessage.error(`复制失败: ${d.message}`)}},downloadJSON:()=>{const d=g();if(!d)return;const m=JSON.stringify(d,null,2),i=new Blob([m],{type:"application/json"}),k=URL.createObjectURL(i),E=document.createElement("a");E.href=k,E.download=`workflow_${Date.now()}.json`,E.click(),URL.revokeObjectURL(k),v.ElMessage.success("导出成功")}}},kt=(a=null,o=null)=>{const t=a??ae();e.inject("editorMode",oe.TASK),e.inject("pageMode",Ne.CREATE);const c=e.inject("editorConfig",null),_=e.inject("taskModeConfig",null),l=o??c,C=o??_,T=e.inject("echoTaskData",null),D=e.inject("selectedDevicesMap",null),G=e.computed(()=>({errors:[],warnings:[]})),M=(f,q)=>{const p={},w=q?.data?.arguments??{};w.reportFrequency==="interval"&&w.reportInterval&&(p.interval={value:w.reportInterval}),w.enableDeduplication&&w.similarityThreshold!==void 0&&(p.dedup={value:w.similarityThreshold}),t.nodes.filter($=>$.type===b.DATA_SOURCE).length>=2&&f?.data?.groupWindowSeconds!==void 0&&(p.groupWindowSeconds=f.data.groupWindowSeconds),p.enableVideo=!!f?.data?.enableAlertVideo;const u=f?.data?.schedule;return Array.isArray(u)&&u.length>0?p.schedule=u:p.schedule=[{dayType:"0",timePeriod:[{startTime:"00:00",endTime:"24:00"}]}],p},y=(f,q,p,w,g="image")=>{const u=ue(q,f.id,p).find($=>$.type===b.SMALL_MODEL);if(u){const $=f.data?.arguments??{};return{toolTitle:u.data.title||u.data.modelName||"",toolType:"small",arguments:Ce(u.data.arguments,b.SMALL_MODEL),decoder:S($,!0)}}if(g==="stream"){const $=w.find(m=>m.type===b.DETECTION_TARGET);if(!$)return null;const d=f.data?.arguments??{};return{toolTitle:$.data.targetId||"",toolType:"stream",arguments:Ce($.data.arguments,b.DETECTION_TARGET),decoder:S(d,!1)}}return null},S=(f,q)=>{const p=f.mode??(q?3:0),w=f.interval??0,g=f.sw_decoding??(q?"CPU":"GPU");let u=0,$=0;return q?p===3?(u=0,$=0):p===2?(u=1,$=0):p===1&&(u=0,$=w):p===0?(u=0,$=w*25):p===1?(u=0,$=w):p===2&&(u=1,$=0),{sw_decoding:g==="CPU",mode:u,interval:$}},V=(f,q,p,w,g=null)=>{let u=f.id,$=ue(q,f.id,p).filter(i=>i.type!==b.END&&i.type!==b.START);$.length===1&&$[0].type===b.SMALL_MODEL&&(u=$[0].id,$=ue(q,u,p).filter(i=>i.type!==b.END&&i.type!==b.START));const d=$;if(d.length===0)return[];const m=g?i=>t.getTaskSourceArguments(f.id,g,i):null;return d.map((i,k)=>{const E=ze([i.id],u,q,p,w,m,[b.SMALL_MODEL]),J=w.find(h=>h.source===u&&h.target===i.id),A=J?.data??{},B=A.branchOrder??k+1,F=A.branchId??null,W={branchId:F,id:F,branchName:A.branchName||i.data?.label||`分支${k+1}`,sortOrder:B,nodes:E};return J?.sourceHandle&&(W.sourceHandle=J.sourceHandle),A.timeWindowSeconds!==void 0&&A.timeWindowSeconds!==null&&(W.timeWindowSeconds=A.timeWindowSeconds),A.branchDescription&&(W.description=A.branchDescription),be(W,"target_count","targetCount","targetCount"),be(W,"timer_target","duration","duration"),W})},r=(f,q,p,w,g=null,u=null,$=null,d=1,m=!1,i=!1)=>{const k=g??f.deviceType??"",E=k==="1400"||k==="2",J=E?"1400":"camera",A=q==="stream"?2:1,B=E&&u!==null?u==="device"?1:2:f.detectionType??2,W=(T?.value??T)?.graph?.sources??[],h=String(f.sourceId??f.id??""),H=W.find(Z=>String(Z.sourceId)===h)?.attach??{},U={deviceType:J,detectionType:B,dataSourceType:A,sourceOrder:p,timeTemplateId:H.timeTemplateId??"",timeTemplateName:H.timeTemplateName??"",platform:w?.platform??"TAI"};if(!E){const Z=$?.mode??0;Z===3?(U.frameExtractionType=0,U.frameInterval=0):Z===2?(U.frameExtractionType=i?1:3,U.frameInterval=0):(U.frameExtractionType=Z+1,U.frameInterval=$?.interval??30);const R=$?.sw_decoding??"CPU";U.frameExtractionSourceType=R==="GPU"?2:1,d===1&&q==="image"&&!m&&!!$?.enablePatrol?U.pollingConfig={enablePolling:1,pollingAmount:String(Math.max(1,$?.patrolGroupSize??1)),pollingInterval:"0"}:U.pollingConfig={enablePolling:0},U.thirdId=f.thirdId??""}return U},N=(f,q,p,w,g,u,$)=>{const d=C?.value??C,m=d?.value??d,i=D?.value?.[f.id]??[],k=f.data?.sourceGroupId??null,E=!!f.data?.arguments?.needCooperativeDetection,J=E?f.data?.arguments?.windowSeconds??5:void 0,A=q?.data?.streamType??"image",B=ue(p,f.id,w).some(n=>n.type===b.SMALL_MODEL),F=B?"small":A,W=y(f,p,w,$,A),h=f.data?.arguments?.deviceType??null,O=f.data?.arguments?.detectionMode??null,H=f.data?.arguments??null,U=t.getDataSourceCount();if(i.length>0)return i.map((n,x)=>{const j=String(n.sourceId??n.id??""),Y=V(f,p,w,g,j),z={sourceId:n.sourceId??n.id??"",sourceName:n.sourceName??n.name??"",sourceType:F,sourceGroupId:k,areas:n.area??n.areas??[],lines:n.lines??null,direction:n.direction??null,branches:Y,attach:r(n,A,x,m,h,O,H,U,E,B),synEnabled:E,...J!==void 0&&{windowSeconds:J}};return W&&(z.streamConfig=W,z.streamUrl="rtsp"),z});const Z=V(f,p,w,g),R={sourceId:"",sourceName:f.data?.label??"数据源",sourceType:F,sourceGroupId:k,areas:[],branches:Z,attach:r({},A,0,m,h,O,H,U,E,B),synEnabled:E};return W&&(R.streamConfig=W,R.streamUrl="rtsp"),[R]},s=()=>{try{const f=t.nodes,q=t.edges,p=He(f),w=je(f,q),g=[...p.values()].find(H=>H.type===b.START),u=[...p.values()].find(H=>H.type===b.END),$=l?.value??l,d=$?.value??$,m=Pe(w,p);let i=m.filter(H=>H.type===b.DATA_SOURCE);i.length===0&&(i=f.filter(H=>H.type===b.DATA_SOURCE));const k=i.flatMap((H,U)=>N(H,g,w,p,q,U,m)),E={workflowName:g?.data?.taskName??"",ruleId:d?.ruleId??"",sources:k,extraConfig:M(g,u),description:""},A=i[0]?.data?.arguments??{},B=A.mode??0,F=A.interval??0;let W,h,O;return B===0?(W="time",h=F,O=0):(W="frame",h=0,B===3?O=0:B===2?O=-1:O=F),{name:E.workflowName,type:"simple",plan:E.extraConfig.schedule??[],inferStrategy:W,timeInterval:h,frameInterval:O,mps:E.extraConfig.enableVideo??!1,graph:E}}catch(f){return v.ElMessage.error(f.message||"导出失败"),null}};return{validation:G,exportToJSON:s,copyToClipboard:()=>{const f=s();if(!f)return;const q=JSON.stringify(f,null,2);if(navigator.clipboard?.writeText)navigator.clipboard.writeText(q).then(()=>v.ElMessage.success("已复制到剪贴板")).catch(()=>v.ElMessage.error("复制失败"));else{const p=document.createElement("textarea");p.value=q,p.style.position="fixed",p.style.opacity="0",document.body.appendChild(p),p.select(),document.execCommand("copy"),document.body.removeChild(p),v.ElMessage.success("已复制到剪贴板")}},downloadJSON:()=>{const f=s();if(!f)return;const q=JSON.stringify(f,null,2),p=new Blob([q],{type:"application/json"}),w=URL.createObjectURL(p),g=document.createElement("a");g.href=w,g.download=`task_workflow_${Date.now()}.json`,g.click(),URL.revokeObjectURL(w),v.ElMessage.success("导出成功")}}},Ue=(a=null,o=null,t=null)=>{const c=e.inject("editorMode",oe.ALGORITHM);return(a??c)===oe.TASK?kt(o,t):Ct(o,t)},bt=a=>{if(!a)return null;const o=a.indexOf("{");if(o===-1)return null;try{return JSON.parse(a.slice(o))}catch{return null}};function We(a=null,o=null,t=null,c=null){const _=o??ae(),l=e.inject("editorMode",oe.ALGORITHM),C=a??l;e.inject("taskModeConfig",null);const T=e.inject("selectedDevicesMap",null),D=c??T,G=S=>{const{type:V,data:r}=S,N=r.arguments||{},s=[];switch(V){case b.START:if(C===oe.TASK)if(r.taskName?.trim()||s.push("任务名称"),!r.executionTime?.trim())s.push("任务执行时间");else{const L=bt(r.executionTime);(!L||!Array.isArray(L.plan)||L.plan.length===0)&&s.push("任务执行时间(计划为空)")}else r.algorithmName?.trim()||s.push("算法名称");break;case b.SMALL_MODEL:r.modelId||s.push("模型选择");break;case b.DETECTION_TARGET:r.targetId||s.push("检测目标选择");break;case b.CLASSIFICATION_MODEL:N.modelId||s.push("分类模型选择");break;case b.DATA_SOURCE:C===oe.TASK&&(D?.value?.[S.id]??[]).length===0&&s.push("设备选择");break;case b.TARGET_COUNT:break;case b.TIMER_TARGET:(!N.duration||N.duration<1)&&s.push("持续时间");break}return s},M=S=>{const V=_.nodes.find(N=>N.id===S.source);if(!V)return[];const r=[];return V.type===b.DATA_SOURCE&&V.data?.enableImageSequence===!0&&S.sourceHandle!=="first-frame"&&(!S.data?.timeWindowSeconds||S.data.timeWindowSeconds<1)&&r.push("后续检测帧的持续时间"),r};return{runValidation:()=>{const{nodes:S,edges:V}=_;_.clearInvalidIds();const r=Ge(S,V,C),N=r.errors,s=[],L=[],P=[];S.filter(u=>u.type!=="group").forEach(u=>{const $=G(u);$.length>0&&(s.push(u.id),P.push(`节点"${u.data.label}"缺少必填参数:${$.join("、")}`))}),V.forEach(u=>{const $=M(u);$.length>0&&(L.push(u.id),P.push(`分支"${u.data?.branchName||"未命名"}"缺少:${$.join("、")}`))}),N.forEach(u=>{typeof u=="object"&&(u.nodeId&&s.push(u.nodeId),u.edgeId&&L.push(u.edgeId))}),(s.length>0||L.length>0)&&(_.setInvalidIds(s,L),setTimeout(()=>{_.clearInvalidIds()},5e3));const q=N.map(u=>typeof u=="object"?u.message:u),p=r.warnings.map(u=>typeof u=="object"?u.message:u),w=[...q.map(u=>({msg:u,type:"error"})),...P.map(u=>({msg:u,type:"warning"})),...p.map(u=>({msg:u,type:"warning"}))],g=q.length===0&&P.length===0;if(g&&p.length===0)v.ElMessage.success("校验通过,所有节点和分支参数配置正确");else if(w.length>0){const u=w[0];v.ElMessage[u.type](u.msg)}return{passed:g,errors:[...q,...P],warnings:p}}}}const ne=(a,o)=>{const t=a.__vccOpts||a;for(const[c,_]of o)t[c]=_;return t},xt={class:"toolbar"},Et={class:"toolbar-right"},wt=ne({__name:"WorkflowToolbar",setup(a){const o=ae(),{copyToClipboard:t,downloadJSON:c}=Ue(),{runValidation:_}=We(),l=()=>{o.resetWorkflow()},C=()=>{_()},T=()=>{t()},D=()=>{c()};return(G,M)=>{const y=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",xt,[M[4]||(M[4]=e.createElementVNode("div",{class:"toolbar-left"},[e.createElementVNode("h2",null,"AIPass 算法编排系统")],-1)),e.createElementVNode("div",Et,[e.createVNode(y,{type:"info",icon:e.unref(Q.RefreshLeft),onClick:l},{default:e.withCtx(()=>[...M[0]||(M[0]=[e.createTextVNode(" 重置 ",-1)])]),_:1},8,["icon"]),e.createVNode(y,{type:"danger",icon:e.unref(Q.CircleCheck),onClick:C},{default:e.withCtx(()=>[...M[1]||(M[1]=[e.createTextVNode(" 运行测试 ",-1)])]),_:1},8,["icon"]),e.createVNode(y,{type:"success",icon:e.unref(Q.CopyDocument),onClick:T},{default:e.withCtx(()=>[...M[2]||(M[2]=[e.createTextVNode(" 复制JSON ",-1)])]),_:1},8,["icon"]),e.createVNode(y,{type:"warning",icon:e.unref(Q.Download),onClick:D},{default:e.withCtx(()=>[...M[3]||(M[3]=[e.createTextVNode(" 导出JSON ",-1)])]),_:1},8,["icon"])])])}}},[["__scopeId","data-v-17ee463c"]]),Tt={key:0},St={class:"node-list"},Vt={class:"node-list"},Bt={class:"node-list"},At={class:"node-list"},Dt=ne({__name:"NodeToolbox",setup(a){const o=e.ref(!0),t=e.ref(["basic","data","calculation","algorithm"]),c=(_,l)=>{_.dataTransfer&&(_.dataTransfer.setData("application/vueflow",l),_.dataTransfer.effectAllowed="move")};return(_,l)=>{const C=e.resolveComponent("el-icon"),T=e.resolveComponent("VideoPlay"),D=e.resolveComponent("CircleClose"),G=e.resolveComponent("el-collapse-item"),M=e.resolveComponent("FolderOpened"),y=e.resolveComponent("Cpu"),S=e.resolveComponent("View"),V=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:l[1]||(l[1]=r=>!o.value&&(o.value=!0))},[o.value?(e.openBlock(),e.createElementBlock("h3",Tt,"节点工具箱")):(e.openBlock(),e.createBlock(C,{key:1,class:"collapsed-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Grid))]),_:1})),o.value?(e.openBlock(),e.createBlock(C,{key:2,class:"toggle-btn",onClick:l[0]||(l[0]=e.withModifiers(r=>o.value=!1,["stop"]))},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.DArrowLeft))]),_:1})):e.createCommentVNode("",!0)]),o.value?(e.openBlock(),e.createBlock(V,{key:0,modelValue:t.value,"onUpdate:modelValue":l[13]||(l[13]=r=>t.value=r),class:"toolbox-content"},{default:e.withCtx(()=>[e.createVNode(G,{title:"基础节点",name:"basic"},{default:e.withCtx(()=>[e.createElementVNode("div",St,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[2]||(l[2]=r=>c(r,"start"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(T)]),_:1}),l[14]||(l[14]=e.createElementVNode("span",null,"开始节点",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[3]||(l[3]=r=>c(r,"end"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(D)]),_:1}),l[15]||(l[15]=e.createElementVNode("span",null,"结束节点",-1))],32)])]),_:1}),e.createVNode(G,{title:"规则节点",name:"data"},{default:e.withCtx(()=>[e.createElementVNode("div",Vt,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[4]||(l[4]=r=>c(r,"dataSource"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(M)]),_:1}),l[16]||(l[16]=e.createElementVNode("span",null,"数据源",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[5]||(l[5]=r=>c(r,"smallModel"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(y)]),_:1}),l[17]||(l[17]=e.createElementVNode("span",null,"小模型",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[6]||(l[6]=r=>c(r,"detectionTarget"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(S)]),_:1}),l[18]||(l[18]=e.createElementVNode("span",null,"检测目标",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[7]||(l[7]=r=>c(r,"classificationModel"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Grid))]),_:1}),l[19]||(l[19]=e.createElementVNode("span",null,"分类模型",-1))],32)])]),_:1}),e.createVNode(G,{title:"计算节点",name:"calculation"},{default:e.withCtx(()=>[e.createElementVNode("div",Bt,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[8]||(l[8]=r=>c(r,"targetCount"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.DataAnalysis))]),_:1}),l[20]||(l[20]=e.createElementVNode("span",null,"目标计数",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[9]||(l[9]=r=>c(r,"timerTarget"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Timer))]),_:1}),l[21]||(l[21]=e.createElementVNode("span",null,"目标计时",-1))],32)])]),_:1}),e.createVNode(G,{title:"辅助节点",name:"algorithm"},{default:e.withCtx(()=>[e.createElementVNode("div",At,[e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[10]||(l[10]=r=>c(r,"ocr"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Document))]),_:1}),l[22]||(l[22]=e.createElementVNode("span",null,"OCR识别",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[11]||(l[11]=r=>c(r,"licensePlate"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Document))]),_:1}),l[23]||(l[23]=e.createElementVNode("span",null,"车牌识别",-1))],32),e.createElementVNode("div",{class:"toolbox-node",draggable:"true",onDragstart:l[12]||(l[12]=r=>c(r,"faceRecognition"))},[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.User))]),_:1}),l[24]||(l[24]=e.createElementVNode("span",null,"人脸识别",-1))],32)])]),_:1})]),_:1},8,["modelValue"])):e.createCommentVNode("",!0)],2)}}},[["__scopeId","data-v-fac9714d"]]);class Te{static backendToFrontend(o){const{id:t,title:c,name:_,inputSchema:l,extraConfig:C}=o,T={id:t,title:c,label:_,type:"DETECTION_TARGET",inputSchema:l,extraConfig:C,data:{targetId:c,targetName:_,description:_,areas:l?.properties?.areas?.default||[],threshold:l?.properties?.threshold?.default||.5,targetWidth:l?.properties?.targetWidth?.default||20,targetHeight:l?.properties?.targetHeight?.default||20,postmodel:l?.properties?.postmodel?.default||"ClipVit",expandRect:l?.properties?.expandRect?.default!==void 0?l.properties.expandRect.default:!1,topScale:l?.properties?.topScale?.default||1.6,bottomScale:l?.properties?.bottomScale?.default||1.6,leftScale:l?.properties?.leftScale?.default||1.6,rightScale:l?.properties?.rightScale?.default||1.6,enableStructure:C?.showStruct!==void 0?!1:void 0}};return Object.keys(T.data).forEach(D=>{T.data[D]===void 0&&delete T.data[D]}),T}}const ie={START_X:80,START_Y:300,H_GAP:240,V_GAP:180},Je=a=>at[a]||a,he=(a,o,t={})=>({id:me(a),type:a,position:{...o},data:{label:t.label||Je(a),...t}}),ke=(a,o,t={})=>{const{sourceHandle:c,..._}=t,l={id:`e_${a}_${o}`,source:a,target:o};return c&&(l.sourceHandle=c),Object.keys(_).length>0&&(l.data=_),l},Lt=a=>{if(!a)return{targets:[],alertConditions:[{operator:">",value:0}],conditionRelation:"AND"};const o=a.rules||[],t=a.logic||"AND";return{targets:[],countType:"conditional_count",conditionRelation:t,alertConditions:o.map(c=>({operator:c.op,value:c.value}))}},Mt=a=>{if(!a)return{duration:30,condition_type:"similarity",similarity_threshold:90,hit_rate_enabled:!1,hit_rate_operator:"gt",hit_rate_threshold:2,overlap_detection:{enabled:!1,operator:"gt",threshold:null},reset_timer:!1};const o={">":"gt",">=":"gte","=":"eq","<=":"lte","<":"lt"};return{duration:a.value??30,condition_type:a.similarity?"similarity":"hit_rate",similarity_enabled:!!a.similarity,similarity_threshold:a.similarity?.value??90,hit_rate_enabled:!!a.hitCount,hit_rate_operator:o[a.hitCount?.op]||"gt",hit_rate_threshold:a.hitCount?.value??2,overlap_detection:a.overlap?{enabled:!0,operator:o[a.overlap.op]||"gt",threshold:a.overlap.value}:{enabled:!1,operator:"gt",threshold:null},reset_timer:!1}},Ot=a=>{if(!a)return{};const o={};return a.interval&&(o.reportFrequency="interval",o.reportInterval=a.interval.value),a.dedup&&(o.enableDeduplication=!0,o.similarityThreshold=a.dedup.value),o},It=()=>({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"]}),Rt=()=>({properties:{needCooperativeDetection:{type:"boolean",title:"是否需要协同检测",default:!1},windowSeconds:{type:"integer",title:"协同检测等待时间(秒)",description:"等待接收数据源下所有摄像机返回图片的最大时长。若超时仍未收齐全部图片,将自动终止本次协同分析",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},enableImageSequence:{type:"boolean",title:"开启图片时序",default:!1}},required:[]}),$t=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,a=>{const o=Math.random()*16|0;return(a==="x"?o:o&3|8).toString(16)}),Ye=()=>{const a=ae(),o=e.inject("editorConfig",null),t=f=>lt[f]||b.DETECTION_TARGET,c=(f,q)=>f?.find(p=>p.id===String(q))??f?.[q],_=(f,q)=>f.streamConfig?(f.children||[]).some(g=>(g.branchRefs||[]).some(u=>c(q.branches,u)))?de.SMALL_MODEL_BRANCH:de.SMALL_MODEL:de.IMAGE_BRANCH,l=f=>!f||typeof f!="object"?"无效的JSON格式":!f.ruleName&&f.ruleName!==""?"缺少 ruleName 字段":f.ruleSchema?.sourceGroups?.length?null:"缺少 ruleSchema.sourceGroups",C=f=>{const q=o?.value??o;return f==="small"?q?.smallModels||[]:f==="detection"?q?.detection||[]:f==="classification"?q?.classification?.models||[]:[]},T=()=>{},D=(f,q)=>{f.modelName=q||"",f.title=q||"",f.modelId=q||null;const w=C("small").find(g=>g.title===q);w&&(f.input_schema=w.inputSchema||w.input_schema||{},f.modelId=w.id||w.title,f.modelName=w.name||q,f.modelType=w.type,f.supportDirectAlert=w.supportDirectAlert||!1,f.extraConfig=w.extraConfig)},G=async(f,q)=>{const p=t(f.toolTitle),w={label:f.nodeName||Je(p),arguments:f.arguments||{},input_schema:{}};switch(p){case b.DETECTION_TARGET:w.targetId=f.toolTitle,w.targetName=f.nodeName||"检测目标";{const u=C("detection").find($=>$.title===f.toolTitle);if(u){let d=Te.backendToFrontend(u).inputSchema||{};if(f.toolTitle==="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}}};d={...d,properties:{...d.properties,...m.properties}}}w.input_schema=d}}break;case b.CLASSIFICATION_MODEL:w.modelName=f.nodeName||"分类模型";break;case b.SMALL_MODEL:D(w,f.toolTitle);break}return f.branchLogic&&(w.enableBranch=!0,w.branchLogic=f.branchLogic),he(p,q,w)},M=(f,q,p,w)=>{const g={label:"小模型",input_schema:{},arguments:f.arguments||{}};return D(g,f.toolTitle),q===de.SMALL_MODEL_BRANCH&&(g.enableBranch=!0,g.branchLogic=p.logic||"and"),he("smallModel",w,g)},y=async(f,q,p,w,g,u)=>{let $=q,d=w;const m={branchOrder:f.sortOrder??1,branchName:f.branchName||"",branchId:f.id??null};f.sourceHandle&&(m.sourceHandle=f.sourceHandle);const i=f.timeWindowSeconds??f.extraConfig?.timeWindowSeconds;i!==void 0&&(m.timeWindowSeconds=i),f.description&&(m.branchDescription=f.description);const k=[...f.nodes||[]].sort((h,O)=>(h.sortOrder??0)-(O.sortOrder??0)),E=new Set([b.DETECTION_TARGET,b.CLASSIFICATION_MODEL,b.SMALL_MODEL]);let J=-1;k.forEach((h,O)=>{E.has(t(h.toolTitle))&&(J=O)});const A=k.map(h=>({kind:"regular",data:h})),B=f.targetCount??f.extraConfig?.targetCount,F=f.duration??f.extraConfig?.duration,W=[];B&&W.push({kind:"targetCount",data:B}),F&&W.push({kind:"timerTarget",data:F}),W.length>0&&A.splice(J+1,0,...W);for(let h=0;h<A.length;h++){const O=A[h];let H;if(O.kind==="regular")H=await G(O.data,{x:d,y:p});else if(O.kind==="targetCount"){const U=Lt(O.data);H=he("targetCount",{x:d,y:p},{label:"目标计数",arguments:U,input_schema:{targets:{required:!0,type:"array",minLength:1},alertConditions:{required:!1,type:"array"}}})}else{const U=Mt(O.data);H=he("timerTarget",{x:d,y:p},{label:"目标计时",arguments:U,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"}}})}g.push(H),u.push(ke($,H.id,h===0?m:void 0)),$=H.id,d+=ie.H_GAP}return{lastNodeId:$,endX:d}},S=f=>{const q=f.ruleSchema.sourceGroups||[],p=f.ruleSchema.groupLogic||"and",w=q.length>1;return he("start",{x:ie.START_X,y:ie.START_Y},{label:"开始",algorithmName:f.ruleName||"",enableBranch:w?!0:p!=="and",branchLogic:p,groupWindowSeconds:f.ruleSchema.groupWindowSeconds??null})},V=f=>{const q=Ot(f.extraConfig);return he("end",{x:0,y:ie.START_Y},{label:"结束",input_schema:It(),arguments:{reportFrequency:"always",reportInterval:30,enableDeduplication:!1,similarityThreshold:80,...q}})},r=(f,q)=>[...f||[]].sort((p,w)=>(p.sort??0)-(w.sort??0)).map(p=>{const w=_(p,q),g=[];return(p.children||[]).forEach(u=>{(u.branchRefs||[]).forEach($=>{const d=c(q.branches,$);d&&g.push(d)})}),g.sort((u,$)=>(u.sortOrder??0)-($.sortOrder??0)),{sg:p,mode:w,refBranches:g}}),N=f=>{const p=(f.reduce((w,g)=>w+Math.max(g.refBranches.length,1),0)-1)*ie.V_GAP;return ie.START_Y-p/2},s=async(f,q,p,w,g,u)=>{const{sg:$,mode:d,refBranches:m}=f,i=Math.max(m.length,1),k=p+(i-1)*ie.V_GAP/2;let E=ie.START_X+ie.H_GAP,J=ie.START_X;const A=$.logic==="order",B=he("dataSource",{x:E,y:k},{label:$.name||"数据源",sourceGroupId:$.sourceGroupId??null,enableImageSequence:A,input_schema:Rt(),arguments:{needCooperativeDetection:!!$.synEnabled,windowSeconds:$.windowSeconds||5,enableImageSequence:A},enableBranch:!0,branchLogic:A?"order":$.logic||"and"});w.push(B),g.push(ke(q.id,B.id,{branchOrder:$.sort??null,branchName:$.name||""})),A&&m.forEach((h,O)=>{h.sourceHandle||(h.sourceHandle=O===0?"first-frame":$t())});const F=A?{dataSourceNode:B,refBranches:m}:null;let W=B.id;if(d===de.SMALL_MODEL||d===de.SMALL_MODEL_BRANCH){E+=ie.H_GAP;const h=M($.streamConfig,d,$,{x:E,y:k});w.push(h),g.push(ke(B.id,h.id)),W=h.id}if(m.length>0)for(let h=0;h<m.length;h++){const O=p+h*ie.V_GAP,{lastNodeId:H,endX:U}=await y(m[h],W,O,E+ie.H_GAP,w,g);g.push(ke(H,u.id)),U>J&&(J=U)}else{g.push(ke(W,u.id));const h=E+ie.H_GAP;h>J&&(J=h)}return{branchY:p+i*ie.V_GAP,maxX:J,imageSequenceInfo:F}},L=f=>{for(const{dataSourceNode:q,refBranches:p}of f){const w=p.filter(g=>g.sourceHandle&&g.sourceHandle!=="first-frame");w.length>0&&(q.data.subsequentFrames=w.map((g,u)=>({id:u===0?"default-subsequent":`subsequent-${Date.now()}-${u}`,label:u===0?"后续帧检测":`后续帧检测${u+1}`,handleId:g.sourceHandle})))}};return{importFromJSON:async f=>{const q=l(f);if(q)return v.ElMessage.error(q),!1;try{T();const p=[],w=[],g=S(f),u=V(f);p.push(g);const $=r(f.ruleSchema.sourceGroups,f);let d=N($),m=ie.START_X;const i=[];for(const k of $){const E=await s(k,g,d,p,w,u);d=E.branchY,E.maxX>m&&(m=E.maxX),E.imageSequenceInfo&&i.push(E.imageSequenceInfo)}return u.position.x=m+ie.H_GAP,p.push(u),L(i),a.loadWorkflow(p,w),v.ElMessage.success("导入成功"),!0}catch(p){return v.ElMessage.error("导入失败: "+(p.message||"未知错误")),!1}},validateImportJSON:l}},Ft=()=>{const a=e.inject("echoTaskData",null);e.inject("taskModeConfig",null);const o=e.inject("selectedDevicesMap",null),t=ae(),{importFromJSON:c,validateImportJSON:_}=Ye(),l=(r,N)=>{const s=r.mode??0,L=r.interval??0,P=r.sw_decoding===!1?"GPU":"CPU";let f,q;return N?s===1?(f=2,q=0):s===0&&L===0?(f=3,q=0):(f=1,q=L):s===1?(f=2,q=0):L===0?(f=0,q=30):(f=0,q=L),{mode:f,interval:q,sw_decoding:P}},C=(r,N)=>{const s=r.frameExtractionType??1,L=r.frameInterval??0,f=(r.frameExtractionSourceType??1)===2?"GPU":"CPU";let q,p;return s===0?(q=3,p=0):s===1&&L===0?(q=N?2:0,p=30):s===1?(q=0,p=L):s===2?(q=1,p=L):s===3?(q=2,p=0):(q=N?3:0,p=30),{mode:q,interval:p,sw_decoding:f}},T=r=>r===1?"device":"platform",D=r=>!r||r.enablePolling!==1?{enablePatrol:!1}:{enablePatrol:!0,patrolGroupSize:Number(r.pollingAmount??1)},G=(r,N,s)=>{if(N){const L=r.find(P=>P.sourceGroupId===N);if(L)return L}return r[s]??null},M=(r,N)=>{if(!r?.branches)return null;for(const s of r.branches){const L=s.nodes?.find(P=>P.toolTitle===N);if(L?.arguments)return{...L.arguments}}return null},y=r=>{if(!Array.isArray(r)||r.length===0)return{timeZone:"",planType:0};const N=r.map(L=>({dayType:Number(L.dayType??0),timePeriod:(L.timePeriod??[]).map(P=>({startTime:P.startTime,endTime:P.endTime}))})),s=N.some(L=>L.dayType===0)?1:0;return{timeZone:JSON.stringify({plan:N}),planType:s}},S=async()=>{const r=a?.value??a;if(!r||typeof r!="object"||Object.keys(r).length===0)return;const N=r.graph??{},s=N.sources??[],L=N.extraConfig??{},P=t.nodes.find(g=>g.type===b.START);if(P){const g=r.name??N.workflowName??"",u=!!L.enableVideo,$=L.schedule??[],{timeZone:d,planType:m}=y($);t.updateNodeData(P.id,{taskName:g,enableAlertVideo:u,schedule:$,timeZone:d,planType:m,...d?{executionTime:d}:{}})}const f=t.nodes.filter(g=>g.type===b.DATA_SOURCE),q=t.nodes.some(g=>g.type===b.SMALL_MODEL);return f.forEach((g,u)=>{const $=g.data?.sourceGroupId??null,d=G(s,$,u);if(!d)return;const m=d.attach??{},i=d.streamConfig?.decoder??null,k=m.deviceType==="1400"?"1400":"camera",E=k==="camera"?i?l(i,q):C(m,q):{},J=k==="camera"?D(m.pollingConfig):{},A=k==="1400"?{detectionMode:T(m.detectionType)}:{},B=g.data?.arguments??{};if(t.updateNodeData(g.id,{arguments:{...B,deviceType:k,...E,...J,...A}}),o){const F=$?s.filter(O=>O.sourceGroupId===$):[],h=(F.length>0?F:[d]).map(O=>({sourceId:O.sourceId??"",sourceName:O.sourceName??"",thirdId:O.attach?.thirdId??"",area:O.areas??[],lines:O.lines??[],direction:O.direction??[]}));o.value[g.id]=h}}),t.nodes.filter(g=>g.type===b.DETECTION_TARGET).forEach(g=>{const u=new Set,$=[g.id];let d=null;for(;$.length&&!d;){const B=$.shift();if(u.has(B))continue;u.add(B);const F=t.edges.filter(W=>W.target===B);for(const W of F){const h=t.nodes.find(O=>O.id===W.source);if(h){if(h.type===b.DATA_SOURCE){d=h.id;break}$.push(h.id)}}}if(!d)return;const m=o?.value?.[d]??[];if(m.length<=1)return;const i=g.data?.targetId;if(!i)return;const k=m.map(B=>{const F=String(B.sourceId??B.id??""),W=s.find(h=>String(h.sourceId)===F);if(!W?.branches)return{deviceId:F,args:null};for(const h of W.branches){const O=h.nodes?.find(H=>H.toolTitle===i);if(O?.arguments)return{deviceId:F,args:{...O.arguments}}}return{deviceId:F,args:null}}),E=k.filter(B=>B.args!==null);if(E.length===0)return;const J=JSON.stringify(E[0].args);if(E.some(B=>JSON.stringify(B.args)!==J)){const B=g.data?.arguments??{};t.updateNodeData(g.id,{arguments:{...B,configMode:"perDevice"}}),k.forEach(({deviceId:F,args:W})=>{W&&t.setTaskSourceArguments(d,F,g.id,W)})}}),t.nodes.filter(g=>g.type===b.FACE_RECOGNITION).forEach(g=>{const u=new Set,$=[g.id];let d=null;for(;$.length&&!d;){const B=$.shift();if(u.has(B))continue;u.add(B);const F=t.edges.filter(W=>W.target===B);for(const W of F){const h=t.nodes.find(O=>O.id===W.source);if(h){if(h.type===b.DATA_SOURCE){d=h.id;break}$.push(h.id)}}}const i=(d?t.nodes.find(B=>B.id===d):null)?.data?.sourceGroupId??null,k=f.findIndex(B=>B.id===d),E=G(s,i,k>=0?k:0);if(!E)return;const J=M(E,"face");if(!J?.repositoryId)return;const A=g.data?.arguments??{};t.updateNodeData(g.id,{arguments:{...A,repositoryId:Array.isArray(J.repositoryId)?J.repositoryId:[J.repositoryId]}})}),!0};return{importFromJSON:async r=>{const N=_(r);return N?(v.ElMessage.error(N),!1):await c(r)?(await S(),!0):!1},applyTaskData:S,validateImportJSON:_}},qt=()=>{if(e.inject("editorMode",oe.ALGORITHM)===oe.TASK)return Ft();const{importFromJSON:o,validateImportJSON:t}=Ye();return{importFromJSON:o,validateImportJSON:t,applyTaskData:async()=>{}}},Gt={class:"node-content"},Ht={class:"node-label"},jt=ne({__name:"StartNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return(o,t)=>{const c=e.resolveComponent("VideoPlay"),_=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["start-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"]),e.createElementVNode("div",Gt,[e.createVNode(_,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(c)]),_:1}),e.createElementVNode("span",Ht,e.toDisplayString(a.data.label),1)])],2)}}},[["__scopeId","data-v-9bc41abb"]]),Pt={class:"node-content"},zt={class:"node-label"},Ut=ne({__name:"EndNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return(o,t)=>{const c=e.resolveComponent("CircleClose"),_=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["end-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Pt,[e.createVNode(_,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(c)]),_:1}),e.createElementVNode("span",zt,e.toDisplayString(a.data.label),1)])],2)}}},[["__scopeId","data-v-2a723d0b"]]),Wt={class:"node-content"},Jt={class:"node-info"},Yt={class:"node-label"},Xt={key:1,class:"sequence-handles"},Qt={class:"handle-item"},Kt={class:"handle-label"},Zt={key:0,class:"handle-item add-button-item"},vt=ne({__name:"DataSourceNode",props:{id:{type:String,required:!0},data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=ae(),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,M=>{const y=Math.random()*16|0;return(M==="x"?y:y&3|8).toString(16)}),C=e.computed(()=>!o.data.subsequentFrames&&o.data.enableImageSequence?[{id:"default-subsequent",label:"后续帧检测",handleId:"subsequent-frame"}]:o.data.subsequentFrames||[]);let T=!1;const D=()=>{if(T)return;T=!0;const M=o.data.subsequentFrames||[],y={id:l(),label:`后续帧检测${M.length+1}`,handleId:l()};t.addSubsequentFrame(o.id,y),setTimeout(()=>{T=!1},300)},G=async M=>{const y=o.data.subsequentFrames.find(V=>V.id===M);if(t.edges.some(V=>V.source===o.id&&V.sourceHandle===y.handleId))try{await v.ElMessageBox.confirm(`删除"${y.label}"将同时删除其连接,是否继续?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}t.removeSubsequentFrame(o.id,M)};return(M,y)=>{const S=e.resolveComponent("FolderOpened"),V=e.resolveComponent("el-icon"),r=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["data-source-node",{"sequence-mode":a.data.enableImageSequence,selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Wt,[e.createVNode(V,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(S)]),_:1}),e.createElementVNode("div",Jt,[e.createElementVNode("div",Yt,e.toDisplayString(a.data.label),1)])]),a.data.enableImageSequence?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(ee.Handle),{key:0,type:"source",position:e.unref(ee.Position).Right},null,8,["position"])),a.data.enableImageSequence?(e.openBlock(),e.createElementBlock("div",Xt,[e.createElementVNode("div",Qt,[y[0]||(y[0]=e.createElementVNode("span",{class:"handle-label"},"首帧检测",-1)),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right,id:"first-frame",class:"handle-right"},null,8,["position"])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,N=>(e.openBlock(),e.createElementBlock("div",{key:N.id,class:"handle-item"},[e.createElementVNode("span",Kt,e.toDisplayString(N.label),1),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right,id:N.handleId,class:"handle-right"},null,8,["position","id"]),N.id!=="default-subsequent"&&!_.value?(e.openBlock(),e.createBlock(V,{key:0,class:"delete-icon",onClick:e.withModifiers(s=>G(N.id),["stop"])},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Close))]),_:1},8,["onClick"])):e.createCommentVNode("",!0)]))),128)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Zt,[e.createVNode(r,{size:"small",type:"primary",icon:e.unref(Q.Plus),circle:"",onClick:e.withModifiers(D,["stop"])},null,8,["icon"])]))])):e.createCommentVNode("",!0)],2)}}},[["__scopeId","data-v-7df8ef65"]]),eo={class:"node-content"},to={class:"node-info"},oo={class:"node-label"},no={key:0,class:"node-model"},ao={key:1,class:"node-placeholder"},lo={key:0,class:"direct-alert-badge"},ro=ne({__name:"SmallModelNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return(o,t)=>{const c=e.resolveComponent("Cpu"),_=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["small-model-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",eo,[e.createVNode(_,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(c)]),_:1}),e.createElementVNode("div",to,[e.createElementVNode("div",oo,e.toDisplayString(a.data.label),1),a.data.modelName?(e.openBlock(),e.createElementBlock("div",no,e.toDisplayString(a.data.modelName),1)):(e.openBlock(),e.createElementBlock("div",ao,"未选择模型"))])]),a.data.supportDirectAlert?(e.openBlock(),e.createElementBlock("div",lo,[e.createVNode(_,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Warning))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-e278c903"]]),so={class:"node-content"},io={class:"node-info"},co={class:"node-target"},mo={class:"node-params"},po=ne({__name:"DetectionTargetNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=()=>o.data.targetName||o.data.label||"检测目标",c=e.computed(()=>o.data.targetId==="other"?!1:o.data.arguments?.threshold!==void 0&&typeof o.data.arguments.threshold=="number"),_=e.computed(()=>{if(o.data.targetId==="other"&&o.data.arguments?.object){const l=o.data.arguments.object;if(Array.isArray(l))return l.filter(T=>T&&T.trim()!=="").length}return null});return(l,C)=>{const T=e.resolveComponent("View"),D=e.resolveComponent("el-icon"),G=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["detection-target-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",so,[e.createVNode(D,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(T)]),_:1}),e.createElementVNode("div",io,[C[1]||(C[1]=e.createElementVNode("div",{class:"node-label"},"检测目标",-1)),e.createElementVNode("div",co,e.toDisplayString(t()),1),e.createElementVNode("div",mo,[_.value?(e.openBlock(),e.createBlock(G,{key:0,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.value)+"个目标 ",1)]),_:1})):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createBlock(G,{key:1,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments?.threshold),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.targetHeight&&a.data.arguments?.targetWidth?(e.openBlock(),e.createBlock(G,{key:2,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 尺寸: "+e.toDisplayString(a.data.arguments.targetWidth)+"x"+e.toDisplayString(a.data.arguments.targetHeight),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.enableStructure?(e.openBlock(),e.createBlock(G,{key:3,size:"small",type:"warning"},{default:e.withCtx(()=>[...C[0]||(C[0]=[e.createTextVNode(" 结构化 ",-1)])]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-9a7ce2ec"]]),uo={class:"node-content"},fo={class:"node-info"},go={class:"node-label"},ho={key:0,class:"node-model"},yo={key:1,class:"node-placeholder"},_o={key:2,class:"node-stats"},No=ne({__name:"ClassificationModelNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return(o,t)=>{const c=e.resolveComponent("Grid"),_=e.resolveComponent("el-icon"),l=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["classification-model-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",uo,[e.createVNode(_,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(c)]),_:1}),e.createElementVNode("div",fo,[e.createElementVNode("div",go,e.toDisplayString(a.data.label),1),a.data.arguments?.modelName?(e.openBlock(),e.createElementBlock("div",ho,e.toDisplayString(a.data.arguments.modelName),1)):(e.openBlock(),e.createElementBlock("div",yo,"未选择模型")),a.data.arguments?.modelName?(e.openBlock(),e.createElementBlock("div",_o,[a.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(l,{key:0,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.categories?.length>0?(e.openBlock(),e.createBlock(l,{key:1,size:"small",type:"warning"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.data.arguments.categories.length)+" 类 ",1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.topK?(e.openBlock(),e.createBlock(l,{key:2,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" Top-"+e.toDisplayString(a.data.arguments.topK),1)]),_:1})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-0af49326"]]),Co={class:"node-content"},ko={class:"node-info"},bo={class:"node-label"},xo={class:"node-params"},Eo=ne({__name:"OCRNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){return ae(),(o,t)=>{const c=e.resolveComponent("el-icon"),_=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ocr-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Co,[e.createVNode(c,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Document))]),_:1}),e.createElementVNode("div",ko,[e.createElementVNode("div",bo,e.toDisplayString(a.data.label),1),e.createElementVNode("div",xo,[a.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(_,{key:0,size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-79c5c0a1"]]),wo={class:"node-content"},To={class:"node-info"},So={class:"node-label"},Vo={class:"node-scope"},Bo={class:"node-params"},Ao=ne({__name:"LicensePlateNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=ae(),c=()=>{const _=o.data.arguments?.detectionScope;if(!_)return"";const l=t.nodes.find(C=>C.id===_);return l?l.data.label:"检测范围"};return(_,l)=>{const C=e.resolveComponent("Document"),T=e.resolveComponent("el-icon"),D=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["license-plate-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",wo,[e.createVNode(T,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(C)]),_:1}),e.createElementVNode("div",To,[e.createElementVNode("div",So,e.toDisplayString(a.data.label),1),e.createElementVNode("div",Vo,e.toDisplayString(c()),1),e.createElementVNode("div",Bo,[a.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(D,{key:0,size:"small",type:"primary"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.minPlateWidth!==void 0&&a.data.arguments?.minPlateHeight!==void 0?(e.openBlock(),e.createBlock(D,{key:1,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 最小尺寸: "+e.toDisplayString(a.data.arguments.minPlateWidth)+"×"+e.toDisplayString(a.data.arguments.minPlateHeight)+"px ",1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-6d767970"]]),Do={class:"node-content"},Lo={class:"node-info"},Mo={class:"node-params"},Oo=ne({__name:"TargetCountNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t={"=":"=","!=":"≠",">":">","<":"<",">=":"≥","<=":"≤"},c=e.computed(()=>{const _=o.data.arguments?.alertConditions||[];if(_.length===0)return"";if(_.length===1){const C=_[0];return`数量 ${t[C.operator]||C.operator} ${C.value}`}const l=o.data.arguments?.conditionRelation||"OR";return`${_.length} 个条件(${l})`});return(_,l)=>{const C=e.resolveComponent("el-icon"),T=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["target-count-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Do,[e.createVNode(C,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.DataAnalysis))]),_:1}),e.createElementVNode("div",Lo,[l[0]||(l[0]=e.createElementVNode("div",{class:"node-label"},"目标计数",-1)),e.createElementVNode("div",Mo,[c.value?(e.openBlock(),e.createBlock(T,{key:0,size:"small",type:"warning"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.value),1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-18949ab9"]]),Io={class:"node-content"},Ro={class:"node-info"},$o={class:"node-label"},Fo={class:"node-params"},qo=ne({__name:"TimerTargetNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=e.computed(()=>o.data.description||"目标计时"),c=e.computed(()=>`${o.data.arguments?.duration||30}秒`),_=e.computed(()=>{const l=o.data.arguments?.condition_type;return l==="similarity"?`相似度 ${o.data.arguments?.similarity_threshold||90}%`:l==="hit_rate"?`命中率 ${o.data.arguments?.hit_rate_threshold||80}%`:""});return(l,C)=>{const T=e.resolveComponent("el-icon"),D=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["timer-target-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",Io,[e.createVNode(T,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Timer))]),_:1}),e.createElementVNode("div",Ro,[e.createElementVNode("div",$o,e.toDisplayString(t.value),1),e.createElementVNode("div",Fo,[e.createVNode(D,{size:"small",type:"success"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.value),1)]),_:1}),_.value?(e.openBlock(),e.createBlock(D,{key:0,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.value),1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-44ea79f7"]]),Go={class:"group-label"},Ho=ne({__name:"GroupNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t={and:"ALL",or:"SOME"},c=e.computed(()=>t[o.data.branchLogic]??"ALL"),_=e.computed(()=>o.data.branchLogic==="or"?"warning":"primary"),l={width:"8px",height:"8px",borderRadius:"2px"},C={borderColor:"var(--aiflow-color-brand-primary)",borderStyle:"dashed"};return(T,D)=>{const G=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["group-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"]),e.createElementVNode("div",Go,[e.createVNode(G,{type:_.value,size:"small",effect:"dark"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.value),1)]),_:1},8,["type"]),D[0]||(D[0]=e.createElementVNode("span",null,"并行组",-1))]),e.createVNode(e.unref(nt.NodeResizer),{"min-width":200,"min-height":100,"handle-style":l,"line-style":C})],2)}}},[["__scopeId","data-v-adf6607d"]]),jo={class:"node-content"},Po={class:"node-info"},zo={class:"node-label"},Uo={class:"node-scope"},Wo={class:"node-params"},Jo=ne({__name:"FaceRecognitionNode",props:{data:{type:Object,required:!0},selected:{type:Boolean,default:!1}},setup(a){const o=a,t=ae(),c=()=>{const _=o.data.arguments?.detectionScope;if(!_)return"";const l=t.nodes.find(C=>C.id===_);return l?l.data.label:"检测范围"};return(_,l)=>{const C=e.resolveComponent("el-icon"),T=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["face-recognition-node",{selected:a.selected}])},[e.createVNode(e.unref(ee.Handle),{type:"target",position:e.unref(ee.Position).Left},null,8,["position"]),e.createElementVNode("div",jo,[e.createVNode(C,{class:"node-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.User))]),_:1}),e.createElementVNode("div",Po,[e.createElementVNode("div",zo,e.toDisplayString(a.data.label),1),e.createElementVNode("div",Uo,e.toDisplayString(c()),1),e.createElementVNode("div",Wo,[a.data.arguments?.threshold!==void 0?(e.openBlock(),e.createBlock(T,{key:0,size:"small",type:"primary"},{default:e.withCtx(()=>[e.createTextVNode(" 阈值: "+e.toDisplayString(a.data.arguments.threshold),1)]),_:1})):e.createCommentVNode("",!0),a.data.arguments?.minFaceWidth!==void 0&&a.data.arguments?.minFaceHeight!==void 0?(e.openBlock(),e.createBlock(T,{key:1,size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(" 最小尺寸: "+e.toDisplayString(a.data.arguments.minFaceWidth)+"×"+e.toDisplayString(a.data.arguments.minFaceHeight)+"px ",1)]),_:1})):e.createCommentVNode("",!0)])])]),e.createVNode(e.unref(ee.Handle),{type:"source",position:e.unref(ee.Position).Right},null,8,["position"])],2)}}},[["__scopeId","data-v-cedaa1a2"]]),Yo={class:"quick-add-menu__list"},Xo=["onClick"],Qo={class:"quick-add-menu__icon"},Ko={class:"quick-add-menu__label"},Zo={key:0,class:"quick-add-menu__empty"},fe=8,vo=ne({__name:"NodeQuickAddMenu",props:{visible:{type:Boolean,default:!1},position:{type:Object,default:()=>({x:0,y:0})},sourceNodeType:{type:String,default:""}},emits:["select","close"],setup(a){const o=a,t=e.ref(null),c=e.ref({x:0,y:0});e.watch(()=>o.visible,async T=>{if(!T||(c.value={x:o.position.x,y:o.position.y},await e.nextTick(),!t.value))return;const D=t.value.getBoundingClientRect(),G=window.innerWidth,M=window.innerHeight;let{x:y,y:S}=o.position;y+D.width>G-fe&&(y=G-D.width-fe),S+D.height>M-fe&&(S=M-D.height-fe),y<fe&&(y=fe),S<fe&&(S=fe),c.value={x:y,y:S}});const _=e.computed(()=>({left:c.value.x+"px",top:c.value.y+"px"})),l=[{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:"🏁"}],C=e.computed(()=>{switch(o.sourceNodeType){case"start":return l.filter(T=>T.type==="dataSource");case"dataSource":return l.filter(T=>T.type==="smallModel"||T.type==="detectionTarget"||T.type==="classificationModel");case"smallModel":return l.filter(T=>T.type!=="dataSource"&&T.type!=="smallModel"&&T.type!=="targetCount"&&T.type!=="timerTarget");case"detectionTarget":case"classificationModel":return l.filter(T=>T.type!=="dataSource"&&T.type!=="smallModel");case"timerTarget":return l.filter(T=>["ocr","faceRecognition","licensePlate","end"].includes(T.type));case"targetCount":return l.filter(T=>["timerTarget","ocr","faceRecognition","licensePlate","end"].includes(T.type));case"ocr":return l.filter(T=>["licensePlate","faceRecognition","end"].includes(T.type));case"licensePlate":return l.filter(T=>["ocr","faceRecognition","end"].includes(T.type));case"faceRecognition":return l.filter(T=>["ocr","licensePlate","end"].includes(T.type));default:return[]}});return(T,D)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.visible?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuRef",ref:t,class:"quick-add-menu",style:e.normalizeStyle(_.value)},[D[1]||(D[1]=e.createElementVNode("div",{class:"quick-add-menu__header"},"添加节点",-1)),e.createElementVNode("ul",Yo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,G=>(e.openBlock(),e.createElementBlock("li",{key:G.type,class:"quick-add-menu__item",onClick:M=>T.$emit("select",G.type)},[e.createElementVNode("span",Qo,e.toDisplayString(G.icon),1),e.createElementVNode("span",Ko,e.toDisplayString(G.label),1)],8,Xo))),128)),C.value.length===0?(e.openBlock(),e.createElementBlock("li",Zo," 无可连接节点 ")):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),a.visible?(e.openBlock(),e.createElementBlock("div",{key:1,class:"quick-add-menu__overlay",onClick:D[0]||(D[0]=G=>T.$emit("close"))})):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-05a5ee6d"]]),en={class:"workflow-canvas"},Xe=5,tn=ne({__name:"WorkflowCanvas",setup(a){const o=ae(),{screenToFlowCoordinate:t,findNode:c,onConnectStart:_,onConnectEnd:l}=ee.useVueFlow(),C=e.inject("editorConfig",null),T=e.inject("editorMode",oe.ALGORITHM),D=e.computed(()=>T===oe.TASK),G=e.inject("echoAlgodata",null),M=e.inject("echoTaskData",null),{importFromJSON:y,applyTaskData:S}=qt();e.watch(G,async n=>{if(n&&Object.keys(n).length>0){await e.nextTick();const x=n.graph??n;if(await y(x),D.value){const j=x?.ruleSchema?.sourceGroups??[];let Y=null;if(j.some(z=>z.streamConfig)?Y="stream":(j.length>1||j.some(z=>(z.children??[]).length>1))&&(Y="image"),Y){const z=o.nodes.find(X=>X.type===b.START);z&&o.updateNodeData(z.id,{streamType:Y})}await S()}}},{immediate:!0}),e.watch(M,async n=>{D.value&&(!n||typeof n!="object"||Object.keys(n).length===0||o.nodes.length!==0&&await S())},{immediate:!1});const V=(n,x)=>{if(!x?.properties)return n;const j={};return Object.entries(x.properties).forEach(([Y,z])=>{z.default!==void 0&&(j[Y]=z.default)}),n.data.arguments={...j,...n.data.arguments},n},r=e.reactive({visible:!1,screenPos:{x:0,y:0},sourceNodeId:null,sourceNodeType:null,sourceHandleId:null,flowPos:{x:0,y:0}}),N=()=>{r.visible=!1,r.sourceNodeId=null,r.sourceNodeType=null,r.sourceHandleId=null,q=!1};let s=null,L=!1,P=null,f=null,q=!1;const p=()=>{P&&(document.removeEventListener("mousemove",P),P=null),f&&(document.removeEventListener("mouseup",f),f=null)};e.onUnmounted(()=>{p()}),_(({nodeId:n,handleId:x,handleType:j,event:Y})=>{if(j!=="source")return;if(D.value){v.ElMessage.warning("算法任务模式下不允许添加连接线");return}const z=o.nodes.find(K=>K.id===n);if(!z||z.type==="end")return;if(z.type===b.DATA_SOURCE&&z.data?.enableImageSequence){if(x&&o.edges.filter(re=>re.source===n&&re.sourceHandle===x).length>=1)return}else if(z.type!==b.START&&z.type!==b.DATA_SOURCE&&o.edges.filter(re=>re.source===n).length>=1)return;const X=Y?.target;let te=0,le=0;if(X){const K=X.getBoundingClientRect();te=K.right+12,le=K.top-8}s={nodeId:n,sourceNodeType:z.type,handleId:x,menuX:te,menuY:le,flowPos:{...z.position}},L=!1;const pe=Y?.clientX??0,I=Y?.clientY??0;p(),P=K=>{(Math.abs(K.clientX-pe)>Xe||Math.abs(K.clientY-I)>Xe)&&(L=!0,p())},f=()=>{if(p(),!L&&s){q=!0;const K=s;r.visible=!0,r.screenPos={x:K.menuX,y:K.menuY},r.sourceNodeId=K.nodeId,r.sourceNodeType=K.sourceNodeType,r.sourceHandleId=K.handleId,r.flowPos=K.flowPos}s=null},document.addEventListener("mousemove",P),document.addEventListener("mouseup",f)});const w=n=>{const x=r.sourceNodeId,j=o.nodes.find(ce=>ce.id===x);if(!j){N();return}if(D.value){v.ElMessage.warning("算法任务模式下不允许添加节点"),N();return}const Y=j.position.x+250,z=j.position.y;let X={x:Y,y:z};const te=60,le=80;let pe=0,I=!0;for(;I;){I=!1;const ce=z+pe;for(const ge of o.nodes)if(Math.abs(ge.position.x-Y)<100&&Math.abs(ge.position.y-ce)<te+20){I=!0,pe+=le;break}}if(X.y=z+pe,n==="end"){const ce=o.nodes.find(ge=>ge.type==="end");if(ce){if(o.edges.some(xe=>xe.source===x&&xe.target===ce.id)){v.ElMessage.warning("已经连接到结束节点"),N();return}const _e=u(j,ce);if(!_e.valid){v.ElMessage.warning(_e.message),N();return}o.addConnection({source:x,target:ce.id,sourceHandle:r.sourceHandleId||null,targetHandle:null}),B(),N(),v.ElMessage.success("已连接到结束节点");return}}let K;switch(n){case"end":K=Ee(X);break;case"dataSource":K=we(X);break;case"smallModel":K=De(X);break;case"detectionTarget":K=Le(X);break;case"classificationModel":K=Me(X);break;case"ocr":{const ce=C?.value??C;K=V(Oe(X),ce?.ocr?.[0]?.inputSchema);break}case"licensePlate":{const ce=C?.value??C;K=V(Ie(X),ce?.license_plate?.[0]?.inputSchema);break}case"faceRecognition":{const ce=C?.value??C;K=V(Fe(X),ce?.face?.faceParams?.[0]?.inputSchema);break}case"targetCount":K=Re(X);break;case"timerTarget":K=$e(X);break;default:N();return}const re=u(j,K);if(!re.valid){v.ElMessage.warning(re.message),N();return}o.addNode(K),o.addConnection({source:x,target:K.id,sourceHandle:r.sourceHandleId||null,targetHandle:null}),B(),N(),v.ElMessage.success(`已添加${K.data.label}并连接`)},g=["smallModel","detectionTarget","classificationModel","ocr","licensePlate","faceRecognition","targetCount","timerTarget"],u=(n,x)=>{if(n?.parentNode&&x?.type!=="group")return{valid:!1,message:"组内节点不能直接连接到外部节点,请通过并行组的连接点连线"};if(x?.parentNode&&n?.type!=="group")return{valid:!1,message:"外部节点不能直接连接到组内节点,请通过并行组的连接点连线"};if(n?.type===b.START){if(x?.type!==b.DATA_SOURCE)return{valid:!1,message:"开始节点只能连接数据源节点"};if(o.edges.filter(z=>z.source===n.id).some(z=>o.nodes.find(te=>te.id===z.target)?.data?.enableImageSequence===!0))return{valid:!1,message:"已有数据源节点开启了图片时序,不能再连接其他数据源节点"}}if(x?.type===b.SMALL_MODEL){if(n?.type!==b.DATA_SOURCE)return{valid:!1,message:"小模型节点的上游节点只能是数据源节点"};if(o.edges.filter(X=>X.source===n.id).some(X=>o.nodes.find(le=>le.id===X.target)?.type!==b.SMALL_MODEL))return{valid:!1,message:"小模型节点只能出现在单分支场景中。数据源节点已有其他连接,不能再连接小模型节点"}}if(n?.type===b.DATA_SOURCE){if(x?.type!==b.SMALL_MODEL&&x?.type!==b.DETECTION_TARGET&&x?.type!==b.CLASSIFICATION_MODEL)return{valid:!1,message:"数据源节点的下游节点只能是小模型节点、检测目标节点或分类模型节点"};if(o.edges.filter(X=>X.source===n.id).some(X=>o.nodes.find(le=>le.id===X.target)?.type===b.SMALL_MODEL))return{valid:!1,message:"数据源节点已连接小模型节点(单分支场景),不能再连接其他节点"}}if(n?.type===b.SMALL_MODEL&&(x?.type===b.TARGET_COUNT||x?.type===b.TIMER_TARGET))return{valid:!1,message:"小模型节点不能直接连接目标计数或目标计时节点,请先连接检测目标节点"};if(n?.type===b.TARGET_COUNT&&![b.TIMER_TARGET,b.OCR,b.FACE_RECOGNITION,b.LICENSE_PLATE,b.END].includes(x?.type))return{valid:!1,message:"目标计数节点只能连接目标计时、辅助节点或结束节点"};if(n?.type===b.TIMER_TARGET&&![b.OCR,b.FACE_RECOGNITION,b.LICENSE_PLATE,b.END].includes(x?.type))return{valid:!1,message:"目标计时节点只能连接辅助节点或结束节点"};const j=[b.OCR,b.LICENSE_PLATE,b.FACE_RECOGNITION];return j.includes(n?.type)&&!j.filter(z=>z!==n.type).concat(b.END).includes(x?.type)?{valid:!1,message:"辅助节点只能连接除自身外的辅助节点或结束节点"}:x?.type!==b.END&&o.edges.filter(z=>z.target===x?.id).length>=1?{valid:!1,message:"该节点已有入口连接,该节点只允许有一条入口边"}:{valid:!0}},$=e.markRaw({start:jt,end:Ut,dataSource:vt,smallModel:ro,detectionTarget:po,classificationModel:No,ocr:Eo,licensePlate:Ao,targetCount:Oo,timerTarget:qo,group:Ho,faceRecognition:Jo}),d=e.computed({get:()=>o.nodes,set:n=>{o.nodes=n}}),m=e.computed({get:()=>o.edges,set:n=>{o.edges=n}}),i=n=>{n.forEach(x=>{if(x.type==="position"&&x.position)o.updateNodePosition(x.id,x.position);else if(x.type==="remove"){if(D.value){v.ElMessage.warning("算法任务模式下不允许删除节点");return}const j=o.nodes.find(z=>z.id===x.id);if(j&&j.type===b.START){v.ElMessage.warning("开始节点不可删除");return}if(j&&j.type===b.END){v.ElMessage.warning("结束节点不可删除");return}if(j&&j.type==="group"){v.ElMessage.warning('并行组不可手动删除,请关闭对应节点的"开启分支"选项');return}const Y=j?.parentNode;o.removeNode(x.id),Y&&o.nodes.filter(X=>X.parentNode===Y).length===0&&o.dissolveParallelGroup(Y)}})},k=n=>{n.forEach(x=>{if(x.type==="remove"){if(D.value){v.ElMessage.warning("算法任务模式下不允许删除连接线");return}o.removeEdge(x.id)}})},E=n=>{if(q)return;if(D.value){v.ElMessage.warning("算法任务模式下不允许添加连接线"),N();return}const x=o.nodes.find(z=>z.id===n.source),j=o.nodes.find(z=>z.id===n.target),Y=u(x,j);if(!Y.valid){v.ElMessage.warning(Y.message),N();return}if(x?.type===b.DATA_SOURCE&&x.data.enableImageSequence&&n.sourceHandle&&o.edges.filter(X=>X.source===n.source&&X.sourceHandle===n.sourceHandle).length>=1){const X=n.sourceHandle==="first-frame"?"首帧检测":"后续帧检测";v.ElMessage.warning(`${X}连接点只能连接一个节点`);return}if(g.includes(x?.type)&&!x.data.enableBranch&&o.edges.filter(X=>X.source===n.source).length>=1){v.ElMessage.warning("该节点只能连接一个节点。");return}o.addConnection(n),B(),N()},J=n=>({and:"ALL",or:"SOME"})[n]||"ALL",A=n=>{const x=o.nodes.find(j=>j.id===n.source);if(!x)return"";if(x.type===b.START){const j=x.data.branchLogic||"and",Y=J(j),z=n.data?.branchOrder;return z!=null?`${Y} - 执行顺序 ${z}`:Y}if(x.type===b.DATA_SOURCE){if(x.data?.enableImageSequence){const X=n.sourceHandle==="first-frame"?"首帧":"后续帧",te=n.data?.branchOrder;return te!=null?`${X} - 执行顺序 ${te}`:X}const j=x.data.branchLogic||"and",Y=J(j),z=n.data?.branchOrder;return z!=null?`${Y} - 执行顺序 ${z}`:Y}return""},B=()=>{o.edges.forEach(n=>{const x=A(n);n.label!==x&&(n.label=x,n.labelStyle=x?{fill:"#fff",fontWeight:600,fontSize:"11px"}:void 0,n.labelBgStyle=x?{fill:"var(--aiflow-color-brand-primary)",rx:4,ry:4}:void 0,n.labelBgPadding=x?[4,6]:void 0)})},F=()=>{o.nodes.forEach(n=>{if(n.type!=="group")return;const x=n.data.sourceNodeId;if(!x)return;const j=o.nodes.find(Y=>Y.id===x);j?.data?.enableBranch&&j.data.branchLogic!==n.data.branchLogic&&o.updateNodeData(n.id,{branchLogic:j.data.branchLogic||"and"})})};e.watch(()=>o.nodes.filter(n=>g.includes(n.type)).map(n=>({id:n.id,enableBranch:n.data.enableBranch,branchLogic:n.data.branchLogic})),(n,x)=>{x&&n.forEach(j=>{const Y=x.find(z=>z.id===j.id);if(Y){if(j.enableBranch&&!Y.enableBranch){const z=o.nodes.find(X=>X.id===j.id);if(!z)return;o.createEmptyGroup({x:z.position.x+200,y:z.position.y-30},z.data.branchLogic||"and",j.id)}else if(!j.enableBranch&&Y.enableBranch){const z=o.nodes.find(X=>X.type==="group"&&X.data.sourceNodeId===j.id);z&&o.dissolveParallelGroup(z.id)}if(j.enableBranch&&Y.branchLogic!==j.branchLogic){const z=o.nodes.find(X=>X.type==="group"&&X.data.sourceNodeId===j.id);z&&o.updateNodeData(z.id,{branchLogic:j.branchLogic})}}})}),e.watch(()=>o.nodes.filter(n=>n.type!=="group").map(n=>({id:n.id,enableBranch:n.data.enableBranch,branchLogic:n.data.branchLogic,branchOrder:n.data.branchOrder})),()=>{B(),F()},{deep:!0}),e.watch(()=>o.edges.map(n=>({id:n.id,branchOrder:n.data?.branchOrder})),(n,x)=>{B(),x&&n.forEach(j=>{const Y=x.find(z=>z.id===j.id);if(Y&&Y.branchOrder!==j.branchOrder&&j.branchOrder!==void 0){const z=o.edges.find(X=>X.id===j.id);if(z){const X=o.nodes.find(te=>te.id===z.source);X&&X.type===b.DATA_SOURCE&&o.updateNodePosition(X.id,{x:X.position.x,y:X.position.y-.001})}}})},{deep:!0}),e.watch(()=>[o.invalidNodeIds,o.invalidEdgeIds],([n,x])=>{o.nodes.forEach(j=>{n.has(j.id)?j.class="invalid-node":j.class==="invalid-node"&&(j.class="")}),o.edges.forEach(j=>{x.has(j.id)?j.class="invalid-edge":j.class==="invalid-edge"&&(j.class="")})},{deep:!0});const W=n=>{n.event?.target?.closest(".vue-flow__handle")||o.selectNode(n.node.id)},h=n=>{o.selectEdge(n.edge.id)},O=n=>{if(D.value){v.ElMessage.warning("算法任务模式下不允许删除连接线");return}o.removeEdge(n.edge.id)},H=()=>{o.clearSelection()},U=({node:n})=>{if(n.type==="group"||!g.includes(n.type))return;const x=o.nodes.filter(Y=>Y.type==="group");let j=null;for(const Y of x){const z=c(Y.id);if(!z)continue;const X=z.dimensions?.width||parseInt(Y.style?.width)||300,te=z.dimensions?.height||parseInt(Y.style?.height)||160;let le=n.position.x,pe=n.position.y;if(n.parentNode){const _e=o.nodes.find(xe=>xe.id===n.parentNode);_e&&(le+=_e.position.x,pe+=_e.position.y)}const I=c(n.id),K=I?.dimensions?.width||160,re=I?.dimensions?.height||60,ce=le+K/2,ge=pe+re/2;if(ce>=Y.position.x&&ce<=Y.position.x+X&&ge>=Y.position.y&&ge<=Y.position.y+te){j=Y.id;break}}j?n.parentNode!==j&&o.addNodeToGroup(n.id,j):n.parentNode&&o.removeNodeFromGroup(n.id)},Z=n=>{n.preventDefault(),n.dataTransfer&&(n.dataTransfer.dropEffect="move")},R=n=>{n.preventDefault();const x=n.dataTransfer?.getData("application/vueflow");if(!x)return;if(D.value){v.ElMessage.warning("算法任务模式下不允许添加节点");return}if(x===b.START&&o.getNodeCountByType(b.START)>=1){v.ElMessage.warning("工作流只能有一个开始节点");return}if(x===b.END&&o.getNodeCountByType(b.END)>=1){v.ElMessage.warning("工作流只能有一个结束节点");return}const j=160,Y=60,z=t({x:n.clientX,y:n.clientY}),X={x:z.x-j/2,y:z.y-Y/2};let te;switch(x){case b.START:te=Ae(X);break;case b.END:te=Ee(X);break;case b.DATA_SOURCE:te=we(X);break;case b.SMALL_MODEL:te=De(X);break;case b.DETECTION_TARGET:te=Le(X);break;case b.CLASSIFICATION_MODEL:te=Me(X);break;case b.OCR:{const le=C?.value??C;te=V(Oe(X),le?.ocr?.[0]?.inputSchema);break}case b.LICENSE_PLATE:{const le=C?.value??C;te=V(Ie(X),le?.license_plate?.[0]?.inputSchema);break}case b.TARGET_COUNT:te=Re(X);break;case b.TIMER_TARGET:te=$e(X);break;case b.FACE_RECOGNITION:{const le=C?.value??C;te=V(Fe(X),le?.face?.faceParams?.[0]?.inputSchema);break}default:return}o.addNode(te),v.ElMessage.success("节点已添加")};return(n,x)=>(e.openBlock(),e.createElementBlock("div",en,[e.createVNode(e.unref(ee.VueFlow),{nodes:d.value,"onUpdate:nodes":x[0]||(x[0]=j=>d.value=j),edges:m.value,"onUpdate:edges":x[1]||(x[1]=j=>m.value=j),"node-types":e.unref($),onNodesChange:i,onEdgesChange:k,onConnect:E,onNodeClick:W,onEdgeClick:h,onEdgeDoubleClick:O,onPaneClick:H,onDrop:R,onDragover:Z,onNodeDragStop:U,"snap-to-grid":!0,"snap-grid":[15,15],"default-zoom":1,"min-zoom":.2,"max-zoom":4},{default:e.withCtx(()=>[e.createVNode(e.unref(tt.Background),{"pattern-color":"#aaa",gap:16,variant:"dots"}),e.createVNode(e.unref(ot.Controls))]),_:1},8,["nodes","edges","node-types"]),e.createVNode(vo,{visible:r.visible,position:r.screenPos,"source-node-type":r.sourceNodeType,onSelect:w,onClose:N},null,8,["visible","position","source-node-type"])]))}},[["__scopeId","data-v-cf0301e9"]]),on={class:"config-header"},nn={key:0,class:"config-section"},an={key:1,class:"config-section"},ln=ne({__name:"EdgeConfig",setup(a){const o=ae(),t=e.inject("editorMode",oe.ALGORITHM),c=e.computed(()=>t===oe.TASK),_=e.computed(()=>{const M=o.selectedEdge;return M&&o.nodes.find(S=>S.id===M.source)?.data?.enableBranch?M:null}),l=e.computed(()=>_.value&&o.nodes.find(y=>y.id===_.value.source)?.type==="start"?"多数据源分支配置":"分支配置"),C=e.computed(()=>{if(!_.value)return!1;const M=o.nodes.find(y=>y.id===_.value.source);return(M?.type==="dataSource"||M?.type==="start")&&M?.data?.enableBranch}),T=e.computed(()=>{if(!_.value)return 1;const M=o.nodes.find(y=>y.id===_.value.source);return M?o.edges.filter(y=>y.source===M.id).length:1}),D=e.computed(()=>{if(!_.value)return!1;const M=o.nodes.find(y=>y.id===_.value.source);return M?M.type==="dataSource"&&M.data?.enableImageSequence===!0&&_.value.sourceHandle!=="first-frame":!1}),G=M=>{_.value&&o.updateEdgeData(_.value.id,M)};return(M,y)=>{const S=e.resolveComponent("el-divider"),V=e.resolveComponent("el-input-number"),r=e.resolveComponent("el-text"),N=e.resolveComponent("el-form-item"),s=e.resolveComponent("el-form"),L=e.resolveComponent("el-option"),P=e.resolveComponent("el-select");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",on,[e.createElementVNode("h3",null,e.toDisplayString(l.value),1)]),e.createVNode(S),D.value?(e.openBlock(),e.createElementBlock("div",nn,[y[3]||(y[3]=e.createElementVNode("h4",null,"后续检测帧的持续时间",-1)),e.createVNode(s,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(N,{label:"后续检测帧的持续时间(秒)",required:""},{default:e.withCtx(()=>[e.createVNode(V,{"model-value":_.value?.data?.timeWindowSeconds??null,onChange:y[0]||(y[0]=f=>G({timeWindowSeconds:f})),min:1,precision:0,style:{width:"100%"},"controls-position":"right",placeholder:"请输入持续时间"},null,8,["model-value"]),e.createVNode(r,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...y[2]||(y[2]=[e.createTextVNode(" 后续帧检测需要持续的时间(必填) ",-1)])]),_:1})]),_:1})]),_:1})])):e.createCommentVNode("",!0),C.value?(e.openBlock(),e.createElementBlock("div",an,[y[5]||(y[5]=e.createElementVNode("h4",null,"分支顺序",-1)),e.createVNode(s,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(N,{label:"执行顺序"},{default:e.withCtx(()=>[e.createVNode(P,{"model-value":_.value?.data?.branchOrder??null,disabled:c.value,onChange:y[1]||(y[1]=f=>G({branchOrder:f})),style:{width:"100%"},placeholder:"请选择执行顺序",clearable:""},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,f=>(e.openBlock(),e.createBlock(L,{key:f,label:`执行顺序 ${f}`,value:f},null,8,["label","value"]))),128))]),_:1},8,["model-value","disabled"]),e.createVNode(r,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...y[4]||(y[4]=[e.createTextVNode(" 系统会根据连接顺序自动分配执行顺序,数字越小越先执行。可手动调整顺序 ",-1)])]),_:1})]),_:1})]),_:1})])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-61177f45"]]),rn={class:"config-section"},sn=ne({__name:"GroupNodeConfig",setup(a){return(o,t)=>{const c=e.resolveComponent("el-divider"),_=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(c),e.createElementVNode("div",rn,[e.createVNode(_,{type:"info",size:"small"},{default:e.withCtx(()=>[...t[0]||(t[0]=[e.createTextVNode("并行组由系统自动管理,断开连接后自动解散。",-1)])]),_:1})])])}}},[["__scopeId","data-v-60b47589"]]),cn={class:"time-init-container"},dn={key:0,class:"time-header flex-x-start"},mn={class:"tab-type flex-x"},pn={class:"time-content"},un={id:"time-content-table-body"},fn=["onClick"],gn=["onClick"],hn=["data-sort","data-value","data-day","data-type","onMousedown"],yn={key:1},_n=["data-sort","data-value","data-type","onMousedown"],Nn={class:"time-list"},Cn={key:0,class:"time-list-title"},kn={key:1,style:{"margin-right":"10px"}},bn=ne({__name:"TimeInit",props:{operationType:{type:Number,default:1}},setup(a,{expose:o}){const t=a,c=e.ref(0);let _,l,C,T,D;const G=e.ref(new Map),M=e.ref(new Map),y=e.computed(()=>c.value===0?G.value:M.value);e.onMounted(()=>{_=document.querySelector("#time-content-table-body"),l=_.querySelectorAll("td.sel-able[data-type]"),t.operationType!=3&&document.body.addEventListener("mouseup",s)}),e.onBeforeUnmount(()=>{t.operationType!=3&&document.body.removeEventListener("mouseup",s)});const S=i=>{c.value!==i&&(c.value=i,e.nextTick(()=>{l=_.querySelectorAll("td.sel-able[data-type]"),l.forEach(E=>E.classList.remove("selected")),(i===0?G.value:M.value).forEach((E,J)=>{E.origin.forEach(A=>{Array.from(l).forEach(B=>{Number(B.dataset.sort)==A.sort&&Number(B.dataset.value)==A.value&&Number(B.dataset.day)==J&&B.classList.add("selected")})})})}))},V=e.ref([{name:"每日",value:0},{name:"一",value:1},{name:"二",value:2},{name:"三",value:3},{name:"四",value:4},{name:"五",value:5},{name:"六",value:6},{name:"日",value:7}]),r=(i,k,E)=>{t.operationType!=3&&E.which==1&&(T=i,C=Number(E.target.dataset.value),E.target.classList.contains("selected")?(E.target.classList.remove("selected"),D=""):(D="selected",E.target.classList.add("selected")),N(),p())},N=()=>{l.forEach(i=>{i.addEventListener("mouseover",L,!1,{once:!0})})},s=()=>{l.forEach(i=>{i.removeEventListener("mouseover",L)})},L=i=>{i.target.classList.remove("selected"),D&&i.target.classList.add(D);let k=Number(i.target.dataset.value),E=Number(i.target.dataset.day),J=E>T?E:T,A=E<T?E:T,B=k>C?k:C,F=k<C?k:C;for(let W=A;W<=J;W++)for(let h=F;h<=B;h++){let O=document.querySelector(`td[data-value="${h}"][data-day="${W}"]`);O.classList.remove("selected"),D&&O.classList.add(D)}p()},P=i=>{if(t.operationType==3)return;let k=[];l.forEach(E=>{Number(E.dataset.day)==i&&k.push(E)}),k.find(E=>!E.classList.contains("selected"))?k.forEach(E=>E.classList.add("selected")):k.forEach(E=>E.classList.remove("selected")),p()},f=i=>{if(t.operationType==3)return;let k=[];l.forEach(E=>{Number(E.dataset.sort)==i&&k.push(E)}),k.find(E=>!E.classList.contains("selected"))?k.forEach(E=>E.classList.add("selected")):k.forEach(E=>E.classList.remove("selected")),p()},q=()=>{l.forEach(k=>{k.classList.remove("selected")}),(c.value===0?G:M).value.clear()},p=()=>{const i=c.value===0?G:M;i.value.clear(),l.forEach(k=>{if(k.classList.contains("selected")){let E=k.dataset.day,J=k.dataset.sort,A=k.dataset.value;i.value.get(E)?i.value.get(E).origin.push({sort:Number(J),value:Number(A)}):i.value.set(E,{origin:[{sort:Number(J),value:Number(A)}],timeList:[]})}})},w=i=>{let J=y.value.get(i).origin.map(A=>A.value).reduce((A,B,F,W)=>(F==0?A.push([B]):B==W[F-1]+1?A[A.length-1].push(B):A.push([B]),A),[]);return J=J.map(A=>{let B=Math.max(...A)+1,F=Math.min(...A)+1,W=F%2==0?30:0,h=B%2==0?0:30,O=g(Math.ceil(F/2)-1),H=g(Math.ceil(B/2)-(h==0?0:1));return{dayType:i,startTime:O+":"+(W==0?"00":W),endTime:H+":"+(h==0?"00":h)}}),y.value.get(i).timeList=J,J.map(A=>A.startTime+"-"+A.endTime).join()};function g(i){return i<10?"0"+i:i}const u=(i,k)=>{G.value.clear(),M.value.clear(),l.forEach(B=>B.classList.remove("selected")),c.value=k;const E=k===0?G:M,J=JSON.parse(i);let A=[];J.plan.forEach(B=>{B.timePeriod.forEach(F=>{A.push({...F,dayType:B.dayType})})}),e.nextTick(()=>{l=_.querySelectorAll("td.sel-able[data-type]"),A.forEach(B=>{E.value.get(B.dayType)?E.value.get(B.dayType).timeList.push(B):E.value.set(B.dayType,{origin:[],timeList:[{...B}]})}),E.value.forEach((B,F)=>{B.timeList.forEach(W=>{let h=Number(W.startTime.split(":")[1]),O=Number(W.endTime.split(":")[1]),H=Number(W.startTime.split(":")[0]),U=Number(W.endTime.split(":")[0]);if(H==U){B.origin.push({sort:H,value:2*H});return}for(let Z=H;Z<=U;Z++)if(Z==H)h==0?(B.origin.push({sort:Z,value:2*Z}),B.origin.push({sort:Z,value:2*Z+1})):B.origin.push({sort:Z,value:2*Z+1});else if(Z>H&&Z<U)B.origin.push({sort:Z,value:2*Z}),B.origin.push({sort:Z,value:2*Z+1});else if(O==0){if(Z==U)return;B.origin.push({sort:Z,value:2*Z}),B.origin.push({sort:Z,value:2*Z+1})}else B.origin.push({sort:Z,value:2*Z})}),B.origin.forEach(W=>{Array.from(l).find(h=>{Number(h.dataset.sort)==W.sort&&Number(h.dataset.value)==W.value&&Number(h.dataset.day)==F&&h.classList.add("selected")})})})})},$=(i,k)=>i.map(A=>A.value).sort((A,B)=>A-B).reduce((A,B,F,W)=>(F==0?A.push([B]):B==W[F-1]+1?A[A.length-1].push(B):A.push([B]),A),[]).map(A=>{let B=Math.max(...A)+1,F=Math.min(...A)+1,W=F%2==0?30:0,h=B%2==0?0:30,O=g(Math.ceil(F/2)-1),H=g(Math.ceil(B/2)-(h==0?0:1));return{dayType:k,startTime:O+":"+(W==0?"00":W),endTime:H+":"+(h==0?"00":h)}});return o({getTimeData:()=>{(c.value===0?M:G).value.clear();let k=[];y.value.forEach((A,B)=>{const F=$(A.origin,B);k=k.concat(F)});let E={plan:[]},J=k.map(A=>A.dayType).filter((A,B,F)=>F.indexOf(A)===B);return J.length?(J.forEach(A=>{E.plan.push({dayType:A,timePeriod:k.filter(B=>B.dayType===A).map(B=>({startTime:B.startTime,endTime:B.endTime}))})}),{validTime:!0,timeZone:JSON.stringify(E),planType:c.value}):{validTime:!1}},revertByTime:u,resetFn:()=>{c.value=0,G.value.clear(),M.value.clear(),e.nextTick(()=>{l.forEach(i=>{i.classList.remove("selected")}),l=_.querySelectorAll("td.sel-able[data-type]")})}}),(i,k)=>{const E=e.resolveComponent("el-icon"),J=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",cn,[a.operationType!=3?(e.openBlock(),e.createElementBlock("div",dn,[e.createElementVNode("div",mn,[e.createElementVNode("div",{class:e.normalizeClass(["type",{active:c.value==0}]),onClick:k[0]||(k[0]=A=>S(0))}," 周计划 ",2),e.createElementVNode("div",{class:e.normalizeClass(["type",{active:c.value==1}]),onClick:k[1]||(k[1]=A=>S(1))}," 日计划 ",2)]),e.createVNode(J,{class:"rm-icon",link:"",type:"danger",onClick:q},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Delete))]),_:1})]),_:1})])):e.createCommentVNode("",!0),e.createElementVNode("div",pn,[e.createElementVNode("table",{class:"time-content-table",onContextmenu:k[3]||(k[3]=A=>A.preventDefault())},[k[5]||(k[5]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th"),e.createElementVNode("th",{colspan:"24"},"上午"),e.createElementVNode("th",{colspan:"24"},"下午")])],-1)),e.createElementVNode("tbody",un,[e.createElementVNode("tr",null,[k[4]||(k[4]=e.createElementVNode("th",null,null,-1)),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(24,A=>e.createElementVNode("td",{class:"sel-able",colspan:"2",onClick:B=>f(A-1)},e.toDisplayString(A-1),9,fn)),64))]),c.value==0?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(V.value.filter(A=>A.value!=0),A=>(e.openBlock(),e.createElementBlock("tr",null,[e.createElementVNode("th",{onClick:B=>P(A.value)},e.toDisplayString(A.name),9,gn),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(48,B=>e.createElementVNode("td",{class:"sel-able","data-sort":parseInt((B-1)/2),"data-value":B-1,"data-day":A.value,"data-type":c.value,onMousedown:F=>r(A.value,B,F)},null,40,hn)),64))]))),256)):e.createCommentVNode("",!0),c.value==1?(e.openBlock(),e.createElementBlock("tr",yn,[e.createElementVNode("th",{onClick:k[2]||(k[2]=A=>P(0))},"每日"),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(48,A=>e.createElementVNode("td",{class:"sel-able","data-sort":parseInt((A-1)/2),"data-value":A-1,"data-day":0,"data-type":c.value,onMousedown:B=>r(0,A,B)},null,40,_n)),64))])):e.createCommentVNode("",!0)])],32)]),e.createElementVNode("div",Nn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value.keys(),A=>(e.openBlock(),e.createElementBlock("div",null,[c.value==0?(e.openBlock(),e.createElementBlock("span",Cn,[k[6]||(k[6]=e.createElementVNode("span",null,"星期",-1)),e.createTextVNode(" "+e.toDisplayString(V.value.find(B=>B.value==A).name),1)])):(e.openBlock(),e.createElementBlock("span",kn,e.toDisplayString(V.value.find(B=>B.value==A).name),1)),e.createTextVNode(" ("+e.toDisplayString(w(A))+") ",1)]))),256))])])}}},[["__scopeId","data-v-fd17fb3f"]]),xn={class:"time-template-dialog"},En={class:"time-editor-panel"},wn=ne({__name:"TimeTemplateDialog",props:{modelValue:{type:Object,default:()=>({timeTemplateId:"",timeTemplateName:"",schedule:[]})}},emits:["update:modelValue"],setup(a,{expose:o,emit:t}){const c=a,_=t,l=e.ref(null),C=e.ref(""),T=e.ref(""),D=e.ref(c.modelValue?.timeTemplateName||""),G=e.ref([]);return e.computed(()=>C.value?G.value.filter(S=>S.name.toLowerCase().includes(C.value.toLowerCase())):G.value),e.watch(D,S=>{_("update:modelValue",{...c.modelValue,timeTemplateName:S})}),o({getFormData:()=>{const S=l.value?.getTimeData();return{timeTemplateId:T.value,timeTemplateName:D.value,...S}},revertByTime:(S,V)=>{l.value?.revertByTime(S,V)}}),(S,V)=>(e.resolveComponent("el-icon"),e.resolveComponent("el-input"),e.resolveComponent("el-button"),e.resolveComponent("el-form-item"),e.resolveComponent("el-form"),e.openBlock(),e.createElementBlock("div",xn,[e.createCommentVNode("",!0),e.createElementVNode("div",En,[e.createCommentVNode("",!0),e.createVNode(bn,{ref_key:"timeInitRef",ref:l},null,512)])]))}},[["__scopeId","data-v-a39aee75"]]),Tn={class:"config-section"},Sn={key:0,class:"config-section"},Vn={key:0,style:{"font-size":"12px",color:"var(--el-color-info)","margin-top":"4px"}},Bn={class:"config-section"},An=ne({__name:"StartNodeConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=e.inject("echoAlgodata",null),C=e.computed(()=>{const V=l?.value??l,N=(V?.graph??V)?.ruleSchema?.sourceGroups??[];if(N.some(P=>P.streamConfig))return{value:"stream",locked:!0,reason:"算法含小模型节点,固定为视频流"};const s=N.length>1,L=N.some(P=>(P.children??[]).length>1);return s||L?{value:"image",locked:!0,reason:"算法含多数据源或多分支,固定为图片流"}:{value:null,locked:!1,reason:""}});e.watch(C,V=>{V.locked&&t.value&&o.updateNodeData(t.value.id,{streamType:V.value})},{immediate:!0});const T=e.ref(!1),D=e.ref(null),G=()=>{const V=D.value?.getFormData();if(V?.validTime){const N=(JSON.parse(V.timeZone)?.plan??[]).map(s=>({dayType:String(s.dayType),timePeriod:s.timePeriod.map(L=>({startTime:L.startTime,endTime:L.endTime}))}));o.updateNodeData(t.value.id,{executionTime:V.timeZone,schedule:N,timeZone:V.timeZone,planType:V.planType??0})}else o.updateNodeData(t.value.id,{executionTime:"",schedule:[],timeZone:"",planType:0});T.value=!1},M=()=>{const V=t.value?.data;V?.timeZone&&D.value?.revertByTime(V.timeZone,V.planType??0)},y=e.computed(()=>t.value?o.edges.filter(r=>r.source===t.value.id).length>=2:!1),S=V=>{t.value&&o.updateNodeData(t.value.id,{algorithmName:V})};return(V,r)=>{const N=e.resolveComponent("el-divider"),s=e.resolveComponent("el-input"),L=e.resolveComponent("el-form-item"),P=e.resolveComponent("el-form"),f=e.resolveComponent("el-option"),q=e.resolveComponent("el-select"),p=e.resolveComponent("el-switch"),w=e.resolveComponent("el-button"),g=e.resolveComponent("el-dialog"),u=e.resolveComponent("el-icon"),$=e.resolveComponent("el-tooltip"),d=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",null,[r[15]||(r[15]=e.createElementVNode("div",{class:"config-header"},[e.createElementVNode("h3",null,"节点配置")],-1)),e.createVNode(N),e.createElementVNode("div",Tn,[r[9]||(r[9]=e.createElementVNode("h4",null,"算法信息",-1)),e.createVNode(P,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(L,{label:"算法名称",required:""},{default:e.withCtx(()=>[e.createVNode(s,{"model-value":t.value?.data.algorithmName,disabled:_.value,onInput:r[0]||(r[0]=m=>S(m)),placeholder:"请输入算法名称",maxlength:"50","show-word-limit":""},null,8,["model-value","disabled"])]),_:1})]),_:1})]),_.value?(e.openBlock(),e.createElementBlock("div",Sn,[r[10]||(r[10]=e.createElementVNode("h4",null,"任务信息",-1)),e.createVNode(P,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(L,{label:"任务名称",required:""},{default:e.withCtx(()=>[e.createVNode(s,{"model-value":t.value?.data.taskName,onInput:r[1]||(r[1]=m=>e.unref(o).updateNodeData(t.value.id,{taskName:m})),placeholder:"请输入任务名称",maxlength:"50","show-word-limit":""},null,8,["model-value"])]),_:1}),e.createVNode(L,{label:"任务数据流"},{default:e.withCtx(()=>[e.createVNode(q,{"model-value":C.value.locked?C.value.value:t.value?.data.streamType||"image",disabled:C.value.locked,onChange:r[2]||(r[2]=m=>e.unref(o).updateNodeData(t.value.id,{streamType:m})),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(f,{label:"图片流",value:"image"}),e.createVNode(f,{label:"视频流",value:"stream"})]),_:1},8,["model-value","disabled"]),C.value.locked?(e.openBlock(),e.createElementBlock("div",Vn,e.toDisplayString(C.value.reason),1)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(L,{label:"开启告警短视频"},{default:e.withCtx(()=>[e.createVNode(p,{"model-value":t.value?.data.enableAlertVideo,onChange:r[3]||(r[3]=m=>e.unref(o).updateNodeData(t.value.id,{enableAlertVideo:m}))},null,8,["model-value"])]),_:1}),e.createVNode(L,{label:"任务执行时间",required:""},{default:e.withCtx(()=>[e.createVNode(s,{"model-value":t.value?.data.timeZone?"已设置执行时段":"请选择执行时段",readonly:"",onClick:r[4]||(r[4]=m=>T.value=!0),style:{cursor:"pointer"}},null,8,["model-value"])]),_:1})]),_:1})])):e.createCommentVNode("",!0),e.createVNode(g,{modelValue:T.value,"onUpdate:modelValue":r[6]||(r[6]=m=>T.value=m),title:"执行时段",width:"1200px","append-to-body":"",onOpened:M},{footer:e.withCtx(()=>[e.createVNode(w,{onClick:r[5]||(r[5]=m=>T.value=!1)},{default:e.withCtx(()=>[...r[11]||(r[11]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(w,{type:"primary",onClick:G},{default:e.withCtx(()=>[...r[12]||(r[12]=[e.createTextVNode("确认",-1)])]),_:1})]),default:e.withCtx(()=>[e.createVNode(wn,{ref_key:"timeTemplateRef",ref:D},null,512)]),_:1},8,["modelValue"]),e.createElementVNode("div",Bn,[r[14]||(r[14]=e.createElementVNode("h4",null,"多数据源配置",-1)),e.createVNode(P,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(L,{label:"多数据源关系"},{default:e.withCtx(()=>[e.createVNode(q,{"model-value":t.value?.data.branchLogic||"and",disabled:_.value,onChange:r[7]||(r[7]=m=>e.unref(o).updateNodeData(t.value.id,{branchLogic:m})),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(f,{label:"ALL(满足所有数据源)",value:"and"}),e.createVNode(f,{label:"SOME(满足至少一个数据源)",value:"or"})]),_:1},8,["model-value","disabled"])]),_:1}),y.value?(e.openBlock(),e.createBlock(L,{key:0},{label:e.withCtx(()=>[r[13]||(r[13]=e.createElementVNode("span",null,"多数据协同检测等待时间(秒)",-1)),e.createVNode($,{content:"等待接收多数据源下所有摄像机返回图片的最大时长。若超时仍未收齐全部图片,将自动终止本次协同分析",placement:"top"},{default:e.withCtx(()=>[e.createVNode(u,{style:{"margin-left":"4px",color:"var(--aiflow-color-text-tertiary)",cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(d,{"model-value":t.value?.data.groupWindowSeconds??5,onChange:r[8]||(r[8]=m=>e.unref(o).updateNodeData(t.value.id,{groupWindowSeconds:m})),min:1,max:3600,step:1,style:{width:"100%"}},null,8,["model-value"])]),_:1})):e.createCommentVNode("",!0)]),_:1})])])}}},[["__scopeId","data-v-40d5bdc3"]]),Dn={detectionTarget:"detection",classificationModel:"classification",ocr:"ocr",face:"face",faceRecognition:"face",licensePlate:"licensePlate",dataSource:"stream",smallModel:"small",end:"end"},Ln=["smallModel","detectionTarget"],Se=()=>({schemaLoading:e.ref(!1),getToolType:l=>Dn[l]||null,needsToolSelection:l=>Ln.includes(l),fetchToolSchema:async(l,C="")=>(console.warn("fetchToolSchema is deprecated, use editorConfig instead"),null),fetchSchemaForNodeType:async(l,C="")=>(console.warn("fetchSchemaForNodeType is deprecated, use editorConfig instead"),null)}),Mn={key:0,class:"config-section"},On={key:3,class:"array-input"},In={key:1,class:"config-section"},Rn=ne({__name:"EndNodeConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),{schemaLoading:c,fetchSchemaForNodeType:_}=Se(),l=e.computed(()=>{if(!t.value)return[];const y=t.value.data.input_schema||t.value.data.inputSchema;if(!y||!y.properties)return[];const S=y.required||[];return Object.entries(y.properties).map(([V,r])=>({key:V,type:r.type,label:r.title||r.label||r.description||V,description:r.description||"",default:r.default,required:S.includes(V)||r.required||!1,min:r.minimum!==void 0?r.minimum:r.min,max:r.maximum!==void 0?r.maximum:r.max,step:r.step,maxLength:r.maxLength,options:r.enum,optionLabels:r.enumLabels||r.enum,dependsOn:r.dependsOn}))}),C=y=>{if(t.value)return t.value.data.arguments?.[y]},T=(y,S)=>{if(!t.value)return;const r={...t.value.data.arguments||{},[y]:S};o.updateNodeData(t.value.id,{arguments:r})},D=y=>{if(!y.dependsOn||!t.value)return!0;const{field:S,value:V}=y.dependsOn,r=C(S);if(typeof V=="string"&&V.startsWith("!")){const N=V.substring(1);return r!==N}return Array.isArray(V)?V.includes(r):r===V},G=y=>{const S=C(y);return Array.isArray(S)?JSON.stringify(S):""},M=(y,S)=>{try{const V=JSON.parse(S);Array.isArray(V)&&T(y,V)}catch{}};return e.watch(()=>t.value?.id,async y=>{if(!y||!t.value)return;const S=t.value.type,V=t.value.data,r=V.input_schema||V.inputSchema;if(r&&r.properties&&Object.keys(r.properties).length>0)return;const N=await _(S);if(!N)return;const s=t.value?.data;s&&o.updateNodeData(t.value.id,{...s,input_schema:N.inputSchema,extraConfig:N.extraConfig,arguments:{...N.arguments,...s.arguments}})},{immediate:!0}),(y,S)=>{const V=e.resolveComponent("el-divider"),r=e.resolveComponent("el-icon"),N=e.resolveComponent("el-tooltip"),s=e.resolveComponent("el-option"),L=e.resolveComponent("el-select"),P=e.resolveComponent("el-switch"),f=e.resolveComponent("el-input-number"),q=e.resolveComponent("el-input"),p=e.resolveComponent("el-form-item"),w=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[S[2]||(S[2]=e.createElementVNode("div",{class:"config-header"},[e.createElementVNode("h3",null,"节点配置")],-1)),e.createVNode(V),l.value.length>0?(e.openBlock(),e.createElementBlock("div",Mn,[S[0]||(S[0]=e.createElementVNode("h4",null,"告警上报配置",-1)),e.createVNode(w,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,g=>e.withDirectives((e.openBlock(),e.createBlock(p,{key:g.key,required:g.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(g.label),1),g.description?(e.openBlock(),e.createBlock(N,{key:0,content:g.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(r,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[g.options&&g.type==="string"?(e.openBlock(),e.createBlock(L,{key:0,"model-value":C(g.key),onChange:u=>T(g.key,u),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.options,(u,$)=>(e.openBlock(),e.createBlock(s,{key:u,label:g.optionLabels?g.optionLabels[$]:u,value:u},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):g.type==="boolean"?(e.openBlock(),e.createBlock(P,{key:1,"model-value":C(g.key),onChange:u=>T(g.key,u)},null,8,["model-value","onChange"])):g.type==="number"||g.type==="integer"?(e.openBlock(),e.createBlock(f,{key:2,"model-value":C(g.key),onChange:u=>T(g.key,u),min:g.min,max:g.max,step:g.step||(g.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):g.type==="array"&&!g.options?(e.openBlock(),e.createElementBlock("div",On,[e.createVNode(q,{"model-value":G(g.key),onChange:u=>M(g.key,u),type:"textarea",rows:3,placeholder:g.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):g.type==="array"&&g.options?(e.openBlock(),e.createBlock(L,{key:4,"model-value":C(g.key),onChange:u=>T(g.key,u),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.options,(u,$)=>(e.openBlock(),e.createBlock(s,{key:u,label:g.optionLabels?g.optionLabels[$]:u,value:u},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(q,{key:5,"model-value":C(g.key),onInput:u=>T(g.key,u),maxlength:g.maxLength,"show-word-limit":!!g.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!g.dependsOn||D(g)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.unref(c)&&l.value.length===0?(e.openBlock(),e.createElementBlock("div",In,[...S[1]||(S[1]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--aiflow-color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-8a2e6388"]]),$n={class:"config-header"},Fn={class:"config-section"},qn={key:0,style:{"margin-top":"8px",color:"var(--el-text-color-secondary)","font-size":"12px"}},Gn={key:0,class:"config-section"},Hn={key:3,class:"array-input"},jn={key:1,class:"config-section"},Pn={key:2,class:"config-section"},zn=ne({__name:"ClassificationModelConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.classification?.models??[]),T=e.computed(()=>(l?.value??l)?.classification?.modelParams??null),D=e.ref([]),G=e.ref(!1),M=e.computed({get:()=>t.value?.data.arguments?.modelId||null,set:p=>{t.value&&p&&s("modelId",p)}}),y=()=>{D.value=C.value},S=async p=>{if(!t.value||!p)return;const w=D.value.find(d=>d.id===p);if(!w)return;const g=t.value?.data;if(!g)return;const u=w.inputSchema||w.input_schema||T.value?.inputSchema||{},$={};u.properties&&Object.entries(u.properties).forEach(([d,m])=>{m.default!==void 0&&($[d]=m.default)}),o.updateNodeData(t.value.id,{...g,input_schema:u,extraConfig:w.extraConfig||null,arguments:{...$,modelId:w.id,modelName:w.name}})},V=()=>{t.value&&o.updateNodeData(t.value.id,{arguments:{},input_schema:{},extraConfig:null})},r=e.computed(()=>{if(!t.value)return[];const p=t.value.data.input_schema||t.value.data.inputSchema;if(!p||!p.properties)return[];const w=p.required||[];return Object.entries(p.properties).map(([g,u])=>({key:g,type:u.type,label:u.title||u.label||u.description||g,description:u.description||"",default:u.default,required:w.includes(g)||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,sort:u.sort,hidden:u["x-hidden"]||!1})).filter(g=>!g.hidden).sort((g,u)=>(g.sort??1/0)-(u.sort??1/0))}),N=p=>{if(t.value)return t.value.data.arguments?.[p]},s=(p,w)=>{if(!t.value)return;const u={...t.value.data.arguments||{},[p]:w};o.updateNodeData(t.value.id,{arguments:u})},L=p=>{if(!p.dependsOn||!t.value)return!0;const{field:w,value:g}=p.dependsOn,u=N(w);if(typeof g=="string"&&g.startsWith("!")){const $=g.substring(1);return u!==$}return Array.isArray(g)?g.includes(u):u===g},P=p=>{const w=N(p);return Array.isArray(w)?JSON.stringify(w):""},f=(p,w)=>{try{const g=JSON.parse(w);Array.isArray(g)&&s(p,g)}catch{}},q=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async p=>{if(!p||!t.value)return;D.value.length===0&&y();const w=t.value.data,g=w.input_schema||w.inputSchema,u=w.arguments?.modelId;if(u&&g&&g.properties&&Object.keys(g.properties).length>0||!u)return;const $=D.value.find(k=>k.id===u);if(!$)return;const d=$.inputSchema||$.input_schema||T.value?.inputSchema||{},m={};d.properties&&Object.entries(d.properties).forEach(([k,E])=>{E.default!==void 0&&(m[k]=E.default)});const i=t.value?.data;i&&o.updateNodeData(t.value.id,{...i,input_schema:d,extraConfig:$.extraConfig||null,arguments:{...m,...i.arguments}})},{immediate:!0}),(p,w)=>{const g=e.resolveComponent("el-button"),u=e.resolveComponent("el-divider"),$=e.resolveComponent("el-option"),d=e.resolveComponent("el-select"),m=e.resolveComponent("el-form-item"),i=e.resolveComponent("el-form"),k=e.resolveComponent("el-icon"),E=e.resolveComponent("el-tooltip"),J=e.resolveComponent("el-switch"),A=e.resolveComponent("el-input-number"),B=e.resolveComponent("el-input");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",$n,[w[1]||(w[1]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(g,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:q},null,8,["icon"]))]),e.createVNode(u),e.createElementVNode("div",Fn,[w[2]||(w[2]=e.createElementVNode("h4",null,"选择模型",-1)),e.createVNode(i,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(m,{label:"模型",required:""},{default:e.withCtx(()=>[e.createVNode(d,{modelValue:M.value,"onUpdate:modelValue":w[0]||(w[0]=F=>M.value=F),filterable:"",clearable:"",placeholder:"请选择模型",style:{width:"100%"},loading:G.value,disabled:_.value,onChange:S,onClear:V},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,F=>(e.openBlock(),e.createBlock($,{key:F.id,label:F.name,value:F.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading","disabled"]),D.value.length===0&&!G.value?(e.openBlock(),e.createElementBlock("div",qn," 暂无可用模型 ")):e.createCommentVNode("",!0)]),_:1})]),_:1})]),M.value&&r.value.length>0?(e.openBlock(),e.createElementBlock("div",Gn,[w[3]||(w[3]=e.createElementVNode("h4",null,"分类模型参数",-1)),e.createVNode(i,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,F=>e.withDirectives((e.openBlock(),e.createBlock(m,{key:F.key,required:F.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(F.label),1),F.description?(e.openBlock(),e.createBlock(E,{key:0,content:F.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(k,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[F.options&&F.type==="string"?(e.openBlock(),e.createBlock(d,{key:0,"model-value":N(F.key),disabled:_.value&&F.key!=="threshold",onChange:W=>s(F.key,W),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.options,(W,h)=>(e.openBlock(),e.createBlock($,{key:W,label:F.optionLabels?F.optionLabels[h]:W,value:W},null,8,["label","value"]))),128))]),_:2},1032,["model-value","disabled","onChange"])):F.type==="boolean"?(e.openBlock(),e.createBlock(J,{key:1,"model-value":N(F.key),disabled:_.value&&F.key!=="threshold",onChange:W=>s(F.key,W)},null,8,["model-value","disabled","onChange"])):F.type==="number"||F.type==="integer"?(e.openBlock(),e.createBlock(A,{key:2,"model-value":N(F.key),disabled:_.value&&F.key!=="threshold",onChange:W=>s(F.key,W),min:F.min,max:F.max,step:F.step||(F.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","disabled","onChange","min","max","step"])):F.type==="array"&&!F.options?(e.openBlock(),e.createElementBlock("div",Hn,[e.createVNode(B,{"model-value":P(F.key),disabled:_.value&&F.key!=="threshold",onChange:W=>f(F.key,W),type:"textarea",rows:3,placeholder:F.description||"输入JSON数组"},null,8,["model-value","disabled","onChange","placeholder"])])):F.type==="array"&&F.options?(e.openBlock(),e.createBlock(d,{key:4,"model-value":N(F.key),disabled:_.value&&F.key!=="threshold",onChange:W=>s(F.key,W),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.options,(W,h)=>(e.openBlock(),e.createBlock($,{key:W,label:F.optionLabels?F.optionLabels[h]:W,value:W},null,8,["label","value"]))),128))]),_:2},1032,["model-value","disabled","onChange"])):(e.openBlock(),e.createBlock(B,{key:5,"model-value":N(F.key),disabled:_.value&&F.key!=="threshold",onInput:W=>s(F.key,W),maxlength:F.maxLength,"show-word-limit":!!F.maxLength},null,8,["model-value","disabled","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!F.dependsOn||L(F)]])),128))]),_:1})])):e.createCommentVNode("",!0),M.value&&G.value&&r.value.length===0?(e.openBlock(),e.createElementBlock("div",jn,[...w[4]||(w[4]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--aiflow-color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0),!M.value&&!G.value?(e.openBlock(),e.createElementBlock("div",Pn,[...w[5]||(w[5]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--aiflow-color-text-secondary)"}}," 请先选择模型 ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-5103b9a3"]]),Un={class:"config-header"},Wn={class:"config-section"},Jn=ne({__name:"OcrConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.ocr?.[0]?.inputSchema??null),T=e.computed(()=>t.value?.data.arguments?.threshold??.5),D=(M,y)=>{if(!t.value)return;const S=t.value.data.arguments||{};o.updateNodeData(t.value.id,{arguments:{...S,[M]:y}})},G=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,M=>{if(!M||!t.value)return;const y=C.value,S=t.value.data.arguments||{},V={};y?.properties&&Object.entries(y.properties).forEach(([r,N])=>{N.default!==void 0&&(V[r]=N.default)}),o.updateNodeData(t.value.id,{arguments:{...V,...S}})},{immediate:!0}),(M,y)=>{const S=e.resolveComponent("el-button"),V=e.resolveComponent("el-divider"),r=e.resolveComponent("el-input-number"),N=e.resolveComponent("el-form-item"),s=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Un,[y[1]||(y[1]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(S,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:G},null,8,["icon"]))]),e.createVNode(V),e.createElementVNode("div",Wn,[y[2]||(y[2]=e.createElementVNode("h4",null,"OCR识别参数",-1)),e.createVNode(s,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(N,{label:"检测阈值"},{default:e.withCtx(()=>[e.createVNode(r,{"model-value":T.value,onChange:y[0]||(y[0]=L=>D("threshold",L)),min:0,max:1,step:.01,precision:2,style:{width:"100%"}},null,8,["model-value"])]),_:1})]),_:1})])])}}},[["__scopeId","data-v-583b9f13"]]),Yn={class:"config-header"},Xn={class:"config-section"},Qn=ne({__name:"LicensePlateConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.license_plate?.[0]?.inputSchema??null),T=e.computed(()=>t.value?.data.arguments?.threshold??.5),D=(M,y)=>{if(!t.value)return;const S=t.value.data.arguments||{};o.updateNodeData(t.value.id,{arguments:{...S,[M]:y}})},G=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,M=>{if(!M||!t.value)return;const y=C.value,S=t.value.data.arguments||{},V={};y?.properties&&Object.entries(y.properties).forEach(([r,N])=>{N.default!==void 0&&(V[r]=N.default)}),o.updateNodeData(t.value.id,{arguments:{...V,...S}})},{immediate:!0}),(M,y)=>{const S=e.resolveComponent("el-button"),V=e.resolveComponent("el-divider"),r=e.resolveComponent("el-input-number"),N=e.resolveComponent("el-form-item"),s=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Yn,[y[1]||(y[1]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(S,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:G},null,8,["icon"]))]),e.createVNode(V),e.createElementVNode("div",Xn,[y[2]||(y[2]=e.createElementVNode("h4",null,"车牌识别参数",-1)),e.createVNode(s,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(N,{label:"检测阈值"},{default:e.withCtx(()=>[e.createVNode(r,{"model-value":T.value,onChange:y[0]||(y[0]=L=>D("threshold",L)),min:0,max:1,step:.01,precision:2,style:{width:"100%"}},null,8,["model-value"])]),_:1})]),_:1})])])}}},[["__scopeId","data-v-8c4d3477"]]),Kn={class:"config-header"},Zn={class:"config-section"},vn={key:0,class:"config-section"},Qe=ne({__name:"FaceConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.face?.faceRepos??[]),T=e.ref(null),D=e.computed(()=>({repositoryId:S.value})),G={repositoryId:[{required:!0,message:"请选择人脸库",trigger:"change"}]},M=e.computed(()=>t.value?.data.arguments?.threshold??.5),y=N=>t.value?.data.arguments?.[N],S=e.computed(()=>{const N=y("repositoryId");return N?Array.isArray(N)?N:[N]:[]}),V=(N,s)=>{if(!t.value)return;const L=t.value.data.arguments||{};o.updateNodeData(t.value.id,{arguments:{...L,[N]:s}})},r=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,N=>{if(!N||!t.value)return;const L=(l?.value??l)?.face?.faceParams?.[0]?.inputSchema??null,P=t.value.data.arguments||{},f={};L?.properties&&Object.entries(L.properties).forEach(([q,p])=>{p.default!==void 0&&(f[q]=p.default)}),o.updateNodeData(t.value.id,{arguments:{...f,...P}})},{immediate:!0}),(N,s)=>{const L=e.resolveComponent("el-button"),P=e.resolveComponent("el-divider"),f=e.resolveComponent("el-input-number"),q=e.resolveComponent("el-form-item"),p=e.resolveComponent("el-form"),w=e.resolveComponent("el-option"),g=e.resolveComponent("el-select");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Kn,[s[2]||(s[2]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(L,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:r},null,8,["icon"]))]),e.createVNode(P),e.createElementVNode("div",Zn,[s[3]||(s[3]=e.createElementVNode("h4",null,"人脸识别参数",-1)),e.createVNode(p,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(q,{label:"检测阈值"},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":M.value,onChange:s[0]||(s[0]=u=>V("threshold",u)),min:0,max:1,step:.01,precision:2,style:{width:"100%"}},null,8,["model-value"])]),_:1})]),_:1})]),e.unref(c)==="task"?(e.openBlock(),e.createElementBlock("div",vn,[s[4]||(s[4]=e.createElementVNode("h4",null,"人脸库选择",-1)),e.createVNode(p,{model:D.value,rules:G,ref_key:"faceFormRef",ref:T,"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(q,{label:"人脸库",prop:"repositoryId",required:""},{default:e.withCtx(()=>[e.createVNode(g,{"model-value":S.value,onChange:s[1]||(s[1]=u=>V("repositoryId",u)),placeholder:"请选择人脸库(可多选)",style:{width:"100%"},multiple:"",filterable:"",clearable:"","collapse-tags":"","collapse-tags-tooltip":""},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,u=>(e.openBlock(),e.createBlock(w,{key:u.id,label:u.name,value:u.id},null,8,["label","value"]))),128))]),_:1},8,["model-value"])]),_:1})]),_:1},8,["model"])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-5094495d"]]),ea={class:"config-header"},ta={key:0,class:"config-section"},oa={key:3,class:"array-input"},na={key:1,class:"config-section"},aa=ne({__name:"StreamConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),{schemaLoading:l,fetchSchemaForNodeType:C}=Se(),T=e.computed(()=>{if(!t.value)return[];const r=t.value.data.input_schema||t.value.data.inputSchema;if(!r||!r.properties)return[];const N=r.required||[];return Object.entries(r.properties).map(([s,L])=>({key:s,type:L.type,label:L.title||L.label||L.description||s,description:L.description||"",default:L.default,required:N.includes(s)||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})).sort((s,L)=>(s.sort??1/0)-(L.sort??1/0))}),D=r=>{if(t.value)return t.value.data.arguments?.[r]},G=(r,N)=>{if(!t.value)return;const L={...t.value.data.arguments||{},[r]:N};o.updateNodeData(t.value.id,{arguments:L})},M=r=>{if(!r.dependsOn||!t.value)return!0;const{field:N,value:s}=r.dependsOn,L=D(N);if(typeof s=="string"&&s.startsWith("!")){const P=s.substring(1);return L!==P}return Array.isArray(s)?s.includes(L):L===s},y=r=>{const N=D(r);return Array.isArray(N)?JSON.stringify(N):""},S=(r,N)=>{try{const s=JSON.parse(N);Array.isArray(s)&&G(r,s)}catch{}},V=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async r=>{if(!r||!t.value)return;const N=t.value.type,s=t.value.data,L=s.input_schema||s.inputSchema;if(L&&L.properties&&Object.keys(L.properties).length>0)return;const P=await C(N);if(!P)return;const f=t.value?.data;f&&o.updateNodeData(t.value.id,{...f,input_schema:P.inputSchema,extraConfig:P.extraConfig,arguments:{...P.arguments,...f.arguments}})},{immediate:!0}),(r,N)=>{const s=e.resolveComponent("el-button"),L=e.resolveComponent("el-divider"),P=e.resolveComponent("el-icon"),f=e.resolveComponent("el-tooltip"),q=e.resolveComponent("el-option"),p=e.resolveComponent("el-select"),w=e.resolveComponent("el-switch"),g=e.resolveComponent("el-input-number"),u=e.resolveComponent("el-input"),$=e.resolveComponent("el-form-item"),d=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",ea,[N[0]||(N[0]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(s,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:V},null,8,["icon"]))]),e.createVNode(L),T.value.length>0?(e.openBlock(),e.createElementBlock("div",ta,[N[1]||(N[1]=e.createElementVNode("h4",null,"流处理参数",-1)),e.createVNode(d,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,m=>e.withDirectives((e.openBlock(),e.createBlock($,{key:m.key,required:m.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(m.label),1),m.description?(e.openBlock(),e.createBlock(f,{key:0,content:m.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(P,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[m.options&&m.type==="string"?(e.openBlock(),e.createBlock(p,{key:0,"model-value":D(m.key),onChange:i=>G(m.key,i),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.options,(i,k)=>(e.openBlock(),e.createBlock(q,{key:i,label:m.optionLabels?m.optionLabels[k]:i,value:i},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):m.type==="boolean"?(e.openBlock(),e.createBlock(w,{key:1,"model-value":D(m.key),onChange:i=>G(m.key,i)},null,8,["model-value","onChange"])):m.type==="number"||m.type==="integer"?(e.openBlock(),e.createBlock(g,{key:2,"model-value":D(m.key),onChange:i=>G(m.key,i),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",oa,[e.createVNode(u,{"model-value":y(m.key),onChange:i=>S(m.key,i),type:"textarea",rows:3,placeholder:m.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):m.type==="array"&&m.options?(e.openBlock(),e.createBlock(p,{key:4,"model-value":D(m.key),onChange:i=>G(m.key,i),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.options,(i,k)=>(e.openBlock(),e.createBlock(q,{key:i,label:m.optionLabels?m.optionLabels[k]:i,value:i},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(u,{key:5,"model-value":D(m.key),onInput:i=>G(m.key,i),maxlength:m.maxLength,"show-word-limit":!!m.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!m.dependsOn||M(m)]])),128))]),_:1})])):e.createCommentVNode("",!0),e.unref(l)&&T.value.length===0?(e.openBlock(),e.createElementBlock("div",na,[...N[2]||(N[2]=[e.createElementVNode("div",{style:{"text-align":"center",padding:"20px",color:"var(--aiflow-color-text-secondary)"}}," 加载参数配置中... ",-1)])])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-e9fc5ade"]]),la={class:"config-header"},ra={class:"config-section"},sa={key:0,class:"config-section"},ia={key:1,class:"config-section"},ca={key:0,class:"el-form-item__error"},da={key:2,class:"config-section"},ma={key:3,class:"config-section"},pa={key:4,class:"config-section"},ua=ne({__name:"DataSourceConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.inject("taskModeConfig",null),l=e.inject("selectedDevicesMap",null),C=e.inject("echoAlgodata",null),T=e.computed(()=>c==="task"),D=e.computed(()=>P("deviceType")??"camera"),G=e.computed(()=>{const m=o.nodes.find(k=>k.type===b.START);return m?.data?.streamType?m.data.streamType:(_?.value??_)?.streamType??"image"}),M=e.computed(()=>{const m=t.value?.id;return l?.value?.[m]?.length??0}),y=()=>{const m=_?.value??_,i=t.value?.id,k=t.value?.data?.label??"",E=l?.value?.[i]??[],J=o.nodes.filter(h=>h.type===b.DATA_SOURCE).findIndex(h=>h.id===i),A=C?.value??C,B=A?.graph??A,F=t.value?.data?.sourceGroupId??B?.ruleSchema?.sourceGroups?.[J]?.sourceGroupId??i,W=h=>{l&&(l.value[i]=h)};m?.datasource?.onDeviceClick?.(i,k,F,E,D.value,W)},{fetchSchemaForNodeType:S}=Se(),V=e.computed(()=>o.nodes.some(m=>m.type===b.SMALL_MODEL)),r=e.computed(()=>o.getDataSourceCount()>=2),N=e.computed(()=>!o.supportPatrol()),s=e.computed(()=>o.getDataSourceCount()>=2?"存在多个数据源节点时不支持轮巡分析":o.hasCooperativeDetection()?"开启协同检测时不支持轮巡分析":""),L=e.computed(()=>{if(!t.value)return[];const m=t.value.data.input_schema||t.value.data.inputSchema;if(!m||!m.properties)return[];const i=m.required||[];return Object.entries(m.properties).map(([k,E])=>({key:k,type:E.type,label:E.title||E.label||E.description||k,description:E.description||"",default:E.default,required:i.includes(k)||E.required||!1,min:E.minimum!==void 0?E.minimum:E.min,max:E.maximum!==void 0?E.maximum:E.max,step:E.step,maxLength:E.maxLength,options:E.enum,optionLabels:E.enumLabels||E.enum,dependsOn:E.dependsOn}))}),P=m=>{if(t.value)return t.value.data.arguments?.[m]},f=e.computed(()=>!!P("enableImageSequence")),q=e.computed(()=>!!P("needCooperativeDetection")),p=(m,i)=>{if(!t.value)return;const E={...t.value.data.arguments||{},[m]:i};o.updateNodeData(t.value.id,{arguments:E})},w=async m=>{if(!t.value)return;if(o.edges.some(k=>k.source===t.value.id))try{await v.ElMessageBox.confirm("切换模式将清除该节点的所有输出连接,是否继续?","确认切换",{confirmButtonText:"继续",cancelButtonText:"取消",type:"warning"}),o.edges.filter(E=>E.source===t.value.id).forEach(E=>{o.removeEdge(E.id)}),m&&p("needCooperativeDetection",!1),o.updateNodeData(t.value.id,{enableImageSequence:m}),p("enableImageSequence",m),m&&o.initializeSubsequentFrames(t.value.id)}catch{return}else m&&p("needCooperativeDetection",!1),o.updateNodeData(t.value.id,{enableImageSequence:m}),p("enableImageSequence",m),m&&o.initializeSubsequentFrames(t.value.id)},g=m=>{t.value&&(m&&(o.updateNodeData(t.value.id,{enableImageSequence:!1}),p("enableImageSequence",!1),p("enablePatrol",!1)),p("needCooperativeDetection",m))};e.watch(G,m=>{m==="stream"&&t.value&&P("deviceType")==="1400"&&p("deviceType","camera")},{immediate:!0});const u=e.computed(()=>T.value&&D.value==="camera"&&G.value!=="stream"&&o.supportPatrol());e.watch(u,m=>{!m&&t.value&&P("enablePatrol")&&p("enablePatrol",!1)}),e.watch(M,m=>{m>0&&P("enablePatrol")&&(P("patrolGroupSize")??1)>m&&p("patrolGroupSize",m)});const $=m=>{if(!m.dependsOn||!t.value)return!0;const{field:i,value:k}=m.dependsOn,E=P(i);if(typeof k=="string"&&k.startsWith("!")){const J=k.substring(1);return E!==J}return Array.isArray(k)?k.includes(E):E===k},d=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.id,async m=>{if(!m||!t.value)return;const i=t.value.type,k=t.value.data;if(i==="dataSource"&&T.value){const B=k.arguments||{},F={},W=o.nodes.some(h=>h.type===b.SMALL_MODEL);B.mode===void 0&&(F.mode=W?3:0),B.interval===void 0&&(F.interval=30),G.value==="stream"&&B.sw_decoding===void 0&&(F.sw_decoding="CPU"),Object.keys(F).length>0&&o.updateNodeData(m,{arguments:{...B,...F}})}const E=k.input_schema||k.inputSchema;if(i==="dataSource"&&E&&E.properties&&!E.properties.windowSeconds){E.properties.windowSeconds={type:"integer",title:"协同检测等待时间(秒)",description:"等待接收数据源下所有摄像机返回图片的最大时长。若超时仍未收齐全部图片,将自动终止本次协同分析",default:5,min:1,max:60,dependsOn:{field:"needCooperativeDetection",value:!0}},k.arguments.windowSeconds||o.updateNodeData(t.value.id,{...k,input_schema:E,arguments:{...k.arguments,windowSeconds:5}});return}if(E&&E.properties&&Object.keys(E.properties).length>0)return;const J=await S(i);if(!J)return;const A=t.value?.data;A&&o.updateNodeData(t.value.id,{...A,input_schema:J.inputSchema,extraConfig:J.extraConfig,arguments:{...J.arguments,...A.arguments}})},{immediate:!0}),(m,i)=>{const k=e.resolveComponent("el-button"),E=e.resolveComponent("el-divider"),J=e.resolveComponent("el-icon"),A=e.resolveComponent("el-tooltip"),B=e.resolveComponent("el-option"),F=e.resolveComponent("el-select"),W=e.resolveComponent("el-switch"),h=e.resolveComponent("el-input-number"),O=e.resolveComponent("el-input"),H=e.resolveComponent("el-form-item"),U=e.resolveComponent("el-form"),Z=e.resolveComponent("el-radio"),R=e.resolveComponent("el-radio-group");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",la,[i[11]||(i[11]=e.createElementVNode("h3",null,"节点配置",-1)),T.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(k,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:d},null,8,["icon"]))]),e.createVNode(E),e.createElementVNode("div",ra,[i[12]||(i[12]=e.createElementVNode("h4",null,"数据源配置",-1)),e.createVNode(U,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,n=>e.withDirectives((e.openBlock(),e.createBlock(H,{key:n.key,required:n.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(n.label),1),n.description?(e.openBlock(),e.createBlock(A,{key:0,content:n.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(J,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[n.options&&n.type==="string"?(e.openBlock(),e.createBlock(F,{key:0,"model-value":P(n.key),onChange:x=>p(n.key,x),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.options,(x,j)=>(e.openBlock(),e.createBlock(B,{key:x,label:n.optionLabels?n.optionLabels[j]:x,value:x},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):n.type==="boolean"?(e.openBlock(),e.createBlock(A,{key:1,content:T.value&&(n.key==="needCooperativeDetection"||n.key==="enableImageSequence")?"算法任务模式下不允许修改此配置":n.key==="needCooperativeDetection"&&f.value?"已开启图片时序,无法同时开启协同检测":n.key==="enableImageSequence"&&q.value?"已开启协同检测,无法同时开启图片时序":n.key==="enableImageSequence"&&r.value?"多数据源场景下不允许开启图片时序":"",disabled:!(T.value&&(n.key==="needCooperativeDetection"||n.key==="enableImageSequence"))&&!(n.key==="needCooperativeDetection"&&f.value)&&!(n.key==="enableImageSequence"&&q.value)&&!(n.key==="enableImageSequence"&&r.value),placement:"top"},{default:e.withCtx(()=>[e.createVNode(W,{"model-value":P(n.key),disabled:T.value&&(n.key==="needCooperativeDetection"||n.key==="enableImageSequence")||n.key==="needCooperativeDetection"&&f.value||n.key==="enableImageSequence"&&q.value||n.key==="enableImageSequence"&&r.value,onChange:x=>n.key==="enableImageSequence"?w(x):n.key==="needCooperativeDetection"?g(x):p(n.key,x)},null,8,["model-value","disabled","onChange"])]),_:2},1032,["content","disabled"])):n.type==="number"||n.type==="integer"?(e.openBlock(),e.createBlock(h,{key:2,"model-value":P(n.key),onChange:x=>p(n.key,x),min:n.min,max:n.max,step:n.step||(n.type==="integer"?1:.1),precision:n.type==="integer"?0:void 0,style:{width:"100%"}},null,8,["model-value","onChange","min","max","step","precision"])):(e.openBlock(),e.createBlock(O,{key:3,"model-value":P(n.key),onInput:x=>p(n.key,x),maxlength:n.maxLength,"show-word-limit":!!n.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!n.dependsOn||$(n)]])),128))]),_:1})]),t.value?.data?.enableImageSequence?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",sa,[i[13]||(i[13]=e.createElementVNode("h4",null,"分支配置",-1)),e.createVNode(U,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(H,{label:"分支关系"},{default:e.withCtx(()=>[e.createVNode(F,{"model-value":t.value?.data.branchLogic||"and",disabled:T.value,onChange:i[0]||(i[0]=n=>e.unref(o).updateNodeData(t.value.id,{branchLogic:n})),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"ALL(满足所有分支)",value:"and"}),e.createVNode(B,{label:"SOME(满足至少一个分支)",value:"or"}),e.createVNode(B,{label:"ONE(有且只满足一个分支)",value:"more"})]),_:1},8,["model-value","disabled"])]),_:1})]),_:1})])),T.value?(e.openBlock(),e.createElementBlock("div",ia,[i[16]||(i[16]=e.createElementVNode("h4",null,"设备配置",-1)),e.createVNode(U,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(H,{label:"设备类型",required:""},{default:e.withCtx(()=>[e.createVNode(R,{"model-value":P("deviceType")??"camera",onChange:i[1]||(i[1]=n=>p("deviceType",n))},{default:e.withCtx(()=>[e.createVNode(Z,{value:"camera"},{default:e.withCtx(()=>[...i[14]||(i[14]=[e.createTextVNode("摄像机",-1)])]),_:1}),e.createVNode(Z,{value:"1400",disabled:G.value==="stream"},{default:e.withCtx(()=>[...i[15]||(i[15]=[e.createTextVNode("1400设备",-1)])]),_:1},8,["disabled"])]),_:1},8,["model-value"])]),_:1}),e.createVNode(H,{label:"设备选择",required:""},{default:e.withCtx(()=>[e.createVNode(O,{"model-value":`已选 ${M.value} 个设备`,readonly:"",style:{cursor:"pointer"},class:e.normalizeClass({"is-error":M.value===0}),onClick:y},null,8,["model-value","class"]),M.value===0?(e.openBlock(),e.createElementBlock("div",ca,"请选择至少一个设备")):e.createCommentVNode("",!0)]),_:1})]),_:1})])):e.createCommentVNode("",!0),T.value&&D.value==="1400"?(e.openBlock(),e.createElementBlock("div",da,[i[19]||(i[19]=e.createElementVNode("h4",null,"目标检测方式",-1)),e.createVNode(U,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(H,{label:"检测方式",required:""},{default:e.withCtx(()=>[e.createVNode(R,{"model-value":P("detectionMode")??"platform",onChange:i[2]||(i[2]=n=>p("detectionMode",n))},{default:e.withCtx(()=>[e.createVNode(Z,{value:"platform"},{default:e.withCtx(()=>[...i[17]||(i[17]=[e.createTextVNode("平台检测",-1)])]),_:1}),e.createVNode(Z,{value:"device"},{default:e.withCtx(()=>[...i[18]||(i[18]=[e.createTextVNode("前端设备检测",-1)])]),_:1})]),_:1},8,["model-value"])]),_:1})]),_:1})])):e.createCommentVNode("",!0),T.value&&D.value==="camera"&&G.value!=="stream"&&e.unref(o).supportPatrol()?(e.openBlock(),e.createElementBlock("div",ma,[i[21]||(i[21]=e.createElementVNode("h4",null,"轮巡分析",-1)),e.createVNode(U,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(H,{label:"启用轮巡分析"},{default:e.withCtx(()=>[e.createVNode(A,{disabled:!N.value,content:s.value,placement:"top"},{default:e.withCtx(()=>[e.createVNode(W,{"model-value":N.value?!1:P("enablePatrol"),disabled:N.value,onChange:i[3]||(i[3]=n=>p("enablePatrol",n))},null,8,["model-value","disabled"])]),_:1},8,["disabled","content"])]),_:1}),P("enablePatrol")?(e.openBlock(),e.createBlock(H,{key:0},{label:e.withCtx(()=>[i[20]||(i[20]=e.createElementVNode("span",null,"每组设备数量",-1)),e.createVNode(A,{content:"提示:每组设备数量需要根据抽帧间隔设置,建议每组设备数量不超过:10*抽帧间隔的秒数",placement:"top"},{default:e.withCtx(()=>[e.createVNode(J,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(h,{"model-value":P("patrolGroupSize")??1,onChange:i[4]||(i[4]=n=>p("patrolGroupSize",n)),min:1,max:M.value>0?M.value:void 0,style:{width:"100%"}},null,8,["model-value","max"])]),_:1})):e.createCommentVNode("",!0)]),_:1})])):e.createCommentVNode("",!0),T.value&&D.value==="camera"?(e.openBlock(),e.createElementBlock("div",pa,[i[22]||(i[22]=e.createElementVNode("h4",null,"抽帧配置",-1)),e.createVNode(U,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(H,{label:"抽帧策略"},{default:e.withCtx(()=>[G.value==="image"?(e.openBlock(),e.createBlock(F,{key:0,"model-value":0,disabled:"",style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"按时间间隔抽帧",value:0})]),_:1})):V.value?(e.openBlock(),e.createBlock(F,{key:1,"model-value":P("mode")??3,onChange:i[5]||(i[5]=n=>{p("mode",n),n===1&&p("interval",V.value?5:25)}),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"每一帧都检测",value:3}),e.createVNode(B,{label:"跳帧检测",value:1}),e.createVNode(B,{label:"关键帧",value:2})]),_:1},8,["model-value"])):(e.openBlock(),e.createBlock(F,{key:2,"model-value":P("mode")??0,onChange:i[6]||(i[6]=n=>{p("mode",n),n===0&&p("interval",30),n===1&&p("interval",25)}),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"按时间间隔抽帧",value:0}),e.createVNode(B,{label:"跳帧检测",value:1}),e.createVNode(B,{label:"关键I帧检测",value:2})]),_:1},8,["model-value"]))]),_:1}),G.value==="image"||G.value==="stream"&&(P("mode")??0)===0?(e.openBlock(),e.createBlock(H,{key:0,label:"抽帧间隔时间(秒)"},{default:e.withCtx(()=>[e.createVNode(h,{"model-value":P("interval")??30,onChange:i[7]||(i[7]=n=>p("interval",n)),min:1,max:G.value==="image"?600:60,step:1,style:{width:"100%"}},null,8,["model-value","max"])]),_:1})):e.createCommentVNode("",!0),G.value==="stream"&&(P("mode")??0)===1?(e.openBlock(),e.createBlock(H,{key:1,label:"跳帧数量(帧)"},{default:e.withCtx(()=>[V.value?(e.openBlock(),e.createBlock(h,{key:0,"model-value":P("interval")??5,onChange:i[8]||(i[8]=n=>p("interval",n)),min:1,max:30,step:1,precision:0,style:{width:"100%"}},null,8,["model-value"])):(e.openBlock(),e.createBlock(F,{key:1,"model-value":P("interval")??25,onChange:i[9]||(i[9]=n=>p("interval",n)),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:25,value:25}),e.createVNode(B,{label:50,value:50}),e.createVNode(B,{label:75,value:75}),e.createVNode(B,{label:125,value:125}),e.createVNode(B,{label:250,value:250}),e.createVNode(B,{label:375,value:375}),e.createVNode(B,{label:750,value:750})]),_:1},8,["model-value"]))]),_:1})):e.createCommentVNode("",!0),G.value==="stream"?(e.openBlock(),e.createBlock(H,{key:2,label:"抽帧硬件资源"},{default:e.withCtx(()=>[e.createVNode(F,{"model-value":P("sw_decoding")??"CPU",onChange:i[10]||(i[10]=n=>p("sw_decoding",n)),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(B,{label:"GPU",value:"GPU"}),e.createVNode(B,{label:"CPU",value:"CPU"})]),_:1},8,["model-value"])]),_:1})):e.createCommentVNode("",!0)]),_:1})])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-a941b904"]]),fa={safety:"安全检测",security:"安防监控",traffic:"交通监控",behavior:"行为分析"},Ke=(a=null)=>{const o=e.ref(a||[]),t=e.ref(!1),c=e.ref(null),_=e.ref(""),l=async(V=!1)=>{if(a){o.value=a;return}},C=async()=>{o.value=[],await l(!0)},T=V=>o.value.find(r=>r.id===V||r.title===V),D=V=>{const r=T(V);if(!r)return{};const N=r.inputSchema||r.input_schema;if(!N||!N.properties)return{};const s={};return Object.entries(N.properties).forEach(([L,P])=>{P.default!==void 0&&(s[L]=P.default)}),s},G=V=>{const r=T(V);if(!r)return[];const N=r.inputSchema||r.input_schema;if(!N||!N.properties)return[];const s=N.required||[];return Object.entries(N.properties).map(([L,P])=>({key:L,type:P.type,label:P.title||P.description||L,description:P.description||"",default:P.default,required:s.includes(L)||P.required||!1,min:P.minimum,max:P.maximum,step:P.step,options:P.enum,optionLabels:P.enumLabels||P.enum,dependsOn:P.dependsOn}))},M=e.computed(()=>{if(!_.value)return o.value;const V=_.value.toLowerCase();return o.value.filter(r=>r.name?.toLowerCase().includes(V)||r.type?.toLowerCase().includes(V)||r.title?.toLowerCase().includes(V)||r.description&&r.description.toLowerCase().includes(V)||y(r.type).toLowerCase().includes(V))}),y=V=>fa[V]||V;return{models:o,loading:t,error:c,searchKeyword:_,filteredModels:M,loadSmallModels:l,reloadSmallModels:C,getModelConfig:T,getTypeLabel:y,getDefaultArguments:D,getSchemaFields:G,validateArguments:(V,r)=>{const N=T(V);if(!N)return{valid:!1,errors:["模型不存在"]};const s=[],L=N.inputSchema||N.input_schema;return!L||!L.properties?{valid:!0,errors:[]}:(Object.entries(L.properties).forEach(([P,f])=>{const q=r[P];if(f.required&&(q==null||q==="")){s.push(`${f.title||P} 为必填项`);return}if(q!=null&&(f.type==="number"||f.type==="integer")){if(typeof q!="number"){s.push(`${f.title||P} 必须是数字`);return}f.minimum!==void 0&&q<f.minimum&&s.push(`${f.title||P} 不能小于 ${f.minimum}`),f.maximum!==void 0&&q>f.maximum&&s.push(`${f.title||P} 不能大于 ${f.maximum}`)}}),{valid:s.length===0,errors:s})}}},ga={class:"small-model-selector"},ha={key:0,class:"loading-state"},ya={key:1,class:"error-state"},_a={key:2,class:"model-list"},Na=["onClick"],Ca={class:"model-header"},ka={class:"model-name"},ba={class:"model-description"},xa={class:"model-meta"},Ea={key:3,class:"empty-state"},wa=ne({__name:"SmallModelSelector",props:{modelValue:{type:String,default:null},externalModels:{type:Array,default:null}},emits:["update:modelValue","select"],setup(a,{emit:o}){const t=a,c=o,{loading:_,error:l,searchKeyword:C,filteredModels:T,loadSmallModels:D,reloadSmallModels:G,getTypeLabel:M}=Ke(t.externalModels),y=r=>{c("update:modelValue",r.id),c("select",r)},S=()=>{G()},V=r=>({safety:"warning",security:"danger",traffic:"info"})[r]||"info";return e.onMounted(()=>{t.externalModels||D()}),(r,N)=>{const s=e.resolveComponent("el-input"),L=e.resolveComponent("el-icon"),P=e.resolveComponent("el-button"),f=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",ga,[e.createVNode(s,{modelValue:e.unref(C),"onUpdate:modelValue":N[0]||(N[0]=q=>e.isRef(C)?C.value=q:null),placeholder:"搜索小模型(名称、类型、描述)",clearable:"","prefix-icon":e.unref(Q.Search),size:"default",class:"search-input"},null,8,["modelValue","prefix-icon"]),e.unref(_)?(e.openBlock(),e.createElementBlock("div",ha,[e.createVNode(L,{class:"is-loading"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Loading))]),_:1}),N[2]||(N[2]=e.createElementVNode("span",null,"加载中...",-1))])):e.unref(l)?(e.openBlock(),e.createElementBlock("div",ya,[e.createVNode(L,{class:"error-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.CircleClose))]),_:1}),e.createElementVNode("p",null,e.toDisplayString(e.unref(l)),1),e.createVNode(P,{type:"primary",onClick:S},{default:e.withCtx(()=>[...N[3]||(N[3]=[e.createTextVNode("重试",-1)])]),_:1})])):e.unref(T).length>0?(e.openBlock(),e.createElementBlock("div",_a,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(T),q=>(e.openBlock(),e.createElementBlock("div",{key:q.id,class:e.normalizeClass(["model-item",{selected:a.modelValue===q.id}]),onClick:p=>y(q)},[e.createElementVNode("div",Ca,[e.createElementVNode("div",ka,[e.createVNode(L,{class:"model-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Cpu))]),_:1}),e.createTextVNode(" "+e.toDisplayString(q.name),1)]),e.createVNode(f,{type:V(q.type),size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(M)(q.type)),1)]),_:2},1032,["type"])]),e.createElementVNode("div",ba,e.toDisplayString(q.description),1),e.createElementVNode("div",xa,[q.supportDirectAlert?(e.openBlock(),e.createBlock(f,{key:0,size:"small",type:"success",effect:"plain"},{default:e.withCtx(()=>[...N[4]||(N[4]=[e.createTextVNode(" 支持直通预警 ",-1)])]),_:1})):e.createCommentVNode("",!0)])],10,Na))),128))])):(e.openBlock(),e.createElementBlock("div",Ea,[e.createVNode(L,{class:"empty-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Search))]),_:1}),N[6]||(N[6]=e.createElementVNode("p",null,"未找到匹配的小模型",-1)),e.createVNode(P,{text:"",onClick:N[1]||(N[1]=q=>C.value="")},{default:e.withCtx(()=>[...N[5]||(N[5]=[e.createTextVNode("清空搜索",-1)])]),_:1})]))])}}},[["__scopeId","data-v-6e0d51c6"]]),Ta={class:"position-tooltip"},Ve=ne({__name:"PositionTooltip",setup(a){return(o,t)=>(e.openBlock(),e.createElementBlock("div",Ta,[...t[0]||(t[0]=[e.createStaticVNode('<div class="tooltip-title" data-v-6ac23ee8>提示说明</div><div class="tooltip-desc" data-v-6ac23ee8> 目标点为点位代表目标位置的点,系统默认使用目标框的中心点表示目标的位置。只有当目标的重心点满足检测框完整落在检测区域时,才表示目标进入检测框或者离开检测区域。 </div><div class="tooltip-examples" data-v-6ac23ee8><div class="tooltip-example" data-v-6ac23ee8><div class="example-title" data-v-6ac23ee8>示例1:以目标框的中心点代表目标位置</div><div class="example-figure" data-v-6ac23ee8><svg viewBox="0 0 120 180" width="120" height="180" xmlns="http://www.w3.org/2000/svg" data-v-6ac23ee8><rect x="5" y="5" width="110" height="170" rx="6" fill="#fff" stroke="#ddd" stroke-width="1" data-v-6ac23ee8></rect><ellipse cx="60" cy="32" rx="18" ry="20" fill="#2d3a4a" data-v-6ac23ee8></ellipse><ellipse cx="60" cy="36" rx="14" ry="16" fill="#f5c5a3" data-v-6ac23ee8></ellipse><path d="M54 42 Q60 47 66 42" stroke="#c8956a" stroke-width="1.5" fill="none" stroke-linecap="round" data-v-6ac23ee8></path><rect x="42" y="58" width="36" height="52" rx="4" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="26" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="78" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><ellipse cx="34" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><ellipse cx="86" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><rect x="44" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><rect x="62" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><circle cx="60" cy="90" r="5" fill="#e74c3c" data-v-6ac23ee8></circle></svg></div><div class="example-coords" data-v-6ac23ee8>X轴: 0.5   Y轴: 0.5</div></div><div class="tooltip-example" data-v-6ac23ee8><div class="example-title" data-v-6ac23ee8>示例2:以目标框的最左上角代表目标位置</div><div class="example-figure" data-v-6ac23ee8><svg viewBox="0 0 120 180" width="120" height="180" xmlns="http://www.w3.org/2000/svg" data-v-6ac23ee8><rect x="5" y="5" width="110" height="170" rx="6" fill="#fff" stroke="#ddd" stroke-width="1" data-v-6ac23ee8></rect><ellipse cx="60" cy="32" rx="18" ry="20" fill="#2d3a4a" data-v-6ac23ee8></ellipse><ellipse cx="60" cy="36" rx="14" ry="16" fill="#f5c5a3" data-v-6ac23ee8></ellipse><path d="M54 42 Q60 47 66 42" stroke="#c8956a" stroke-width="1.5" fill="none" stroke-linecap="round" data-v-6ac23ee8></path><rect x="42" y="58" width="36" height="52" rx="4" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="26" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="78" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><ellipse cx="34" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><ellipse cx="86" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><rect x="44" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><rect x="62" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><circle cx="5" cy="5" r="5" fill="#e74c3c" data-v-6ac23ee8></circle></svg></div><div class="example-coords" data-v-6ac23ee8>X轴: 0   Y轴: 0</div></div><div class="tooltip-example" data-v-6ac23ee8><div class="example-title" data-v-6ac23ee8>示例3:以目标框的最右下角代表目标位置</div><div class="example-figure" data-v-6ac23ee8><svg viewBox="0 0 120 180" width="120" height="180" xmlns="http://www.w3.org/2000/svg" data-v-6ac23ee8><rect x="5" y="5" width="110" height="170" rx="6" fill="#fff" stroke="#ddd" stroke-width="1" data-v-6ac23ee8></rect><ellipse cx="60" cy="32" rx="18" ry="20" fill="#2d3a4a" data-v-6ac23ee8></ellipse><ellipse cx="60" cy="36" rx="14" ry="16" fill="#f5c5a3" data-v-6ac23ee8></ellipse><path d="M54 42 Q60 47 66 42" stroke="#c8956a" stroke-width="1.5" fill="none" stroke-linecap="round" data-v-6ac23ee8></path><rect x="42" y="58" width="36" height="52" rx="4" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="26" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><rect x="78" y="60" width="16" height="38" rx="6" fill="#4a90d9" data-v-6ac23ee8></rect><ellipse cx="34" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><ellipse cx="86" cy="100" rx="8" ry="10" fill="#f5c5a3" data-v-6ac23ee8></ellipse><rect x="44" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><rect x="62" y="108" width="14" height="42" rx="5" fill="#2d3a4a" data-v-6ac23ee8></rect><circle cx="115" cy="175" r="5" fill="#e74c3c" data-v-6ac23ee8></circle></svg></div><div class="example-coords" data-v-6ac23ee8>X轴: 1   Y轴: 1</div></div></div>',3)])]))}},[["__scopeId","data-v-6ac23ee8"]]),Sa={class:"config-header"},Va={class:"config-section"},Ba={key:0,class:"model-selector-wrapper"},Aa={key:1,class:"selected-model-info"},Da={class:"model-info-header"},La={class:"model-info-name"},Ma={class:"model-info-description"},Oa={key:0,class:"config-section"},Ia={key:3,class:"array-input"},Ra="检测到事件后,连续两次告警上报的时间间隔",$a=ne({__name:"SmallModelConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=e.inject("editorConfig",null),C=e.computed(()=>(l?.value??l)?.smallModels??null),{models:T}=Ke(C.value),D=new Set(["threshold","interval","bottomScale","leftScale","rightScale","topScale","targetHeight","targetWidth","x_ratio","y_ratio","targetNumber","overloadNumber","targetDuration"]),G={CrowdInAndOut:"上报在告警间隔时间内的进入和离开的人员数量",MotorInAndOut:"上报在告警间隔时间内的进入和离开的车辆数量"},M=e.computed(()=>{if(!t.value)return[];const p=t.value.data.input_schema||t.value.data.inputSchema;if(!p||!p.properties)return[];const w=p.required||[],g=t.value.data.title||"";return Object.entries(p.properties).filter(([u])=>D.has(u)).map(([u,$])=>{const d={key:u,type:$.type,label:$.title||$.label||$.description||u,description:$.description||"",default:$.default,required:w.includes(u)||$.required||!1,min:$.minimum!==void 0?$.minimum:$.min,max:$.maximum!==void 0?$.maximum:$.max,step:$.step,maxLength:$.maxLength,options:$.enum,optionLabels:$.enumLabels||$.enum,dependsOn:$.dependsOn,sort:$.sort};return u==="interval"&&(d.label="告警间隔(秒)",d.description=G[g]||Ra,d.isInterval=!0,d.default=d.default!=null?d.default/1e3:10,d.min=d.min!=null?d.min/1e3:1,d.max=d.max!=null?d.max/1e3:void 0,d.step=1,d.precision=0),u==="threshold"&&(d.label="小模型阈值",d.step=.01,d.precision=2),u==="targetWidth"&&(d.label="最小目标宽度",d.default=60,d.min=20,d.max=1920,d.step=1,d.precision=0),u==="targetHeight"&&(d.label="最小目标高度",d.default=60,d.min=20,d.max=1080,d.step=1,d.precision=0),u==="topScale"&&(d.label="调整目标框高度比例 (上)",d.max=10,d.step=.1,d.precision=1),u==="bottomScale"&&(d.label="调整目标框高度比例 (下)",d.max=10,d.step=.1,d.precision=1),u==="leftScale"&&(d.label="调整目标框宽度比例 (左)",d.max=10,d.step=.1,d.precision=1),u==="rightScale"&&(d.label="调整目标框宽度比例 (右)",d.max=10,d.step=.1,d.precision=1),u==="x_ratio"&&(d.label="X轴位置信息",d.step=.01,d.precision=2),u==="y_ratio"&&(d.label="Y轴位置信息",d.step=.01,d.precision=2),u==="targetDuration"&&(d.label="目标持续时间(秒)",d.default=d.default!=null?d.default/1e3:1,d.min=d.min!=null?d.min/1e3:1,d.max=d.max!=null?d.max/1e3:void 0,d.step=.01,d.precision=2),u==="overloadNumber"&&(d.precision=0),u==="targetNumber"&&(d.precision=0),d}).filter(u=>!["areas","darwin","direction","lines"].includes(u.key)).filter(u=>!(u.key==="targetDuration"&&g==="NonMotorCounter")).sort((u,$)=>(u.sort??1/0)-($.sort??1/0))}),y=["interval","targetDuration"],S=p=>{if(!t.value)return;const w=t.value.data.arguments?.[p];return y.includes(p)&&w!=null?w/1e3:w},V=(p,w)=>{if(!t.value)return;let g=w;y.includes(p)&&w!=null&&(g=w*1e3);const $={...t.value.data.arguments||{},[p]:g};o.updateNodeData(t.value.id,{arguments:$})},r=p=>{if(!p.dependsOn||!t.value)return!0;const{field:w,value:g}=p.dependsOn,u=S(w);if(typeof g=="string"&&g.startsWith("!")){const $=g.substring(1);return u!==$}return Array.isArray(g)?g.includes(u):u===g},N=p=>{const w=S(p);return Array.isArray(w)?JSON.stringify(w):""},s=(p,w)=>{try{const g=JSON.parse(w);Array.isArray(g)&&V(p,g)}catch{}},L=async p=>{if(!t.value)return;const w=p.inputSchema||p.input_schema||{},g={};w.properties&&Object.entries(w.properties).forEach(([u,$])=>{$.default!==void 0&&(g[u]=$.default)}),o.updateNodeData(t.value.id,{...t.value.data,modelId:p.id||p.title,title:p.title,modelName:p.name,modelType:p.type,input_schema:w,extraConfig:p.extraConfig,supportDirectAlert:p.supportDirectAlert||!1,arguments:g})},P=()=>{t.value&&v.ElMessageBox.confirm("更换模型将清空当前配置,是否继续?","确认更换",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{o.updateNodeData(t.value.id,{modelId:null,modelName:"",supportDirectAlert:!1,input_schema:null,arguments:{}})}).catch(()=>{})},f=()=>t.value?.data.modelId?T.value.find(w=>w.id===t.value.data.modelId)?.description||"暂无描述":"",q=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(p,w)=>{const g=e.resolveComponent("el-button"),u=e.resolveComponent("el-divider"),$=e.resolveComponent("el-icon"),d=e.resolveComponent("el-tag"),m=e.resolveComponent("el-tooltip"),i=e.resolveComponent("el-option"),k=e.resolveComponent("el-select"),E=e.resolveComponent("el-switch"),J=e.resolveComponent("el-input-number"),A=e.resolveComponent("el-input"),B=e.resolveComponent("el-text"),F=e.resolveComponent("el-form-item"),W=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Sa,[w[0]||(w[0]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(g,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:q},null,8,["icon"]))]),e.createVNode(u),e.createElementVNode("div",Va,[w[3]||(w[3]=e.createElementVNode("h4",null,"选择小模型",-1)),!t.value?.data.modelId&&!_.value?(e.openBlock(),e.createElementBlock("div",Ba,[e.createVNode(wa,{"model-value":t.value?.data.modelId,"external-models":C.value,onSelect:L},null,8,["model-value","external-models"])])):t.value?.data.modelId?(e.openBlock(),e.createElementBlock("div",Aa,[e.createElementVNode("div",Da,[e.createElementVNode("div",La,[e.createVNode($,{class:"model-info-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Cpu))]),_:1}),e.createElementVNode("span",null,e.toDisplayString(t.value?.data.modelName),1)]),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(g,{key:0,type:"text",text:"",size:"small",onClick:P},{default:e.withCtx(()=>[...w[1]||(w[1]=[e.createTextVNode(" 更换模型 ",-1)])]),_:1}))]),e.createElementVNode("div",Ma,e.toDisplayString(f()),1),t.value?.data.supportDirectAlert?(e.openBlock(),e.createBlock(d,{key:0,size:"small",type:"success",effect:"plain"},{default:e.withCtx(()=>[...w[2]||(w[2]=[e.createTextVNode(" 支持直通预警模式 ",-1)])]),_:1})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),t.value?.data.modelId?(e.openBlock(),e.createElementBlock("div",Oa,[w[4]||(w[4]=e.createElementVNode("h4",null,"模型参数",-1)),e.createVNode(W,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.value,h=>e.withDirectives((e.openBlock(),e.createBlock(F,{key:h.key,required:h.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(h.label),1),h.key==="x_ratio"||h.key==="y_ratio"?(e.openBlock(),e.createBlock(m,{key:0,placement:"right","show-arrow":!0,"popper-class":"position-info-tooltip","hide-after":0},{content:e.withCtx(()=>[e.createVNode(Ve)]),default:e.withCtx(()=>[e.createVNode($,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})):h.description?(e.openBlock(),e.createBlock(m,{key:1,content:h.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode($,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[h.options&&h.type==="string"?(e.openBlock(),e.createBlock(k,{key:0,"model-value":S(h.key),onChange:O=>V(h.key,O),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.options,(O,H)=>(e.openBlock(),e.createBlock(i,{key:O,label:h.optionLabels?h.optionLabels[H]:O,value:O},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):h.type==="boolean"?(e.openBlock(),e.createBlock(E,{key:1,"model-value":S(h.key),onChange:O=>V(h.key,O)},null,8,["model-value","onChange"])):h.type==="number"||h.type==="integer"||h.type==="float"?(e.openBlock(),e.createBlock(J,{key:2,"model-value":S(h.key),onChange:O=>V(h.key,O),min:h.min,max:h.max,step:h.step||(h.type==="integer"||h.type==="number"?1:.01),precision:h.precision??(h.type==="integer"?0:2),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step","precision"])):h.type==="array"&&!h.options?(e.openBlock(),e.createElementBlock("div",Ia,[e.createVNode(A,{"model-value":N(h.key),onChange:O=>s(h.key,O),type:"textarea",rows:3,placeholder:"输入坐标,例如: [[100,100], [200,100], [200,200], [100,200]]"},null,8,["model-value","onChange"]),e.createVNode(B,{size:"small",type:"info"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h.description||"输入多边形顶点坐标,格式: [[x1,y1], [x2,y2], ...]"),1)]),_:2},1024)])):h.type==="array"&&h.options?(e.openBlock(),e.createBlock(k,{key:4,"model-value":S(h.key),onChange:O=>V(h.key,O),multiple:"",placeholder:"请选择",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.options,(O,H)=>(e.openBlock(),e.createBlock(i,{key:O,label:h.optionLabels?h.optionLabels[H]:O,value:O},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(A,{key:5,"model-value":S(h.key),onInput:O=>V(h.key,O)},null,8,["model-value","onInput"]))]),_:2},1032,["required"])),[[e.vShow,!h.dependsOn||r(h)]])),128))]),_:1})])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-ecf7f01b"]]),Fa=(a=null)=>{const o=ae(),t=e.ref(a?a.map(y=>Te.backendToFrontend(y)):[]),c=e.ref(!1),_=e.ref(null),l=async(y=!1)=>{if(a){t.value=a.map(S=>Te.backendToFrontend(S));return}},C=y=>t.value.find(S=>S.title===y)||null,T=y=>{const S=C(y);return S?{targetId:S.title,targetName:S.label,threshold:S.data.threshold||.5,targetWidth:S.data.targetWidth||20,targetHeight:S.data.targetHeight||20,postmodel:S.data.postmodel||"ClipVit",areas:S.data.areas||[],expandRect:S.data.expandRect!==void 0?S.data.expandRect:!1,topScale:S.data.topScale||1.6,bottomScale:S.data.bottomScale||1.6,leftScale:S.data.leftScale||1.6,rightScale:S.data.rightScale||1.6,enableStructure:S.data.enableStructure}:{}},D=(y=null)=>o.nodes.filter(S=>S.type==="detectionTarget"&&S.id!==y).map(S=>({value:S.id,label:S.data.targetName||S.data.label})),G=(y=null)=>{const S=[{value:"original",label:"原图"}],V=D(y);return[...S,...V]},M=e.computed(()=>t.value.map(y=>({value:y.title,label:y.label,...y})));return{detectionTargets:t,loading:c,error:_,loadDetectionTargets:l,getTargetById:C,getDefaultConfig:T,getDetectionTargetNodes:D,getDetectionScopeOptions:G,getTargetOptions:M}},qa={class:"paired-array-input"},Be=ne({__name:"PairedArrayInput",props:{primaryField:{type:Object,required:!0},pairedField:{type:Object,required:!0},primaryValue:{type:Array,default:()=>[]},pairedValue:{type:Array,default:()=>[]}},emits:["update"],setup(a,{emit:o}){const t=(M,y)=>{let S;return(...V)=>{clearTimeout(S),S=setTimeout(()=>M(...V),y)}},c=a,_=o,l=e.ref([]),C=()=>{const M=c.primaryValue||[],y=c.pairedValue||[],S=Math.max(M.length,y.length,1);l.value=Array.from({length:S},(V,r)=>({primary:M[r]||"",paired:y[r]!==void 0?y[r]:c.pairedField.default?.[0]||.5}))};e.watch(()=>[c.primaryValue,c.pairedValue],()=>{C()},{immediate:!0,deep:!0});const T=t((M,y)=>{_("update",M,y)},300);e.watch(l,M=>{const y=M.map(V=>V.primary),S=M.map(V=>V.paired);T(y,S)},{deep:!0});const D=()=>{l.value.length>=10||l.value.push({primary:"",paired:c.pairedField.default?.[0]||.5})},G=M=>{l.value.length>1&&l.value.splice(M,1)};return(M,y)=>{const S=e.resolveComponent("el-input"),V=e.resolveComponent("el-input-number"),r=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",qa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(N,s)=>(e.openBlock(),e.createElementBlock("div",{key:s,class:"input-row"},[e.createVNode(S,{modelValue:l.value[s].primary,"onUpdate:modelValue":L=>l.value[s].primary=L,placeholder:a.primaryField.description||"输入内容",class:e.normalizeClass([{"is-error":!l.value[s].primary||l.value[s].primary.trim()===""},"primary-input"])},null,8,["modelValue","onUpdate:modelValue","placeholder","class"]),e.createVNode(V,{modelValue:l.value[s].paired,"onUpdate:modelValue":L=>l.value[s].paired=L,min:a.pairedField.min||0,max:a.pairedField.max||1,step:a.pairedField.step||.1,class:"paired-input"},null,8,["modelValue","onUpdate:modelValue","min","max","step"]),e.createVNode(r,{type:"danger",icon:e.unref(Q.Delete),circle:"",size:"small",disabled:l.value.length===1,onClick:L=>G(s)},null,8,["icon","disabled","onClick"])]))),128)),e.createVNode(r,{type:"primary",icon:e.unref(Q.Plus),size:"small",disabled:l.value.length>=10,onClick:D},{default:e.withCtx(()=>[e.createTextVNode(" 添加"+e.toDisplayString(a.primaryField.label)+e.toDisplayString(l.value.length>=10?"(已达上限)":""),1)]),_:1},8,["icon","disabled"])])}}},[["__scopeId","data-v-05218f96"]]),Ga={class:"config-header"},Ha={class:"config-section"},ja={class:"flex items-center justify-between"},Pa={key:0,class:"config-section"},za={key:1,class:"config-section"},Ua={key:2,class:"config-section"},Wa={class:"device-list"},Ja=["onClick"],Ya={class:"device-name"},Xa={key:0,class:"device-list-empty"},Qa={key:4,class:"array-input"},Ka={key:4,class:"array-input"},Za=ne({__name:"DetectionTargetConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c==="task");e.inject("taskModeConfig",null);const l=e.inject("echoAlgodata",null),C=e.inject("echoTaskData",null),T=e.inject("selectedDevicesMap",null),D=e.computed(()=>{if(!t.value)return null;const h=new Set,O=[t.value.id];for(;O.length;){const H=O.shift();if(h.has(H))continue;h.add(H);const U=o.edges.filter(Z=>Z.target===H);for(const Z of U){const R=o.nodes.find(n=>n.id===Z.source);if(R){if(R.type==="dataSource")return R.id;O.push(R.id)}}}return null}),G=e.computed(()=>{const h=D.value;return h?T?.value?.[h]??[]:[]}),M=e.computed(()=>_.value&&G.value.length>0),y=e.ref(""),S=e.ref(""),V=e.computed(()=>{const h=S.value.trim().toLowerCase();return h?G.value.filter(O=>(O.sourceName??O.name??String(O.sourceId??O.id??O)).toLowerCase().includes(h)):G.value}),r=e.computed(()=>{const h={},O=D.value,H=t.value?.id;if(!O||!H)return h;const U={...t.value?.data?.arguments??{}};delete U.configMode;for(const Z of G.value){const R=String(Z.sourceId??Z.id??Z),n=o.getTaskSourceArguments(O,R,H);if(n===null){h[R]=!1;continue}const x=new Set([...Object.keys(n),...Object.keys(U)]);let j=!1;for(const Y of x)if(JSON.stringify(n[Y])!==JSON.stringify(U[Y])){j=!0;break}h[R]=j}return h});e.watch([G,()=>t.value?.data?.arguments?.configMode],([h])=>{h.length>0?y.value=String(h[0]?.sourceId??h[0]?.id??h[0]):y.value=""},{immediate:!0});const N=(h,O=null)=>{if(O){const n=((C?.value??C)?.graph?.sources??[]).find(x=>String(x.sourceId)===String(O));if(n?.branches)for(const x of n.branches){const j=x.nodes?.find(Y=>Y.toolTitle===h);if(j?.arguments)return{...j.arguments}}return null}const H=l?.value??l,U=H?.graph??H;if(!U?.branches)return null;for(const Z of U.branches){const R=Z.nodes?.find(n=>n.toolTitle===h);if(R?.arguments)return{...R.arguments}}return null},s=h=>{const O=D.value,H=t.value?.id;if(!O||!H||!h||o.getTaskSourceArguments(O,h,H)!==null)return;const U=t.value?.data?.targetId,Z=U?N(U,h):null,R=t.value?.data?.arguments??{},n={...Z??R};delete n.configMode,o.setTaskSourceArguments(O,h,H,n)};e.watch(y,h=>{h&&t.value?.data?.arguments?.configMode==="perDevice"&&s(h)}),e.watch(()=>t.value?.data?.arguments?.configMode,h=>{h==="perDevice"&&y.value&&s(y.value)});const L=e.inject("editorConfig",null),P=e.computed(()=>(L?.value??L)?.detection??null),{detectionTargets:f,loading:q}=Fa(P.value),p=e.computed(()=>{if(!t.value)return[];const h=t.value.data.input_schema||t.value.data.inputSchema;if(!h||!h.properties)return[];const O=h.required||[];return Object.entries(h.properties).map(([H,U])=>({key:H,type:U.type,label:U.title||U.label||U.description||H,description:U.description||"",default:U.default,required:O.includes(H)||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,"x-component":U["x-component"],"x-paired-with":U["x-paired-with"],sort:U.sort})).sort((H,U)=>(H.sort??1/0)-(U.sort??1/0))}),w=h=>h.type==="array"&&h["x-component"]==="paired-array"&&h["x-paired-with"],g=h=>{const O=h["x-paired-with"];return p.value.find(H=>H.key===O)},u={targetWidth:{label:"最小目标宽度",min:20,max:1920,step:1,precision:0,default:60},targetHeight:{label:"最小目标高度",min:20,max:1080,step:1,precision:0,default:60},threshold:{label:"检测阈值",step:.01,precision:2},topScale:{label:"调整目标框高度比例 (上)",description:"按照目标框中心点坐标,向上缩放目标框y轴方向大小",max:10,step:.1,default:1.6,precision:1},bottomScale:{label:"调整目标框高度比例 (下)",description:"按照目标框中心点坐标,向下缩放目标框y轴方向大小",max:10,step:.1,default:1.6,precision:1},rightScale:{label:"调整目标框宽度比例 (右)",description:"按照目标框中心点坐标,向右缩放目标框x轴方向大小",max:10,step:.1,default:1.6,precision:1},leftScale:{label:"调整目标框宽度比例 (左)",description:"按照目标框中心点坐标,向左缩放目标框x轴方向大小",max:10,step:.1,default:1.6,precision:1},enableStruct:{label:"属性检测"},x_ratio:{label:"X轴位置信息",step:.01,precision:2},y_ratio:{label:"Y轴位置信息",step:.01,precision:2}},$=new Set(Object.keys(u)),d=e.computed(()=>{const h=t.value?.data.targetId,O=new Set;return p.value.forEach(H=>{H["x-paired-with"]&&O.add(H["x-paired-with"])}),p.value.filter(H=>h==="traffic_accident"?H.key==="threshold":$.has(H.key)&&!O.has(H.key)&&!w(H)).map(H=>{const U=u[H.key]||{};return{...H,label:U.label||H.label,description:U.description||H.description,min:U.min??H.min,max:U.max??H.max,step:U.step??H.step,precision:U.precision,default:U.default??H.default}})}),m=e.computed(()=>p.value.filter(h=>w(h))),i=h=>{if(!t.value)return;if(t.value.data.arguments?.configMode==="perDevice"&&y.value){const H=D.value,U=o.getTaskSourceArguments(H,y.value,t.value.id);if(U!==null)return U[h]}return t.value.data.arguments?.[h]},k=(h,O)=>{if(!t.value)return;const H=t.value.data.arguments?.configMode;if(h!=="configMode"&&H==="perDevice"&&y.value){const R=D.value;o.updateTaskSourceArgument(R,y.value,t.value.id,h,O);return}const Z={...t.value.data.arguments||{},[h]:O};o.updateNodeData(t.value.id,{arguments:Z})},E=h=>{if(!h.dependsOn||!t.value)return!0;const{field:O,value:H}=h.dependsOn,U=i(O);if(typeof H=="string"&&H.startsWith("!")){const Z=H.substring(1);return U!==Z}return Array.isArray(H)?H.includes(U):U===H},J=h=>{const O=i(h);return Array.isArray(O)?JSON.stringify(O):""},A=(h,O)=>{try{const H=JSON.parse(O);Array.isArray(H)&&k(h,H)}catch{}},B=(h,O,H,U)=>{if(!t.value)return;if(t.value.data.arguments?.configMode==="perDevice"&&y.value){const x=D.value;o.updateTaskSourceArgument(x,y.value,t.value.id,h,O),o.updateTaskSourceArgument(x,y.value,t.value.id,H,U);return}const n={...t.value.data.arguments||{},[h]:O,[H]:U};o.updateNodeData(t.value.id,{arguments:n})},F=async h=>{if(!t.value||!h)return;const O=f.value.find(n=>n.title===h);if(!O)return;let H=O.inputSchema||O.input_schema||{};if(h==="other"){const n={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}}};H={...H,properties:{...H.properties,...n.properties}}}const U={};H.properties&&Object.entries(H.properties).forEach(([n,x])=>{x.default!==void 0&&(U[n]=x.default)});const Z=t.value.data,R={...U,target_class:O.title};o.updateNodeData(t.value.id,{...Z,targetId:O.title,targetName:O.label,label:O.label,input_schema:H,inputSchema:H,extraConfig:O.extraConfig,arguments:R})},W=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return e.watch(()=>t.value?.data.targetId,h=>{if(!h||!t.value)return;const O=f.value.find(Z=>Z.title===h);if(!O)return;const H=t.value.data;if(H.input_schema&&Object.keys(H.input_schema).length>0)return;const U={...O.defaultArguments,...H.arguments,target_class:O.title};o.updateNodeData(t.value.id,{...H,input_schema:O.inputSchema,arguments:U})}),(h,O)=>{const H=e.resolveComponent("el-button"),U=e.resolveComponent("el-divider"),Z=e.resolveComponent("el-option"),R=e.resolveComponent("el-select"),n=e.resolveComponent("el-form-item"),x=e.resolveComponent("el-form"),j=e.resolveComponent("el-radio"),Y=e.resolveComponent("el-radio-group"),z=e.resolveComponent("el-icon"),X=e.resolveComponent("el-tooltip"),te=e.resolveComponent("el-input"),le=e.resolveComponent("el-switch"),pe=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Ga,[O[2]||(O[2]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(H,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:W},null,8,["icon"]))]),e.createVNode(U),e.createElementVNode("div",Ha,[O[3]||(O[3]=e.createElementVNode("h4",null,"检测目标选择",-1)),e.createVNode(x,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(n,{label:"选择检测目标",required:""},{default:e.withCtx(()=>[e.createVNode(R,{"model-value":t.value?.data.targetId,disabled:_.value,onChange:F,placeholder:"请选择检测目标",style:{width:"100%"},loading:e.unref(q),filterable:""},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(f),I=>(e.openBlock(),e.createBlock(Z,{key:I.title,label:I.label,value:I.title},{default:e.withCtx(()=>[e.createElementVNode("div",ja,[e.createElementVNode("span",null,e.toDisplayString(I.label),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["model-value","disabled","loading"])]),_:1})]),_:1})]),M.value?(e.openBlock(),e.createElementBlock("div",Pa,[O[6]||(O[6]=e.createElementVNode("h4",null,"配置方式",-1)),e.createVNode(x,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(n,{label:"配置方式"},{default:e.withCtx(()=>[e.createVNode(Y,{"model-value":t.value?.data?.arguments?.configMode??"unified",onChange:O[0]||(O[0]=I=>k("configMode",I))},{default:e.withCtx(()=>[e.createVNode(j,{value:"unified"},{default:e.withCtx(()=>[...O[4]||(O[4]=[e.createTextVNode("所有设备统一配置",-1)])]),_:1}),e.createVNode(j,{value:"perDevice"},{default:e.withCtx(()=>[...O[5]||(O[5]=[e.createTextVNode("单设备分别配置",-1)])]),_:1})]),_:1},8,["model-value"])]),_:1})]),_:1})])):e.createCommentVNode("",!0),m.value.length>0?(e.openBlock(),e.createElementBlock("div",za,[O[7]||(O[7]=e.createElementVNode("h4",null,"检测目标",-1)),e.createVNode(x,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,I=>(e.openBlock(),e.createBlock(n,{key:I.key,required:I.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(I.label),1),I.description?(e.openBlock(),e.createBlock(X,{key:0,content:I.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[e.createVNode(Be,{"primary-field":I,"paired-field":g(I),"primary-value":i(I.key),"paired-value":i(I["x-paired-with"]),onUpdate:(K,re)=>B(I.key,K,I["x-paired-with"],re)},null,8,["primary-field","paired-field","primary-value","paired-value","onUpdate"])]),_:2},1032,["required"]))),128))]),_:1})])):e.createCommentVNode("",!0),t.value?.data.targetId&&t.value?.data.targetId!=="full"?(e.openBlock(),e.createElementBlock("div",Ua,[O[9]||(O[9]=e.createElementVNode("h4",null,"检测目标参数",-1)),t.value?.data?.arguments?.configMode==="perDevice"&&G.value.length>0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(te,{modelValue:S.value,"onUpdate:modelValue":O[1]||(O[1]=I=>S.value=I),placeholder:"搜索设备...",clearable:"",size:"small",class:"device-search"},{prefix:e.withCtx(()=>[e.createVNode(z,null,{default:e.withCtx(()=>[e.createVNode(e.unref(Q.Search))]),_:1})]),_:1},8,["modelValue"]),e.createElementVNode("div",Wa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,I=>(e.openBlock(),e.createElementBlock("div",{key:String(I.sourceId??I.id??I),class:e.normalizeClass(["device-list-item",{"is-active":y.value===String(I.sourceId??I.id??I),"has-custom":r.value[String(I.sourceId??I.id??I)]}]),onClick:K=>y.value=String(I.sourceId??I.id??I)},[e.createElementVNode("span",Ya,e.toDisplayString(I.sourceName??I.name??String(I.sourceId??I.id??I)),1),r.value[String(I.sourceId??I.id??I)]?(e.openBlock(),e.createBlock(X,{key:0,content:"已单独配置参数",placement:"right"},{default:e.withCtx(()=>[...O[8]||(O[8]=[e.createElementVNode("span",{class:"custom-dot"},"✔",-1)])]),_:1})):e.createCommentVNode("",!0)],10,Ja))),128)),V.value.length===0?(e.openBlock(),e.createElementBlock("div",Xa," 无匹配设备 ")):e.createCommentVNode("",!0)]),y.value?(e.openBlock(),e.createBlock(x,{key:0,"label-position":"top",size:"default",style:{"margin-top":"12px"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,I=>e.withDirectives((e.openBlock(),e.createBlock(n,{key:I.key,required:I.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(I.label),1),I.key==="x_ratio"||I.key==="y_ratio"?(e.openBlock(),e.createBlock(X,{key:0,placement:"right","show-arrow":!0,"popper-class":"position-info-tooltip","hide-after":0},{content:e.withCtx(()=>[e.createVNode(Ve)]),default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})):I.description?(e.openBlock(),e.createBlock(X,{key:1,content:I.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[I.options&&I.type==="string"?(e.openBlock(),e.createBlock(R,{key:0,"model-value":i(I.key),onChange:K=>k(I.key,K),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.options,(K,re)=>(e.openBlock(),e.createBlock(Z,{key:K,label:I.optionLabels?I.optionLabels[re]:K,value:K},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):I.type==="boolean"?(e.openBlock(),e.createBlock(le,{key:1,"model-value":i(I.key),onChange:K=>k(I.key,K)},null,8,["model-value","onChange"])):I.type==="number"||I.type==="integer"?(e.openBlock(),e.createBlock(pe,{key:2,"model-value":i(I.key),onChange:K=>k(I.key,K),min:I.min,max:I.max,step:I.step||(I.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):w(I)?(e.openBlock(),e.createBlock(Be,{key:3,"primary-field":I,"paired-field":g(I),"primary-value":i(I.key),"paired-value":i(I["x-paired-with"]),onUpdate:(K,re)=>B(I.key,K,I["x-paired-with"],re)},null,8,["primary-field","paired-field","primary-value","paired-value","onUpdate"])):I.type==="array"&&!I.options?(e.openBlock(),e.createElementBlock("div",Qa,[e.createVNode(te,{"model-value":J(I.key),onChange:K=>A(I.key,K),type:"textarea",rows:3,placeholder:I.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):I.type==="array"&&I.options?(e.openBlock(),e.createBlock(R,{key:5,"model-value":i(I.key),onChange:K=>k(I.key,K),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.options,(K,re)=>(e.openBlock(),e.createBlock(Z,{key:K,label:I.optionLabels?I.optionLabels[re]:K,value:K},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(te,{key:6,"model-value":i(I.key),onInput:K=>k(I.key,K),maxlength:I.maxLength,"show-word-limit":!!I.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!I.dependsOn||E(I)]])),128))]),_:1})):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createBlock(x,{key:1,"label-position":"top",size:"default"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,I=>e.withDirectives((e.openBlock(),e.createBlock(n,{key:I.key,required:I.required},{label:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(I.label),1),I.key==="x_ratio"||I.key==="y_ratio"?(e.openBlock(),e.createBlock(X,{key:0,placement:"right","show-arrow":!0,"popper-class":"position-info-tooltip","hide-after":0},{content:e.withCtx(()=>[e.createVNode(Ve)]),default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})):I.description?(e.openBlock(),e.createBlock(X,{key:1,content:I.description,placement:"top"},{default:e.withCtx(()=>[e.createVNode(z,{class:"field-help"},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1},8,["content"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[I.options&&I.type==="string"?(e.openBlock(),e.createBlock(R,{key:0,"model-value":i(I.key),onChange:K=>k(I.key,K),style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.options,(K,re)=>(e.openBlock(),e.createBlock(Z,{key:K,label:I.optionLabels?I.optionLabels[re]:K,value:K},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):I.type==="boolean"?(e.openBlock(),e.createBlock(le,{key:1,"model-value":i(I.key),onChange:K=>k(I.key,K)},null,8,["model-value","onChange"])):I.type==="number"||I.type==="integer"?(e.openBlock(),e.createBlock(pe,{key:2,"model-value":i(I.key),onChange:K=>k(I.key,K),min:I.min,max:I.max,step:I.step||(I.type==="integer"?1:.1),style:{width:"100%"}},null,8,["model-value","onChange","min","max","step"])):w(I)?(e.openBlock(),e.createBlock(Be,{key:3,"primary-field":I,"paired-field":g(I),"primary-value":i(I.key),"paired-value":i(I["x-paired-with"]),onUpdate:(K,re)=>B(I.key,K,I["x-paired-with"],re)},null,8,["primary-field","paired-field","primary-value","paired-value","onUpdate"])):I.type==="array"&&!I.options?(e.openBlock(),e.createElementBlock("div",Ka,[e.createVNode(te,{"model-value":J(I.key),onChange:K=>A(I.key,K),type:"textarea",rows:3,placeholder:I.description||"输入JSON数组"},null,8,["model-value","onChange","placeholder"])])):I.type==="array"&&I.options?(e.openBlock(),e.createBlock(R,{key:5,"model-value":i(I.key),onChange:K=>k(I.key,K),multiple:"",style:{width:"100%"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.options,(K,re)=>(e.openBlock(),e.createBlock(Z,{key:K,label:I.optionLabels?I.optionLabels[re]:K,value:K},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])):(e.openBlock(),e.createBlock(te,{key:6,"model-value":i(I.key),onInput:K=>k(I.key,K),maxlength:I.maxLength,"show-word-limit":!!I.maxLength},null,8,["model-value","onInput","maxlength","show-word-limit"]))]),_:2},1032,["required"])),[[e.vShow,!I.dependsOn||E(I)]])),128))]),_:1}))])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-d53c8063"]]),va={class:"config-header"},el={class:"config-section"},tl={key:0,style:{"margin-bottom":"8px"}},ol=ne({__name:"TargetCountConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=M=>{if(!t.value)return;const y={...t.value.data.arguments,conditionRelation:M};o.updateNodeData(t.value.id,{arguments:y})},C=()=>{if(!t.value)return;const y=[...t.value.data.arguments?.alertConditions||[],{operator:">",value:0}],S={...t.value.data.arguments,alertConditions:y};o.updateNodeData(t.value.id,{arguments:S})},T=(M,y,S)=>{if(!t.value)return;const V=[...t.value.data.arguments?.alertConditions||[]];V[M]={...V[M],[y]:S};const r={...t.value.data.arguments,alertConditions:V};o.updateNodeData(t.value.id,{arguments:r})},D=M=>{if(!t.value)return;const y=[...t.value.data.arguments?.alertConditions||[]];y.splice(M,1);const S={...t.value.data.arguments,alertConditions:y};o.updateNodeData(t.value.id,{arguments:S})},G=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(M,y)=>{const S=e.resolveComponent("el-button"),V=e.resolveComponent("el-divider"),r=e.resolveComponent("el-text"),N=e.resolveComponent("el-option"),s=e.resolveComponent("el-select"),L=e.resolveComponent("el-input-number"),P=e.resolveComponent("el-radio"),f=e.resolveComponent("el-radio-group"),q=e.resolveComponent("el-form-item"),p=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",va,[y[1]||(y[1]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(S,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:G},null,8,["icon"]))]),e.createVNode(V),e.createElementVNode("div",el,[y[9]||(y[9]=e.createElementVNode("h4",null,"目标计数配置",-1)),e.createVNode(p,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(q,null,{label:e.withCtx(()=>[y[3]||(y[3]=e.createElementVNode("span",null,"计数条件",-1)),e.createVNode(r,{size:"small",type:"info",style:{"margin-left":"8px"}},{default:e.withCtx(()=>[...y[2]||(y[2]=[e.createTextVNode("(必填)",-1)])]),_:1})]),default:e.withCtx(()=>[e.createVNode(r,{size:"small",type:"info",style:{display:"block","margin-bottom":"8px"}},{default:e.withCtx(()=>[...y[4]||(y[4]=[e.createTextVNode(" 当目标数量满足下列条件时才上报 ",-1)])]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value?.data.arguments?.alertConditions||[],(w,g)=>(e.openBlock(),e.createElementBlock("div",{key:g,style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px",width:"100%","box-sizing":"border-box"}},[e.createVNode(s,{"model-value":w.operator,onChange:u=>T(g,"operator",u),style:{width:"120px","flex-shrink":"0"}},{default:e.withCtx(()=>[e.createVNode(N,{label:"等于 =",value:"="}),e.createVNode(N,{label:"大于 >",value:">"}),e.createVNode(N,{label:"小于 <",value:"<"}),e.createVNode(N,{label:"大于等于 ≥",value:">="}),e.createVNode(N,{label:"小于等于 ≤",value:"<="})]),_:1},8,["model-value","onChange"]),e.createVNode(L,{"model-value":w.value,onChange:u=>T(g,"value",u),min:0,precision:0,max:9999,style:{flex:"1"},"controls-position":"right",placeholder:"请输入数值"},null,8,["model-value","onChange"]),(t.value?.data.arguments?.alertConditions||[]).length>1?(e.openBlock(),e.createBlock(S,{key:0,type:"danger",icon:e.unref(Q.Delete),circle:"",size:"small",onClick:u=>D(g)},null,8,["icon","onClick"])):e.createCommentVNode("",!0)]))),128)),(t.value?.data.arguments?.alertConditions||[]).length>=2?(e.openBlock(),e.createElementBlock("div",tl,[e.createVNode(r,{size:"small",style:{"margin-right":"8px"}},{default:e.withCtx(()=>[...y[5]||(y[5]=[e.createTextVNode("条件关系:",-1)])]),_:1}),e.createVNode(f,{"model-value":t.value?.data.arguments?.conditionRelation||"OR",onChange:y[0]||(y[0]=w=>l(w))},{default:e.withCtx(()=>[e.createVNode(P,{value:"OR"},{default:e.withCtx(()=>[...y[6]||(y[6]=[e.createTextVNode("OR(满足任一)",-1)])]),_:1}),e.createVNode(P,{value:"AND"},{default:e.withCtx(()=>[...y[7]||(y[7]=[e.createTextVNode("AND(同时满足)",-1)])]),_:1})]),_:1},8,["model-value"])])):e.createCommentVNode("",!0),e.createVNode(S,{type:"text",link:"",icon:e.unref(Q.Plus),onClick:C},{default:e.withCtx(()=>[...y[8]||(y[8]=[e.createTextVNode(" 添加条件 ",-1)])]),_:1},8,["icon"])]),_:1})]),_:1})])])}}},[["__scopeId","data-v-3dcd1bfb"]]),nl={class:"config-header"},al={class:"config-section"},ll={style:{display:"flex","align-items":"center",gap:"8px"}},rl={style:{display:"flex","align-items":"center",gap:"8px"}},sl={style:{display:"flex","align-items":"center",gap:"8px"}},il=ne({__name:"TimerTargetConfig",setup(a){const o=ae(),t=e.computed(()=>o.selectedNode),c=e.inject("editorMode",oe.ALGORITHM),_=e.computed(()=>c===oe.TASK),l=N=>{if(!t.value)return;const s={...t.value.data.arguments,duration:N};o.updateNodeData(t.value.id,{arguments:s})},C=N=>{if(!t.value)return;const s={...t.value.data.arguments,similarity_enabled:N};o.updateNodeData(t.value.id,{arguments:s})},T=N=>{if(!t.value)return;const s={...t.value.data.arguments,similarity_threshold:N};o.updateNodeData(t.value.id,{arguments:s})},D=N=>{if(!t.value)return;const s={...t.value.data.arguments,hit_rate_enabled:N};o.updateNodeData(t.value.id,{arguments:s})},G=N=>{if(!t.value)return;const s={...t.value.data.arguments,hit_rate_operator:N};o.updateNodeData(t.value.id,{arguments:s})},M=N=>{if(!t.value)return;const s={...t.value.data.arguments,hit_rate_threshold:N};o.updateNodeData(t.value.id,{arguments:s})},y=N=>{if(!t.value)return;const s=t.value.data.arguments?.overlap_detection||{},L={...t.value.data.arguments,overlap_detection:{operator:s.operator??"gt",threshold:s.threshold??90,...s,enabled:N}};o.updateNodeData(t.value.id,{arguments:L})},S=N=>{if(!t.value)return;const s={...t.value.data.arguments,overlap_detection:{...t.value.data.arguments?.overlap_detection,operator:N}};o.updateNodeData(t.value.id,{arguments:s})},V=N=>{if(!t.value)return;const s={...t.value.data.arguments,overlap_detection:{...t.value.data.arguments?.overlap_detection,threshold:N}};o.updateNodeData(t.value.id,{arguments:s})},r=()=>{t.value&&v.ElMessageBox.confirm("确定要删除这个节点吗?","确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(()=>{o.removeNode(t.value.id)}).catch(()=>{})};return(N,s)=>{const L=e.resolveComponent("el-button"),P=e.resolveComponent("el-divider"),f=e.resolveComponent("el-input-number"),q=e.resolveComponent("el-text"),p=e.resolveComponent("el-form-item"),w=e.resolveComponent("el-switch"),g=e.resolveComponent("el-icon"),u=e.resolveComponent("el-tooltip"),$=e.resolveComponent("el-slider"),d=e.resolveComponent("el-option"),m=e.resolveComponent("el-select"),i=e.resolveComponent("el-form");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",nl,[s[9]||(s[9]=e.createElementVNode("h3",null,"节点配置",-1)),_.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(L,{key:0,type:"danger",size:"small",icon:e.unref(Q.Delete),circle:"",onClick:r},null,8,["icon"]))]),e.createVNode(P),e.createElementVNode("div",al,[s[13]||(s[13]=e.createElementVNode("h4",null,"目标计时配置",-1)),e.createVNode(i,{"label-position":"top",size:"default"},{default:e.withCtx(()=>[e.createVNode(p,{label:"持续时间(秒)",required:""},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":t.value?.data.arguments?.duration??30,onChange:s[0]||(s[0]=k=>l(k)),min:1,max:3600,precision:0,style:{width:"100%"},"controls-position":"right"},null,8,["model-value"]),e.createVNode(q,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...s[10]||(s[10]=[e.createTextVNode(" 目标需要持续出现的时间阈值(1-3600秒) ",-1)])]),_:1})]),_:1}),e.createVNode(p,{label:"目标追踪"},{default:e.withCtx(()=>[e.createElementVNode("div",ll,[e.createVNode(w,{"model-value":t.value?.data.arguments?.similarity_enabled??!1,onChange:s[1]||(s[1]=k=>C(k))},null,8,["model-value"]),e.createVNode(u,{content:"当连续多张图片中目标的相似度大于阈值时,表示多张图片中的目标为同一个目标",placement:"top"},{default:e.withCtx(()=>[e.createVNode(g,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.similarity_enabled?(e.openBlock(),e.createBlock(p,{key:0,label:"目标相似度阈值(%)",required:""},{default:e.withCtx(()=>[e.createVNode($,{"model-value":t.value?.data.arguments?.similarity_threshold??90,onInput:s[2]||(s[2]=k=>T(k)),min:0,max:100,step:1,"show-input":"","show-input-controls":!1},null,8,["model-value"]),e.createVNode(q,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...s[11]||(s[11]=[e.createTextVNode(" 判定为同一目标的相似度阈值 ",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(p,{label:"目标命中次数"},{default:e.withCtx(()=>[e.createElementVNode("div",rl,[e.createVNode(w,{"model-value":t.value?.data.arguments?.hit_rate_enabled??!1,onChange:s[3]||(s[3]=k=>D(k))},null,8,["model-value"]),e.createVNode(u,{content:"当连续多张图片中多次出现了目标时,表示目标行为在持续",placement:"top"},{default:e.withCtx(()=>[e.createVNode(g,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.hit_rate_enabled?(e.openBlock(),e.createBlock(p,{key:1,label:"命中次数判断条件",required:""},{default:e.withCtx(()=>[e.createVNode(m,{"model-value":t.value?.data.arguments?.hit_rate_operator??"gte",onChange:s[4]||(s[4]=k=>G(k)),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(d,{label:"大于 >",value:"gt"}),e.createVNode(d,{label:"大于等于 >=",value:"gte"}),e.createVNode(d,{label:"等于 =",value:"eq"}),e.createVNode(d,{label:"小于等于 <=",value:"lte"}),e.createVNode(d,{label:"小于 <",value:"lt"})]),_:1},8,["model-value"])]),_:1})):e.createCommentVNode("",!0),t.value?.data.arguments?.hit_rate_enabled?(e.openBlock(),e.createBlock(p,{key:2,label:"目标命中次数",required:""},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":t.value?.data.arguments?.hit_rate_threshold??2,onChange:s[5]||(s[5]=k=>M(k)),min:2,max:1e3,precision:0,style:{width:"100%"},"controls-position":"right"},null,8,["model-value"]),e.createVNode(q,{size:"small",type:"info",style:{"margin-top":"4px",display:"block"}},{default:e.withCtx(()=>[...s[12]||(s[12]=[e.createTextVNode(" 连续图片中目标出现的最低次数(2-1000) ",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(p,{label:"目标框重合检测"},{default:e.withCtx(()=>[e.createElementVNode("div",sl,[e.createVNode(w,{"model-value":t.value?.data.arguments?.overlap_detection?.enabled||!1,onChange:s[6]||(s[6]=k=>y(k))},null,8,["model-value"]),e.createVNode(u,{content:"通过检测相邻画面中目标框的重合比例来判断目标是否发生了移动",placement:"top"},{default:e.withCtx(()=>[e.createVNode(g,{style:{cursor:"help"}},{default:e.withCtx(()=>[e.createVNode(e.unref(Q.QuestionFilled))]),_:1})]),_:1})])]),_:1}),t.value?.data.arguments?.overlap_detection?.enabled?(e.openBlock(),e.createBlock(p,{key:3,label:"重合运算条件",required:""},{default:e.withCtx(()=>[e.createVNode(m,{"model-value":t.value?.data.arguments?.overlap_detection?.operator??"gt",onChange:s[7]||(s[7]=k=>S(k)),style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(d,{label:"大于 >",value:"gt"}),e.createVNode(d,{label:"等于 =",value:"eq"}),e.createVNode(d,{label:"小于 <",value:"lt"})]),_:1},8,["model-value"])]),_:1})):e.createCommentVNode("",!0),t.value?.data.arguments?.overlap_detection?.enabled?(e.openBlock(),e.createBlock(p,{key:4,label:"重合比例(%)",required:""},{default:e.withCtx(()=>[e.createVNode(f,{"model-value":t.value?.data.arguments?.overlap_detection?.threshold??90,onChange:s[8]||(s[8]=k=>V(k)),min:0,max:100,precision:2,style:{width:"100%"},"controls-position":"right"},null,8,["model-value"])]),_:1})):e.createCommentVNode("",!0)]),_:1})])])}}},[["__scopeId","data-v-2969d123"]]),cl={class:"node-config-panel"},dl={class:"config-content"},ml=ne({__name:"NodeConfigPanel",setup(a){const o=ae(),t={edge:ln,group:sn,start:An,end:Rn,classificationModel:zn,ocr:Jn,licensePlate:Qn,face:Qe,stream:aa,dataSource:ua,smallModel:$a,detectionTarget:Za,targetCount:ol,timerTarget:il,faceRecognition:Qe},c=e.computed(()=>{const _=o.selectedEdge;if(_)return o.nodes.find(T=>T.id===_.source)?.data?.enableBranch&&t.edge||null;const l=o.selectedNode;return l&&t[l.type]||null});return(_,l)=>(e.openBlock(),e.createElementBlock("div",cl,[e.createElementVNode("div",dl,[c.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value),{key:0})):e.createCommentVNode("",!0)])]))}},[["__scopeId","data-v-5b5a9ed3"]]),pl={class:"workflow-editor",id:"workflow-editor"},ul={class:"editor-content"},fl={__name:"WorkflowEditor",props:{mode:{type:String,default:oe.ALGORITHM,validator:a=>Object.values(oe).includes(a)},pageMode:{type:String,default:Ne.CREATE,validator:a=>Object.values(Ne).includes(a)},taskModeConfig:{type:Object,default:()=>null},algorithmModeConfig:{type:Object,default:()=>null},echoAlgodata:{type:Object,default:()=>null},echoTaskData:{type:Object,default:()=>null}},setup(a,{expose:o}){const t=a,c=String(e.getCurrentInstance()?.uid??Math.random().toString(36).slice(2));e.provide("workflowInstanceId",c),e.provide("editorMode",t.mode),e.provide("pageMode",e.computed(()=>t.pageMode)),e.provide("taskModeConfig",e.computed(()=>t.taskModeConfig));const _=e.ref({});e.provide("selectedDevicesMap",_);const l=e.computed(()=>t.mode==="task"?t.taskModeConfig:t.algorithmModeConfig);e.provide("editorConfig",l),e.provide("echoAlgodata",e.computed(()=>t.echoAlgodata)),e.provide("echoTaskData",e.computed(()=>t.echoTaskData));const C=ae(c),{copyToClipboard:T,downloadJSON:D,exportToJSON:G}=Ue(t.mode,C,l),{runValidation:M}=We(t.mode,C,e.computed(()=>t.taskModeConfig),_);e.onUnmounted(()=>{it(c)});const y=e.computed(()=>{if(C.selectedNodeId)return!0;const V=C.selectedEdge;return V?!!C.nodes.find(N=>N.id===V.source)?.data?.enableBranch:!1});return o({reset:()=>{C.resetWorkflow()},runTest:M,copyJSON:T,exportJSON:G}),(V,r)=>(e.openBlock(),e.createElementBlock("div",pl,[e.createVNode(wt),e.createElementVNode("div",ul,[e.createVNode(Dt),e.createVNode(tn),e.createVNode(e.Transition,{name:"slide-right"},{default:e.withCtx(()=>[y.value?(e.openBlock(),e.createBlock(ml,{key:0})):e.createCommentVNode("",!0)]),_:1})])]))}},Ze=ne(fl,[["__scopeId","data-v-dfbe718a"]]),gl={Box:Q.Box,CircleCheck:Q.CircleCheck,CircleClose:Q.CircleClose,Close:Q.Close,CopyDocument:Q.CopyDocument,Cpu:Q.Cpu,DArrowLeft:Q.DArrowLeft,DataAnalysis:Q.DataAnalysis,Delete:Q.Delete,Document:Q.Document,Download:Q.Download,FolderOpened:Q.FolderOpened,Grid:Q.Grid,Loading:Q.Loading,Plus:Q.Plus,QuestionFilled:Q.QuestionFilled,RefreshLeft:Q.RefreshLeft,Search:Q.Search,Timer:Q.Timer,Upload:Q.Upload,User:Q.User,View:Q.View,VideoPlay:Q.VideoPlay,Warning:Q.Warning},ve=a=>{Object.entries(gl).forEach(([o,t])=>{a.component(o,t)}),a.component("WorkflowEditor",Ze)},hl={install:ve};se.EditorMode=oe,se.NodeType=b,se.PageMode=Ne,se.WorkflowEditor=Ze,se.default=hl,se.install=ve,Object.defineProperties(se,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));