diff --git a/.gitignore b/.gitignore
index b5a7453..5b97f1e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,24 +25,4 @@ test/
/public/hanplayer
/public/MineWeb
-/public/other
-/src/content/blog/*
-!/src/content/blog
-/src/content/blog/2024/*
-!/src/content/blog/2024
-/src/content/blog/2024/07/*
-!/src/content/blog/2024/07
-/src/content/blog/2024/08/*
-!/src/content/blog/2024/08
-/src/content/blog/2024/09/*
-!/src/content/blog/2024/09
-/src/content/blog/2024/11/*
-!/src/content/blog/2024/11
-/src/content/blog/2024/12/*
-!/src/content/blog/2024/12
-!/src/content/blog/2024/07/【开源】骤雨重山无限存储图床托管于(Cloudflare Pages).md
-!/src/content/blog/2024/08/Cloudflare优选IP➕DnsPod的DDNS自动切换.md
-!/src/content/blog/2024/09/【开源】HanAnalytics访问分析Web统计托管于(Cloudflare Pages).md
-!/src/content/blog/2024/09/基于AI的微博动态心情分析【开源】.md
-!/src/content/blog/2024/11/推荐一个开源项目WebWatermark图片添加水印在线小助手.md
-!/src/content/blog/2024/12/【开源】Tarot-塔罗牌占卜.md
\ No newline at end of file
+/public/other
\ No newline at end of file
diff --git a/README.md b/README.md
index 57fae63..6e7874b 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,71 @@
# vhAstro-Theme
一款简约的 Astro 主题
+
+# Astro Starter Kit: Blog
+
+```sh
+npm create astro@latest -- --template blog
+```
+
+[](https://stackblitz.com/github/withastro/astro/tree/latest/examples/blog)
+[](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/blog)
+[](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/blog/devcontainer.json)
+
+> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
+
+
+
+Features:
+
+- ✅ Minimal styling (make it your own!)
+- ✅ 100/100 Lighthouse performance
+- ✅ SEO-friendly with canonical URLs and OpenGraph data
+- ✅ Sitemap support
+- ✅ RSS Feed support
+- ✅ Markdown & MDX support
+
+## 🚀 Project Structure
+
+Inside of your Astro project, you'll see the following folders and files:
+
+```text
+├── public/
+├── src/
+│ ├── components/
+│ ├── content/
+│ ├── layouts/
+│ └── pages/
+├── astro.config.mjs
+├── README.md
+├── package.json
+└── tsconfig.json
+```
+
+Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
+
+There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
+
+The `src/content/` directory contains "collections" of related Markdown and MDX documents. Use `getCollection()` to retrieve posts from `src/content/blog/`, and type-check your frontmatter using an optional schema. See [Astro's Content Collections docs](https://docs.astro.build/en/guides/content-collections/) to learn more.
+
+Any static assets, like images, can be placed in the `public/` directory.
+
+## 🧞 Commands
+
+All commands are run from the root of the project, from a terminal:
+
+| Command | Action |
+| :------------------------ | :----------------------------------------------- |
+| `npm install` | Installs dependencies |
+| `npm run dev` | Starts local dev server at `localhost:4321` |
+| `npm run build` | Build your production site to `./dist/` |
+| `npm run preview` | Preview your build locally, before deploying |
+| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
+| `npm run astro -- --help` | Get help using the Astro CLI |
+
+## 👀 Want to learn more?
+
+Check out [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
+
+## Credit
+
+This theme is based off of the lovely [Bear Blog](https://github.com/HermanMartinus/bearblog/).
diff --git a/package.json b/package.json
index cfac89f..5665edb 100644
--- a/package.json
+++ b/package.json
@@ -12,12 +12,12 @@
"@astrojs/mdx": "^4.0.8",
"@astrojs/rss": "^4.0.11",
"@astrojs/sitemap": "^3.2.1",
- "astro": "^5.2.5",
+ "astro": "^5.3.0",
"dayjs": "^1.11.13",
"dplayer": "^1.27.1",
"hls.js": "^1.5.20",
"nprogress": "^0.2.0",
- "overlayscrollbars": "^2.10.1",
+ "overlayscrollbars": "^2.11.0",
"remark-directive": "^3.0.1",
"twikoo": "1.6.41",
"unist-util-visit": "^5.0.0",
diff --git a/public/assets/font/index.css b/public/assets/font/index.css
index b70ae65..c39e174 100644
--- a/public/assets/font/index.css
+++ b/public/assets/font/index.css
@@ -1,4 +1,27 @@
+/*
+@import url('./HarmonyOS_Sans_Regular/result.css');
+@import url('./NotoSans/result.css'); */
@import url('./SFMono-Regular/result.css');
+
+/* @import url('./HarmonyOS_Sans/100/global/result.css');
+@import url('./HarmonyOS_Sans/100/sc/result.css');
+@import url('./HarmonyOS_Sans/200/global/result.css');
+@import url('./HarmonyOS_Sans/200/sc/result.css');
+@import url('./HarmonyOS_Sans/300/global/result.css');
+@import url('./HarmonyOS_Sans/300/sc/result.css');
+@import url('./HarmonyOS_Sans/400/global/result.css');
+@import url('./HarmonyOS_Sans/400/sc/result.css');
+@import url('./HarmonyOS_Sans/500/global/result.css');
+@import url('./HarmonyOS_Sans/500/sc/result.css');
+@import url('./HarmonyOS_Sans/600/global/result.css');
+@import url('./HarmonyOS_Sans/600/sc/result.css');
+@import url('./HarmonyOS_Sans/700/global/result.css');
+@import url('./HarmonyOS_Sans/700/sc/result.css');
+@import url('./HarmonyOS_Sans/800/global/result.css');
+@import url('./HarmonyOS_Sans/800/sc/result.css');
+@import url('./HarmonyOS_Sans/900/global/result.css');
+@import url('./HarmonyOS_Sans/900/sc/result.css'); */
+
@import url('./MiSans/100/result.css');
@import url('./MiSans/200/result.css');
@import url('./MiSans/300/result.css');
diff --git a/public/assets/images/footer/astro.svg b/public/assets/images/footer/astro.svg
new file mode 100644
index 0000000..ff8d63b
--- /dev/null
+++ b/public/assets/images/footer/astro.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/public/assets/images/footer/copyright.svg b/public/assets/images/footer/copyright.svg
new file mode 100644
index 0000000..1a09db1
--- /dev/null
+++ b/public/assets/images/footer/copyright.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/images/footer/hananalytics.svg b/public/assets/images/footer/hananalytics.svg
new file mode 100644
index 0000000..6e7bf46
--- /dev/null
+++ b/public/assets/images/footer/hananalytics.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/images/footer/icp.svg b/public/assets/images/footer/icp.svg
new file mode 100644
index 0000000..66c2969
--- /dev/null
+++ b/public/assets/images/footer/icp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/images/footer/ing.svg b/public/assets/images/footer/ing.svg
new file mode 100644
index 0000000..81c7f50
--- /dev/null
+++ b/public/assets/images/footer/ing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/images/footer/sitemap.svg b/public/assets/images/footer/sitemap.svg
new file mode 100644
index 0000000..c7ef393
--- /dev/null
+++ b/public/assets/images/footer/sitemap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/images/footer/theme.svg b/public/assets/images/footer/theme.svg
new file mode 100644
index 0000000..0c3e8ff
--- /dev/null
+++ b/public/assets/images/footer/theme.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/src/components/Aside.astro b/src/components/Aside.astro
index 70d7d69..c32ead8 100644
--- a/src/components/Aside.astro
+++ b/src/components/Aside.astro
@@ -1,7 +1,7 @@
---
// 获取用户配置数据
import SITE_CONFIG from "../config";
-import { fmtTime, fmtDate } from "../utils/index";
+import { fmtDate } from "../utils/index";
const { Avatar, Author, Motto, WebSites } = SITE_CONFIG;
// 获取文章数据
import { getCategories, getTags, getRecommendArticles } from "../utils/getPostInfo";
@@ -78,7 +78,7 @@ import "../styles/components/Aside.less";
{(await i).title}
-
+
))
diff --git a/src/components/Comment.astro b/src/components/Comment.astro
index 72ac99d..56a9d1b 100644
--- a/src/components/Comment.astro
+++ b/src/components/Comment.astro
@@ -3,20 +3,19 @@ import "../styles/components/Comment.less";
---
-
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
new file mode 100644
index 0000000..a96df71
--- /dev/null
+++ b/src/components/Footer.astro
@@ -0,0 +1,17 @@
+---
+import { fmtDate } from "../utils/index";
+// 页面内容的元数据
+import SITE_CONFIG from "../config";
+const { CreateTime } = SITE_CONFIG;
+// 基础 样式
+import "../styles/Footer.less";
+---
+
+
diff --git a/src/components/Pagination.astro b/src/components/Pagination.astro
index 800b766..23f29a5 100644
--- a/src/components/Pagination.astro
+++ b/src/components/Pagination.astro
@@ -23,7 +23,7 @@ import "../styles/components/Pagination.less";
}
{
- (!data.next || !data.last) && (
+ (!data.next || !data.last) && data.prev && (
{fmtPage(data.prev)}
@@ -33,7 +33,7 @@ import "../styles/components/Pagination.less";
{fmtPage(data.current) || "1"}
{
- (!data.prev || !data.first) && (
+ (!data.prev || !data.first) && data.next && (
{fmtPage(data.next)}
diff --git a/src/config.ts b/src/config.ts
index 995efad..8efccfd 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -38,7 +38,7 @@ export default {
// 博客音乐组件解析接口
vhMusicApi: 'https://meting-dd.2333332.xyz/api',
// 评论组件 Twikoo
- Twikoo: {
- envId: "https://twikoo.vvhan.com/.netlify/functions/twikoo",
- }
+ Twikoo: { envId: 'https://twikoo.vvhan.com/.netlify/functions/twikoo' },
+ // Han Analytics 统计(https://github.com/uxiaohan/HanAnalytics)
+ HanAnalytics: { enable: true, server: 'https://analytics.vvhan.com', siteId: 'Hello-HanHexoBlog' }
}
\ No newline at end of file
diff --git a/src/content/blog/2024/08/Cloudflare优选IP➕DnsPod的DDNS自动切换.md b/src/content/blog/Cloudflare优选IP➕DnsPod的DDNS自动切换.md
similarity index 100%
rename from src/content/blog/2024/08/Cloudflare优选IP➕DnsPod的DDNS自动切换.md
rename to src/content/blog/Cloudflare优选IP➕DnsPod的DDNS自动切换.md
diff --git a/src/content/blog/2024/09/【开源】HanAnalytics访问分析Web统计托管于(Cloudflare Pages).md b/src/content/blog/【开源】HanAnalytics访问分析Web统计托管于(Cloudflare Pages).md
similarity index 100%
rename from src/content/blog/2024/09/【开源】HanAnalytics访问分析Web统计托管于(Cloudflare Pages).md
rename to src/content/blog/【开源】HanAnalytics访问分析Web统计托管于(Cloudflare Pages).md
diff --git a/src/content/blog/2024/12/【开源】Tarot-塔罗牌占卜.md b/src/content/blog/【开源】Tarot-塔罗牌占卜.md
similarity index 100%
rename from src/content/blog/2024/12/【开源】Tarot-塔罗牌占卜.md
rename to src/content/blog/【开源】Tarot-塔罗牌占卜.md
diff --git a/src/content/blog/2024/07/【开源】骤雨重山无限存储图床托管于(Cloudflare Pages).md b/src/content/blog/【开源】骤雨重山无限存储图床托管于(Cloudflare Pages).md
similarity index 100%
rename from src/content/blog/2024/07/【开源】骤雨重山无限存储图床托管于(Cloudflare Pages).md
rename to src/content/blog/【开源】骤雨重山无限存储图床托管于(Cloudflare Pages).md
diff --git a/src/content/blog/2024/09/基于AI的微博动态心情分析【开源】.md b/src/content/blog/基于AI的微博动态心情分析【开源】.md
similarity index 100%
rename from src/content/blog/2024/09/基于AI的微博动态心情分析【开源】.md
rename to src/content/blog/基于AI的微博动态心情分析【开源】.md
diff --git a/src/content/blog/2024/11/推荐一个开源项目WebWatermark图片添加水印在线小助手.md b/src/content/blog/推荐一个开源项目WebWatermark图片添加水印在线小助手.md
similarity index 100%
rename from src/content/blog/2024/11/推荐一个开源项目WebWatermark图片添加水印在线小助手.md
rename to src/content/blog/推荐一个开源项目WebWatermark图片添加水印在线小助手.md
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index da60c2c..095eb69 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -5,6 +5,8 @@ const { title, keywords, description, activeNav } = Astro.props;
import Head from "../components/Head.astro";
// 顶部 Header
import Header from "../components/Header.astro";
+// 底部 Footer
+import Footer from "../components/Footer.astro";
// 返回顶部
import BackTop from "../components/BackTop.astro";
// 手机端侧边栏
@@ -24,6 +26,7 @@ import "../styles/Layout.less";
+
diff --git a/src/pages/message/index.astro b/src/pages/message/index.astro
index 9efa8ff..dc99196 100644
--- a/src/pages/message/index.astro
+++ b/src/pages/message/index.astro
@@ -1,7 +1,7 @@
---
// 页面 Info
import SITE_CONFIG from "../../config";
-const { Description } = SITE_CONFIG;
+const { Description, Twikoo } = SITE_CONFIG;
// Aside组件
import Aside from "../../components/Aside.astro";
// 公共 Layout
@@ -17,7 +17,7 @@ import Comment from "../../components/Comment.astro";