'use client'; import { useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, Box, Typography, useTheme, CircularProgress, FormControl, InputLabel, Select, MenuItem } from '@mui/material'; import { useRouter } from 'next/navigation'; import { useTranslation } from 'react-i18next'; export default function CreateProjectDialog({ open, onClose }) { const { t } = useTranslation(); const theme = useTheme(); const router = useRouter(); const [loading, setLoading] = useState(false); const [projects, setProjects] = useState([]); const [formData, setFormData] = useState({ name: '', description: '', reuseConfigFrom: '' }); const [error, setError] = useState(null); // 获取项目列表 useEffect(() => { const fetchProjects = async () => { try { const response = await fetch('/api/projects'); if (response.ok) { const data = await response.json(); setProjects(data); } } catch (error) { console.error('获取项目列表失败:', error); } }; fetchProjects(); }, []); const handleChange = e => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleSubmit = async e => { e.preventDefault(); setLoading(true); setError(null); try { const response = await fetch('/api/projects', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); if (!response.ok) { throw new Error(t('projects.createFailed')); } const data = await response.json(); router.push(`/projects/${data.id}/settings?tab=model`); } catch (err) { console.error(t('projects.createError'), err); setError(err.message); } finally { setLoading(false); } }; return ( {t('projects.createNew')}
{t('projects.reuseConfig')} {error && ( {error} )}
); }