import CommonHead from '@/components/CommonHead' import { useState, createContext, useContext, useEffect } from 'react' import Footer from './components/Footer' import InfoCard from './components/InfoCard' import RevolverMaps from './components/RevolverMaps' import CONFIG_GITBOOK from './config_gitbook' import TopNavBar from './components/TopNavBar' import SearchInput from './components/SearchInput' import BottomMenuBar from './components/BottomMenuBar' import { useGlobal } from '@/lib/global' import Live2D from '@/components/Live2D' import BLOG from '@/blog.config' import BlogPostListScroll from './components/BlogPostListScroll' import ArticleInfo from './components/ArticleInfo' import Catalog from './components/Catalog' import { useRouter } from 'next/router' import Announcement from './components/Announcement' const ThemeGlobalMedium = createContext() /** * 基础布局 采用左右两侧布局,移动端使用顶部导航栏 * @returns {JSX.Element} * @constructor */ const LayoutBase = (props) => { const { children, meta, post, allNavPages, slotLeft, slotRight, slotTop, siteInfo } = props const [tocVisible, changeTocVisible] = useState(false) const [filterPosts, setFilterPosts] = useState(allNavPages) const { onLoading } = useGlobal() const router = useRouter() useEffect(() => { setFilterPosts(allNavPages) }, [post]) const LoadingCover =
return (
{/* 顶部导航栏 */}
{/* 左侧推拉抽屉 */}
{slotTop} {onLoading ? LoadingCover : children} {/* 回顶按钮 */}
{ window.scrollTo({ top: 0, behavior: 'smooth' }) }} />
{/* 底部 */}
{/* 右侧侧推拉抽屉 */}
{slotRight} {router.route === '/' && <> {CONFIG_GITBOOK.WIDGET_REVOLVER_MAPS === 'true' && } } {/* gitbook主题首页只显示公告 */}
{/* 移动端底部导航栏 */}
) } export default LayoutBase export const useMediumGlobal = () => useContext(ThemeGlobalMedium)