👉 在线演示 (Live Demo)
一个基于 Spring Boot + Vue 3 的前后端分离校园失物招领信息共享平台
快速开始 »
·
功能特性
·
技术栈
·
参与贡献
Campus Finder 是一个面向高校师生的失物招领信息管理平台。用户可以在平台上发布失物或招领信息,通过分类浏览和关键词搜索快速匹配,并在线提交认领申请。平台支持图片上传、实时通知、公告管理等功能,旨在为校园失物的寻回提供便捷、安全的渠道。
- 注册 / 登录 — 基于学号的账号体系,JWT Token 认证
- 信息发布 — 发布失物(丢失)或招领(捡到)信息,支持多图上传
- 分类浏览 — 按物品类型分类浏览(手机、证件、书籍、雨伞等 14+ 类别)
- 认领申请 — 在线提交认领请求,附带证明信息和联系方式
- 认领审核 — 物品发布者审核认领申请,支持通过/拒绝并回复理由
- 消息通知 — 实时接收认领申请通知,站内消息提醒
- 个人中心 — 修改个人资料、头像、联系方式、密码
- 用户管理 — 查看/禁用/删除用户,分配角色权限
- 分类管理 — 物品分类的增删改查,支持排序和图标配置
- 公告管理 — 发布/编辑/置顶/删除系统公告
- 认领审计 — 查看全平台认领记录
- 操作日志 — 记录关键操作(角色变更等)
- 角色权限 — 三级权限体系:
USER/ADMIN/SUPER_ADMIN - 逻辑删除 — 数据软删除,支持数据恢复
- 全局异常处理 — 统一错误响应格式
- 分页查询 — MyBatis-Plus 分页插件
- 文件上传 — 图片上传与静态资源服务
| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 3.5.8 | 核心框架 |
| Java | 17 | 编程语言 |
| MyBatis-Plus | 3.5.6 | ORM 框架 |
| MySQL | 9.x | 关系型数据库 |
| JWT | 4.4.0 | 身份认证 (java-jwt) |
| Lombok | — | 代码简化 |
| Jakarta Validation | — | 参数校验 |
| Maven | — | 项目构建 |
| 技术 | 版本 | 说明 |
|---|---|---|
| Vue | 3.5.24 | 渐进式 JavaScript 框架 |
| Vite | 7.2.4 | 构建工具 |
| Element Plus | 2.12.0 | UI 组件库 |
| Vue Router | 4.6.3 | 路由管理 |
| Axios | 1.13.2 | HTTP 客户端 |
| Sass | 1.96.0 | CSS 预处理器 |
campus-finder/
├── 📄 pom.xml # Maven 项目配置
├── 📄 campus_lost_found.sql # 数据库初始化脚本
├── 📂 src/main/
│ ├── 📂 java/com/campus/finder/
│ │ ├── CampusFinderApplication.java # 启动类
│ │ ├── 📂 annotation/ # 自定义注解
│ │ ├── 📂 common/ # 通用工具 (Result)
│ │ ├── 📂 config/ # 配置类
│ │ ├── 📂 controller/ # 控制器 (7个)
│ │ ├── 📂 dto/ # 数据传输对象 (8个)
│ │ ├── 📂 entity/ # 实体类 (7个)
│ │ ├── 📂 exception/ # 全局异常处理
│ │ ├── 📂 interceptor/ # 登录拦截器
│ │ ├── 📂 mapper/ # MyBatis Mapper
│ │ ├── 📂 service/ # 业务接口
│ │ └── 📂 service/impl/ # 业务实现
│ └── 📂 resources/
│ └── application.yml # 应用配置
├── 📂 web/ # 前端项目 (Vue 3)
│ ├── 📄 package.json
│ ├── 📄 vite.config.js
│ └── 📂 src/
│ ├── App.vue
│ ├── main.js
│ ├── 📂 api/ # API 接口封装
│ ├── 📂 router/ # 路由配置
│ └── 📂 views/ # 页面视图
│ ├── Home.vue # 首页
│ ├── Login.vue # 登录/注册
│ ├── Layout.vue # 布局框架
│ ├── ArticleCategory.vue # 物品分类/广场
│ ├── ArticleManage.vue # 我的发布
│ ├── ClaimAudit.vue # 认领审核
│ ├── AnnouncementManage.vue # 公告管理
│ ├── CategoryManage.vue # 分类管理
│ ├── 📂 admin/ # 管理员页面
│ └── 📂 user/ # 用户中心
└── 📂 uploads/ # 文件上传目录
| 环境 | 最低版本 |
|---|---|
| JDK | 17+ |
| Node.js | 18+ |
| MySQL | 8.0+ |
| Maven | 3.8+ |
git clone https://github.com/van104/campus-finder.git
cd campus-finder# 登录 MySQL 并创建数据库
mysql -u root -p
CREATE DATABASE campus_lost_found DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE campus_lost_found;
# 导入初始化脚本
SOURCE campus_lost_found.sql;项目导入 SQL 脚本后,系统预设了一个超级管理员账号:
| 角色 | 用户名 | 学号 | 密码 |
|---|---|---|---|
| 超级管理员 | admin |
admin |
(您初始设置的管理员密码) |
💡 建议首次登录后通过“个人中心”及时修改密码。
编辑 src/main/resources/application.yml,修改数据库连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/campus_lost_found?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: your_username # 修改为你的数据库用户名
password: your_password # 修改为你的数据库密码或通过环境变量配置(推荐):
# 创建 .env 文件
DB_USERNAME=your_username
DB_PASSWORD=your_password# Maven 方式
./mvnw spring-boot:run
# 或使用 IDE 直接运行 CampusFinderApplication.java后端服务将在 http://localhost:8080 启动,API 上下文路径为 /api。
cd web
npm install
npm run dev前端开发服务器启动后,访问终端输出的地址(默认 http://localhost:5173)即可。
💡 Vite 已配置代理,开发环境下
/api和/files请求会自动转发到后端服务。
server:
port: 8080 # 服务端口
servlet:
context-path: /api # API 上下文路径
spring:
datasource:
url: jdbc:mysql://localhost:3306/campus_lost_found
username: ${DB_USERNAME} # 支持环境变量
password: ${DB_PASSWORD} # 支持环境变量
hikari:
maximum-pool-size: 10 # 连接池最大连接数
minimum-idle: 5 # 最小空闲连接数
mybatis-plus:
global-config:
db-config:
id-type: AUTO # 主键自增
logic-delete-field: deleted
logic-not-delete-value: 0
logic-delete-value: 1系统包含 7 张核心数据表:
| 表名 | 说明 | 关键字段 |
|---|---|---|
sys_users |
用户表 | username, student_id, role, status |
lost_items |
失物招领信息表 | type(失物/招领), status, images(JSON), location |
claim_records |
认领记录表 | item_id, claimer_id, status(待审核/通过/拒绝), proof_info |
sys_categories |
物品分类表 | name, icon, sort_order |
sys_announcements |
系统公告表 | title, content, is_pinned |
sys_notifications |
消息通知表 | user_id, type, is_read |
operation_logs |
操作日志表 | operator_id, operation_type, content |
所有核心表均支持 逻辑删除(
deleted字段),详见 SQL 脚本campus_lost_found.sql。
所有接口以 /api 为前缀,需携带 Authorization 请求头(JWT Token),登录/注册接口除外。
| 模块 | 接口前缀 | 说明 |
|---|---|---|
| 用户 | /api/users |
注册/登录/个人信息/修改密码 |
| 失物招领 | /api/lost-items |
发布/查询/我的发布/详情 |
| 认领 | /api/claim-records |
提交认领/审核/记录查询 |
| 分类 | /api/categories |
分类列表/CRUD |
| 公告 | /api/announcements |
公告列表/CRUD |
| 通知 | /api/notifications |
通知列表/标记已读 |
| 文件 | /api/files |
图片上传/访问 |
欢迎任何形式的贡献!请按以下步骤操作:
- Fork 本仓库
- 创建你的功能分支:
git checkout -b feature/amazing-feature - 提交你的修改:
git commit -m 'feat: 添加某某功能' - 推送到分支:
git push origin feature/amazing-feature - 发起 Pull Request
请遵循 Conventional Commits 规范:
| 前缀 | 说明 |
|---|---|
feat |
新功能 |
fix |
Bug 修复 |
docs |
文档更新 |
style |
代码格式调整 |
refactor |
代码重构 |
test |
测试相关 |
chore |
构建/工具链相关 |
本项目采用 MIT License 开源协议 — 详情请参阅 LICENSE 文件。
如果这个项目对你有帮助,请给一个 ⭐ Star!