83 lines
2.4 KiB
JavaScript
83 lines
2.4 KiB
JavaScript
|
|
'use client';
|
|||
|
|
|
|||
|
|
import { Container, Box, CircularProgress, Alert } from '@mui/material';
|
|||
|
|
import { useParams } from 'next/navigation';
|
|||
|
|
import { useTranslation } from 'react-i18next';
|
|||
|
|
import useImageDatasetDetails from '../hooks/useImageDatasetDetails';
|
|||
|
|
import ImageDatasetHeader from '../components/ImageDatasetHeader';
|
|||
|
|
import DatasetContent from '../components/DatasetContent';
|
|||
|
|
import DatasetSidebar from '../components/DatasetSidebar';
|
|||
|
|
|
|||
|
|
export default function ImageDatasetDetailPage() {
|
|||
|
|
const { projectId, datasetId } = useParams();
|
|||
|
|
const { t } = useTranslation();
|
|||
|
|
|
|||
|
|
const {
|
|||
|
|
currentDataset,
|
|||
|
|
loading,
|
|||
|
|
confirming,
|
|||
|
|
unconfirming,
|
|||
|
|
datasetsAllCount,
|
|||
|
|
datasetsConfirmCount,
|
|||
|
|
updateDataset,
|
|||
|
|
handleNavigate,
|
|||
|
|
handleConfirm,
|
|||
|
|
handleUnconfirm,
|
|||
|
|
handleDelete
|
|||
|
|
} = useImageDatasetDetails(projectId, datasetId);
|
|||
|
|
|
|||
|
|
// 加载状态
|
|||
|
|
if (loading) {
|
|||
|
|
return (
|
|||
|
|
<Container maxWidth="xl" sx={{ mt: 4 }}>
|
|||
|
|
<Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '70vh' }}>
|
|||
|
|
<CircularProgress />
|
|||
|
|
</Box>
|
|||
|
|
</Container>
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 无数据状态
|
|||
|
|
if (!currentDataset) {
|
|||
|
|
return (
|
|||
|
|
<Container maxWidth="xl" sx={{ mt: 4 }}>
|
|||
|
|
<Alert severity="error">{t('imageDatasets.notFound', '数据集不存在')}</Alert>
|
|||
|
|
</Container>
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return (
|
|||
|
|
<Container maxWidth="xl" sx={{ mt: 4, mb: 4 }}>
|
|||
|
|
{/* 顶部导航栏 */}
|
|||
|
|
<ImageDatasetHeader
|
|||
|
|
projectId={projectId}
|
|||
|
|
datasetsAllCount={datasetsAllCount}
|
|||
|
|
datasetsConfirmCount={datasetsConfirmCount}
|
|||
|
|
confirming={confirming}
|
|||
|
|
unconfirming={unconfirming}
|
|||
|
|
currentDataset={currentDataset}
|
|||
|
|
onNavigate={handleNavigate}
|
|||
|
|
onConfirm={handleConfirm}
|
|||
|
|
onUnconfirm={handleUnconfirm}
|
|||
|
|
onDelete={handleDelete}
|
|||
|
|
/>
|
|||
|
|
|
|||
|
|
{/* 主要布局:左右分栏 */}
|
|||
|
|
<Box sx={{ display: 'flex', gap: 3, alignItems: 'flex-start' }}>
|
|||
|
|
{/* 左侧主要内容区域 */}
|
|||
|
|
<DatasetContent
|
|||
|
|
dataset={currentDataset}
|
|||
|
|
projectId={projectId}
|
|||
|
|
onAnswerChange={async newAnswer => {
|
|||
|
|
// 直接传递答案字符串,DatasetContent 已经处理了格式转换
|
|||
|
|
await updateDataset({ answer: newAnswer });
|
|||
|
|
}}
|
|||
|
|
/>
|
|||
|
|
|
|||
|
|
{/* 右侧固定侧边栏 */}
|
|||
|
|
<DatasetSidebar dataset={currentDataset} projectId={projectId} onUpdate={updateDataset} />
|
|||
|
|
</Box>
|
|||
|
|
</Container>
|
|||
|
|
);
|
|||
|
|
}
|