diff --git a/src/views/flow/components/ParamsDrawer.vue b/src/views/flow/components/ParamsDrawer.vue index e2f28b4..5ce1958 100644 --- a/src/views/flow/components/ParamsDrawer.vue +++ b/src/views/flow/components/ParamsDrawer.vue @@ -35,7 +35,7 @@ import CodeNodeParams from './params/CodeNodeParams.vue' import HttpNodeParams from './params/HttpNodeParams.vue' import SdAgentNodeParams from './params/SdAgentNodeParams.vue' import RecognizeNodeParams from './params/RecognizeNodeParams.vue' -import DeviceUniversal from './params/Device_universal.vue' +import DeviceUniversal from './params/DeviceUniversal.vue' import SwitchNodeParams from './params/SwitchNodeParams.vue' const props = defineProps({ @@ -62,7 +62,7 @@ const currentComponent = computed(() => { if (type === 'http') return HttpNodeParams if (type === 'sdAgent') return SdAgentNodeParams if (type === 'recognize') return RecognizeNodeParams - if (type === 'device_universal') return DeviceUniversal + if (type === 'deviceUniversal') return DeviceUniversal if (type === 'branch') return SwitchNodeParams return null }) diff --git a/src/views/flow/components/params/Device_universal.vue b/src/views/flow/components/params/DeviceUniversal.vue similarity index 100% rename from src/views/flow/components/params/Device_universal.vue rename to src/views/flow/components/params/DeviceUniversal.vue diff --git a/src/views/flow/config.js b/src/views/flow/config.js index bb1853c..a5884a9 100644 --- a/src/views/flow/config.js +++ b/src/views/flow/config.js @@ -325,7 +325,7 @@ function handler(params) { { icon: cameraSvg, name: "通用指令", - type: "device_universal", + type: "deviceUniversal", desc: "执行设备通用指令", action: 'DEVICE_EXECUTE_JSON_COMMAND', nodeType: 'EDGE', diff --git a/src/views/flow/nodes/function/device_universal.vue b/src/views/flow/nodes/function/deviceUniversal.vue similarity index 100% rename from src/views/flow/nodes/function/device_universal.vue rename to src/views/flow/nodes/function/deviceUniversal.vue diff --git a/src/views/flow/vue-flow/FlowNode.vue b/src/views/flow/vue-flow/FlowNode.vue index e0d924d..b019f9e 100644 --- a/src/views/flow/vue-flow/FlowNode.vue +++ b/src/views/flow/vue-flow/FlowNode.vue @@ -79,7 +79,7 @@ import CodeNode from "../nodes/function/codeNode.vue"; import CurrentLoopNode from "../nodes/function/currentLoop.vue"; import SdAgentNode from "../nodes/function/sdAgent.vue"; import RecognizeNode from "../nodes/function/recognize.vue"; -import DeviceUniversal from "../nodes/function/device_universal.vue"; +import DeviceUniversal from "../nodes/function/deviceUniversal.vue"; const props = defineProps({ id: String, @@ -104,7 +104,7 @@ const componentMap = { currentLoop: CurrentLoopNode, sdAgent: SdAgentNode, recognize: RecognizeNode, - device_universal: DeviceUniversal, + deviceUniversal: DeviceUniversal, }; const flowStore = useFlowStore(); diff --git a/src/views/flow/vue-flow/adapter.js b/src/views/flow/vue-flow/adapter.js index 68aaa69..c3c66e1 100644 --- a/src/views/flow/vue-flow/adapter.js +++ b/src/views/flow/vue-flow/adapter.js @@ -791,10 +791,21 @@ export const createFlowFacade = (store) => { const group = store.findNode(groupId); const child = store.findNode(childId); if (!group || !child || GROUP_TYPES.has(child.data.flowType)) return; + const previousParentId = child.parentNode || child.data?.properties?.parentId; const graph = facade.getGraphData(); const groupData = graph.nodes.find((node) => node.id === groupId); const childData = graph.nodes.find((node) => node.id === childId); if (!groupData || !childData) return; + + // 节点从循环体外进入循环体后,原连线的两端已处于不同执行作用域,必须全部断开。 + // 在重新渲染父子结构前直接过滤图数据,可保证入边、出边和层级变更在同一次更新中完成。 + const enteringLoop = group.data.flowType === "loop" && previousParentId !== groupId; + if (enteringLoop) { + graph.edges = graph.edges.filter((edge) => ( + edge.sourceNodeId !== childId && edge.targetNodeId !== childId + )); + } + groupData.children = Array.from(new Set([...(groupData.children || []), childId])); childData.properties = { ...(childData.properties || {}), parentId: groupId }; if (dropCenter) {