{"remainingRequest":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xq-web-bpm\\src\\App.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\App.vue","mtime":1675071990741},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n\r\nimport portal from '@/api/portal.js'\r\nexport default {\r\n    name: 'app',\r\n    data(){\r\n        return {\r\n            hasToken: false,\r\n            heartCheck: null,\r\n            lockReconnect: false\r\n        }\r\n    },\r\n    created(){\r\n        this.hasToken = this.hasParams();\r\n        this.$store.dispatch('login/hasToken', this.hasToken)\r\n        this.heartCheckFun();\r\n        this.initWebSocket()\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    methods: {\r\n        hasParams() {\r\n            const query = window.location.search.substring(1)\r\n            if (!query) {\r\n                return false\r\n            }\r\n            const vars = query.split('&')\r\n            const newVars = []\r\n            for (var i = 0; i < vars.length; i++) {\r\n                var pair = vars[i].split('=')\r\n                if (pair[0] == 'token') {\r\n                    return true\r\n                }\r\n            }\r\n        },\r\n        initWebSocket() {\r\n            // WebSocket与普通的请求所用协议有所不同，ws等同于http，wss等同于https\r\n            var url =\r\n                window.context.WebSocket\r\n                    .replace('https://', 'wss://')\r\n                    .replace('http://', '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:() =>{\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: 1000 * 60 *10,  \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                        // const account = JSON.parse(\r\n                        //     sessionStorage.getItem('currentUser')\r\n                        // ).account\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]}