基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程)

本文主要是介绍基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

👉文末查看项目功能视频演示+获取源码+sql脚本+视频导入教程视频

1 、功能描述

  基于VUE的校园二手物品交易管理系统8拥有两种角色

管理员:闲置物品管理、订单管理、用户管理

用户:登录注册、购物车、发布闲置物品、评论、发货、收货地址管理等

1.1 背景描述

  基于VUE的校园二手物品交易管理系统是一个使用Vue.js框架构建的Web应用程序。它旨在提供一个方便、可靠的平台,以管理校园内的二手物品交易。该系统主要包括用户管理、物品管理、订单管理和评价管理等功能。

  用户管理模块允许学生、教师和管理员注册、登录和修改个人信息。物品管理模块使学生可以发布和搜索物品,包括名称、描述和价格等信息。订单管理模块涵盖了订单生成、支付和发货等流程。评价管理模块则保障了交易的公正性和安全性。

  该系统特点在于界面友好、操作简便和功能完善。它满足了校园内二手物品交易的需求,使学生更方便地进行二手物品交易,提高物品利用率并节约资源。同时,它也减少了浪费并保护了环境。

2、项目技术

后端框架:springboot、Mybatis

前端技术:VUE

2.1 springboot

  Spring Boot是由Pivotal团队提供的基于Spring的框架,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot集成了绝大部分目前流行的开发框架,就像Maven集成了所有的JAR包一样,Spring Boot集成了几乎所有的框架,使得开发者能快速搭建Spring项目。

2.2 mysql

  MySQL是一款Relational Database Management System,直译过来的意思就是关系型数据库管理系统,MySQL有着它独特的特点,这些特点使他成为目前最流行的RDBMS之一,MySQL想比与其他数据库如ORACLE、DB2等,它属于一款体积小、速度快的数据库,重点是它符合本次毕业设计的真实租赁环境,拥有成本低,开发源码这些特点,这也是选择它的主要原因。

3、开发环境

  • JAVA版本:JDK1.8
  • IDE类型:IDEA、Eclipse都可运行
  • tomcat版本:无需
  • 数据库类型:MySql(5.5-5.7、8.x版本都可)
  • maven版本:无限制
  • 硬件环境:Windows

4、功能截图+视频演示+文档目录

4.1 登录

登录

4.2 前端模块

商品详情

首页

4.3 用户模块

用户-下单

用户-地址管理

用户-发布闲置

用户-购物车

4.4 管理员模块

管理员-用户管理

管理员-订单管理

管理员-违规用户

管理员-闲置管理1

管理员-闲置管理2

5 、核心代码实现

5.1 配置代码

# 使用对象关系映射,将对象和xml文件联系起来
# 指定MyBatis映射文件的路径
mybatis.typeAliasesPackage=com.second.hand.trading.server.model
mybatis.mapperLocations=classpath:mapper/*.xmlspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/second_hand_trading?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root# multipart上传文件
spring.servlet.multipart.enabled=true
#单个文件上传最大值
spring.servlet.multipart.max-file-size=200MB
#单次上传最大值
spring.servlet.multipart.max-request-size=200MB
#文件存放目录
userFilePath=D:\\1\\backend\\src\\main\\resources\\image
# 后端url
baseUrl=http://localhost:8080spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss# 中文乱码
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true

5.2 用户管理核心代码

package com.second.hand.trading.server.controller;import com.second.hand.trading.server.enums.ErrorMsg;
import com.second.hand.trading.server.model.UserModel;
import com.second.hand.trading.server.service.UserService;
import com.second.hand.trading.server.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;@RestController
@RequestMapping("user")
public class UserController {@Autowiredprivate UserService userService;/*** 注册账号* @param userModel* @return*/@PostMapping("sign-in")public ResultVo signIn(@RequestBody  UserModel userModel) {System.out.println(userModel);userModel.setSignInTime(new Timestamp(System.currentTimeMillis()));if (userModel.getAvatar() == null || "".equals(userModel.getAvatar())) {userModel.setAvatar("https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png");}if (userService.userSignIn(userModel)) {return ResultVo.success(userModel);}return ResultVo.fail(ErrorMsg.REGISTER_ERROR);}/*** 登录,不安全,可伪造id,后期改进** @param accountNumber* @param userPassword* @param response* @return*/@RequestMapping("login")public ResultVo login(@RequestParam("accountNumber") @NotEmpty @NotNull String accountNumber,@RequestParam("userPassword") @NotEmpty @NotNull String userPassword,HttpServletResponse response) {UserModel userModel = userService.userLogin(accountNumber, userPassword);System.out.println("登录:" + userModel);System.out.println("===================================");System.out.println(accountNumber + "   " + userPassword);System.out.println("===================================");if (null == userModel) {return ResultVo.fail(ErrorMsg.EMAIL_LOGIN_ERROR);}// 用户名或者密码为空if(accountNumber.equals("") || userPassword.equals("")){return ResultVo.fail(ErrorMsg.EMAIL_LOGIN_ERROR);}// 手机号长度不足11位if(userModel.getAccountNumber().length() != 11){return ResultVo.fail(ErrorMsg.EMAIL_LOGIN_ERROR);}if(userModel.getUserStatus()!=null&&userModel.getUserStatus().equals((byte) 1)){return ResultVo.fail(ErrorMsg.ACCOUNT_Ban);}Cookie cookie = new Cookie("shUserId", String.valueOf(userModel.getId()));
//        cookie.setMaxAge(60 * 60 * 24 * 30);cookie.setPath("/");cookie.setHttpOnly(false);response.addCookie(cookie);return ResultVo.success(userModel);}/*** 退出登录** @param shUserId* @param response* @return*/@RequestMapping("logout")public ResultVo logout(@CookieValue("shUserId")@NotNull(message = "登录异常 请重新登录")@NotEmpty(message = "登录异常 请重新登录") String shUserId, HttpServletResponse response) {Cookie cookie = new Cookie("shUserId", shUserId);cookie.setMaxAge(0);cookie.setPath("/");cookie.setHttpOnly(true);response.addCookie(cookie);return ResultVo.success();}/*** 获取用户信息** @param id* @return*/@GetMapping("info")public ResultVo getOneUser(@CookieValue("shUserId") @NotNull(message = "登录异常 请重新登录")@NotEmpty(message = "登录异常 请重新登录")String id) {return ResultVo.success(userService.getUser(Long.valueOf(id)));}/*** 修改用户公开信息* @param id* @param userModel* @return*/@PostMapping("/info")public ResultVo updateUserPublicInfo(@CookieValue("shUserId") @NotNull(message = "登录异常 请重新登录")@NotEmpty(message = "登录异常 请重新登录")String id, @RequestBody  UserModel userModel) {userModel.setId(Long.valueOf(id));if (userService.updateUserInfo(userModel)) {return ResultVo.success();}return ResultVo.fail(ErrorMsg.SYSTEM_ERROR);}/*** 修改密码* @param id* @param oldPassword* @param newPassword* @return*/@GetMapping("/password")public ResultVo updateUserPassword(@CookieValue("shUserId") @NotNull(message = "登录异常 请重新登录")@NotEmpty(message = "登录异常 请重新登录") String id,@RequestParam("oldPassword") @NotEmpty @NotNull String oldPassword,@RequestParam("newPassword") @NotEmpty @NotNull String newPassword) {if (userService.updatePassword(newPassword,oldPassword,Long.valueOf(id))) {return ResultVo.success();}return ResultVo.fail(ErrorMsg.PASSWORD_RESET_ERROR);}
}

6 、功能视频演示

基于VUE的校园二手物品交易管理系统8

7 、 获取方式

👇 大家点赞、收藏、关注、评论啦 👇🏻获取联系方式,后台回复关键词:二手👇🏻

这篇关于基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131146

相关文章

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的