| <template> | 
|   <div id="UiHeader"> | 
|   | 
|     <el-menu router :default-active="activeIndex" menu-trigger="click" background-color="#001529" text-color="#fff" | 
|              active-text-color="#1890ff" mode="horizontal"> | 
|   | 
|       <el-menu-item index="/console">控制台</el-menu-item> | 
|       <el-menu-item index="/live">分屏监控</el-menu-item> | 
|       <el-menu-item index="/deviceList">国标设备</el-menu-item> | 
|       <el-menu-item index="/map">电子地图</el-menu-item> | 
|       <el-menu-item index="/pushVideoList">推流列表</el-menu-item> | 
|       <el-menu-item index="/streamProxyList">拉流代理</el-menu-item> | 
|       <el-menu-item index="/cloudRecord">云端录像</el-menu-item> | 
|       <el-menu-item index="/mediaServerManger">节点管理</el-menu-item> | 
|       <el-menu-item index="/parentPlatformList/15/1">国标级联</el-menu-item> | 
|       <el-menu-item v-if="editUser" index="/userManager">用户管理</el-menu-item> | 
|   | 
|       <!--            <el-submenu index="/setting">--> | 
|       <!--              <template slot="title">系统设置</template>--> | 
|       <!--              <el-menu-item index="/setting/web">WEB服务</el-menu-item>--> | 
|       <!--              <el-menu-item index="/setting/sip">国标服务</el-menu-item>--> | 
|       <!--              <el-menu-item index="/setting/media">媒体服务</el-menu-item>--> | 
|       <!--            </el-submenu>--> | 
|       <!--            <el-menu-item style="float: right;" @click="loginout">退出</el-menu-item>--> | 
|       <el-submenu index="" style="float: right;"> | 
|         <template slot="title">欢迎,{{ this.$cookies.get("session").username }}</template> | 
|         <el-menu-item @click="openDoc">在线文档</el-menu-item> | 
|         <el-menu-item > | 
|           <el-switch v-model="alarmNotify" inactive-text="报警信息推送" @change="alarmNotifyChannge"></el-switch> | 
|         </el-menu-item> | 
|         <el-menu-item @click="changePassword">修改密码</el-menu-item> | 
|         <el-menu-item @click="loginout">注销</el-menu-item> | 
|       </el-submenu> | 
|     </el-menu> | 
|     <changePasswordDialog ref="changePasswordDialog"></changePasswordDialog> | 
|   </div> | 
| </template> | 
|   | 
| <script> | 
|   | 
| import changePasswordDialog from '../components/dialog/changePassword.vue' | 
|   | 
| export default { | 
|   name: "UiHeader", | 
|   components: {Notification, changePasswordDialog}, | 
|   data() { | 
|     return { | 
|       alarmNotify: false, | 
|       sseSource: null, | 
|       activeIndex: this.$route.path, | 
|       editUser: this.$cookies.get("session").roleId==1 | 
|     }; | 
|   }, | 
|   created() { | 
|     console.log(this.$cookies.get("session")) | 
|     if (this.$route.path.startsWith("/channelList")) { | 
|       this.activeIndex = "/deviceList" | 
|     } | 
|   }, | 
|   mounted() { | 
|     window.addEventListener('beforeunload', e => this.beforeunloadHandler(e)) | 
|     // window.addEventListener('unload', e => this.unloadHandler(e)) | 
|     this.alarmNotify = this.getAlarmSwitchStatus() === "true"; | 
|     this.sseControl(); | 
|   }, | 
|   methods: { | 
|     loginout() { | 
|       this.$axios({ | 
|         method: 'get', | 
|         url: "/api/user/logout" | 
|       }).then((res) => { | 
|         // 删除cookie,回到登录页面 | 
|         this.$cookies.remove("session"); | 
|         this.$router.push('/login'); | 
|         this.sseSource.close(); | 
|       }).catch((error) => { | 
|         console.error("登出失败") | 
|         console.error(error) | 
|       }); | 
|     }, | 
|     changePassword() { | 
|       this.$refs.changePasswordDialog.openDialog() | 
|     }, | 
|     openDoc() { | 
|       console.log(process.env.BASE_API) | 
|       window.open(!!process.env.BASE_API ? process.env.BASE_API + "/doc.html" : "/doc.html") | 
|     }, | 
|     beforeunloadHandler() { | 
|       this.sseSource.close(); | 
|     }, | 
|     alarmNotifyChannge() { | 
|       this.setAlarmSwitchStatus() | 
|       this.sseControl() | 
|     }, | 
|     sseControl() { | 
|       let that = this; | 
|       if (this.alarmNotify) { | 
|         console.log("申请SSE推送API调用,浏览器ID: " + this.$browserId); | 
|         this.sseSource = new EventSource('/api/emit?browserId=' + this.$browserId); | 
|         this.sseSource.addEventListener('message', function (evt) { | 
|           that.$notify({ | 
|             title: '收到报警信息', | 
|             dangerouslyUseHTMLString: true, | 
|             message: evt.data, | 
|             type: 'warning' | 
|           }); | 
|           console.log("收到信息:" + evt.data); | 
|         }); | 
|         this.sseSource.addEventListener('open', function (e) { | 
|           console.log("SSE连接打开."); | 
|         }, false); | 
|         this.sseSource.addEventListener('error', function (e) { | 
|           if (e.target.readyState == EventSource.CLOSED) { | 
|             console.log("SSE连接关闭"); | 
|           } else { | 
|             console.log(e.target.readyState); | 
|           } | 
|         }, false); | 
|       } else { | 
|         if (this.sseSource != null) { | 
|           this.sseSource.removeEventListener('open', null); | 
|           this.sseSource.removeEventListener('message', null); | 
|           this.sseSource.removeEventListener('error', null); | 
|           this.sseSource.close(); | 
|         } | 
|   | 
|       } | 
|     }, | 
|     getAlarmSwitchStatus() { | 
|       if (localStorage.getItem("alarmSwitchStatus") == null) { | 
|         localStorage.setItem("alarmSwitchStatus", false); | 
|       } | 
|       return localStorage.getItem("alarmSwitchStatus"); | 
|     }, | 
|     setAlarmSwitchStatus() { | 
|       localStorage.setItem("alarmSwitchStatus", this.alarmNotify); | 
|     } | 
|   }, | 
|   destroyed() { | 
|     window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e)) | 
|     if (this.sseSource != null) { | 
|       this.sseSource.removeEventListener('open', null); | 
|       this.sseSource.removeEventListener('message', null); | 
|       this.sseSource.removeEventListener('error', null); | 
|       this.sseSource.close(); | 
|     } | 
|   }, | 
|   | 
| } | 
|   | 
| </script> | 
| <style> | 
| #UiHeader .el-switch__label { | 
|   color: white ; | 
| } | 
| .el-menu--popup .el-menu-item .el-switch .el-switch__label { | 
|   color: white !important; | 
| } | 
| #UiHeader .el-switch__label.is-active{ | 
|   color: #409EFF; | 
| } | 
| #UiHeader .el-menu-item.is-active { | 
|   color: #fff!important; | 
|   background-color: #1890ff!important; | 
| } | 
| </style> |