Initial commit: tkmind admin frontend (React + Vite).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-06-16 19:44:31 +08:00
commit 8ad1a8a8da
30 changed files with 5981 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
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: '/admin', label: '概览', end: true }],
},
{
label: '用户与账户',
items: [{ to: '/admin/users', label: '用户管理' }],
},
{
label: '计费',
items: [{ to: '/admin/billing', label: '计费中心', end: false }],
},
{
label: '平台配置',
items: [
{ to: '/admin/capabilities', label: '能力' },
{ to: '/admin/skills', label: '技能' },
{ to: '/admin/policies', label: '策略' },
{ to: '/admin/providers', label: 'LLM Provider' },
],
},
];
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>
);
}