{"remainingRequest":"D:\\jenkins\\workspace\\examine-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\examine-fvue\\src\\App.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\examine-fvue\\src\\App.vue","mtime":1667280203123},{"path":"D:\\jenkins\\workspace\\examine-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\examine-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\examine-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\n// import Navigator from '@/views/Navigator.vue'\r\nimport portal from '@/api/portal.js'\r\nexport default {\r\n    name: 'app',\r\n    provide() {\r\n        //父组件中通过provide来提供变量，在子组件中通过inject来注入变量。\r\n        return {\r\n            reload: this.reload,\r\n            heartCheck: null,\r\n            lockReconnect: false\r\n        }\r\n    },\r\n    components: {\r\n        // Navigator,\r\n    },\r\n    data() {\r\n        return {\r\n            isRouterAlive: true, //控制视图是否显示的变量\r\n        }\r\n    },\r\n    mounted() {\r\n        // 因为resize事件在整个项目中只能监听一次，所以这里通过全局广播发送这个事件\r\n        window.onresize = () => {\r\n            this.$root.$emit('resize')\r\n        }\r\n        // this.$bus.$on('login', () => {\r\n        //     this.initWebSocket()\r\n        // })\r\n    },\r\n    created() {\r\n        const that = this\r\n        // that.$store._vm.$root.$on('login-completed', function () {\r\n        //     that.getSysDict()\r\n        //     //获取静态资源目录\r\n        //     that.$store.dispatch('menu/getStaticMenus')\r\n        //     // 获取用户接口权限\r\n        //     that.$store.dispatch('menu/getCurrentUserMethodAuth')\r\n        //     // 获取动态资源目录\r\n        //     // that.$store.dispatch('menu/getSyncMenus')\r\n        // })\r\n        // this.heartCheckFun()\r\n        // this.initWebSocket()\r\n    },\r\n    methods: {\r\n        reload() {\r\n            this.isRouterAlive = false\r\n            setTimeout(() => {\r\n                this.isRouterAlive = true\r\n            }, 10)\r\n        },\r\n        initWebSocket() {\r\n            // WebSocket与普通的请求所用协议有所不同，ws等同于http，wss等同于https\r\n            var url =\r\n                window.context.WebSocket.replace('https://', 'wss://').replace(\r\n                    'http://',\r\n                    'ws://'\r\n                ) + '/websocket'\r\n            this.websock = new WebSocket(url)\r\n            this.websock.onopen = this.websocketOnopen\r\n            this.websock.onerror = this.websocketOnerror\r\n            this.websock.onmessage = this.websocketOnmessage\r\n            this.websock.onclose = this.websocketOnclose\r\n        },\r\n        websocketOnopen() {\r\n            console.log('WebSocket连接成功')\r\n            this.heartCheck.start()\r\n        },\r\n        websocketOnerror(e) {\r\n            console.log(e, 'WebSocket连接发生错误')\r\n            this.reconnect()\r\n        },\r\n        websocketOnmessage(e) {\r\n            // console.log('-----接收消息-------', e.data)\r\n            var data = eval('(' + e.data + ')') //解析对象\r\n            if (data.cmd == 'dict') {\r\n                // 重载字典\r\n                this.getSysDict()\r\n            }\r\n            this.heartCheck.reset()\r\n        },\r\n        websocketOnclose(e) {\r\n            console.log('connection closed (' + e.code + ')')\r\n            this.reconnect()\r\n        },\r\n        websocketSend(text) {\r\n            // 数据发送\r\n            try {\r\n                this.websock.send(text)\r\n            } catch (err) {\r\n                console.log('send failed (' + err.code + ')')\r\n            }\r\n        },\r\n        reconnect() {\r\n            if (this.lockReconnect) return\r\n            this.lockReconnect = true\r\n            //没连接上会一直重连，设置延迟避免请求过多\r\n            setTimeout(() => {\r\n                console.info('尝试重连...')\r\n                this.initWebSocket()\r\n                this.lockReconnect = false\r\n            }, 5000)\r\n        },\r\n        heartCheckFun() {\r\n            var that = this\r\n            //心跳检测,每10s心跳一次\r\n            this.heartCheck = {\r\n                timeout: 10000,\r\n                timeoutObj: null,\r\n                serverTimeoutObj: null,\r\n                reset: function () {\r\n                    clearTimeout(this.timeoutObj)\r\n                    this.start()\r\n                    return this\r\n                },\r\n                start: function () {\r\n                    var self = this\r\n                    this.timeoutObj = setTimeout(function () {\r\n                        //这里发送一个心跳，后端收到后，返回一个心跳消息，\r\n                        //onmessage拿到返回的心跳就说明连接正常\r\n                        that.websocketSend('{\"messageType\":\"ping\",\"message\":\"web\"}')\r\n                        // console.info('客户端发送心跳')\r\n                        //self.serverTimeoutObj = setTimeout(function(){//如果超过一定时间还没重置，说明后端主动断开了\r\n                        //  that.websock.close();//如果onclose会执行reconnect，我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次\r\n                        //}, self.timeout)\r\n                    }, this.timeout)\r\n                },\r\n            }\r\n        },\r\n        //---------websocket 接收字典被修改的信息，请求新字典数据。-------------\r\n\r\n        getSysDict() {\r\n            portal.getSysDict().then((data) => {\r\n                if (data) {\r\n                    sessionStorage.setItem('dict_data', JSON.stringify(data))\r\n                }\r\n            })\r\n        },\r\n    },\r\n}\r\n",null]}