first-update
This commit is contained in:
125
easy-dataset-main/app/projects/[projectId]/settings/page.js
Normal file
125
easy-dataset-main/app/projects/[projectId]/settings/page.js
Normal file
@@ -0,0 +1,125 @@
|
||||
'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 (
|
||||
<Container maxWidth="lg" sx={{ mt: 4, display: 'flex', justifyContent: 'center' }}>
|
||||
<CircularProgress />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
if (!projectExists) {
|
||||
return (
|
||||
<Container maxWidth="lg" sx={{ mt: 4 }}>
|
||||
<Alert severity="error">{t('projects.notExist')}</Alert>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
if (error) {
|
||||
return (
|
||||
<Container maxWidth="lg" sx={{ mt: 4 }}>
|
||||
<Alert severity="error">{error}</Alert>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container maxWidth="lg" sx={{ mt: 4 }}>
|
||||
<Paper sx={{ mb: 4 }}>
|
||||
<Tabs
|
||||
value={activeTab}
|
||||
onChange={handleTabChange}
|
||||
variant="fullWidth"
|
||||
textColor="primary"
|
||||
indicatorColor="primary"
|
||||
aria-label={t('settings.tabsAriaLabel')}
|
||||
>
|
||||
<Tab value={TABS.BASIC} label={t('settings.basicInfo')} />
|
||||
<Tab value={TABS.MODEL} label={t('settings.modelConfig')} />
|
||||
<Tab value={TABS.TASK} label={t('settings.taskConfig')} />
|
||||
<Tab value={TABS.PROMPTS} label={t('settings.promptConfig')} />
|
||||
</Tabs>
|
||||
</Paper>
|
||||
|
||||
{activeTab === TABS.BASIC && <BasicSettings projectId={projectId} />}
|
||||
|
||||
{activeTab === TABS.MODEL && <ModelSettings projectId={projectId} />}
|
||||
|
||||
{activeTab === TABS.TASK && <TaskSettings projectId={projectId} />}
|
||||
|
||||
{activeTab === TABS.PROMPTS && <PromptSettings projectId={projectId} />}
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user