当前位置:   article > 正文

基于Java+SSM+Vue+uniapp实现微信小程序的大学生社团活动管理小程序_基于微信小程序的团日活动管理系统

基于微信小程序的团日活动管理系统

文末获取源码

开发语言:Java

框架:SSM

JDK版本:JDK1.8

服务器:tomcat7

数据库:mysql 5.7/8.0

数据库工具:Navicat11

开发软件:eclipse/myeclipse/idea

Maven包:Maven3.3.9

浏览器:谷歌浏览器

小程序框架:uniapp

小程序开发软件:HBuilder X

小程序运行软件:微信开发者

一、前言介绍 

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于大学生社团活动管理的微信小程序的开发全过程。通过分析大学生社团活动管理的不足,创建了一个计算机管理基于大学生社团活动管理的微信小程序的方案。文章介绍了基于大学生社团活动管理的微信小程序的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。

本基于大学生社团活动管理的微信小程序有管理员,社长,社员三个角色。管理员功能有个人中心,学生管理,社长管理,社团分类管理,社团信息管理,社团加入管理,社团活动管理,活动报名管理,社团成员管理,系统管理。社长和社员都可以在微信小程序上面进行注册和登录。社长可以在微信小程序上面对社团信息进行管理,对社团加入进行审核,对社团活动进行管理,对活动报名进行审核,对社团成员进行管理。社员可以在微信小程序上面查看和参加社团,查看和报名活动信息等。因而具有一定的实用性。

本基于大学生社团活动管理的微信小程序,后台采用SSM框架,MYSQL数据库设计开发,微信小程序用微信开发者工具开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于大学生社团活动管理的微信小程序管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高基于大学生社团活动管理的微信小程序管理效率。

二、系统结构

本系统是基于B/S架构的网站系统,设计的功能结构图如下图所示:

三、系统详细实现

3.1小程序模块的实现

3.1.1首页

用户注册登录后可以在小程序首页看到相关信息和链接,可以搜索和点击操作。界面如下图所示:

3.1.2社团信息

如果是社长登录就会显示新增和删除社团按钮,并且加入按钮变成灰色不可选定,如果是学生用户登录,则会显示加入。社长角色社团信息界面如下图所示:

3.1.3社团活动

3.1.4我的

我的里面关于各项信息的连接,点击就可以跳转到对应的页面。社长角色我的界面如下图所示:

4.1管理员模块的实现

4.1.1学生信息管理

基于大学生社团活动管理的微信小程序的系统管理员可以对学生信息修改删除以及查询操作。具体界面的展示如图所示。

4.1.2社长信息管理

系统管理员可以查看对社长信息进行修改,删除以及查询操作。具体界面如图所示。

4.1.3社团信息管理

系统管理员可以对社团信息进行搜索,删除以及查询操作。界面如下图所示:

4.1.4社团成员管理

系统管理员可以对社团成员信息进行查询,修改,删除操作。界面如下图所示:

五、部分核心代码

5.1登录系统主要代码

  1. form.on('submit(login)', function(data) {
  2. data = data.field;
  3. if (vue.roles.length!=1) {
  4. if (!data.role) {
  5. layer.msg('请选择登录用户类型', {
  6. time: 2000,
  7. icon: 5
  8. });
  9. return false;
  10. }
  11. } else {
  12. data.role = vue.roles[0].tableName;
  13. }
  14. http.request(data.role + '/login', 'get', data, function(res) {
  15. layer.msg('登录成功', {
  16. time: 2000,
  17. icon: 6
  18. });
  19. // 登录凭证
  20. localStorage.setItem('Token', res.token);
  21. var roleName = "";
  22. if(typeof(jquery('#role:checked').attr('title')) == "undefined") {
  23. roleName = vue.roles[0].roleName;
  24. } else {
  25. roleName = jquery('#role:checked').attr('title');
  26. }
  27. localStorage.setItem('role', roleName);
  28. // 当前登录用户角色
  29. localStorage.setItem('userTable', data.role);
  30. localStorage.setItem('sessionTable', data.role);
  31. // 用户名称
  32. localStorage.setItem('adminName', data.username);
  33. http.request(data.role + '/session', 'get', {}, function(res) {
  34. // 用户id
  35. localStorage.setItem('userid', res.data.id);
  36. if(res.data.vip) {
  37. localStorage.setItem('vip', res.data.vip);
  38. }
  39. // 路径访问设置
  40. window.location.href = '../../index.html';
  41. })
  42. });
  43. return false
  44. });
  45. });
  46. /**
  47. * 跳转登录
  48. * @param {Object} tablename
  49. */
  50. function registerClick(tablename) {
  51. window.location.href = '../' + tablename + '/register.html?tablename=' + tablename;
  52. }

5.2用户注册主要代码

  1. */
  2. @IgnoreAuth
  3. @RequestMapping("/register")
  4. public R register(@RequestBody YonghuEntity yonghu){
  5. //ValidatorUtils.validateEntity(yonghu);
  6. YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
  7. if(user!=null) {
  8. return R.error("注册用户已存在");
  9. }
  10. Long uId = new Date().getTime();
  11. yonghu.setId(uId);
  12. yonghuService.insert(yonghu);
  13. return R.ok();
  14. }

5.3小程序端首页主要代码

  1. methods: {
  2. jump(url) {
  3. if (this.queryIndex == 0) {
  4. localStorage.setItem('indexQueryCondition', document.getElementById("dianyingxinxidianyingmingcheng").value);
  5. }
  6. jump(url)
  7. },
  8. queryChange(event) {
  9. this.queryIndex = event.target.value;
  10. if (this.queryIndex == 0) {
  11. this.dianyingxinxidianyingmingcheng = this.queryList[event.target.value].queryName;
  12. }
  13. }
  14. }
  15. });
  16. layui.use(['layer', 'form', 'element', 'carousel', 'http', 'jquery'], function() {
  17. var layer = layui.layer;
  18. var element = layui.element;
  19. var form = layui.form;
  20. var carousel = layui.carousel;
  21. var http = layui.http;
  22. var jquery = layui.jquery;
  23. vue.baseurl=http.baseurl;
  24. // 获取轮播图 数据
  25. http.request('config/list', 'get', {
  26. page: 1,
  27. limit: 5
  28. }, function(res) {
  29. if (res.data.list.length > 0) {
  30. let swiperList = [];
  31. res.data.list.forEach(element => {
  32. if (element.value != null) {
  33. swiperList.push({
  34. img: http.baseurl + element.value
  35. });
  36. }
  37. });
  38. vue.swiperList = swiperList;
  39. vue.$nextTick(() => {
  40. carousel.render({
  41. elem: '#test1',
  42. width: '89.6%',
  43. height: '500px',
  44. arrow: 'hover',
  45. anim: 'default',
  46. autoplay: 'true',
  47. interval: '3000',
  48. indicator: 'inside'
  49. });
  50. })
  51. // vue.$nextTick(()=>{
  52. // window.xznSlide();
  53. // });
  54. }
  55. });
  56. http.request('news/list', 'get', {
  57. page: 1,
  58. order: 'desc'
  59. }, function(res) {
  60. var newsList = res.data.list;
  61. for(var i = 0; i<newsList.length; i++) {
  62. let d = newsList[i].addtime.split(' ')
  63. d = d[0].split('-')
  64. newsList[i].year = d[0]
  65. newsList[i].month = d[1] + '-' + d[2]
  66. }
  67. vue.newsList = newsList;
  68. if (newsList.length > 0 && newsList.length <= 2) {
  69. vue.leftNewsList = res.data.list
  70. } else {
  71. var leftNewsList = []
  72. for (let i = 0; i <= 2; i++) {
  73. leftNewsList.push(newsList[i]);
  74. }
  75. vue.leftNewsList = leftNewsList
  76. }
  77. if (newsList.length > 2 && newsList.length <= 8) {
  78. var rightNewsList = []
  79. for (let i = 3; i <= newsList.length; i++) {
  80. rightNewsList.push(newsList[i]);
  81. }
  82. vue.rightNewsList = rightNewsList
  83. }
  84. let flag = 10;
  85. let options = {"navigation":{"nextEl":".swiper-button-next","prevEl":".swiper-button-prev"},"slidesPerView":5,"loop":true,"spaceBetween":20,"autoplay":{"delay":3000,"disableOnInteraction":false}}
  86. options.pagination = {el:'null'}
  87. if(flag == 3) {
  88. vue.$nextTick(() => {
  89. new Swiper('#newsnews', options)
  90. })
  91. }
  92. if(flag == 6) {
  93. let sixSwiper = {
  94. loop: true,
  95. speed: 2500,
  96. slidesPerView: 3,
  97. spaceBetween: 10,
  98. centeredSlides: true,
  99. watchSlidesProgress: true,
  100. autoplay: {
  101. delay: 0,
  102. stopOnLastSlide: false,
  103. disableOnInteraction: false
  104. }
  105. }
  106. vue.$nextTick(() => {
  107. new Swiper('#new-list-6', sixSwiper)
  108. })
  109. }
  110. });
  111. // 获取推荐信息
  112. var autoSortUrl = "dianyingxinxi/autoSort";
  113. if(localStorage.getItem('userid')!=null) {
  114. autoSortUrl = "dianyingxinxi/autoSort2";
  115. }
  116. http.request(autoSortUrl, 'get', {
  117. page: 1,
  118. limit: 3 * 1
  119. }, function(res) {
  120. vue.dianyingxinxiRecommend = res.data.list
  121. let flag = 1;
  122. let options = {"navigation":{"nextEl":".swiper-button-next","prevEl":".swiper-button-prev"},"slidesPerView":5,"loop":true,"spaceBetween":20,"autoplay":{"delay":3000,"disableOnInteraction":false}}
  123. options.pagination = {el:'null'}
  124. if(flag == 3) {
  125. vue.$nextTick(() => {
  126. new Swiper('#recommenddianyingxinxi', options)
  127. })
  128. }
  129. if(flag == 5) {
  130. vue.$nextTick(() => {
  131. var swiper = new Swiper('#recommend-five-swiperdianyingxinxi', {
  132. loop: true,
  133. speed: 500,
  134. slidesPerView: 5,
  135. spaceBetween: 10,
  136. autoplay: {"delay":3000,"disableOnInteraction":false},
  137. centeredSlides: true,
  138. watchSlidesProgress: true,
  139. on: {
  140. setTranslate: function() {
  141. slides = this.slides
  142. for (i = 0; i < slides.length; i++) {
  143. slide = slides.eq(i)
  144. progress = slides[i].progress
  145. // slide.html(progress.toFixed(2)); //看清楚progress是怎么变化的
  146. slide.css({
  147. 'opacity': '',
  148. 'background': ''
  149. });
  150. slide.transform(''); //清除样式
  151. slide.transform('scale(' + (1.5 - Math.abs(progress) / 4) + ')');
  152. }
  153. },
  154. setTransition: function(transition) {
  155. for (var i = 0; i < this.slides.length; i++) {
  156. var slide = this.slides.eq(i)
  157. slide.transition(transition);
  158. }
  159. },
  160. },
  161. navigation: {"nextEl":".swiper-button-next","prevEl":".swiper-button-prev"},
  162. pagination: {"el":".swiper-pagination","clickable":true},
  163. });
  164. })
  165. }
  166. });
  167. });

六、项目总结

在这次毕业设计中遇到的最困难的方面就是在数据库方面的知识,在刚开始进行毕业设计的时候感觉十分困难,根本不知道该从何处下手,但不断的坚持,设计最终被完成。无论多么的困难,只要能够坚持下来,善于去找到好的材料来研究,在研究中充分利用资源,没有困难是不会被成功解决的。

在开发系统的过程中,本人运用到了vue技术和平时学习中所了解的一些技术,通过实现这些技术,大大提高了整个系统的性能。在论文中这些技术都做了比较详细的介绍。本系统还存在很多缺点和不完善的地方,例如有些细节上做的还不够完善,有些功能模块还需要加强。在今后的日子里,能够对这些不足进行改善。

通过这次最终的毕业设计,平时所学到的知识不仅融合了,而且获得了许多计算机知识。在整个设计过程中明白了许多东西,也培养独立工作能力,树立信心,对自己能力的工作能力,我相信以后会学习和工作生活中有至关重要的作用。同时也大大提高了手的能力,使其难以充分体会探索的乐趣和成功的创作过程,设计过程中汲取的东西,是一笔宝贵的财富。

回顾过去做毕业设计的整个过程,充满了付出和收获,但是当你看到成果的时候的感觉,是一种难以用言语表达的喜悦之感这些在毕业设计过程中学习到的东西将会使我终身受益!

最后,感谢指导老师的关心和指导,在我毕业设计的整个过程中,他给与了我很多的帮助和讲解,在导师的帮助下我的毕业设计才能如此顺利的完成。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/532702
推荐阅读
相关标签
  

闽ICP备14008679号