diff --git a/src/app/play/page.tsx b/src/app/play/page.tsx
index 1394534..6ceff05 100644
--- a/src/app/play/page.tsx
+++ b/src/app/play/page.tsx
@@ -64,6 +64,7 @@ import Drawer from '@/components/Drawer';
import EpisodeSelector from '@/components/EpisodeSelector';
import PageLayout from '@/components/PageLayout';
import PansouSearch from '@/components/PansouSearch';
+import ProxyImage from '@/components/ProxyImage';
import { useSite } from '@/components/SiteProvider';
import SmartRecommendations from '@/components/SmartRecommendations';
import Toast, { ToastProps } from '@/components/Toast';
@@ -9023,8 +9024,8 @@ function PlayPageClient() {
{videoCover ? (
<>
-
})
diff --git a/src/app/search/page.tsx b/src/app/search/page.tsx
index 39bc6ca..2118fbb 100644
--- a/src/app/search/page.tsx
+++ b/src/app/search/page.tsx
@@ -38,6 +38,7 @@ import CapsuleSwitch from '@/components/CapsuleSwitch';
import ImageViewer from '@/components/ImageViewer';
import PageLayout from '@/components/PageLayout';
import PansouSearch from '@/components/PansouSearch';
+import ProxyImage from '@/components/ProxyImage';
import SearchResultFilter, {
SearchFilterCategory,
} from '@/components/SearchResultFilter';
@@ -829,9 +830,8 @@ function SearchPageClient() {
>
- {/* eslint-disable-next-line @next/next/no-img-element */}
-
})
{
if (!path) return '';
- // 如果是完整URL(TX数据源或豆瓣),使用processImageUrl统一处理
+ // 如果是完整URL(TX数据源或豆瓣),直接返回原始地址
if (path.startsWith('http://') || path.startsWith('https://')) {
- return processImageUrl(path);
+ return path;
}
- // 否则使用TMDB的URL拼接,并通过processImageUrl处理
- return processImageUrl(getTMDBImageUrl(path, 'original'));
+ // 否则使用TMDB的URL拼接原始地址
+ return getTMDBImageUrl(path, 'original');
};
// 获取视频URL(处理豆瓣视频代理)
@@ -454,13 +455,11 @@ export default function BannerCarousel({ autoPlayInterval = 5000, delayLoad = fa
) : (
/* 显示图片 */
-
)}
{/* 渐变遮罩 */}
diff --git a/src/components/DetailPanel.tsx b/src/components/DetailPanel.tsx
index 9c8cbe8..545dcc4 100644
--- a/src/components/DetailPanel.tsx
+++ b/src/components/DetailPanel.tsx
@@ -9,6 +9,7 @@ import { getTMDBImageUrl } from '@/lib/tmdb.client';
import { processImageUrl } from '@/lib/utils';
import ImageViewer from '@/components/ImageViewer';
+import ProxyImage from '@/components/ProxyImage';
interface DetailPanelProps {
isOpen: boolean;
@@ -373,7 +374,7 @@ const DetailPanel: React.FC
= ({
title: title,
intro: cmsData.desc,
episodesCount: cmsData.episodes?.length,
- poster: poster ? processImageUrl(poster) : poster,
+ poster: poster,
};
setDetailData(data);
setOriginalDetailData(data);
@@ -393,7 +394,7 @@ const DetailPanel: React.FC = ({
title: data.title || title,
intro: data.desc || '',
episodesCount: data.episodes?.length || cmsData.episodes?.length,
- poster: data.poster ? processImageUrl(data.poster) : poster,
+ poster: data.poster || poster,
year: data.year,
};
setDetailData(detailData);
@@ -423,7 +424,7 @@ const DetailPanel: React.FC = ({
title: data.name_cn || data.name,
originalTitle: data.name,
year: data.date ? data.date.substring(0, 4) : undefined,
- poster: data.images?.large ? processImageUrl(data.images.large) : poster,
+ poster: data.images?.large || poster,
rating: data.rating
? {
value: data.rating.score,
@@ -454,7 +455,7 @@ const DetailPanel: React.FC = ({
title: data.title,
originalTitle: data.original_title,
year: data.year,
- poster: (data.pic?.large || data.pic?.normal) ? processImageUrl(data.pic?.large || data.pic?.normal) : poster,
+ poster: data.pic?.large || data.pic?.normal || poster,
rating: data.rating
? {
value: data.rating.value,
@@ -873,7 +874,7 @@ const DetailPanel: React.FC = ({
...prev,
title: episodesData.name || season?.name || prev.title,
intro: episodesData.overview || season?.overview || prev.overview,
- poster: season?.poster_path ? processImageUrl(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,
year: episodesData.air_date?.substring(0, 4) || season?.air_date?.substring(0, 4) || prev.year,
episodesCount: episodesData.episodes?.length || season?.episode_count || prev.episodesCount,
@@ -1090,11 +1091,13 @@ const DetailPanel: React.FC = ({
style={{ height: virtualGalleryLayout.totalHeight, width: virtualGalleryLayout.usedWidth || '100%' }}
>
{virtualGalleryLayout.visibleItems.map((image) => {
- const imageUrl = processImageUrl(
- getTMDBImageUrl(image.file_path, image.imageType === 'poster' ? 'w500' : 'original')
+ const imageUrl = getTMDBImageUrl(
+ image.file_path,
+ image.imageType === 'poster' ? 'w500' : 'original'
);
- const thumbUrl = processImageUrl(
- getTMDBImageUrl(image.file_path, image.imageType === 'poster' ? 'w342' : 'w780')
+ const thumbUrl = getTMDBImageUrl(
+ image.file_path,
+ image.imageType === 'poster' ? 'w342' : 'w780'
);
return (
@@ -1112,12 +1115,10 @@ const DetailPanel: React.FC = ({
className="relative w-full h-full overflow-hidden rounded-md bg-gray-100 dark:bg-gray-800 cursor-pointer hover:opacity-90 transition-opacity"
onClick={() => handleImageClick(imageUrl)}
>
-
@@ -1231,7 +1232,12 @@ const DetailPanel: React.FC
= ({
className="relative w-32 h-48 rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 cursor-pointer hover:opacity-90 transition-opacity"
onClick={() => handleImageClick(detailData.poster!)}
>
-
+
{galleryEntryButton}
@@ -1356,13 +1362,12 @@ const DetailPanel: React.FC
= ({
{actor.profile_path ? (
handleImageClick(processImageUrl(getTMDBImageUrl(actor.profile_path || null, 'w185')))}
+ onClick={() => handleImageClick(getTMDBImageUrl(actor.profile_path || null, 'w185'))}
>
-
@@ -1474,14 +1479,13 @@ const DetailPanel: React.FC = ({
className="relative w-12 h-16 rounded overflow-hidden bg-gray-200 dark:bg-gray-700 flex-shrink-0 hover:opacity-80 transition-opacity"
onClick={(e) => {
e.stopPropagation();
- handleImageClick(processImageUrl(getTMDBImageUrl(season.poster_path, 'w500')));
+ handleImageClick(getTMDBImageUrl(season.poster_path, 'w500'));
}}
>
-
@@ -1536,13 +1540,12 @@ const DetailPanel: React.FC