2026-05-15 09:46:42 +08:00
|
|
|
import { Menu } from 'antd'
|
|
|
|
|
import { useNavigate, useLocation } from 'react-router-dom'
|
|
|
|
|
import {
|
|
|
|
|
DashboardOutlined,
|
|
|
|
|
FileTextOutlined,
|
|
|
|
|
BookOutlined,
|
|
|
|
|
SyncOutlined,
|
|
|
|
|
UserOutlined,
|
|
|
|
|
TeamOutlined,
|
|
|
|
|
} from '@ant-design/icons'
|
2026-05-21 19:47:21 +08:00
|
|
|
import useAuthStore from '../../stores/authStore'
|
2026-05-15 09:46:42 +08:00
|
|
|
|
|
|
|
|
function SideNav() {
|
|
|
|
|
const navigate = useNavigate()
|
|
|
|
|
const location = useLocation()
|
2026-05-21 19:47:21 +08:00
|
|
|
const { user } = useAuthStore()
|
|
|
|
|
|
|
|
|
|
const allMenuItems = [
|
|
|
|
|
{ key: '/dashboard', icon: <DashboardOutlined />, label: '仪表盘' },
|
|
|
|
|
{ key: '/editor-desk', icon: <FileTextOutlined />, label: '责编录入' },
|
|
|
|
|
{ key: '/tps', icon: <FileTextOutlined />, label: 'TPS 选题策划' },
|
|
|
|
|
{ key: '/knowledge', icon: <BookOutlined />, label: '知识库' },
|
|
|
|
|
{ key: '/doco', icon: <SyncOutlined />, label: '文稿对齐' },
|
|
|
|
|
{ key: '/editor-home', icon: <UserOutlined />, label: '个人首页' },
|
|
|
|
|
{ key: '/users', icon: <TeamOutlined />, label: '用户管理' },
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
// 按角色过滤菜单项
|
|
|
|
|
const visibleItems = allMenuItems.filter(item => {
|
|
|
|
|
// /dashboard 三角色都可见
|
|
|
|
|
if (item.key === '/dashboard') return true
|
|
|
|
|
// /users 仅 zhipianren
|
|
|
|
|
if (item.key === '/users') return user?.role === 'zhipianren'
|
|
|
|
|
// /editor-desk 仅 zhipianren + zebian
|
|
|
|
|
if (item.key === '/editor-desk') return user?.role === 'zhipianren' || user?.role === 'zebian'
|
|
|
|
|
// 其余三角色都可见(保留后期 Phase 入口)
|
|
|
|
|
return true
|
|
|
|
|
})
|
2026-05-15 09:46:42 +08:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className="side-nav">
|
|
|
|
|
<div className="side-nav-logo">
|
|
|
|
|
<span className="logo-text">军事科技</span>
|
|
|
|
|
<span className="logo-sub">TPS 工作台</span>
|
|
|
|
|
</div>
|
|
|
|
|
<Menu
|
|
|
|
|
mode="inline"
|
|
|
|
|
selectedKeys={[location.pathname]}
|
2026-05-21 19:47:21 +08:00
|
|
|
items={visibleItems}
|
2026-05-15 09:46:42 +08:00
|
|
|
onClick={({ key }) => navigate(key)}
|
|
|
|
|
className="side-nav-menu"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default SideNav
|