blob: 2559f1bc6af1e4ba9b82b553a96aede79ea19296 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
<template>
<header class="rk-header flex-h">
<div class="flex-h">
<svg class="svg-logo icon" style="margin-right:35px;margin-top:-5px">
<use xlink:href="#logo-sw"></use>
</svg>
<span class="grey rocketbot">Rocketbot</span>
<router-link class="nav-link mr-20" to="/" exact>
<svg class="icon sm vm">
<use xlink:href="#chart"></use>
</svg>
<span class="vm hide-xs ml-5">{{this.$t('dashboard')}}</span>
</router-link>
<router-link class="nav-link mr-20" to="/topology">
<svg class="icon sm vm">
<use xlink:href="#issues"></use>
</svg>
<span class="vm hide-xs ml-5">{{this.$t('topology')}}</span>
</router-link>
<router-link class="nav-link mr-20" to="/trace">
<svg class="icon sm vm">
<use xlink:href="#merge"></use>
</svg>
<span class="vm hide-xs ml-5">{{this.$t('trace')}}</span>
</router-link>
<router-link class="nav-link mr-20" to="/alarm">
<svg class="icon sm vm">
<use xlink:href="#spam"></use>
</svg>
<span class="vm hide-xs ml-5">{{this.$t('alarm')}}</span>
</router-link>
</div>
<div class="flex-h">
<a class="rk-btn mr-5 sm" :class="auto?'blue':'ghost'" @click="handleAuto">
<span class="vm">{{this.$t('auto')}}</span>
</a>
<a class="rk-btn sm ghost" @click="handleReload">
<svg class="icon mr-5 vm" :class="{'loading': auto}">
<use xlink:href="#retry"></use>
</svg>
<span class="vm">{{this.$t('reload')}}</span>
</a>
</div>
</header>
</template>
<script lang="ts">
import { Vue, Component } from 'vue-property-decorator';
import { Action, State, Getter } from 'vuex-class';
import timeFormat from '@/utils/timeFormat';
@Component
export default class Header extends Vue {
@Getter('duration') private duration: any;
@Action('SET_DURATION') private SET_DURATION: any;
private show: boolean = false;
private auto: boolean = false;
private timer: any = null;
private handleReload() {
const gap = this.duration.end.getTime() - this.duration.start.getTime();
const utcCopy: any = -(new Date().getTimezoneOffset() / 60);
const time: Date[] = [new Date(new Date().getTime() - gap), new Date()];
this.SET_DURATION(timeFormat(time));
}
private handleAuto() {
this.auto = !this.auto;
if (this.auto) {
this.handleReload();
this.timer = setInterval(this.handleReload, 6000);
} else {
clearInterval(this.timer);
}
}
private handleHide() {
this.show = false;
}
private handleShow() {
this.show = !this.show;
}
private handleSignout() {
localStorage.removeItem('skywalking-authority');
this.$router.push('/login');
}
}
</script>
<style lang="scss" scoped>
.rk-header {
flex-shrink: 0;
justify-content: space-between;
height: 48px;
padding-right: 15px;
padding-left: 15px;
font-size: 13px;
color: #efefef;
z-index: 9;
background-color: #252a2f;
box-shadow: 0 1px 2px 0 rgba(26, 24, 29, 0.24);
.svg-logo {
width: 90px;
height: 22px;
}
.rocketbot{
padding-top: 27px;
position: absolute;
font-size: 11px;
}
.logo {
font-family: "Avenir", Helvetica, Arial, sans-serif;
font-size: 18px;
padding-top: 2px;
margin-right: 50px;
}
.nav-link {
padding: 4px 10px;
border-radius: 4px;
opacity: 0.8;
color: #efeff1;
will-change: opacity, background-color;
transition: opacity 0.3s, background-color 0.3s;
}
.nav-link:hover,
.nav-link.active {
opacity: 1;
background-color: #333844;
}
}
.rk-header-user{
display: none;
position: relative;
}
.rk-header-user-menu{
position: absolute;
top: 35px;
right: 0;
background-color: #fff;
overflow: hidden;
border-radius: 4px;
padding: 3px 0;
color: #333844;
width: 100px;
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1), 0 0 1px rgba(0,0,0,0.15);
}
.rk-header-user-menu-i{
padding: 6px 10px;
will-change: background-color;
transition: background-color .3s;
&:hover{
background-color:#dededf;
}
}
</style>