UserInfo.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <el-dropdown trigger="click">
  3. <div class="user-info">
  4. <img :src="UserAvatar" class="user-avatar" />
  5. <span class="user-name">{{ userStore.info?.realname }}</span>
  6. <img :src="ArrowIcon" class="dropdown-icon" />
  7. </div>
  8. <template #dropdown>
  9. <el-dropdown-menu>
  10. <el-dropdown-item @click="switchAccount">切换账号</el-dropdown-item>
  11. <el-dropdown-item @click="showUpdatePwd">修改密码</el-dropdown-item>
  12. <el-dropdown-item @click="handleLogout">退出登录</el-dropdown-item>
  13. </el-dropdown-menu>
  14. </template>
  15. </el-dropdown>
  16. </template>
  17. <script lang="ts" setup>
  18. import UserAvatar from 'assets/images/user-avatar@1X.png';
  19. import ArrowIcon from 'assets/svg/arrow.svg';
  20. import { useUserStore } from '@/store/modules/user';
  21. import router from '@/router';
  22. const userStore = useUserStore();
  23. const handleLogout = async () => {
  24. userStore.logout();
  25. await router.push({ path: '/home' });
  26. window.location.reload();
  27. };
  28. const switchAccount = () => {
  29. userStore.showSwitchAccount = true;
  30. };
  31. const showUpdatePwd = () => {
  32. userStore.showUpdatePwd = true;
  33. };
  34. </script>
  35. <style lang="scss" scoped>
  36. .user-info {
  37. @include flex-center;
  38. gap: 4cpx;
  39. }
  40. .user-avatar {
  41. width: 30cpx;
  42. height: 30cpx;
  43. }
  44. .user-name {
  45. font-weight: 400;
  46. font-size: 14cpx;
  47. color: $text-color;
  48. }
  49. .dropdown-icon {
  50. width: 25px;
  51. height: 25px;
  52. }
  53. :deep(.el-dropdown-menu__item) {
  54. padding: 4px 37px;
  55. font-weight: 400;
  56. font-size: 14px;
  57. color: #606266;
  58. &:hover {
  59. background-color: $primary-color;
  60. color: $white-color;
  61. border-radius: 4px;
  62. }
  63. }
  64. </style>