Add dynamic menu. Add slogan to home page #8

Merged
FatttSnake merged 4 commits from FatttSnake into dev 2023-09-07 18:15:40 +08:00
3 changed files with 42 additions and 35 deletions
Showing only changes of commit e3d2a089f6 - Show all commits

View File

@@ -1,6 +1,7 @@
import React, { createContext } from 'react'
import '@/assets/css/header.scss'
import LoadingMask from '@/components/LoadingMask.tsx'
import router from '@/router'
export const MainFrameworkContext = createContext<{
navbarHiddenState: {
@@ -16,6 +17,8 @@ export const MainFrameworkContext = createContext<{
const MainFramework: React.FC = () => {
const [navbarHidden, setNavbarHidden] = useState(false)
const routeId = useMatches()[1].id
const routeChildren = router.routes[0].children?.find((value) => value.id === routeId)?.children
return (
<>
@@ -26,36 +29,20 @@ const MainFramework: React.FC = () => {
</a>
<nav>
<ul className={'menu'}>
<li className={'item'}>
<NavLink
to={''}
className={({ isActive, isPending }) =>
isPending ? 'pending' : isActive ? 'active' : ''
}
>
</NavLink>
</li>
<li className={'item'}>
<NavLink
to={'https://blog.fatweb.top'}
className={({ isActive, isPending }) =>
isPending ? 'pending' : isActive ? 'active' : ''
}
>
</NavLink>
</li>
<li className={'item'}>
<NavLink
to={'project'}
className={({ isActive, isPending }) =>
isPending ? 'pending' : isActive ? 'active' : ''
}
>
App
</NavLink>
</li>
{routeChildren?.map((route) => {
return (
<li className={'item'}>
<NavLink
to={route.path ?? ''}
className={({ isActive, isPending }) =>
isPending ? 'pending' : isActive ? 'active' : ''
}
>
{(route.handle as RouteHandle).name}
</NavLink>
</li>
)
})}
</ul>
</nav>
</header>

View File

@@ -25,6 +25,17 @@ const routes: RouteObject[] = [
id: 'home',
Component: React.lazy(() => import('@/components/Home')),
handle: {
name: '主页',
menu: true,
auth: false
}
},
{
path: 'https://blog.fatweb.top',
id: 'blog',
handle: {
name: '博客',
menu: true,
auth: false
}
},
@@ -33,6 +44,8 @@ const routes: RouteObject[] = [
id: 'project',
Component: React.lazy(() => import('@/components/Project')),
handle: {
name: '项目',
menu: true,
auth: false
}
}

17
src/vite-env.d.ts vendored
View File

@@ -1,12 +1,14 @@
/// <reference types="vite/client" />
type Captcha = {
value: string
base64Src: string
type RouteHandle = {
name?: string
menu?: boolean
auth?: boolean
}
type RouteHandle = {
auth: boolean
interface FitFullscreenProps extends PropsWithChildren {
zIndex?: number
backgroundColor?: string
}
type _Response<T> = {
@@ -15,6 +17,11 @@ type _Response<T> = {
data: T | null
}
type Captcha = {
value: string
base64Src: string
}
type Token = {
token: string
}