feat: 完善开发台功能 - 新增总览页、技能筛选分页、版本管理操作、基本信息独立编辑
- 新增 DevOverviewPage 开发者总览页(指标卡片、待审核项目、最近动态) - 新增 UpdateSkillInfoPage 基本信息编辑页(与版本上传分离) - MySkillsPage 增加关键词/分类/状态筛选和分页 - SkillEditorPage 基本信息只读、增加上架/下架/删除操作、版本拒绝原因展示 - NewVersionPage 简化为仅版本说明和技能包上传 - UploadSkillPage 增加动态分类、图标选择器、移除模型兼容性 - 数据层新增 icon/rejectionReason 字段和 developerOverview 总览数据 - DeveloperPage 侧边栏新增总览导航入口 - 同步更新 openspec 规格文档和 README
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import { useLocation, useNavigate } from 'react-router-dom';
|
||||
import { FiPlus, FiTerminal } from 'react-icons/fi';
|
||||
import { FiPlus, FiTerminal, FiHome } from 'react-icons/fi';
|
||||
import { FaPuzzlePiece } from 'react-icons/fa';
|
||||
import Layout from '../components/Layout.jsx';
|
||||
import SidebarBrand from '../components/layout/SidebarBrand.jsx';
|
||||
@@ -10,12 +10,14 @@ import usePageState from '../hooks/usePageState.js';
|
||||
import { DEVELOPER_PAGES } from '../constants/pages.js';
|
||||
import { DEVELOPER_KEYS } from '../constants/storageKeys.js';
|
||||
import api from '../services/api.js';
|
||||
import DevOverviewPage from './developer/DevOverviewPage.jsx';
|
||||
import MySkillsPage from './developer/MySkillsPage.jsx';
|
||||
import UploadSkillPage from './developer/UploadSkillPage.jsx';
|
||||
import NewVersionPage from './developer/NewVersionPage.jsx';
|
||||
import DevDocsPage from './developer/DevDocsPage.jsx';
|
||||
import DevAccountPage from './developer/DevAccountPage.jsx';
|
||||
import SkillEditorPage from './developer/SkillEditorPage.jsx';
|
||||
import UpdateSkillInfoPage from './developer/UpdateSkillInfoPage.jsx';
|
||||
|
||||
function DeveloperPage() {
|
||||
const location = useLocation();
|
||||
@@ -24,7 +26,7 @@ function DeveloperPage() {
|
||||
// 使用 usePageState 管理页面状态
|
||||
const { currentPage, setCurrentPage } = usePageState({
|
||||
storageKey: DEVELOPER_KEYS.CURRENT_PAGE,
|
||||
defaultPage: 'mySkills',
|
||||
defaultPage: 'overview',
|
||||
pageTitles: DEVELOPER_PAGES,
|
||||
});
|
||||
|
||||
@@ -37,7 +39,7 @@ function DeveloperPage() {
|
||||
|
||||
useEffect(() => {
|
||||
if (location.state?.fromHome) {
|
||||
setCurrentPage('mySkills');
|
||||
setCurrentPage('overview');
|
||||
setCurrentSkillId(null);
|
||||
navigate('.', { replace: true, state: {} });
|
||||
}
|
||||
@@ -68,30 +70,47 @@ function DeveloperPage() {
|
||||
setCurrentPage('newVersion');
|
||||
};
|
||||
|
||||
const openUpdateInfoPage = (skillId) => {
|
||||
setCurrentSkillId(skillId);
|
||||
setCurrentPage('updateInfo');
|
||||
};
|
||||
|
||||
const handleBack = () => {
|
||||
setCurrentPage('mySkills');
|
||||
setCurrentSkillId(null);
|
||||
};
|
||||
|
||||
const handleNewVersionBack = () => {
|
||||
const handleEditorBack = () => {
|
||||
setCurrentPage('skillEditor');
|
||||
setNewVersionSkillName('');
|
||||
};
|
||||
|
||||
const renderPage = () => {
|
||||
switch (currentPage) {
|
||||
case 'overview':
|
||||
return <DevOverviewPage onSkillClick={openSkillEditor} />;
|
||||
case 'mySkills':
|
||||
return <MySkillsPage onSkillClick={openSkillEditor} />;
|
||||
case 'uploadSkill':
|
||||
return <UploadSkillPage />;
|
||||
return <UploadSkillPage onBack={() => switchPage('mySkills')} />;
|
||||
case 'devDocs':
|
||||
return <DevDocsPage />;
|
||||
case 'devAccount':
|
||||
return <DevAccountPage />;
|
||||
case 'skillEditor':
|
||||
return <SkillEditorPage skillId={currentSkillId} onBack={handleBack} onUploadNewVersion={openNewVersionPage} />;
|
||||
return <SkillEditorPage
|
||||
skillId={currentSkillId}
|
||||
onBack={handleBack}
|
||||
onUploadNewVersion={openNewVersionPage}
|
||||
onUpdateInfo={openUpdateInfoPage}
|
||||
/>;
|
||||
case 'newVersion':
|
||||
return <NewVersionPage skillName={newVersionSkillName} onBack={handleNewVersionBack} />;
|
||||
return <NewVersionPage skillName={newVersionSkillName} onBack={handleEditorBack} />;
|
||||
case 'updateInfo':
|
||||
return <UpdateSkillInfoPage
|
||||
skill={api.developer.getSkillById(currentSkillId)}
|
||||
onBack={handleEditorBack}
|
||||
/>;
|
||||
default:
|
||||
return <div>Page not found</div>;
|
||||
}
|
||||
@@ -125,6 +144,12 @@ function DeveloperPage() {
|
||||
))}
|
||||
</div>
|
||||
<div className="chat-sidebar-nav">
|
||||
<SidebarNavItem
|
||||
icon={<FiHome />}
|
||||
label="总览"
|
||||
active={currentPage === 'overview'}
|
||||
onClick={() => switchPage('overview')}
|
||||
/>
|
||||
<SidebarNavItem
|
||||
icon={<FaPuzzlePiece />}
|
||||
label="我的技能"
|
||||
@@ -153,4 +178,4 @@ function DeveloperPage() {
|
||||
);
|
||||
}
|
||||
|
||||
export default DeveloperPage;
|
||||
export default DeveloperPage;
|
||||
|
||||
Reference in New Issue
Block a user