1024程序员节|基于Vue+Nodejs+Springboot实现冬奥滑雪场地管理系统

简介: 1024程序员节|基于Vue+Nodejs+Springboot实现冬奥滑雪场地管理系统

在即将到来的1024程序员节,谨以此文献给CSDN和亲爱的同行们。

一,项目简介


鉴于 2022 北京冬奥会的成功举行,我国人民对于冰雪运动的热爱达到了前所未有的一


个高度,国内各大滑雪场的人流量日益增大,而国内疫情形式依旧严峻,固为减少人们线下


购票带来的密接影响,我们小组便开发了一个 online 的滑雪场信息网站.供用户以及滑雪场


工作人员进行使用,旨在提升服务效率与用户体验。

image.png

根据当前对本系统改版需求的理解,本章对用户角色进行分析,对系统将要支持的核心业务流程进行描述,说明系统的子系统或功能模块的组成,并展示部分用户界面的示意图。


本方案的其它内容都是基于对业务需求的理解。随着对需求理解越来越深入和清晰,技术方案和工作量估算等将会发生变化。


以下为本系统的整体架构:

image.png

二,环境介绍


语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术后台:Springboot+Mybatis

开发技术前台:Vue+Nodejs+ElementUI

三,系统展示


前端用户登陆

image.png

留言

image.png

个人中心

image.png

最新资讯

image.png

后台管理系统

image.png

用户管理

image.png

公告管理

image.png

留言管理

image.png

雪具管理

image.png

订单管理

image.png

四,核心代码展示


package com.cupk.controller;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cupk.common.dto.UserDto;
import com.cupk.common.lang.Result;
import com.cupk.entity.User;
import com.cupk.service.UserService;
import com.cupk.util.JwtUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@RestController
public class AccountController {
    @Autowired
    UserService userService;
    @Autowired
    JwtUtils jwtUtils;
    private String salt = "2000.10.22";
    /**
     * 用户登陆
     * @param userDto
     * @param response
     * @return
     */
    @PostMapping("/login")
    public Result login(@Validated @RequestBody UserDto userDto, HttpServletResponse response){
        User user = userService.getOne(new QueryWrapper<User>().eq("phone", userDto.getPhone()));
        Assert.notNull(user,"用户不存在");//断言拦截
        //判断账号密码是否错误 因为是md5加密所以这里md5判断
        if(!user.getPassword().equals(SecureUtil.md5(userDto.getPassword()+salt))){
            //密码不同则抛出异常
            return Result.fail("密码不正确");
        }
        String jwt = jwtUtils.generateToken(user.getId());
        userDto.setImg(user.getImg());
        userDto.setToken(jwt);
        //将token 放在入header里面
        response.setHeader("Authorization",jwt);
        response.setHeader("Access-control-Expose-Headers","Authorization");
        return Result.succ(200,"登录成功",userDto);
    }
    /**
     * 退出登录
     * @return
     */
    //需要认证权限才能退出登录
    @RequiresAuthentication
    @RequestMapping("/logout")
    public Result logout() {
        //退出登录
        SecurityUtils.getSubject().logout();
        return Result.succ("退出成功");
    }
}
package com.cupk.controller;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cupk.common.dto.AdminDto;
import com.cupk.common.lang.Result;
import com.cupk.entity.Admin;
import com.cupk.service.AdminService;
import com.cupk.util.JwtUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@RestController
@RequestMapping("/admin")
public class AdminController {
    @Autowired
    AdminService adminService;
    @Autowired
    JwtUtils jwtUtils;
    /**
     * 管理员登陆
     * @param adminDto
     * @param response
     * @return
     */
    @PostMapping("/adminLogin")
    public Result adminLogin(@Validated @RequestBody AdminDto adminDto, HttpServletResponse response){
        Admin admin = adminService.getOne(new QueryWrapper<Admin>().eq("admin_name", adminDto.getAdminName()));
        Assert.notNull(admin,"管理员不存在");//断言拦截
        if(!adminDto.getAdminPwd().equals(admin.getAdminPwd())){
            //密码不同则抛出异常
            return Result.fail("密码不正确");
        }
        String jwt = jwtUtils.generateToken(admin.getId());
        adminDto.setToken(jwt);
        //将token 放在我们的header里面
        response.setHeader("Authorization",jwt);
        response.setHeader("Access-control-Expose-Headers","Authorization");
        return Result.succ(200,"success",adminDto);
    }
    //需要认证权限才能退出登录
    /**
     * 管理员退出登陆
     * @return
     */
    @RequiresAuthentication
    @RequestMapping("/adminLogout")
    public Result adminLogout() {
        //退出登录
        SecurityUtils.getSubject().logout();
        return Result.succ("退出成功");
    }
    @GetMapping("/adminInfo")
    public Result findAdminInfoByName(@RequestParam String adminName){
        Admin admin = adminService.getOne(new QueryWrapper<Admin>().eq("admin_name",adminName));
        return Result.succ(200,"查询成功", admin);
    }
}
package com.cupk.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cupk.common.lang.Result;
import com.cupk.entity.Evaluate;
import com.cupk.entity.Notice;
import com.cupk.service.EvaluateService;
import com.cupk.util.ShiroUtil;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RequestMapping("/evaluate")
@RestController
public class EvaluateController {
    @Autowired
    EvaluateService evaluateService;
    /**
     * 评论列表
     * @return
     */
    @GetMapping("/evaluates")
    public Result evaList(@RequestParam(defaultValue = "1") Integer currentPage) {
        if(currentPage == null || currentPage < 1) currentPage = 1;
        Page page = new Page(currentPage, 50000);
        QueryWrapper<Evaluate> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("uid","");
        queryWrapper.orderByDesc("e_time");
        IPage pageData = evaluateService.page(page,queryWrapper.orderByDesc("e_time"));
        return Result.succ(pageData);
    }
    /**
     * 根据评论id查询
     * @param id
     * @return
     */
    @GetMapping("/evaluate/{id}")
    public Result findEva(@PathVariable Integer id) {
        Evaluate evaluate = evaluateService.getById(id);
        //判断是否为空 为空则断言异常
        Assert.notNull(evaluate, "该评价不存在");
        return Result.succ(evaluate);
    }
    /**
     *
     * @param currentPage
     * @param uid
     * @return
     */
    @GetMapping("/findEva")
    public Result evaLists(@RequestParam(defaultValue = "1") Integer currentPage,
                            @RequestParam(defaultValue = "") Integer uid){
        if(currentPage == null || currentPage < 1) currentPage = 1;
        Page page = new Page(currentPage, 50000);
        QueryWrapper<Evaluate> queryWrapper = new QueryWrapper();
        queryWrapper.eq("uid",uid);
        IPage pageData = evaluateService.page(page,queryWrapper.orderByDesc("e_time"));
        return Result.succ(pageData);
    }
    /**
     * 评论分页
     */
    @GetMapping("/evaluateList")
    public Result evalueList(@RequestParam(defaultValue = "1") Integer pageNum,
                           @RequestParam(defaultValue = "5") Integer pageSize,
                           @RequestParam(defaultValue = "") Integer uid) {
        if (pageNum == null || pageNum < 1) pageNum = 1;
        Page page = new Page(pageNum, pageSize);
        QueryWrapper<Evaluate> queryWrapper = new QueryWrapper();
        if (uid!=null) {
            queryWrapper.like("uid", uid);
        }
        IPage pageData = evaluateService.page(page, queryWrapper.orderByAsc("e_time"));
        return Result.succ(pageData);
    }
    /**
     * 添加评论
     * @param evaluate
     * @return
     */
    @RequiresAuthentication
    @PostMapping("/evaluate/addEva")
    public Result edit(@Validated @RequestBody Evaluate evaluate) {
        //一个空对象用于赋值
        Evaluate temp = new Evaluate();
        if (evaluate.getId() != null) {
            temp = evaluateService.getById(evaluate.getId());//将数据库的内容传递给temp
        } else {
            temp.setUid(ShiroUtil.getProfile().getId());
            temp.setUname(ShiroUtil.getProfile().getNickname());
            temp.setUImg(ShiroUtil.getProfile().getImg());
            temp.setContent(evaluate.getContent());
            temp.setETime(evaluate.getETime());
        }
        BeanUtil.copyProperties(evaluate, temp);
        evaluateService.save(temp);
        return Result.succ("成功发表评价");
    }
    /**
     * 单个删除
     * @param id
     * @return
     */
    @DeleteMapping("/delEva")
    public boolean delEvaList(@RequestParam Integer id){
        return evaluateService.removeById(id);
    }
    /**
     * 批量删除
     * @param ids
     * @return
     */
    @PostMapping("/delEvas")
    public boolean delEvaList(@RequestBody(required = false) List<Integer> ids){
        return evaluateService.removeByIds (ids);
    }
}
package com.cupk.controller;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cupk.common.lang.Result;
import com.cupk.entity.Gear;
import com.cupk.service.GearService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 雪具相关接口
 */
@RestController
@RequestMapping("/gear")
public class GearController {
    @Autowired
    GearService gearService;
    /**
     * 雪具列表
     * @param pageNum
     * @param brand
     * @param category
     * @return
     */
    @GetMapping("/gears")
    public Result gearList(@RequestParam(defaultValue = "1") Integer pageNum,
                           @RequestParam(defaultValue = "2") Integer pageSize,
                           @RequestParam(defaultValue = "") String brand,
                           @RequestParam(defaultValue = "") String category,
                           @RequestParam(defaultValue = "") String size){
        if(pageNum == null || pageNum < 1) pageNum = 1;
        Page page = new Page(pageNum,  pageSize);
        QueryWrapper<Gear> queryWrapper = new QueryWrapper();
        if (!"".equals(brand)){
            queryWrapper.like("brand",brand);
        }
        if (!"".equals(category)){
            queryWrapper.like("category",category);
        }
        if(!"".equals(size)){
            queryWrapper.like("size",size);
        }
        IPage pageData = gearService.page(page,queryWrapper.orderByAsc("brand"));
        return Result.succ(pageData);
    }
    /**
     * 编辑雪具信息
     * @param gear
     * @return
     */
    @PostMapping("/edit")
    public Result edit(@Validated @RequestBody Gear gear) {
        //一个空对象用于赋值
        Gear temp = null;
        //如果有id则是编辑
        if (gear.getId() != null) {
            temp = gearService.getById(gear.getId());//将数据库的内容传递给temp
        } else {
            temp = new Gear();
            temp.setBrand(gear.getBrand());
            temp.setCategory(gear.getCategory());
            temp.setDeposit(gear.getDeposit());
            temp.setGImg(gear.getGImg());
            temp.setSize(gear.getSize());
            temp.setStock(gear.getStock());
            temp.setRent(gear.getRent()) ;
        }
        BeanUtil.copyProperties(gear, temp);
        gearService.saveOrUpdate(temp);
        return Result.succ("修改成功");
    }
    /**
     * 单个删除
     * @param id
     * @return
     */
    @DeleteMapping("/delGear")
    public boolean delEvaList(@RequestParam Integer id){
        return gearService.removeById(id);
    }
    /**
     * 批量删除
     * @param ids
     * @return
     */
    @PostMapping ("/delGears")
    public boolean delEvaList(@RequestBody(required = false) List<Integer> ids){
        return gearService.removeByIds (ids);
    }
}

五,项目总结


项目基本功能完整,立意新颖,前后端分离开发的模式也是现在主流的开发方式,适合做毕业设计使用

相关文章
|
11月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1053 1
|
10月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
1186 0
|
7月前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
963 4
基于springboot+vue开发的会议预约管理系统
|
10月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
1217 80
|
8月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
463 6
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
|
11月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
825 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
6月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
6月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
6月前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。

热门文章

最新文章

下一篇
开通oss服务