Bläddra i källkod

:art: fix https://github.com/siyuan-note/siyuan/issues/11032

Vanessa 1 år sedan
förälder
incheckning
a67ec08adb
2 ändrade filer med 19 tillägg och 14 borttagningar
  1. 7 10
      app/src/assets/scss/business/_av.scss
  2. 12 4
      app/src/protyle/util/editorCommonEvent.ts

+ 7 - 10
app/src/assets/scss/business/_av.scss

@@ -281,6 +281,11 @@
       border-right-color: var(--b3-theme-primary-lighter);
     }
 
+    &.dragover__left,
+    &.dragover__right {
+      z-index: 2;
+    }
+
     &--select {
       background-color: var(--b3-menu-background);
       box-shadow: 2px 2px 0 var(--b3-theme-primary-lighter) inset, -2px -2px 0 var(--b3-theme-primary-lighter) inset;
@@ -528,21 +533,13 @@
 .dragover__top,
 .dragover__bottom {
   .av__colsticky {
-    z-index: 0;
-
-    & > div {
+    &.av__firstcol,
+    & > div:not(.av__cell--select):not(.av__cell--active):not(.av__calc--ashow) {
       background-color: transparent;
     }
   }
 }
 
-.dragover__bottom + .av__row,
-.av__row:has(+ .dragover__top) {
-  .av__colsticky > div {
-    background-color: transparent;
-  }
-}
-
 img.av__cellassetimg {
   max-height: calc(1.625em - 2px);
   border-radius: var(--b3-border-radius);

+ 12 - 4
app/src/protyle/util/editorCommonEvent.ts

@@ -1158,7 +1158,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
             if (targetElement) {
                 const targetRowElement = hasClosestByClassName(targetElement, "av__row--header");
                 const dragRowElement = hasClosestByClassName(window.siyuan.dragElement, "av__row--header");
-                if (!targetRowElement || !dragRowElement ||
+                if (targetElement.isSameNode(window.siyuan.dragElement) || !targetRowElement || !dragRowElement ||
                     (targetRowElement && dragRowElement && !targetRowElement.isSameNode(dragRowElement))
                 ) {
                     targetElement = false;
@@ -1200,11 +1200,15 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
 
             if (targetElement.classList.contains("av__cell")) {
                 if (event.clientX < nodeRect.left + nodeRect.width / 2 && event.clientX > nodeRect.left &&
-                    !targetElement.classList.contains("av__row")) {
+                    !targetElement.classList.contains("av__row") && !targetElement.previousElementSibling.isSameNode(window.siyuan.dragElement)) {
                     targetElement.classList.add("dragover__left");
                 } else if (event.clientX > nodeRect.right - nodeRect.width / 2 && event.clientX <= nodeRect.right + 1 &&
-                    !targetElement.classList.contains("av__row")) {
-                    targetElement.classList.add("dragover__right");
+                    !targetElement.classList.contains("av__row") && !targetElement.isSameNode(window.siyuan.dragElement.previousElementSibling)) {
+                    if (window.siyuan.dragElement.previousElementSibling.classList.contains("av__colsticky") && targetElement.isSameNode(window.siyuan.dragElement.previousElementSibling.lastElementChild)) {
+                        // 拖拽到固定列的最后一个元素
+                    } else {
+                        targetElement.classList.add("dragover__right");
+                    }
                 }
                 return;
             }
@@ -1240,6 +1244,10 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
                 // 表头不能拖到自己上
                 return;
             }
+            if (gutterTypes[0] === "nodeattributeviewrowmenu" && gutterTypes[2] === targetElement.getAttribute("data-id")) {
+                // 行不能拖到自己上
+                return;
+            }
             const isSelf = gutterTypes[2].split(",").find((item: string) => {
                 if (item && hasClosestByAttribute(targetElement as HTMLElement, "data-node-id", item)) {
                     return true;