'use client' import React, { useState, useEffect, useCallback } from 'react' import { useRouter } from 'next/navigation' import { CircleUser, Settings, BellRing, History, MessageCircleQuestion, PlusCircle, ChevronRight, LogOut, Copy, Check } from 'lucide-react' import { ResponsiveLayout } from '@/components/layout/ResponsiveLayout' import { cn } from '@/lib/utils' import { useToast } from '@/components/ui/Toast' import { useAuth } from '@/contexts/AuthContext' import { USE_MOCK } from '@/contexts/AuthContext' import { api } from '@/lib/api' import type { CreatorDashboard } from '@/types/dashboard' // Mock 数据(USE_MOCK 模式) const mockUser = { name: '李小红', initial: '李', creatorId: 'CR123456', role: '抖音达人 · 已认证', stats: { completed: 28, passRate: 92, inProgress: 3, }, } // 菜单项数据 const menuItems = [ { id: 'personal', icon: CircleUser, iconColor: 'text-accent-indigo', bgColor: 'bg-accent-indigo', title: '个人信息', subtitle: '头像、昵称、绑定账号', }, { id: 'account', icon: Settings, iconColor: 'text-accent-green', bgColor: 'bg-accent-green', title: '账户设置', subtitle: '修改密码、账号安全', }, { id: 'notification', icon: BellRing, iconColor: 'text-accent-blue', bgColor: 'bg-accent-blue', title: '消息设置', subtitle: '通知开关、提醒偏好', }, { id: 'history', icon: History, iconColor: 'text-accent-coral', bgColor: 'bg-accent-coral', title: '历史记录', subtitle: '已完成和过期的任务', }, { id: 'help', icon: MessageCircleQuestion, iconColor: 'text-text-secondary', bgColor: 'bg-bg-elevated', title: '帮助与反馈', subtitle: '常见问题、联系客服', }, { id: 'appeal', icon: PlusCircle, iconColor: 'text-accent-indigo', bgColor: 'bg-accent-indigo', title: '申诉次数', subtitle: '查看各任务申诉次数 · 申请增加', }, ] // 用户卡片组件 function UserCard() { const toast = useToast() const { user } = useAuth() const [copied, setCopied] = useState(false) const [stats, setStats] = useState({ completed: 0, inProgress: 0, totalTasks: 0 }) useEffect(() => { const loadStats = async () => { if (USE_MOCK) { setStats({ completed: mockUser.stats.completed, inProgress: mockUser.stats.inProgress, totalTasks: mockUser.stats.completed + mockUser.stats.inProgress }) return } try { const dashboard = await api.getCreatorDashboard() setStats({ completed: dashboard.completed, inProgress: dashboard.pending_script + dashboard.pending_video + dashboard.in_review, totalTasks: dashboard.total_tasks, }) } catch { // 静默失败,保持默认值 } } loadStats() }, []) const displayName = USE_MOCK ? mockUser.name : (user?.name || '用户') const displayInitial = USE_MOCK ? mockUser.initial : (user?.name?.[0] || '?') const displayCreatorId = USE_MOCK ? mockUser.creatorId : (user?.creator_id || '--') const displayRole = USE_MOCK ? mockUser.role : (user?.is_verified ? '达人 · 已认证' : '达人') const passRate = stats.totalTasks > 0 ? Math.round((stats.completed / stats.totalTasks) * 100) : 0 // 复制达人ID const handleCopyId = async () => { try { await navigator.clipboard.writeText(displayCreatorId) setCopied(true) setTimeout(() => setCopied(false), 2000) } catch { toast.error('复制失败,请重试') } } return (
{/* 头像和信息 */}
{/* 头像 */}
{displayInitial}
{/* 用户信息 */}
{displayName} {displayRole} {/* 达人ID */}
达人ID:
{displayCreatorId}
{copied && ( 已复制 )}
{/* 统计数据 */}
{stats.completed} 完成任务
{passRate}% 通过率
{stats.inProgress} 进行中
) } // 菜单项组件 function MenuItem({ item, onClick }: { item: typeof menuItems[0]; onClick: () => void }) { const Icon = item.icon const isPlainBg = item.bgColor === 'bg-bg-elevated' return ( ) } // 菜单卡片组件 function MenuCard({ onMenuClick }: { onMenuClick: (id: string) => void }) { return (
{menuItems.map((item, index) => (
onMenuClick(item.id)} /> {index < menuItems.length - 1 && (
)}
))}
) } // 退出卡片组件 function LogoutCard({ onLogout }: { onLogout: () => void }) { return (
) } export default function CreatorProfilePage() { const router = useRouter() const { logout } = useAuth() // 菜单项点击处理 const handleMenuClick = (menuId: string) => { const routes: Record = { personal: '/creator/profile/edit', account: '/creator/settings/account', notification: '/creator/settings/notification', history: '/creator/history', help: '/creator/help', appeal: '/creator/appeal-quota', } const route = routes[menuId] if (route) { router.push(route) } } // 退出登录 const handleLogout = () => { logout() router.push('/login') } return (
{/* 顶部栏 */}

个人中心

管理您的账户信息和偏好设置

{/* 内容区 - 响应式布局 */}
{/* 用户卡片 */}
{/* 菜单和退出 */}
) }