diff --git a/app/about/page.tsx b/app/about/page.tsx index 3177ebea..54b6c246 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -2,7 +2,7 @@ import { useState } from "react" import { useRouter } from "next/navigation" -import { ChevronLeft, Clock, MessageCircle, BookOpen, Users, Award, TrendingUp } from "lucide-react" +import { Clock, MessageCircle, BookOpen, Users, Award, TrendingUp, ArrowLeft } from "lucide-react" import { QRCodeModal } from "@/components/modules/marketing/qr-code-modal" import { useStore } from "@/lib/store" @@ -35,51 +35,42 @@ export default function AboutPage() { ] return ( -
- {/* 顶部导航 */} +
-
- -

关于作者

-
+

关于作者

-
- {/* 作者头像卡片 */} -
-
-
+
+
+
+
{authorInfo.name.charAt(0)}
-
-

{authorInfo.name}

-

{authorInfo.description}

-
- - - 每日 {authorInfo.liveTime} - - - - {authorInfo.platform} - -
+

{authorInfo.name}

+

{authorInfo.description}

+
+ + + 每日 {authorInfo.liveTime} + + + + {authorInfo.platform} +
- {/* 数据统计 */} -
+
{stats.map((stat, index) => (
- -

{stat.value}

+ +

{stat.value}

{stat.label}

))} @@ -87,40 +78,38 @@ export default function AboutPage() { {/* 关于这本书 */}
-

关于这本书

-
+

关于这本书

+

"这不是一本教你成功的鸡汤书。"

这是我每天早上6点到9点,在Soul派对房和几百个陌生人分享的真实故事。

-

"社会不是靠努力,是靠洞察与选择。"

+

"社会不是靠努力,是靠洞察与选择。"

- {/* 创业历程 */}
-

创业历程

-
+

创业历程

+
{milestones.map((item, index) => (
-
+
{index < milestones.length - 1 &&
}
-
-

{item.year}

-

{item.event}

+
+

{item.year}

+

{item.event}

))}
- {/* 行动引导 */} -
+

想听更多真实故事?

每天早上6-9点,卡若在Soul派对房免费分享

- {/* 底部导航 */} - - setShowQRModal(false)} />
) diff --git a/app/chapters/page.tsx b/app/chapters/page.tsx index 6fe8658c..1c390ad4 100644 --- a/app/chapters/page.tsx +++ b/app/chapters/page.tsx @@ -2,56 +2,33 @@ import { useState } from "react" import { useRouter } from "next/navigation" -import { ChevronLeft, ChevronRight, Lock, Unlock, Book, BookOpen, Sparkles } from "lucide-react" +import { ChevronRight, Lock, Unlock, Book, BookOpen, Home, List, Sparkles, User } from "lucide-react" import { useStore } from "@/lib/store" -import { bookData, getTotalSectionCount, specialSections, getFullBookPrice } from "@/lib/book-data" -import { AuthModal } from "@/components/modules/auth/auth-modal" -import { PaymentModal } from "@/components/payment-modal" +import { bookData, getTotalSectionCount, specialSections } from "@/lib/book-data" export default function ChaptersPage() { const router = useRouter() - const { user, isLoggedIn, hasPurchased } = useStore() + const { user, hasPurchased } = useStore() const [expandedPart, setExpandedPart] = useState("part-1") - const [isAuthOpen, setIsAuthOpen] = useState(false) - const [isPaymentOpen, setIsPaymentOpen] = useState(false) const totalSections = getTotalSectionCount() - const purchasedCount = user?.purchasedSections?.length || 0 const hasFullBook = user?.hasFullBook || false - const fullBookPrice = getFullBookPrice() - const handleSectionClick = (sectionId: string, isFree: boolean) => { + const handleSectionClick = (sectionId: string) => { router.push(`/read/${sectionId}`) } - const handleBuyFullBook = () => { - if (!isLoggedIn) { - setIsAuthOpen(true) - return - } - setIsPaymentOpen(true) - } - return (
- {/* 顶部导航 */}
-
- -

我要看

-
+
+

目录

- {/* 书籍信息卡片 */} -
+
-
+
@@ -59,44 +36,30 @@ export default function ChaptersPage() {

来自Soul派对房的真实商业故事

-
{totalSections}
+
{totalSections}
章节
- - {/* 购买全书按钮 */} - {!hasFullBook && ( - - )}
{/* 目录内容 */}
- {/* 序言 */} - {/* 五篇目录 */} {bookData.map((part) => (
@@ -194,7 +156,7 @@ export default function ChaptersPage() { {specialSections.appendix.map((item) => (
- {/* 底部导航 */} - - {/* 登录弹窗 */} - setIsAuthOpen(false)} /> - - {/* 支付弹窗 */} - setIsPaymentOpen(false)} - type="fullbook" - sectionId="" - sectionTitle="" - amount={fullBookPrice} - onSuccess={() => window.location.reload()} - />
) } diff --git a/app/globals.css b/app/globals.css index c6f5a4d8..4c455cbd 100644 --- a/app/globals.css +++ b/app/globals.css @@ -39,51 +39,45 @@ --sidebar-border: oklch(0.922 0 0); --sidebar-ring: oklch(0.708 0 0); - /* ===== Apple Frosted Glass Design Tokens ===== */ - /* 深色主题背景 - 模拟iOS深色模式 */ + /* ===== Soul App Style - Cyan/Teal Theme ===== */ + /* 深色主题背景 */ --app-bg: #000000; --app-bg-secondary: #1c1c1e; --app-bg-tertiary: #2c2c2e; - + /* 毛玻璃效果 */ --glass-bg: rgba(28, 28, 30, 0.72); --glass-bg-light: rgba(44, 44, 46, 0.65); --glass-bg-heavy: rgba(18, 18, 20, 0.85); --glass-border: rgba(255, 255, 255, 0.08); --glass-border-light: rgba(255, 255, 255, 0.12); - - /* 品牌色 - 青绿色调 */ - --app-brand: #30d158; - --app-brand-secondary: #34c759; - --app-brand-hover: #28a745; - --app-brand-light: rgba(48, 209, 88, 0.15); - - /* iOS系统色 */ - --ios-blue: #007aff; - --ios-green: #30d158; - --ios-indigo: #5856d6; - --ios-orange: #ff9500; - --ios-pink: #ff2d55; - --ios-purple: #af52de; - --ios-red: #ff3b30; - --ios-teal: #5ac8fa; - --ios-yellow: #ffcc00; - + + /* 品牌色改为Soul青色 */ + --app-brand: #00ced1; + --app-brand-secondary: #20b2aa; + --app-brand-hover: #00b4b7; + --app-brand-light: rgba(0, 206, 209, 0.15); + --app-brand-dark: #008b8b; + + /* 强调色 */ + --app-accent: #5ac8fa; + --app-gold: #ffd700; + /* 文字颜色 */ --app-text: #ffffff; --app-text-secondary: rgba(235, 235, 245, 0.6); --app-text-tertiary: rgba(235, 235, 245, 0.3); --app-text-muted: #8e8e93; - + /* 分隔线和边框 */ --app-separator: rgba(84, 84, 88, 0.65); --app-border: rgba(255, 255, 255, 0.1); - + /* 阴影 */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4); --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5); - --shadow-glow: 0 0 20px rgba(48, 209, 88, 0.3); + --shadow-glow: 0 0 20px rgba(0, 206, 209, 0.3); } .dark { @@ -123,9 +117,10 @@ @theme inline { /* iOS San Francisco字体栈 */ - --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif; + --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Helvetica Neue", "PingFang SC", + "Microsoft YaHei", sans-serif; --font-mono: "SF Mono", "Fira Code", "Fira Mono", Menlo, Monaco, Consolas, monospace; - + --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); @@ -178,7 +173,7 @@ * { @apply border-border outline-ring/50; } - + html { /* 启用iOS平滑滚动 */ scroll-behavior: smooth; @@ -186,7 +181,7 @@ -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } - + body { @apply bg-background text-foreground; /* iOS安全区域适配 */ @@ -207,7 +202,7 @@ border: 1px solid var(--glass-border); border-radius: 1rem; } - + .glass-card-light { background: var(--glass-bg-light); backdrop-filter: saturate(180%) blur(20px); @@ -215,7 +210,7 @@ border: 1px solid var(--glass-border-light); border-radius: 1rem; } - + .glass-card-heavy { background: var(--glass-bg-heavy); backdrop-filter: saturate(200%) blur(30px); @@ -223,7 +218,7 @@ border: 1px solid var(--glass-border); border-radius: 1.25rem; } - + /* 毛玻璃导航栏 */ .glass-nav { background: var(--glass-bg-heavy); @@ -231,7 +226,7 @@ -webkit-backdrop-filter: saturate(180%) blur(20px); border-bottom: 0.5px solid var(--app-separator); } - + /* 毛玻璃弹窗 */ .glass-modal { background: var(--glass-bg-heavy); @@ -241,8 +236,8 @@ border-radius: 1.5rem; box-shadow: var(--shadow-lg); } - - /* iOS风格按钮 */ + + /* iOS风格按钮改为青色 */ .btn-ios { @apply font-medium transition-all duration-200; background: var(--app-brand); @@ -252,16 +247,16 @@ font-size: 1rem; letter-spacing: -0.01em; } - + .btn-ios:hover { background: var(--app-brand-hover); transform: scale(0.98); } - + .btn-ios:active { transform: scale(0.95); } - + .btn-ios-secondary { @apply font-medium transition-all duration-200; background: var(--glass-bg); @@ -271,7 +266,7 @@ border-radius: 0.75rem; padding: 0.875rem 1.5rem; } - + /* iOS风格输入框 */ .input-ios { background: var(--app-bg-secondary); @@ -282,23 +277,23 @@ color: var(--app-text); transition: all 0.2s ease; } - + .input-ios:focus { outline: none; box-shadow: 0 0 0 4px var(--app-brand-light); } - + .input-ios::placeholder { color: var(--app-text-tertiary); } - + /* iOS风格分割线 */ .separator-ios { height: 0.5px; background: var(--app-separator); margin: 0 1rem; } - + /* iOS风格列表项 */ .list-item-ios { @apply flex items-center justify-between px-4 py-3; @@ -306,28 +301,28 @@ border-bottom: 0.5px solid var(--app-separator); transition: background 0.15s ease; } - + .list-item-ios:first-child { border-top-left-radius: 0.75rem; border-top-right-radius: 0.75rem; } - + .list-item-ios:last-child { border-bottom-left-radius: 0.75rem; border-bottom-right-radius: 0.75rem; border-bottom: none; } - + .list-item-ios:active { background: var(--glass-bg-heavy); } - + /* 书籍阅读器样式 */ .book-reader { @apply min-h-screen; background: linear-gradient(180deg, #000000 0%, #1a1a1a 100%); } - + .book-page { @apply max-w-2xl mx-auto px-6 py-8; background: var(--glass-bg); @@ -335,26 +330,26 @@ border-radius: 1rem; margin: 1rem; } - + .book-content { font-size: 1.0625rem; line-height: 1.8; letter-spacing: 0.01em; color: var(--app-text); } - + .book-content h1, .book-content h2, .book-content h3 { @apply font-semibold; letter-spacing: -0.02em; } - + .book-content p { margin-bottom: 1.5em; text-align: justify; } - + /* 章节导航 */ .chapter-nav { @apply fixed bottom-0 left-0 right-0; @@ -363,22 +358,22 @@ border-top: 0.5px solid var(--app-separator); padding-bottom: env(safe-area-inset-bottom); } - - /* 进度条 */ + + /* 进度条改为青色 */ .progress-bar { height: 3px; background: var(--app-bg-tertiary); border-radius: 1.5px; overflow: hidden; } - + .progress-bar-fill { height: 100%; background: linear-gradient(90deg, var(--app-brand) 0%, var(--app-brand-secondary) 100%); border-radius: 1.5px; transition: width 0.3s ease; } - + /* 骨架屏动画 */ .skeleton { background: linear-gradient( @@ -391,7 +386,7 @@ animation: skeleton-loading 1.5s infinite; border-radius: 0.5rem; } - + @keyframes skeleton-loading { 0% { background-position: 200% 0; @@ -400,12 +395,12 @@ background-position: -200% 0; } } - + /* 页面过渡动画 */ .page-transition { animation: page-fade-in 0.3s ease-out; } - + @keyframes page-fade-in { from { opacity: 0; @@ -416,16 +411,16 @@ transform: translateY(0); } } - + /* 弹窗动画 */ .modal-overlay { animation: modal-overlay-in 0.25s ease-out; } - + .modal-content { animation: modal-content-in 0.3s cubic-bezier(0.32, 0.72, 0, 1); } - + @keyframes modal-overlay-in { from { opacity: 0; @@ -434,7 +429,7 @@ opacity: 1; } } - + @keyframes modal-content-in { from { opacity: 0; @@ -445,12 +440,12 @@ transform: scale(1) translateY(0); } } - + /* 发光效果 */ .glow { box-shadow: var(--shadow-glow); } - + .glow-text { text-shadow: 0 0 20px var(--app-brand); } @@ -462,39 +457,39 @@ .safe-top { padding-top: env(safe-area-inset-top); } - + .safe-bottom { padding-bottom: env(safe-area-inset-bottom); } - + .safe-left { padding-left: env(safe-area-inset-left); } - + .safe-right { padding-right: env(safe-area-inset-right); } - + /* 触摸反馈 */ .touch-feedback { -webkit-tap-highlight-color: transparent; } - + .touch-feedback:active { opacity: 0.7; transform: scale(0.98); } - + /* 隐藏滚动条但保持可滚动 */ .scrollbar-hide { -ms-overflow-style: none; scrollbar-width: none; } - + .scrollbar-hide::-webkit-scrollbar { display: none; } - + /* iOS风格文字省略 */ .text-ellipsis-2 { display: -webkit-box; @@ -502,7 +497,7 @@ -webkit-box-orient: vertical; overflow: hidden; } - + .text-ellipsis-3 { display: -webkit-box; -webkit-line-clamp: 3; diff --git a/app/match/page.tsx b/app/match/page.tsx index f0b57ab2..aab9d6f7 100644 --- a/app/match/page.tsx +++ b/app/match/page.tsx @@ -3,6 +3,8 @@ import { useState } from "react" import { motion, AnimatePresence } from "framer-motion" import { Mic } from "lucide-react" +import { Home, List, User } from "lucide-react" +import { useRouter } from "next/navigation" interface MatchUser { id: string @@ -28,6 +30,7 @@ export default function MatchPage() { const [matchAttempts, setMatchAttempts] = useState(0) const [selectedType, setSelectedType] = useState("partner") const [activeTab, setActiveTab] = useState<"voice" | "party" | "team">("voice") + const router = useRouter() const startMatch = () => { setIsMatching(true) @@ -378,6 +381,33 @@ export default function MatchPage() { )} + + {/* 底部导航 */} +
) } diff --git a/app/my/page.tsx b/app/my/page.tsx index bbcc2e39..c59eed27 100644 --- a/app/my/page.tsx +++ b/app/my/page.tsx @@ -2,14 +2,14 @@ import { useState, useEffect } from "react" import { useRouter } from "next/navigation" -import { User, ChevronRight, Copy, Check } from "lucide-react" +import { User, ChevronRight, Copy, Check, Home, List, Sparkles, Clock } from "lucide-react" import { useStore } from "@/lib/store" import { AuthModal } from "@/components/modules/auth/auth-modal" import { getFullBookPrice, getTotalSectionCount } from "@/lib/book-data" export default function MyPage() { const router = useRouter() - const { user, isLoggedIn, logout, getAllPurchases } = useStore() + const { user, isLoggedIn, logout, getAllPurchases, settings } = useStore() const [showAuthModal, setShowAuthModal] = useState(false) const [mounted, setMounted] = useState(false) const [copied, setCopied] = useState(false) @@ -21,7 +21,7 @@ export default function MyPage() { if (!mounted) { return (
-
+
) } @@ -32,6 +32,13 @@ export default function MyPage() { const readingMinutes = Math.floor(Math.random() * 100) const bookmarks = user?.purchasedSections?.length || 0 + const authorInfo = settings?.authorInfo || { + name: "卡若", + description: "连续创业者,私域运营专家", + liveTime: "06:00-09:00", + platform: "Soul派对房", + } + const handleCopyCode = () => { if (user?.referralCode) { navigator.clipboard.writeText(user.referralCode) @@ -40,23 +47,50 @@ export default function MyPage() { } } + // 底部导航组件 + const BottomNavBar = () => ( + + ) + // 未登录状态 if (!isLoggedIn) { return (
- {/* 顶部标题 */}
-

我的

+

我的

- {/* 用户卡片 - 未登录 */} -
+
-
+
-

ID: ---

@@ -65,33 +99,59 @@ export default function MyPage() {
-

0

+

0

已读章节

-

0

+

0

阅读时长(分)

-

0

+

0

书签

- {/* 分销中心 - 未登录 */} + {/* 关于作者入口 */} +
+
+
+ {authorInfo.name.charAt(0)} +
+
+

{authorInfo.name}

+

{authorInfo.description}

+
+ + + 每日 {authorInfo.liveTime} + + {authorInfo.platform} +
+
+ +
+
+ + {/* 分销中心 */}
💰 分销中心
- 佣金比例: 90% + 佣金比例: 90%

累计收益

-

¥0.00

+

¥0.00

可提现

@@ -107,7 +167,7 @@ export default function MyPage() {
@@ -121,15 +181,15 @@ export default function MyPage() {
-

0

+

0

推荐人数

-

0

+

0

成交订单

-

90%

+

90%

佣金率

@@ -138,7 +198,7 @@ export default function MyPage() {

我的邀请码

-

- - -

+

- - -

- {/* 菜单列表 - 精简版 */} + {/* 菜单列表 */}
- {/* 底部导航 */} - - + setShowAuthModal(false)} />
) @@ -214,16 +246,14 @@ export default function MyPage() { return (
- {/* 顶部标题 */}
-

我的

+

我的

- {/* 用户卡片 */} -
+
-
- +
+

{user?.nickname || "用户"}

@@ -233,20 +263,46 @@ export default function MyPage() {
-

{purchasedCount}

+

{purchasedCount}

已读章节

-

{readingMinutes}

+

{readingMinutes}

阅读时长(分)

-

{bookmarks}

+

{bookmarks}

书签

+ {/* 关于作者入口 */} +
+
+
+ {authorInfo.name.charAt(0)} +
+
+

{authorInfo.name}

+

{authorInfo.description}

+
+ + + 每日 {authorInfo.liveTime} + + {authorInfo.platform} +
+
+ +
+
+ {/* 分销中心 */}
@@ -254,12 +310,12 @@ export default function MyPage() { 💰 分销中心
- 佣金比例: 90% + 佣金比例: 90%

累计收益

-

¥{(user?.earnings || 0).toFixed(2)}

+

¥{(user?.earnings || 0).toFixed(2)}

可提现

@@ -275,7 +331,7 @@ export default function MyPage() {
@@ -289,15 +345,15 @@ export default function MyPage() {
-

{user?.referralCount || 0}

+

{user?.referralCount || 0}

推荐人数

-

{completedOrders}

+

{completedOrders}

成交订单

-

90%

+

90%

佣金率

@@ -306,20 +362,20 @@ export default function MyPage() {

我的邀请码

-

{user?.referralCode || "---"}

+

{user?.referralCode || "---"}

- {/* 菜单列表 - 精简版 */} + {/* 菜单列表 */}
- {/* 退出登录 */}
- {/* 底部导航 */} - +
) } diff --git a/app/page.tsx b/app/page.tsx index 062e91e9..de8c06d5 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,274 +1,252 @@ "use client" -import { useState, useEffect, useRef, useCallback } from "react" +import { useState, useEffect } from "react" import { useRouter } from "next/navigation" -import { ChevronRight, Sparkles, Lock, Share2 } from "lucide-react" +import { Search, ChevronRight, BookOpen, Clock, TrendingUp, Users, Home, List, Sparkles, User } from "lucide-react" import { useStore } from "@/lib/store" -import { getFullBookPrice, getTotalSectionCount } from "@/lib/book-data" -import { AuthModal } from "@/components/modules/auth/auth-modal" -import { PaymentModal } from "@/components/payment-modal" +import { bookData, getTotalSectionCount } from "@/lib/book-data" export default function HomePage() { const router = useRouter() - const { user, isLoggedIn, hasPurchased } = useStore() - const [content, setContent] = useState("") - const [isLoading, setIsLoading] = useState(true) - const [showPaywall, setShowPaywall] = useState(false) - const [readingProgress, setReadingProgress] = useState(0) - const [isAuthOpen, setIsAuthOpen] = useState(false) - const [isPaymentOpen, setIsPaymentOpen] = useState(false) - const [paymentType, setPaymentType] = useState<"section" | "fullbook">("section") - const contentRef = useRef(null) + const { user } = useStore() + const [mounted, setMounted] = useState(false) + const [searchQuery, setSearchQuery] = useState("") - const fullBookPrice = getFullBookPrice() const totalSections = getTotalSectionCount() const hasFullBook = user?.hasFullBook || false + const purchasedCount = hasFullBook ? totalSections : user?.purchasedSections?.length || 0 - // 最新章节 - 使用1.1作为示例 - const latestSection = { - id: "1.1", - title: "荷包:电动车出租的被动收入模式", - price: 1, - isFree: true, - filePath: "book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.1 荷包:电动车出租的被动收入模式.md", - } - - // 加载最新章节内容 useEffect(() => { - async function loadContent() { - try { - const response = await fetch(`/api/content?path=${encodeURIComponent(latestSection.filePath)}`) - if (response.ok) { - const data = await response.json() - setContent(data.content || "") - } - } catch (error) { - console.error("Failed to load content:", error) - } finally { - setIsLoading(false) - } - } - loadContent() + setMounted(true) }, []) - // 监听滚动进度 - const handleScroll = useCallback(() => { - if (!contentRef.current) return + // 推荐章节 + const featuredSections = [ + { id: "1.1", title: "荷包:电动车出租的被动收入模式", tag: "免费", part: "真实的人" }, + { id: "3.1", title: "3000万流水如何跑出来", tag: "热门", part: "真实的行业" }, + { id: "8.1", title: "流量杠杆:抖音、Soul、飞书", tag: "推荐", part: "真实的赚钱" }, + ] - const scrollTop = window.scrollY - const docHeight = document.documentElement.scrollHeight - window.innerHeight - const progress = docHeight > 0 ? Math.min((scrollTop / docHeight) * 100, 100) : 0 - setReadingProgress(progress) - - // 滚动超过20%时触发付费墙(非免费章节或未登录) - if (progress >= 20 && !hasFullBook && !latestSection.isFree) { - setShowPaywall(true) - } - }, [hasFullBook]) - - useEffect(() => { - window.addEventListener("scroll", handleScroll) - return () => window.removeEventListener("scroll", handleScroll) - }, [handleScroll]) - - const handlePurchaseClick = (type: "section" | "fullbook") => { - if (!isLoggedIn) { - setIsAuthOpen(true) - return - } - setPaymentType(type) - setIsPaymentOpen(true) + // 最新更新 + const latestSection = { + id: "9.14", + title: "大健康私域:一个月150万的70后", + part: "真实的赚钱", } - const contentLines = content.split("\n").filter((line) => line.trim()) - // 如果需要付费墙,只显示前20%内容 - const displayContent = - showPaywall && !hasFullBook && !latestSection.isFree - ? contentLines.slice(0, Math.ceil(contentLines.length * 0.2)).join("\n") - : content + if (!mounted) { + return ( +
+
+
+ ) + } return (
- {/* 阅读进度条 */} -
-
-
- - {/* 顶部标题区 */} -
-
-
-
- Soul派对·创业实验 - 最新 + {/* 顶部区域 */} +
+
+
+
+ +
+
+

创业实验

+

真实的商业世界

-
+
+ {totalSections}章 +
+
+ + {/* 搜索栏 */} +
router.push("/chapters")} + className="flex items-center gap-3 px-4 py-3 rounded-xl bg-[#1c1c1e] border border-white/5 cursor-pointer" + > + + 搜索章节...
- {/* 章节标题 */} -
-
- - {latestSection.id} +
+ {/* Banner卡片 - 最新章节 */} +
router.push(`/read/${latestSection.id}`)} + className="relative p-5 rounded-2xl overflow-hidden cursor-pointer" + style={{ + background: "linear-gradient(135deg, #0d3331 0%, #1a1a2e 50%, #16213e 100%)", + }} + > +
+
+
+ + 最新更新 - {latestSection.isFree && ( - 免费 - )} +

{latestSection.title}

+

{latestSection.part}

+
+ 开始阅读 + +
-

{latestSection.title}

-

第一篇|真实的人

-
- {/* 内容区域 */} -
- {isLoading ? ( -
- {[...Array(8)].map((_, i) => ( + {/* 阅读进度卡 */} +
+
+

我的阅读

+ + {purchasedCount}/{totalSections}章 + +
+
+
+
+
+
+

{purchasedCount}

+

已读

+
+
+

{totalSections - purchasedCount}

+

待读

+
+
+

5

+

篇章

+
+
+

11

+

章节

+
+
+
+ + {/* 精选推荐 */} +
+
+

精选推荐

+ +
+
+ {featuredSections.map((section) => (
+ key={section.id} + onClick={() => router.push(`/read/${section.id}`)} + className="p-4 rounded-xl bg-[#1c1c1e] border border-white/5 cursor-pointer active:scale-[0.98] transition-transform" + > +
+
+
+ {section.id} + + {section.tag} + +
+

{section.title}

+

{section.part}

+
+ +
+
))}
- ) : ( -
- {displayContent.split("\n").map( - (paragraph, index) => - paragraph.trim() && ( -

- {paragraph} -

- ), - )} -
- )} +
- {/* 付费墙 - 只在非免费章节且滚动超过20%时显示 */} - {showPaywall && !hasFullBook && !latestSection.isFree && ( -
- {/* 渐变遮罩 */} -
- - {/* 付费卡片 */} -
-
-
- -
-

解锁完整内容

-

{isLoggedIn ? "支付1元继续阅读" : "登录并支付1元继续阅读"}

- -
- - - -
- -

分享给好友购买,你可获得90%佣金

-
-
-
- )} - - {/* 底部引导 - 免费章节或已购买时显示 */} - {!showPaywall && ( -
-
-
-

想看更多内容?

-

共 {totalSections} 章精彩内容

-
- -
+ 第{part.number}篇 +

{part.title}

+

{part.subtitle}

+
+ ))}
- )} +
+ + {/* 数据统计 */} +
+
+ +

3000万

+

最高年流水

+
+
+ +

55+

+

真实案例

+
+
+ +

15年

+

创业经验

+
+
+ + {/* 序言入口 */} +
router.push("/read/preface")} + className="p-4 rounded-xl bg-gradient-to-r from-[#00CED1]/10 to-transparent border border-[#00CED1]/20 cursor-pointer" + > +
+
+

序言

+

为什么我每天早上6点在Soul开播?

+
+ 免费 +
+
- {/* 底部导航 */} - - {/* 登录弹窗 */} - setIsAuthOpen(false)} /> - - {/* 支付弹窗 */} - setIsPaymentOpen(false)} - type={paymentType} - sectionId={latestSection.id} - sectionTitle={latestSection.title} - amount={paymentType === "section" ? latestSection.price : fullBookPrice} - onSuccess={() => window.location.reload()} - />
) } diff --git a/components/bottom-nav.tsx b/components/bottom-nav.tsx index c5f3689a..1a4ee3af 100644 --- a/components/bottom-nav.tsx +++ b/components/bottom-nav.tsx @@ -2,55 +2,74 @@ import Link from "next/link" import { usePathname } from "next/navigation" -import { Home, User } from "lucide-react" +import { Home, List, Sparkles, User } from "lucide-react" export function BottomNav() { const pathname = usePathname() - // 在文档页面和管理后台不显示底部导航 - if (pathname.startsWith("/documentation") || pathname.startsWith("/admin")) { + // 在文档页面、管理后台、阅读页面和关于页面不显示底部导航 + if ( + pathname.startsWith("/documentation") || + pathname.startsWith("/admin") || + pathname.startsWith("/read") || + pathname.startsWith("/about") + ) { return null } const navItems = [ { href: "/", icon: Home, label: "首页" }, - { href: "/match", emoji: "🤝", label: "匹配合作" }, + { href: "/chapters", icon: List, label: "目录" }, + { href: "/match", icon: Sparkles, label: "匹配", isCenter: true }, { href: "/my", icon: User, label: "我的" }, ] return ( <> - {/* iOS风格底部导航 - 只有3个按钮 */} -