当前位置:   article > 正文

免费分享一套SpringBoot+Vue校园论坛(微博)系统【论文+源码+SQL脚本】,帅呆了~~

免费分享一套SpringBoot+Vue校园论坛(微博)系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue校园论坛(微博)系统,分享下哈。

项目视频演示

【免费】SpringBoot+Vue校园论坛(微博)系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBoot+Vue校园论坛(微博)系统 Java毕业设计项目来自互联网,免费分享,仅供学习交流使用,严禁商业。更多毕业设源码:http://www.java1234.com/a/bysj/javaweb/, 视频播放量 112、弹幕量 0、点赞数 5、投硬币枚数 0、收藏人数 3、转发人数 0, 视频作者 java1234官方, 作者简介 公众号:java1234 微信:java9266,相关视频:打造前后端分离 权限系统 基于SpringBoot2+SpringSecurity+Vue3.2+Element Plus 视频教程 (火爆连载更新中..),2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~,【免费】微信小程序扫码点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) Java毕业设计,非常好的源码,【免费】Springboot+Vue在线商城系统 毕业设计 Java毕业设计,【免费】微信小程序投票系统(uni-app+SpringBoot后端+Vue3管理端技术实现) Java毕业设计,非常好的源码,【免费】微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) Java毕业设计,非常好的源码,【免费】微信小程序商城系统(电商系统)(SpringBoot+Vue3) 【至尊版】Java毕业设计,【免费】Springboot+Vue在线教育平台系统 Java毕业设计,【免费】javaweb论坛系统毕业设计,【免费】Javaweb医院在线挂号系统毕业设计icon-default.png?t=N7T8https://www.bilibili.com/video/BV137421o7HH/

项目介绍

本设计并实现了一个基于Spring Boot和Vue的校园论坛系统,该系统分为用户和管理员两个角色。用户可以进行登录注册,浏览帖子,查看帖子详情,点赞、评论和转发帖子,同时也可以修改个人信息和密码,以及对个人帖子进行管理和发布。帖子可以包含文字、图片和视频等多种形式。在帖子发布后,需要管理员审核通过后才能在主页上显示。

管理员可以通过登录进入系统后台,进行帖子管理、用户管理、分类管理和角色管理等操作,同时也可以对评论进行管理。本论文将详细介绍系统的设计与实现过程,包括前后端技术选型、系统架构设计、数据库设计和功能模块实现等。

在系统设计方面,我们使用了Spring Boot作为后端框架,提供了用户认证、权限控制和数据持久化等功能。前端使用了Vue框架,通过Ajax技术与后端进行数据交互,并实现了用户友好的界面和良好的用户体验。

在功能实现方面,本论文详细描述了用户和管理员的功能需求,并给出了相应的设计和实现方案。用户可以方便地进行帖子的浏览、点赞、评论和转发等操作,同时也可以方便地管理个人信息和发布帖子。管理员可以对帖子进行审核和管理,同时也可以对用户、分类和角色进行管理,以及对评论进行管理。

本论文还对系统进行了测试和性能评估,验证了系统的稳定性和可靠性。通过用户反馈和测试结果,证明了系统的功能完善和易用性。

综上所述,本论文设计并实现了一个功能完善的校园论坛系统,为用户提供了便捷的交流和分享平台。该系统具有良好的用户界面和友好的用户体验,为校园论坛的建设和管理提供了有力的支持。

系统展示

部分代码

  1. package com.oddfar.campus.admin.controller.system;
  2. import com.oddfar.campus.common.annotation.ApiResource;
  3. import com.oddfar.campus.common.domain.R;
  4. import com.oddfar.campus.common.domain.entity.SysUserEntity;
  5. import com.oddfar.campus.common.domain.model.LoginUser;
  6. import com.oddfar.campus.common.enums.ResBizTypeEnum;
  7. import com.oddfar.campus.common.utils.SecurityUtils;
  8. import com.oddfar.campus.common.utils.StringUtils;
  9. import com.oddfar.campus.framework.api.file.FileUploadUtils;
  10. import com.oddfar.campus.framework.api.file.MimeTypeUtils;
  11. import com.oddfar.campus.framework.api.sysconfig.ConfigExpander;
  12. import com.oddfar.campus.framework.service.SysUserService;
  13. import com.oddfar.campus.framework.web.service.TokenService;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.web.bind.annotation.*;
  16. import org.springframework.web.multipart.MultipartFile;
  17. import static com.oddfar.campus.common.utils.SecurityUtils.getLoginUser;
  18. /**
  19. * 个人信息 业务处理
  20. */
  21. @RestController
  22. @RequestMapping("/system/user/profile")
  23. @ApiResource(name = "个人信息管理", resBizType = ResBizTypeEnum.SYSTEM)
  24. public class SysProfileController {
  25. @Autowired
  26. private SysUserService userService;
  27. @Autowired
  28. private TokenService tokenService;
  29. /**
  30. * 个人信息
  31. */
  32. @GetMapping(name = "个人信息管理-查询")
  33. public R profile() {
  34. LoginUser loginUser = getLoginUser();
  35. SysUserEntity user = loginUser.getUser();
  36. R ajax = R.ok(user);
  37. ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
  38. return ajax;
  39. }
  40. /**
  41. * 修改用户
  42. */
  43. @PutMapping(value = "/update", name = "个人信息管理-重置密码")
  44. public R updateProfile(@RequestBody SysUserEntity user) {
  45. LoginUser loginUser = getLoginUser();
  46. SysUserEntity sysUser = loginUser.getUser();
  47. user.setUserName(sysUser.getUserName());
  48. if (StringUtils.isNotEmpty(user.getPhonenumber())
  49. && !(userService.checkPhoneUnique(user))) {
  50. return R.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
  51. }
  52. if (StringUtils.isNotEmpty(user.getEmail())
  53. && !(userService.checkEmailUnique(user))) {
  54. return R.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
  55. }
  56. user.setUserId(sysUser.getUserId());
  57. user.setPassword(null);
  58. user.setAvatar(null);
  59. if (userService.updateUserProfile(user) > 0) {
  60. // 更新缓存用户信息
  61. sysUser.setNickName(user.getNickName());
  62. sysUser.setPhonenumber(user.getPhonenumber());
  63. sysUser.setEmail(user.getEmail());
  64. sysUser.setSex(user.getSex());
  65. tokenService.setLoginUser(loginUser);
  66. return R.ok();
  67. }
  68. return R.error("修改个人信息异常,请联系管理员");
  69. }
  70. /**
  71. * 重置密码
  72. */
  73. @PutMapping(value = "/updatePwd", name = "个人信息管理-重置密码")
  74. public R updatePwd(String oldPassword, String newPassword) {
  75. LoginUser loginUser = getLoginUser();
  76. String userName = loginUser.getUsername();
  77. String password = loginUser.getPassword();
  78. if (!SecurityUtils.matchesPassword(oldPassword, password)) {
  79. return R.error("修改密码失败,旧密码错误");
  80. }
  81. if (SecurityUtils.matchesPassword(newPassword, password)) {
  82. return R.error("新密码不能与旧密码相同");
  83. }
  84. if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) {
  85. // 更新缓存用户密码
  86. loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
  87. tokenService.setLoginUser(loginUser);
  88. return R.ok();
  89. }
  90. return R.error("修改密码异常,请联系管理员");
  91. }
  92. /**
  93. * 头像上传
  94. */
  95. @PostMapping(value = "/avatar", name = "个人信息管理-头像上次")
  96. public R avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception {
  97. if (!file.isEmpty()) {
  98. LoginUser loginUser = getLoginUser();
  99. String avatar = FileUploadUtils.upload(ConfigExpander.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
  100. if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) {
  101. R ajax = R.ok();
  102. ajax.put("imgUrl", avatar);
  103. // 更新缓存用户头像
  104. loginUser.getUser().setAvatar(avatar);
  105. tokenService.setLoginUser(loginUser);
  106. return ajax;
  107. }
  108. }
  109. return R.error("上传图片异常,请联系管理员");
  110. }
  111. }
  1. <template>
  2. <div class="ss">
  3. <div class="grid-content bg-purple-dark">
  4. <div class="login">
  5. <!--账号登录 #start -->
  6. <el-form
  7. ref="loginForm"
  8. :model="loginForm"
  9. :rules="loginRules"
  10. class="login-form"
  11. >
  12. <h3 class="title">登录账户</h3>
  13. <el-form-item prop="username">
  14. <el-input
  15. v-model="loginForm.username"
  16. type="text"
  17. auto-complete="off"
  18. placeholder="账号"
  19. >
  20. <svg-icon
  21. slot="prefix"
  22. icon-class="user"
  23. class="el-input__icon input-icon"
  24. />
  25. </el-input>
  26. </el-form-item>
  27. <el-form-item prop="password">
  28. <el-input
  29. v-model="loginForm.password"
  30. type="password"
  31. auto-complete="off"
  32. placeholder="密码"
  33. @keyup.enter.native="handleLogin"
  34. >
  35. <svg-icon
  36. slot="prefix"
  37. icon-class="password"
  38. class="el-input__icon input-icon"
  39. />
  40. </el-input>
  41. </el-form-item>
  42. <el-form-item prop="code" v-if="captchaEnabled">
  43. <el-input
  44. v-model="loginForm.code"
  45. auto-complete="off"
  46. placeholder="验证码"
  47. style="width: 63%"
  48. @keyup.enter.native="handleLogin"
  49. >
  50. <svg-icon
  51. slot="prefix"
  52. icon-class="validCode"
  53. class="el-input__icon input-icon"
  54. />
  55. </el-input>
  56. <div class="login-code">
  57. <img :src="codeUrl" @click="getCode" class="login-code-img" />
  58. </div>
  59. </el-form-item>
  60. <el-form-item>
  61. <router-link
  62. :to="{ path: 'resetPwd' }"
  63. style="float: left"
  64. class="router-link-active"
  65. >
  66. <!-- <el-link type="danger">忘记密码?</el-link> -->
  67. </router-link>
  68. <span
  69. style="float: right"
  70. class="router-link-active"
  71. @click="openWxamp"
  72. >
  73. </span>
  74. </el-form-item>
  75. <el-form-item style="width: 100%">
  76. <el-button
  77. :loading="loading"
  78. size="medium"
  79. type="primary"
  80. style="width: 100%"
  81. @click.native.prevent="handleLogin"
  82. >
  83. <span v-if="!loading">登 录</span>
  84. <span v-else>登 录 中...</span>
  85. </el-button>
  86. <div style="float: right">
  87. <a href="http://www.java1234.com/a/bysj/javaweb/" target='_blank'><font color=red>Java1234收藏整理</font></a>&nbsp;&nbsp;&nbsp;&nbsp;
  88. <router-link class="link-type" :to="'/register'"
  89. >立即注册</router-link
  90. >
  91. </div>
  92. </el-form-item>
  93. </el-form>
  94. </div>
  95. </div>
  96. <!--登录 #end -->
  97. </div>
  98. </template>
  99. <script>
  100. import cookie from "js-cookie";
  101. import userInfoApi from "@/api/userInfo";
  102. import { getCodeImg, login } from "@/api/login";
  103. import { getToken, setToken, removeToken } from "@/utils/auth";
  104. export default {
  105. data() {
  106. return {
  107. loginForm: {
  108. username: "",
  109. password: "",
  110. code: "",
  111. uuid: "",
  112. },
  113. codeUrl: "",
  114. loginRules: {
  115. username: [
  116. { required: true, trigger: "blur", message: "请输入您的账号" },
  117. ],
  118. password: [
  119. { required: true, trigger: "blur", message: "请输入您的密码" },
  120. ],
  121. code: [{ required: true, trigger: "change", message: "请输入验证码" }],
  122. },
  123. loading: false,
  124. // 验证码开关
  125. captchaEnabled: true,
  126. };
  127. },
  128. created() {
  129. if (getToken() !== undefined) {
  130. this.$router.push("/");
  131. } else if (this.$route.query.id != "") {
  132. if (this.$route.query.id == 1) {
  133. this.$message.error("请先登录!");
  134. } else if (this.$route.query.id == 2) {
  135. this.$message.success("修改成功!请登录!");
  136. }
  137. this.$router.push("/userlogin");
  138. }
  139. this.getCode();
  140. },
  141. methods: {
  142. //获取验证码
  143. getCode() {
  144. getCodeImg().then((res) => {
  145. this.captchaEnabled =
  146. res.captchaEnabled === undefined ? true : res.captchaEnabled;
  147. if (this.captchaEnabled) {
  148. this.codeUrl = "data:image/gif;base64," + res.img;
  149. this.loginForm.uuid = res.uuid;
  150. }
  151. });
  152. },
  153. //打开微信小程序二维码登录
  154. openWxamp() {
  155. var flag = window.open("/wxamp", "Campus", "width=400,height=700,left=30,top=10");
  156. var loop = setInterval(function () {
  157. if (flag.closed) {
  158. clearInterval(loop);
  159. window.location.reload();
  160. }
  161. }, 3);
  162. },
  163. // 用户登录
  164. handleLogin() {
  165. this.$refs.loginForm.validate((valid) => {
  166. if (valid) {
  167. this.loading = true;
  168. //登录接口
  169. login(this.loginForm)
  170. .then((response) => {
  171. // 登录成功 设置cookie
  172. this.setCookies(response);
  173. //重新加载
  174. window.location.reload();
  175. })
  176. .catch((response) => {
  177. this.loading = false;
  178. if (this.captchaEnabled) {
  179. this.getCode();
  180. }
  181. });
  182. }
  183. });
  184. },
  185. //设置COOKIE
  186. setCookies(res) {
  187. setToken(res.token);
  188. },
  189. },
  190. };
  191. </script>
  192. <style>
  193. .login {
  194. display: flex;
  195. justify-content: center;
  196. align-items: center;
  197. height: 100%;
  198. }
  199. .router-link-active {
  200. text-decoration: none;
  201. }
  202. .login-form {
  203. border-radius: 6px;
  204. background: #ffffff;
  205. width: 400px;
  206. padding: 25px 25px 5px 25px;
  207. }
  208. .el-input {
  209. height: 38px;
  210. }
  211. .el-input input {
  212. height: 38px;
  213. }
  214. .input-icon {
  215. height: 39px;
  216. width: 14px;
  217. margin-left: 2px;
  218. }
  219. .login-tip {
  220. font-size: 13px;
  221. text-align: center;
  222. color: #bfbfbf;
  223. }
  224. .login-code {
  225. width: 33%;
  226. height: 38px;
  227. float: right;
  228. }
  229. .login-code img {
  230. cursor: pointer;
  231. vertical-align: middle;
  232. }
  233. .el-login-footer {
  234. height: 40px;
  235. line-height: 40px;
  236. position: fixed;
  237. bottom: 0;
  238. width: 100%;
  239. text-align: center;
  240. color: #fff;
  241. font-family: Arial;
  242. font-size: 12px;
  243. letter-spacing: 1px;
  244. }
  245. .login-code-img {
  246. height: 38px;
  247. }
  248. </style>

源码下载

CSDN 1积分下载:https://download.csdn.net/download/caofeng891102/89406354

或者免费领取加小锋老师wx:java9266

热门推荐

免费分享一套SpringBoot+Vue物流快递仓库管理系统【论文+源码+SQL脚本】,帅呆了~~-CSDN博客

免费分享一套微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】,帅呆了~~_计算机操作系统第三版汤小丹pdf-CSDN博客

免费分享一套微信小程序商城系统(电商系统)(SpringBoot+Vue3)【至尊版】,帅呆了~~-CSDN博客

免费分享一套微信小程序扫码点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) ,帅呆了~~_uniapp微信点餐-CSDN博客

免费分享一套SpringBoot+Vue敬老院(养老院)管理系统,帅呆了~~-CSDN博客

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

闽ICP备14008679号