avatar.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // 头像工具函数
  2. import { API_BASE_URL } from "@/lib/config";
  3. /**
  4. * 获取完整的头像 URL
  5. * 如果 avatarUrl 已经是完整 URL(以 http:// 或 https:// 开头),直接返回
  6. * 否则拼接 API_BASE_URL
  7. */
  8. export function getAvatarUrl(avatarUrl: string | null | undefined): string | null {
  9. if (!avatarUrl) {
  10. return null;
  11. }
  12. // 如果已经是完整 URL,直接返回
  13. if (avatarUrl.startsWith("http://") || avatarUrl.startsWith("https://")) {
  14. return avatarUrl;
  15. }
  16. // 如果是相对路径,拼接 API_BASE_URL
  17. // 确保路径以 / 开头
  18. const path = avatarUrl.startsWith("/") ? avatarUrl : `/${avatarUrl}`;
  19. // 形态2(同域 /api)下,后端返回的头像通常是 /uploads/... 这类相对路径
  20. // 保持拼接行为不变:API_BASE_URL 为空则走同域
  21. return `${API_BASE_URL}${path}`;
  22. }
  23. /**
  24. * 根据用户信息生成头像颜色
  25. */
  26. export function getAvatarColor(seed: string | number): string {
  27. const value = typeof seed === "string" ? seed.length : seed;
  28. return `hsl(${(value * 137.5) % 360}, 70%, 50%)`;
  29. }
  30. /**
  31. * 获取头像显示文本(首字母或用户名)
  32. */
  33. export function getAvatarInitial(username: string, nickname?: string): string {
  34. const displayName = nickname || username || "?";
  35. return displayName.charAt(0).toUpperCase();
  36. }