展示更多豆瓣详情信息
This commit is contained in:
+58
-5
@@ -339,6 +339,10 @@ function PlayPageClient() {
|
|||||||
count: number;
|
count: number;
|
||||||
star_count: number;
|
star_count: number;
|
||||||
} | null>(null);
|
} | null>(null);
|
||||||
|
// 豆瓣额外信息
|
||||||
|
const [doubanCardSubtitle, setDoubanCardSubtitle] = useState<string>('');
|
||||||
|
const [doubanAka, setDoubanAka] = useState<string[]>([]);
|
||||||
|
const [doubanYear, setDoubanYear] = useState<string>(''); // 从 pubdate 提取的年份
|
||||||
// 当前源和ID
|
// 当前源和ID
|
||||||
const [currentSource, setCurrentSource] = useState(
|
const [currentSource, setCurrentSource] = useState(
|
||||||
searchParams.get('source') || ''
|
searchParams.get('source') || ''
|
||||||
@@ -443,11 +447,16 @@ function PlayPageClient() {
|
|||||||
const fetchDoubanRating = async () => {
|
const fetchDoubanRating = async () => {
|
||||||
if (!videoDoubanId || videoDoubanId === 0) {
|
if (!videoDoubanId || videoDoubanId === 0) {
|
||||||
setDoubanRating(null);
|
setDoubanRating(null);
|
||||||
|
setDoubanCardSubtitle('');
|
||||||
|
setDoubanAka([]);
|
||||||
|
setDoubanYear('');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const doubanData = await getDoubanDetail(videoDoubanId.toString());
|
const doubanData = await getDoubanDetail(videoDoubanId.toString());
|
||||||
|
|
||||||
|
// 设置评分
|
||||||
if (doubanData.rating) {
|
if (doubanData.rating) {
|
||||||
setDoubanRating({
|
setDoubanRating({
|
||||||
value: doubanData.rating.value,
|
value: doubanData.rating.value,
|
||||||
@@ -457,9 +466,32 @@ function PlayPageClient() {
|
|||||||
} else {
|
} else {
|
||||||
setDoubanRating(null);
|
setDoubanRating(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 设置 card_subtitle
|
||||||
|
if (doubanData.card_subtitle) {
|
||||||
|
setDoubanCardSubtitle(doubanData.card_subtitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置 aka(别名)
|
||||||
|
if (doubanData.aka && doubanData.aka.length > 0) {
|
||||||
|
setDoubanAka(doubanData.aka);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理 pubdate 获取年份
|
||||||
|
if (doubanData.pubdate && doubanData.pubdate.length > 0) {
|
||||||
|
const pubdateStr = doubanData.pubdate[0];
|
||||||
|
// 删除括号中的内容,包括括号
|
||||||
|
const yearMatch = pubdateStr.replace(/\([^)]*\)/g, '').trim();
|
||||||
|
if (yearMatch) {
|
||||||
|
setDoubanYear(yearMatch);
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取豆瓣评分失败:', error);
|
console.error('获取豆瓣评分失败:', error);
|
||||||
setDoubanRating(null);
|
setDoubanRating(null);
|
||||||
|
setDoubanCardSubtitle('');
|
||||||
|
setDoubanAka([]);
|
||||||
|
setDoubanYear('');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -4077,7 +4109,21 @@ function PlayPageClient() {
|
|||||||
<div className='p-6 flex flex-col min-h-0'>
|
<div className='p-6 flex flex-col min-h-0'>
|
||||||
{/* 标题 */}
|
{/* 标题 */}
|
||||||
<h1 className='text-3xl font-bold mb-2 tracking-wide flex items-center flex-shrink-0 text-center md:text-left w-full flex-wrap gap-2'>
|
<h1 className='text-3xl font-bold mb-2 tracking-wide flex items-center flex-shrink-0 text-center md:text-left w-full flex-wrap gap-2'>
|
||||||
<span>{videoTitle || '影片标题'}</span>
|
<span className={doubanAka.length > 0 ? 'relative group cursor-help' : ''}>
|
||||||
|
{videoTitle || '影片标题'}
|
||||||
|
{/* aka 悬浮提示 */}
|
||||||
|
{doubanAka.length > 0 && (
|
||||||
|
<div className='absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-3 py-2 bg-gray-800 dark:bg-gray-900 text-white text-sm rounded-lg shadow-xl opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 ease-out whitespace-nowrap z-[100] pointer-events-none'>
|
||||||
|
<div className='font-semibold text-xs text-gray-400 mb-1'>又名:</div>
|
||||||
|
{doubanAka.map((name, index) => (
|
||||||
|
<div key={index} className='text-sm'>
|
||||||
|
{name}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
<div className='absolute top-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-gray-800 dark:border-t-gray-900'></div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
<button
|
<button
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@@ -4162,8 +4208,9 @@ function PlayPageClient() {
|
|||||||
{detail.class}
|
{detail.class}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{(detail?.year || videoYear) && (
|
{/* 优先使用 doubanYear,如果没有则使用 detail.year 或 videoYear */}
|
||||||
<span>{detail?.year || videoYear}</span>
|
{(doubanYear || detail?.year || videoYear) && (
|
||||||
|
<span>{doubanYear || detail?.year || videoYear}</span>
|
||||||
)}
|
)}
|
||||||
{detail?.source_name && (
|
{detail?.source_name && (
|
||||||
<span className='border border-gray-500/60 px-2 py-[1px] rounded'>
|
<span className='border border-gray-500/60 px-2 py-[1px] rounded'>
|
||||||
@@ -4173,12 +4220,18 @@ function PlayPageClient() {
|
|||||||
{detail?.type_name && <span>{detail.type_name}</span>}
|
{detail?.type_name && <span>{detail.type_name}</span>}
|
||||||
</div>
|
</div>
|
||||||
{/* 剧情简介 */}
|
{/* 剧情简介 */}
|
||||||
{detail?.desc && (
|
{(doubanCardSubtitle || detail?.desc) && (
|
||||||
<div
|
<div
|
||||||
className='mt-0 text-base leading-relaxed opacity-90 overflow-y-auto pr-2 flex-1 min-h-0 scrollbar-hide'
|
className='mt-0 text-base leading-relaxed opacity-90 overflow-y-auto pr-2 flex-1 min-h-0 scrollbar-hide'
|
||||||
style={{ whiteSpace: 'pre-line' }}
|
style={{ whiteSpace: 'pre-line' }}
|
||||||
>
|
>
|
||||||
{detail.desc}
|
{/* card_subtitle 在前,desc 在后 */}
|
||||||
|
{doubanCardSubtitle && (
|
||||||
|
<div className='mb-3 pb-3 border-b border-gray-300 dark:border-gray-700'>
|
||||||
|
{doubanCardSubtitle}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{detail?.desc}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user