From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/Profile/components/ProfileUser.vue | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 118 insertions(+), 0 deletions(-)
diff --git a/src/views/Profile/components/ProfileUser.vue b/src/views/Profile/components/ProfileUser.vue
new file mode 100644
index 0000000..e226af0
--- /dev/null
+++ b/src/views/Profile/components/ProfileUser.vue
@@ -0,0 +1,118 @@
+<template>
+ <div>
+ <div class="text-center">
+ <UserAvatar :img="userInfo?.avatar" />
+ </div>
+ <ul class="list-group list-group-striped">
+ <li class="list-group-item">
+ <Icon class="mr-5px" icon="ep:user" />
+ {{ t('profile.user.username') }}
+ <div class="pull-right">{{ userInfo?.username }}</div>
+ </li>
+ <li class="list-group-item">
+ <Icon class="mr-5px" icon="ep:phone" />
+ {{ t('profile.user.mobile') }}
+ <div class="pull-right">{{ userInfo?.mobile }}</div>
+ </li>
+ <li class="list-group-item">
+ <Icon class="mr-5px" icon="fontisto:email" />
+ {{ t('profile.user.email') }}
+ <div class="pull-right">{{ userInfo?.email }}</div>
+ </li>
+ <li class="list-group-item">
+ <Icon class="mr-5px" icon="carbon:tree-view-alt" />
+ {{ t('profile.user.dept') }}
+ <div v-if="userInfo?.dept" class="pull-right">{{ userInfo?.dept.name }}</div>
+ </li>
+ <li class="list-group-item">
+ <Icon class="mr-5px" icon="ep:suitcase" />
+ {{ t('profile.user.posts') }}
+ <div v-if="userInfo?.posts" class="pull-right">
+ {{ userInfo?.posts.map((post) => post.name).join(',') }}
+ </div>
+ </li>
+ <li class="list-group-item">
+ <Icon class="mr-5px" icon="icon-park-outline:peoples" />
+ {{ t('profile.user.roles') }}
+ <div v-if="userInfo?.roles" class="pull-right">
+ {{ userInfo?.roles.map((role) => role.name).join(',') }}
+ </div>
+ </li>
+ <li class="list-group-item">
+ <Icon class="mr-5px" icon="ep:calendar" />
+ {{ t('profile.user.createTime') }}
+ <div class="pull-right">{{ formatDate(userInfo.createTime) }}</div>
+ </li>
+ </ul>
+ </div>
+</template>
+<script lang="ts" setup>
+import { formatDate } from '@/utils/formatTime'
+import UserAvatar from './UserAvatar.vue'
+import { useUserStore } from '@/store/modules/user'
+
+import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
+
+defineOptions({ name: 'ProfileUser' })
+
+const { t } = useI18n()
+const userStore = useUserStore()
+const userInfo = ref({} as ProfileVO)
+
+const getUserInfo = async () => {
+ const users = await getUserProfile()
+ userInfo.value = users
+}
+
+// 鐩戝惉 userStore 涓ご鍍忕殑鍙樺寲锛屽悓姝ユ洿鏂版湰鍦� userInfo
+watch(
+ () => userStore.getUser.avatar,
+ (newAvatar) => {
+ if (newAvatar && userInfo.value) {
+ userInfo.value.avatar = newAvatar
+ }
+ }
+)
+
+// 鏆撮湶鍒锋柊鏂规硶
+defineExpose({
+ refresh: getUserInfo
+})
+
+onMounted(async () => {
+ await getUserInfo()
+})
+</script>
+
+<style scoped>
+.text-center {
+ position: relative;
+ height: 120px;
+ text-align: center;
+}
+
+.list-group-striped > .list-group-item {
+ padding-right: 0;
+ padding-left: 0;
+ border-right: 0;
+ border-left: 0;
+ border-radius: 0;
+}
+
+.list-group {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-group-item {
+ padding: 11px 0;
+ margin-bottom: -1px;
+ font-size: 13px;
+ border-top: 1px solid #e7eaec;
+ border-bottom: 1px solid #e7eaec;
+}
+
+.pull-right {
+ float: right !important;
+}
+</style>
--
Gitblit v1.8.0