Selaa lähdekoodia

feat:conflict

ananzhusen 9 kuukautta sitten
vanhempi
sitoutus
46f975c6bd
4 muutettua tiedostoa jossa 38 lisäystä ja 313 poistoa
  1. 29 312
      src/services/common.ts
  2. 2 0
      src/services/utils.ts
  3. 5 1
      src/views/components/Graphics.vue
  4. 2 0
      src/views/components/View.vue

+ 29 - 312
src/services/common.ts

@@ -126,280 +126,7 @@ export enum SaveType {
 
 let saveTimer: any = 0;
 let saveFlag: boolean = true;
-/*
-export const _save = async (
-  type: SaveType = SaveType.Save,
-  vType?: string,
-  notice?: boolean
-) => {
-  if (!saveFlag) {
-    return;
-  }
-  if (saveTimer) {
-    clearTimeout(saveTimer);
-  }
-  saveFlag = false;
-  saveTimer = setTimeout(() => {
-    saveFlag = true;
-  }, 2000);
-
-  meta2d.stopAnimate();
-  const data: Meta2dBackData = meta2d.data();
-  if (!(user && user.id)) {
-    MessagePlugin.warning(noLoginTip);
-    localforage.setItem(localStorageName, JSON.stringify(data));
-    return;
-  }
-  if (
-    vType === 'v.component' &&
-    meta2d.store.active &&
-    meta2d.store.active.length === 1 &&
-    meta2d.store.active[0].name === 'combine'
-  ) {
-    let comData: any = {
-      center: data.center,
-      folder: '',
-      origin: data.origin,
-      scale: data.scale,
-      x: data.x,
-      y: data.y,
-    };
-    let blob: Blob;
-    try {
-      blob = dataURLtoBlob(meta2d.activeToPng(10) + '');
-    } catch (e) {
-      MessagePlugin.error(
-        '无法下载,宽度不合法,可能没有选中画笔/选中画笔大小超出浏览器最大限制'
-      );
-      return;
-    }
-
-    const file:any = await upload(blob, true);
-    if (!file) {
-      return;
-    }
-
-    // 缩略图
-    comData.image = file.url;
-    comData.component = true;
-    const allPens = meta2d.canvas.getAllByPens(meta2d.store.active);
-    comData.componentDatas = meta2d.toComponent(
-      allPens,
-      (meta2d.store.data as Meta2dBackData).showChild,
-      false
-    );
-    comData.name =
-      (meta2d.store.active[0] as any).description ||
-      `meta2d.${new Date().toLocaleString()}`;
-    let ret: any = await addCollection('v.component.', comData); // 新增
-    if (ret.error) {
-      return;
-    }
-    MessagePlugin.success('成功保存为组件!');
-    return;
-  }
-
-  checkData(data);
-  // if (!data._id && router.currentRoute.value.query.id) {
-  //   data._id = router.currentRoute.value.query.id as string;
-  // }
-  if (
-    (globalThis as any).beforeSaveMeta2d &&
-    !(await (globalThis as any).beforeSaveMeta2d(data))
-  ) {
-    return;
-  }
-  if (!data.tags.includes('系统模板') && !data.tags.includes('系统方案')) {
-    if (vType === 'v.template') {
-      if (data.tags && !data.tags.includes('模板')) {
-        delete data._id;
-        delete data.id;
-        delete data.folder;
-      }
-      data.tags = ['模板'];
-    } else if (!vType) {
-      if (data.tags && !data.tags.includes('方案')) {
-        delete data._id;
-        delete data.id;
-        delete data.folder;
-      }
-      data.tags = ['方案'];
-    }
-  }
-  if (type === SaveType.SaveAs) {
-    //另存为去掉teams信息
-    delete data.teams;
-    delete data.folder;
-    delete data.id;
-  }
-
-  //如果不是自己创建的团队图纸,就不去修改缩略图(没有权限去删除缩略图)
-  if (!(data.teams && data.ownerId !== user.id)) {
-    for (const pen of meta2d.store.data.pens) {
-      if (['iframe'].includes(pen.name)) {
-        //重新生成绘制图片
-        pen.onRenderPenRaw?.(pen);
-      }
-    }
-    // setTimeout(async () => {
-    let blob: Blob;
-    try {
-      blob = dataURLtoBlob(meta2d.toPng(10) + '');
-    } catch (e) {
-      MessagePlugin.error(
-        '无法下载,宽度不合法,画布可能没有画笔/画布大小超出浏览器最大限制'
-      );
-      return;
-    }
-    if (data._id && type === SaveType.Save) {
-      if (data.image && !(await delImage(data.image))) {
-        return;
-      }
-    }
-
-    const file:any = await upload(blob, true);
-    if (!file) {
-      return;
-    }
-
-    // 缩略图
-    data.image = file.url;
-    (meta2d.store.data as Meta2dBackData).image = data.image;
-    // }, 1000);
-  }
-  // setTimeout(async () => {
-  if (data.component || vType === 'v.component') {
-    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 ? 'v.component' : 'v';
-  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 = 'v';
-      }
-      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 _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 (_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.map((el) => {
-        return {
-          name: el.name,
-          id: el.id,
-          _id: el._id,
-          image: el.image,
-          component: el.component,
-        };
-      }),
-    });
-  }
-  //  保存图纸之后的钩子函数
-  globalThis.afterSaveMeta2d && (await globalThis.afterSaveMeta2d(ret));
-  if (
-    !data._id ||
-    data.ownerId !== 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('保存成功!');
-  meta2d.emit('business-save', vType);
-  dot.value = false;
-  localforage.removeItem(localStorageName);
-  return true;
-  // }, 2000);
-};*/
 export function queryURLParams(value?: string) {
   let url = value || window.location.href.split('?')[1];
   const urlSearchParams = new URLSearchParams(url);
@@ -488,8 +215,7 @@ export const save = async (
       image:comData.image,
       name:comData.name,
       folder: '',
-      // userFlag,
-      template:userFlag===2?true:false,
+      template:userFlag===2?true:(data.isTemplate||false),
       case:comData.case
     }
     let ret: any = await addCollection('v.component', body); // 新增
@@ -508,37 +234,26 @@ export const save = async (
   ) {
     return;
   }
-  if (
-    data.tags &&
-    !data.tags.includes('系统模板') &&
-    !data.tags.includes('系统方案')
-  ) {
-    if (vType === 'v-template') {
-      if (!data.tags.includes('模板')) {
-        delete data.id;
-        delete data._id;
-        delete data.folder;
-        // data.image = data.image?.split('_').pop();// 避免保存为不同类型会增加不必要的唯一字符串
-      }
-      data.tags = ['模板'];
-    } else if (!vType) {
-      if (!data.tags.includes('方案')) {
-        delete data.id;
-        delete data._id;
-        delete data.folder;
-        // data.image = data.image?.split('_').pop();   
-      }
-      data.tags = ['方案'];
-    } else if(vType === 'v.component') {
-      if (!data.tags.includes('组件')) {
-        delete data.id;
-        delete data._id;
-        delete data.folder;
-        // data.image = data.image?.split('_').pop();
-      }
-      data.tags = ['组件'];
+  if(!data.isSystem && data.id){
+    if(vType === 'v-template' && (data.component||data.isTemplate===false)){
+      //模版 -> 组件/方案
+      delete data.id;
+      delete data._id;
+      delete data.folder;
+    }else if(vType === 'v.component' && !data.component){
+      //组件 -> 模版/方案
+      delete data.id;
+      delete data._id;
+      delete data.folder;
+    }else if(!vType && (data.isTemplate&&data.component)){
+      //方案 -> 模版/组件
+      delete data.id;
+      delete data._id;
+      delete data.folder;
     }
   }
+
+
   const thumbFolder =
     vType === 'v-template'
       ? '模板'
@@ -654,8 +369,7 @@ export const save = async (
     name:data.name,
     folder:data.folder,
     // shared:true,
-    // userFlag,
-    template:userFlag===2?true:false,
+    template:userFlag===2?true:(data.isTemplate||false),
     case:data.case,
     childIds
   }
@@ -663,17 +377,20 @@ export const save = async (
   delete data.image;
   delete data.folder;
   delete data.case;
-  if (!data.tags || !data.tags.length) {
-    data.tags = [thumbFolder];
+  delete data.isSystem;
+  delete data.isTemplate;
+  if(params.n && data.ownerId !== user.id){
+    for (const k of delAttrs) {
+      delete (data as any)[k];
+    }
   }
   if (type === SaveType.SaveAs) {
     // 另存为一定走 新增 ,由于后端 未控制 userId 等属性,清空一下
     for (const k of delAttrs) {
       delete (data as any)[k];
     }
-    if (!data.tags || !data.tags.length) {
-      data.tags = ['方案'];
-    }
+    body.template = false;
+    body.component = false;
     ret = await addCollection(collection, body);
   } else {
     // if (data._id && data.teams && data.owner?.id !== user.id) {
@@ -822,7 +539,7 @@ export function autoSave(force = false) {
     data.ownerId === user.id
   ) {
     let _vType = '';
-    if (data.tags.includes('模板')) {
+    if (data.isTemplate) {
       _vType = 'v-template';
     }
     save(SaveType.Save, _vType);

+ 2 - 0
src/services/utils.ts

@@ -38,6 +38,8 @@ export interface Meta2dBackData extends Meta2dData {
   ownerId?:string;
   ownerName?:string;
   case?:string;
+  isSystem?:boolean;
+  isTemplate?:boolean;
 }
 
 const notification = ref<any>(null);

+ 5 - 1
src/views/components/Graphics.vue

@@ -1803,10 +1803,14 @@ const onMenu = async (val: string) => {
         if (!ret) {
           return;
         }
+        (meta2d.store.data as any).isTemplate = activedGroup.value === '方案' ? true : false;
+        (meta2d.store.data as any).template = activedGroup.value === '方案' ? true : false;
+        (meta2d.store.data as any).folder = val === '默认' ? '' : val;
+        
         //更新后端 图片
         let path: string =
         contextmenu.component.filename || contextmenu.component.image;
-        if (imageDrive && path.startsWith(imageDrive)) {
+        if (imageDrive && path?.startsWith(imageDrive)) {
           path = path.slice(imageDrive.length);
         }
         if(path.startsWith('/file')) {

+ 2 - 0
src/views/components/View.vue

@@ -1142,6 +1142,8 @@ const open = async (flag: boolean = false) => {
       ret.data.ownerId = ret.ownerId;
       ret.data.ownerName = ret.ownerName;
       ret.data.case = ret.case;
+      ret.data.isSystem = ret.system;
+      ret.data.isTemplate = ret.template;
       if(!ret.data.background){
         ret.data.background = '#1e2430';
       }