Firefly 博客导航功能完整指南
点击按钮,AI 将为你生成这篇文章的摘要
本文档整合了 Firefly 博客导航功能的所有教程,涵盖导航栏配置、页面功能实现和组件功能三大模块。
一、导航栏基础配置
1.1 目录结构总览
src/├── content/│ ├── content.config.ts # 内容集合定义(spec 集合)│ ├── spec/ # 特殊页面的 Markdown 内容│ │ ├── about.md # 关于我│ │ ├── friends.mdx # 友链│ │ ├── talks.md # 说说│ │ ├── books.md # 书架│ │ ├── movies-games.md # 影视与游戏│ │ ├── music.md # 音乐│ │ ├── changelog.md # 更新日志│ │ ├── routines.md # 规划│ │ ├── places.md # 足迹│ │ └── projects.md # 网站导航│ └── posts/ # 博客文章├── types/│ └── config.ts # LinkPreset 枚举 + 类型定义├── constants/│ └── link-presets.ts # LinkPreset → NavBarLink 映射表├── config/│ ├── siteConfig.ts # 站点配置(含页面开关)│ └── navBarConfig.ts # ⭐ 导航栏链接配置(核心文件)├── pages/ # 页面路由│ ├── about.astro│ ├── friends.astro│ ├── talks.astro│ ├── books.astro│ ├── movies-games.astro│ ├── music.astro│ ├── changelog.astro│ ├── projects.astro│ └── life/│ ├── routines.astro│ └── places.astro└── components/layout/ └── Navbar.astro # 导航栏组件(通常无需修改)1.2 当前导航栏结构
主页 (/) ← LinkPreset.Home分类 (/categories/) ← LinkPreset.Categories归档 (/archive/) ← LinkPreset.Archive网站导航 (/projects/) ← 自定义 NavBarLink动态 (下拉菜单 icon:local-cafe) ├── 说说 (/talks/) ← LinkPreset.Talk(受开关控制) ├── 相册 (/gallery/) ← LinkPreset.Gallery(受开关控制) └── 留言板 (/guestbook/) ← LinkPreset.Guestbook(受开关控制)记录 (下拉菜单 icon:camera-outdoor) ├── 书架 (/books/) ← 自定义 NavBarLink ├── 影视与游戏 (/movies-games/) ← 自定义 NavBarLink ├── 音乐 (/music/) ← 自定义 NavBarLink ├── 更新日志 (/changelog/) ← 自定义 NavBarLink ├── 规划 (/life/routines/) ← 自定义 NavBarLink └── 足迹 (/life/places/) ← 自定义 NavBarLink关于 (下拉菜单 icon:info) ├── 关于我 (/about/) ← LinkPreset.About ├── 友链 (/friends/) ← LinkPreset.Friends(受开关控制) └── 赞助 (/sponsor/) ← LinkPreset.Sponsor(受开关控制)1.3 方式一:使用内置预设(LinkPreset)
适用于主题已提供的常用页面,只需 3 步。
可用预设列表
| 预设枚举 | 显示名称 | URL | 所需开关 |
|---|---|---|---|
LinkPreset.Home | 主页 | / | - |
LinkPreset.Archive | 归档 | /archive/ | - |
LinkPreset.About | 关于我 | /about/ | - |
LinkPreset.Categories | 分类 | /categories/ | - |
LinkPreset.Friends | 友链 | /friends/ | pages.friends |
LinkPreset.Sponsor | 赞助 | /sponsor/ | pages.sponsor |
LinkPreset.Guestbook | 留言 | /guestbook/ | pages.guestbook |
LinkPreset.Bangumi | 番组计划 | /bangumi/ | pages.bangumi |
LinkPreset.Gallery | 相册 | /gallery/ | pages.gallery |
LinkPreset.Talk | 说说 | /talks/ | pages.talks |
操作步骤
Step 1 — 在 src/config/navBarConfig.ts 中添加预设:
// 作为顶级菜单links.push(LinkPreset.Gallery);
// 作为下拉子菜单(放在 children 数组中)links.push({ name: "动态", url: "/my/", icon: "material-symbols:local-cafe", children: [ ...(siteConfig.pages.talks ? [LinkPreset.Talk] : []), ...(siteConfig.pages.gallery ? [LinkPreset.Gallery] : []), ],});Step 2 — 确保 src/config/siteConfig.ts 中对应开关为 true:
pages: { talks: true, gallery: true, // ...}Step 3 — 重启开发服务器生效。
1.4 方式二:添加自定义导航项(NavBarLink)
适用于预设列表中没有的页面,需要创建页面文件和内容文件。共 2 步(精简版),如需开关控制则 4 步。
精简版(2 步)— 无需开关控制
Step 1 — 创建页面文件 src/pages/xxx.astro:
---import MainGridLayout from "@/layouts/MainGridLayout.astro";import { getEntry, render } from "astro:content";import Markdown from "@components/common/Markdown.astro";
const pagePost = await getEntry("spec", "xxx");if (!pagePost) { throw new Error("Page content not found");}const { Content } = await render(pagePost);---
<MainGridLayout title="页面标题" description="页面描述"> <div class="flex w-full rounded-(--radius-large) overflow-hidden relative min-h-32"> <div class="card-base z-10 px-9 py-6 relative w-full"> <Markdown class="mt-2"> <Content /> </Markdown> </div> </div></MainGridLayout>Step 2 — 创建内容文件 src/content/spec/xxx.md:
---title: 页面标题date: 2026-05-27---
# 页面内容
在这里写 Markdown 内容...然后在 src/config/navBarConfig.ts 中添加导航链接。
1.5 完整操作流程(以”说说”为例)
演示使用 LinkPreset 方式添加”说说”功能的完整 8 步流程。
| 步骤 | 文件 | 修改内容 |
|---|---|---|
| 1 | src/content.config.ts | 确认 spec 集合已定义 |
| 2 | src/content/spec/talks.md | 创建内容文件 |
| 3 | src/types/config.ts | 添加枚举值 Talk = 8 |
| 4 | src/config/siteConfig.ts | 添加页面开关 talks: true |
| 5 | src/config/navBarConfig.ts | 添加导航栏配置 |
| 6 | src/constants/link-presets.ts | 添加预设映射 |
| 7 | src/i18n/i18nKey.ts | 添加国际化键值 |
| 8 | src/pages/talks.astro | 创建页面路由 |
1.6 快速添加自定义页面(以”书架”为例)
使用 NavBarLink 方式,只需 3 步(无需枚举、i18n、预设映射)。
Step 1:创建内容文件
文件:src/content/spec/books.md
---title: 书架date: 2026-05-27---
# 我的书架
## 正在读- 《深入理解 TypeScript》
## 已读完- 《JavaScript 高级程序设计》Step 2:创建页面文件
文件:src/pages/books.astro
---import MainGridLayout from "@/layouts/MainGridLayout.astro";import { getEntry, render } from "astro:content";import Markdown from "@components/common/Markdown.astro";
const booksPost = await getEntry("spec", "books");if (!booksPost) { throw new Error("Books page content not found");}const { Content } = await render(booksPost);---
<MainGridLayout title="书架" description="我读过的和正在读的书籍"> <div class="flex w-full rounded-(--radius-large) overflow-hidden relative min-h-32"> <div class="card-base z-10 px-9 py-6 relative w-full"> <Markdown class="mt-2"> <Content /> </Markdown> </div> </div></MainGridLayout>Step 3:在导航栏添加链接
文件:src/config/navBarConfig.ts
// 方式 A:作为顶级菜单links.push({ name: "书架", url: "/books/", icon: "material-symbols:book-5",});
// 方式 B:作为下拉子菜单links.push({ name: "记录", url: "/records/", icon: "material-symbols:camera-outdoor", children: [ { name: "书架", url: "/books/", icon: "material-symbols:book-5" }, // ...其他子菜单 ],});1.7 两种方式对比
| 对比项 | LinkPreset 预设 | NavBarLink 自定义 |
|---|---|---|
| 需要修改的文件 | 8 个 | 3 个 |
| 需要 i18n | 是 | 否 |
| 需要枚举值 | 是 | 否 |
| 名称/URL 可自定义 | 否 | 是 |
| 适用场景 | 主题内置页面 | 自定义新页面 |
| 适合初学者 | 推荐 | 推荐 |
1.8 页面开关配置
文件:src/config/siteConfig.ts → pages 对象
pages: { friends: true, // 友链 sponsor: true, // 赞助 guestbook: false, // 留言板(关闭) bangumi: true, // 番组计划 gallery: true, // 相册 talks: true, // 说说}true= 导航栏显示 + 页面可访问false= 导航栏隐藏 + 访问返回 404
1.9 导航栏样式配置
文件:src/config/siteConfig.ts → navbar 对象
navbar: { logo: { type: "image", // icon | image | url value: "assets/images/logo.webp", // 图标/图片路径 alt: "Logo", }, title: "我的博客", // 导航栏标题 hoverTitle: "👋 别走嘛,再看看!", // 鼠标悬停时显示的标题 widthFull: false, // false=居中, true=全宽 menuAlign: "center", // left | center followTheme: false, // 是否跟随主题色 stickyNavbar: true, // 是否固定顶部},1.10 导航栏模块升级功能
本次对博客导航栏模块进行了五项核心改进:
| 改进项 | 说明 | 优先级 |
|---|---|---|
| 分类独立页面 | 新增 /categories/ 页面,与归档分离 | 高 |
| hoverTitle | 鼠标悬停 Logo 时标题变化为趣味文字 | 中 |
| 点击触发下拉 | 桌面端下拉菜单从 hover 改为 click | 中 |
| Guestbook 统一 | 移除重复顶级入口,仅保留在子菜单 | 低 |
| 枚举扩展 | LinkPreset 新增 Categories/Books 等 | 低 |
五层架构总览
类型层 (config.ts) → 定义 TypeScript 类型和枚举 ↓配置层 (navBarConfig.ts) → 动态生成导航链接 ↓常量层 (link-presets.ts) → 预设链接映射 ↓组件层 (Navbar.astro 等) → 渲染 UI 组件 ↓样式层 (navbar.css / main.css) → 视觉呈现1.11 图标资源参考
导航栏图标使用 Iconify,格式为 图标库:图标名。
常用图标
| 图标名 | 说明 |
|---|---|
material-symbols:home | 首页 |
material-symbols:archive | 归档 |
material-symbols:person | 关于 |
material-symbols:group | 友链 |
material-symbols:favorite | 赞助 |
material-symbols:chat | 留言板 |
material-symbols:chat-bubble | 说说 |
material-symbols:photo-library | 相册 |
material-symbols:movie | 电影/影视 |
material-symbols:music-note | 音乐 |
material-symbols:book-5 | 书架 |
material-symbols:history | 更新日志 |
material-symbols:location-on | 足迹 |
material-symbols:list-alt | 规划 |
material-symbols:camera-outdoor | 记录 |
material-symbols:local-cafe | 动态 |
material-symbols:public | 网站导航 |
material-symbols:info | 信息/关于 |
fa7-brands:github | GitHub |
二、页面功能实现
2.1 网站导航页面自定义
网站导航页面支持以下功能:
- 分类管理:可自由添加、删除、重命名分类
- 网站卡片:每个网站显示图标、名称、描述和标签
- 分类筛选:点击分类标签可筛选显示对应分类
- 响应式设计:自适应手机、平板、电脑
- 暗色模式:支持深色/浅色主题切换
- 自定义颜色:每个分类和网站可独立配置颜色
配置文件位置
src/config/navigationConfig.ts配置结构说明
export const navigationConfig = { // 页面标题 title: "网站导航", // 页面描述 description: "我常用和推荐的网站",
// 分类配置数组 categories: [ { id: "分类ID", // 唯一标识符 name: "分类名称", // 显示名称 icon: "图标名称", // Iconify 图标 color: "#颜色代码", // 主题颜色 dotColor: "#颜色代码", // 标签圆点颜色(可选) sites: [ // 网站数组 // ...网站配置 ], }, // ...更多分类 ] as NavCategory[],};自定义网站
在对应分类的 sites 数组中添加网站对象:
{ name: "网站名称", url: "https://example.com", description: "网站描述", icon: "mdi:earth", // 图标名称 iconColor: "#4CAF50", // 图标背景颜色(可选) tags: ["标签1", "标签2"], // 标签数组}2.2 音乐页面搭建指南
音乐系统由三部分组成:
MusicManager (音频引擎,单例) ↓ fm:* 事件通信MusicPlayer (侧边栏/导航栏小播放器)MusicPage (独立音乐页面,大播放器 + 歌曲网格)配置文件
所有音乐配置在 src/config/musicConfig.ts:
import type { MusicPlayerConfig } from "../types/config";
export const musicPlayerConfig: MusicPlayerConfig = { // 导航栏显示音乐入口 showInNavbar: true,
// 模式:"meting" 用云端 API,"local" 用本地文件 mode: "meting",
// 默认音量 volume: 0.7,
// 播放模式:list / one / random playMode: "list",
// 启用歌词 showLyrics: true,
// Meting API 配置 meting: { api: "https://api.i-meto.com/meting/api?server=:server&type=:type&id=:id&r=:r", server: "netease", type: "playlist", id: "10046455237", auth: "", fallbackApis: [ "https://api.injahow.cn/meting/?server=:server&type=:type&id=:id", "https://api.moeyao.cn/meting/?server=:server&type=:type&id=:id", ], },
// 本地音乐配置 local: { playlist: [ { name: "歌曲名", artist: "歌手名", url: "/assets/music/歌曲.mp3", cover: "/assets/music/cover/封面.webp", lrc: "", }, ], },};使用云端音乐(Meting API)
- 选择音乐平台:
netease=网易云,tencent=QQ,kugou=酷狗 - 选择获取类型:
song=单曲,playlist=歌单,album=专辑,artist=艺术家 - 填入 ID:打开对应平台的歌曲/歌单页面,URL 中的数字就是 ID
- 配置备用 API(推荐)
使用本地音乐
在 public/assets/music/ 目录下放置音频文件,支持格式:MP3、M4A、OGG、WAV
export const musicPlayerConfig: MusicPlayerConfig = { mode: "local", local: { playlist: [ { name: "知我", artist: "国风堂", url: "/assets/music/知我.mp3", cover: "/assets/music/cover/知我.webp", lrc: "/assets/music/lrc/知我.lrc", }, ], },};自动化工具
# Python 下载脚本(推荐)python scripts/download_music.py "歌名"
# M4A/MP3 元数据提取pnpm cli lrc 歌曲.m4a2.3 应用页与集成功能
本次集成共涉及以下功能:
| 功能 | 类型 | 说明 |
|---|---|---|
| 双 CDN 图床回退 | 新增插件 | 主力图床失效时自动切换备用图床 |
| 图片懒加载 | 新增插件 | Markdown 图片自动添加 loading=“lazy” |
| IndexNow | 新增 API + Action | 一键推送新内容至搜索引擎 |
| 文章置顶 | 已有功能 | 前端已完整实现,无需修改 |
| 应用中心 | 新增页面 | 展示个人应用、工具和服务链接 |
双 CDN 图床回退配置
import rehypeImageFallback from "./src/plugins/rehype-image-fallback.mjs";
[ rehypeImageFallback, { enable: true, // ← 改为 true 启用 originalDomain: "你的主力图床域名", fallbackDomain: "你的备用图床域名", },],图片懒加载配置
import rehypeImageAttrs from "./src/plugins/rehype-image-attrs.mjs";
rehypeImageAttrs,IndexNow 集成
- 访问 indexnow.org 申请 Key
- 在网站根目录放置
{key}.txt文件 - 在 GitHub Secrets 中配置
INDEXNOW_KEY - 确认
src/pages/api/indexnow.ts中的站点 URL
文章置顶使用方法
在文章的 frontmatter 中添加 pinned: true:
---title: 我的置顶文章published: 2026-06-05pinned: true ← 添加这行---应用中心页面配置
apps: [ { name: "ChatGPT", description: "AI 对话助手,支持多模态交互", url: "https://chat.openai.com", image: "https://cdn.oaistatic.com/images/favicon-o.svg", external: true, },],三、组件功能
3.1 AI 功能
FireflyBlog 集成了两套 AI 功能,基于 DeepSeek API 实现:
| 功能 | 入口 | 能力 |
|---|---|---|
| AI 问答 | 文章页面右下角「🤖」按钮 | 基于当前文章内容进行多轮对话 |
| 文章概括 | 文章标题下方「✨ AI 概括」卡片 | 一键生成文章摘要 |
环境变量配置
在 .env.local 文件中添加:
AI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxAI 配置文件
export const aiConfig = { enable: true, apiEndpoint: 'https://api.deepseek.com/v1/chat/completions', model: 'deepseek-chat', maxTokens: 4096, temperature: 0.7, summaryTemperature: 0.1, chatEnabled: true, summaryEnabled: true, summaryAutoGenerate: false, authorName: 'Firefly', authorBio: '这是一个技术博客,分享编程、AI、Web 开发等技术内容。',};3.2 开发者工具提示信息
当用户按下快捷键打开浏览器开发者工具时,自动弹出提示信息。
功能特点
- ✅ 支持所有主流浏览器(Chrome、Firefox、Edge、Safari)
- ✅ 响应式设计,适配各种屏幕尺寸
- ✅ 支持暗色模式
- ✅ 可自定义提示信息内容
- ✅ 可配置显示时长
- ✅ 仅在首次打开开发者工具时显示
配置说明
devtoolsWarning: { enable: true, message: "请按本站规定合法使用开发者工具", time: 3,},涉及文件
| 文件 | 修改内容 |
|---|---|
src/components/features/DevToolsWarning.astro | 新建组件文件 |
src/types/config.ts | 添加类型定义 |
src/config/siteConfig.ts | 添加配置参数 |
src/layouts/MainGridLayout.astro | 导入并使用组件 |
3.3 恋爱倒计时组件
浪漫的侧边栏小组件,可以实时显示双方在一起的时间。
功能特点
- ✅ 实时计时:每秒更新,显示年、月、天、时、分、秒
- ✅ 双人头像:显示双方头像和爱心
- ✅ 个性化问候:显示双方名字
- ✅ 响应式设计:适配桌面端和移动端
- ✅ 深色模式支持:自动切换主题样式
- ✅ Swup 兼容:页面切换时自动更新
配置文件
import type { RelationshipConfig } from "../types/config";
export const relationshipConfig: RelationshipConfig = { startDate: "2026-01-06", name1: "---------TSH", name2: "CXY---------", avatar1: "https://re.tsh520.cn/zl/tsh.jpg", avatar2: "https://re.tsh520.cn/zl/cxy.jpg", title: "我和宝宝在一起已经",};涉及文件
| 文件 | 路径 | 说明 |
|---|---|---|
| 组件本身 | src/components/widget/RelationshipTimer.astro | 核心组件代码 |
| 配置文件 | src/config/relationshipConfig.ts | 双方信息配置 |
| 类型定义 | src/types/config.ts | 添加 relationship 类型 |
| 侧边栏映射 | src/components/layout/SideBar.astro | 注册组件 |
| 侧边栏配置 | src/config/sidebarConfig.ts | 启用组件 |
3.4 欢迎弹窗组件
轻量级的欢迎弹窗组件,当访客第一次打开页面时,右下角会弹出一个欢迎卡片。
功能特点
- ✅ 首次访问弹出:使用 sessionStorage 去重
- ✅ IP 地理位置问候:自动获取访客位置
- ✅ 自动消失:5 秒后自动关闭
- ✅ 手动关闭:支持点击关闭按钮
- ✅ 响应式设计:适配桌面端和移动端
- ✅ 深色模式支持:自动切换主题样式
- ✅ Swup 兼容:完美适配 SPA 客户端路由
涉及文件
| 文件 | 路径 |
|---|---|
| 组件本身 | src/components/WelcomeToast.astro |
| 在布局中引用 | src/layouts/MainGridLayout.astro |
3.5 友链自助申请功能
为博客添加友链自助申请功能,实现两种申请入口:
| 入口位置 | 说明 |
|---|---|
| 右上角按钮 | 醒目的主题色按钮,点击直接跳转 GitHub Issue 表单 |
| 页面内文字链接 | 在申请流程步骤中显示,体验友好 |
功能特点
- ✅ 不破坏原有布局,不影响任何功能
- ✅ 适配明暗主题
- ✅ 支持 GitHub Issue 自动表单
- ✅ 访客一键提交,方便管理
GitHub Issue 模板
创建 .github/ISSUE_TEMPLATE/friend-request.yml 文件。
涉及文件
| 文件 | 修改内容 |
|---|---|
src/pages/friends.astro | 添加申请按钮 |
src/content/spec/friends.mdx | 添加文字链接 |
.github/ISSUE_TEMPLATE/friend-request.yml | 新增 Issue 模板 |
3.6 MDX 组件使用指南
博客中可用的自定义 MDX 组件,在 .mdx 文件中通过 import 导入后即可使用。
Timeline 时间轴
用于展示更新日志,左侧竖线 + 圆点 + 标签徽章。
import Timeline from "../../components/mdx/Timeline.astro";
<Timeline date="2026-05-28" type="feature" version="v1.2.0">新增音乐页面,支持本地播放列表。</Timeline>MusicCard 音乐卡片
展示单首歌曲信息,包含封面、歌名、歌手和播放链接。
import MusicCard from "../../components/mdx/MusicCard.astro";
<MusicCard title="知我" artist="国风堂" />TagBadge 标签徽章
通用类型标签,用于标记内容类别。
import TagBadge from "../../components/mdx/TagBadge.astro";
<TagBadge type="feature" /><TagBadge type="fix" text="Bug Fix" />四、常见问题排查
4.1 导航栏显示空白文字
原因:i18n 枚举键名大小写不一致。
// ❌ 错误:枚举名大写,引用小写export enum I18nKey { Talks = "talks", // 大写 T}name: i18n(I18nKey.talks), // 找不到 → 空白
// ✅ 正确:统一使用小写 camelCaseexport enum I18nKey { talks = "talks", // 小写 t}name: i18n(I18nKey.talks), // 匹配成功4.2 页面 404
| 可能原因 | 排查方法 |
|---|---|
| 页面文件不存在 | 检查 src/pages/xxx.astro |
| 内容文件不存在 | 检查 src/content/spec/xxx.md |
getEntry 参数错误 | 第二个参数是文件名(不含扩展名) |
| 嵌套目录未创建 | 如 /life/routines/ 需要 src/pages/life/ 目录 |
4.3 导航栏不显示菜单项
| 可能原因 | 排查方法 |
|---|---|
页面开关为 false | 检查 siteConfig.pages.xxx |
| LinkPreset 枚举值未添加 | 检查 types/config.ts |
| 预设映射未添加 | 检查 constants/link-presets.ts |
| navBarConfig 中未添加 | 检查 config/navBarConfig.ts |
4.4 import 路径报错
// ❌ 缺少扩展名import Markdown from "@components/common/Markdown";
// ✅ 加上 .astro 扩展名import Markdown from "@components/common/Markdown.astro";五、完整检查清单
添加 LinkPreset 预设页面(如”说说”)
-
src/content/spec/talks.md已创建 -
src/types/config.ts中LinkPreset添加了Talk = 8 -
src/config/siteConfig.ts中pages.talks = true -
src/config/navBarConfig.ts中添加了菜单项 -
src/constants/link-presets.ts中添加了预设映射 -
src/i18n/i18nKey.ts中添加了talks和talksDescription -
src/i18n/languages/zh_CN.ts(及其他语言)添加了翻译 -
src/pages/talks.astro页面文件已创建 - 重启开发服务器验证
添加自定义 NavBarLink 页面(如”书架”)
-
src/content/spec/books.md已创建 -
src/pages/books.astro已创建 -
src/config/navBarConfig.ts中添加了导航链接 - 重启开发服务器验证
通用检查
-
src/content.config.ts中spec集合已定义 - 所有 import 路径包含
.astro扩展名 - 枚举值无重复
- 所有语言文件都添加了翻译
六、总结
本文档整合了 Firefly 博客导航功能的所有教程,涵盖以下内容:
| 模块 | 功能 | 状态 |
|---|---|---|
| 导航栏配置 | 预设链接、自定义链接、样式配置 | ✅ 完成 |
| 导航栏升级 | 分类页面、hoverTitle、点击触发下拉 | ✅ 完成 |
| 网站导航 | 分类管理、网站卡片、颜色配置 | ✅ 完成 |
| 音乐页面 | 云端/本地音乐、歌词、收藏 | ✅ 完成 |
| 集成功能 | CDN回退、懒加载、IndexNow、应用中心 | ✅ 完成 |
| AI功能 | AI问答、文章概括 | ✅ 完成 |
| 侧边栏组件 | 恋爱倒计时、欢迎弹窗、开发者工具提示 | ✅ 完成 |
| 友链功能 | 自助申请、GitHub Issue表单 | ✅ 完成 |
| MDX组件 | 时间轴、音乐卡片、标签徽章 | ✅ 完成 |
所有功能均已实现并经过测试,可直接使用!🎉
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!