{"remainingRequest":"D:\\jenkins\\workspace\\damDance-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\damDance-fvue\\src\\App.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\damDance-fvue\\src\\App.vue","mtime":1697536795169},{"path":"D:\\jenkins\\workspace\\damDance-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\damDance-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\damDance-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':'heartcheck'}\")\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]}