修复detailpanel切换tmdb时,没有更新季度信息

This commit is contained in:
mtvpls
2026-05-25 21:09:21 +08:00
parent bf07030514
commit 33fac890bf
+32 -13
View File
@@ -59,6 +59,7 @@ interface DetailData {
tmdbId?: number; tmdbId?: number;
mediaType?: 'movie' | 'tv'; mediaType?: 'movie' | 'tv';
seasonNumber?: number; seasonNumber?: number;
seriesTitle?: string;
} }
interface Episode { interface Episode {
@@ -550,7 +551,7 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
if (extractedSeasonNumber && mediaType === 'tv') { if (extractedSeasonNumber && mediaType === 'tv') {
try { try {
const seasonResponse = await fetch( const seasonResponse = await fetch(
`/api/tmdb/seasons?id=${detailId}&season=${extractedSeasonNumber}` `/api/tmdb/episodes?id=${detailId}&season=${extractedSeasonNumber}`
); );
if (seasonResponse.ok) { if (seasonResponse.ok) {
seasonData = await seasonResponse.json(); seasonData = await seasonResponse.json();
@@ -561,15 +562,20 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
} }
setDetailData({ setDetailData({
title: mediaType === 'movie' ? detailResult.title : detailResult.name, title:
mediaType === 'movie'
? detailResult.title
: seasonData?.name
? `${detailResult.name} ${seasonData.name}`
: detailResult.name,
originalTitle: originalTitle:
mediaType === 'movie' ? detailResult.original_title : detailResult.original_name, mediaType === 'movie' ? detailResult.original_title : detailResult.original_name,
year: year:
mediaType === 'movie' mediaType === 'movie'
? detailResult.release_date?.substring(0, 4) ? detailResult.release_date?.substring(0, 4)
: detailResult.first_air_date?.substring(0, 4), : seasonData?.air_date?.substring(0, 4) || detailResult.first_air_date?.substring(0, 4),
poster: detailResult.poster_path poster: (seasonData?.poster_path || detailResult.poster_path)
? processImageUrl(getTMDBImageUrl(detailResult.poster_path, 'w500')) ? processImageUrl(getTMDBImageUrl(seasonData?.poster_path || detailResult.poster_path, 'w500'))
: poster, : poster,
rating: detailResult.vote_average rating: detailResult.vote_average
? { ? {
@@ -584,7 +590,9 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
duration: detailResult.runtime ? `${detailResult.runtime}分钟` : undefined, duration: detailResult.runtime ? `${detailResult.runtime}分钟` : undefined,
episodesCount: seasonData?.episodes?.length || detailResult.number_of_episodes, episodesCount: seasonData?.episodes?.length || detailResult.number_of_episodes,
releaseDate: releaseDate:
mediaType === 'movie' ? detailResult.release_date : detailResult.first_air_date, mediaType === 'movie'
? detailResult.release_date
: seasonData?.air_date || detailResult.first_air_date,
status: detailResult.status, status: detailResult.status,
tagline: detailResult.tagline, tagline: detailResult.tagline,
seasons: detailResult.number_of_seasons, seasons: detailResult.number_of_seasons,
@@ -592,6 +600,7 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
tmdbId: detailId, tmdbId: detailId,
mediaType: mediaType, mediaType: mediaType,
seasonNumber: extractedSeasonNumber, seasonNumber: extractedSeasonNumber,
seriesTitle: mediaType === 'tv' ? detailResult.name : undefined,
}); });
return; return;
} }
@@ -689,7 +698,7 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
if (extractedSeasonNumber && mediaType === 'tv') { if (extractedSeasonNumber && mediaType === 'tv') {
try { try {
const seasonResponse = await fetch( const seasonResponse = await fetch(
`/api/tmdb/seasons?id=${detailId}&season=${extractedSeasonNumber}` `/api/tmdb/episodes?id=${detailId}&season=${extractedSeasonNumber}`
); );
if (seasonResponse.ok) { if (seasonResponse.ok) {
seasonData = await seasonResponse.json(); seasonData = await seasonResponse.json();
@@ -700,15 +709,20 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
} }
setDetailData({ setDetailData({
title: mediaType === 'movie' ? detailResult.title : detailResult.name, title:
mediaType === 'movie'
? detailResult.title
: seasonData?.name
? `${detailResult.name} ${seasonData.name}`
: detailResult.name,
originalTitle: originalTitle:
mediaType === 'movie' ? detailResult.original_title : detailResult.original_name, mediaType === 'movie' ? detailResult.original_title : detailResult.original_name,
year: year:
mediaType === 'movie' mediaType === 'movie'
? detailResult.release_date?.substring(0, 4) ? detailResult.release_date?.substring(0, 4)
: detailResult.first_air_date?.substring(0, 4), : seasonData?.air_date?.substring(0, 4) || detailResult.first_air_date?.substring(0, 4),
poster: detailResult.poster_path poster: (seasonData?.poster_path || detailResult.poster_path)
? processImageUrl(getTMDBImageUrl(detailResult.poster_path, 'w500')) ? processImageUrl(getTMDBImageUrl(seasonData?.poster_path || detailResult.poster_path, 'w500'))
: poster, : poster,
rating: detailResult.vote_average rating: detailResult.vote_average
? { ? {
@@ -723,7 +737,9 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
duration: detailResult.runtime ? `${detailResult.runtime}分钟` : undefined, duration: detailResult.runtime ? `${detailResult.runtime}分钟` : undefined,
episodesCount: seasonData?.episodes?.length || detailResult.number_of_episodes, episodesCount: seasonData?.episodes?.length || detailResult.number_of_episodes,
releaseDate: releaseDate:
mediaType === 'movie' ? detailResult.release_date : detailResult.first_air_date, mediaType === 'movie'
? detailResult.release_date
: seasonData?.air_date || detailResult.first_air_date,
status: detailResult.status, status: detailResult.status,
tagline: detailResult.tagline, tagline: detailResult.tagline,
seasons: detailResult.number_of_seasons, seasons: detailResult.number_of_seasons,
@@ -731,6 +747,7 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
tmdbId: detailId, tmdbId: detailId,
mediaType: mediaType, mediaType: mediaType,
seasonNumber: extractedSeasonNumber, seasonNumber: extractedSeasonNumber,
seriesTitle: mediaType === 'tv' ? detailResult.name : undefined,
}); });
setCurrentSource('tmdb'); setCurrentSource('tmdb');
return; return;
@@ -872,7 +889,9 @@ const DetailPanel: React.FC<DetailPanelProps> = ({
// 更新季度元信息 // 更新季度元信息
setDetailData(prev => prev ? { setDetailData(prev => prev ? {
...prev, ...prev,
title: episodesData.name || season?.name || prev.title, title: (episodesData.name || season?.name)
? `${prev.seriesTitle || prev.title} ${episodesData.name || season?.name}`
: prev.title,
intro: episodesData.overview || season?.overview || prev.overview, intro: episodesData.overview || season?.overview || prev.overview,
poster: season?.poster_path ? getTMDBImageUrl(season.poster_path, 'w500') : prev.poster, poster: season?.poster_path ? getTMDBImageUrl(season.poster_path, 'w500') : prev.poster,
releaseDate: episodesData.air_date || season?.air_date || prev.releaseDate, releaseDate: episodesData.air_date || season?.air_date || prev.releaseDate,