'use client' import { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import { AuthProvider, useAuth } from '@/components/AuthProvider' import NavBar from '@/components/NavBar' import TabBar from '@/components/TabBar' import CheckInCard from '@/components/CheckInCard' import { listItems, getStreak, getTodayStatus, type ICheckInItem } from '@/services/checkin' function Dashboard() { const { user, loading } = useAuth() const router = useRouter() const [items, setItems] = useState([]) const [streaks, setStreaks] = useState>({}) const [todayStatus, setTodayStatus] = useState>({}) const [pageLoading, setPageLoading] = useState(true) useEffect(() => { if (!loading && !user) { router.push('/login') return } if (user) loadItems() }, [user, loading, router]) async function loadItems() { try { const [itemList, status] = await Promise.all([listItems(), getTodayStatus()]) setItems(itemList) setTodayStatus(status) const s: Record = {} await Promise.all(itemList.map(async (item) => { try { const { streak } = await getStreak(item.id) s[item.id] = streak } catch { /* ignore */ } })) setStreaks(s) } catch { /* ignore */ } setPageLoading(false) } const activeItems = items.filter(i => i.status === 'active') const pausedItems = items.filter(i => i.status === 'paused') if (loading || pageLoading) return
加载中...
if (!user) return null return ( <>
{user.nickname?.[0] || user.phone?.slice(-4) || '?'}

{user.nickname || '用户'}

积分 {user.points} · {activeItems.length} 个活跃项

今日打卡

{activeItems.length === 0 ? (

📋

还没有打卡项
点击右上角"创建"开始你的成长之旅

) : ( activeItems.map(item => ( setTodayStatus(s => ({ ...s, [id]: true }))} /> )) )} {pausedItems.length > 0 && ( <>

已暂停 ({pausedItems.length})

{pausedItems.map(item => ( ))} )}
) } export default function HomePage() { return ( ) }