中国算力平台算力登记系统2.0
yanzhaofeige
2024-09-30 3c4fee1db116c11d4f04727cfe076d7c94daeaf2
commit | author | age
43dc29 1 <template>
Y 2   <div class="navbar">
3     <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
4
5     <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
6     <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
7
8     <div class="right-menu">
9       <template v-if="device!=='mobile'">
10         <search id="header-search" class="right-menu-item" />
11
12         <el-tooltip content="源码地址" effect="dark" placement="bottom">
13           <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
14         </el-tooltip>
15
16         <el-tooltip content="文档地址" effect="dark" placement="bottom">
17           <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
18         </el-tooltip>
19
20         <screenfull id="screenfull" class="right-menu-item hover-effect" />
21
22         <el-tooltip content="布局大小" effect="dark" placement="bottom">
23           <size-select id="size-select" class="right-menu-item hover-effect" />
24         </el-tooltip>
25
26       </template>
27
28       <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
29         <div class="avatar-wrapper">
30           <img :src="avatar" class="user-avatar">
31           <i class="el-icon-caret-bottom" />
32         </div>
33         <el-dropdown-menu slot="dropdown">
34           <router-link to="/user/profile">
35             <el-dropdown-item>个人中心</el-dropdown-item>
36           </router-link>
37           <el-dropdown-item @click.native="setting = true">
38             <span>布局设置</span>
39           </el-dropdown-item>
40           <el-dropdown-item divided @click.native="logout">
41             <span>退出登录</span>
42           </el-dropdown-item>
43         </el-dropdown-menu>
44       </el-dropdown>
45     </div>
46   </div>
47 </template>
48
49 <script>
50 import { mapGetters } from 'vuex'
51 import Breadcrumb from '@/components/Breadcrumb'
52 import TopNav from '@/components/TopNav'
53 import Hamburger from '@/components/Hamburger'
54 import Screenfull from '@/components/Screenfull'
55 import SizeSelect from '@/components/SizeSelect'
56 import Search from '@/components/HeaderSearch'
57 import RuoYiGit from '@/components/RuoYi/Git'
58 import RuoYiDoc from '@/components/RuoYi/Doc'
59
60 export default {
61   components: {
62     Breadcrumb,
63     TopNav,
64     Hamburger,
65     Screenfull,
66     SizeSelect,
67     Search,
68     RuoYiGit,
69     RuoYiDoc
70   },
71   computed: {
72     ...mapGetters([
73       'sidebar',
74       'avatar',
75       'device'
76     ]),
77     setting: {
78       get() {
79         return this.$store.state.settings.showSettings
80       },
81       set(val) {
82         this.$store.dispatch('settings/changeSetting', {
83           key: 'showSettings',
84           value: val
85         })
86       }
87     },
88     topNav: {
89       get() {
90         return this.$store.state.settings.topNav
91       }
92     }
93   },
94   methods: {
95     toggleSideBar() {
96       this.$store.dispatch('app/toggleSideBar')
97     },
98     async logout() {
99       this.$confirm('确定注销并退出系统吗?', '提示', {
100         confirmButtonText: '确定',
101         cancelButtonText: '取消',
102         type: 'warning'
103       }).then(() => {
104         this.$store.dispatch('LogOut').then(() => {
105           location.href = '/index';
106         })
107       }).catch(() => {});
108     }
109   }
110 }
111 </script>
112
113 <style lang="scss" scoped>
114 .navbar {
115   height: 50px;
116   overflow: hidden;
117   position: relative;
118   background: #fff;
119   box-shadow: 0 1px 4px rgba(0,21,41,.08);
120
121   .hamburger-container {
122     line-height: 46px;
123     height: 100%;
124     float: left;
125     cursor: pointer;
126     transition: background .3s;
127     -webkit-tap-highlight-color:transparent;
128
129     &:hover {
130       background: rgba(0, 0, 0, .025)
131     }
132   }
133
134   .breadcrumb-container {
135     float: left;
136   }
137
138   .topmenu-container {
139     position: absolute;
140     left: 50px;
141   }
142
143   .errLog-container {
144     display: inline-block;
145     vertical-align: top;
146   }
147
148   .right-menu {
149     float: right;
150     height: 100%;
151     line-height: 50px;
152
153     &:focus {
154       outline: none;
155     }
156
157     .right-menu-item {
158       display: inline-block;
159       padding: 0 8px;
160       height: 100%;
161       font-size: 18px;
162       color: #5a5e66;
163       vertical-align: text-bottom;
164
165       &.hover-effect {
166         cursor: pointer;
167         transition: background .3s;
168
169         &:hover {
170           background: rgba(0, 0, 0, .025)
171         }
172       }
173     }
174
175     .avatar-container {
176       margin-right: 30px;
177
178       .avatar-wrapper {
179         margin-top: 5px;
180         position: relative;
181
182         .user-avatar {
183           cursor: pointer;
184           width: 40px;
185           height: 40px;
186           border-radius: 10px;
187         }
188
189         .el-icon-caret-bottom {
190           cursor: pointer;
191           position: absolute;
192           right: -20px;
193           top: 25px;
194           font-size: 12px;
195         }
196       }
197     }
198   }
199 }
200 </style>