'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}
/>
{/* 文件名标签 - 悬浮在图片底部 */}
{/* 操作按钮区域 */}
}
onClick={() => onAnnotate(image)}
variant="contained"
color="primary"
sx={imageStyles.primaryActionButton}
>
{t('images.annotate', { defaultValue: '标注' })}
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
/>
)}
{/* 图片预览对话框 */}
>
);
}