<template> <div style="background-color: #278df9" class="app-header"> <h3>{{ title }}</h3> <el-dropdown class="avatar-container" trigger="click"> <div class="avatar-wrapper"> <span style="line-height:50px;">欢迎您,{{ name }}</span> <!--<img :src="avatar+'?imageView2/1/w/80/h/80'" class="user-avatar">--> <i class="el-icon-caret-bottom"/> </div> <el-dropdown-menu slot="dropdown" class="user-dropdown"> <!--<router-link class="inlineBlock" to="/">--> <!--<el-dropdown-item>--> <!--主页--> <!--</el-dropdown-item>--> <!--</router-link>--> <el-dropdown-item> <span style="display:block;" @click="resetPwd">修改密码</span> </el-dropdown-item> <el-dropdown-item divided> <span style="display:block;" @click="logout">注销</span> </el-dropdown-item> </el-dropdown-menu> </el-dropdown> <reset-pwd v-show="showSetPwd" ref="retPwd"/> </div> </template> <script> import { mapGetters } from 'vuex' import ResetPwd from '@/views/system/user/resetPwd' import { getProject } from '@/utils/baseConfig' import { Notification } from 'element-ui' export default { name: 'AppHeader', components: { ResetPwd }, data() { return { wsPath: process.env.BASE_WS, title: getProject().title, name: this.$store.getters.name, showSetPwd: false // headerUrl: require('../../../assets/global_images/header.png')// 头部图片 } }, computed: { ...mapGetters([ 'sidebar', 'avatar' ]) }, mounted() { this.$nextTick(() => { this.initWebSocket() }) }, methods: { initWebSocket() { const that = this if (typeof (WebSocket) === 'undefined') { Notification({ title: '提示', message: '当前浏览器无法接收实时报警信息,请使用谷歌浏览器或360浏览器极速模式!', type: 'warning', duration: 0 }) } else { const socketUrl = this.wsPath console.log(socketUrl, '*********************') that.socket = new WebSocket(socketUrl) // 监听socket打开 that.socket.onopen = function() { console.log('浏览器WebSocket已打开') } // 监听socket消息接收 that.socket.onmessage = function(msg) { // 转换为json对象 const data = JSON.parse(msg.data) if (data.type === 'gasAlarm') { const message = data.monitorName + '设备报警甲烷值:' + data.concentration + ',报警位置:' + data.alarmDirection + ',' + data.alarmPitch Notification({ title: '甲烷超标报警', // 这里也可以把返回信息加入到message中显示 message: message, type: 'warning' }) } else if (data.type === 'strengthAlarm') { const message = data.monitorName + '设备报警遮挡' Notification({ title: '遮挡报警', // 这里也可以把返回信息加入到message中显示 message: message, type: 'warning' }) } } } // 监听socket错误 that.socket.onerror = function() { Notification({ title: '服务器错误', message: '无法接收实时报警信息,请检查服务器后重新刷新页面', type: 'error', duration: 0 }) } // 监听socket关闭 that.socket.onclose = function() { console.log('WebSocket已关闭') } }, toggleSideBar() { this.$store.dispatch('ToggleSideBar') }, logout() { if (this.$root.ws !== null) { this.$root.ws.close() this.$root.ws = null } this.$store.dispatch('LogOut').then(() => { location.reload() // 为了重新实例化vue-router对象 避免bug }) }, resetPwd() { this.showSetPwd = true this.$refs.retPwd.initDialog(true) } } } </script> <style rel="stylesheet/scss" lang="scss" scoped> .app-header{ height:60px; background-color:#000000; background-repeat: no-repeat; -webkit-background-size: 100% 100%; background-size: 100% 100%; color:white; } h3{ margin-left:40px; display: inline-block; float:left; } .avatar-container { height: 50px; display: inline-block; float: right; z-index:500; position: fixed; top:5px; right: 35px; .avatar-wrapper { color:#ffffff; cursor: pointer; margin-top: 5px; position: relative; line-height: initial; .user-avatar { width: 40px; height: 40px; border-radius: 10px; } .el-icon-caret-bottom { font-size: 12px; } } } </style>