意Reverie - 个人博客系统-开源

绘意Reverie - 个人博客系统-开源

各位鱼友,有人加友链吗,不过我域名还没下来 在线链接 http://120.48.82.119/(个人博客) 域名ICP还没下来 欢迎联系:webziyuan.top 开源链接:仓库地址 开源需要的话点点start 参考封面:

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

一个基于前后端分离架构的个人博客系统,支持 Markdown 文章发布、标签分类、评论互动、友链、访问统计等功能。配有后台管理系统,方便管理内容。

项目架构

text
复制代码
chuckle/ ├── check_user/ # 前端用户端(博客前台) ├── check-admin/ # 前端管理端(博客后台管理) └── springboot-check/ # 后端服务

前端用户端 (check_user)

基于 Vue 3 + TypeScript + Vite 5 构建的个人博客前台。

技术栈

| 技术 | 用途 |

| -------------------------- | ----------------------- |

| Vue 3 (Composition API) | 前端框架 |

| Vite 5 | 构建工具 |

| TypeScript | 类型安全 |

| Pinia | 状态管理 |

| Vue Router 4 | 路由管理 |

| Element Plus | UI 组件库 |

| Axios | HTTP 请求 |

| ECharts | 数据可视化 |

| highlight.js + v-md-editor | Markdown 渲染与代码高亮 |

| oh-my-live2d | 看板娘(Live2D) |

| vue-lazyload | 图片懒加载 |

页面结构

| 路由 | 页面 | 说明 |

| --------- | -------- | ---------------------------------------------- |

| / | 博客入口 | 启动引导页 |

| /home | 博客首页 | 文章列表、轮播图、公告、标签云、归档、网站信息 |

| /desc | 博文详情 | Markdown 渲染展示、目录导航、评论区 |

| /arg | 标签页 | 按标签分类查看文章 |

| /tree | 留言板 | 访客留言互动 |

| /muisc | 问问 | 咨询/问答页 |

| /mine | 关于 | 博主信息展示 |

| /datail | 详情 | 分类详情页 |

启动

bash
复制代码
cd check_user yarn dev

前端管理端 (check-admin)

基于 Soybean Admin 的中后台管理模板,使用 Vue 3 + Vite 8 + NaiveUI + UnoCSS

技术栈

| 技术 | 用途 |

| -------------- | ------------ |

| Vue 3 | 前端框架 |

| Vite 8 | 构建工具 |

| TypeScript | 类型安全 |

| NaiveUI | UI 组件库 |

| Pinia | 状态管理 |

| Vue Router 5 | 路由管理 |

| UnoCSS | 原子化 CSS |

| Vue I18n | 国际化 |

| ECharts | 数据可视化 |

| elegant-router | 文件路由系统 |

功能模块

  • 登录/注册(密码登录、验证码登录、微信绑定)

  • 工作台首页(数据卡片、折线图、饼图、项目动态)

  • 主题配置(亮/暗模式、主题色、布局模式、水印设置)

  • 多语言支持

  • 多布局模式(垂直、水平、混合)

启动

bash
复制代码
cd check-admin pnpm dev

后端服务 (springboot-check)

基于 Spring Boot 2.7.2 的博客后端服务。

技术栈

| 技术 | 版本 | 用途 |

| --------------- | ------ | ------------ |

| Spring Boot | 2.7.2 | 基础框架 |

| Java | 8 | 运行环境 |

| MyBatis-Plus | 3.5.2 | ORM + 分页 |

| MySQL | 8 | 关系数据库 |

| Redis | - | 缓存/会话 |

| Elasticsearch | - | 全文检索 |

| 阿里云 OSS | 3.17.4 | 文件云端存储 |

| Knife4j/Swagger | 3.0.3 | 接口文档 |

| Hutool | 5.8.8 | Java 工具库 |

| EasyExcel | 3.1.1 | Excel 处理 |

| 微信开放平台 | 4.4.0 | 微信登录 |

数据库设计 (check_blog)

| 表名 | 说明 |

| ----------------- | ----------------------------------------------------------- |

| blogger_info | 博主信息(头像、昵称、社交链接、个人标签等) |

| articles | 文章(标题、Markdown 正文、分类、阅读量、评论数、全文索引) |

| categories | 文章分类 |

| tags | 标签(含颜色) |

| article_tags | 文章-标签多对多关联 |

| comments | 树状嵌套评论(楼中楼,支持审核) |

| friend_links | 友情链接 |

| visit_logs | 访问日志(IP、UA、页面、日期) |

| daily_stats | 每日 PV/UV 统计 |

| system_settings | KV 系统设置(邮件配置、评论开关等) |

项目结构

text
复制代码
src/main/java/com/yupi/springbootinit ├── annotation/ # 自定义注解 ├── aop/ # AOP 切面(日志、鉴权) ├── common/ # 通用组件(统一响应体、错误码、分页) ├── config/ # 配置类(跨域、JSON、Swagger、MyBatis-Plus、OSS) ├── constant/ # 常量定义 ├── controller/ │ ├── user/ # 用户端 API │ └── admin/ # 管理端 API ├── exception/ # 异常处理 ├── mapper/ # MyBatis-Plus Mapper ├── model/ │ ├── domain/ # 实体类 │ ├── dto/ # 请求/传输对象 │ └── vo/ # 视图对象 ├── service/ # 业务逻辑层 │ └── impl/ # 业务实现 ├── utils/ # 工具类(JWT、OSS、IP、SQL) └── MainApplication.java

API 接口

  • 所有接口以 /api 开头

  • 默认端口 8088

  • 启动后访问 Swagger 文档:http://localhost:8088/api/doc.html

启动

bash
复制代码
cd springboot-check # 1. 创建数据库并导入表结构 mysql -u root -p < sql/create_table.sql # 2. 导入测试数据(可选) mysql -u root -p < sql/data.sql # 3. 修改 application.yml 中的数据库配置 # 4. 启动服务 mvn spring-boot:run

Docker 部署

bash
复制代码
docker build -t chuckle-blog . docker run -p 8088:8088 chuckle-blog

核心业务流程

text
复制代码
博主写文章(Markdown) → 发布到博客 ↓ 访客浏览首页 → 查看文章详情 → 评论互动 ↓ 后台管理 → 文章管理 → 评论审核 → 数据统计 ```x.cn/)
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
cv大师
作者分享
前端vue3后台管理系统模板
4
编程导航的第一个项目OJ
11
# 大三浅谈vuerouter https://router.vuejs.org/zh/guide/ 1)组件: <RouterView /> <RouterLink to="/about">Go to About</RouterLink> 本质上是普通的vue组件 动态路由事例 import User from './User.vue' // 这些都会传递给 `createRouter` const routes = [ // 动态字段以冒号开始 { path: '/users/:id', component: User }, ] 路由配置 url后缀 route.params 单个参数 /users/:username /users/eduardo { username: 'eduardo' } 多个参数/users/:username/:postId /users/eduardo/123 { username: 'eduardo', postId: '123' } <template> <div> <!-- 当前路由可以通过 $route 在模板中访问 --> User {{ $route.params.id }} </div> </template> 动态路由参数监测 <script setup> import { watch } from 'vue' import { useRoute } from 'vue-router' const route = useRoute() watch(() => route.params.id, (newId, oldId) => { // 对路由变化做出响应... }) </script> 任意参数参考高级匹配 router 框架给的方法集全 1.push(跳转,不刷新页面跳转,更新routerview) vue2 this.$router.push(...) vue3 router.push(.......) // 字符串路径 router.push('/users/eduardo') // 带有路径的对象 router.push({ path: '/users/eduardo' }) // 命名的路由,并加上参数,让路由建立 url router.push({ name: 'user', params: { username: 'eduardo' } }) // 带查询参数,结果是 /register?plan=private router.push({ path: '/register', query: { plan: 'private' } }) // 带 hash,结果是 /about#team router.push({ path: '/about', hash: '#team' }) const username = 'eduardo' // 我们可以手动建立 url,但我们必须自己处理编码 router.push(`/user/${username}`) // -> /user/eduardo // 同样 router.push({ path: `/user/${username}` }) // -> /user/eduardo // 如果可能的话,使用 `name` 和 `params` 从自动 URL 编码中获益 router.push({ name: 'user', params: { username } }) // -> /user/eduardo // `params` 不能与 `path` 一起使用 router.push({ path: '/user', params: { username } }) // -> /user 2全局前置守卫 router.beforeEach 用途路由权限验证 const router = createRouter({ ... }) router.beforeEach((to, from) => { // ... // 返回 false 以取消导航 return false }) router.beforeEach(async (to, from,next) => { if ( // 检查用户是否已登录 !isAuthenticated && // ❗️ 避免无限重定向 to.name !== 'Login' ) { // 将用户重定向到登录页面 return { name: 'Login' } ‖ return '/login' || next({ name: 'Login' }) || ”next(〞Login〞) } }) 3.全局后置钩子 router.afterEach((to, from) => { sendToAnalytics(to.fullPath) }) 它们对于分析、更改页面标题、声明页面等辅助功能以及许多其他事情都很有用。 4.路由独享的守卫 进入路由触发,权限校验的一种方式 const routes = [ { path: '/users/:id', component: UserDetails, beforeEnter: (to, from) => { // reject the navigation return false }, }, ] 路由元信息 const routes = [ { path: '/posts', component: PostsLayout, children: [ { path: 'new', component: PostsNew, // 只有经过身份验证的用户才能创建帖子 meta: { requiresAuth: true }, }, { path: ':id', component: PostsDetail // 任何人都可以阅读文章 meta: { requiresAuth: false }, } ] } 路由参数需要监测 组件路由数据获取 import { useRoute } from 'vue-router' import { getPost } from './api.js' const route = useRoute() 常用组合式api <script setup> import { useRouter, useRoute } from 'vue-router' const router = useRouter() const route = useRoute() function pushWithQuery(query) { router.push({ name: 'search', query: { ...route.query, ...query, }, }) } </script> <script setup> import { useRoute } from 'vue-router' import { ref, watch } from 'vue' const route = useRoute() const userData = ref() // 当参数更改时获取用户信息 watch( () => route.params.id, async newId => { userData.value = await fetchUser(newId) } ) </script>
3
下载 APP