Browse Source

修改ai助手

11wqe1 1 week ago
parent
commit
a69c8b439f
1 changed files with 83 additions and 67 deletions
  1. 83 67
      src/components/main/feedback.vue

+ 83 - 67
src/components/main/feedback.vue

@@ -71,75 +71,91 @@ const textarea1 = ref("")
 const dialogVisible2 = ref(false)
 const Full_Screen = ref(false)
 const vDraggable = {
-  mounted(el, binding) {
-    let isDragging = false;
-    let offsetX = 0;
-    let offsetY = 0;
-    let startTime = '';
-
-    const onMouseDown = (event) => {
-      
-      isDragging = true;
-      startTime = new Date().getTime();
-      offsetX = event.clientX - el.offsetLeft;
-      offsetY = event.clientY - el.offsetTop;
-
-      document.body.style.userSelect = "none";
-      document.addEventListener("mousemove", onMouseMove);
-      document.addEventListener("mouseup", onMouseUp);
-    };
-
-    const onMouseMove = (event) => {
-      let endTime = new Date().getTime();
-      if (isDragging && (endTime - startTime > 200)) {
-        el.style.left = `${event.clientX - offsetX}px`;
-        el.style.top = `${event.clientY - offsetY}px`;
-        
-        // Vue 3 中需要通过 binding.value 传递回调函数
-        if (binding.value?.updatePosition) {
-            binding.value.updatePosition({
-                x: event.clientX - offsetX,
-                y: event.clientY - offsetY
-            });
+    mounted(el, binding) {
+        let isDragging = false;
+        let offsetX = 0;
+        let offsetY = 0;
+        let startTime = 0;
+
+        const onMouseDown = (event) => {
+            event.preventDefault();
+            event.stopPropagation();
+            
+            console.log('按下');
+            isDragging = true;
+            startTime = Date.now();
+            
+            // 获取元素当前位置
+            const rect = el.getBoundingClientRect();
+            offsetX = event.clientX - rect.left;
+            offsetY = event.clientY - rect.top;
+
+            // 确保元素有定位
+            if (getComputedStyle(el).position === 'static') {
+                el.style.position = 'fixed';
+            }
+
+            document.addEventListener("mousemove", onMouseMove);
+            document.addEventListener("mouseup", onMouseUp);
+            document.body.style.cursor = 'move';
+            document.body.style.userSelect = 'none';
+        };
+
+        const onMouseMove = (event) => {
+            if (!isDragging) return;
+            
+            console.log('移动');
+            
+            // 计算新位置
+            const x = event.clientX - offsetX;
+            const y = event.clientY - offsetY;
+            
+            // 设置位置
+            el.style.left = `${x}px`;
+            el.style.top = `${y}px`;
+            
+            // 回调
+            if (binding.value?.updatePosition) {
+                binding.value.updatePosition({ x, y });
+            }
+        };
+
+        const onMouseUp = (event) => {
+            console.log('松开');
+            
+            const endTime = Date.now();
+            
+            // 判断点击(短按)还是拖动
+            if (isDragging && endTime - startTime < 200) {
+                if (binding.value?.onClick) {
+                    binding.value.onClick(event);
+                }
+            }
+            
+            // 清理
+            isDragging = false;
+            document.removeEventListener("mousemove", onMouseMove);
+            document.removeEventListener("mouseup", onMouseUp);
+            document.body.style.cursor = '';
+            document.body.style.userSelect = '';
+        };
+
+        // 寻找拖动句柄
+        const headerEl = el.querySelector(".window-header") || el;
+        headerEl.style.cursor = 'move';
+        headerEl.addEventListener("mousedown", onMouseDown);
+
+        // 保存引用
+        el._draggable = { onMouseDown, headerEl };
+    },
+    
+    unmounted(el) {
+        if (el._draggable) {
+            const { onMouseDown, headerEl } = el._draggable;
+            headerEl.removeEventListener("mousedown", onMouseDown);
+            delete el._draggable;
         }
-      }
-    };
-
-    const onMouseUp = () => {
-      isDragging = false;
-      let endTime = new Date().getTime();
-      
-      if (endTime - startTime < 200) {
-        // 通过 binding.value 调用回调
-        if (binding.value && binding.value.onClick) {
-          binding.value.onClick();
-        }
-      }
-      
-      document.body.style.userSelect = "";
-      document.removeEventListener("mousemove", onMouseMove);
-      document.removeEventListener("mouseup", onMouseUp);
-    };
-
-    // 确保元素有 window-header 类
-    const headerEl = el.querySelector(".window-header");
-    if (headerEl) {
-      headerEl.addEventListener("mousedown", onMouseDown);
-    }
-
-    // 保存事件监听器引用以便卸载时清理
-    el._draggable = { onMouseDown, headerEl };
-  },
-  
-  unmounted(el) {
-    // 清理事件监听器
-    if (el._draggable) {
-      const { onMouseDown, headerEl } = el._draggable;
-      if (headerEl) {
-        headerEl.removeEventListener("mousedown", onMouseDown);
-      }
     }
-  }
 };
 
 const position = ref({