import BlogPost from '@/components/BlogPost' import PropTypes from 'prop-types' import Pagination from '@/components/Pagination' import BLOG from '@/blog.config' import { useRouter } from 'next/router' import { useTheme } from '@/lib/theme' import { useEffect, useState } from 'react' import SideBar from '@/components/SideBar' import throttle from 'lodash.throttle' import CommonHead from '@/components/CommonHead' const DefaultLayout = ({ tags, posts, page, currentTag, ...customMeta }) => { const meta = { title: BLOG.title, type: 'website', ...customMeta } page = page ?? 1 let postsToShow = [] let filteredBlogPosts = posts ?? [] let currentSearch = '' if (posts) { const router = useRouter() if (router.query && router.query.s) { currentSearch = router.query.s filteredBlogPosts = posts.filter(post => { const tagContent = post.tags ? post.tags.join(' ') : '' const searchContent = post.title + post.summary + tagContent + post.slug return searchContent.toLowerCase().includes(currentSearch.toLowerCase()) }) } } const totalPages = Math.ceil(filteredBlogPosts.length / BLOG.postsPerPage) if (posts) { postsToShow = filteredBlogPosts.slice( BLOG.postsPerPage * (page - 1), BLOG.postsPerPage * page ) } let showNext = false if (filteredBlogPosts) { const totalPosts = filteredBlogPosts.length showNext = page * BLOG.postsPerPage < totalPosts } useEffect(() => { // 首页隐藏看板娘 // const ref = document.getElementById('waifu') // if (ref) { // ref.remove() // } window.addEventListener('resize', changeColumnCount) changeColumnCount() return () => { window.removeEventListener('resize', changeColumnCount) } }, []) const changeColumnCount = throttle(() => { if (window.innerWidth > 2500) { changeColumn(5) } else if (window.innerWidth > 1800) { changeColumn(4) } else if (window.innerWidth > 1300) { changeColumn(3) } else if (window.innerWidth > 900) { changeColumn(2) } else if (window.innerWidth <= 900) { changeColumn(1) } }, 500) const [column, changeColumn] = useState(3) const { theme } = useTheme() return (
{/* 侧边菜单 */}
{(!page || page === 1) && (
) } {/* 标签 */} {currentTag && (
标签: {currentTag}

)} {/* 当前搜索 */} {(currentSearch || (page && page !== 1)) && (
{currentSearch && ( 搜索关键词: {currentSearch} )} {page && page !== 1 && ( 页 {page} / {totalPages} )}

)} {/* 文章列表 */}
{/*
*/}
{!postsToShow.length && (

No posts found.

)} {postsToShow.map(post => ( ))}
) } DefaultLayout.propTypes = { posts: PropTypes.array.isRequired, tags: PropTypes.object.isRequired, currentTag: PropTypes.string } export default DefaultLayout