免费分享一套SpringBoot+Vue实验室(预约)管理系统,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue实验室(预约)管理系统 ,分享下哈。

项目视频演示

【免费】SpringBoot+Vue实验室(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBoot+Vue实验室(预约)管理系统 Java毕业设计项目来自互联网,免费开源分享,严禁商业。更多毕业设源码:http://www.java1234.com/a/bysj/javaweb/, 视频播放量 161、弹幕量 0、点赞数 3、投硬币枚数 2、收藏人数 4、转发人数 1, 视频作者 java1234官方, 作者简介 公众号:java1234 微信:java9266,相关视频:【免费】javaweb实验室管理系统毕业设计,【免费】javaweb大学生就业管理系统毕业设计,【免费】javaweb超市管理系统高级版毕业设计,【免费】SpringBoot+Vue药店(药房)管理系统 Java毕业设计,【免费】javaweb企业人事管理系统毕业设计,【免费】javaweb物业管理系统毕业设计,【免费】javaweb员工工资管理系统毕业设计,【免费】javaweb超市管理系统毕业设计,【免费】基于springboot的进销存(仓库)管理系统 Java毕业设计,【免费】javaweb高校教务管理系统毕业设计icon-default.png?t=N7T8https://www.bilibili.com/video/BV14S421N7GL/

项目介绍

国家对高校实验教学的重视程度不断提高,正在不断的探索高校教学改革的方法。其中,建设教学示范中心是推动高校教学发展的方法之一。高校教学示范中心是组织高水平教学,培养创新型、应用型人才的重要基地;是提高教学质量,整合、共享教学资源,深化实验教学改革的重要途径。我校紧跟时代发展的步伐,申请并成立了多个教学示范中心。此前,我校计算机科学与技术实验教学示范中心在信息化建设方面投入的精力较少,信息化管理程度不足。为加强教学示范中心信息化建设,本人选择信息化管理中预约管理方向进行探究,设计一款实验室预约管理系统,来填补教学示范中心在实验室预约管理方向的空缺,推动本校教学示范中心的发展。

按照预期要求,本预约管理系统可以实现对实验室预约的网络化、信息化管理,能够将学生和教师从繁琐的过程中解放出来。学生可以随时随地查看实验室信息,按自己需求预约。管理人员可以通过网络审批,大幅度加快了审核的速度,减少了管理人员的工作量,提高了实验室资源的利用率。因此在教学方面,本课题是有实践意义的

系统展示

部分代码

package com.li.lrms.controller;

import com.alibaba.excel.util.StringUtils;
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.li.lrms.common.result.Result;
import com.li.lrms.model.user.User;
import com.li.lrms.service.UserService;
import com.li.lrms.util.JwtUtils;
import com.li.lrms.util.MD5;
import com.li.lrms.vo.login.EditVo;
import com.li.lrms.vo.user.UserQueryVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

@CrossOrigin
@RestController
@RequestMapping("/admin/users/user")
public class UserController {
    @Autowired
    private UserService userService;

    //1.查询所有用户
    @GetMapping("findAll")
    public Result findAllUser() {
        List<User> list = userService.list();
        return Result.ok(list);
    }

    //2.增加
    @PostMapping("addUser")
    public Result addUser(@RequestBody User users) {

//        String password = users.getPassword();
        String encrypt = MD5.encrypt("123456");
        users.setPassword(encrypt);

        boolean b = userService.save(users);
        if (b) return Result.ok();
        else return Result.fail();
    }

    //3.删除
    @DeleteMapping("{id}")
    public Result removeUser(@PathVariable String id) {
        boolean b = userService.removeById(id);
        if (b) return Result.ok();
        else return Result.fail();
    }

//4.条件查询分页

    /**
     * 1.创建vo类,封装条件值
     * 2.编写controller
     * 获取当前页面current和每页对象值limit
     * 获取条件语句 hospitalSetQueryVo
     */

    @PostMapping("findpage/{current}/{limit}")
    public Result findPageUser(@PathVariable long current, @PathVariable long limit,
                               @RequestBody(required = false) UserQueryVo usersQueryVo) {
        //创建page对象,传递当前页,每页记录数
        Page<User> page = new Page<>(current, limit);

        //构建查询条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        String name = usersQueryVo.getUserName();
        String role = usersQueryVo.getRole();

        if (!StringUtils.isEmpty(role)) {     //输入非空
            queryWrapper.eq("role", role);  //获取用户id
        }
        if (!StringUtils.isEmpty(name)) {
            queryWrapper.like("user_name", usersQueryVo.getUserName()); //获取用户id
        }
        //调用方法实现分页查询
        IPage<User> usersPage = userService.page(page, queryWrapper);

        //返回结果
        return Result.ok(usersPage);

    }


    //按id查询
    @GetMapping("getUsers/{id}")
    public Result getUsers(@PathVariable String id) {
        User users = userService.getById(id);
        return Result.ok(users);
    }

    //修改用户信息
    @PostMapping("updateUsers")
    public Result updateUsers(@RequestBody User users) {

        String password = users.getPassword();
        String encrypt = MD5.encrypt(password);
        users.setPassword(encrypt);

        boolean update = userService.updateById(users);
        if (update) return Result.ok();
        else return Result.fail();
    }

    //批量删除
    @DeleteMapping("batchRemove")
    public Result batchRemoveUsers(@RequestBody List<String> list) {
        userService.removeByIds(list);
        return Result.ok();
    }

    //修改状态
    @PutMapping("updateStatus/{id}/{status}")
    public Result setStatus(@PathVariable String id, @PathVariable Integer status) {
        //根据id查询
        User users = userService.getById(id);
        //修改信息
        users.setStatus(status);
        //调用函数更新
        userService.updateById(users);

        return Result.ok();
    }

    //4.修改个人信息
    //1.电话号码 2.密码  3.邮箱  4.
    @PostMapping("editInfo")
    public Result editInfo(@RequestBody(required = false) EditVo editVo, HttpServletRequest request) {

        String userId = JwtUtils.getMemberIdByJwtToken(request);
        User user = userService.getByUserId(userId);   //获得该用户信息

        userService.updateInfo(editVo, user);
        return Result.ok();


    }


}
<template>
  <div class="login-container">
    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on"
             label-position="left">

      <div class="title-container">
        <h3 class="title">实验室信息管理系统</h3>
      </div>

      <el-form-item prop="username">
        <span class="svg-container">
          <svg-icon icon-class="user"/>
        </span>
        <el-input
          ref="username"
          v-model="loginForm.username"
          placeholder="Username"
          name="username"
          type="text"
          tabindex="1"
          auto-complete="on"
        />
      </el-form-item>

      <el-form-item prop="password">
        <span class="svg-container">
          <svg-icon icon-class="password"/>
        </span>
        <el-input
          :key="passwordType"
          ref="password"
          v-model="loginForm.password"
          :type="passwordType"
          placeholder="Password"
          name="password"
          tabindex="2"
          auto-complete="on"
          @keyup.enter.native="handleLogin"
        />
        <span class="show-pwd" @click="showPwd">
          <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"/>
        </span>
      </el-form-item>

      <el-button :loading="loading" type="primary" style="width:48%;margin-bottom:30px;"
                 @click.native.prevent="handleLogin">登录
      </el-button>
      <el-button type="primary" style="width:48%;margin-bottom:30px;" @click="dialogFormVisible = true">注册</el-button>
      <div style="text-align: center">
        <el-radio v-model="loginForm.role" label="user">学生  </el-radio>
        <el-radio v-model="loginForm.role" label="teacher">教师   </el-radio>
        <el-radio v-model="loginForm.role" label="admin">管理员    </el-radio>
      </div>

      <el-dialog title="" :visible.sync="dialogFormVisible">
        <div class="register">
          <h1>注册</h1>
          <el-form ref="registerForm" :model="user" label-width="100px">
            <el-form-item label="姓名">
              <el-input v-model="user.userName" placeholder="Enter your username"></el-input>
            </el-form-item>
            <el-form-item label="账号">
              <el-input v-model="user.userId" placeholder="Enter your username"></el-input>
            </el-form-item>
            <el-form-item label="密码">
              <el-input v-model="user.password" type="password" placeholder="Enter your password"></el-input>
            </el-form-item>
            <el-form-item label="电话">
              <el-input v-model="user.phone" placeholder="Enter your phone number"></el-input>
            </el-form-item>
            <el-form-item label="邮箱">
              <el-input v-model="user.email" placeholder="Enter your email"></el-input>
            </el-form-item>

            <el-form-item>
              <el-button type="primary" @click="register()">注册</el-button>
              <el-button @click="dialogFormVisible = false">返回</el-button>
            </el-form-item>
          </el-form>
        </div>
      </el-dialog>

      <div class="tips">
        <span style="margin-right:20px;"></span>
        <span> </span>
      </div>

    </el-form>
    <div align="center"><a href="http://www.java1234.com/a/bysj/javaweb/" target="_blank"><font color="red">Java1234收藏整理</font></a></div>
  </div>
</template>

<script>
import {validUsername} from '@/utils/validate'
import axios from "axios";

export default {
  name: 'Login',
  data() {
    const validateUsername = (rule, value, callback) => {
      if (!validUsername(value)) {
        callback(new Error('请输入正确的用户名'))
      } else {
        callback()
      }
    }
    const validatePassword = (rule, value, callback) => {
      if (value.length < 6) {
        callback(new Error('密码不小于6位'))
      } else {
        callback()
      }
    }
    return {
      user: {
        userName: '',
        userId: '',
        password: '',
        phone: '',
        email: '',
        role: 'user'
      },
      dialogFormVisible: false,
      loginForm: {
        username: '20171506001',
        password: '123456',
        role: ''
      },
      loginRules: {
        username: [{required: true, trigger: 'blur', validator: validateUsername}],
        password: [{required: true, trigger: 'blur', validator: validatePassword}]
      },
      loading: false,
      passwordType: 'password',
      redirect: undefined
    }
  },
  watch: {
    $route: {
      handler: function (route) {
        this.redirect = route.query && route.query.redirect
      },
      immediate: true
    }
  },
  methods: {
    register() {
      this.$refs.registerForm.validate(valid => {
        if (valid) {
          axios.post('http://localhost:8200/admin/member/stuRegister', this.user)
            .then(response => {
              console.log(response.data);
              this.$message.success('注册成功')
              // handle response
            })
            .catch(error => {
              console.log(error);
              // handle error
            });
        } else {
          console.log('Validation failed');
        }
      });
    },
    resetForm() {
      this.$refs.registerForm.resetFields();
    },
    showPwd() {
      if (this.passwordType === 'password') {
        this.passwordType = ''
      } else {
        this.passwordType = 'password'
      }
      this.$nextTick(() => {
        this.$refs.password.focus()
      })
    },
    handleLogin() {
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          this.loading = true
          this.$store.dispatch('user/login', this.loginForm).then(() => {

            this.$router.push({path: this.redirect || '/'})

            this.loading = false

          }).catch(() => {
            this.loading = false

            this.$message({
              type: "error",
              message: "用户名或密码输入有误!",
            })
          })
        } else {
          console.log('error submit!!')
          return false
        }
      })
    },

  }
}
</script>

<style lang="scss">
/* 修复input 背景不协调 和光标变色 */
/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */

$bg: #283443;
$light_gray: #232222;
$cursor: #fff;

@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
  .login-container .el-input input {
    color: $cursor;
  }
}

/* reset element-ui css */
.login-container {
  .el-input {
    display: inline-block;
    height: 47px;
    width: 85%;

    input {
      background: transparent;
      border: 0px;
      -webkit-appearance: none;
      border-radius: 0px;
      padding: 12px 5px 12px 15px;
      color: $light_gray;
      height: 47px;
      caret-color: $cursor;

      &:-webkit-autofill {
        box-shadow: 0 0 0px 1000px $bg inset !important;
        -webkit-text-fill-color: $cursor !important;
      }
    }
  }

  .el-form-item {
    border: 1px solid rgba(255, 255, 255, 0.1);
    background: rgba(0, 0, 0, 0.1);
    border-radius: 5px;
    color: #454545;
  }
}
</style>

<style lang="scss" scoped>
.register {
  width: 500px;
  margin: 0 auto;
  padding: 50px 0;
}

$bg: #2d3a4b;
$dark_gray: #889aa4;
$light_gray: #eee;

.login-container {
  min-height: 100%;
  width: 100%;
  background-color: $bg;
  overflow: hidden;

  .login-form {
    position: relative;
    width: 520px;
    max-width: 100%;
    padding: 160px 35px 0;
    margin: 0 auto;
    overflow: hidden;
  }

  .tips {
    font-size: 14px;
    color: #fff;
    margin-bottom: 10px;

    span {
      &:first-of-type {
        margin-right: 16px;
      }
    }
  }

  .svg-container {
    padding: 6px 5px 6px 15px;
    color: $dark_gray;
    vertical-align: middle;
    width: 30px;
    display: inline-block;
  }

  .title-container {
    position: relative;

    .title {
      font-size: 26px;
      color: $light_gray;
      margin: 0px auto 40px auto;
      text-align: center;
      font-weight: bold;
    }
  }

  .show-pwd {
    position: absolute;
    right: 10px;
    top: 7px;
    font-size: 16px;
    color: $dark_gray;
    cursor: pointer;
    user-select: none;
  }
}
</style>

源码下载

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

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

热门推荐

免费分享一套SpringBoot+Vue药店(药房)管理系统,帅呆了~~-CSDN博客

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

免费分享一套微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) ,帅呆了~~_跑腿或点餐的uniapp前端模版-CSDN博客

免费分享一套Springboot+Vue前后端分离的在线教育平台系统,挺漂亮的-CSDN博客

免费分享一套Springboot+Vue前后端分离的停车场管理系统,挺漂亮的-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习笔记】3_11 模型选择、欠拟合和过拟合

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;做了部分个人理解标注&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.11 模型选择、欠拟合和过拟合 在前几节基于Fashion-MNIST数据集的实验中&#xff0c;我们评价了机器学习模型在训练数据集和测试数…

【前端】nginx 反向代理,实现跨域问题

前面讲跨域的问题&#xff0c;这篇 C# webapi 文章里面已经说过了。在上述文章中是属于从服务器端去允许访问的策略去解决跨域问题。而这里是从客户端的角度利用反向代理的方法去解决跨域问题。 反向代理&#xff1a;其原理就是将请求都接收到一个中间件&#xff08;中间地址&a…

【SRE系列之Jenkins的使用】--实现ssh和http克隆

1、Jenkins的概念 1.1Jenkins的介绍 Jenkins是一个独立的开源软件项目&#xff0c;是基于Java开发的一种CI&#xff08;Continuous integration&#xff0c;持续集成&#xff09; &CD (Continuous Delivery&#xff0c;持续交付)工具&#xff0c;用于监控持续重复的工作&a…

深入浅出JVM(十二)之垃圾回收算法

上篇文章深入浅出JVM&#xff08;十一&#xff09;之如何判断对象“已死”已经深入浅出的解析JVM是如何评判对象不再使用&#xff0c;不再使用的对象将变成“垃圾”&#xff0c;等待回收 垃圾回收算法有多种&#xff0c;适用于不同的场景&#xff0c;不同的垃圾收集器使用不同…

Matlab自学笔记二十七:详解格式化文本sprintf各参数设置方法

1.一个程序引例 上篇文章已经介绍了格式化文本的初步应用&#xff0c;程序示例如下&#xff1a; sprintf(|%f\n|%.2f\n|%8.2f,pi*ones(1,3)) 2.格式化操作符各字段的含义解析 格式化操作符可以有六个字段&#xff0c;只有主字符%和转换格式是必需的&#xff0c;其他都是可选…

DWT硬件延时

DWT硬件延时 文章目录 DWT硬件延时软件&硬件延时方案软件延时硬件延时方案 DWT硬件延时方案DWT硬件延时方案DEMCR寄存器DWT硬件延时方案实现延时初始化&#xff1a;US延时&#xff1a;MS延时&#xff1a; 软件&硬件延时方案 软件延时 static void Delay(uint32_t cou…

Sora抢饭碗!好莱坞大亨停止8亿美元投资

好莱坞消息&#xff0c;著名演员、影视投资人Tyler Perry在看到OpenAI最新发布的文生视频模型Sora后&#xff0c;停止了8亿&#xff08;约57亿元&#xff09;美元的投资。 该投资项目位于亚特兰大&#xff0c;本来要扩展十几个摄影棚用于影视剧的拍摄&#xff08;类似横店影视…

企业微信主体怎么转让给别人?

企业微信变更主体有什么作用&#xff1f;当我们的企业因为各种原因需要注销或已经注销&#xff0c;或者运营变更等情况&#xff0c;企业微信无法继续使用原主体继续使用时&#xff0c;可以申请企业主体变更&#xff0c;变更为新的主体。企业微信变更主体的条件有哪些&#xff1…

C++笔记(面对对象部分复习向)

B站&#xff1a;黑马程序员C教程 栈区&#xff0c;全局区&#xff0c;堆区和代码区 析构、构造和static 对象成员与类本身构造顺序&#xff0c;先成员后自己&#xff1b;析构则相反 static修饰成员变量,所有对象共享一份内存&#xff0c;编译阶段分配内存&#xff0c;类内声明…

Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件

文章目录 前言1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 安装cpolar内网穿透3.2 配置WebDav公网访问地址 4. 映射本地盘符访问 前言 在Windows上如何搭建WebDav&#xff0c;并且结合cpolar的内网穿透工具实现在公网访…

使用CE查找共享代码的多种方法

一般在游戏中,我们会有这样的定义Player和怪物NPC: // 基类 Character class Character { protected:std::string name;int64_t id;int32_t hp;int32_t mp;int32_t level;public:Character(const int64_t name) : id(id) {}virtual void attack() {…

做了个很牛的网站,可以搜索网站的网站到底有多好用?

今天给大家推荐的网站叫做&#xff1a;毒蘑菇 - 搜索 毒蘑菇搜索&#xff0c;顾名思义呢&#xff0c;搜索的功能比较好用&#xff0c;大家上网的时候总是需要记住网站的地址&#xff0c;即使你知道网站的名称&#xff0c;也得跳转到百度然后在搜索&#xff0c;有时候百度上那么…

Windows Server 2012 IIS中发布ASP.NET CORE项目

服务器安装IIS&#xff1a; 微软官网下载SDK&#xff1a; 下载Runtime官网&#xff1a;https://dotnet.microsoft.com/download/dotnet-core 安装成功重启IIS&#xff1a; VS发布项目&#xff1a;

流浪动物救助平台:Java开发的实践与思考

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

DevOps 周期的 6 个 C

中型到大型软件开发项目涉及许多人员、多个团队、资源、工具和开发阶段。它们都需要以某种方式进行管理和简化&#xff0c;不仅可以获得所需的产品&#xff0c;而且还要确保将来在不断变化的环境下易于管理和维护。组织通常遵循许多项目管理模型和技术。DevOps 是其中之一&…

精益生产,创新驱动:机器人技术引领企业的未来之路

随着自动化技术的普及和物联网、人工智能技术的迅速发展&#xff0c;全球制造业正在经历着一场革命性的变革。传统以人力劳动为基础的制造业正逐渐向以机器为主导的智能生产模式转型。企业们正积极探索更高效的制造方式&#xff0c;通过新兴技术提升生产力&#xff0c;同时降低…

该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定解决操作步骤

1. 关注“公众平台安全助手” 2. 进入“公众平台安全助手”&#xff0c;点击右上角的用户图标&#xff0c;进入公众号信息界面。 3. 进入“公众号信息”界面后&#xff0c;点击右上角的…图标&#xff0c;打开更多选项。 4. 打开“更多选项”后&#xff0c;选择设置选项&#x…

Python高性能web框架--Fastapi快速入门

文章目录 fastapi框架一、预备知识点1.1、http协议一、简介二、 http协议特性三、http请求协议与响应协议 1.2、api接口 二、quick start简单案例 fastapi框架 Fastapi&#xff0c;一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的web框架。 fastapi的两个核心…

随机分布模型

目录 前言 一、离散型随机变量 1.1 0-1分布 1.2 二项分布 1.3 帕斯卡分布 1.4 几何分布 1.5 超几何分布 1.6 泊松分布 二、连续型随机变量 2.1 均匀分布 2.2 指数分布 2.3 高斯分布/正态分布 2.4 分布&#xff08;抽样分布&#xff09; 2.5 t分布&#xff08;抽样…

pytest钩子函数-pytest_runtest_logreport提取测试用例相关信息

问题&#xff1a;想在每个日志中记录测试用例开始结束时间&#xff0c;获取到测试用例的名称。 解决办法&#xff1a;使用钩子pytest_runtest_logreport 在pytest中&#xff0c;想要在conftest.py文件中获取正在运行的测试用例的名称&#xff0c;可以使用pytest_runtest_logre…