Navbar.vue 4.3 KB

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