'use client'; import { useState, useEffect } from 'react'; import { Container, Typography, Box, Tabs, Tab, Paper, Alert, CircularProgress } from '@mui/material'; import { useSearchParams, useRouter } from 'next/navigation'; import { useTranslation } from 'react-i18next'; // 导入设置组件 import BasicSettings from '@/components/settings/BasicSettings'; import ModelSettings from '@/components/settings/ModelSettings'; import TaskSettings from '@/components/settings/TaskSettings'; import PromptSettings from './components/PromptSettings'; // 定义 TAB 枚举 const TABS = { BASIC: 'basic', MODEL: 'model', TASK: 'task', PROMPTS: 'prompts' }; export default function SettingsPage({ params }) { const { t } = useTranslation(); const { projectId } = params; const searchParams = useSearchParams(); const router = useRouter(); const [activeTab, setActiveTab] = useState(TABS.BASIC); const [projectExists, setProjectExists] = useState(true); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // 从 URL hash 中获取当前 tab useEffect(() => { const tab = searchParams.get('tab'); if (tab && Object.values(TABS).includes(tab)) { setActiveTab(tab); } }, [searchParams]); // 检查项目是否存在 useEffect(() => { async function checkProject() { try { setLoading(true); const response = await fetch(`/api/projects/${projectId}`); if (!response.ok) { if (response.status === 404) { setProjectExists(false); } else { throw new Error(t('projects.fetchFailed')); } } else { setProjectExists(true); } } catch (error) { console.error('获取项目详情出错:', error); setError(error.message); } finally { setLoading(false); } } checkProject(); }, [projectId, t]); // 处理 tab 切换 const handleTabChange = (event, newValue) => { setActiveTab(newValue); // 更新 URL hash router.push(`/projects/${projectId}/settings?tab=${newValue}`); }; if (loading) { return ( ); } if (!projectExists) { return ( {t('projects.notExist')} ); } if (error) { return ( {error} ); } return ( {activeTab === TABS.BASIC && } {activeTab === TABS.MODEL && } {activeTab === TABS.TASK && } {activeTab === TABS.PROMPTS && } ); }