'use client'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Box, Typography, TextField, FormControl, InputLabel, Select, MenuItem, Chip, OutlinedInput, Checkbox, ListItemText, Alert, CircularProgress, IconButton, ToggleButton, ToggleButtonGroup, Divider } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import FileDownloadIcon from '@mui/icons-material/FileDownload'; import FilterAltIcon from '@mui/icons-material/FilterAlt'; import ClearIcon from '@mui/icons-material/Clear'; import { useTranslation } from 'react-i18next'; const QUESTION_TYPES = [ { value: 'true_false', labelKey: 'eval.questionTypes.true_false' }, { value: 'single_choice', labelKey: 'eval.questionTypes.single_choice' }, { value: 'multiple_choice', labelKey: 'eval.questionTypes.multiple_choice' }, { value: 'short_answer', labelKey: 'eval.questionTypes.short_answer' }, { value: 'open_ended', labelKey: 'eval.questionTypes.open_ended' } ]; const EXPORT_FORMATS = [ { value: 'json', label: 'JSON', description: 'evalDatasets.export.jsonDesc' }, { value: 'jsonl', label: 'JSONL', description: 'evalDatasets.export.jsonlDesc' }, { value: 'csv', label: 'CSV', description: 'evalDatasets.export.csvDesc' } ]; export default function ExportEvalDialog({ open, onClose, exporting, error, format, setFormat, questionTypes, setQuestionTypes, selectedTags, setSelectedTags, keyword, setKeyword, previewTotal, previewLoading, availableTags, resetFilters, onExport }) { const { t } = useTranslation(); const hasFilters = questionTypes.length > 0 || selectedTags.length > 0 || keyword; return ( {t('evalDatasets.export.title', '导出评估数据集')} {error && ( {}}> {error} )} {/* 导出格式选择 */} {t('evalDatasets.export.formatLabel', '导出格式')} newFormat && setFormat(newFormat)} fullWidth size="small" > {EXPORT_FORMATS.map(f => ( {f.label} {t(f.description, f.label)} ))} {/* 筛选条件 */} {t('evalDatasets.export.filterLabel', '筛选条件')} {hasFilters && ( )} {/* 关键字搜索 */} setKeyword(e.target.value)} /> {/* 题型和标签筛选 */} {/* 题型筛选 */} {t('evalTasks.filterByTypeLabel', '题型筛选')} {/* 标签筛选 */} {t('evalTasks.filterByTagLabel', '标签筛选')} {/* 导出预览 */} {t('evalDatasets.export.previewLabel', '将导出数据:')} {previewLoading ? ( ) : ( {previewTotal} {t('evalDatasets.export.records', '条记录')} )} {previewTotal > 1000 && ( {t('evalDatasets.export.largeDataHint', '数据量较大,将采用流式导出,请耐心等待')} )} ); }