小言_互联网的博客

SpringBoot+vue实现前后端分离的校园志愿者管理系统

408人阅读  评论(0)

文末获取源码

开发语言:Java

开发工具:IDEA /Eclipse

数据库:MYSQL5.7/8.0

使用框架:springboot+vue

JDK版本:jdk1.8

目录

前言介绍

系统设计 

数据库概念结构设计 

系统功能模块 

系统首页界面

志愿者注册界面

活动信息界面

活动心得界面

个人中心界面

管理员功能 

管理员登录界面

管理员功能界面

志愿者管理界面

活动类型管理界面

活动信息管理界面 

活动报名管理界面

活动通知管理界面

活动心得管理界面 

交流反馈界面 

志愿者功能

志愿者功能界面 

个人中心界面 

活动报名管理界面

活动通知管理界面

活动心得管理界面 

部分核心代码:

前言介绍

本校园志愿者管理系统以springboot作为框架,b/s模式以及MySql作为后台运行的数据库,同时使用Tomcat用为系统的服务器。本系统主要包括首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知管理、活动心得管理、交流反馈、系统管理等功能,通过这些功能的实现基本能够满足日常校园志愿者管理的操作。

系统设计 

根据校园志愿者管理系统的功能需求,进行系统设计。

前台功能:用户进入系统可以实现首页、活动信息、活动心得、公告信息、交流反馈、个人中心、后台管理等功能进行操作;

后台由管理员和志愿者,主要功能包括首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知管理、活动心得管理、交流反馈、系统管理等功能;

系统对这些功能进行整合,产生的功能结构图如下:

 

数据库概念结构设计 

数据库的E-R图反映了实体、实体的属性和实体之间的联系。下面是各个实体以及实体的属性。

活动信息实体属性图如下所示:

活动心得实体属性图如下所示:

 

活动报名实体属性图如下所示:

 

系统功能模块 

校园志愿者管理系统,用户进入到系统首页,可以查看首页、活动信息、活动心得、公告信息、交流反馈、个人中心、后台管理等内容进行操作,如图

系统首页界面

 

志愿者注册;在志愿者注册页面中输入用户名、密码、确认密码、姓名、年龄、邮箱、手机等内容完成注册操作;如图

志愿者注册界面

 

活动信息;在活动信息页面中可以查看活动名称、活动类型、活动时间、人数、活动场地、活动介绍、图片等内容;并进行报名操作;如图

活动信息界面

 

活动心得;在活动心得页面中可以查看活动名称、图片、活动类型、发布时间、心得分享等内容,并进行评论或收藏操作;如图

活动心得界面

 

 

个人中心;在个人中心页面中输入用户名、密码、姓名、性别、上传图片、年龄、邮箱、手机等内容进行更新信息,并根据需要对我的收藏进行详细的操作管理,如图

个人中心界面

 

管理员功能 

管理员登录,通过填写注册时输入的用户名、密码、选择角色等信息进行登录操作,如图

管理员登录界面

管理员登录进入校园志愿者管理系统可以查看首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知管理、活动心得管理、交流反馈、系统管理等功能进行详细操作,如图

管理员功能界面

志愿者管理;在志愿者管理页面中可以查看索引、用户名、姓名、性别、头像、年龄、邮箱、手机等内容,并进行详情,修改和删除等操作;如图

志愿者管理界面

 

活动类型管理;在活动类型管理页面中可以查看索引、活动类型等内容,并进行修改、删除等操作;如图

活动类型管理界面

活动信息管理;在活动信息管理页面中可以查看索引、活动名称、活动类型、图片、活动时间、人数、活动场地等内容,并进行详情、修改或删除等操作;如图

活动信息管理界面 

活动报名管理;在活动报名管理页面中可以查看索引、活动名称、活动类型、人数、报名说明、报名时间、用户名、姓名、手机、审核回复、审核状态、审核等内容,并进行详情、修改、通知和删除等操作;如图 

活动报名管理界面

 

活动通知管理;在活动通知管理页面中可以查看索引、标题、用户名、姓名、手机、通知时间等内容,并进行详情、修改和删除等操作;如图

活动通知管理界面

活动心得管理;在活动心得管理页面中可以查看索引、活动名称、活动类型、图片、发布时间等内容,并进行详情、修改、查看评论和删除等操作;如图

活动心得管理界面 

交流反馈;在交流反馈页面中可以查看索引、用户名、留言内容、留言图片、回复内容、回复图片等内容,并进行详情、修改和删除等操作;如图

交流反馈界面 

志愿者功能

志愿者登录进入校园志愿者管理系统可以查看首页、个人中心、活动报名管理、活动通知管理、活动心得管理、我的收藏管理、交流反馈等功能进行详细操作,如图

志愿者功能界面 

个人中心;在个人中心页面通过填写用户名、性别、头像、年龄、手机、姓名、邮箱等内容进行个人信息修改;如图

个人中心界面 

活动报名管理;在活动报名管理页面中可以查看索引、活动名称、活动类型、人数、报名说明、报名时间、用户名、姓名、手机、审核回复、审核状态等内容,并进行详情、或删除等操作;如图

活动报名管理界面

活动通知管理;在活动通知管理页面中可以查看索引、标题、用户名、姓名、手机、通知时间等内容,并进行详情等操作;如图 

活动通知管理界面

活动心得管理;在活动心得管理页面中可以查看索引、活动名称、活动类型、图片、发布时间等内容,并进行详情,修改,查看评论或删除等操作;如图

活动心得管理界面 

部分核心代码:


  
  1. /**
  2. * 活动心得评论表
  3. * 后端接口
  4. * @author
  5. * @email
  6. * @date 2022-05-06 08:33:49
  7. */
  8. @RestController
  9. @RequestMapping( "/discusshuodongxinde")
  10. public class DiscusshuodongxindeController {
  11. @Autowired
  12. private DiscusshuodongxindeService discusshuodongxindeService;
  13. /**
  14. * 后端列表
  15. */
  16. @RequestMapping( "/page")
  17. public R page( @RequestParam Map<String, Object> params,DiscusshuodongxindeEntity discusshuodongxinde,
  18. HttpServletRequest request){
  19. EntityWrapper< DiscusshuodongxindeEntity> ew = new EntityWrapper< DiscusshuodongxindeEntity>();
  20. PageUtils page = discusshuodongxindeService. queryPage(params, MPUtil. sort( MPUtil. between( MPUtil. likeOrEq(ew, discusshuodongxinde), params), params));
  21. return R. ok(). put( "data", page);
  22. }
  23. /**
  24. * 前端列表
  25. */
  26. @IgnoreAuth
  27. @RequestMapping( "/list")
  28. public R list( @RequestParam Map<String, Object> params,DiscusshuodongxindeEntity discusshuodongxinde,
  29. HttpServletRequest request){
  30. EntityWrapper< DiscusshuodongxindeEntity> ew = new EntityWrapper< DiscusshuodongxindeEntity>();
  31. PageUtils page = discusshuodongxindeService. queryPage(params, MPUtil. sort( MPUtil. between( MPUtil. likeOrEq(ew, discusshuodongxinde), params), params));
  32. return R. ok(). put( "data", page);
  33. }
  34. /**
  35. * 列表
  36. */
  37. @RequestMapping( "/lists")
  38. public R list( DiscusshuodongxindeEntity discusshuodongxinde){
  39. EntityWrapper< DiscusshuodongxindeEntity> ew = new EntityWrapper< DiscusshuodongxindeEntity>();
  40. ew. allEq( MPUtil. allEQMapPre( discusshuodongxinde, "discusshuodongxinde"));
  41. return R. ok(). put( "data", discusshuodongxindeService. selectListView(ew));
  42. }
  43. /**
  44. * 查询
  45. */
  46. @RequestMapping( "/query")
  47. public R query( DiscusshuodongxindeEntity discusshuodongxinde){
  48. EntityWrapper< DiscusshuodongxindeEntity> ew = new EntityWrapper< DiscusshuodongxindeEntity>();
  49. ew. allEq( MPUtil. allEQMapPre( discusshuodongxinde, "discusshuodongxinde"));
  50. DiscusshuodongxindeView discusshuodongxindeView = discusshuodongxindeService. selectView(ew);
  51. return R. ok( "查询活动心得评论表成功"). put( "data", discusshuodongxindeView);
  52. }
  53. /**
  54. * 后端详情
  55. */
  56. @RequestMapping( "/info/{id}")
  57. public R info( @PathVariable("id") Long id){
  58. DiscusshuodongxindeEntity discusshuodongxinde = discusshuodongxindeService. selectById(id);
  59. return R. ok(). put( "data", discusshuodongxinde);
  60. }
  61. /**
  62. * 前端详情
  63. */
  64. @IgnoreAuth
  65. @RequestMapping( "/detail/{id}")
  66. public R detail( @PathVariable("id") Long id){
  67. DiscusshuodongxindeEntity discusshuodongxinde = discusshuodongxindeService. selectById(id);
  68. return R. ok(). put( "data", discusshuodongxinde);
  69. }
  70. /**
  71. * 后端保存
  72. */
  73. @RequestMapping( "/save")
  74. public R save( @RequestBody DiscusshuodongxindeEntity discusshuodongxinde, HttpServletRequest request){
  75. discusshuodongxinde. setId( new Date(). getTime()+ new Double( Math. floor( Math. random()* 1000)). longValue());
  76. //ValidatorUtils.validateEntity(discusshuodongxinde);
  77. discusshuodongxindeService. insert(discusshuodongxinde);
  78. return R. ok();
  79. }
  80. /**
  81. * 前端保存
  82. */
  83. @RequestMapping( "/add")
  84. public R add( @RequestBody DiscusshuodongxindeEntity discusshuodongxinde, HttpServletRequest request){
  85. discusshuodongxinde. setId( new Date(). getTime()+ new Double( Math. floor( Math. random()* 1000)). longValue());
  86. //ValidatorUtils.validateEntity(discusshuodongxinde);
  87. discusshuodongxindeService. insert(discusshuodongxinde);
  88. return R. ok();
  89. }
  90. /**
  91. * 修改
  92. */
  93. @RequestMapping( "/update")
  94. @Transactional
  95. public R update( @RequestBody DiscusshuodongxindeEntity discusshuodongxinde, HttpServletRequest request){
  96. //ValidatorUtils.validateEntity(discusshuodongxinde);
  97. discusshuodongxindeService. updateById(discusshuodongxinde); //全部更新
  98. return R. ok();
  99. }
  100. /**
  101. * 删除
  102. */
  103. @RequestMapping( "/delete")
  104. public R delete( @RequestBody Long[] ids){
  105. discusshuodongxindeService. deleteBatchIds( Arrays. asList(ids));
  106. return R. ok();
  107. }
  108. /**
  109. * 提醒接口
  110. */
  111. @RequestMapping( "/remind/{columnName}/{type}")
  112. public R remindCount( @PathVariable("columnName") String columnName, HttpServletRequest request,
  113. @PathVariable( "type") String type, @RequestParam Map< String, Object> map) {
  114. map. put( "column", columnName);
  115. map. put( "type", type);
  116. if( type. equals( "2")) {
  117. SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd");
  118. Calendar c = Calendar. getInstance();
  119. Date remindStartDate = null;
  120. Date remindEndDate = null;
  121. if(map. get( "remindstart")!= null) {
  122. Integer remindStart = Integer. parseInt(map. get( "remindstart"). toString());
  123. c. setTime( new Date());
  124. c. add( Calendar. DAY_OF_MONTH,remindStart);
  125. remindStartDate = c. getTime();
  126. map. put( "remindstart", sdf. format(remindStartDate));
  127. }
  128. if(map. get( "remindend")!= null) {
  129. Integer remindEnd = Integer. parseInt(map. get( "remindend"). toString());
  130. c. setTime( new Date());
  131. c. add( Calendar. DAY_OF_MONTH,remindEnd);
  132. remindEndDate = c. getTime();
  133. map. put( "remindend", sdf. format(remindEndDate));
  134. }
  135. }
  136. Wrapper< DiscusshuodongxindeEntity> wrapper = new EntityWrapper< DiscusshuodongxindeEntity>();
  137. if(map. get( "remindstart")!= null) {
  138. wrapper. ge(columnName, map. get( "remindstart"));
  139. }
  140. if(map. get( "remindend")!= null) {
  141. wrapper. le(columnName, map. get( "remindend"));
  142. }
  143. int count = discusshuodongxindeService. selectCount(wrapper);
  144. return R. ok(). put( "count", count);
  145. }
  146. }

  

 


  
  1. /**
  2. * 上传文件映射表
  3. */
  4. @RestController
  5. @RequestMapping("file")
  6. @SuppressWarnings({"unchecked","rawtypes"})
  7. public class FileController{
  8. @Autowired
  9. private ConfigService configService;
  10. /**
  11. * 上传文件
  12. */
  13. @RequestMapping("/upload")
  14. public R upload (@RequestParam("file") MultipartFile file,String type) throws Exception {
  15. if (file.isEmpty()) {
  16. throw new EIException( "上传文件不能为空");
  17. }
  18. String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf( ".")+ 1);
  19. File path = new File(ResourceUtils.getURL( "classpath:static").getPath());
  20. if(!path.exists()) {
  21. path = new File( "");
  22. }
  23. File upload = new File(path.getAbsolutePath(), "/upload/");
  24. if(!upload.exists()) {
  25. upload.mkdirs();
  26. }
  27. String fileName = new Date().getTime()+ "."+fileExt;
  28. File dest = new File(upload.getAbsolutePath()+ "/"+fileName);
  29. file.transferTo(dest);
  30. /**
  31. * 如果使用idea或者eclipse重启项目,发现之前上传的图片或者文件丢失,将下面一行代码注释打开
  32. * 请将以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替换成你本地项目的upload路径,
  33. * 并且项目路径不能存在中文、空格等特殊字符
  34. */
  35. // FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/
  36. if(StringUtils.isNotBlank(type) && type.equals( "1")) {
  37. ConfigEntity configEntity = configService.selectOne( new EntityWrapper<ConfigEntity>().eq( "name", "faceFile"));
  38. if(configEntity== null) {
  39. configEntity = new ConfigEntity();
  40. configEntity.setName( "faceFile");
  41. configEntity.setValue(fileName);
  42. } else {
  43. configEntity.setValue(fileName);
  44. }
  45. configService.insertOrUpdate(configEntity);
  46. }
  47. return R.ok().put( "file", fileName);
  48. }
  49. /**
  50. * 下载文件
  51. */
  52. @IgnoreAuth
  53. @RequestMapping("/download")
  54. public ResponseEntity< byte[]> download( @RequestParam String fileName) {
  55. try {
  56. File path = new File(ResourceUtils.getURL( "classpath:static").getPath());
  57. if(!path.exists()) {
  58. path = new File( "");
  59. }
  60. File upload = new File(path.getAbsolutePath(), "/upload/");
  61. if(!upload.exists()) {
  62. upload.mkdirs();
  63. }
  64. File file = new File(upload.getAbsolutePath()+ "/"+fileName);
  65. if(file.exists()){
  66. /*if(!fileService.canRead(file, SessionManager.getSessionUser())){
  67. getResponse().sendError(403);
  68. }*/
  69. HttpHeaders headers = new HttpHeaders();
  70. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
  71. headers.setContentDispositionFormData( "attachment", fileName);
  72. return new ResponseEntity< byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
  73. }
  74. } catch (IOException e) {
  75. e.printStackTrace();
  76. }
  77. return new ResponseEntity< byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
  78. }
  79. }

转载:https://blog.csdn.net/m0_49113107/article/details/125463219
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场