Ver código fonte

Merge branch 'main' of github.com:le5le-com/visualization-design

Alsmile 2 anos atrás
pai
commit
ea16cf0b01

+ 1 - 4
src/http.ts

@@ -13,9 +13,6 @@ const requestThrottleSet = new Set();
 // http request 拦截器
 axios.interceptors.request.use(
   (config: any) => {
-    if (!config.url.startsWith("/png") && !config.url.startsWith("/svg")) {
-      config.baseURL = "/api";
-    }
     config.headers.Authorization =
       "Bearer " + (localStorage.token || getCookie("token") || "");
 
@@ -81,7 +78,7 @@ axios.interceptors.response.use(
       return;
     }
     if (error && error.response) {
-      if (error.response.config.url === "/account/profile") {
+      if (error.response.config.url === "/api/account/profile") {
         return;
       }
 

+ 7 - 7
src/services/api.ts

@@ -19,7 +19,7 @@ export async function delImage(image: string) {
 }
 
 export async function getFolders(query: any) {
-  const folder: any = await axios.post("/data/folders/get", {
+  const folder: any = await axios.post("/api/data/folders/get", {
     query,
   });
   if (folder.error) {
@@ -30,7 +30,7 @@ export async function getFolders(query: any) {
 }
 
 export async function updateFolders(data: any) {
-  const folder: any = await axios.post("/data/folders/update", data);
+  const folder: any = await axios.post("/api/data/folders/update", data);
   if (folder.error) {
     return;
   } else {
@@ -39,28 +39,28 @@ export async function updateFolders(data: any) {
 }
 
 export async function addCollection(collection: string, data: any) {
-  return await axios.post(`/data/${collection}/add`, data); // 新增
+  return await axios.post(`/api/data/${collection}/add`, data); // 新增
 }
 
 export async function updateCollection(collection: string, data: any) {
-  return await axios.post(`/data/${collection}/update`, data); // 新增
+  return await axios.post(`/api/data/${collection}/update`, data); // 新增
 }
 
 // export async function addCollection(collection: string, data: any) {
 //   return await axios.post(`/data/${collection}/add`, data); // 新增
 // }
 export async function getLe5le2d(id: string) {
-  return await axios.post("/data/le5le2d/get", {
+  return await axios.post("/api/data/le5le2d/get", {
     id,
   });
 }
 
 export async function getComponents(id: string) {
-  return await axios.post(`/data/le5le2d-components/get`, {
+  return await axios.post(`/api/data/le5le2d-components/get`, {
     id,
   });
 }
 
 export async function getComponentsList(data: any, config: any) {
-  return await axios.post("/data/le5le2d-components/list", data, config);
+  return await axios.post("/api/data/le5le2d-components/list", data, config);
 }

+ 65 - 19
src/services/common.ts

@@ -57,7 +57,7 @@ export const save = async (
 ) => {
   meta2d.stopAnimate();
   const data: Meta2dBackData = meta2d.data();
-  if (!(user && user.username)) {
+  if (!(user && user.id)) {
     MessagePlugin.warning(noLoginTip);
     localforage.setItem(localMeta2dDataName, JSON.stringify(data));
     return;
@@ -78,7 +78,7 @@ export const save = async (
     delete data.teams;
   }
   //如果不是自己创建的团队图纸,就不去修改缩略图(没有权限去删除缩略图)
-  if (!((data as any).teams && data.owner?.id !== user.id)) {
+  if (!(data.teams && data.owner?.id !== user.id)) {
     let blob: Blob;
     try {
       blob = dataURLtoBlob(meta2d.toPng(10) + "");
@@ -123,7 +123,7 @@ export const save = async (
     (meta2d.store.data as Meta2dBackData).name = data.name;
   }
   !data.version && (data.version = baseVer);
-
+  /* //不需要文件夹
   let list = undefined;
   let folder: any = undefined;
   let folderId = undefined;
@@ -145,7 +145,11 @@ export const save = async (
   if (!list) {
     list = [];
   }
-
+*/
+  if (!data.folder) {
+    data.folder = "大屏";
+    data.tags = ["大屏"];
+  }
   if (type === SaveType.SaveAs) {
     // 另存为一定走 新增 ,由于后端 未控制 userId 等属性,清空一下
     const delAttrs = [
@@ -160,11 +164,13 @@ export const save = async (
       "createdAt",
       "updatedAt",
       "recommend",
+      "team",
     ];
     for (const k of delAttrs) {
       delete (data as any)[k];
     }
     ret = addCollection(collection, data); // 新增
+    /*
     if (!data.component) {
       list.push({
         id: ret._id,
@@ -172,7 +178,7 @@ export const save = async (
         name: data.name,
         component: data.component,
       });
-    }
+    }*/
   } else {
     if (data._id && data.teams && data.owner?.id !== user.id) {
       // 团队图纸 不允许修改文件夹信息
@@ -180,6 +186,7 @@ export const save = async (
       ret = updateCollection(collection, data);
     } else if (data._id) {
       ret = updateCollection(collection, data);
+      /*
       if (!data.component) {
         list.forEach((i: any) => {
           if (i.id === data._id) {
@@ -196,9 +203,10 @@ export const save = async (
           name: data.name,
           component: data.component,
         });
-      }
+      }*/
     } else {
       ret = addCollection(collection, data); // 新增
+      /*
       if (!data.component) {
         list.push({
           id: ret._id,
@@ -206,13 +214,15 @@ export const save = async (
           name: data.name,
           component: data.component,
         });
-      }
+      }*/
     }
   }
 
   if (ret.error) {
     return null;
-  } else {
+  }
+
+  /*else {
     if (!data.component && folderId) {
       const updateRet: any = updateFolders({
         _id: folderId,
@@ -223,7 +233,7 @@ export const save = async (
       }
     }
     // showModelSaveAsPop.value = false;
-  }
+  }*/
   //  保存图纸之后的钩子函数
   (window as any).afterSaveMeta2d &&
     (await (window as any).afterSaveMeta2d(ret));
@@ -252,9 +262,10 @@ export const save = async (
   // setDot(false);
   dot.value = false;
   localforage.removeItem(localMeta2dDataName);
+  return true;
 };
 const pen = ref(false);
-const drawPen = () => {
+export const drawPen = () => {
   meta2d.inactive();
   try {
     if (!meta2d.canvas.drawingLineName) {
@@ -288,7 +299,7 @@ const drawingPencil = () => {
   }
 };
 
-const magnifier = ref(false);
+export const magnifier = ref(false);
 export const showMagnifier = () => {
   if (!meta2d.canvas.magnifierCanvas.magnifier) {
     meta2d.showMagnifier();
@@ -298,7 +309,7 @@ export const showMagnifier = () => {
   magnifier.value = meta2d.canvas.magnifierCanvas.magnifier;
 };
 
-const map = ref(false);
+export const map = ref(false);
 export const showMap = () => {
   if (!meta2d.map?.isShow) {
     meta2d.showMap();
@@ -310,20 +321,56 @@ export const showMap = () => {
 
 export const title = "系统可能不会保存您所做的更改,是否继续?";
 export const unLogin = "未登录,系统可能不会保存您的文件,是否继续?";
+export const unsave = "当前文件未保存,是否继续?(开通vip可享受自动保存服务)";
+
 //未登录,当前文件可能不会保存
-// 当前文件未保存,请先手动保存!(开通vip可享受自动保存服务)
+//
 export const newFile = async () => {
+  notificFn(newfile, true);
+  // if (!(user && user.id)) {
+  //   if (await showNotification(unLogin)) {
+  //     newfile(false);
+  //   }
+  // } else {
+  //   if (dot.value) {
+  //     if (!user.vipExpired) {
+  //       if (await save(SaveType.Save)) {
+  //         //TODO 保存报错了需要save吗
+  //         newfile(false);
+  //       }
+  //     } else {
+  //       if (await showNotification(unsave)) {
+  //         newfile(false);
+  //       }
+  //     }
+  //   } else {
+  //     newfile(false);
+  //   }
+  // }
+};
+
+export const notificFn = async (fn: Function, params: any) => {
   if (!(user && user.id)) {
     if (await showNotification(unLogin)) {
-      newfile(false);
+      fn(params);
     }
   } else {
     if (dot.value) {
-      if (await showNotification(title)) {
-        newfile(false);
+      if (!user.vipExpired) {
+        if (await save(SaveType.Save)) {
+          //TODO 保存报错了需要save吗
+          // newfile(false);
+          fn(params);
+        }
+      } else {
+        if (await showNotification(unsave)) {
+          // newfile(false);
+          fn(params);
+        }
       }
     } else {
-      newfile(false);
+      // newfile(false);
+      fn(params);
     }
   }
 };
@@ -349,10 +396,9 @@ export const newfile = async (noRouter: boolean = false) => {
   meta2d.map?.isShow && showMap();
   // setDot(false);
   dot.value = false;
-  // await localforage.removeItem(localMeta2dDataName);
+  await localforage.removeItem(localMeta2dDataName);
   // 打开文件操作不跳转
   // const router = useRouter();
-  console.log("router", router);
   !noRouter &&
     router.replace({
       path: "/",

+ 1 - 1
src/services/defaults.ts

@@ -421,7 +421,7 @@ export const shapeLib = [
         icon: 'l-text',
         id: 16,
         data: {
-          text: `${(window as any).companyName}meta2d`,
+          text: `text`,
           width: 160,
           height: 30,
           name: 'text',

+ 1 - 1
src/services/file.ts

@@ -11,7 +11,7 @@ export async function upload(
   form.append("directory", directory);
   form.append("public", shared + "");
   form.append("file", blob);
-  const ret: any = await axios.post("/api/image", form);
+  const ret: any = await axios.post("/api/image/upload", form);
   if (ret.error) {
     return null;
   }

+ 35 - 33
src/services/user.ts

@@ -1,11 +1,11 @@
-import { reactive } from 'vue';
+import { reactive } from "vue";
 
-import axios from 'axios';
-import dayjs from 'dayjs';
+import axios from "axios";
+import dayjs from "dayjs";
 
-import { updateObject } from '@/services/object';
-import router from '@/router';
-import { deleteCookie, setCookie } from '@/services/cookie';
+import { updateObject } from "@/services/object";
+import router from "@/router";
+import { deleteCookie, setCookie } from "@/services/cookie";
 
 export interface IUser {
   id?: string;
@@ -38,7 +38,7 @@ export interface IUser {
 }
 
 const user = reactive<IUser>({
-  id: '',
+  id: "",
 });
 
 const message = reactive<{ unread: number }>({
@@ -49,13 +49,13 @@ export const useUser = () => {
   const getUser = async (token?: boolean) => {
     const params: any = {};
     if (token) {
-      if (localStorage.getItem('remember')) {
-        params.token = 'r';
+      if (localStorage.getItem("remember")) {
+        params.token = "r";
       } else {
-        params.token = '1';
+        params.token = "1";
       }
     }
-    const ret: IUser = await axios.get('/account/profile', { params });
+    const ret: IUser = await axios.get("/api/account/profile", { params });
     if (!ret) {
       return;
     }
@@ -65,7 +65,9 @@ export const useUser = () => {
   };
 
   const getMessage = async () => {
-    const ret: { unread: number } = await axios.post('/message/unread/count');
+    const ret: { unread: number } = await axios.post(
+      "/api/message/unread/count"
+    );
     ret && (message.unread = ret.unread);
   };
 
@@ -78,35 +80,35 @@ export const useUser = () => {
       const vip = new Date(data.vip);
       if (vip > new Date()) {
         data.vipExpired = false;
-      } else if (vip > new Date('2023-01-17T08:00:00+08:00')) {
+      } else if (vip > new Date("2023-01-17T08:00:00+08:00")) {
         data.vipExpired = true;
       } else {
         data.vip = undefined;
       }
       if (data.vip) {
-        data.vip = dayjs(data.vip).format('YYYY-MM-DD HH:mm:ss');
+        data.vip = dayjs(data.vip).format("YYYY-MM-DD HH:mm:ss");
       }
     }
     if (data.roles) {
       for (const item of data.roles) {
-        if (item.indexOf('运营') > -1) {
+        if (item.indexOf("运营") > -1) {
           data.isOperation = true;
           break;
         }
       }
     }
-    data.created = dayjs(data.createdAt).format('YYYY-MM-DD HH:mm:ss');
+    data.created = dayjs(data.createdAt).format("YYYY-MM-DD HH:mm:ss");
 
     if (data.token) {
       let baseUrl = import.meta.env.BASE_URL;
-      if (baseUrl && baseUrl !== '/') {
-        localStorage.setItem('token', data.token);
+      if (baseUrl && baseUrl !== "/") {
+        localStorage.setItem("token", data.token);
       } else {
-        setCookie('token', data.token, {
-          path: '/',
+        setCookie("token", data.token, {
+          path: "/",
           domain: getRootDomain(),
         });
-        localStorage.removeItem('token');
+        localStorage.removeItem("token");
       }
       delete data.token;
     }
@@ -115,21 +117,21 @@ export const useUser = () => {
 
   const signout = () => {
     updateObject(user, {});
-    localStorage.removeItem('token');
+    localStorage.removeItem("token");
     const domain = getRootDomain();
     if (domain) {
-      deleteCookie('token', {
-        path: '/',
-        domain: 'le5le.com',
+      deleteCookie("token", {
+        path: "/",
+        domain: "le5le.com",
       });
     }
 
-    router.replace({ path: '/login', query: router.currentRoute.value.query });
+    router.replace({ path: "/login", query: router.currentRoute.value.query });
   };
 
   const getRootDomain = () => {
-    let domain = '';
-    const domainItems = document.domain.split('.');
+    let domain = "";
+    const domainItems = document.domain.split(".");
     if (
       domainItems.length < 3 ||
       (domainItems.length === 4 &&
@@ -138,14 +140,14 @@ export const useUser = () => {
         +domainItems[2] > 0 &&
         +domainItems[3] > 0)
     ) {
-      domain = '';
+      domain = "";
     } else if (
-      document.domain.endsWith('.com.cn') ||
-      document.domain.endsWith('.org.cn')
+      document.domain.endsWith(".com.cn") ||
+      document.domain.endsWith(".org.cn")
     ) {
-      domain = domainItems.slice(-3).join('.');
+      domain = domainItems.slice(-3).join(".");
     } else {
-      domain = domainItems.slice(-2).join('.');
+      domain = domainItems.slice(-2).join(".");
     }
 
     return domain;

+ 2 - 1
src/services/utils.ts

@@ -34,6 +34,7 @@ export interface Meta2dBackData extends Meta2dData {
   editorId?: string;
   editorName?: string;
   teams?: { id?: string; name?: string }[];
+  tags?: string[]; //标签数组
 }
 
 const notification = ref<any>(null);
@@ -54,7 +55,7 @@ export function showNotification(title: string): Promise<boolean> {
           notification.value = null;
           resolve(false);
         },
-        duration: 1000000,
+        // duration: 1000000,
         footer: h(
           Button,
           {

+ 38 - 17
src/views/components/Header.vue

@@ -168,10 +168,20 @@
           <a @click="onScaleView">100%视图</a>
         </t-dropdown-item>
         <t-dropdown-item>
-          <a @click="showMap">鹰眼地图</a>
+          <a @click="showMap">
+            <div class="flex middle">
+              鹰眼地图 <span class="flex-grow"></span>
+              <t-icon v-show="map" name="check" />
+            </div>
+          </a>
         </t-dropdown-item>
         <t-dropdown-item divider="true">
-          <a @click="showMagnifier">放大镜</a>
+          <a @click="showMagnifier">
+            <div class="flex middle">
+              放大镜 <span class="flex-grow"></span>
+              <t-icon v-show="magnifier" name="check" />
+            </div>
+          </a>
         </t-dropdown-item>
         <t-dropdown-item>
           <a @click="onAutoAnchor">
@@ -286,14 +296,22 @@ import {
 import JSZip from "jszip";
 import axios from "axios";
 import { switchTheme } from "@/services/theme";
-import { noLoginTip ,localMeta2dDataName} from "@/services/utils";
-import { useDot } from "@/services/common";
+import { noLoginTip, localMeta2dDataName } from "@/services/utils";
+import { useDot, notificFn } from "@/services/common";
 import {
   save,
   newFile,
   SaveType,
   onScaleView,
-  onScaleWindow,showMagnifier,showMap,newfile,title}from "@/services/common";
+  onScaleWindow,
+  showMagnifier,
+  showMap,
+  newfile,
+  title,
+  drawPen,
+  map,
+  magnifier
+} from "@/services/common";
 
 const router = useRouter();
 const route = useRoute();
@@ -313,7 +331,7 @@ const inputMeta2dName = () => {
 };
 
 const initMeta2dName = () => {
-  data.name = (meta2d.store.data as Meta2dBackData).name||'';
+  data.name = (meta2d.store.data as Meta2dBackData).name || "";
 };
 
 nextTick(() => {
@@ -401,7 +419,7 @@ const openSvg = async (file: File) => {
 };
 
 const openZip = async (file: File, isNew: boolean = false) => {
-  if (!(user && user.username)) {
+  if (!(user && user.id)) {
     MessagePlugin.warning(noLoginTip);
     return;
   }
@@ -528,13 +546,15 @@ const openZip = async (file: File, isNew: boolean = false) => {
 };
 
 async function loadFile(newT: boolean = false) {
-  if (dot.value) {
-    if (await showNotification(title)) {
-      load(newT);
-    }
-  } else {
-    load(newT);
-  }
+  // if (dot.value) {
+  //   if (await showNotification(title)) {
+  //     load(newT);
+  //   }
+  // } else {
+  //   load(newT);
+  // }
+  //默认 导入新建项目
+  notificFn(load, newT);
 }
 
 async function openFile() {
@@ -559,7 +579,7 @@ const downloadJson = () => {
 };
 
 const downloadZip = async () => {
-  if (!(user && user.username)) {
+  if (!(user && user.id)) {
     MessagePlugin.warning(noLoginTip);
     return;
   }
@@ -594,7 +614,7 @@ const downloadZip = async () => {
 };
 
 const downloadHtml = async () => {
-  if (!(user && user.username)) {
+  if (!(user && user.id)) {
     MessagePlugin.warning(noLoginTip);
     return;
   }
@@ -648,7 +668,7 @@ const downloadReact = async () => {
 };
 
 async function downloadAsFrame(type: Frame) {
-  if (!(user && user.username)) {
+  if (!(user && user.id)) {
     MessagePlugin.warning(noLoginTip);
     return;
   }
@@ -934,6 +954,7 @@ const onPaste = () => {
 
 const onToggleAnchor = () => {
   //取消连线状态
+  meta2d.store.options.disableAnchor = false;
   meta2d.canvas.drawingLineName && drawPen();
   meta2d.toggleAnchorMode();
 };

+ 13 - 10
src/views/components/View.vue

@@ -318,7 +318,7 @@ onMounted(() => {
 });
 
 const watcher = watch(
-  () => route.query.id,
+  () => route.query,
   async () => {
     open();
   }
@@ -547,18 +547,18 @@ const oneDraw = () => {
   if (oneD.value) {
     oneD.value = false;
     if (!alwaysD.value) {
-      meta2d.finishDrawLine();
-      meta2d.drawLine();
+      // meta2d.finishDrawLine();
+      // meta2d.drawLine();
       meta2d.store.options.disableAnchor =true;
     }
   } else {
     oneD.value = true;
-    meta2d.drawLine(meta2d.store.options.drawingLineName);
+    // meta2d.drawLine(meta2d.store.options.drawingLineName);
     meta2d.store.options.disableAnchor =false;
   }
   if (alwaysD.value) {
-    meta2d.finishDrawLine();
-    meta2d.drawLine();
+    // meta2d.finishDrawLine();
+    // meta2d.drawLine();
     oneD.value = false;
     alwaysD.value = false;
     meta2d.store.options.disableAnchor =true;
@@ -566,7 +566,7 @@ const oneDraw = () => {
 };
 const alwaysDraw = () => {
   alwaysD.value = true;
-  meta2d.drawLine(meta2d.store.options.drawingLineName);
+  // meta2d.drawLine(meta2d.store.options.drawingLineName);
   meta2d.store.options.disableAnchor =false;
 };
 
@@ -577,8 +577,8 @@ const lineAdd = (pens: Pen[]) => {
       if (meta2d.canvas.drawingLineName) {
         oneD.value = false;
         setTimeout(() => {
-          meta2d.finishDrawLine();
-          meta2d.drawLine();
+          // meta2d.finishDrawLine();
+          // meta2d.drawLine();
           meta2d.store.options.disableAnchor =true;
         }, 100);
       }
@@ -590,7 +590,7 @@ const onAddShape = (event: DragEvent | MouseEvent, name: string) => {
   let data: any;
   if (name === 'text') {
     data = {
-      text: 'le5le Meta2d',
+      text: 'text',
       width: 100,
       height: 20,
       name: 'text',
@@ -688,6 +688,9 @@ const preview = async () => {
   #meta2d {
     border-top: 1px solid var(--color-background-input);
     height: calc(100vh - 81px);
+    :deep(.meta2d-map){
+      background: var(--color-background);
+    }
   }
 }
 </style>