This commit is contained in:
sjl
2025-10-23 16:28:13 +08:00
parent ce5dfd6963
commit 9fef439e59

View File

@@ -36,6 +36,7 @@ import CustomEdge from './RemoveableEdge.vue' // 导入自定义连接线组件
import { jwtUtil } from '@/utils/jwtUtil' import { jwtUtil } from '@/utils/jwtUtil'
import { useCheckStore } from '@/stores/modules/check' import { useCheckStore } from '@/stores/modules/check'
import { ipc } from '@/utils/ipcRenderer' import { ipc } from '@/utils/ipcRenderer'
import { fa, tr } from 'element-plus/es/locale'
const vueFlowElement = ref(442) const vueFlowElement = ref(442)
const checkStore = useCheckStore() const checkStore = useCheckStore()
const dialogVisible = ref(false) const dialogVisible = ref(false)
@@ -68,7 +69,7 @@ const prop = defineProps({
const dialogHeight = ref(600) const dialogHeight = ref(600)
// 初始化 VueFlow注册自定义连线类型 // 初始化 VueFlow注册自定义连线类型
const { edges, setViewport } = useVueFlow({ const { edges, setViewport,removeEdges } = useVueFlow({
edgeTypes: { edgeTypes: {
default: CustomEdge default: CustomEdge
} }
@@ -295,21 +296,83 @@ const createLabel3 = (text: string) => {
const handleConnectStart = (params: any) => { const handleConnectStart = (params: any) => {
onPaneReady() onPaneReady()
} }
// const handleConnectEnd = (params: any) => {
// console.log('handleConnectEnd',edges.value,edges.value.length)
// onPaneReady()
// }
// const handleConnect = (params: any) => {
// const sourceNode = nodes.value.find(node => node.id === params.source)
// const targetNode = nodes.value.find(node => node.id === params.target)
// const isValidConnection = sourceNode?.type === 'input' && targetNode?.type === 'output'
// if (!isValidConnection) {
// removeEdge(params)
// ElMessage.warning('只能从被检通道连接到标准通道')
// return
// }
// // 过滤掉当前连接,检查是否还有重复的
// const existingEdges = edges.value.filter(edge => edge.source === params.source || edge.target === params.target)
// // 如果同源或同目标的连接超过1个说明有重复
// if (existingEdges.length > 1) {
// const duplicateSource = existingEdges.filter(edge => edge.source === params.source).length > 1
// const duplicateTarget = existingEdges.filter(edge => edge.target === params.target).length > 1
// if (duplicateSource) {
// removeEdge(params)
// ElMessage.warning('该被检通道已经连接,不能重复连接')
// return
// }
// if (duplicateTarget) {
// removeEdge(params)
// ElMessage.warning('该标准通道已经连接,不能重复连接')
// return
// }
// }
// }
// // 删除不合法连接
// const removeEdge = (params: any) => {
// // console.log('删除不合法连接:', params);
// // console.log('删除连接信息:', edges.value);
// // console.log('11111===', edges.value.length);
// const edgeIndex = edges.value.findIndex(edge => edge.source === params.source && edge.target === params.target)
// console.log('删除连接索引:', edgeIndex);
// if (edgeIndex !== -1) {
// edges.value.splice(edgeIndex , 1)
// }
// }
// 添加一个响应式变量来存储需要删除的连接信息
const pendingRemoveEdge = ref<any>(null)
const handleConnectEnd = (params: any) => { const handleConnectEnd = (params: any) => {
// 在连接结束时检查是否有待删除的连接
if (pendingRemoveEdge.value) {
removeEdge(pendingRemoveEdge.value)
pendingRemoveEdge.value = null // 清空待删除连接
}
onPaneReady() onPaneReady()
} }
const handleConnect = (params: any) => { const handleConnect = (params: any) => {
const sourceNode = nodes.value.find(node => node.id === params.source) const sourceNode = nodes.value.find(node => node.id === params.source)
const targetNode = nodes.value.find(node => node.id === params.target) const targetNode = nodes.value.find(node => node.id === params.target)
// 连接规则验证
const isValidConnection = sourceNode?.type === 'input' && targetNode?.type === 'output' const isValidConnection = sourceNode?.type === 'input' && targetNode?.type === 'output'
if (!isValidConnection) { if (!isValidConnection) {
removeEdge(params) // 设置待删除连接而不是立即删除
pendingRemoveEdge.value = params
ElMessage.warning('只能从被检通道连接到标准通道') ElMessage.warning('只能从被检通道连接到标准通道')
return return
} }
@@ -323,29 +386,32 @@ const handleConnect = (params: any) => {
const duplicateTarget = existingEdges.filter(edge => edge.target === params.target).length > 1 const duplicateTarget = existingEdges.filter(edge => edge.target === params.target).length > 1
if (duplicateSource) { if (duplicateSource) {
removeEdge(params) // 设置待删除连接而不是立即删除
pendingRemoveEdge.value = params
ElMessage.warning('该被检通道已经连接,不能重复连接') ElMessage.warning('该被检通道已经连接,不能重复连接')
return return
} }
if (duplicateTarget) { if (duplicateTarget) {
removeEdge(params)
// 设置待删除连接而不是立即删除
pendingRemoveEdge.value = params
ElMessage.warning('该标准通道已经连接,不能重复连接') ElMessage.warning('该标准通道已经连接,不能重复连接')
return return
} }
} }
// 如果没有问题,清空待删除连接
pendingRemoveEdge.value = null
} }
// 删除不合法连接 // 删除不合法连接
const removeEdge = (params: any) => { const removeEdge = (params: any) => {
console.log('删除不合法连接:', params);
console.log('删除连接信息:', edges.value);
const edgeIndex = edges.value.findIndex(edge => edge.source === params.source && edge.target === params.target) const edgeIndex = edges.value.findIndex(edge => edge.source === params.source && edge.target === params.target)
console.log('删除连接索引:', edgeIndex);
if (edgeIndex !== -1) { if (edgeIndex !== -1) {
edges.value.splice(edgeIndex, 1) edges.value.splice(edgeIndex, 1)
} }
} }
const nodes = ref([]) const nodes = ref([])