UserInfo.vue 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template>
  2. <el-dropdown trigger="click">
  3. <div class="user-info">
  4. <img :src="UserAvatar" class="user-avatar" />
  5. <el-tooltip
  6. class="box-item"
  7. effect="light"
  8. :content="userStore.info?.realname"
  9. placement="top"
  10. :disabled="userStore.info?.realname.length < 10"
  11. >
  12. <span class="user-name">{{ userStore.info?.realname }}</span>
  13. </el-tooltip>
  14. <img :src="ArrowIcon" class="dropdown-icon" />
  15. </div>
  16. <template #dropdown>
  17. <el-dropdown-menu>
  18. <el-dropdown-item @click="switchAccount">切换账号</el-dropdown-item>
  19. <el-dropdown-item @click="showUpdatePwd">修改密码</el-dropdown-item>
  20. <el-dropdown-item @click="handleLogout">退出登录</el-dropdown-item>
  21. </el-dropdown-menu>
  22. </template>
  23. </el-dropdown>
  24. </template>
  25. <script lang="ts" setup>
  26. import UserAvatar from 'assets/images/user-avatar@1X.png';
  27. import ArrowIcon from 'assets/svg/arrow.svg';
  28. import { useUserStore } from '@/store/modules/user';
  29. import router from '@/router';
  30. const userStore = useUserStore();
  31. const handleLogout = async () => {
  32. userStore.logout();
  33. await router.push({ path: '/home' });
  34. window.location.reload();
  35. };
  36. const switchAccount = () => {
  37. userStore.showSwitchAccount = true;
  38. };
  39. const showUpdatePwd = () => {
  40. userStore.showUpdatePwd = true;
  41. };
  42. </script>
  43. <style lang="scss" scoped>
  44. .user-info {
  45. @include flex-center;
  46. gap: 4cpx;
  47. }
  48. .user-avatar {
  49. width: 30cpx;
  50. height: 30cpx;
  51. }
  52. .user-name {
  53. font-weight: 400;
  54. font-size: 14cpx;
  55. color: $text-color;
  56. max-width: 180px;
  57. white-space: nowrap; /* 防止文本换行 */
  58. overflow: hidden; /* 隐藏溢出的文本 */
  59. text-overflow: ellipsis; /* 显示省略号 */
  60. }
  61. .dropdown-icon {
  62. width: 25px;
  63. height: 25px;
  64. }
  65. :deep(.el-dropdown-menu__item) {
  66. padding: 4px 37px;
  67. font-weight: 400;
  68. font-size: 14px;
  69. color: #606266;
  70. &:hover {
  71. background-color: $primary-color;
  72. color: $white-color;
  73. border-radius: 4px;
  74. }
  75. }
  76. </style>