修改架构,移动端优先。

save
This commit is contained in:
cheney
2026-08-03 18:05:50 +08:00
committed by Cheney
parent 1c07b417ce
commit 08b3655a38
71 changed files with 2524 additions and 290 deletions
-5
View File
@@ -1,5 +0,0 @@
import '../styles/globals.css'
export default function App({ Component, pageProps }) {
return <Component {...pageProps} />
}
-71
View File
@@ -1,71 +0,0 @@
import Head from 'next/head'
import Navbar from '../../components/Navbar'
import Footer from '../../components/Footer'
import fs from 'fs'
import path from 'path'
import matter from 'gray-matter'
import { marked } from 'marked'
export default function Article({ article }) {
return (
<div className="container">
<Head>
<title>{article.title} - iBoard</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<Navbar />
<main>
<div className="article-detail">
<h1 className="article-detail-title">{article.title}</h1>
<div className="article-detail-date">{article.date}</div>
<div className="article-detail-content" dangerouslySetInnerHTML={{ __html: article.contentHtml }} />
</div>
</main>
<Footer />
</div>
)
}
export async function getStaticPaths() {
const articlesDirectory = path.join(process.cwd(), 'content', 'articles')
const fileNames = fs.readdirSync(articlesDirectory)
const paths = fileNames
.filter(fileName => fileName.endsWith('.md'))
.map(fileName => ({
params: { slug: fileName.replace('.md', '') }
}))
return {
paths,
fallback: false
}
}
export async function getStaticProps({ params }) {
const articlesDirectory = path.join(process.cwd(), 'content', 'articles')
const fullPath = path.join(articlesDirectory, `${params.slug}.md`)
const fileContents = fs.readFileSync(fullPath, 'utf8')
const { data, content } = matter(fileContents)
// 从文件名中提取日期
const dateMatch = params.slug.match(/^(\d{4}-\d{2}-\d{2})-/)
const date = dateMatch ? dateMatch[1] : ''
// 将markdown转换为HTML
const contentHtml = marked(content)
return {
props: {
article: {
id: params.slug,
title: data.title || params.slug.replace(/\d{4}-\d{2}-\d{2}-/, ''),
date,
contentHtml
}
}
}
}
-90
View File
@@ -1,90 +0,0 @@
import Head from 'next/head'
import Link from 'next/link'
import Navbar from '../components/Navbar'
import Footer from '../components/Footer'
import { getPagedArticles } from '../utils/articleUtils'
export default function Home({ articles, totalPages, currentPage }) {
return (
<div className="container">
<Head>
<title>iBoard - 经济数据与理论</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<Navbar />
<main>
<h1 className="title">
欢迎来到 iBoard
</h1>
<p className="description">
收集和整理经济数据,以策略为主体重新组织。
</p>
<div className="grid">
<div className="card">
<a href="#articles-section">
<h2>经济文章</h2>
</a>
<p>最新的经济分析和研究文章</p>
</div>
<div className="card">
<Link href="/data">
<h2>经济数据</h2>
</Link>
<p>深入分析经济数据和趋势</p>
</div>
<div className="card">
<Link href="/strategy">
<h2>策略研究</h2>
</Link>
<p>基于经济理论的数据分析框架</p>
</div>
</div>
<section id="articles-section" className="articles-section">
<div className="articles-grid">
{articles.map((article) => (
<Link key={article.id} href={`/articles/${article.id}`} className="article-card">
<div className="article-date">{article.date}</div>
<h3 className="article-title">{article.title}</h3>
<p className="article-excerpt">{article.excerpt}</p>
</Link>
))}
</div>
{totalPages > 1 && (
<div className="pagination">
{Array.from({ length: totalPages }, (_, index) => (
<Link key={index + 1} href={`/?page=${index + 1}`} className={`page-link ${currentPage === index + 1 ? 'active' : ''}`}>
{index + 1}
</Link>
))}
</div>
)}
</section>
</main>
<Footer />
</div>
)
}
export async function getServerSideProps({ query }) {
const page = parseInt(query.page) || 1
const { articles, total, totalPages } = getPagedArticles(page, 5)
return {
props: {
articles,
total,
totalPages,
currentPage: page
}
}
}