| 
					
				 | 
			
			
				@@ -7,15 +7,16 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <div class="component-content"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       <component :is="component" v-bind="componentData.props" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    <div class="edit-box" :style="editWapperStyle" v-if="showEditBox"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <span class="edit-box-point top-left"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <span class="edit-box-point top-center"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <span class="edit-box-point top-right"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <span class="edit-box-point left-center"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <span class="edit-box-point right-center"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <span class="edit-box-point bottom-left"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <span class="edit-box-point bottom-center"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <span class="edit-box-point bottom-right"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <div v-if="showEditBox" class="edit-box" :style="editWapperStyle"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <UseDraggable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        v-for="item in dragPointList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :key="item" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @move="(_, e) => handleDragPoint(item, e)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @start="handleDragStart" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @end="handleDragEnd" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <span class="edit-box-point" :class="item"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </UseDraggable> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -28,6 +29,7 @@ import type { CustomElement } from "#/project"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { useStageStore } from "@/store/modules/stage"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { useProjectStore } from "@/store/modules/project"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { useDraggable } from "@vueuse/core"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { UseDraggable } from "@vueuse/components"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const { componentData } = defineProps<{ componentData: CustomElement }>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 动态引入组件 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,7 +47,7 @@ const editWapperStyle = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     width: `${width * stageStore.scale}px`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     height: `${height * stageStore.scale}px`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     border: "1px solid #1890ff", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    left:  (width / 2) * (1 - stageStore.scale) + "px", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    left: (width / 2) * (1 - stageStore.scale) + "px", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     top: (height / 2) * (1 - stageStore.scale) + "px", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -55,23 +57,24 @@ const warpperStyle = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     width: `${width}px`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     height: `${height}px`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    left:  position.x + "px", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    left: position.x + "px", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     top: position.y + "px", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 是否显示编辑框 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const showEditBox = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return projectStore.mode === 'edit' && projectStore.selectedElementKeys.includes(componentData.key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    projectStore.mode === "edit" && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    projectStore.selectedElementKeys.includes(componentData.key) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const handleDragPoint = (e: MouseEvent) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  e.stopPropagation(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  console.log(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let isPointDragFlag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 拖拽移动组件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 useDraggable(componentWrapperRef, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   onMove: (position) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(isPointDragFlag) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const originPosition = componentWrapperRef.value!.getBoundingClientRect(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 计算移动的距离 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const x = position.x - originPosition.left; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -82,12 +85,97 @@ useDraggable(componentWrapperRef, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         x: componentData.position.x + x, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         y: componentData.position.y + y, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  capture: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  preventDefault: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  stopPropagation: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const dragPointList = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "top-left", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "top-center", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "top-right", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "left-center", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "right-center", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "bottom-left", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "bottom-center", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "bottom-right", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* ===============================缩放组件==================================== */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const startPoint = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  x: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  y: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 拖拽点移动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const handleDragPoint = (type: string, e: PointerEvent) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const moveX = (e.x - startPoint.x) / stageStore.scale; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const moveY = (e.y - startPoint.y) / stageStore.scale; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let width = componentData.props.width; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let height = componentData.props.height; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let x = componentData.position.x; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let y = componentData.position.y; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  switch (type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "top-left": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width -= moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height -= moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      x += moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      y += moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "top-center": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height -= moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      y += moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "top-right": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width += moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height -= moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      y += moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "left-center": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width -= moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      x += moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "right-center": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width += moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "bottom-left": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width -= moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height += moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      x += moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "bottom-center": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height += moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "bottom-right": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width += moveX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height += moveY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  startPoint.x = e.x; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  startPoint.y = e.y; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if(width < 10 || height < 10) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  projectStore.updateElement(componentData.key, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    position: { x, y }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    props: {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ...componentData.props, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 拖拽点开始 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const handleDragStart = (_, e: PointerEvent) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  startPoint.x = e.x; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  startPoint.y = e.y; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  isPointDragFlag = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 拖拽点结束 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const handleDragEnd = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  isPointDragFlag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <style lang="less" scoped> 
			 |