first commit

This commit is contained in:
gotolombok
2026-01-31 17:21:32 +08:00
commit f839fbd63a
109 changed files with 19204 additions and 0 deletions

84
app/dracin/[id]/page.tsx Normal file
View File

@@ -0,0 +1,84 @@
import { getDracinDetail } from '@/lib/dramabox';
import Image from 'next/image';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import Link from 'next/link';
import { Button } from '@/components/ui/button';
import { PlayCircle } from 'lucide-react';
import DracinEpisodeList from '@/components/DracinEpisodeList';
import BookmarkButton from '@/components/BookmarkButton';
interface DracinDetailPageProps {
params: Promise<{ id: string }>;
}
export default async function DracinDetailPage({ params }: DracinDetailPageProps) {
const { id } = await params;
const { drama, chapters } = await getDracinDetail(id);
if (!drama) {
return <div className="pt-24 text-center text-white">Drama not found.</div>;
}
return (
<div className="pt-24 px-4 md:px-16 min-h-screen">
<div className="grid grid-cols-1 md:grid-cols-[300px_1fr] gap-8">
{/* Cover Image */}
<div className="relative aspect-[2/3] w-full max-w-[300px] mx-auto md:mx-0 rounded-lg overflow-hidden border border-gray-800 shadow-xl">
<Image
src={drama.cover || '/placeholder.png'}
alt={drama.name || 'Drama Cover'}
fill
className="object-cover"
priority
unoptimized
/>
</div>
{/* Details */}
<div className="space-y-6 text-white">
<div>
<div className="flex items-center justify-between mb-2">
<h1 className="text-3xl font-bold">{drama.name}</h1>
<BookmarkButton
id={id}
type="dracin"
title={drama.name}
poster={drama.cover || ''}
/>
</div>
<div className="flex gap-2 mb-4 flex-wrap">
{drama.tags && drama.tags.map(tag => (
<Badge key={tag.tagId} variant="secondary" className="bg-gray-800">{tag.tagName}</Badge>
))}
</div>
{/* Episode List */}
<Card className="bg-[#141414] border-gray-800 text-white mt-4 mb-6">
<CardHeader>
<CardTitle>Episodes</CardTitle>
</CardHeader>
<CardContent>
<DracinEpisodeList chapters={chapters} bookId={id} />
</CardContent>
</Card>
<p className="text-gray-400">{drama.introduction}</p>
</div>
<div className="flex gap-8 text-sm text-gray-400 border-y border-gray-800 py-4">
<div>
<span className="block font-bold text-white mb-1">Chapters</span>
{drama.chapterCount}
</div>
<div>
<span className="block font-bold text-white mb-1">Views</span>
{drama.playCount.toLocaleString()}
</div>
</div>
</div>
</div>
</div>
);
}