|
@@ -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);
|