Procházet zdrojové kódy

feat(views): 组态编辑器支持处理父窗口保存模板的消息

wangcong před 2 týdny
rodič
revize
99ebf9a74f
3 změnil soubory, kde provedl 41 přidání a 2 odebrání
  1. 36 2
      src/utils/index.ts
  2. 3 0
      src/views/Index.vue
  3. 2 0
      src/views/index.ts

+ 36 - 2
src/utils/index.ts

@@ -1,3 +1,37 @@
-export const addUnit = (val: number, unit: string = 'px'): string => {
+import { save, SaveType } from "@/services/common";
+import { IframeMsg } from "@/types";
+import { getVisual2DMsgType, Visual2DMsgType } from "@/views";
+
+export const addUnit = (val: number, unit: string = "px"): string => {
   return val + unit;
-};
+};
+
+export const saveModuleFailed = (errMsg?: string) => {
+  const msg: IframeMsg = {
+    msgType: getVisual2DMsgType(Visual2DMsgType.SaveModuleFailed),
+    errMsg
+  };
+
+  window.parent.postMessage(msg, "*");
+};
+
+export const saveModuleAndClose = async (close: boolean = true) => {
+  try {
+    const saved = await save(SaveType.Save, "", true, 1);
+
+    if (saved && close) {
+      const msg: IframeMsg = {
+        msgType: getVisual2DMsgType(Visual2DMsgType.CloseEditor),
+      };
+
+      window.parent.postMessage(msg, "*");
+    }
+
+    if (!saved) {
+      saveModuleFailed()
+    }
+  } catch (err) {
+    console.error(err);
+    saveModuleFailed(String(err));
+  }
+};

+ 3 - 0
src/views/Index.vue

@@ -30,6 +30,7 @@ import { DeviceItem, IframeMsg } from '@/types';
 import { getVisual2DMsgType, Visual2DMsgType } from '.';
 import { useModuleType } from '@/services/module-type';
 import { useRoute } from 'vue-router';
+import { saveModuleAndClose } from '@/utils';
 
 const route = useRoute();
 const { setModuleType } = useModuleType();
@@ -60,6 +61,8 @@ const handleMsg = (e: MessageEvent<IframeMsg>) => {
   
   if (msgType === getVisual2DMsgType(Visual2DMsgType.SendDeviceData)) {
     currentDevices.value = deviceList as DeviceItem[];
+  } else if (msgType === getVisual2DMsgType(Visual2DMsgType.SaveModule)) {
+    saveModuleAndClose(e.data.close)
   }
 };
 

+ 2 - 0
src/views/index.ts

@@ -11,6 +11,8 @@ export const enum Visual2DMsgType {
   CloseEditor = 'close-editor',
   SendDeviceData = 'send-device-data',
   SendDeviceIds = 'send-device-ids',
+  SaveModule = 'save-module',
+  SaveModuleFailed = 'save-module-failed',
   OpenDevCtrlModal = 'open-dev-ctrl-modal',
   PreviewLoaded = 'preview-loaded',
   PreviewClicked = 'preview-clicked',