index.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <!--
  2. * @FilePath: index.vue
  3. * @Author: 旭颖
  4. * @Date: 2022-10-31 14:56:49
  5. * @LastEditors: Please set LastEditors
  6. * @LastEditTime: 2023-03-16 11:51:51
  7. -->
  8. <script lang="ts" setup>
  9. import { useUserStore } from '@/store/modules/user'
  10. import { toLoginRoute } from '@/utils/routes'
  11. import { VabRoute } from '/#/router'
  12. const route: VabRoute = useRoute()
  13. const router = useRouter()
  14. const userStore = useUserStore()
  15. const { avatar, username } = storeToRefs(userStore)
  16. const { logout } = userStore
  17. const active = ref(false)
  18. const handleVisibleChange = (val: boolean) => {
  19. active.value = val
  20. }
  21. const handleCommand = async (command: string) => {
  22. switch (command) {
  23. case 'logout':
  24. await logout()
  25. localStorage.removeItem('dictsSetting')
  26. localStorage.removeItem('factory')
  27. localStorage.removeItem('factory_list')
  28. await router.push(toLoginRoute(route.fullPath))
  29. break
  30. case 'personalCenter':
  31. await router.push('/setting/personalCenter')
  32. break
  33. }
  34. }
  35. </script>
  36. <template>
  37. <el-dropdown @command="handleCommand" @visible-change="handleVisibleChange">
  38. <span class="avatar-dropdown">
  39. <!-- <el-avatar class="user-avatar" :src="avatar" /> -->
  40. <div class="user-name">
  41. <span class="hidden-xs-only" :title="username">{{ username }}</span>
  42. <vab-icon
  43. class="vab-dropdown"
  44. :class="{ 'vab-dropdown-active': active }"
  45. icon="arrow-down-s-line"
  46. />
  47. </div>
  48. </span>
  49. <template #dropdown>
  50. <el-dropdown-menu>
  51. <!-- <el-dropdown-item command="personalCenter">
  52. <vab-icon icon="user-line" />
  53. <span>{{ translate('个人中心') }}</span>
  54. </el-dropdown-item> -->
  55. <el-dropdown-item command="personalCenter">
  56. <vab-icon icon="user-line" />
  57. <span>修改密码</span>
  58. </el-dropdown-item>
  59. <el-dropdown-item command="logout">
  60. <vab-icon icon="logout-circle-r-line" />
  61. <span>退出登录</span>
  62. </el-dropdown-item>
  63. </el-dropdown-menu>
  64. </template>
  65. </el-dropdown>
  66. </template>
  67. <style lang="scss" scoped>
  68. .avatar-dropdown {
  69. display: flex;
  70. align-content: center;
  71. align-items: center;
  72. justify-content: center;
  73. justify-items: center;
  74. .user-avatar {
  75. flex-shrink: 0;
  76. width: 40px;
  77. height: 40px;
  78. margin-left: 15px;
  79. cursor: pointer;
  80. border-radius: 50%;
  81. }
  82. .user-name {
  83. position: relative;
  84. display: flex;
  85. flex-shrink: 0;
  86. align-content: center;
  87. align-items: center;
  88. height: 40px;
  89. margin-left: 6px;
  90. line-height: 40px;
  91. cursor: pointer;
  92. span {
  93. max-width: 100px;
  94. overflow: hidden;
  95. text-overflow: ellipsis;
  96. white-space: nowrap;
  97. }
  98. [class*='ri-'] {
  99. margin-left: 3px !important;
  100. }
  101. }
  102. }
  103. </style>