Browse Source

fix: 批量操作历史问题修复

bill 2 months ago
parent
commit
a5c0fd78c0
2 changed files with 27 additions and 13 deletions
  1. 26 13
      src/core/components/group/group.vue
  2. 1 0
      src/core/hook/use-history.ts

+ 26 - 13
src/core/components/group/group.vue

@@ -47,7 +47,21 @@ const { shape, tData, data } = useComponentStatus<Rect, GroupData>({
   transformType: "custom",
   customTransform(callback, shape, data) {
     let prevMat: Transform;
-    let transformResolve: () => void;
+    let unUpdate = false;
+    let transformResolve: (() => void) | null = null;
+
+    const updateChildren = debounce((data, mat) => {
+      unUpdate = false;
+      setShapeTransform(shape.value!.getNode(), mat);
+      matResponse({ data, mat, store }, prevMat);
+      prevMat = mat;
+      getGroupShapes!().forEach((shape) => nextTick(() => shape.fire("bound-change")));
+      if (autoUpdate.value) {
+        transformResolve && transformResolve();
+        transformResolve = null;
+      }
+      return true;
+    }, 6);
     useCustomTransformer(shape, data, {
       openSnap: false,
       getRepShape($shape) {
@@ -73,29 +87,28 @@ const { shape, tData, data } = useComponentStatus<Rect, GroupData>({
           },
         };
       },
-      handler: debounce((data, mat) => {
-        if (autoUpdate.value) return;
-        setShapeTransform(shape.value!.getNode(), mat);
-        matResponse({ data, mat, store }, prevMat);
-        prevMat = mat;
-        getGroupShapes!().forEach((shape) => nextTick(() => shape.fire("bound-change")));
-        return true;
-      }, 6),
-      start() {
+      handler: (data, mat) => {
+        unUpdate = true;
+        updateChildren(data, mat);
+      },
+      async start() {
+        transformResolve && transformResolve();
+        await nextTick();
         autoUpdate.value = false;
         history.onceTrack(
           () =>
             new Promise<void>((resolve) => {
-              console.log("onceTrack");
               transformResolve = resolve;
             })
         );
       },
       callback() {
         autoUpdate.value = true;
-        transformResolve();
+        if (!unUpdate) {
+          transformResolve && transformResolve();
+          transformResolve = null;
+        }
         callback();
-        console.log("callback");
       },
     });
   },

+ 1 - 0
src/core/hook/use-history.ts

@@ -145,6 +145,7 @@ export class DrawHistory {
     if (this.onceFlag) {
       this.onceHistory = data;
     } else if (data !== this.current?.data) {
+      console.log('push history')
       this.bus.emit("push", data);
       this.history.push({ attachs: JSON.stringify(this.pushAttachs), data });
       this.pushAttachs = {};