ananzhusen il y a 1 an
Parent
commit
6a6c67cb99
1 fichiers modifiés avec 138 ajouts et 129 suppressions
  1. 138 129
      src/services/common.ts

+ 138 - 129
src/services/common.ts

@@ -114,7 +114,7 @@ export const save = async (
   saveFlag = false;
   saveTimer = setTimeout(() => {
     saveFlag = true;
-  }, 1000);
+  }, 2000);
 
   meta2d.stopAnimate();
   const data: Meta2dBackData = meta2d.data();
@@ -206,152 +206,161 @@ export const save = async (
 
   //如果不是自己创建的团队图纸,就不去修改缩略图(没有权限去删除缩略图)
   if (!(data.teams && data.owner?.id !== user.id)) {
-    let blob: Blob;
-    try {
-      blob = dataURLtoBlob(meta2d.toPng(0) + '');
-    } catch (e) {
-      MessagePlugin.error(
-        '无法下载,宽度不合法,画布可能没有画笔/画布大小超出浏览器最大限制'
-      );
-      return;
+    for (const pen of meta2d.store.data.pens) {
+      if (['iframe'].includes(pen.name)) {
+        //重新生成绘制图片
+        pen.onRenderPenRaw?.(pen);
+      }
     }
-    if (data._id && type === SaveType.Save) {
-      if (data.image && !(await delImage(data.image))) {
+    setTimeout(async () => {
+      let blob: Blob;
+      try {
+        blob = dataURLtoBlob(meta2d.toPng(0) + '');
+      } catch (e) {
+        MessagePlugin.error(
+          '无法下载,宽度不合法,画布可能没有画笔/画布大小超出浏览器最大限制'
+        );
         return;
       }
-    }
+      if (data._id && type === SaveType.Save) {
+        if (data.image && !(await delImage(data.image))) {
+          return;
+        }
+      }
 
-    const file = await upload(blob, true);
-    if (!file) {
-      return;
-    }
+      const file = await upload(blob, true);
+      if (!file) {
+        return;
+      }
 
-    // 缩略图
-    data.image = file.url;
-    (meta2d.store.data as Meta2dBackData).image = data.image;
+      // 缩略图
+      data.image = file.url;
+      (meta2d.store.data as Meta2dBackData).image = data.image;
+    }, 1000);
   }
+  setTimeout(async () => {
+    if (data.component || vType === 'le5leV-components') {
+      data.component = true;
+      // pens 存储原数据用于二次编辑 ; componentDatas 组合后的数据,用于复用
+      data.componentDatas = meta2d.toComponent(
+        undefined,
+        (meta2d.store.data as Meta2dBackData).showChild,
+        false //自定义组合节点生成默认锚点
+      );
+    } else {
+      data.component = false; // 必要值
+    }
+    let collection = data.component ? 'le5leV-components' : 'le5leV';
+    let ret: any;
+    if (!data.name) {
+      // 文件名称
+      data.name = `meta2d.${new Date().toLocaleString()}`;
+      (meta2d.store.data as Meta2dBackData).name = data.name;
+    }
+    !data.version && (data.version = baseVer);
+    // TODO
+    if (!data.folder) {
+      data.folder = ''; // folder.name;
+    }
 
-  if (data.component || vType === 'le5leV-components') {
-    data.component = true;
-    // pens 存储原数据用于二次编辑 ; componentDatas 组合后的数据,用于复用
-    data.componentDatas = meta2d.toComponent(
-      undefined,
-      (meta2d.store.data as Meta2dBackData).showChild,
-      false //自定义组合节点生成默认锚点
-    );
-  } else {
-    data.component = false; // 必要值
-  }
-  let collection = data.component ? 'le5leV-components' : 'le5leV';
-  let ret: any;
-  if (!data.name) {
-    // 文件名称
-    data.name = `meta2d.${new Date().toLocaleString()}`;
-    (meta2d.store.data as Meta2dBackData).name = data.name;
-  }
-  !data.version && (data.version = baseVer);
-  // TODO
-  if (!data.folder) {
-    data.folder = ''; // folder.name;
-  }
+    let _list: any = undefined;
+    let _folderId: any = undefined;
+    if (data.folder) {
+      if (!folder._id) {
+        let type = vType;
+        if (!type) {
+          type = 'le5leV';
+        }
+        let folderRet: any = await axios.post('/api/data/folders/get', {
+          query: {
+            type,
+            name: data.folder,
+          },
+        });
+        if (!folderRet.error) {
+          _list = folderRet.list;
+          _folderId = folderRet._id;
+        }
+      } else {
+        _list = folder.list;
+        _folderId = folder._id;
+      }
+    }
 
-  let _list: any = undefined;
-  let _folderId: any = undefined;
-  if (data.folder) {
-    if (!folder._id) {
-      let type = vType;
-      if (!type) {
-        type = 'le5leV';
+    let _temType = '';
+    if (type === SaveType.SaveAs) {
+      // 另存为一定走 新增 ,由于后端 未控制 userId 等属性,清空一下
+      for (const k of delAttrs) {
+        delete (data as any)[k];
       }
-      let folderRet: any = await axios.post('/api/data/folders/get', {
-        query: {
-          type,
-          name: data.folder,
-        },
-      });
-      if (!folderRet.error) {
-        _list = folderRet.list;
-        _folderId = folderRet._id;
+      if (!data.tags || !data.tags.length) {
+        data.tags = ['方案'];
       }
+      ret = await addCollection(collection, data);
     } else {
-      _list = folder.list;
-      _folderId = folder._id;
+      // if (data._id && data.teams && data.owner?.id !== user.id) {
+      //   // 团队图纸 不允许修改文件夹信息
+      //   delete data.folder;
+      //   ret = await updateCollection(collection, data);
+      // } else
+      if (data._id) {
+        ret = await updateCollection(collection, data);
+        _temType = 'update';
+      } else {
+        ret = await addCollection(collection, data); // 新增
+        _temType = 'add';
+      }
     }
-  }
 
-  let _temType = '';
-  if (type === SaveType.SaveAs) {
-    // 另存为一定走 新增 ,由于后端 未控制 userId 等属性,清空一下
-    for (const k of delAttrs) {
-      delete (data as any)[k];
-    }
-    if (!data.tags || !data.tags.length) {
-      data.tags = ['方案'];
-    }
-    ret = await addCollection(collection, data);
-  } else {
-    // if (data._id && data.teams && data.owner?.id !== user.id) {
-    //   // 团队图纸 不允许修改文件夹信息
-    //   delete data.folder;
-    //   ret = await updateCollection(collection, data);
-    // } else
-    if (data._id) {
-      ret = await updateCollection(collection, data);
-      _temType = 'update';
-    } else {
-      ret = await addCollection(collection, data); // 新增
-      _temType = 'add';
+    if (ret.error) {
+      return;
     }
-  }
-
-  if (ret.error) {
-    return;
-  }
-  if (_folderId) {
-    if (_temType === 'add') {
-      //文件夹
-      _list.push({
-        image: data.image,
-        name: data.name,
-        _id: ret._id,
+    if (_folderId) {
+      if (_temType === 'add') {
+        //文件夹
+        _list.push({
+          image: data.image,
+          name: data.name,
+          _id: ret._id,
+        });
+      } else if (_temType === 'update') {
+        _list.forEach((i: any) => {
+          if (i._id === data._id) {
+            i.image = data.image;
+            i.name = data.name;
+          }
+        });
+      }
+      await axios.post('/api/data/folders/update', {
+        _id: _folderId,
+        list: _list,
       });
-    } else if (_temType === 'update') {
-      _list.forEach((i: any) => {
-        if (i._id === data._id) {
-          i.image = data.image;
-          i.name = data.name;
-        }
+    }
+    //  保存图纸之后的钩子函数
+    globalThis.afterSaveMeta2d && (await globalThis.afterSaveMeta2d(ret));
+    if (
+      !data._id ||
+      data.owner?.id !== user.id ||
+      router.currentRoute.value.query.version ||
+      type === SaveType.SaveAs // 另存为肯定走新增,也会产生新的 id
+    ) {
+      data._id = ret._id;
+      (meta2d.store.data as Meta2dBackData)._id = data._id;
+      router.replace({
+        path: '/',
+        query: {
+          id: data._id,
+          r: Date.now() + '',
+          c: data.component ? 1 : undefined,
+        },
       });
     }
-    await axios.post('/api/data/folders/update', {
-      _id: _folderId,
-      list: _list,
-    });
-  }
-  //  保存图纸之后的钩子函数
-  globalThis.afterSaveMeta2d && (await globalThis.afterSaveMeta2d(ret));
-  if (
-    !data._id ||
-    data.owner?.id !== user.id ||
-    router.currentRoute.value.query.version ||
-    type === SaveType.SaveAs // 另存为肯定走新增,也会产生新的 id
-  ) {
-    data._id = ret._id;
-    (meta2d.store.data as Meta2dBackData)._id = data._id;
-    router.replace({
-      path: '/',
-      query: {
-        id: data._id,
-        r: Date.now() + '',
-        c: data.component ? 1 : undefined,
-      },
-    });
-  }
 
-  notice && MessagePlugin.success('保存成功!');
-  dot.value = false;
-  localforage.removeItem(localStorageName);
-  return true;
+    notice && MessagePlugin.success('保存成功!');
+    dot.value = false;
+    localforage.removeItem(localStorageName);
+    return true;
+  }, 2000);
 };
 
 const pen = ref(false);