'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 && }
);
}