Navbar.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <div class="navbar">
  3. <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
  4. <breadcrumb class="breadcrumb-container" />
  5. <div class="right-menu">
  6. <div class="xl-form" style="padding-right: 20px;">
  7. <span class="scoped-op" @click="cashUpdate">更新缓存</span>
  8. <span class="scoped-user">{{sysUser.nickname}}</span>
  9. <el-button icon="el-icon-user" class="xl-form-btn t4 xs" @click="logout">退出</el-button>
  10. </div>
  11. <!-- <el-dropdown class="avatar-container" trigger="click">
  12. <div class="avatar-wrapper">
  13. <img :src="avatar+'?imageView2/1/w/80/h/80'" class="user-avatar">
  14. <i class="el-icon-caret-bottom" />
  15. </div>
  16. <el-dropdown-menu slot="dropdown" class="user-dropdown">
  17. <router-link to="/">
  18. <el-dropdown-item>
  19. Home
  20. </el-dropdown-item>
  21. </router-link>
  22. <a target="_blank" href="https://github.com/PanJiaChen/vue-admin-template/">
  23. <el-dropdown-item>Github</el-dropdown-item>
  24. </a>
  25. <a target="_blank" href="https://panjiachen.github.io/vue-element-admin-site/#/">
  26. <el-dropdown-item>Docs</el-dropdown-item>
  27. </a>
  28. <el-dropdown-item divided @click.native="logout">
  29. <span style="display:block;">退出</span>
  30. </el-dropdown-item>
  31. </el-dropdown-menu>
  32. </el-dropdown> -->
  33. </div>
  34. </div>
  35. </template>
  36. <script>
  37. import { mapGetters } from 'vuex'
  38. import Breadcrumb from '@/components/Breadcrumb'
  39. import Hamburger from '@/components/Hamburger'
  40. export default {
  41. components: {
  42. Breadcrumb,
  43. Hamburger
  44. },
  45. computed: {
  46. ...mapGetters([
  47. 'sidebar',
  48. 'avatar',
  49. 'sysUser',
  50. ])
  51. },
  52. methods: {
  53. cashUpdate () {
  54. this.$store.dispatch('user/getDict')
  55. window.setTimeout(() => {
  56. this.$router.go(0)
  57. }, 100)
  58. },
  59. toggleSideBar() {
  60. this.$store.dispatch('app/toggleSideBar')
  61. },
  62. async logout() {
  63. this.$msg('退出登录?', 'confirm', () => {
  64. window.sessionStorage.clear()
  65. window.localStorage.clear()
  66. this.$router.go(0)
  67. })
  68. // await this.$store.dispatch('user/logout')
  69. // this.$router.push(`/login?redirect=${this.$route.fullPath}`)
  70. }
  71. }
  72. }
  73. </script>
  74. <style lang="scss" scoped>
  75. .navbar {
  76. height: 50px;
  77. overflow: hidden;
  78. position: relative;
  79. background: #fff;
  80. box-shadow: 0 1px 4px rgba(0,21,41,.08);
  81. .hamburger-container {
  82. line-height: 46px;
  83. height: 100%;
  84. float: left;
  85. cursor: pointer;
  86. transition: background .3s;
  87. -webkit-tap-highlight-color:transparent;
  88. &:hover {
  89. background: rgba(0, 0, 0, .025)
  90. }
  91. }
  92. .breadcrumb-container {
  93. float: left;
  94. }
  95. .right-menu {
  96. float: right;
  97. height: 100%;
  98. line-height: 50px;
  99. &:focus {
  100. outline: none;
  101. }
  102. .right-menu-item {
  103. display: inline-block;
  104. padding: 0 8px;
  105. height: 100%;
  106. font-size: 18px;
  107. color: #5a5e66;
  108. vertical-align: text-bottom;
  109. &.hover-effect {
  110. cursor: pointer;
  111. transition: background .3s;
  112. &:hover {
  113. background: rgba(0, 0, 0, .025)
  114. }
  115. }
  116. }
  117. .avatar-container {
  118. margin-right: 30px;
  119. .avatar-wrapper {
  120. margin-top: 5px;
  121. position: relative;
  122. .user-avatar {
  123. cursor: pointer;
  124. width: 40px;
  125. height: 40px;
  126. border-radius: 10px;
  127. }
  128. .el-icon-caret-bottom {
  129. cursor: pointer;
  130. position: absolute;
  131. right: -20px;
  132. top: 25px;
  133. font-size: 12px;
  134. }
  135. }
  136. }
  137. }
  138. }
  139. .scoped-user {
  140. display: inline-block;
  141. vertical-align: middle;
  142. color: #666;
  143. padding-right: 10px;
  144. font-weight: bold;
  145. }
  146. .scoped-op {
  147. display: inline-block;
  148. vertical-align: middle;
  149. font-weight: bold;
  150. color: #ffc107;
  151. padding-right: 20px;
  152. font-size: 14px;
  153. text-decoration: underline;
  154. cursor: pointer;
  155. }
  156. </style>