liuqiao 1 年之前
父节点
当前提交
b51773d3cf

文件差异内容过多而无法显示
+ 0 - 0
dist/assets/delete-359d40fc.js


文件差异内容过多而无法显示
+ 0 - 0
dist/assets/demo-e473545a.js


文件差异内容过多而无法显示
+ 0 - 0
dist/assets/index-2bf22be2.js


文件差异内容过多而无法显示
+ 0 - 0
dist/assets/index-ab924b12.js


+ 0 - 1
dist/assets/index-d11f8a47.css

@@ -1 +0,0 @@
-.icons img[data-v-ff3b7228]{width:30px}.icons span[data-v-ff3b7228]{display:block;font-size:13px}.vue-flow__node.draggable{width:64px!important;height:64px!important;border:none;background-color:#0000}.vue-flow__node{stroke:none}.vue-flow__edge-path{fill:none;stroke-width:1;marker-end:url(#vue-flow__arrow)}.vue-flow__edge-text{display:none}.vue-flow__node-custom{background:purple;color:#fff;border:1px solid purple;border-radius:4px;box-shadow:0 0 0 1px purple;padding:8px}.vue-flow__edge{text-align:left}#contextMenu{display:none;position:absolute;background-color:#fff;border-radius:5px;padding:10px;text-align:center;color:#000;font-size:14px;font-weight:400;cursor:pointer}

文件差异内容过多而无法显示
+ 0 - 0
dist/assets/index-e151e817.js


+ 1 - 1
dist/index.html

@@ -8,7 +8,7 @@
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
  
     <title></title>
-    <script type="module" crossorigin src="./assets/index-ab924b12.js"></script>
+    <script type="module" crossorigin src="./assets/index-37fe9616.js"></script>
     <link rel="stylesheet" href="./assets/index-9b8d7d4f.css">
   </head>
   <body>

+ 58 - 36
src/views/vueflow/index.vue

@@ -1,26 +1,25 @@
 <template>
   <div class="dnd-flow" >
-    <VueFlow  :nodes="nodes" :edges="edges"  @drop="onDrop"  @contextmenu="onContextMenu"
-    @keydown.delete="onDeleteKey"   @node-drop="handleNodeDrop"   @dragover="onDragOver" @dragleave="onDragLeave"  @node-click="onNodeClick">
+    <VueFlow ref="vueFlowRef"  :nodes="nodes" :edges="edges"  @drop="onDrop"   @contextmenu.prevent="onContextMenu"
+    @keydown.delete="onDeleteKey"   @dragover="onDragOver" @dragleave="onDragLeave"  @node-click="onNodeClick">
       <template #node-default="props">
       <modelb :node="props" />
     </template>
     <!-- //<Handle type="target" :position="Position.Left" /> -->
-      <!-- </Panel> -->
-      <!-- <DropzoneBackground
+     <!-- <Panel>
+      <DropzoneBackground
         :style="{
           backgroundColor: isDragOver ? '#e7f3ff' : 'transparent',
           transition: 'background-color 0.2s ease',
         }"
       >
-      </DropzoneBackground> -->
-    <!-- </Panel> -->
-
+      </DropzoneBackground> 
+    </Panel> -->
     </VueFlow>
 
     <!-- <Sidebar /> -->
   <!-- 优化器 -->
-  <!-- <div id="contextMenu" @click="deleteItemConfirm">删除</div> -->
+  <div id="contextMenu"   v-show="shopShow"  @click="deleteItemConfirm">删除</div>
   </div>
 </template>
 
@@ -35,30 +34,19 @@ import f11 from '@/assets/img/f11.png'
  import modelb from './modelb.vue'
  import { useDialogState } from './delete.js'
  const { isVisible, message, resolve } = useDialogState()
-// import func from 'vue-temp/vue-editor-bridge'
-// import {initialNodes,initialEdges } from './node'
-// const nodes = ref(initialNodes)
+ const { onConnect, addEdges, onNodesChange, onEdgesChange, applyNodeChanges, applyEdgeChanges } = useVueFlow()
+let vueFlowRef=ref();
 let emit = defineEmits(['optimizerfalse']);
-const props = defineProps({
-  // optimizer: {
-  //   type: Boolean,
-  //   required: true,
-  // },
-})
+const props = defineProps({})
+let  shopShow=ref(false);
 let noid=ref([]);
-// const edges = ref(initialEdges)
-const { onConnect, addEdges } = useVueFlow()
 let node=ref();
 let  contextMenu=ref( {
-        show: false,
+        shopShow: false,
         position: { x: 0, y: 0 },
         target: 'kong',
       })
 const { onDragOver, onDrop, onDragLeave, isDragOver} = useDragAndDrop();
-function handleNodeDrop(e){
-  console.log(11111)
-  console.log(e);
-}
 const edges = ref([]);
 const nodes = ref([]);
 onConnect(addEdges)
@@ -74,43 +62,77 @@ function onNodeClick(e){
 
 }
 function onContextMenu(event,node) {
+  console.log(event)
   console.log(node)
-  event.preventDefault();
+ // event.preventDefault();
+ if(noid.value!==null){
+
+
       if (noid.value.id) {
-    //     document.getElementById('contextMenu').style.top = noid.value.position.y+50 + 'px';
-    //  document.getElementById('contextMenu').style.left = noid.value.position.x +80+ 'px';
-    //  document.getElementById('contextMenu').style.display = 'block';
+        document.getElementById('contextMenu').style.top = noid.value.position.y+50 + 'px';
+     document.getElementById('contextMenu').style.left = noid.value.position.x +80+ 'px';
+     document.getElementById('contextMenu').style.display = 'block';
+    shopShow.value=true;
      event.preventDefault();
-    
-        console.log(11111)
+
       }
-  
+    }
   
     }
     //点击左键右键内容消失
     document.addEventListener('click', function(e) {
   if (e.button === 0) { // 0 是左键
-    // document.getElementById('contextMenu').style.display = 'none';
+     //document.getElementById('contextMenu').style.display = 'none';
+    shopShow.value=false;
   }
 });
     function   onDeleteKey(event,node) {
       // 禁用Backspace删除节点
-      console.log(node)
+      console.log(event)
       event.preventDefault();
    
     }
 //删除
 const deleteItemConfirm=()=>{
-  resolve(true)
-  isVisible.value = false
+  //const index = nodes.value.findIndex(n => n.id === noid.value.id);
+  if(noid.value.id){
+  vueFlowRef.value.removeNodes(noid.value.id);
+  noid.value=null;
+   // nodes.value = nodes.value.filter(node => node.id !== noid.value.id);
+ //console.log(noid.value.id);
+  // resolve(true)
+  // console.log( resolve(true));
+  shopShow.value = false
+  }
+
 }
+onNodesChange(async (changes) => {
+  const nextChanges = []
+
+  for (const change of changes) {
+
+    if (change.type === 'remove') {
+      const isConfirmed = noid.value.id
+      console.log(isConfirmed)
+      if (isConfirmed) {
+        nextChanges.push(change)
+      }
+    } else {
+      nextChanges.push(change)
+    }
+  }
+
+  applyNodeChanges(nextChanges)
+})
+
+
 </script>
 <style>
 .vue-flow__edge {
   text-align: left; /* 设置edges的左对齐 */
 }
 #contextMenu{
-  display: none;
+  /* display: none; */
   position: absolute;
 background-color: #fff;
 border-radius: 5px;

+ 0 - 12
src/views/vueflow/modelb.vue

@@ -1,9 +1,6 @@
 <script  setup>
 import { ref, onMounted, reactive, } from "vue";
 import { VueFlow,Handle, useVueFlow,Position } from '@vue-flow/core'
-// import {initialNodes,initialEdges } from './node'
-// const nodes = ref(initialNodes)
-// const edges = ref(initialEdges)
 import f11 from '@/assets/img/f11.png'
 import f32 from '@/assets/img/f32.png'
 import f33 from '@/assets/img/f33.png'
@@ -53,10 +50,6 @@ onMounted(() => {
     <div class="custom-node icons" :id="`node-${node.id}`" >
     <img :src="props.node.data.image" alt="节点图片" />
     <span>{{props.node.data.label }}</span>
-    <!-- <Handle type="source" :position="props.node.sourcePosition"  />
-   <Handle :id="`node-${node.id}`" type="target" :position="props.node.targetPosition" /> 
-   <Handle :id="`node-${node.id}`" type="target" :position="props.node.targetPosition"  />
-   <Handle :id="`node-${node.id}`" type="target" :position="props.node.targetPosition" />  -->
   </div>
 
   </div>
@@ -64,11 +57,6 @@ onMounted(() => {
   <Handle id="target-c" type="source" :position="Position.Top"  /> 
    <Handle id="target-b" type="target"  :position="Position.Left" /> 
   <Handle id="target-d" type="target" :position="Position.Bottom"  /> 
-  <!-- <Handle  id="source-a" type="source" :position="props.node.sourcePosition"  />
-  <Handle id="source-b" type="source" :position="props.node.targetPosition"  /> 
-   <Handle id="target-a" type="target"  :position="props.node.targetPosition" /> 
-
-  <Handle id="target-b" type="target" :position="props.node.targetPosition"  /> -->
 </template>
 <style scoped>
 

+ 13 - 2
src/views/vueflow/useDnD.js

@@ -204,7 +204,15 @@ export default function useDragAndDrop() {
         source: 'node_02',
         target: 'node_03',
         type: 'smoothstep',
-        markerEnd: MarkerType.ArrowClosed,
+      //   markerEnd: {
+      //     type: MarkerType.ArrowClosed,
+      //     color: 'red',
+      // },
+      markerEnd: {
+        tagName: MarkerType.ArrowClosed,
+        width: 20,
+        height: 20,
+      },
         //type: 'output',
         // style: {
         //   stroke: '#FF0000',
@@ -216,7 +224,9 @@ export default function useDragAndDrop() {
         source: 'node_03',
         target: 'node_04',
         type: 'straight' ,
-        markerEnd: MarkerType.ArrowClosed,
+        markerEnd: "arrow" // 或者使用 " arrowhead"
+
+
       },
       {
         id: 'e4->5',
@@ -228,6 +238,7 @@ export default function useDragAndDrop() {
         // targetPosition: Position.Top, 
         sourceHandle: 'Top',
         targetHandle:'Bottom',
+
       },
       {
         id: 'e5->6',

部分文件因为文件数量过多而无法显示