|
@@ -114,7 +114,7 @@ export const save = async (
|
|
saveFlag = false;
|
|
saveFlag = false;
|
|
saveTimer = setTimeout(() => {
|
|
saveTimer = setTimeout(() => {
|
|
saveFlag = true;
|
|
saveFlag = true;
|
|
- }, 1000);
|
|
|
|
|
|
+ }, 2000);
|
|
|
|
|
|
meta2d.stopAnimate();
|
|
meta2d.stopAnimate();
|
|
const data: Meta2dBackData = meta2d.data();
|
|
const data: Meta2dBackData = meta2d.data();
|
|
@@ -206,152 +206,161 @@ export const save = async (
|
|
|
|
|
|
//如果不是自己创建的团队图纸,就不去修改缩略图(没有权限去删除缩略图)
|
|
//如果不是自己创建的团队图纸,就不去修改缩略图(没有权限去删除缩略图)
|
|
if (!(data.teams && data.owner?.id !== user.id)) {
|
|
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;
|
|
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 {
|
|
} 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);
|
|
const pen = ref(false);
|