// src/app/dashboard/page.tsx 'use client'; import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import Link from 'next/link'; import Canvas2DSkinPreview from '@/components/skins/Canvas2DSkinPreview'; import { TextureInfo, TextureType, getUserTextures, getUserFavorites, addFavorite, removeFavorite, checkFavoriteStatus } from '@/lib/api/skins'; export default function Dashboard() { // 由于这是客户端组件,我们不能在这里使用getServerSession // 在实际应用中,你应该使用useSession钩子或在服务器端获取会话 // 这里我们模拟一个已登录的状态 const session = { user: { id: 'test_user_1', name: '测试玩家', email: 'test@test.com' } }; // 安全地获取用户ID const userId = session?.user?.id || 'unknown'; // 状态管理 const [searchTerm, setSearchTerm] = useState(''); const [activeCategory, setActiveCategory] = useState('all'); const [skins, setSkins] = useState([]); const [favorites, setFavorites] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // 加载用户皮肤 useEffect(() => { loadUserSkins(); }, []); const loadUserSkins = async () => { setLoading(true); setError(null); try { // 获取用户皮肤列表 const response = await getUserTextures({ type: TextureType.SKIN, page: 1, pageSize: 20 }); setSkins(response.textures); // 获取用户收藏列表 const favResponse = await getUserFavorites({ page: 1, pageSize: 20 }); setFavorites(favResponse.textures); } catch (err) { console.error('加载皮肤失败:', err); setError('无法加载皮肤,请稍后重试'); } finally { setLoading(false); } }; const handleFavoriteToggle = async (textureId: number) => { try { // 检查当前收藏状态 const isCurrentlyFavorite = await checkFavoriteStatus(textureId); if (isCurrentlyFavorite) { // 取消收藏 await removeFavorite(textureId); // 更新本地状态 setFavorites(favorites.filter(fav => fav.texture.id !== textureId)); } else { // 添加收藏 await addFavorite(textureId); // 获取更新后的收藏列表 const favResponse = await getUserFavorites({ page: 1, pageSize: 20 }); setFavorites(favResponse.textures); } } catch (err) { console.error('操作收藏失败:', err); alert('操作失败,请稍后重试'); } }; // 根据搜索词和分类过滤皮肤 const filteredSkins = skins.filter(skin => skin.id.toString().includes(searchTerm.toLowerCase()) ); return (
{/* 背景装饰元素 - 渐变模糊效果 */}
{/* 主要内容区域 */}
{/* 页面标题和操作按钮 */}

我的皮肤库

管理和分享你的Minecraft皮肤

{/* 搜索栏 */}
setSearchTerm(e.target.value)} />
🔍
{/* 皮肤分类标签 */}
{/* 皮肤网格 */}
{loading ? ( // 加载状态 Array.from({ length: 6 }).map((_, index) => (
)) ) : error ? ( // 错误状态

{error}

) : filteredSkins.length === 0 ? ( // 空状态

你还没有上传任何皮肤

) : ( // 正常显示皮肤列表 filteredSkins.map((skin) => (

皮肤 #{skin.id}

上传于 {new Date(skin.createdAt).toLocaleDateString()}

)) )}
{/* 空状态 */} {filteredSkins.length === 0 && (
📦

还没有皮肤

上传你的第一个皮肤,开始你的Minecraft皮肤收藏之旅

)}
{/* 页脚 */}
); }