ProfileUser.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. onMounted(async () => {
  61. await getUserInfo()
  62. })
  63. </script>
  64. <style scoped>
  65. .text-center {
  66. position: relative;
  67. height: 120px;
  68. text-align: center;
  69. }
  70. .list-group-striped > .list-group-item {
  71. padding-right: 0;
  72. padding-left: 0;
  73. border-right: 0;
  74. border-left: 0;
  75. border-radius: 0;
  76. }
  77. .list-group {
  78. padding-left: 0;
  79. list-style: none;
  80. }
  81. .list-group-item {
  82. padding: 11px 0;
  83. margin-bottom: -1px;
  84. font-size: 13px;
  85. border-top: 1px solid #e7eaec;
  86. border-bottom: 1px solid #e7eaec;
  87. }
  88. .pull-right {
  89. float: right !important;
  90. }
  91. </style>