'use client'; import { Container, Box, Typography, Alert, Snackbar, Paper } from '@mui/material'; import { useEffect } from 'react'; import ChunkViewDialog from '@/components/text-split/ChunkViewDialog'; import DatasetHeader from '@/components/datasets/DatasetHeader'; import DatasetMetadata from '@/components/datasets/DatasetMetadata'; import EditableField from '@/components/datasets/EditableField'; import OptimizeDialog from '@/components/datasets/OptimizeDialog'; import DatasetRatingSection from '@/components/datasets/DatasetRatingSection'; import useDatasetDetails from '@/app/projects/[projectId]/datasets/[datasetId]/useDatasetDetails'; import { useTranslation } from 'react-i18next'; /** * 数据集详情页面 */ export default function DatasetDetailsPage({ params }) { const { projectId, datasetId } = params; const { t } = useTranslation(); // 使用自定义Hook管理状态和逻辑 const { currentDataset, loading, editingAnswer, editingCot, editingQuestion, answerValue, cotValue, questionValue, snackbar, confirming, unconfirming, optimizeDialog, viewDialogOpen, viewChunk, datasetsAllCount, datasetsConfirmCount, answerTokens, cotTokens, shortcutsEnabled, setShortcutsEnabled, setSnackbar, setAnswerValue, setCotValue, setQuestionValue, setEditingAnswer, setEditingCot, setEditingQuestion, handleNavigate, handleConfirm, handleUnconfirm, handleSave, handleDelete, handleOpenOptimizeDialog, handleCloseOptimizeDialog, handleOptimize, handleViewChunk, handleCloseViewDialog } = useDatasetDetails(projectId, datasetId); // 加载状态 if (loading) { return ( {t('datasets.loadingDataset')} ); } // 无数据状态 if (!currentDataset) { return ( {t('datasets.datasetNotFound')} ); } return ( {/* 顶部导航栏 */} {/* 主要布局:左右分栏 */} {/* 左侧主要内容区域 */} setEditingQuestion(true)} onChange={e => setQuestionValue(e.target.value)} onSave={() => handleSave('question', questionValue)} dataset={currentDataset} onCancel={() => { setEditingQuestion(false); setQuestionValue(currentDataset.question); }} /> setEditingAnswer(true)} onChange={e => setAnswerValue(e.target.value)} onSave={() => handleSave('answer', answerValue)} onCancel={() => { setEditingAnswer(false); setAnswerValue(currentDataset.answer); }} dataset={currentDataset} onOptimize={handleOpenOptimizeDialog} tokenCount={answerTokens} optimizing={optimizeDialog.loading} /> setEditingCot(true)} onChange={e => setCotValue(e.target.value)} onSave={() => handleSave('cot', cotValue)} dataset={currentDataset} onCancel={() => { setEditingCot(false); setCotValue(currentDataset.cot || ''); }} tokenCount={cotTokens} /> {/* 右侧固定侧边栏 */} {/* 数据集元数据信息 */} {/* 评分、标签、备注区域 */} { // 更新成功后刷新数据,保持页面状态同步 // 这里可以调用 useDatasetDetails 的刷新逻辑 }} currentDataset={currentDataset} /> {/* 消息提示 */} setSnackbar(prev => ({ ...prev, open: false }))} anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }} > setSnackbar(prev => ({ ...prev, open: false }))} severity={snackbar.severity} sx={{ width: '100%' }} > {snackbar.message} {/* AI优化对话框 */} {/* 文本块详情对话框 */} ); }