Files
Mycontent/components/book-cover.tsx

112 lines
4.3 KiB
TypeScript

"use client"
import { useState, useEffect } from "react"
import { Button } from "@/components/ui/button"
import { BookOpen } from "lucide-react"
import Link from "next/link"
import { getFullBookPrice, getAllSections } from "@/lib/book-data"
import { useStore } from "@/lib/store"
import { AuthModal } from "./modules/auth/auth-modal"
import { PaymentModal } from "./modules/payment/payment-modal"
export function BookCover() {
const [fullBookPrice, setFullBookPrice] = useState(9.9)
const [sectionsCount, setSectionsCount] = useState(55)
const [isAuthOpen, setIsAuthOpen] = useState(false)
const [isPaymentOpen, setIsPaymentOpen] = useState(false)
const { isLoggedIn } = useStore()
useEffect(() => {
const sections = getAllSections()
setSectionsCount(sections.length)
setFullBookPrice(getFullBookPrice(sections.length))
}, [])
return (
<section className="relative min-h-[85vh] flex flex-col items-center justify-center px-4 py-8 overflow-hidden bg-app-bg">
{/* Background decorative lines - simplified */}
<div className="absolute inset-0 overflow-hidden opacity-50">
<svg className="absolute w-full h-full" viewBox="0 0 800 600" fill="none">
<path
d="M-100 300 Q 200 100, 400 200 T 900 150"
stroke="rgba(56, 189, 172, 0.2)"
strokeWidth="1"
strokeDasharray="8 8"
fill="none"
/>
</svg>
</div>
{/* Content - more compact for mobile */}
<div className="relative z-10 w-full max-w-sm mx-auto text-center">
{/* Soul badge */}
<div className="inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-app-card/80 backdrop-blur-md border border-app-brand/30 mb-6">
<span className="text-app-brand text-sm font-medium">Soul · </span>
</div>
{/* Main title - smaller on mobile */}
<h1 className="text-3xl font-bold mb-3 leading-tight text-app-text">
SOUL的
<br />
</h1>
{/* Subtitle */}
<p className="text-app-text-muted text-sm mb-4">Soul派对房的真实商业故事</p>
{/* Quote - smaller */}
<p className="text-app-text-muted/80 italic text-sm mb-6">"社会不是靠努力,是靠洞察与选择"</p>
{/* Price info - compact card */}
<div className="bg-app-card/60 backdrop-blur-md rounded-xl p-4 mb-6 border border-app-border">
<div className="flex items-center justify-center gap-6 text-sm">
<div className="text-center">
<p className="text-xl font-bold text-app-brand">¥{fullBookPrice.toFixed(1)}</p>
<p className="text-app-text-muted text-xs"></p>
</div>
<div className="w-px h-8 bg-app-border" />
<div className="text-center">
<p className="text-xl font-bold text-app-text">{sectionsCount}</p>
<p className="text-app-text-muted text-xs"></p>
</div>
</div>
</div>
{/* Author info - compact */}
<div className="flex justify-between items-center px-2 mb-6 text-sm">
<div className="text-left">
<p className="text-app-text-muted text-xs"></p>
<p className="text-app-brand font-medium"></p>
</div>
<div className="text-right">
<p className="text-app-text-muted text-xs"></p>
<p className="text-app-text font-medium">06:00-09:00</p>
</div>
</div>
{/* CTA Button */}
<Link href="/chapters" className="block">
<Button
size="lg"
className="w-full bg-app-brand hover:bg-app-brand-hover text-white py-5 text-base rounded-xl flex items-center justify-center gap-2"
>
<BookOpen className="w-5 h-5" />
</Button>
</Link>
<p className="text-app-text-muted text-xs mt-4"> · 3</p>
</div>
{/* Modals */}
<AuthModal isOpen={isAuthOpen} onClose={() => setIsAuthOpen(false)} />
<PaymentModal
isOpen={isPaymentOpen}
onClose={() => setIsPaymentOpen(false)}
type="fullbook"
amount={fullBookPrice}
onSuccess={() => window.location.reload()}
/>
</section>
)
}