ProfileUser.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <div>
  3. <div class="text-center">
  4. <UserAvatar :img="userInfo?.avatar" />
  5. </div>
  6. <ul class="list-group list-group-striped">
  7. <li class="list-group-item">
  8. <Icon class="mr-5px" icon="ep:user" />
  9. {{ t('profile.user.username') }}
  10. <div class="pull-right">{{ userInfo?.username }}</div>
  11. </li>
  12. <li class="list-group-item">
  13. <Icon class="mr-5px" icon="ep:phone" />
  14. {{ t('profile.user.mobile') }}
  15. <div class="pull-right">{{ userInfo?.mobile }}</div>
  16. </li>
  17. <li class="list-group-item">
  18. <Icon class="mr-5px" icon="fontisto:email" />
  19. {{ t('profile.user.email') }}
  20. <div class="pull-right">{{ userInfo?.email }}</div>
  21. </li>
  22. <li class="list-group-item">
  23. <Icon class="mr-5px" icon="carbon:tree-view-alt" />
  24. {{ t('profile.user.dept') }}
  25. <div v-if="userInfo?.dept" class="pull-right">{{ userInfo?.dept.name }}</div>
  26. </li>
  27. <li class="list-group-item">
  28. <Icon class="mr-5px" icon="ep:suitcase" />
  29. {{ t('profile.user.posts') }}
  30. <div v-if="userInfo?.posts" class="pull-right">
  31. {{ userInfo?.posts.map((post) => post.name).join(',') }}
  32. </div>
  33. </li>
  34. <li class="list-group-item">
  35. <Icon class="mr-5px" icon="icon-park-outline:peoples" />
  36. {{ t('profile.user.roles') }}
  37. <div v-if="userInfo?.roles" class="pull-right">
  38. {{ userInfo?.roles.map((role) => role.name).join(',') }}
  39. </div>
  40. </li>
  41. <li class="list-group-item">
  42. <Icon class="mr-5px" icon="ep:calendar" />
  43. {{ t('profile.user.createTime') }}
  44. <div class="pull-right">{{ formatDate(userInfo.createTime) }}</div>
  45. </li>
  46. </ul>
  47. </div>
  48. </template>
  49. <script lang="ts" setup>
  50. import { formatDate } from '@/utils/formatTime'
  51. import UserAvatar from './UserAvatar.vue'
  52. import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
  53. defineOptions({ name: 'ProfileUser' })
  54. const { t } = useI18n()
  55. const userInfo = ref({} as ProfileVO)
  56. const getUserInfo = async () => {
  57. const users = await getUserProfile()
  58. userInfo.value = users
  59. }
  60. // 暴露刷新方法
  61. defineExpose({
  62. refresh: getUserInfo
  63. })
  64. onMounted(async () => {
  65. await getUserInfo()
  66. })
  67. </script>
  68. <style scoped>
  69. .text-center {
  70. position: relative;
  71. height: 120px;
  72. text-align: center;
  73. }
  74. .list-group-striped > .list-group-item {
  75. padding-right: 0;
  76. padding-left: 0;
  77. border-right: 0;
  78. border-left: 0;
  79. border-radius: 0;
  80. }
  81. .list-group {
  82. padding-left: 0;
  83. list-style: none;
  84. }
  85. .list-group-item {
  86. padding: 11px 0;
  87. margin-bottom: -1px;
  88. font-size: 13px;
  89. border-top: 1px solid #e7eaec;
  90. border-bottom: 1px solid #e7eaec;
  91. }
  92. .pull-right {
  93. float: right !important;
  94. }
  95. </style>