Blame view

src/layout/components/Navbar.vue 4.23 KB
yuanshuhui authored
1
2
<template>
  <div class="navbar">
3
4
5
6
7
8
    <hamburger
      id="hamburger-container"
      :is-active="sidebar.opened"
      class="hamburger-container"
      @toggleClick="toggleSideBar"
    />
yuanshuhui authored
9
10
11
12

    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />

    <div class="right-menu">
13
      <template v-if="device !== 'mobile'">
yuanshuhui authored
14
15
16
17
18
19
20
21
22
23
24
25
        <search id="header-search" class="right-menu-item" />
        <el-tooltip content="文档地址" effect="dark" placement="bottom">
          <hua-heng-doc id="huaheng-doc" class="right-menu-item hover-effect" />
        </el-tooltip>

        <screenfull id="screenfull" class="right-menu-item hover-effect" />

        <el-tooltip content="布局大小" effect="dark" placement="bottom">
          <size-select id="size-select" class="right-menu-item hover-effect" />
        </el-tooltip>
      </template>
26
27
28
29
      <el-dropdown
        class="avatar-container right-menu-item hover-effect"
        trigger="click"
      >
yuanshuhui authored
30
        <div class="avatar-wrapper">
31
          <img :src="avatar" class="user-avatar" />
yuanshuhui authored
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
          <i class="el-icon-caret-bottom" />
        </div>
        <el-dropdown-menu slot="dropdown">
          <router-link to="/user/profile">
            <el-dropdown-item>个人中心</el-dropdown-item>
          </router-link>
          <el-dropdown-item @click.native="setting = true">
            <span>布局设置</span>
          </el-dropdown-item>
          <el-dropdown-item divided @click.native="logout">
            <span>退出登录</span>
          </el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
    </div>
  </div>
</template>

<script>
51
52
53
54
55
56
57
import { mapGetters } from "vuex";
import Breadcrumb from "@/components/Breadcrumb";
import Hamburger from "@/components/Hamburger";
import Screenfull from "@/components/Screenfull";
import SizeSelect from "@/components/SizeSelect";
import Search from "@/components/HeaderSearch";
import HuaHengDoc from "@/components/HuaHeng/Doc";
yuanshuhui authored
58
59
60
61
62
63
64
65

export default {
  components: {
    Breadcrumb,
    Hamburger,
    Screenfull,
    SizeSelect,
    Search,
66
    HuaHengDoc,
yuanshuhui authored
67
  },
yuanshuhui authored
68
yuanshuhui authored
69
  computed: {
70
    ...mapGetters(["sidebar", "avatar", "device"]),
yuanshuhui authored
71
72
    setting: {
      get() {
73
        return this.$store.state.settings.showSettings;
yuanshuhui authored
74
75
      },
      set(val) {
76
77
78
79
80
81
        this.$store.dispatch("settings/changeSetting", {
          key: "showSettings",
          value: val,
        });
      },
    },
yuanshuhui authored
82
  },
yuanshuhui authored
83
yuanshuhui authored
84
85
  methods: {
    toggleSideBar() {
86
      this.$store.dispatch("app/toggleSideBar");
yuanshuhui authored
87
88
    },
    async logout() {
89
90
91
92
      this.$confirm("确定注销并退出系统吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
yuanshuhui authored
93
      }).then(() => {
94
95
96
97
98
99
100
        this.$store.dispatch("LogOut").then(() => {
          location.href = "/index";
        });
      });
    },
  },
};
yuanshuhui authored
101
102
103
104
105
106
107
108
</script>

<style lang="scss" scoped>
.navbar {
  height: 50px;
  overflow: hidden;
  position: relative;
  background: #fff;
109
  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
yuanshuhui authored
110
111
112
113
114
115

  .hamburger-container {
    line-height: 46px;
    height: 100%;
    float: left;
    cursor: pointer;
116
117
    transition: background 0.3s;
    -webkit-tap-highlight-color: transparent;
yuanshuhui authored
118
119

    &:hover {
120
      background: rgba(0, 0, 0, 0.025);
yuanshuhui authored
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
    }
  }

  .breadcrumb-container {
    float: left;
  }

  .errLog-container {
    display: inline-block;
    vertical-align: top;
  }

  .right-menu {
    float: right;
    height: 100%;
    line-height: 50px;

    &:focus {
      outline: none;
    }

    .right-menu-item {
      display: inline-block;
      padding: 0 8px;
      height: 100%;
      font-size: 18px;
      color: #5a5e66;
      vertical-align: text-bottom;

      &.hover-effect {
        cursor: pointer;
152
        transition: background 0.3s;
yuanshuhui authored
153
154

        &:hover {
155
          background: rgba(0, 0, 0, 0.025);
yuanshuhui authored
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
        }
      }
    }

    .avatar-container {
      margin-right: 30px;

      .avatar-wrapper {
        margin-top: 5px;
        position: relative;

        .user-avatar {
          cursor: pointer;
          width: 40px;
          height: 40px;
          border-radius: 10px;
        }

        .el-icon-caret-bottom {
          cursor: pointer;
          position: absolute;
          right: -20px;
          top: 25px;
          font-size: 12px;
        }
      }
    }
  }
}
</style>