ProfileUser.vue 2.6 KB

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