'use client'; import { useState, useEffect } from 'react'; import { Grid, Box, Typography, Skeleton, Divider, Tabs, Tab, Fade, Chip, useTheme, alpha, Paper } from '@mui/material'; import StorageIcon from '@mui/icons-material/Storage'; import CategoryIcon from '@mui/icons-material/Category'; import StarIcon from '@mui/icons-material/Star'; import { DatasetSiteCard } from './DatasetSiteCard'; import sites from '@/constant/sites.json'; import { useTranslation } from 'react-i18next'; export function DatasetSiteList() { const [loading, setLoading] = useState(true); const theme = useTheme(); const { t } = useTranslation(); // 定义类别 const CATEGORIES = { ALL: t('datasetSquare.categories.all'), POPULAR: t('datasetSquare.categories.popular'), CHINESE: t('datasetSquare.categories.chinese'), ENGLISH: t('datasetSquare.categories.english'), RESEARCH: t('datasetSquare.categories.research'), MULTIMODAL: t('datasetSquare.categories.multimodal') }; const [activeCategory, setActiveCategory] = useState(CATEGORIES.ALL); // 模拟加载效果 useEffect(() => { const timer = setTimeout(() => { setLoading(false); }, 800); return () => clearTimeout(timer); }, []); // 处理类别切换 const handleCategoryChange = (event, newValue) => { setActiveCategory(newValue); }; // 根据当前选中的类别过滤网站 const getFilteredSites = () => { if (activeCategory === CATEGORIES.ALL) { return sites; } else if (activeCategory === CATEGORIES.POPULAR) { return sites.filter(site => site.labels && site.labels.includes(t('datasetSquare.categories.popular'))); } else if (activeCategory === CATEGORIES.CHINESE) { return sites.filter(site => site.labels && site.labels.includes(t('datasetSquare.categories.chinese'))); } else if (activeCategory === CATEGORIES.ENGLISH) { return sites.filter(site => site.labels && site.labels.includes(t('datasetSquare.categories.english'))); } else if (activeCategory === CATEGORIES.RESEARCH) { return sites.filter(site => site.labels && site.labels.includes(t('datasetSquare.categories.research'))); } else if (activeCategory === CATEGORIES.MULTIMODAL) { return sites.filter(site => site.labels && site.labels.includes(t('datasetSquare.categories.multimodal'))); } return sites; }; const filteredSites = getFilteredSites(); return ( {/* 类别选择器 */} {t('datasetSquare.categoryTitle')} } iconPosition="start" /> } iconPosition="start" /> {/* 数据集网站列表 */} {loading ? ( // 加载骨架屏 {Array.from(new Array(8)).map((_, index) => ( ))} ) : ( {/* 结果数量提示 */} {t('datasetSquare.foundResources', { count: filteredSites.length })}{' '} {activeCategory !== CATEGORIES.ALL && ( setActiveCategory(CATEGORIES.ALL)} sx={{ borderRadius: 1.5 }} /> )} {filteredSites.length > 0 ? ( {filteredSites.map((site, index) => ( ))} ) : ( {t('datasetSquare.noDatasets')} {t('datasetSquare.tryOtherCategories')} )} )} ); }