feat: SideNav 按 role 过滤菜单,/users 仅 zhipianren,/editor-desk 仅 zhipianren+zebian
This commit is contained in:
@@ -8,9 +8,16 @@ import {
|
|||||||
UserOutlined,
|
UserOutlined,
|
||||||
TeamOutlined,
|
TeamOutlined,
|
||||||
} from '@ant-design/icons'
|
} from '@ant-design/icons'
|
||||||
|
import useAuthStore from '../../stores/authStore'
|
||||||
|
|
||||||
const menuItems = [
|
function SideNav() {
|
||||||
|
const navigate = useNavigate()
|
||||||
|
const location = useLocation()
|
||||||
|
const { user } = useAuthStore()
|
||||||
|
|
||||||
|
const allMenuItems = [
|
||||||
{ key: '/dashboard', icon: <DashboardOutlined />, label: '仪表盘' },
|
{ key: '/dashboard', icon: <DashboardOutlined />, label: '仪表盘' },
|
||||||
|
{ key: '/editor-desk', icon: <FileTextOutlined />, label: '责编录入' },
|
||||||
{ key: '/tps', icon: <FileTextOutlined />, label: 'TPS 选题策划' },
|
{ key: '/tps', icon: <FileTextOutlined />, label: 'TPS 选题策划' },
|
||||||
{ key: '/knowledge', icon: <BookOutlined />, label: '知识库' },
|
{ key: '/knowledge', icon: <BookOutlined />, label: '知识库' },
|
||||||
{ key: '/doco', icon: <SyncOutlined />, label: '文稿对齐' },
|
{ key: '/doco', icon: <SyncOutlined />, label: '文稿对齐' },
|
||||||
@@ -18,9 +25,17 @@ const menuItems = [
|
|||||||
{ key: '/users', icon: <TeamOutlined />, label: '用户管理' },
|
{ key: '/users', icon: <TeamOutlined />, label: '用户管理' },
|
||||||
]
|
]
|
||||||
|
|
||||||
function SideNav() {
|
// 按角色过滤菜单项
|
||||||
const navigate = useNavigate()
|
const visibleItems = allMenuItems.filter(item => {
|
||||||
const location = useLocation()
|
// /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
|
||||||
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="side-nav">
|
<div className="side-nav">
|
||||||
@@ -31,7 +46,7 @@ function SideNav() {
|
|||||||
<Menu
|
<Menu
|
||||||
mode="inline"
|
mode="inline"
|
||||||
selectedKeys={[location.pathname]}
|
selectedKeys={[location.pathname]}
|
||||||
items={menuItems}
|
items={visibleItems}
|
||||||
onClick={({ key }) => navigate(key)}
|
onClick={({ key }) => navigate(key)}
|
||||||
className="side-nav-menu"
|
className="side-nav-menu"
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user