社区志愿者|基于Springboot+Vue实现社区志愿者平台系统
本项目基于Springboot+Vue开发实现一套社区志愿者平台管理系统。用户有平台管理员和前端用户两类。平台管理员主要实现:管理员管理、用户管理、公告管理、轮播图管理、风采展示管理、活动信息管理、志愿者申请审核、参加活动管理、评论过滤管理等相关功能。前端用户主要有注册登陆、查看活动信息、查看公告 信息、查看活动历往的风采展示、信息评论、志愿者评价等操作功能。系统功能完整,界面友好大方,适合做毕业
作者主页:编程指南针
作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师
主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助
收藏点赞不迷路 关注作者有好处
文末获取源码
项目编号:BS-XX-212
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:Springboot+Vue
二,项目简介
本项目基于Springboot+Vue开发实现一套社区志愿者平台管理系统。用户有平台管理员和前端用户两类。平台管理员主要实现:管理员管理、用户管理、公告管理、轮播图管理、风采展示管理、活动信息管理、志愿者申请审核、参加活动管理、评论过滤管理等相关功能。前端用户主要有注册登陆、查看活动信息、查看公告 信息、查看活动历往的风采展示、信息评论、志愿者评价等操作功能。系统功能完整,界面友好大方,适合做毕业设计使用。
系统表结构如下:
【管理员】模块,表名:admins | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
username | varchar(50) | 帐号 |
pwd | varchar(50) | 密码 |
【轮播图】模块,表名:lunbotu | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
title | varchar(50) | 标题 |
image | varchar(255) | 图片 |
url | varchar(255) | 连接地址 |
【用户】模块,表名:yonghu | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
cx | varchar(50) | 权限 |
yonghuming | varchar(50) | 用户名 |
mima | varchar(50) | 密码 |
xingming | varchar(50) | 姓名 |
xingbie | varchar(10) | 性别 |
shouji | varchar(50) | 手机 |
youxiang | varchar(50) | 邮箱 |
jifen | int | 积分 |
shenfenzheng | varchar(50) | 身份证 |
touxiang | varchar(255) | 头像 |
【风采展示】模块,表名:fengcaizhanshi | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
suoluetu | varchar(255) | 缩略图 |
tuji | text | 图集 |
biaoti | varchar(255) | 标题 |
suoshushequ | int | 所属社区 |
xiangqing | longtext | 详情 |
faburen | varchar(50) | 发布人 |
addtime | timestamp | 添加时间 |
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
【评论】模块,表名:pinglun | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
biao | varchar(50) | 表 |
biaoid | int | 表id |
biaoti | varchar(255) | 标题 |
pingfen | varchar(255) | 评分 |
pinglunneirong | text | 评论内容 |
pinglunren | varchar(50) | 评论人 |
addtime | timestamp | 评论时间 |
【社区】模块,表名:shequ | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
shequmingcheng | varchar(255) | 社区名称 |
【活动信息】模块,表名:huodongxinxi | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
huodongbianhao | varchar(50) | 活动编号 |
tupian | varchar(255) | 图片 |
huodongbiaoti | varchar(255) | 活动标题 |
suoshushequ | int | 所属社区 |
zhaomurenshu | int | 招募人数 |
yibaomingrenshu | int | 已报名人数 |
zhuangtai | varchar(50) | 状态 |
kehuodejifen | int | 可获得积分 |
huodongxiangqing | longtext | 活动详情 |
faburen | varchar(50) | 发布人 |
addtime | timestamp | 添加时间 |
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
【申请志愿者】模块,表名:shenqingzhiyuanzhe | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
shenqingbianhao | varchar(50) | 申请编号 |
biaoti | varchar(50) | 标题 |
shenqingyonghu | varchar(50) | 申请用户 |
zhenshixingming | varchar(50) | 真实姓名 |
xingbie | varchar(10) | 性别 |
shenfenzhenghao | varchar(50) | 身份证号 |
lianxidianhua | varchar(50) | 联系电话 |
gongzuodanwei | varchar(50) | 工作单位 |
xianjuzhudizhi | varchar(255) | 现居住地址 |
hujidizhi | varchar(255) | 户籍地址 |
shenqingmiaoshu | text | 申请描述 |
shenqingzhuangtai | varchar(50) | 申请状态 |
addtime | timestamp | 申请时间 |
【申请审核】模块,表名:shenqingshenhe | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
shenqingzhiyuanzheid | int | 申请志愿者id |
shenqingbianhao | varchar(50) | 申请编号 |
biaoti | varchar(50) | 标题 |
shenqingyonghu | varchar(50) | 申请用户 |
zhenshixingming | varchar(50) | 真实姓名 |
shenhe | varchar(50) | 审核 |
beizhu | text | 备注 |
shenheren | varchar(50) | 审核人 |
addtime | timestamp | 添加时间 |
设置索引, 字段:shenqingzhiyuanzheid , 关联表【shenqingzhiyuanzhe】中字段id |
【邀请成为志愿者】模块,表名:yaoqingchengweizhiyuanzhe | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
yonghuid | int | 用户id |
yonghuming | varchar(50) | 用户名 |
xingming | varchar(50) | 姓名 |
biaoti | varchar(50) | 标题 |
neirong | longtext | 内容 |
yaoqingren | varchar(50) | 邀请人 |
addtime | timestamp | 添加时间 |
设置索引, 字段:yonghuid , 关联表【yonghu】中字段id |
【公告】模块,表名:gonggao | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
biaoti | varchar(50) | 标题 |
neirong | longtext | 内容 |
faburen | varchar(50) | 发布人 |
addtime | timestamp | 添加时间 |
【报名活动】模块,表名:baominghuodong | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
baomingbianhao | varchar(50) | 报名编号 |
huodongxinxiid | int | 活动信息id |
huodongbianhao | varchar(50) | 活动编号 |
huodongbiaoti | varchar(255) | 活动标题 |
suoshushequ | int | 所属社区 |
kehuodejifen | int | 可获得积分 |
faburen | varchar(50) | 发布人 |
shenhezhuangtai | varchar(50) | 审核状态 |
baomingshuoming | text | 报名说明 |
baomingren | varchar(50) | 报名人 |
addtime | timestamp | 报名时间 |
设置索引, 字段:huodongxinxiid , 关联表【huodongxinxi】中字段id | ||
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
【报名审核】模块,表名:baomingshenhe | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
baominghuodongid | int | 报名活动id |
baomingbianhao | varchar(50) | 报名编号 |
huodongbianhao | varchar(50) | 活动编号 |
huodongbiaoti | varchar(255) | 活动标题 |
suoshushequ | int | 所属社区 |
kehuodejifen | int | 可获得积分 |
baomingren | varchar(50) | 报名人 |
shenhe | varchar(50) | 审核 |
beizhu | text | 备注 |
shenheren | varchar(50) | 审核人 |
addtime | timestamp | 添加时间 |
设置索引, 字段:baominghuodongid , 关联表【baominghuodong】中字段id | ||
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
【志愿者评价】模块,表名:zhiyuanzhepingjia | ||
字段名 | 字段类型 | 名称 |
id | int | (主键) |
huodongxinxiid | int | 活动信息id |
huodongbianhao | varchar(50) | 活动编号 |
huodongbiaoti | varchar(255) | 活动标题 |
suoshushequ | int | 所属社区 |
faburen | varchar(50) | 发布人 |
zhiyuanzhe | varchar(50) | 志愿者 |
pingfen | varchar(50) | 评分 |
shifouniming | varchar(50) | 是否匿名 |
pingjiaren | varchar(50) | 评价人 |
pingjianeirong | longtext | 评价内容 |
addtime | timestamp | 添加时间 |
设置索引, 字段:huodongxinxiid , 关联表【huodongxinxi】中字段id | ||
设置索引, 字段:suoshushequ , 关联表【shequ】中的id 字段 |
三,系统展示
系统前端首页
志愿者活动
活动评价
志愿者评价
活动风采展示
系统公告
用户注册
志愿者个人中心
个人资料管理
志愿者申请管理
活动报名查询
评论评价管理
管理员登录
管理员管理
轮播图和公告管理
活动风采展示
社区管理和活动信息管理
志愿者审核管理
活动报名审核
过滤词管理
四,核心代码展示
package com.spring.controller;
import com.jntoo.db.*;
import com.jntoo.db.utils.*;
import com.spring.dao.*;
import com.spring.entity.*;
import com.spring.service.*;
import com.spring.util.*;
import com.spring.util.Info;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import tk.mybatis.mapper.entity.Example;
/**
* 管理员 */
@Controller
public class AdminsController extends BaseController {
@Autowired
private AdminsMapper dao;
@Autowired
private AdminsService service;
/**
* 后台列表页
*
*/
@RequestMapping("/admins_list")
public String list() {
// 检测是否有登录,没登录则跳转到登录页面
if (!checkLogin()) {
return showError("尚未登录", "./login.do");
}
String order = Request.get("order", "id"); // 获取前台提交的URL参数 order 如果没有则设置为id
String sort = Request.get("sort", "desc"); // 获取前台提交的URL参数 sort 如果没有则设置为desc
int pagesize = Request.getInt("pagesize", 12); // 获取前台一页多少行数据
Example example = new Example(Admins.class); // 创建一个扩展搜索类
Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类
String where = " 1=1 "; // 创建初始条件为:1=1
where += getWhere(); // 从方法中获取url 上的参数,并写成 sql条件语句
criteria.andCondition(where); // 将条件写进上面的扩展条件类中
if (sort.equals("desc")) { // 判断前台提交的sort 参数是否等于 desc倒序 是则使用倒序,否则使用正序
example.orderBy(order).desc(); // 把sql 语句设置成倒序
} else {
example.orderBy(order).asc(); // 把 sql 设置成正序
}
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 获取前台提交的URL参数 page 如果没有则设置为1
page = Math.max(1, page); // 取两个数的最大值,防止page 小于1
List<Admins> list = service.selectPageExample(example, page, pagesize); // 获取当前页的行数
// 将列表写给界面使用
assign("totalCount", request.getAttribute("totalCount"));
assign("list", list);
assign("orderby", order); // 把当前排序结果写进前台
assign("sort", sort); // 把当前排序结果写进前台
return json(); // 将数据写给前端
}
public String getWhere() {
_var = new LinkedHashMap(); // 重置数据
String where = " ";
// 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句
if (!Request.get("username").equals("")) {
where += " AND username LIKE '%" + Request.get("username") + "%' ";
}
return where;
}
@RequestMapping("/admins_add")
public String add() {
_var = new LinkedHashMap(); // 重置数据
return json(); // 将数据写给前端
}
@RequestMapping("/admins_updt")
public String updt() {
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
// 获取行数据,并赋值给前台jsp页面
Admins mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 0);
return json(); // 将数据写给前端
}
@RequestMapping("/admins_updtself")
public String updtself() {
_var = new LinkedHashMap(); // 重置数据
// 更新个人资料
int id = (int) request.getSession().getAttribute("id");
Admins mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 1);
return json(); // 将数据写给前端
}
/**
* 添加内容
* @return
*/
@RequestMapping("/adminsinsert")
public String insert() {
_var = new LinkedHashMap(); // 重置数据
String tmp = "";
Admins post = new Admins(); // 创建实体类
// 设置前台提交上来的数据到实体类中
post.setUsername(Request.get("username"));
post.setPwd(Request.get("pwd"));
service.insert(post); // 插入数据
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
return showSuccess("保存成功", Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
}
/**
* 更新内容
* @return
*/
@RequestMapping("/adminsupdate")
public String update() {
_var = new LinkedHashMap(); // 重置数据
// 创建实体类
Admins post = new Admins();
// 将前台表单数据填充到实体类
if (!Request.get("username").equals("")) post.setUsername(Request.get("username"));
if (!Request.get("pwd").equals("")) post.setPwd(Request.get("pwd"));
post.setId(Request.getInt("id"));
service.update(post); // 更新数据
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
if (Request.getInt("updtself") == 1) {
return showSuccess("保存成功", "admins_updtself.do");
}
return showSuccess("保存成功", Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
}
/**
* 删除
*/
@RequestMapping("/admins_delete")
public String delete() {
_var = new LinkedHashMap(); // 重置数据
if (!checkLogin()) {
return showError("尚未登录");
}
int id = Request.getInt("id"); // 根据id 删除某行数据
Map map = Query.make("admins").find(id);
service.delete(id); // 根据id 删除某行数据
return showSuccess("删除成功", request.getHeader("referer")); //弹出删除成功,并跳回上一页
}
}
package com.spring.controller;
import com.alibaba.fastjson.JSON;
import com.spring.util.JsonResult;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
/**
* 控制器基类
*/
public abstract class BaseController {
@Autowired
protected HttpServletRequest request; // 注入
@Autowired
protected HttpServletResponse response; // 注入
@Autowired
protected HttpSession session; // 注入
protected ModelAndView mView;
protected Map<Object, Object> _var;
/**
* 控制器
*/
public BaseController() {
//request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
//response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
mView = new ModelAndView();
_var = new LinkedHashMap();
}
/**
* 往模板中写入数据
* @param name
* @param value
*/
protected void assign(String name, Object value) {
request.setAttribute(name, value);
_var.put(name, value);
}
/**
* 弹出框
* @param message
* @param code
* @param jumpUrl
* @param jumpTime
* @return
*/
protected String showMessage(String message, int code, Object data, String jumpUrl, int jumpTime) {
if (isAjax()) {
JsonResult jsonResult = new JsonResult(code, message, data);
return renderString(response, JSON.toJSONString(jsonResult));
}
assign("message", message == null ? data : message);
assign("code", code);
assign("jumpUrl", jumpUrl);
assign("jumpTime", jumpTime);
return "message";
}
/**
* 将写入json写到前端
* @return
*/
public String json() {
return jsonResult(_var);
}
public String jsonReturn(String message, int code, Object data) {
JsonResult result = new JsonResult(code, message, data);
return renderString(response, JSON.toJSONString(result));
}
public String jsonResult(Object data) {
return jsonReturn(null, 0, data);
}
public String jsonError(String msg) {
return jsonReturn(msg, 1, null);
}
public Object getRequestAttributeMap() {
//Map<Object,Object> map = new LinkedHashMap();
Enumeration<String> names = request.getAttributeNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
if (!_var.containsKey(key)) {
// 没有,则写入
_var.put(key, request.getAttribute(key));
}
}
return _var;
}
public String getJson() {
Map<Object, Object> map = new LinkedHashMap();
Enumeration<String> names = request.getAttributeNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
Object value = request.getAttribute(key);
map.put(key, value);
}
return renderString(response, JSON.toJSONString(map));
}
/**
* 将字符串渲染到客户端
*
* @param response 渲染对象
* @param string 待渲染的字符串
* @return null
*/
public String renderString(HttpServletResponse response, String string) {
try {
request.getSession();
OutputStream stream = response.getOutputStream();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
stream.write(string.getBytes());
stream.flush();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
protected boolean isAjax() {
String accept = request.getHeader("accept");
if (accept != null && accept.indexOf("application/json") != -1) {
return true;
}
String xRequestedWith = request.getHeader("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) {
return true;
}
String ajax = request.getParameter("format");
if ("json".equalsIgnoreCase(ajax)) {
return true;
}
return false;
}
/**
* 检测是否登录
* @return
*/
protected boolean checkLogin() {
if (request.getSession().getAttribute("username") == null || "".equals(request.getSession().getAttribute("username"))) {
return false;
}
return true;
}
/**
* 弹出错误信息
* @param message
* @return
*/
protected String showError(String message) {
return showMessage(message, 1, null, "javascript:history(-1);", 2250);
}
/**
* 弹出错误信息
* @param message
* @param code
* @return
*/
protected String showError(String message, int code) {
return showMessage(message, code, null, "javascript:history(-1);", 2250);
}
/**
* 弹出错误信息
* @param message
* @param url
* @return
*/
protected String showError(String message, String url) {
return showMessage(message, 1, null, url, 2250);
}
/**
* 弹出成功信息
* @param data
* @return
*/
protected String showSuccess(Object data) {
return showMessage(null, 0, data, request.getHeader("referer"), 2250);
}
/**
* 弹出成功信息
* @param data
* @param url
* @return
*/
protected String showSuccess(String data, String url) {
return showMessage(null, 0, data, url, 2250);
}
}
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统
更多推荐
所有评论(0)