diff --git a/core/frontend/src/components/app-shell.tsx b/core/frontend/src/components/app-shell.tsx
index ff03231..6e5a8a1 100644
--- a/core/frontend/src/components/app-shell.tsx
+++ b/core/frontend/src/components/app-shell.tsx
@@ -167,7 +167,7 @@ function AccountMenu({ anchorRect, onClose, navigate, logout, user, team, canMan
style={{ left: pos.left, top: pos.top }}
>
-
{avatar}
+
{user.avatar_url ?
: avatar}
{team?.name || user.username}
{user.username}
@@ -374,7 +374,7 @@ export function Sidebar({ page, navigate, user, team, canManageBilling = true, p
onClick={toggleAccountMenu}
onKeyDown={(event) => { if (event.key === "Enter" || event.key === " ") { event.preventDefault(); toggleAccountMenu(event as unknown as ReactMouseEvent); } }}
>
- {avatar}
+ {user.avatar_url ?

: avatar}
{team?.name || user.username}
diff --git a/core/frontend/src/design-restraint.css b/core/frontend/src/design-restraint.css
index 3f0866d..fceb338 100644
--- a/core/frontend/src/design-restraint.css
+++ b/core/frontend/src/design-restraint.css
@@ -375,7 +375,9 @@ nav a.disabled:hover { background: transparent; color: var(--black-alpha-32); }
color: var(--accent-white);
display: flex; align-items: center; justify-content: center;
font-weight: 600; font-size: 12px;
+ overflow: hidden;
}
+.user .av img { width: 100%; height: 100%; object-fit: cover; display: block; }
.user .em { font-size: 13px; color: var(--accent-black); }
body.sidebar-collapsed aside.sidebar { padding: 22px 12px; }
@@ -1948,7 +1950,9 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
color: var(--accent-white);
font-size: 12px;
font-weight: 600;
+ overflow: hidden;
}
+.shell-account-head .av img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shell-account-head .nm {
display: block;
font-size: 13px;
diff --git a/core/frontend/src/routes/settings.tsx b/core/frontend/src/routes/settings.tsx
index 6660c0e..e86e89f 100644
--- a/core/frontend/src/routes/settings.tsx
+++ b/core/frontend/src/routes/settings.tsx
@@ -434,7 +434,7 @@ export function SettingsPage({
头像
-
{avatarChar}
+
{user.avatar_url ?

: avatarChar}
diff --git a/core/frontend/src/types.ts b/core/frontend/src/types.ts
index a15c71e..c0f5f99 100644
--- a/core/frontend/src/types.ts
+++ b/core/frontend/src/types.ts
@@ -4,6 +4,8 @@ export type User = {
email: string;
status: string;
is_platform_admin?: boolean;
+ // 头像直链(后端 UserSerializer.avatar_url):空则前端回退姓氏首字占位
+ avatar_url?: string;
};
export type Team = {