Files

193 lines
5.9 KiB
JavaScript
Raw Permalink Normal View History

2026-03-17 14:36:31 +08:00
'use client';
import { useState } from 'react';
import { Box, Typography, Button, Tooltip, Menu, MenuItem, ListItemIcon, ListItemText } from '@mui/material';
import { useTranslation } from 'react-i18next';
import AutoFixHighIcon from '@mui/icons-material/AutoFixHigh';
import DeleteIcon from '@mui/icons-material/Delete';
import AddIcon from '@mui/icons-material/Add';
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
import DatasetIcon from '@mui/icons-material/Dataset';
import ChatIcon from '@mui/icons-material/Chat';
import ImageIcon from '@mui/icons-material/Image';
import LibraryAddIcon from '@mui/icons-material/LibraryAdd';
import DownloadIcon from '@mui/icons-material/Download';
export default function QuestionsPageHeader({
questionsTotal,
selectedQuestionsCount,
onBatchDeleteQuestions,
onOpenCreateDialog,
onOpenCreateTemplateDialog,
onBatchGenerateAnswers,
onAutoGenerateDatasets,
onAutoGenerateMultiTurnDatasets,
onAutoGenerateImageDatasets,
onExportQuestions,
activeTab
}) {
const { t } = useTranslation();
const [anchorEl, setAnchorEl] = useState(null);
const [createAnchorEl, setCreateAnchorEl] = useState(null);
const open = Boolean(anchorEl);
const createMenuOpen = Boolean(createAnchorEl);
const handleMenuClick = event => {
setAnchorEl(event.currentTarget);
};
const handleMenuClose = () => {
setAnchorEl(null);
};
const handleCreateMenuClick = event => {
setCreateAnchorEl(event.currentTarget);
};
const handleCreateMenuClose = () => {
setCreateAnchorEl(null);
};
const handleCreateQuestion = () => {
handleCreateMenuClose();
onOpenCreateDialog();
};
const handleCreateTemplate = () => {
handleCreateMenuClose();
onOpenCreateTemplateDialog();
};
const handleSingleTurnGenerate = () => {
handleMenuClose();
onAutoGenerateDatasets();
};
const handleMultiTurnGenerate = () => {
handleMenuClose();
onAutoGenerateMultiTurnDatasets();
};
const handleImageDatasetGenerate = () => {
handleMenuClose();
onAutoGenerateImageDatasets();
};
return (
<Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 3 }}>
<Typography variant="h4">
{t('questions.title')} ({questionsTotal})
</Typography>
<Box sx={{ display: 'flex', gap: 2 }}>
<Button variant="outlined" startIcon={<DownloadIcon />} onClick={onExportQuestions}>
{t('questions.exportQuestions')}
</Button>
<Button
variant="outlined"
color={selectedQuestionsCount > 0 ? 'error' : 'primary'}
startIcon={<DeleteIcon />}
onClick={onBatchDeleteQuestions}
disabled={selectedQuestionsCount === 0}
>
{t('questions.deleteSelected')}
</Button>
<Button
variant="contained"
startIcon={<AddIcon />}
endIcon={<ArrowDropDownIcon />}
onClick={handleCreateMenuClick}
>
{t('questions.createQuestion')}
</Button>
<Menu
anchorEl={createAnchorEl}
open={createMenuOpen}
onClose={handleCreateMenuClose}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'right'
}}
transformOrigin={{
vertical: 'top',
horizontal: 'right'
}}
>
<MenuItem onClick={handleCreateQuestion}>
<ListItemIcon>
<AddIcon fontSize="small" />
</ListItemIcon>
<ListItemText primary={t('questions.createNormalQuestion')} />
</MenuItem>
<MenuItem onClick={handleCreateTemplate}>
<ListItemIcon>
<LibraryAddIcon fontSize="small" />
</ListItemIcon>
<ListItemText primary={t('questions.createQuestionTemplate')} />
</MenuItem>
</Menu>
{/* <Button
variant="contained"
startIcon={<AutoFixHighIcon />}
onClick={onBatchGenerateAnswers}
disabled={selectedQuestionsCount === 0}
>
{t('questions.batchGenerate')}
</Button> */}
<Tooltip
title={t('questions.autoGenerateDatasetTip', {
defaultValue: '创建后台批量处理任务:自动查询待生成答案的问题并生成数据集'
})}
>
<Button
variant="outlined"
color="secondary"
startIcon={<AutoFixHighIcon />}
endIcon={<ArrowDropDownIcon />}
onClick={handleMenuClick}
>
{t('questions.autoGenerateDataset', { defaultValue: '自动生成数据集' })}
</Button>
</Tooltip>
<Menu
anchorEl={anchorEl}
open={open}
onClose={handleMenuClose}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'right'
}}
transformOrigin={{
vertical: 'top',
horizontal: 'right'
}}
>
<MenuItem onClick={handleSingleTurnGenerate}>
<ListItemIcon>
<DatasetIcon fontSize="small" />
</ListItemIcon>
<ListItemText primary={t('questions.generateSingleTurnDataset', { defaultValue: '生成单轮对话数据集' })} />
</MenuItem>
<MenuItem onClick={handleMultiTurnGenerate}>
<ListItemIcon>
<ChatIcon fontSize="small" />
</ListItemIcon>
<ListItemText primary={t('questions.generateMultiTurnDataset', { defaultValue: '生成多轮对话数据集' })} />
</MenuItem>
<MenuItem onClick={handleImageDatasetGenerate}>
<ListItemIcon>
<ImageIcon fontSize="small" />
</ListItemIcon>
<ListItemText primary={t('questions.generateImageDataset', { defaultValue: '生成图像问答数据集' })} />
</MenuItem>
</Menu>
</Box>
</Box>
);
}