Alsmile hai 1 ano
pai
achega
6c8377b9f3

+ 18 - 26
src/services/common.ts

@@ -30,11 +30,7 @@ export const useDot = () => {
   };
 };
 
-// import { noLoginTip } from "@/services/utils";
-
 const { user } = useUser();
-// const route = useRoute();
-// const router = useRouter();
 
 export enum SaveType {
   Save,
@@ -238,17 +234,8 @@ export const title = '系统可能不会保存您所做的更改,是否继续
 export const unLogin = '未登录,系统可能不会保存您的文件,是否继续?';
 export const unsave = '当前文件未保存,是否继续?(开通vip可享受自动保存服务)';
 
-//未登录,当前文件可能不会保存
-//
-export const newFile = async () => {
-  autoSave();
-  setTimeout(() => {
-    newfile();
-  }, 1000);
-};
-
-export function autoSave() {
-  if (!dot.value) {
+export function autoSave(force = false) {
+  if (!dot.value && (!force || router.currentRoute.value.query.id)) {
     return;
   }
   const data: any = meta2d.data();
@@ -281,12 +268,10 @@ export const notificFn = async (fn: Function, params: any) => {
         }
       } else {
         if (await showNotification(unsave)) {
-          // newfile(false);
           fn(params);
         }
       }
     } else {
-      // newfile(false);
       fn(params);
     }
   }
@@ -306,20 +291,27 @@ export const onScaleView = () => {
   meta2d.translate(meta2d.store.options.x || 0, meta2d.store.options.y || 0);
 };
 
-export const newfile = async (noRouter: boolean = false) => {
+export const blank = async (save = true) => {
   meta2d.canvas.drawingLineName && drawPen();
   meta2d.canvas.pencil && drawingPencil();
   meta2d.canvas.magnifierCanvas.magnifier && showMagnifier();
   meta2d.map?.isShow && showMap();
+  save && autoSave(true);
   dot.value = false;
-  await localforage.removeItem(localStorageName);
-  // 打开文件操作不跳转
-  // const router = useRouter();
-  !noRouter &&
-    router.replace({
-      path: '/',
-      query: { r: Date.now() + '' },
-    });
+  meta2d.open({ pens: [] } as any);
+};
+
+export const newFile = () => {
+  blank();
+  router.push({
+    path: '/',
+    query: {
+      r: Date.now() + '',
+    },
+  });
+  setTimeout(() => {
+    autoSave(true);
+  }, 300);
 };
 
 const tree = reactive({

+ 2 - 2
src/views/components/Graphics.vue

@@ -398,7 +398,7 @@ const dragStart = async (event: DragEvent | MouseEvent, item: any) => {
     return;
   }
 
-  if (!item.draggable) {
+  if (item.draggable === false) {
     data = item;
   } else if (item['3d']) {
     data = {
@@ -472,7 +472,6 @@ const open = async (item: any) => {
   if (item.draggable !== false) {
     return;
   }
-  autoSave();
   router.push({
     path: '/',
     query: {
@@ -485,6 +484,7 @@ const open = async (item: any) => {
     delete (ret as any)[k];
   }
   meta2d.open(ret);
+  autoSave(true);
 };
 
 const onChangeGroupPanel = async (val: string[]) => {

+ 26 - 20
src/views/components/Header.vue

@@ -16,10 +16,10 @@
         <t-dropdown-item @click="newFile">
           <a>新建文件</a>
         </t-dropdown-item>
-        <t-dropdown-item @click="openFile">
+        <t-dropdown-item @click="load(true)">
           <a>打开文件</a>
         </t-dropdown-item>
-        <t-dropdown-item divider="true" @click="loadFile">
+        <t-dropdown-item divider="true" @click="load">
           <a>导入文件</a>
         </t-dropdown-item>
         <t-dropdown-item>
@@ -295,19 +295,20 @@ import JSZip from 'jszip';
 import axios from 'axios';
 import { switchTheme } from '@/services/theme';
 import { noLoginTip } from '@/services/utils';
-import { useDot, autoSave, delAttrs } from '@/services/common';
 import {
   save,
+  blank,
   newFile,
   SaveType,
   onScaleView,
   onScaleWindow,
   showMagnifier,
   showMap,
-  newfile,
   drawPen,
   map,
   magnifier,
+  useDot,
+  delAttrs,
 } from '@/services/common';
 
 const router = useRouter();
@@ -387,27 +388,43 @@ onUnmounted(() => {
   meta2d.off('opened', initMeta2dName);
 });
 
-function login() {
+const login = () => {
   return `${assets.account}?cb=${encodeURIComponent(location.href)}`;
-}
+};
 
-function load(newT: boolean = false) {
+function load(isNew = false) {
   const input = document.createElement('input');
   input.type = 'file';
   input.onchange = (event) => {
     const elem = event.target as HTMLInputElement;
     if (elem.files && elem.files[0]) {
-      newT && newfile(true);
+      blank();
       // 路由跳转 可能在 openFile 后执行
       if (elem.files[0].name.endsWith('.json')) {
         openJson(elem.files[0]);
+        if (isNew) {
+          router.push({
+            path: '/',
+            query: {
+              r: Date.now() + '',
+            },
+          });
+        }
       } else if (elem.files[0].name.endsWith('.svg')) {
         MessagePlugin.info(
           '可二次编辑但转换存在损失,若作为图片使用,请使用右侧属性面板的上传图片功能'
         );
         openSvg(elem.files[0]);
       } else if (elem.files[0].name.endsWith('.zip')) {
-        openZip(elem.files[0]);
+        router.push({
+          path: '/',
+          query: {
+            r: Date.now() + '',
+          },
+        });
+        setTimeout(() => {
+          openZip(elem.files[0]);
+        }, 500);
       } else {
         MessagePlugin.info('打开文件只支持 json,svg,zip 格式');
       }
@@ -581,17 +598,6 @@ const openZip = async (file: File) => {
   }
 };
 
-async function loadFile(newT: boolean = false) {
-  autoSave();
-  setTimeout(() => {
-    load(newT);
-  }, 1000);
-}
-
-async function openFile() {
-  loadFile(true);
-}
-
 const downloadJson = () => {
   const data: Meta2dBackData = meta2d.data();
   if (data._id) delete data._id;

+ 6 - 8
src/views/components/View.vue

@@ -835,15 +835,13 @@ const open = async (flag: boolean = false) => {
         qrcode.url = qr;
       }
     }
-  } else {
-    if (flag) {
-      const data: string = await localforage.getItem(localStorageName);
-      if (data) {
-        meta2d.open(JSON.parse(data));
-      }
-    } else {
-      meta2d.open({ pens: [] } as any);
+  } else if (flag) {
+    const data: string = await localforage.getItem(localStorageName);
+    if (data) {
+      meta2d.open(JSON.parse(data));
     }
+  } else {
+    meta2d.open({ pens: [] } as any);
   }
   !meta2d.store.data.x && (meta2d.store.data.x = meta2d.store.options.x || 0);
   !meta2d.store.data.y && (meta2d.store.data.y = meta2d.store.options.y || 0);