Navbar.vue 5.0 KB

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