diff --git a/frontend/src/admin/AdminLayout.tsx b/frontend/src/admin/AdminLayout.tsx index dcf30a3..1948a68 100644 --- a/frontend/src/admin/AdminLayout.tsx +++ b/frontend/src/admin/AdminLayout.tsx @@ -10,6 +10,32 @@ import { NavLink, Outlet, useLocation } from 'react-router-dom' import { fetchAuthState, logout, UNAUTHORIZED_EVENT } from './api' import { fetchHealth } from './dal' import Login from './Login' +import { useCommandPalette, CommandPalette } from './useCommandPalette' + +const NAV_PAGES: Array<{ to: string; label: string; group: string }> = [ + { to: '/admin', label: '仪表盘', group: '概览' }, + { to: '/admin/collection', label: '数据采集', group: '数据流水线' }, + { to: '/admin/data-completeness', label: '数据完整性', group: '数据流水线' }, + { to: '/admin/predictions', label: '预测管理', group: '数据流水线' }, + { to: '/admin/backtest', label: '回测', group: '数据流水线' }, + { to: '/admin/monitoring', label: '监控', group: '评估与监控' }, + { to: '/admin/eval', label: '评估', group: '评估与监控' }, + { to: '/admin/settings', label: '设置', group: '系统' }, + { to: '/admin/logs', label: '日志', group: '系统' }, +] + +// 路由 → 面包屑标签 +const ROUTE_LABELS: Record = { + '/admin': '仪表盘', + '/admin/collection': '数据采集', + '/admin/data-completeness': '数据完整性', + '/admin/predictions': '预测管理', + '/admin/backtest': '回测', + '/admin/monitoring': '监控', + '/admin/settings': '设置', + '/admin/logs': '日志', + '/admin/eval': '评估', +} const NAV_SECTIONS: { title: string; items: { to: string; label: string; icon: string; end?: boolean }[] }[] = [ { @@ -32,9 +58,8 @@ const NAV_SECTIONS: { title: string; items: { to: string; label: string; icon: s { title: '系统设置', items: [ - { to: '/admin/data-sources', label: '数据源', icon: '◫' }, - { to: '/admin/llm-config', label: 'LLM 配置', icon: '◬' }, - { to: '/admin/config', label: '系统配置', icon: '◑' }, + { to: '/admin/settings', label: '设置', icon: '◑' }, + { to: '/admin/logs', label: '日志', icon: '▤' }, ], }, ] @@ -54,6 +79,7 @@ export default function AdminLayout() { const [healthOk, setHealthOk] = useState(null) const [authed, setAuthed] = useState(null) const location = useLocation() + const palette = useCommandPalette(NAV_PAGES) // 登录门禁:挂载时探测会话,收到 401 事件(会话过期)自动切回登录页 useEffect(() => { @@ -159,10 +185,10 @@ export default function AdminLayout() { to="/admin" end className={({ isActive }) => - `flex min-h-[40px] items-center gap-2.5 px-3 text-sm transition-colors ${ + `flex min-h-[40px] items-center gap-2.5 border-l-4 px-3 text-sm transition-colors ${ isActive - ? 'bg-press-wash/60 font-medium text-press' - : 'text-ink-500 hover:bg-paper-100 hover:text-ink-900' + ? 'border-press bg-press-wash/60 font-medium text-press' + : 'border-transparent text-ink-500 hover:bg-paper-100 hover:text-ink-900' }` } > @@ -181,19 +207,13 @@ export default function AdminLayout() { - `flex min-h-[40px] items-center gap-2.5 px-3 text-sm transition-colors ${ + `flex min-h-[40px] items-center gap-2.5 border-l-4 px-3 text-sm transition-colors ${ isActive - ? 'bg-press-wash/60 font-medium text-press' - : 'text-ink-500 hover:bg-paper-100 hover:text-ink-900' + ? 'border-press bg-press-wash/60 font-medium text-press' + : 'border-transparent text-ink-500 hover:bg-paper-100 hover:text-ink-900' }` } > -