'use client';
import { useState } from 'react';
import { cn, resolveUploadUrl } from '@/lib/utils';
interface AvatarProps {
src?: string | null;
name?: string | null;
size?: number;
className?: string;
}
/**
* 头像组件:有 src 显示图片(onError 兜底),否则显示首字符圆形。
*/
export function Avatar({ src, name, size = 32, className }: AvatarProps) {
const [imgError, setImgError] = useState(false);
const showImg = Boolean(src) && !imgError;
const initial = (name?.trim()?.charAt(0) ?? '?').toUpperCase();
const fontSize = Math.max(12, Math.round(size * 0.45));
if (showImg) {
return (
// eslint-disable-next-line @next/next/no-img-element
setImgError(true)}
style={{ width: size, height: size }}
className={cn('rounded-full object-cover', className)}
/>
);
}
return (