index.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <template>
  2. <div class="avue-top">
  3. <div class="top-bar__left">
  4. <div
  5. class="avue-breadcrumb"
  6. :class="[{ 'avue-breadcrumb--active': isCollapse }]"
  7. v-if="setting.collapse && !isHorizontal"
  8. >
  9. <i class="icon-navicon" @click="setCollapse"></i>
  10. </div>
  11. </div>
  12. <div class="top-bar__title">
  13. <top-menu ref="topMenu" v-if="setting.menu"></top-menu>
  14. <top-search class="top-bar__item" v-if="setting.search"></top-search>
  15. </div>
  16. <div class="top-bar__right">
  17. <div v-if="setting.lock" class="top-bar__item">
  18. <top-lock></top-lock>
  19. </div>
  20. <div v-if="setting.theme" class="top-bar__item">
  21. <top-theme></top-theme>
  22. </div>
  23. <!-- <div class="top-bar__item">
  24. <top-lang></top-lang>
  25. </div> -->
  26. <div class="top-bar__item" v-if="setting.fullscren">
  27. <top-full></top-full>
  28. </div>
  29. <div class="top-bar__item" v-if="setting.debug">
  30. <top-logs></top-logs>
  31. </div>
  32. <div class="top-user">
  33. <img class="top-bar__img" :src="userInfo.avatar" />
  34. <el-dropdown>
  35. <span class="el-dropdown-link">
  36. {{ userInfo.userName }}
  37. <el-icon class="el-icon--right">
  38. <arrow-down />
  39. </el-icon>
  40. </span>
  41. <template #dropdown>
  42. <el-dropdown-menu>
  43. <el-dropdown-item>
  44. <router-link to="/">{{ $t('navbar.dashboard') }}</router-link>
  45. </el-dropdown-item>
  46. <el-dropdown-item>
  47. <router-link to="/info/index">{{ $t('navbar.userinfo') }}</router-link>
  48. </el-dropdown-item>
  49. <el-dropdown-item @click="logout" divided
  50. >{{ $t('navbar.logOut') }}
  51. </el-dropdown-item>
  52. </el-dropdown-menu>
  53. </template>
  54. </el-dropdown>
  55. <top-setting></top-setting>
  56. </div>
  57. </div>
  58. </div>
  59. </template>
  60. <script>
  61. import { mapGetters } from 'vuex';
  62. import topLock from './top-lock.vue';
  63. import topMenu from './top-menu.vue';
  64. import topSearch from './top-search.vue';
  65. import topTheme from './top-theme.vue';
  66. import topLogs from './top-logs.vue';
  67. import topLang from './top-lang.vue';
  68. import topFull from './top-full.vue';
  69. import topSetting from '../setting.vue';
  70. export default {
  71. components: {
  72. topLock,
  73. topMenu,
  74. topSearch,
  75. topTheme,
  76. topLogs,
  77. topLang,
  78. topFull,
  79. topSetting,
  80. },
  81. name: 'top',
  82. data() {
  83. return {};
  84. },
  85. filters: {},
  86. created() {},
  87. computed: {
  88. ...mapGetters([
  89. 'setting',
  90. 'userInfo',
  91. 'tagWel',
  92. 'tagList',
  93. 'isCollapse',
  94. 'tag',
  95. 'logsLen',
  96. 'logsFlag',
  97. 'isHorizontal',
  98. ]),
  99. },
  100. methods: {
  101. setCollapse() {
  102. this.$store.commit('SET_COLLAPSE');
  103. },
  104. logout() {
  105. this.$confirm(this.$t('logoutTip'), this.$t('tip'), {
  106. confirmButtonText: this.$t('submitText'),
  107. cancelButtonText: this.$t('cancelText'),
  108. type: 'warning',
  109. }).then(() => {
  110. this.$store.dispatch('LogOut').then(() => {
  111. this.$router.push({ path: '/login' });
  112. });
  113. });
  114. },
  115. },
  116. };
  117. </script>
  118. <style lang="scss" scoped></style>