'use client'; import { useState } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Box, List, ListItem, ListItemText, ListItemSecondaryAction, IconButton, Chip, Typography, Alert, Tabs, Tab } from '@mui/material'; import EditIcon from '@mui/icons-material/Edit'; import DeleteIcon from '@mui/icons-material/Delete'; import AddIcon from '@mui/icons-material/Add'; import { useTranslation } from 'react-i18next'; import TemplateFormDialog from './TemplateFormDialog'; export default function TemplateManagementDialog({ open, onClose, templates, onCreateTemplate, onUpdateTemplate, onDeleteTemplate, loading }) { const { t } = useTranslation(); const [formOpen, setFormOpen] = useState(false); const [editingTemplate, setEditingTemplate] = useState(null); const [currentTab, setCurrentTab] = useState(0); // 0: image, 1: text const handleCreate = () => { setEditingTemplate(null); setFormOpen(true); }; const handleEdit = template => { setEditingTemplate(template); setFormOpen(true); }; const handleDelete = async templateId => { const confirmed = window.confirm(t('questions.template.deleteConfirm')); if (confirmed) { await onDeleteTemplate(templateId); } }; const handleFormSubmit = async data => { // 根据当前tab添加sourceType const sourceType = currentTab === 0 ? 'image' : 'text'; const templateData = { ...data, sourceType }; if (editingTemplate) { await onUpdateTemplate(editingTemplate.id, templateData); } else { await onCreateTemplate(templateData); } setFormOpen(false); }; const getAnswerTypeLabel = type => { const labels = { text: t('questions.template.answerType.text'), label: t('questions.template.answerType.tags'), custom_format: t('questions.template.answerType.customFormat') }; return labels[type] || type; }; // 按数据源类型分组模板 const imageTemplates = templates.filter(t => t.sourceType === 'image'); const textTemplates = templates.filter(t => t.sourceType === 'text'); const currentTemplates = currentTab === 0 ? imageTemplates : textTemplates; const renderTemplateList = templateList => { if (templateList.length === 0) { return {t('questions.template.noTemplates')}; } return ( {templateList.map(template => ( {template.question} {template.usageCount > 0 && ( )} } secondary={template.description} /> handleEdit(template)} sx={{ mr: 1 }}> handleDelete(template.id)} disabled={template.usageCount > 0}> ))} ); }; return ( <> {t('questions.template.management')} setCurrentTab(newValue)}> {renderTemplateList(currentTemplates)} setFormOpen(false)} onSubmit={handleFormSubmit} template={editingTemplate} sourceType={currentTab === 0 ? 'image' : 'text'} /> ); }