'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 (
<>
setFormOpen(false)}
onSubmit={handleFormSubmit}
template={editingTemplate}
sourceType={currentTab === 0 ? 'image' : 'text'}
/>
>
);
}