# 毕设
**Repository Path**: frankGallagher/graduation-project
## Basic Information
- **Project Name**: 毕设
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2026-05-09
- **Last Updated**: 2026-06-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
校园志愿服务管理平台
Campus Volunteer Service Management Platform
---
## 目录
- [项目简介](#项目简介)
- [在线演示](#在线演示)
- [核心功能](#核心功能)
- [技术栈](#技术栈)
- [项目结构](#项目结构)
- [环境要求](#环境要求)
- [快速开始](#快速开始)
- [部署指南](#部署指南)
- [测试账号](#测试账号)
- [API 接口](#api-接口)
- [设计规范](#设计规范)
- [常见问题](#常见问题)
- [贡献指南](#贡献指南)
- [许可证](#许可证)
- [联系方式](#联系方式)
---
## 项目简介
本项目是一个面向高校的**志愿服务全流程数字化管理平台**,旨在解决校园志愿服务信息分散、流程不规范、记录不透明、统计困难等问题。平台为**学生志愿者**、**组织负责人**和**校级管理员**三类角色提供统一、高效、透明的管理服务。
**核心价值:**
- 规范志愿项目的发布、报名、审核、记录与认证流程
- 实现志愿服务时长的自动化记录与统计
- 为管理决策提供可视化的数据支持
- 生成标准化的志愿服务证书
---
## 在线演示
- **访问地址:** [http://8.160.124.24/](http://8.160.124.24/)
---
## 核心功能
### 用户端(学生志愿者)
| 功能模块 | 功能说明 |
|---------|---------|
| 项目浏览 | 按分类、状态筛选志愿项目,支持关键词搜索 |
| 在线报名 | 一键报名参与志愿活动,实时查看审核状态 |
| 时长记录 | 提交志愿服务时长,等待组织确认 |
| 个人中心 | 查看参与统计、报名记录、服务时长 |
| 证书管理 | 申请并下载志愿服务证明 |
| 评价反馈 | 对参与的项目进行评分和评价 |
| 消息通知 | 接收报名审核、时长确认等系统通知 |
### 管理端(组织负责人 / 校级管理员)
| 功能模块 | 功能说明 |
|---------|---------|
| 项目管理 | 创建、编辑、发布志愿项目 |
| 报名审核 | 审核学生报名申请,通过或拒绝 |
| 时长确认 | 确认学生提交的志愿服务时长 |
| 用户管理 | 管理平台用户账号与角色权限 |
| 数据统计 | 可视化图表展示平台运营数据 |
| 机构管理 | 管理志愿服务组织机构信息 |
| 操作日志 | 查看系统关键操作的审计日志 |
| 证书审核 | 审核并发放志愿服务证书 |
---
## 技术栈
### 前端
| 技术 | 版本 | 用途 |
|------|------|------|
| Vue 3 | 3.3+ | 渐进式 JavaScript 框架(组合式 API) |
| Element Plus | 2.4+ | UI 组件库 |
| Pinia | 2.1+ | 状态管理(含持久化插件) |
| Vue Router | 4.2+ | 前端路由 |
| Axios | 1.6+ | HTTP 请求库 |
| ECharts | 5.4+ | 数据可视化图表 |
| Vite | 4.5+ | 构建工具 |
| Sass | 1.69+ | CSS 预处理器 |
### 后端
| 技术 | 版本 | 用途 |
|------|------|------|
| Node.js | 18+ | JavaScript 运行时 |
| Express | 4.18+ | Web 应用框架 |
| MySQL2 | 3.6+ | 数据库驱动 |
| JWT | 9.0+ | 身份认证 |
| bcryptjs | 2.4+ | 密码加密 |
| Helmet | 7.1+ | 安全 HTTP 头 |
| express-validator | 7.0+ | 请求参数校验 |
| Multer | 1.4+ | 文件上传处理 |
### 数据库与部署
| 技术 | 用途 |
|------|------|
| MySQL 8.0 | 关系型数据库 |
| Nginx | 反向代理与静态资源服务 |
| PM2 | Node.js 进程管理 |
| 宝塔面板 | 服务器运维管理 |
---
## 项目结构
```
VolunteerSystem/
├── frontend/ # 前端项目
│ ├── src/
│ │ ├── api/ # API 请求封装
│ │ ├── assets/ # 静态资源
│ │ │ ├── images/ # 背景图片素材
│ │ │ ├── styles/ # 全局样式(设计规范)
│ │ │ ├── bg-*.svg # SVG 背景图案
│ │ │ └── ...
│ │ ├── components/ # 通用组件
│ │ ├── layouts/ # 布局组件
│ │ │ ├── MainLayout.vue # 公共页面布局
│ │ │ ├── UserLayout.vue # 用户中心布局
│ │ │ └── AdminLayout.vue # 管理后台布局
│ │ ├── router/ # 路由配置
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── views/ # 页面组件
│ │ │ ├── admin/ # 管理后台页面
│ │ │ ├── user/ # 用户中心页面
│ │ │ ├── LoginPage.vue # 登录页
│ │ │ ├── ProjectListPage.vue
│ │ │ ├── ProjectDetailPage.vue
│ │ │ └── ...
│ │ ├── App.vue # 根组件
│ │ └── main.js # 入口文件
│ ├── vite.config.js # Vite 配置
│ └── package.json
│
├── backend/ # 后端项目
│ ├── src/
│ │ ├── controllers/ # 路由控制器
│ │ ├── models/ # 数据库模型
│ │ ├── middlewares/ # 中间件(认证、权限)
│ │ ├── routes/ # API 路由定义
│ │ ├── services/ # 业务逻辑层
│ │ ├── utils/ # 工具函数
│ │ └── app.js # Express 应用入口
│ ├── config/ # 配置文件(数据库连接)
│ ├── database/ # 数据库脚本
│ ├── uploads/ # 文件上传目录
│ ├── .env # 环境变量
│ └── package.json
│
├── database/ # 数据库脚本
│ ├── schema.sql # 表结构定义
│ └── seed.sql # 初始数据
│
├── docs/ # 项目文档
│ ├── PRD.md # 产品需求文档
│ ├── Frontend.md # 前端技术文档
│ ├── Backend.md # 后端技术文档
│ ├── API.md # API 接口文档
│ ├── task.md # 开发任务清单
│ └── context_state.md # 项目状态追踪
│
└── README.md # 项目说明文件
```
---
## 环境要求
| 环境 | 最低版本 | 推荐版本 |
|------|---------|---------|
| Node.js | 18.0.0 | 18.x LTS |
| MySQL | 8.0 | 8.0+ |
| npm | 8.0.0 | 9.x |
| 操作系统 | Windows 10 / macOS 12 / Ubuntu 20.04 | - |
---
## 快速开始
### 1. 克隆项目
```bash
git clone https://gitee.com/frankGallagher/graduation-project.git
cd graduation-project
```
### 2. 数据库初始化
```bash
# 登录 MySQL
mysql -u root -p
# 创建数据库
CREATE DATABASE volunteer_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 导入表结构
mysql -u root -p volunteer_db < database/schema.sql
# 导入初始数据(含测试账号)
mysql -u root -p volunteer_db < database/seed.sql
```
### 3. 后端启动
```bash
cd backend
# 安装依赖
npm install
# 配置环境变量(修改 .env 文件中的数据库连接信息)
# DB_HOST=localhost
# DB_PORT=3306
# DB_USER=root
# DB_PASSWORD=你的数据库密码
# DB_NAME=volunteer_db
# 开发模式启动(自动重启)
npm run dev
# 或生产模式启动
npm start
```
后端服务默认运行在 `http://localhost:3000`
### 4. 前端启动
```bash
cd frontend
# 安装依赖
npm install
# 开发模式启动
npm run dev
```
前端开发服务器默认运行在 `http://localhost:5173`
### 5. 访问应用
打开浏览器访问 `http://localhost:5173`,使用测试账号登录即可。
---
## 部署指南
### 前端打包
```bash
cd frontend
npm run build
```
打包产物位于 `frontend/dist/` 目录,将其中的所有文件上传到 Web 服务器根目录。
### Nginx 配置
```nginx
server {
listen 80;
server_name your-domain.com;
root /www/wwwroot/volunteer-frontend;
index index.html;
# SPA 路由回退
location / {
try_files $uri $uri/ /index.html;
}
# API 反向代理
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 上传文件代理
location /uploads/ {
proxy_pass http://127.0.0.1:3000;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 7d;
add_header Cache-Control "public, immutable";
}
# Gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
```
### PM2 进程管理
```bash
cd /www/wwwroot/volunteer-backend
npm install --production
# 使用 PM2 启动
pm2 start src/app.js --name "volunteer-api"
# 设置开机自启
pm2 startup
pm2 save
```
---
## 测试账号
初始数据导入后,可使用以下账号登录:
| 角色 | 用户名 | 密码 | 说明 |
|------|--------|------|------|
| 系统管理员 | admin | admin123 | 拥有所有管理权限 |
| 组织负责人 | org001 | org123 | 可发布项目、审核报名 |
| 学生志愿者 | student001 | stu123 | 可浏览项目、报名参与 |
> 以上为开发测试账号,生产环境请务必修改密码并删除测试数据。
---
## API 接口
### 基础信息
- **基础 URL:** `/api/v1`
- **认证方式:** JWT Bearer Token
- **请求格式:** JSON
- **响应格式:**
```json
{
"code": 20000,
"message": "操作成功",
"data": {}
}
```
### 接口列表
| 模块 | 接口 | 方法 | 说明 | 认证 |
|------|------|------|------|------|
| 认证 | `/auth/login` | POST | 用户登录 | 否 |
| 认证 | `/auth/register` | POST | 用户注册 | 否 |
| 用户 | `/users/me` | GET | 获取当前用户信息 | 是 |
| 项目 | `/projects` | GET | 获取项目列表 | 否 |
| 项目 | `/projects` | POST | 创建项目 | 是(管理员) |
| 项目 | `/projects/:id` | GET | 获取项目详情 | 否 |
| 项目 | `/projects/:id` | PUT | 更新项目 | 是(管理员) |
| 报名 | `/projects/:id/applications` | POST | 提交报名 | 是 |
| 报名 | `/applications` | GET | 获取报名列表 | 是 |
| 报名 | `/applications/:id/review` | POST | 审核报名 | 是(管理员) |
| 时长 | `/hours` | POST | 提交时长记录 | 是 |
| 时长 | `/hours/:id/confirm` | POST | 确认时长 | 是(管理员) |
| 统计 | `/statistics/overview` | GET | 获取总览统计 | 是(管理员) |
| 统计 | `/statistics/user/:id` | GET | 获取用户统计 | 是 |
| 证书 | `/certificates` | GET | 获取证书列表 | 是 |
| 证书 | `/certificates/:id/download` | GET | 下载证书 | 是 |
| 通知 | `/notifications` | GET | 获取通知列表 | 是 |
| 反馈 | `/feedbacks` | POST | 提交评价 | 是 |
### 错误码说明
| 错误码 | 说明 |
|--------|------|
| 20000 | 操作成功 |
| 40001 | 请求参数错误 |
| 40101 | 未登录或 Token 过期 |
| 40301 | 权限不足 |
| 40401 | 资源不存在 |
| 50000 | 服务器内部错误 |
---
## 设计规范
### 色彩系统
| 用途 | 色值 | 说明 |
|------|------|------|
| 主色 | `#3FBFAB` | 青绿色品牌色 |
| 主色-浅 | `#E6F7F4` | 背景、标签 |
| 主色-深 | `#35A695` | hover 状态 |
| 强调色 | `#F5A65B` | 暖琥珀色 |
| 成功色 | `#67C23A` | 状态标签 |
| 警告色 | `#E6A23C` | 进行中状态 |
| 危险色 | `#F56C6C` | 错误提示 |
| 背景色 | `#F5F7FA` | 页面背景 |
### 设计风格
- **清新质感** — 低饱和度色彩,柔和阴影
- **微交互** — hover 上浮、点击按压、焦点发光
- **细节高级感** — 12px 圆角卡片、极淡纹理背景、动态粒子
---
## 常见问题
### Q: 数据库连接失败怎么办?
检查 `.env` 文件中的数据库配置是否正确,确保 MySQL 服务已启动,用户名密码无误。
### Q: 前端页面刷新后 404?
确保 Nginx 配置了 SPA 路由回退:`try_files $uri $uri/ /index.html;`
### Q: 图片/头像无法显示?
检查 `uploads/` 目录是否存在且有写入权限:`chmod -R 755 uploads/`
### Q: 如何修改端口?
- 后端:修改 `.env` 中的 `PORT=3000`
- 前端开发:修改 `vite.config.js` 中的 `server.port`
### Q: 如何部署到宝塔面板?
请参考上方 [部署指南](#部署指南) 部分,或查阅 `docs/` 目录下的详细文档。
---
## 贡献指南
1. Fork 本仓库
2. 创建特性分支:`git checkout -b feature/your-feature`
3. 提交更改:`git commit -m 'feat: 添加某功能'`
4. 推送分支:`git push origin feature/your-feature`
5. 提交 Pull Request
### 提交规范
| 类型 | 说明 |
|------|------|
| feat | 新功能 |
| fix | 修复 Bug |
| docs | 文档更新 |
| style | 代码格式调整 |
| refactor | 代码重构 |
| test | 测试相关 |
| chore | 构建/工具变动 |
---
## 许可证
本项目基于 [MIT License](LICENSE) 开源。
---
## 联系方式
- **项目地址:** [https://gitee.com/frankGallagher/graduation-project](https://gitee.com/frankGallagher/graduation-project)
- **在线演示:** [http://8.160.124.24/](http://8.160.124.24/)
- **问题反馈:** 请通过 Gitee Issues 提交
---
如果这个项目对你有帮助,请给一个 Star 支持一下!