fix: replicate original nav - SubNavBar on sub-pages + external links on home

This commit is contained in:
Chen Gu
2026-05-09 14:49:21 +08:00
parent 27de14f752
commit 61a8245582
3 changed files with 63 additions and 17 deletions

View File

@@ -0,0 +1,54 @@
import React from 'react';
import { useNavigate, useLocation } from 'react-router-dom';
interface DockItem {
id: string;
label: string;
}
const NAV_ITEMS: DockItem[] = [
{ id: 'optimization', label: '快速优化' },
{ id: 'exposure', label: '画面滤镜' },
{ id: 'filter-community', label: '滤镜社区' },
{ id: 'weapon', label: '改枪方案' },
{ id: 'settings', label: '设置' },
];
const PAGE_ID_MAP: Record<string, string> = {
'/optimization': 'optimization',
'/exposure': 'exposure',
'/filter-community': 'filter-community',
'/weapon': 'weapon',
'/scheme-detail': 'weapon',
'/settings': 'settings',
};
export default function SubNavBar() {
const navigate = useNavigate();
const location = useLocation();
const currentPage = PAGE_ID_MAP[location.pathname] || '';
if (!currentPage || currentPage === 'home') return null;
return (
<div className="fixed bottom-0 left-0 right-0 z-30 flex justify-center pb-1.5">
<div className="flex border border-[#333] bg-[#1a1a1a] relative">
{NAV_ITEMS.map(item => {
const isActive = currentPage === item.id;
return (
<button
key={item.id}
onClick={() => navigate('/' + item.id)}
className={`relative px-3 py-1.5 text-[8px] font-semibold tracking-[0.1em] uppercase
border-r border-[#333] last:border-r-0 transition-colors duration-75
${isActive ? 'bg-[#ff4500]/10 text-[#ff4500]' : 'text-[#555] hover:text-[#888] hover:bg-[#222]'}`}
>
{isActive && <span className="absolute top-0 left-0 right-0 h-[1px] bg-[#ff4500]" />}
{item.label}
</button>
);
})}
</div>
</div>
);
}

View File

@@ -60,22 +60,12 @@ export default function Home() {
/> />
</div> </div>
{/* 社区动态 */} {/* 外部链接(对齐原版) */}
<Card className="p-3 mt-1" serial="FEED-01"> <div className="flex items-center justify-center gap-6 border border-[#333] p-2">
<div className="flex items-center justify-between mb-2"> <a href="#" className="text-[8px] font-semibold tracking-[0.1em] uppercase text-[#555] hover:text-[#888] transition-colors duration-75"></a>
<h2 className="text-[9px] font-semibold tracking-[0.15em] uppercase text-[#888]"></h2> <a href="#" className="text-[8px] font-semibold tracking-[0.1em] uppercase text-[#555] hover:text-[#888] transition-colors duration-75"></a>
<span className="tech-sn"></span> <a href="#" className="text-[8px] font-semibold tracking-[0.1em] uppercase text-[#555] hover:text-[#888] transition-colors duration-75"></a>
</div> </div>
<div className="space-y-1.5">
{[1, 2, 3].map(i => (
<div key={i} className="flex items-center gap-2 text-[9px] text-[#555] border-b border-[#333] pb-1 last:border-b-0 last:pb-0">
<span className="w-1 h-1 bg-[#333] rounded-full" />
<span className="font-mono text-[8px] text-[#444]">[{String(i).padStart(4, '0')}]</span>
<span> #{i}</span>
</div>
))}
</div>
</Card>
{/* 底部启动按钮 */} {/* 底部启动按钮 */}
<div className="flex gap-2 border border-[#333] p-2"> <div className="flex gap-2 border border-[#333] p-2">

View File

@@ -2,6 +2,7 @@ import React, { Suspense, lazy } from 'react';
import { Routes, Route, useNavigate } from 'react-router-dom'; import { Routes, Route, useNavigate } from 'react-router-dom';
import PageContainer from './components/layout/PageContainer'; import PageContainer from './components/layout/PageContainer';
import TopHud from './components/layout/TopHud'; import TopHud from './components/layout/TopHud';
import SubNavBar from './components/layout/SubNavBar';
const Home = lazy(() => import('./pages/Home')); const Home = lazy(() => import('./pages/Home'));
const Optimization = lazy(() => import('./pages/Optimization')); const Optimization = lazy(() => import('./pages/Optimization'));
@@ -44,11 +45,12 @@ function PageShell({ children, currentPage }: { children: React.ReactNode; curre
]} ]}
onBack={isHome ? undefined : () => navigate(-1)} onBack={isHome ? undefined : () => navigate(-1)}
/> />
<PageContainer> <PageContainer className={isHome ? '' : 'pb-8'}>
<Suspense fallback={<LoadingFallback />}> <Suspense fallback={<LoadingFallback />}>
{children} {children}
</Suspense> </Suspense>
</PageContainer> </PageContainer>
<SubNavBar />
</div> </div>
); );
} }