'use client'; import { useState } from 'react'; import { Grid, Card, CardMedia, CardContent, CardActions, Typography, Chip, Box, Pagination, Tooltip, Dialog, DialogContent, IconButton, Button } from '@mui/material'; import QuestionMarkIcon from '@mui/icons-material/QuestionMark'; import DatasetIcon from '@mui/icons-material/Dataset'; import DeleteIcon from '@mui/icons-material/Delete'; import EditNoteIcon from '@mui/icons-material/EditNote'; import PhotoLibraryIcon from '@mui/icons-material/PhotoLibrary'; import { useTranslation } from 'react-i18next'; import { imageStyles } from '../styles/imageStyles'; export default function ImageGrid({ images, total, page, pageSize, onPageChange, onGenerateQuestions, onGenerateDataset, onDelete, onAnnotate }) { const { t } = useTranslation(); const [previewImage, setPreviewImage] = useState(null); if (!images || images.length === 0) { return ( {t('images.noImages', { defaultValue: '还没有图片' })} {t('images.noImagesDescription', { defaultValue: '开始导入图片,创建您的第一个图片数据集' })} ); } return ( <> {images.map(image => ( {/* 图片区域 */} setPreviewImage(image)} /> {/* 悬停遮罩 */} {/* 状态标签 - 悬浮在图片右上角 */} 0 ? 'primary' : 'default'} sx={imageStyles.statusChip} /> 0 ? 'success' : 'default'} sx={imageStyles.statusChip} /> {/* 文件名标签 - 悬浮在图片底部 */} {/* 操作按钮区域 */} onGenerateQuestions(image)} sx={imageStyles.actionIconButton}> onGenerateDataset(image)} sx={imageStyles.actionIconButton}> onDelete(image.id)} sx={imageStyles.actionIconButton} > ))} {total > pageSize && ( onPageChange(newPage)} color="primary" size="large" showFirstButton showLastButton /> )} {/* 图片预览对话框 */} setPreviewImage(null)} maxWidth="lg" fullWidth PaperProps={{ sx: { bgcolor: 'transparent', boxShadow: 'none', overflow: 'hidden' } }} > {previewImage && ( {previewImage.imageName} {previewImage.imageName} )} ); }