Files
memind_adm/src/admin/AdminNav.tsx
T
john 731d93843d feat(admin): add Memory V2 personal controls and Skill Runtime page
Wire admin UI and API routes to restored Memind personal memory and skill
runtime modules, including candidate review and runtime status display.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-13 14:00:20 +08:00

69 lines
1.8 KiB
TypeScript

import { NavLink } from 'react-router-dom';
type NavItem = {
to: string;
label: string;
end?: boolean;
};
type NavSection = {
label?: string;
items: NavItem[];
};
const NAV_SECTIONS: NavSection[] = [
{
items: [{ to: '/', label: '概览', end: true }],
},
{
label: '用户与账户',
items: [{ to: '/users', label: '用户管理' }],
},
{
label: '计费',
items: [{ to: '/billing', label: '计费中心', end: false }],
},
{
label: '平台配置',
items: [
{ to: '/wechat', label: '服务号' },
{ to: '/mindspace', label: 'MindSpace 配置' },
{ to: '/memory-v2', label: 'Memory V2' },
{ to: '/skill-runtime', label: 'Skill Runtime' },
{ to: '/system-tests', label: '系统测试验证' },
{ to: '/capabilities', label: '能力' },
{ to: '/skills', label: '技能' },
{ to: '/policies', label: '策略' },
{ to: '/providers', label: '统一模型中心' },
{ to: '/asset-gateway', label: '资产能力' },
{ to: '/blocked-words', label: '违禁词管理' },
],
},
{
label: 'Plaza',
items: [{ to: '/ops', label: '运营后台', end: false }],
},
];
export function AdminNav() {
return (
<nav className="admin-sidebar-nav" aria-label="管理后台导航">
{NAV_SECTIONS.map((section) => (
<div key={section.label ?? section.items[0]?.to} className="admin-nav-section">
{section.label && <div className="admin-nav-section-label">{section.label}</div>}
{section.items.map((item) => (
<NavLink
key={item.to}
to={item.to}
end={item.end}
className={({ isActive }) => `admin-nav-link${isActive ? ' active' : ''}`}
>
{item.label}
</NavLink>
))}
</div>
))}
</nav>
);
}