news 2026/4/18 8:07:29

分享一套优质的微信小程序校园志愿者系统(SpringBoot后端+Vue3管理端)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
分享一套优质的微信小程序校园志愿者系统(SpringBoot后端+Vue3管理端)

大家好,我是锋哥,看到一个不错的微信小程序校园志愿者系统(SpringBoot后端+Vue3管理端),分享下哈。

项目介绍

随着新世纪的到来,无纸化办公的潮流席卷全球,自动化信息处理技术和基于网络的信息交流方式逐渐成为各行各业的主流。计算机不仅接管了众多行业的管理和测试任务,还成为了线上管理体系不可或缺的一环。这一变革极大提升了工作效率,但同时也带来了数据泄露的风险。因此,为确保数据安全,我们必须采取一系列先进的安全措施和技术手段。

最终,我们的努力得到了回报。测试结果表明,这款以微信小程序为载体的校园志愿服务活动系统不仅功能齐全,而且性能稳定,完全能够满足校园志愿服务活动的需求。它的出现不仅为用户提供了更为便捷的使用体验,还促进了资源的循环利用,实现了环保和经济的双赢

源码下载

链接:https://pan.baidu.com/s/1vtxtOkt6W3M0t4LsTzsRmA?pwd=1234
提取码:1234

系统展示

核心代码

package com.example.controller; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.example.common.Result; import com.example.common.ResultCode; import com.example.entity.Account; import com.example.entity.AuthorityInfo; import com.example.exception.CustomException; import com.example.entity.AdminInfo; import com.example.entity.UserInfo; import com.example.service.AdminInfoService; import com.example.service.UserInfoService; import org.springframework.web.bind.annotation.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import cn.hutool.json.JSONUtil; import java.util.*; import java.util.stream.Collectors; @RestController public class AccountController { @Value("${authority.info}") private String authorityStr; @Resource private AdminInfoService adminInfoService; @Resource private UserInfoService userInfoService; @PostMapping("/login") public Result<Account> login(@RequestBody Account account, HttpServletRequest request) { if (StrUtil.isBlank(account.getName()) || StrUtil.isBlank(account.getPassword()) || account.getLevel() == null) { throw new CustomException(ResultCode.PARAM_LOST_ERROR); } Integer level = account.getLevel(); Account login = new Account(); if (1 == level) { login = adminInfoService.login(account.getName(), account.getPassword()); } if (2 == level) { login = userInfoService.login(account.getName(), account.getPassword()); } request.getSession().setAttribute("user", login); return Result.success(login); } @PostMapping("/register") public Result<Account> register(@RequestBody Account account) { Integer level = account.getLevel(); Account login = new Account(); if (1 == level) { AdminInfo info = new AdminInfo(); BeanUtils.copyProperties(account, info); login = adminInfoService.add(info); } if (2 == level) { UserInfo info = new UserInfo(); BeanUtils.copyProperties(account, info); login = userInfoService.add(info); } return Result.success(login); } @GetMapping("/logout") public Result logout(HttpServletRequest request) { request.getSession().setAttribute("user", null); return Result.success(); } @GetMapping("/auth") public Result getAuth(HttpServletRequest request) { Object user = request.getSession().getAttribute("user"); if(user == null) { return Result.error("401", "未登录"); } return Result.success(user); } @GetMapping("/getAccountInfo") public Result<Object> getAccountInfo(HttpServletRequest request) { Account account = (Account) request.getSession().getAttribute("user"); if (account == null) { return Result.success(new Object()); } Integer level = account.getLevel(); if (1 == level) { return Result.success(adminInfoService.findById(account.getId())); } if (2 == level) { return Result.success(userInfoService.findById(account.getId())); } return Result.success(new Object()); } @GetMapping("/getSession") public Result<Map<String, String>> getSession(HttpServletRequest request) { Account account = (Account) request.getSession().getAttribute("user"); if (account == null) { return Result.success(new HashMap<>(1)); } Map<String, String> map = new HashMap<>(1); map.put("username", account.getName()); return Result.success(map); } @GetMapping("/getAuthority") public Result<List<AuthorityInfo>> getAuthorityInfo() { List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class); return Result.success(authorityInfoList); } /** * 获取当前用户所能看到的模块信息 * @param request * @return */ @GetMapping("/authority") public Result<List<Integer>> getAuthorityInfo(HttpServletRequest request) { Account user = (Account) request.getSession().getAttribute("user"); if (user == null) { return Result.success(new ArrayList<>()); } JSONArray objects = JSONUtil.parseArray(authorityStr); for (Object object : objects) { JSONObject jsonObject = (JSONObject) object; if (user.getLevel().equals(jsonObject.getInt("level"))) { JSONArray array = JSONUtil.parseArray(jsonObject.getStr("models")); List<Integer> modelIdList = array.stream().map((o -> { JSONObject obj = (JSONObject) o; return obj.getInt("modelId"); })).collect(Collectors.toList()); return Result.success(modelIdList); } } return Result.success(new ArrayList<>()); } @GetMapping("/permission/{modelId}") public Result<List<Integer>> getPermission(@PathVariable Integer modelId, HttpServletRequest request) { List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class); Account user = (Account) request.getSession().getAttribute("user"); if (user == null) { return Result.success(new ArrayList<>()); } Optional<AuthorityInfo> optional = authorityInfoList.stream().filter(x -> x.getLevel().equals(user.getLevel())).findFirst(); if (optional.isPresent()) { Optional<AuthorityInfo.Model> firstOption = optional.get().getModels().stream().filter(x -> x.getModelId().equals(modelId)).findFirst(); if (firstOption.isPresent()) { List<Integer> info = firstOption.get().getOperation(); return Result.success(info); } } return Result.success(new ArrayList<>()); } @PutMapping("/updatePassword") public Result updatePassword(@RequestBody Account info, HttpServletRequest request) { Account account = (Account) request.getSession().getAttribute("user"); if (account == null) { return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg); } String oldPassword = SecureUtil.md5(info.getPassword()); if (!oldPassword.equals(account.getPassword())) { return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg); } info.setPassword(SecureUtil.md5(info.getNewPassword())); Integer level = account.getLevel(); if (1 == level) { AdminInfo adminInfo = new AdminInfo(); BeanUtils.copyProperties(info, adminInfo); adminInfoService.update(adminInfo); } if (2 == level) { UserInfo userInfo = new UserInfo(); BeanUtils.copyProperties(info, userInfo); userInfoService.update(userInfo); } info.setLevel(level); info.setName(account.getName()); // 清空session,让用户重新登录 request.getSession().setAttribute("user", null); return Result.success(); } @PostMapping("/resetPassword") public Result resetPassword(@RequestBody Account account) { Integer level = account.getLevel(); if (1 == level) { AdminInfo info = adminInfoService.findByUserName(account.getName()); if (info == null) { return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg); } info.setPassword(SecureUtil.md5("123456")); adminInfoService.update(info); } if (2 == level) { UserInfo info = userInfoService.findByUserName(account.getName()); if (info == null) { return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg); } info.setPassword(SecureUtil.md5("123456")); userInfoService.update(info); } return Result.success(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 5:05:14

格式总出错?AI论文写作软件 千笔·专业论文写作工具 VS PaperRed

随着人工智能技术的迅猛发展&#xff0c;AI辅助写作工具已经逐渐成为高校学生完成毕业论文的重要帮手。无论是开题报告、文献综述还是整篇论文的撰写&#xff0c;越来越多的学生开始借助AI工具提升效率、降低写作难度。然而&#xff0c;在众多功能各异的AI写作平台中&#xff0…

作者头像 李华
网站建设 2026/4/18 7:41:21

Java语言提供了八种基本类型。六种数字类型【函数函数123】

变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 因此&#xff0c;通过定义不同类型的变量&#xff0c;可以在内存中储存整…

作者头像 李华
网站建设 2026/4/18 8:06:46

selenium 自动化测试工具实战项目(窗口切换)

介绍 测试的系统&#xff1a;白月黑羽网站的测试系统(白月SMS系统) 测试内容&#xff1a;点击【学习教程】链接跳转到白月黑羽网站&#xff0c;获取此网站上的标题&#xff0c;然后回到原来的系统。 所涉及的知识点&#xff1a;frame切换/窗口切换 这个iframe元素非常的特殊&…

作者头像 李华
网站建设 2026/4/17 9:00:17

excel 中如何快速归一化

B2/$G2B2 → 当前单元格的数据&#xff08;要处理的值&#xff09;$G2 → 除数$G → 锁定列 G&#xff08;横向拖动公式时不会变列&#xff09;2 → 行号相对&#xff08;纵向填充公式时会自动变行&#xff09;方法 A&#xff1a;横向先填充&#xff0c;再纵向填充 方法 B&…

作者头像 李华
网站建设 2026/4/18 7:54:49

AI Agent:2026年AI生态核心与开发实践指南

AI Agent是具备自主决策、规划和执行能力的数字实体&#xff0c;是2026年AI生态核心。主流架构包括感知、规划/推理、行动、记忆和反思/评估等组件。A2A协议促进Agent间协作&#xff0c;MCP标准化工具调用&#xff0c;Agent Skills实现能力模块化&#xff0c;使开发者能像搭乐高…

作者头像 李华
网站建设 2026/4/17 23:28:30

1.4 事务消息机制:如何确保重要通知100%送达用户?

1.4 事务消息机制:如何确保重要通知100%送达用户? 引言 在分布式系统中,确保重要消息的可靠传递是一个关键挑战。特别是在金融、电商等对数据一致性要求极高的场景中,任何一条重要通知的丢失都可能导致严重的业务后果。例如,用户支付成功后没有收到确认通知,或者系统关…

作者头像 李华