import { useEffect, useState } from 'react' import { BookOpen } from 'lucide-react' import { isRenderableCover } from '../utils/coverUrl' // 阅读子系统统一封面图。 // // 书源返回的 cover_url 经常不是图片(空值、站点地址、data: 参数信封), // 直接塞进 会显示破图。这里统一处理:地址不是图片、或加载失败时, // 一律回退成占位图标。 export default function ReaderBookCover({ url, alt = '', iconSize = 18, className = 'h-full w-full object-cover', }: { url?: string | null alt?: string iconSize?: number className?: string }) { const [failed, setFailed] = useState(false) useEffect(() => { setFailed(false) }, [url]) if (!isRenderableCover(url) || failed) { return (
) } return ( {alt} setFailed(true)} /> ) }