ReactNode> = {}
routeConfigs.forEach((r) => { componentMap[r.path] = r.component })
-const menuItems: MenuProps['items'] = routeConfigs.map((r) => ({
- key: r.path,
- icon: r.icon,
- label: r.name,
-}))
+const menuItems: MenuProps['items'] = [
+ { key: '/', icon: , label: '仪表盘' },
+ { key: '/openclaw', icon: , label: 'AI 助手' },
+ { key: '/targets', icon: , label: '评测对象' },
+ {
+ key: 'group-static',
+ icon: ,
+ label: '静态评估',
+ children: [
+ { key: '/scenarios', icon: , label: '评测场景' },
+ { key: '/runs', icon: , label: '评测执行' },
+ { key: '/campaigns', icon: , label: '评估活动' },
+ { key: '/reports', icon: , label: '评测报告' },
+ ],
+ },
+ {
+ key: 'group-intelligent',
+ icon: ,
+ label: '智能评估',
+ children: [
+ { key: '/intelligent-evals', icon: , label: '评估列表' },
+ ],
+ },
+ {
+ key: 'group-config',
+ icon: ,
+ label: '配置中心',
+ children: [
+ { key: '/models', icon: , label: '模型配置' },
+ ],
+ },
+ {
+ key: 'group-system',
+ icon: ,
+ label: '系统',
+ children: [
+ { key: '/files', icon: , label: '原始文件' },
+ ],
+ },
+]
type AuthState = 'checking' | 'login' | 'ready'
@@ -182,6 +223,7 @@ function App() {
theme="dark"
mode="inline"
selectedKeys={[activeKey]}
+ defaultOpenKeys={['group-static', 'group-intelligent', 'group-config', 'group-system']}
items={menuItems}
onClick={handleMenuClick}
style={{
diff --git a/frontend/web/src/index.css b/frontend/web/src/index.css
index 5acfb5c..9e03a68 100644
--- a/frontend/web/src/index.css
+++ b/frontend/web/src/index.css
@@ -39,6 +39,16 @@ body {
.ant-menu-dark .ant-menu-item:hover {
background-color: rgba(255, 255, 255, 0.08) !important;
}
+/* 二级菜单展开背景:与侧边栏 #1e2030 协调,用微暗叠加制造层次而非跳色 */
+.ant-menu-dark .ant-menu-sub {
+ background: rgba(0, 0, 0, 0.15) !important;
+}
+.ant-menu-dark .ant-menu-submenu-title:hover {
+ background-color: rgba(255, 255, 255, 0.08) !important;
+}
+.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title {
+ color: rgba(255, 255, 255, 0.9) !important;
+}
/* editable-card Tabs 默认有 4px paddingTop,导致 TabBar 顶部出现空隙 */
.ant-tabs-editable-card > .ant-tabs-nav {
diff --git a/frontend/web/src/pages/IntelligentEvals.tsx b/frontend/web/src/pages/IntelligentEvals.tsx
new file mode 100644
index 0000000..360d919
--- /dev/null
+++ b/frontend/web/src/pages/IntelligentEvals.tsx
@@ -0,0 +1,14 @@
+import { Result } from 'antd'
+import { BulbOutlined } from '@ant-design/icons'
+
+export default function IntelligentEvalsPage() {
+ return (
+
+ }
+ title="智能评估"
+ subTitle="OpenClaw 驱动的独立评测体系(开发中)"
+ />
+
+ )
+}