From 2eadd83304f4c26b339d0d81fc607123fed8df40 Mon Sep 17 00:00:00 2001 From: WorkBuddy Date: Thu, 9 Jul 2026 21:53:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=89=8D=E5=8F=B0=E4=BE=A7=E8=BE=B9?= =?UTF-8?q?=E6=A0=8F=E6=94=B9=E4=B8=BA=E5=88=86=E7=BB=84=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=EF=BC=8C=E5=BE=AE=E4=BF=A1=E6=9C=BA=E5=99=A8=E4=BA=BA=E5=BD=92?= =?UTF-8?q?=E5=85=A5=20IM=20Bot=20=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/layout/FrontLayout.css | 8 +++ .../src/components/layout/FrontLayout.tsx | 66 ++++++++++++------- 2 files changed, 50 insertions(+), 24 deletions(-) diff --git a/frontend/src/components/layout/FrontLayout.css b/frontend/src/components/layout/FrontLayout.css index 8129412..8e27432 100644 --- a/frontend/src/components/layout/FrontLayout.css +++ b/frontend/src/components/layout/FrontLayout.css @@ -80,6 +80,14 @@ flex-direction: column; gap: 2px; } +.nav-group-title { + padding: 14px var(--space-md) 6px; + font-size: 11px; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + color: #9CA3AF; +} .nav-item { position: relative; diff --git a/frontend/src/components/layout/FrontLayout.tsx b/frontend/src/components/layout/FrontLayout.tsx index 885c921..0d4adc2 100644 --- a/frontend/src/components/layout/FrontLayout.tsx +++ b/frontend/src/components/layout/FrontLayout.tsx @@ -3,16 +3,31 @@ import { Outlet, NavLink, useNavigate } from 'react-router-dom'; import { useAuth } from '@/contexts/AuthContext'; import './FrontLayout.css'; -const navItems = [ - { path: '/chat', icon: 'chat', label: 'AI聊天' }, - { path: '/channels', icon: 'channel', label: 'IM Bot' }, - { path: '/knowledge', icon: 'knowledge', label: '知识库' }, - { path: '/market', icon: 'market', label: '技能市场' }, - { path: '/token', icon: 'token', label: 'Token驾驶舱' }, - { path: '/pricing', icon: 'pricing', label: '付费中心' }, - { path: '/assets', icon: 'assets', label: '资产文件' }, - { path: '/evolution', icon: 'evolution', label: 'AI自进化' }, - { path: '/wechat-bot', icon: 'wechat', label: '微信机器人' }, +const navGroups = [ + { + title: '智能体', + items: [ + { path: '/chat', icon: 'chat', label: 'AI聊天' }, + { path: '/knowledge', icon: 'knowledge', label: '知识库' }, + { path: '/market', icon: 'market', label: '技能市场' }, + { path: '/evolution', icon: 'evolution', label: 'AI自进化' }, + ], + }, + { + title: 'IM Bot', + items: [ + { path: '/channels', icon: 'channel', label: '频道管理' }, + { path: '/wechat-bot', icon: 'wechat', label: '微信机器人' }, + ], + }, + { + title: '资源中心', + items: [ + { path: '/assets', icon: 'assets', label: '资产文件' }, + { path: '/token', icon: 'token', label: 'Token驾驶舱' }, + { path: '/pricing', icon: 'pricing', label: '付费中心' }, + ], + }, ]; const bottomItems = [ @@ -80,20 +95,23 @@ const FrontLayout: React.FC = () => { {!collapsed && 返回首页} -
- {navItems.map(item => ( - `nav-item ${isActive ? 'active' : ''}`} - title={collapsed ? item.label : undefined} - > - {iconPaths[item.icon]} - {!collapsed && {item.label}} - {!collapsed && } - - ))} -
+ {navGroups.map(group => ( +
+ {!collapsed &&
{group.title}
} + {group.items.map(item => ( + `nav-item ${isActive ? 'active' : ''}`} + title={collapsed ? item.label : undefined} + > + {iconPaths[item.icon]} + {!collapsed && {item.label}} + {!collapsed && } + + ))} +
+ ))}
{bottomItems.map(item => (