kuaifan 5 年 前
コミット
b500ad50fb

+ 1 - 1
resources/assets/js/main/components/WHeader.vue

@@ -236,7 +236,7 @@
                 this.$set(this.formDatum, 'userimg', res.userimg)
                 this.$set(this.formDatum, 'nickname', res.nickname)
                 this.$set(this.formDatum, 'profession', res.profession)
-            }, true);
+            }, false);
         },
         methods: {
             tabPage(path) {

+ 1 - 1
resources/assets/js/main/components/project/archived.vue

@@ -124,7 +124,7 @@
                 this.loadYet = true;
                 this.getLists(true);
             }
-            $A.setOnTaskInfoListener((act, detail) => {
+            $A.setOnTaskInfoListener('components/project/archived', (act, detail) => {
                 if (this.projectid > 0 && detail.projectid != this.projectid) {
                     return;
                 }

+ 1 - 1
resources/assets/js/main/components/project/statistics.vue

@@ -188,7 +188,7 @@
                 this.loadYet = true;
                 this.getLists(true);
             }
-            $A.setOnTaskInfoListener((act, detail) => {
+            $A.setOnTaskInfoListener('components/project/statistics', (act, detail) => {
                 if (this.projectid > 0 && detail.projectid != this.projectid) {
                     return;
                 }

+ 1 - 1
resources/assets/js/main/components/project/task/lists.vue

@@ -218,7 +218,7 @@
                 this.loadYet = true;
                 this.getLists(true);
             }
-            $A.setOnTaskInfoListener((act, detail) => {
+            $A.setOnTaskInfoListener('components/project/task/lists',(act, detail) => {
                 if (this.projectid > 0 && detail.projectid != this.projectid) {
                     return;
                 }

+ 1 - 1
resources/assets/js/main/components/project/todo/attention.vue

@@ -87,7 +87,7 @@
                 this.loadYet = true;
                 this.getLists(true);
             }
-            $A.setOnTaskInfoListener((act, detail) => {
+            $A.setOnTaskInfoListener('components/project/todo/attention',(act, detail) => {
                 this.lists.some((task, i) => {
                     if (task.id == detail.id) {
                         this.lists.splice(i, 1, detail);

+ 1 - 1
resources/assets/js/main/components/project/todo/calendar.vue

@@ -33,7 +33,7 @@
 
         },
         mounted() {
-            $A.setOnTaskInfoListener((act, detail) => {
+            $A.setOnTaskInfoListener('components/project/todo/calendar',(act, detail) => {
                 detail = this.formatTaskData(detail);
                 this.lists.some((task, i) => {
                     if (task.id == detail.id) {

+ 1 - 1
resources/assets/js/main/components/project/todo/complete.vue

@@ -75,7 +75,7 @@
                 this.loadYet = true;
                 this.getLists(true);
             }
-            $A.setOnTaskInfoListener((act, detail) => {
+            $A.setOnTaskInfoListener('components/project/todo/complete',(act, detail) => {
                 this.lists.some((task, i) => {
                     if (task.id == detail.id) {
                         this.lists.splice(i, 1, detail);

+ 62 - 38
resources/assets/js/main/main.js

@@ -142,33 +142,39 @@ import '../../sass/main.scss';
 
         /**
          * 获取用户信息(并保存)
-         * @param callback          网络请求获取到用户信息回调(监听用户信息发生变化)
-         * @param onlyListener      只监听不重新网络请求获取
+         * @param callback                  网络请求获取到用户信息回调(监听用户信息发生变化)
+         * @param continueListenerName      持续监听标识(字符串或boolean,true:自动生成监听标识,false:自动生成监听标识但首次不请求网络)
          * @returns Object
          */
-        getUserInfo(callback, onlyListener) {
+        getUserInfo(callback, continueListenerName) {
             if (typeof callback === 'function' || (typeof callback === "boolean" && callback === true)) {
-                if (onlyListener === true) {
-                    typeof callback === "function" && callback($A.jsonParse($A.storage("userInfo")));
-                    $A.setOnUserInfoListener(callback);
-                } else {
-                    $A.aAjax({
-                        url: 'users/info',
-                        error: () => {
-                            this.userLogout();
-                        },
-                        success: (res) => {
-                            if (res.ret === 1) {
-                                $A.storage("userInfo", res.data);
-                                $A.setToken(res.data.token);
-                                $A.triggerUserInfoListener(res.data);
-                                //
-                                typeof callback === "function" && callback(res.data);
-                            }
-                            $A.setOnUserInfoListener(callback);
-                        }
-                    });
+                if (typeof continueListenerName === "boolean") {
+                    if (continueListenerName === true) {
+                        continueListenerName = "auto-" + $A.randomString(6);
+                    } else {
+                        $A.setOnUserInfoListener("auto-" + $A.randomString(6), callback);
+                        return $A.jsonParse($A.storage("userInfo"));
+                    }
                 }
+                //
+                $A.aAjax({
+                    url: 'users/info',
+                    error: () => {
+                        this.userLogout();
+                    },
+                    success: (res) => {
+                        if (res.ret === 1) {
+                            $A.storage("userInfo", res.data);
+                            $A.setToken(res.data.token);
+                            $A.triggerUserInfoListener(res.data);
+                            typeof callback === "function" && callback(res.data);
+                        }
+                        //
+                        if (typeof continueListenerName == "string" && continueListenerName) {
+                            $A.setOnUserInfoListener(continueListenerName, callback);
+                        }
+                    }
+                });
             }
             return $A.jsonParse($A.storage("userInfo"));
         },
@@ -206,43 +212,61 @@ import '../../sass/main.scss';
 
         /**
          * 监听用户信息发生变化
-         * @param callback
+         * @param listenerName      监听标识
+         * @param callback          监听回调
          */
-        setOnUserInfoListener(callback) {
+        setOnUserInfoListener(listenerName, callback) {
+            if (typeof listenerName != "string") {
+                return;
+            }
             if (typeof callback === "function") {
-                $A.__userInfoListener.push(callback);
+                $A.__userInfoListenerObject[listenerName] = {
+                    callback: callback,
+                }
             }
         },
         triggerUserInfoListener(userInfo) {
-            $A.__userInfoListener.forEach((callback) => {
-                typeof callback === "function" && callback(userInfo);
-            });
+            let key, item;
+            for (key in $A.__userInfoListenerObject) {
+                if (!$A.__userInfoListenerObject.hasOwnProperty(key)) continue;
+                item = $A.__userInfoListenerObject[key];
+                if (typeof item.callback === "function") {
+                    item.callback(userInfo);
+                }
+            }
         },
-        __userInfoListener: [],
+        __userInfoListenerObject: {},
 
         /**
          * 监听任务发生变化
-         * @param callback
-         * @param callSpecial 是否监听几种特殊情况
+         * @param listenerName      监听标识
+         * @param callback          监听回调
+         * @param callSpecial       是否监听几种特殊情况
          */
-        setOnTaskInfoListener(callback, callSpecial) {
+        setOnTaskInfoListener(listenerName, callback, callSpecial) {
+            if (typeof listenerName != "string") {
+                return;
+            }
             if (typeof callback === "function") {
-                $A.__taskInfoListener.push({
+                $A.__taskInfoListenerObject[listenerName] = {
                     special: callSpecial === true,
                     callback: callback,
-                });
+                }
             }
         },
         triggerTaskInfoListener(act, taskDetail) {
-            $A.__taskInfoListener.forEach((item) => {
+            let key, item;
+            for (key in $A.__taskInfoListenerObject) {
+                if (!$A.__taskInfoListenerObject.hasOwnProperty(key)) continue;
+                item = $A.__taskInfoListenerObject[key];
                 if (typeof item.callback === "function") {
                     if (act.indexOf(['deleteproject', 'deletelabel', 'leveltask']) === -1 || item.special === true) {
                         item.callback(act, taskDetail);
                     }
                 }
-            });
+            }
         },
-        __taskInfoListener: [],
+        __taskInfoListenerObject: {},
 
     });
 

+ 1 - 1
resources/assets/js/main/pages/project.vue

@@ -362,7 +362,7 @@
         },
         mounted() {
             this.getLists(true);
-            $A.setOnTaskInfoListener((act, detail) => {
+            $A.setOnTaskInfoListener('pages/project',(act, detail) => {
                 switch (act) {
                     case 'deleteproject':   // 删除项目
                     case 'deletelabel':     // 删除分类

+ 2 - 2
resources/assets/js/main/pages/todo.vue

@@ -371,8 +371,8 @@
             this.userInfo = $A.getUserInfo((res) => {
                 this.userInfo = res;
                 this.refreshTask();
-            });
-            $A.setOnTaskInfoListener((act, detail) => {
+            }, true);
+            $A.setOnTaskInfoListener('pages/todo',(act, detail) => {
                 switch (act) {
                     case 'deleteproject':   // 删除项目
                     case 'deletelabel':     // 删除分类

+ 6 - 0
test.js

@@ -0,0 +1,6 @@
+let array = {id: 1, pid: 2};
+
+for (let key in array) {
+    if (!array.hasOwnProperty(key)) continue;
+    console.log(key + "---" + array[key])
+}