feat: 实现技能审核全流程 - 新增审核管理模块、技能状态机、版本审核机制

- 新增审核管理页面:版本审核列表、下架审核列表、审核详情页
- 完善技能状态机:开发中/已上架/下架审核中/已下架四种状态
- 实现版本审核机制:审核中/通过/拒绝/撤销四种状态
- 更新 README:详细记录技能开发流程与审核机制
- 优化技能详情页:根据状态展示不同操作按钮
- 完善我的技能列表:状态筛选与操作限制
- 新增上传新版本页面:分离版本上传与基本信息编辑
- 更新 openspec 规范:技能审核流程与状态定义
This commit is contained in:
2026-03-20 17:54:51 +08:00
parent 9c487f3ed6
commit fb9616a10f
18 changed files with 938 additions and 119 deletions

View File

@@ -1,6 +1,6 @@
import { useState, useEffect } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { FiHome, FiBarChart2, FiUsers, FiList, FiActivity } from 'react-icons/fi';
import { FiHome, FiBarChart2, FiUsers, FiList, FiCheckCircle, FiActivity } from 'react-icons/fi';
import Layout from '../components/Layout.jsx';
import SidebarBrand from '../components/layout/SidebarBrand.jsx';
import SidebarUser from '../components/layout/SidebarUser.jsx';
@@ -16,6 +16,8 @@ import AddDepartmentPage from './admin/AddDepartmentPage.jsx';
import AddUserPage from './admin/AddUserPage.jsx';
import AddProjectPage from './admin/AddProjectPage.jsx';
import AdminLogsPage from './admin/AdminLogsPage.jsx';
import ConsoleReviewListPage from './console/ConsoleReviewListPage.jsx';
import ConsoleReviewDetailPage from './console/ConsoleReviewDetailPage.jsx';
function AdminPage() {
const location = useLocation();
@@ -28,12 +30,26 @@ function AdminPage() {
});
const [editData, setEditData] = useState(null);
const [reviewType, setReviewType] = useState(null);
const [reviewId, setReviewId] = useState(null);
const navigateTo = (page, data) => {
setEditData(data || null);
setCurrentPage(page);
};
const handleReviewClick = (type, id) => {
setReviewType(type);
setReviewId(id);
navigateTo('reviewDetail');
};
const handleReviewBack = () => {
setReviewType(null);
setReviewId(null);
navigateTo('reviewList');
};
const renderPage = () => {
switch (currentPage) {
case 'overview':
@@ -55,6 +71,14 @@ function AdminPage() {
/>;
case 'adminLogs':
return <AdminLogsPage />;
case 'reviewList':
return <ConsoleReviewListPage onReviewClick={handleReviewClick} />;
case 'reviewDetail':
return <ConsoleReviewDetailPage
type={reviewType}
reviewId={reviewId}
onBack={handleReviewBack}
/>;
case 'addDepartment':
return <AddDepartmentPage
onBack={() => navigateTo('departments')}
@@ -81,6 +105,9 @@ function AdminPage() {
const nameMap = { addDepartment: '部门', addUser: '用户', addProject: '项目' };
return prefix + nameMap[currentPage];
}
if (currentPage === 'reviewDetail') {
return reviewType === 'version' ? '版本审核' : '下架审核';
}
return ADMIN_PAGES[currentPage]?.title || '';
};
@@ -99,6 +126,15 @@ function AdminPage() {
iconClassName="admin-nav-icon"
textClassName="admin-nav-text"
/>
<SidebarNavItem
icon={<FiCheckCircle />}
label="审核管理"
active={currentPage === 'reviewList' || currentPage === 'reviewDetail'}
onClick={() => navigateTo('reviewList')}
itemClassName="admin-nav-item"
iconClassName="admin-nav-icon"
textClassName="admin-nav-text"
/>
<SidebarNavItem
icon={<FiBarChart2 />}
label="部门管理"