import * as React from 'react'; import { Layout, Menu, Button } from 'antd'; import { RobotOutlined, ReadOutlined, FileSearchOutlined, MenuFoldOutlined, MenuUnfoldOutlined, CheckSquareOutlined } from '@ant-design/icons'; import router from '@/router'; import { JSX } from 'react/jsx-runtime'; import LocalStorage from '@/LocalStorage'; const Sider = Layout.Sider; interface MenuItem { key : string; icon : JSX.Element; label : string; onClick : () => void; } interface Props { selectedKey : string, onChangeSelectedKey : ( path : string, menuLevel : number ) => void, openKeys : string[], onOpenChange : ( openKeys : string[] ) => void, collapsed : boolean, onClickCollapsed : () => void, menuType : number; // 新增 prop }; const Nav : React.FC = ( props : Props ) => { const { selectedKey, onChangeSelectedKey, openKeys, onOpenChange, collapsed, onClickCollapsed, menuType } = props; const dsItems : MenuItem[] = [ { key: '/deepseek/questionAnswer', icon: , label: '应用广场', onClick: () => { router.navigate( { pathname: '/deepseek/questionAnswer' } ) } }, { key: '/deepseek/knowledgeLib', icon: , label: '知识库', onClick: () => { router.navigate( { pathname: '/deepseek/knowledgeLib' } ) } }, { key: '/deepseek/dataExport', icon: , label: '数据导出', onClick: () => { router.navigate( { pathname: '/deepseek/dataExport' } ) } }, { key: '/deepseek/audit', icon: , label: '应用审核', onClick: () => { router.navigate( { pathname: '/deepseek/audit' } ) } }, ].filter( item => { if ( item.key === '/deepseek/questionAnswer' ) { return LocalStorage.getStatusFlag( 'deepseek:application:list' ); } if ( item.key === '/deepseek/knowledgeLib' ) { return LocalStorage.getStatusFlag( 'deepseek:knowledge:list' ); } if ( item.key === '/deepseek/dataExport' ) { return LocalStorage.getStatusFlag( 'deepseek:dialog:list' ); } if ( item.key === '/deepseek/audit' ) { return LocalStorage.getStatusFlag( 'system:audit:list' ); } return true; // 其他菜单默认显示 } ); const zpItems : MenuItem[] = [ { key: '/zhipu/questionAnswer', icon: , label: '问答应用', onClick: () => { router.navigate( { pathname: '/zhipu/questionAnswer' } ) } }, { key: '/zhipu/knowledgeLib', icon: , label: '知识库', onClick: () => { router.navigate( { pathname: '/zhipu/knowledgeLib' } ) } }, { key: '/zhipu/dataExport', icon: , label: '数据导出', onClick: () => { router.navigate( { pathname: '/zhipu/dataExport' } ) } } ]; const items = menuType === 1 ? dsItems : zpItems; React.useEffect( () => { // 当selectedKey变化时,确保路由同步 if ( selectedKey && !window.location.pathname.startsWith( selectedKey ) ) { router.navigate( selectedKey ); } }, [ selectedKey ] ); return (
{ const menuLevel = item.keyPath.length > 1 ? 2 : 1; onChangeSelectedKey( item.key, menuLevel ); } } openKeys={ openKeys } onOpenChange={ ( keys ) => { // 点击菜单,收起其他展开的所有菜单 const latestOpenKey = keys.find( ( key ) => openKeys.indexOf( key ) === - 1 ); onOpenChange( latestOpenKey ? [ latestOpenKey ] : [] ); } } items={ items } />
); }; export default Nav;