免费分享一套Springboot+Vue前后端分离的校园二手交易平台,挺漂亮的

news2024/9/27 23:31:33

大家好,我是java1234_小锋老师,看到一个不错的Springboot+Vue前后端分离的校园二手交易平台,分享下哈。

项目视频演示

【免费】Springboot+Vue校园二手交易平台系统 毕业设计 Java毕业设计_哔哩哔哩_bilibili

项目介绍

校园二手交易网站是一种专门针对学校校园内的二手交易的网站。它的设计和开发主要是为了满足学生之间的二手物品交易需求,方便大家在线买卖二手物品。近年来,随着互联网技术的发展,人们越来越喜欢在线购物,二手交易也不例外。许多学生希望能够通过网络来买卖二手物品,但是由于缺乏一个专门的平台,他们往往只能在论坛、社交媒体等地方进行交易,这不仅不安全,而且不方便。因此,校园二手交易网站的出现是非常必要的。它不仅可以为学生提供一个安全、便捷的交易平台,而且还可以为学校提供一个管理二手物品交易的有效途径。通过这个网站,学生们可以轻松地买卖二手物品,减少浪费。

让学生们更好地利用资源。其次,校园二手交易网站还可以促进学校内部的社交互动,增强学生之间的联系,提高学校的整体形象。因为它是一个针对学校校园的专门平台,可以更好地保证交易的安全性和有效性,为学生提供更好的服务。此外,校园二手交易网站还能够为学校提供一个管理二手物品交易的有效途径。通过这个网站,学校可以更好地监管二手物品交易,保证交易的公平性和公正性,为学生提供更好的保障。总之,校园二手交易网站的出现不仅有利于学生之间的交流和交易,而且还能够为学校提供一种管理和服务的有效途径,对于提升学校的整体形象、改善学生的生活质量具有重要的意义。

系统展示

部分代码

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;

@CrossOrigin
@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private 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);
        if (null == userModel) {
            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);
    }
}
<template>
    <div class="login-container" >
        <el-card class="box-card">
            <div class="login-body">
                <div class="login-title" @click="toIndex" >校园交易平台</div>
                <el-form ref="form" :model="userForm">
                    <el-input placeholder="请输入账号..." v-model="userForm.accountNumber" class="login-input">
                        <template slot="prepend">
                            <div class="el-icon-user-solid"></div>
                        </template>
                    </el-input>
                    <el-input placeholder="请输入密码..." v-model="userForm.userPassword" class="login-input"
                              @keyup.enter.native="login"  show-password>
                        <template slot="prepend">
                            <div class="el-icon-lock"></div>
                        </template>
                    </el-input>
                    <div class="login-submit" >
                        <el-button type="primary" @click="login">登录</el-button>
                        <el-button type="warning" autocomplete="off" @click="$router.push('/sign-in')" style="margin-left: 20px">注册</el-button>
                    </div>
                    <div class="other-submit">

                        <router-link to="/login-admin" class="sign-in-text">管理员登录</router-link>
                    </div>
                  <div><a href="http://www.java1234.com/a/bysj/javaweb/" target="_blank"><font color="red"><h>java1234收藏整理</h></font></a></div>
                </el-form>
            </div>
        </el-card>
    </div>
</template>

<script>
    export default {
        name: "login",
        data() {
            return {
                userForm: {
                    accountNumber: '',
                    userPassword: ''
                }
            };
        },

        methods: {
            login() {
                this.$api.userLogin({
                    accountNumber: this.userForm.accountNumber,
                    userPassword: this.userForm.userPassword
                }).then(res => {
                    console.log(res);
                    if (res.status_code === 1) {
                        res.data.signInTime=res.data.signInTime.substring(0,10);
                        this.$globalData.userInfo = res.data;
                        this.$router.replace({path: '/index'});
                    } else {
                        this.$message.error(res.msg);
                    }
                });
            },
            toIndex() {
                this.$router.replace({path: '/index'});
            }
        }
    }
</script>
</style>

源码下载

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100V耐压 内置MOS ESOP8 40V输入 转5V 2.1A恒压输出

100V耐压内置MOS ESOP8 40V输入转5V 2.1A恒压输出 芯片测试数据如下图&#xff1a;

C#中简单的继承和多态

今天我们来聊一聊继承&#xff0c;说实话今天也是我第一次接触。 继承的概念是什么呢&#xff1f;就是一个类可以继承另一个类的属性和方法&#xff08;成员&#xff09; 继承是面向对象编程中的一个非常重要的特性。 好了&#xff0c;废话不多说&#xff0c;下面切入正题&a…

@SpringBootApplication自动配置原理剖析

SpringBootApplication自动配置原理剖析 自动配置: 根据我们添加的依赖,会自动将一些配置类的bean注册进ioc容器中,可以使用Autowired或者Resource等注解来使用它。 1.1 SpringBootApplication Spring Boot项目创建完成会默认生成一个Application的入口类(启动类),命名规则a…

推荐一些跨平台的比较优秀的翻译服务(软件或平台)

因为编程及查阅资料需要频繁的查阅英文&#xff0c;推荐一些跨平台的比较优秀的翻译服务&#xff08;软件或平台&#xff09; 1、DeepL Translate (https://www.deepl.com/translator) 这是一款基于机器翻译的在线翻译软件。win、安卓、Linux、IOS上都有可用的版本也可以基于w…

Android12编译kernel4.9解决:scripts/gcc-wrapper.py, line 79, in run_gcc(一百六十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

从池化的角度看GNN(包含PR-GNN,EdgePool等7篇论文)上篇

从池化的角度看GNN&#xff08;包含PR-GNN&#xff0c;EdgePool等7篇论文&#xff09; 前言一些总结一些早期论文的简要介绍1️⃣论文PR-GNN&#xff1a;《Pooling Regularized Graph Neural Network for fMRI Biomarker Analysis》 下一篇章笔记链接 前言 这里是早期的笔记&a…

MySQL 系列:注意 ORDER 和 LIMIT 联合使用的陷阱

文章目录 前言背后的原因ORDER BY 排序列存在相同值时返回顺序是不固定的LIMIT 和 ORDER BY 联合使用时的行为ORDER BY 或 GROUP BY 和 LIMIT 联合使用优化器默认使用有序索引 如何解决其它说明个人简介 前言 不知道大家在在分页查询中有没有遇到过这个问题&#xff0c;分页查…

pytorch之优化器、学习率函数学习

1、TORCH.OPTIM torch.optim是一个实现各种优化算法的包。大多数常用的方法都已经支持&#xff0c;并且接口足够通用&#xff0c;因此将来也可以轻松集成更复杂的方法 1、如何使用优化器 要使用&#xff0c;torch.optim您必须构造一个优化器对象&#xff0c;该对象将保存当前…

立创EDA把三个单独的PCB合并成一个文件

[TOC](立创EDA把三个单独的PCB合并成一个文件 1.具体操作 1.具体操作 参考&#xff1a;立创社区 先选中PCB CTRLSHIFTC, CTRLSHIFTV** **

uniapp交互反馈api的使用示例

官方文档链接&#xff1a;uni.showToast(OBJECT) | uni-app官网 1.uni.showToast({}) 显示消息提示框。 常用属性&#xff1a; title:页面提示的内容 image&#xff1a;改变提示框默认的icon图标 duration&#xff1a;提示框在页面显示多少秒才让它消失 添加了image属性后。 注…

PHP之添加文字水印,两端文字分别设置不同的样式,支持透明度

/*** 给图片添加文字水印 可控制字体颜色透明度&#xff0c;默认是居中* param string $imagePath 图片地址* param string $outputPath 新图片地址 默认使用$imgurl* param string $textArray 水印文字* param int $fontSize 字体大小* param string $fontPath 字体文件路径* …

Python爬虫实战-采集微博评论,看看大家都在讨论什么

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 模块使用: requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模块名…

PLC-Recorder V3版本软件升级方法

PLC-Recorder V3软件进行了架构优化&#xff0c;包括采集服务器、客户端、授权管理等组件。升级方法与V2版本相似&#xff0c;但是也有一些变化&#xff0c;说明如下&#xff1a; 一、从V2向V3版本升级 1、退出原PLCRecorder&#xff1a;关闭右下角的图标。 2、退出打开的离线…

前端接入若依后,页面白屏问题排查

白屏问题分析 页面停留一段时间后&#xff0c;通过tab打开其他的页面&#xff0c;界面会白屏或者无法跳转&#xff1b; 白屏的时候控制台无任何报错无法跳转的时候&#xff0c;控制台会输出错误信息&#xff0c;见截图 1. 无报错白屏问题 通过查找若依的issues找到一个问题点…

C# WPF上位机开发(动态添加控件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 写图形界面软件的时候&#xff0c;我们经常会遇到一种情况。那就是图形界面上面&#xff0c;显示的控件可能是不定的。有可能多&#xff0c;也有可…

外汇天眼:Coinbase国际交易所将启动现货市场

Coinbase宣布了Coinbase国际交易所扩张的下一阶段——退出符合条件客户的非美国现货市场。 这一最新发展旨在满足Coinbase全球用户群体的独特需求和需求&#xff0c;同时强化其扩大国际访问可信产品和服务的战略使命。 Coinbase国际交易所现货交易的推出和扩展将分阶段进行。1…

vue3+vite4中使用svg,使用iconfont-svg图标

记录一下vue3中如何使用svg图标&#xff0c;vue2中大家常用iconfont字体图标&#xff0c;现在vue3大家都又推荐svg的方式使用图表&#xff0c;包括elementplus组件库也变成使用svg方式引用图标。 1、创建svg组件 components/IconSvg.vue <template><svg class"…

avue-form 附件上传增加参数;上传前检查是否重复 覆盖或者跳过

效果 html: <el-dialog title"设备台账导入" append-to-body :visible.sync"excelBox" width"555px"><avue-form :option"excelOption" v-model"excelForm" :upload-after"uploadAfter" :upload-before…

Axure元件库使用与ProcessOn流程图

Axure元件库 自定义Axure元件库&#xff1a; 打开Axure RP软件&#xff0c;并点击菜单栏中的“元件库”选项&#xff0c;选择“新建元件库”。 在弹出的对话框中&#xff0c;选择一个文件夹来保存您的自定义元件库&#xff0c;并给它一个名称。 在Axure RP的主界面上&#x…