ProfileUser.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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" name="ProfileUser" setup>
  50. import { formatDate } from '@/utils/formatTime'
  51. import UserAvatar from './UserAvatar.vue'
  52. import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
  53. const { t } = useI18n()
  54. const userInfo = ref<ProfileVO>()
  55. const getUserInfo = async () => {
  56. const users = await getUserProfile()
  57. userInfo.value = users
  58. }
  59. onMounted(async () => {
  60. await getUserInfo()
  61. })
  62. </script>
  63. <style scoped>
  64. .text-center {
  65. text-align: center;
  66. position: relative;
  67. height: 120px;
  68. }
  69. .list-group-striped > .list-group-item {
  70. border-left: 0;
  71. border-right: 0;
  72. border-radius: 0;
  73. padding-left: 0;
  74. padding-right: 0;
  75. }
  76. .list-group {
  77. padding-left: 0px;
  78. list-style: none;
  79. }
  80. .list-group-item {
  81. border-bottom: 1px solid #e7eaec;
  82. border-top: 1px solid #e7eaec;
  83. margin-bottom: -1px;
  84. padding: 11px 0px;
  85. font-size: 13px;
  86. }
  87. .pull-right {
  88. float: right !important;
  89. }
  90. </style>