大家好,我是java1234_小锋老师,看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版),分享下哈。
项目视频演示
【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版) Java毕业设计_哔哩哔哩_bilibili
项目介绍
本文介绍了一种基于Java语言开发的座位预约管理系统。该系统通过借助互联网和物联网技术,实现了座位预定、空间管理、数据分析等多种功能,为学生提供了便捷、高效、智能的学习环境。
系统使用前后端分离技术进行开发,服务器端接口使用SpringBoot开发框架实现,Vue前端框架,整合了Mybatis-plus持久层框架进行数据持久化,使用MySQL数据库存储数据。系统分为学生和管理员两个角色。学生可以进行登录注册、管理个人信息、浏览座位信息、预约选座、管理预约信息等功能。管理员可以管理所有用户信息、座位信息、时刻信息、预约选座等功能。
经过测试,该系统能够满足需求并稳定运行。测试验证表明,该系统具有操作简单、功能齐全、性能稳定等特点,可以有效提高学生的学习效率和教学质量。
未来,该系统可以进一步优化和拓展,例如加强数据可视化和智能推荐功能,以满足不同学科、不同层次的学生学习需求,为学校的数字化校园建设和现代化教育改革提供更优质、智能、便捷的支持和服务。
系统展示
部分代码
package com.selfstudy.modules.bas.controller;
import cn.hutool.core.bean.BeanUtil;
import com.selfstudy.common.utils.PageUtils;
import com.selfstudy.common.utils.R;
import com.selfstudy.config.MessageProperties;
import com.selfstudy.modules.bas.dto.save.BasNoticeSaveDTO;
import com.selfstudy.modules.bas.dto.update.BasNoticeUpdateDTO;
import com.selfstudy.modules.bas.entity.BasNoticeEntity;
import com.selfstudy.modules.bas.service.BasNoticeService;
import com.selfstudy.modules.sys.controller.AbstractController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.Map;
/**
* 公告表
*/
@RestController
@RequestMapping("/notice")
@Api(tags = "后台公告")
public class BasNoticeController extends AbstractController {
@Autowired
private BasNoticeService basNoticeService;
@Autowired
private MessageProperties messageProperties;
/**
* 列表
*/
@GetMapping("/list")
@ApiOperation("列表(noticeState,noticeTitle)")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = basNoticeService.queryPage(params);
return R.ok().put("data", page);
}
/**
* 详情
*/
@GetMapping("/info/{noticeId}")
@ApiOperation("详情")
public R info(@ApiParam(value = "noticeId") @PathVariable("noticeId") Long noticeId){
BasNoticeEntity basNotice = basNoticeService.getById(noticeId);
return R.ok().put("data", basNotice);
}
/**
* 保存
*/
@PostMapping("/save")
@ApiOperation("保存")
public R save(@RequestBody BasNoticeSaveDTO basNotice){
BasNoticeEntity basNoticeEntity = BeanUtil.copyProperties(basNotice, BasNoticeEntity.class);
basNoticeEntity.setCreateUserId(getUserId());
boolean save = basNoticeService.save(basNoticeEntity);
if(save){
return R.ok();
}
return R.error(messageProperties.getFormSaveError());
}
/**
* 修改
*/
@PostMapping("/update")
@ApiOperation("修改")
public R update(@RequestBody BasNoticeUpdateDTO basNotice){
BasNoticeEntity basNoticeEntity = BeanUtil.copyProperties(basNotice, BasNoticeEntity.class);
boolean update = basNoticeService.updateById(basNoticeEntity);
if (update){
return R.ok();
}
return R.error(messageProperties.getFormUpdateError());
}
/**
* 发布状态
* @param id
* @return
*/
@PostMapping("/updateStateOn")
@ApiOperation("发布状态")
public R updateStateOn(@ApiParam(value = "id") Long id){
boolean update = basNoticeService.lambdaUpdate().eq(BasNoticeEntity::getNoticeId, id).set(BasNoticeEntity::getNoticeState, 0).update();
if (update){
return R.ok();
}
return R.error(messageProperties.getFormUpdateError());
}
/**
* 取消发布状态
* @param id
* @return
*/
@PostMapping("/updateStateOff")
@ApiOperation("取消发布状态")
public R updateStateOff(@ApiParam(value = "id") Long id){
boolean update = basNoticeService.lambdaUpdate().eq(BasNoticeEntity::getNoticeId, id).set(BasNoticeEntity::getNoticeState, 1).update();
if (update){
return R.ok();
}
return R.error(messageProperties.getFormUpdateError());
}
/**
* 删除
*/
@DeleteMapping("/delete")
@ApiOperation("删除")
public R delete(@RequestBody Long[] noticeIds){
boolean b = basNoticeService.removeByIds(Arrays.asList(noticeIds));
if (b){
return R.ok();
}
return R.error(messageProperties.getFormDeleteError());
}
}
<template>
<div class="site-wrapper site-page--login">
<div class="site-content__wrapper">
<div class="site-content">
<div class="brand-info">
<h2 class="brand-info__text">自习室座位管理系统</h2>
</div>
<div class="login-main">
<h3 class="login-title">管理员登录</h3>
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" status-icon>
<el-form-item prop="userName">
<el-input v-model="dataForm.userName" placeholder="帐号"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input>
</el-form-item>
<el-form-item prop="captcha">
<el-row :gutter="20">
<el-col :span="14">
<el-input v-model="dataForm.captcha" placeholder="验证码">
</el-input>
</el-col>
<el-col :span="10" class="login-captcha">
<img :src="captchaPath" @click="getCaptcha()" alt="">
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-button class="login-btn-submit" type="primary" @click="dataFormSubmit()">登录</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</div>
</template>
<script>
import { getUUID } from '@/utils'
export default {
data () {
return {
dataForm: {
userName: '',
password: '',
uuid: '',
captcha: ''
},
dataRule: {
userName: [
{ required: true, message: '帐号不能为空', trigger: 'blur' }
],
password: [
{ required: true, message: '密码不能为空', trigger: 'blur' }
],
captcha: [
{ required: true, message: '验证码不能为空', trigger: 'blur' }
]
},
captchaPath: ''
}
},
created () {
this.getCaptcha()
},
methods: {
// 提交表单
dataFormSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
this.$http({
url: this.$http.adornUrl('/sys/login'),
method: 'post',
data: this.$http.adornData({
'username': this.dataForm.userName,
'password': this.dataForm.password,
'uuid': this.dataForm.uuid,
'captcha': this.dataForm.captcha
})
}).then(({data}) => {
if (data && data.code === 0) {
console.log(data)
this.$cookie.set('token', data.token)
this.$router.replace({ name: 'home' })
} else {
this.getCaptcha()
this.$message.error(data.msg)
}
})
}
})
},
// 获取验证码
getCaptcha () {
this.dataForm.uuid = getUUID()
this.captchaPath = this.$http.adornUrl(`/captcha.jpg?uuid=${this.dataForm.uuid}`)
}
}
}
</script>
<style lang="scss">
.site-wrapper.site-page--login {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(38, 50, 56, .6);
overflow: hidden;
&:before {
position: fixed;
top: 0;
left: 0;
z-index: -1;
width: 100%;
height: 100%;
content: "";
background-image: url(~@/assets/img/login_bg.jpg);
background-size: cover;
}
.site-content__wrapper {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 0;
margin: 0;
overflow-x: hidden;
overflow-y: auto;
background-color: transparent;
}
.site-content {
min-height: 100%;
padding: 30px 500px 30px 30px;
}
.brand-info {
margin: 220px 100px 0 90px;
color: #fff;
}
.brand-info__text {
margin: 0 0 22px 0;
font-size: 48px;
font-weight: 400;
text-transform : uppercase;
}
.brand-info__intro {
margin: 10px 0;
font-size: 16px;
line-height: 1.58;
opacity: .6;
}
.login-main {
position: absolute;
top: 0;
right: 0;
padding: 150px 60px 180px;
width: 470px;
min-height: 100%;
background-color: #fff;
}
.login-title {
font-size: 16px;
}
.login-captcha {
overflow: hidden;
> img {
width: 100%;
cursor: pointer;
}
}
.login-btn-submit {
width: 100%;
margin-top: 38px;
}
}
</style>
源码下载
链接:https://pan.baidu.com/s/1cfJC2_8jAT2MkSnuXnbOGQ
提取码:1234