avatar.js 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. import { BASE_URL } from '@/config/api'
  2. import { DEFAULT_PLACEHOLDER_IMAGE_URL } from '@/utils/staticAsset'
  3. import { withOssVersion } from '@/utils/ossCache'
  4. /** 未设置头像时统一使用叁强 logo(远程静态 images/logo.png) */
  5. export const DEFAULT_USER_AVATAR_URL = DEFAULT_PLACEHOLDER_IMAGE_URL
  6. /** 各角色默认已统一为 logo,保留参数仅为兼容旧调用 */
  7. export function defaultAvatarPathByRole(_role) {
  8. return DEFAULT_USER_AVATAR_URL
  9. }
  10. /**
  11. * 将后端返回的头像地址转为小程序 `<image>` 可加载的绝对 URL。
  12. * - 已是 http(s):// 或 // 则原样返回
  13. * - 以 / 开头的站内路径(如 /uploads/...)拼接到 API 域名根(与静态资源同源)
  14. */
  15. export function normalizeAvatarUrlForMini(avatarUrl) {
  16. const u = String(avatarUrl || '').trim()
  17. if (!u) return ''
  18. if (/^https?:\/\//i.test(u) || u.startsWith('//')) return withOssVersion(u)
  19. const origin = BASE_URL.replace(/\/$/, '')
  20. const path = u.startsWith('/') ? u : `/${u}`
  21. return withOssVersion(`${origin}${path}`)
  22. }
  23. /** 展示用头像:有自定义 URL 则转为可访问地址,否则用叁强 logo(本地路径) */
  24. export function resolveUserAvatarUrl(avatarUrl, role) {
  25. const raw = avatarUrl != null ? String(avatarUrl).trim() : ''
  26. if (raw) return normalizeAvatarUrlForMini(raw)
  27. return defaultAvatarPathByRole(role)
  28. }