Pārlūkot izejas kodu

有未修改且要离开页面时,提示。删除冗余console.log

任一存 2 gadi atpakaļ
vecāks
revīzija
292f9d9b06

+ 8 - 1
packages/qjkankan-editor/src/Store/index.js

@@ -2,7 +2,7 @@ import Vue from 'vue'
 import Vuex from 'vuex'
 
 import browser from "@/utils/browser"
-import { deepClone } from "@/utils/other.js";
+import { deepClone, isSameObject } from "@/utils/other.js";
 import modules from './modules/'
 
 Vue.use(Vuex)
@@ -13,6 +13,7 @@ const store = new Vuex.Store({
     userNickName: '',
 
     info: '',
+    infoSnapshotAtSave: '',
     showInfo: '',
     hotspot: '',
     backupHotSpot: '',
@@ -89,6 +90,9 @@ const store = new Vuex.Store({
       }
       return root
     },
+    isInfoChangedSinceSave: state => {
+      return !isSameObject(state.info, state.infoSnapshotAtSave)
+    },
     showInfo: state => state.showInfo,
     hotspot: state => state.hotspot,
     backupHotSpot: state => state.backupHotSpot,
@@ -150,6 +154,9 @@ const store = new Vuex.Store({
       state.info = data
       this.commit('scene/setMetaData', data)
     },
+    TakeInfoSnapShotAtSave(state) {
+      state.infoSnapshotAtSave = deepClone(state.info)
+    },
     SetHotspot(state, data) {
       state.hotspot = data
       this.commit("BackupHotSpot", browser.CloneObject(data))

+ 1 - 6
packages/qjkankan-editor/src/Store/modules/scene.js

@@ -50,7 +50,6 @@ export default {
         return state.currentSecondary.id == item.category;
       });
 
-
       this.commit('scene/setCurrentScenesList', arr.sort((a, b) => a.weight - b.weight))
     },
 
@@ -62,7 +61,6 @@ export default {
     // 设置当前一级分组
     setCurrentCatalogRoot(state, payload) {
       state.currentCatalogRoot = payload;
-      console.log(state.metadata.catalogs);
       let temp = [];
       payload.children &&
         payload.children.forEach((item) => {
@@ -74,10 +72,7 @@ export default {
             }
           });
         });
-
-      console.log(temp,'this.commit');
-
-
+        
       this.commit('scene/setSecondaryList', temp)
     },
 

+ 34 - 22
packages/qjkankan-editor/src/framework/EditorHead.vue

@@ -39,7 +39,12 @@ export default {
     this.$bus.on("canLoad", (data) => {
       this.canLoad = data;
       if (data) {
-        this.getInfo();
+        this.getInfo().then((res) => {
+          // getInfo里调用了后端接口,底层用了jquery的网络请求方法,为啥会导致promise嵌套没有展平,res拿到的不是promise 对象的resolve值而是promise对象本身????
+          res.then(() => {
+            this.$store.commit("TakeInfoSnapShotAtSave")
+          })
+        });
       }
     });
   },
@@ -85,7 +90,6 @@ export default {
         }
         return item;
       });
-
       saveWorks(
         {
           password: this.info.password,
@@ -142,35 +146,43 @@ export default {
           document.title = this.info.name;
           this.getInfo();
           this.$store.commit("UpdateIsShowState", true);
+          this.$store.commit("TakeInfoSnapShotAtSave")
         },
         () => {}
       );
     },
     getInfo() {
-      checkLogin().then((res) => {
-        if (res.code == 0) {
-          getPanoInfo("", (data) => {
-            this.$store.commit("SetInfo", data);
-            this.$store.commit("scene/setScenes", data.scenes);
+      return checkLogin().then((res) => {
+        return new Promise((resolve, reject) => {
+          if (res.code == 0) {
+            getPanoInfo("", (data) => {
+              this.$store.commit("SetInfo", data);
+              this.$store.commit("scene/setScenes", data.scenes);
 
-            let firstScene = "";
-
-            if (data.firstScene) {
-              firstScene = data.scenes.find((item) => item.sceneCode == data.firstScene.sceneCode);
-            }
-            this.$store.commit("scene/setCurrentScene", firstScene || data.scenes[0]);
+              let firstScene = "";
 
-            // 查询初始场景的所在1级分组
-            let catalog = data.catalogs.find((item) => item.id == this.currentScene.category);
-            data.catalogRoot.forEach((item) => {
-              let temp = item.children && item.children.find((sub) => sub == catalog.id);
-              if (temp) {
-                this.$store.commit("scene/setCurrentCatalogRoot", item);
-                return;
+              if (data.firstScene) {
+                firstScene = data.scenes.find((item) => item.sceneCode == data.firstScene.sceneCode);
               }
+              this.$store.commit("scene/setCurrentScene", firstScene || data.scenes[0]);
+
+              // 查询初始场景的所在1级分组
+              let catalog = data.catalogs.find((item) => item.id == this.currentScene.category);
+              data.catalogRoot.forEach((item) => {
+                let temp = item.children && item.children.find((sub) => sub == catalog.id);
+                if (temp) {
+                  this.$store.commit("scene/setCurrentCatalogRoot", item);
+                  return;
+                }
+              });
+              resolve()
+            }, (err) => {
+              reject(err)
             });
-          });
-        }
+          } else {
+            reject()
+          }
+        })
       });
     },
   },

+ 16 - 0
packages/qjkankan-editor/src/pages/Edit.vue

@@ -5,11 +5,27 @@
 </template>
 <script>
 import AppLayout from "@/framework/EditorAppLayout.vue";
+import { mapGetters } from "vuex";
 
 export default {
   components: {
     AppLayout
   },
+  computed: {
+    ...mapGetters([
+      'isInfoChangedSinceSave',
+    ]),
+  },
+  mounted() {
+    window.addEventListener('beforeunload', (e) => {
+      if (this.isInfoChangedSinceSave) {
+        e.preventDefault()
+        e.returnValue = '您有未保存的修改,仍要离开?' // 如今的浏览器不会显示这条信息了。
+      }
+    }, {
+      capture: true,
+    })
+  },
 };
 
 </script>

+ 27 - 0
packages/qjkankan-editor/src/utils/other.js

@@ -121,6 +121,33 @@ export function deepClone(target, hash = new WeakMap()) {
   return result
 }
 
+export function isObjectBroad(p) {
+  return typeof(p) === 'object' || typeof(p) === 'function'
+}
+
+// 判断两个对象内容是否相同。未考虑循环引用、共同引用的情况。
+export function isSameObject(object1, object2) {
+  const keys1 = Object.keys(object1)
+  const keys2 = Object.keys(object2)
+  
+  if (keys1.length !== keys2.length) {
+    return false
+  }
+
+  for (let index = 0; index < keys1.length; index++) {
+    const val1 = object1[keys1[index]]
+    const val2 = object2[keys2[index]]
+    const areObjects = isObjectBroad(val1) && isObjectBroad(val2)
+    if (
+      (areObjects && !isSameObject(val1, val2)) ||
+      (!areObjects && (val1 !== val2))
+    ) {
+      return false
+    }
+  }
+  return true
+}
+
 export function ossImagePreviewUrlSuffix(downScaleRate = 10) {
   return `?x-oss-process=image/resize,p_${downScaleRate}&${Math.random()}`
 }

+ 0 - 1
packages/qjkankan-editor/src/views/base/customLogoSettings.vue

@@ -73,7 +73,6 @@ export default {
     },
     onClickSelectingPicBtn() {
       getUserInfo((res) => {
-        console.log(res);
         try {
           if (res.data.incrementNum > 0) {
             this.isShowSelectionWindow = true

+ 0 - 2
packages/qjkankan-editor/src/views/explanation/explanationSettings.vue

@@ -66,7 +66,6 @@ export default {
   },
   methods: {
     onClickCurrentMusic() {
-      console.log(this.$refs['my-audio']);
       if (this.$refs['my-audio']) {
         this.$refs['my-audio'].switchPlayPause()
       }
@@ -77,7 +76,6 @@ export default {
       this.currentScene.explanation.audioName = ''
     },
     handleSubmitFromMaterialSelector(selected) {
-      console.log(selected);
       this.currentScene.explanation.audioId = selected[0].id
       this.currentScene.explanation.audioName = selected[0].name
       this.currentScene.explanation.audioUrl = selected[0].ossPath

+ 0 - 2
packages/qjkankan-editor/src/views/hotspot/EditPanel.vue

@@ -274,11 +274,9 @@ export default {
       this.hotspot.size = data.value
       switch (data.value) {
         case 0.5:
-          console.log(0.5);
           this.hotspot.fontSize = 12
           break;
         case 1:
-          console.log(1);
           this.hotspot.fontSize = 14
           break;
         case 1.5:

+ 0 - 1
packages/qjkankan-editor/src/views/material/works/index.vue

@@ -149,7 +149,6 @@ export default {
   watch:{
     searchKey: {
       handler: function () {
-        console.log(111);
         this.refreshListDebounced()
       },
       immediate: false,

+ 0 - 1
packages/qjkankan-editor/src/views/navigation/groupSettings.vue

@@ -183,7 +183,6 @@ export default {
           }
         }
         if (targetGroupIdxLevel2 === null || belongGroupIdxLevel1 === null) {
-          console.log(targetGroupIdxLevel2, belongGroupIdxLevel1);
           throw('一级分组列表中没有找到要删除的二级分组!')
         }