当前位置:   article > 正文

基于微信小程序的跑腿系统小程序_基于微信小程序的跑腿服务系统

基于微信小程序的跑腿服务系统

文末获取联系

开发语言:Java

框架:ssm

JDK版本:JDK1.8

数据库:mysql 5.7/8.0

开发软件:eclipse/myeclipse/idea

Maven包:Maven3.3.9

小程序框架:uniapp

小程序开发软件:HBuilder X

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

项目介绍:

本基于微信小程序的跑腿系统有管理员,校友,跑腿员三个角色。管理员功能有个人中心,校友管理,跑腿员管理,校友动态管理,发布任务管理,任务订单管理,消息中心管理,系统管理。校友角色主要是发布跑腿任务,跑腿员主要是接跑腿任务。校友和跑腿员都是在微信小程序上进行注册登录和发任务以及接单的,管理员管理平台基础数据。因而具有一定的实用性。

本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于微信小程序的跑腿系统管理工作系统化、规范化。

系统实现:

校友信息管理

管理员可以管理校友信息,可以对校友信息添加修改删除。具体界面的展示如图

跑腿员管理

管理员可以对跑腿员信息进行添加修改删除操作。具体界面如图

校友动态管理

管理员可以对校友动态信息进行添加修改删除操作。界面如下图所示

 

发布任务

校友注册登录后可以发布任务。界面如下图所示:

在线接单

跑腿员注册登录后可以在线接单。界面如下图所示:

我的

校友和跑腿员登录都有我的界面,我的界面包含当前登录账号和校友动态等信息。界面如下图所示:

部分核心代码:

登录系统主要代码

  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. }

用户注册主要代码

  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. }

小程序端首页主要代码 

  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. });
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/397206
推荐阅读
相关标签
  

闽ICP备14008679号