refactor: add top bar and adjust home page layout

- add top bar to show the title of web site
- move ai input and input image into right side drawer
This commit is contained in:
2025-10-28 16:46:45 +08:00
parent 1284698948
commit bd817279db
11 changed files with 280 additions and 33 deletions

View File

@@ -4,12 +4,17 @@ import { Routes, Route, useNavigate, useLocation } from 'react-router-dom';
import SiderMenu from './SiderMenu.tsx';
import MainContent from './MainContent.tsx';
import ResourceList from './ResourceList.tsx';
import TopBar from './TopBar.tsx';
import '../styles/base.css';
import '../styles/layout.css';
const LayoutWrapper: React.FC = () => {
const navigate = useNavigate();
const location = useLocation();
const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false);
const [inputOpen, setInputOpen] = React.useState(false);
const isHome = location.pathname === '/';
const layoutShellRef = React.useRef<HTMLDivElement>(null);
const pathToKey = (path: string) => {
switch (path) {
@@ -39,17 +44,42 @@ const LayoutWrapper: React.FC = () => {
navigate('/');
break;
}
// 切换页面时收起输入抽屉
setInputOpen(false);
};
return (
<Layout className="layout-wrapper app-root">
<SiderMenu onNavigate={handleNavigate} selectedKey={selectedKey} />
<Layout>
<Routes>
<Route path="/" element={<MainContent />} />
<Route path="/resources" element={<ResourceList />} />
<Route path="/menu2" element={<div style={{ padding: 32, color: '#cbd5e1' }}>2</div>} />
</Routes>
{/* 顶部标题栏,位于左侧菜单栏之上 */}
<TopBar
onToggleMenu={() => setMobileMenuOpen((v) => !v)}
onToggleInput={() => isHome && setInputOpen((v) => !v)}
isHome={isHome}
/>
{/* 下方为主布局:左侧菜单 + 右侧内容 */}
<Layout ref={layoutShellRef as any}>
<SiderMenu
onNavigate={handleNavigate}
selectedKey={selectedKey}
mobileOpen={mobileMenuOpen}
onMobileToggle={(open) => setMobileMenuOpen(open)}
/>
<Layout>
<Routes>
<Route
path="/"
element={
<MainContent
inputOpen={inputOpen}
onCloseInput={() => setInputOpen(false)}
containerEl={layoutShellRef.current}
/>
}
/>
<Route path="/resources" element={<ResourceList />} />
<Route path="/menu2" element={<div style={{ padding: 32, color: '#cbd5e1' }}>2</div>} />
</Routes>
</Layout>
</Layout>
</Layout>
);