bill 1 روز پیش
والد
کامیت
cfdd0810df
1فایلهای تغییر یافته به همراه39 افزوده شده و 23 حذف شده
  1. 39 23
      src/example/fuse/views/tabulation/index.vue

+ 39 - 23
src/example/fuse/views/tabulation/index.vue

@@ -66,7 +66,7 @@ import { Transform } from "konva/lib/Util";
 import { MathUtils } from "three";
 import { components } from "@/core/components";
 import { ShapeType } from "@/index";
-import { mergeFuns, round } from "@/utils/shared";
+import { copy, mergeFuns, round } from "@/utils/shared";
 import { getImageSize } from "@/utils/shape";
 import { tabCustomStyle } from "../defStyle";
 import { defaultLayer } from "@/constant";
@@ -172,27 +172,43 @@ const setMapHandler = async (config: { url: string; size: Size }) => {
     if (!draw.value || !serialTable.value) return;
     const un = draw.value.menusFilter.setShapeMenusFilter(
       serialTable.value.id,
-      (menu) => [{ label: ui18n.t("sys.update"), handler: updateSerialTable }, ...menu]
+      (menu) => [
+        { label: ui18n.t("sys.update"), handler: () => updateSerialTable(false) },
+        ...menu,
+      ]
     );
     onCleanup(un);
   });
 
-  const updateSerialTable = () => {
+  const updateSerialTable = (autoGen = true) => {
     const d = draw.value;
     const overview = overviewData.value?.store.layers.default;
     const serials = overview.serial;
-    if (!d || !serials?.length) return;
+    if (!d) {
+      return;
+    }
+    const pack = autoGen
+      ? d.history.preventTrack.bind(d.history)
+      : (run: () => void) => run();
+    if (!serials?.length) {
+      if (serialTable.value) {
+        pack(() => {
+          d.store.delItem("table", serialTable.value!.id);
+        });
+      }
+      return;
+    }
     const table = serialTable.value || addTable(d as any);
     const syncSerials = serials.map((item) => {
       let desc = "";
       if (item.joinIds) {
-        desc = item.joinIds
+        const names = item.joinIds
           .map((id) => {
             const img = overview.image?.find((image) => image.id === id)?.name;
             return img || overview.icon?.find((image) => image.id === id)?.name;
           })
-          .filter(Boolean)
-          .join("、");
+          .filter(Boolean);
+        desc = names.join("、");
       }
       return {
         ...item,
@@ -223,7 +239,7 @@ const setMapHandler = async (config: { url: string; size: Size }) => {
       const self = syncSerials[i];
       for (let j = i + 1; j < syncSerials.length; j++) {
         if (syncSerials[j].content === self.content) {
-          if (syncSerials[j].desc) {
+          if (syncSerials[j].desc && self.desc !== syncSerials[j].desc) {
             self.desc = self.desc + "、" + syncSerials[j].desc;
           }
           syncSerials.splice(j--, 1);
@@ -234,7 +250,7 @@ const setMapHandler = async (config: { url: string; size: Size }) => {
     draw.value?.runHook(() => syncTable(table, syncSerials));
 
     if (serialTable.value) {
-      d.history.preventTrack(() => {
+      pack(() => {
         d.store.setItem("table", {
           id: serialTable.value!.id,
           value: serialTable.value!,
@@ -242,7 +258,7 @@ const setMapHandler = async (config: { url: string; size: Size }) => {
       });
     } else {
       table.key = tableSerialTableKey;
-      d.history.preventTrack(() => {
+      pack(() => {
         d.store.addItem("table", table);
       });
     }
@@ -253,7 +269,7 @@ const setMapHandler = async (config: { url: string; size: Size }) => {
     (draw) => {
       if (!draw) return;
       if (!serialTable.value) {
-        setTimeout(updateSerialTable, 500);
+        setTimeout(() => updateSerialTable(true), 500);
       }
     },
     { immediate: true }
@@ -277,12 +293,12 @@ const setCover = (paperKey: PaperKey, draw: Draw) => {
     cleanups.length = 0;
   };
   let cover = draw.store.items.find((item) => item.key === tableCoverKey) as ImageData;
-  if (import.meta.env.DEV && cover) {
-    draw.history.preventTrack(() => {
-      draw.store.delItem("image", cover!.id);
-      cover = null as any;
-    });
-  }
+  // if (import.meta.env.DEV && cover) {
+  //   draw.history.preventTrack(() => {
+  //     draw.store.delItem("image", cover!.id);
+  //     cover = null as any;
+  //   });
+  // }
   const { margin, size } = getPaperConfig(
     paperConfigs[paperKey].size,
     paperConfigs[paperKey].scale
@@ -343,12 +359,12 @@ const setCover = (paperKey: PaperKey, draw: Draw) => {
   }
 
   let text = draw.store.items.find((item) => item.key === tableCoverScaleKey) as TextData;
-  if (import.meta.env.DEV && text) {
-    draw.history.preventTrack(() => {
-      draw.store.delItem("text", text!.id);
-      text = null as any;
-    });
-  }
+  // if (import.meta.env.DEV && text) {
+  //   draw.history.preventTrack(() => {
+  //     draw.store.delItem("text", text!.id);
+  //     text = null as any;
+  //   });
+  // }
   if (!text) {
     const width = getRealPixel(30, paperKey);
     const heihgt = getRealPixel(4.8, paperKey);