移除日期未知和修正页面定位

This commit is contained in:
mtvpls
2026-04-18 09:33:38 +08:00
parent 31af8a6814
commit 897d475ad5
4 changed files with 54 additions and 4 deletions
+2
View File
@@ -16,6 +16,7 @@ import { SiteProvider } from '../components/SiteProvider';
import { ThemeProvider } from '../components/ThemeProvider';
import { TokenRefreshManager } from '../components/TokenRefreshManager';
import TopProgressBar from '../components/TopProgressBar';
import RouteScrollReset from '../components/RouteScrollReset';
import ChatFloatingWindow from '../components/watch-room/ChatFloatingWindow';
import { WatchRoomProvider } from '../components/WatchRoomProvider';
import { DownloadProvider } from '../contexts/DownloadContext';
@@ -268,6 +269,7 @@ export default async function RootLayout({
disableTransitionOnChange
>
<TopProgressBar />
<RouteScrollReset />
<TokenRefreshManager />
<SiteProvider siteName={siteName} announcement={announcement} tmdbApiKey={tmdbApiKey}>
<WatchRoomProvider>
+7 -4
View File
@@ -48,7 +48,7 @@ function MangaDetailSkeleton() {
);
}
function formatChapterMeta(chapter: MangaChapter): string {
function formatChapterMeta(chapter: MangaChapter): string | null {
if (typeof chapter.pageCount === 'number' && chapter.pageCount > 0) {
return `${chapter.pageCount}`;
}
@@ -64,7 +64,7 @@ function formatChapterMeta(chapter: MangaChapter): string {
}
}
return '日期未知';
return null;
}
export default function MangaDetailPage() {
@@ -264,8 +264,11 @@ export default function MangaDetailPage() {
)}
</div>
<div className='mt-1 text-xs text-gray-500'>
{formatChapterMeta(chapter)}
{active && currentRecord ? ` · 上次看到第 ${currentRecord.pageIndex + 1}` : ''}
{(() => {
const meta = formatChapterMeta(chapter);
const progress = active && currentRecord ? `上次看到第 ${currentRecord.pageIndex + 1}` : null;
return [meta, progress].filter(Boolean).join(' · ');
})()}
</div>
</Link>
);
+18
View File
@@ -102,6 +102,7 @@ export default function MangaReadPage() {
const requestVerticalPageSyncRef = useRef<(() => void) | null>(null);
const currentVerticalPageIndexRef = useRef(0);
const preloadedImageUrlsRef = useRef<Set<string>>(new Set());
const activeChapterRef = useRef<HTMLAnchorElement | null>(null);
const getCurrentVerticalPageIndex = () => {
if (!verticalPageRefs.current.length) return 0;
@@ -642,6 +643,22 @@ export default function MangaReadPage() {
[chapterList, chapterListDesc]
);
useEffect(() => {
if (!chapterListOpen) return;
const rafId = window.requestAnimationFrame(() => {
activeChapterRef.current?.scrollIntoView({
block: 'center',
inline: 'nearest',
behavior: 'auto',
});
});
return () => {
window.cancelAnimationFrame(rafId);
};
}, [chapterId, chapterListOpen, orderedChapterList]);
const pagedItems = useMemo(() => {
if (readMode === 'single') {
return pages[activePage] ? [pages[activePage]] : [];
@@ -798,6 +815,7 @@ export default function MangaReadPage() {
return (
<Link
key={chapter.id}
ref={active ? activeChapterRef : null}
href={`/manga/read?mangaId=${mangaId}&sourceId=${sourceId}&chapterId=${chapter.id}&title=${encodeURIComponent(title)}&cover=${encodeURIComponent(cover)}&sourceName=${encodeURIComponent(sourceName)}&chapterName=${encodeURIComponent(chapter.name)}&returnTo=${encodeURIComponent(returnTo)}`}
className={`group relative block rounded-2xl px-4 py-3 text-sm transition ${
active
+27
View File
@@ -0,0 +1,27 @@
'use client';
import { usePathname } from 'next/navigation';
import { useEffect } from 'react';
export default function RouteScrollReset() {
const pathname = usePathname();
useEffect(() => {
if (typeof window === 'undefined' || !pathname?.startsWith('/manga') || pathname === '/manga/read') return;
const reset = () => {
window.scrollTo({ top: 0, left: 0, behavior: 'auto' });
document.documentElement.scrollTop = 0;
document.body.scrollTop = 0;
};
reset();
const rafId = window.requestAnimationFrame(reset);
return () => {
window.cancelAnimationFrame(rafId);
};
}, [pathname]);
return null;
}