'use client'; import { useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { Box, Container, Button, CircularProgress, Alert, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions } from '@mui/material'; import StopIcon from '@mui/icons-material/Stop'; import { useTranslation } from 'react-i18next'; import useBlindTestDetail from '../hooks/useBlindTestDetail'; import BlindTestHeader from '../components/BlindTestHeader'; import ResultSummary from '../components/ResultSummary'; import ResultDetailList from '../components/ResultDetailList'; import BlindTestInProgress from '../components/BlindTestInProgress'; export default function BlindTestDetailPage() { const { projectId, taskId } = useParams(); const router = useRouter(); const { t } = useTranslation(); const { task, loading, error, setError, currentQuestion, leftAnswer, rightAnswer, answersLoading, streamingA, streamingB, voting, completed, fetchCurrentQuestion, submitVote, interruptTask, getResultStats } = useBlindTestDetail(projectId, taskId); const [interruptDialog, setInterruptDialog] = useState(false); const handleBack = () => router.push(`/projects/${projectId}/blind-test-tasks`); const handleVote = async vote => { await submitVote(vote); }; const handleInterrupt = async () => { await interruptTask(); setInterruptDialog(false); }; // 加载中 if (loading) { return ( ); } // 任务不存在 if (!task) { return ( {t('blindTest.taskNotFound', '任务不存在')} ); } const isResultView = completed || task.status !== 0; const stats = getResultStats(); // 结果展示页面(已完成或已中断) if (isResultView) { return ( ); } // 盲测进行中页面 return ( } onClick={() => setInterruptDialog(true)} size="small" > {t('blindTest.interrupt', '中断任务')} } /> {error && ( setError('')}> {error} )} {/* 中断确认对话框 */} setInterruptDialog(false)}> {t('blindTest.interruptConfirmTitle', '确认中断')} {t('blindTest.interruptConfirmMessage', '确定要中断这个盲测任务吗?已完成的评判结果将保留。')} ); }