当前位置: 首页 > news >正文

[免费]微信小程序停车场预约管理系统(Springboot后端+Vue3管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序停车场预约管理系统(Springboot后端+Vue3管理端)【论文+源码+SQL脚本】,分享下哈。

项目视频演示

【免费】微信小程序停车场预约管理系统(Springboot后端+Vue3管理端) Java毕业设计_哔哩哔哩_bilibili

项目介绍

当前社会,随着人们生活质量的提和思想观念的演进,加之经济全球化的推动,互联网技术正以前所未有的速度提社会综合发展的效能。这一技术正广泛渗透到各行各业,而传统管理方式已经不能对时间和地点的严格限制而显得力不从心。微信小程序作为一种创新解决方案,有效打破了传统的这些局限。

尤为重要的是,互联网与物联网技术的快速发展极大地促进了微信小程序在停车场预约小程序领域的应用当中,使之变得更加便捷、高效且智能化。在此情况下,本系统采用了先进的B/S架构模式,并借助微信开发者工具,运用Spring Boot框架构建。我们搭建了Java运行环境,部署了Tomcat服务器,并选择了MySQL这一轻量级数据库作为数据存储的核心。这些技术手段的综合运用,保证了系统的高效稳定运行,为用户带来了卓越的使用体验和高效的管理效能。

本系统旨在提升本行业的管理效率和信息化管理停车场预约小程序的设计与实现也为相关领域的研究提供了对照和参考。通过实践中的应用和优化,本系统可为用户放心使用

系统展示

部分代码

package com.cl.controller;import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.cl.annotation.IgnoreAuth;
import com.cl.annotation.SysLog;
import com.cl.entity.UsersEntity;
import com.cl.entity.view.UsersView;
import com.cl.service.TokenService;
import com.cl.service.UsersService;
import com.cl.utils.MPUtil;
import com.cl.utils.PageUtils;
import com.cl.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;/*** 管理员* 后端接口** @author* @email* @date 2025-02-17 10:09:58*/
@RestController
@RequestMapping("/users")
public class UsersController {@Autowiredprivate UsersService usersService;@Autowiredprivate TokenService tokenService;/*** 登录*/@IgnoreAuth@RequestMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {UsersEntity u = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));if (u == null || !u.getPassword().equals(password)) {return R.error("账号或密码不正确");}String token = tokenService.generateToken(u.getId(), username, "users", "管理员");return R.ok().put("token", token);}/*** 注册*/@IgnoreAuth@RequestMapping("/register")public R register(@RequestBody UsersEntity users) {//ValidatorUtils.validateEntity(users);UsersEntity u = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", users.getUsername()));if (u != null) {return R.error("注册用户已存在");}Long uId = new Date().getTime();users.setId(uId);users.setPassword(users.getPassword());usersService.insert(users);return R.ok();}/*** 退出*/@RequestMapping("/logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 获取用户的session用户信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request) {Long id = (Long) request.getSession().getAttribute("userId");return R.ok().put("data", usersService.selectView(new EntityWrapper<UsersEntity>().eq("id", id)));}/*** 密码重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request) {UsersEntity u = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));if (u == null) {return R.error("账号不存在");}u.setPassword("123456");usersService.updateById(u);return R.ok("密码已重置为:123456");}/*** 后台列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, UsersEntity users,HttpServletRequest request) {EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();PageUtils page = usersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, users), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, UsersEntity users,HttpServletRequest request) {EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();PageUtils page = usersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, users), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list(UsersEntity users) {EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();ew.allEq(MPUtil.allEQMapPre(users, "users"));return R.ok().put("data", usersService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(UsersEntity users) {EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();ew.allEq(MPUtil.allEQMapPre(users, "users"));UsersView usersView = usersService.selectView(ew);return R.ok("查询管理员成功").put("data", usersView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id) {UsersEntity users = usersService.selectById(id);users = usersService.selectView(new EntityWrapper<UsersEntity>().eq("id", id));return R.ok().put("data", users);}/*** 前端详情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id) {UsersEntity users = usersService.selectById(id);users = usersService.selectView(new EntityWrapper<UsersEntity>().eq("id", id));return R.ok().put("data", users);}/*** 后端保存*/@RequestMapping("/save")@SysLog("新增管理员")public R save(@RequestBody UsersEntity users, HttpServletRequest request) {users.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue());//ValidatorUtils.validateEntity(users);UsersEntity u = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", users.getUsername()));if (u != null) {return R.error("用户已存在");}users.setId(new Date().getTime());users.setPassword(users.getPassword());usersService.insert(users);return R.ok();}/*** 前端保存*/@SysLog("新增管理员")@RequestMapping("/add")public R add(@RequestBody UsersEntity users, HttpServletRequest request) {users.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue());//ValidatorUtils.validateEntity(users);UsersEntity u = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", users.getUsername()));if (u != null) {return R.error("用户已存在");}users.setId(new Date().getTime());users.setPassword(users.getPassword());usersService.insert(users);return R.ok();}/*** 修改*/@RequestMapping("/update")@Transactional@SysLog("修改管理员")public R update(@RequestBody UsersEntity users, HttpServletRequest request) {//ValidatorUtils.validateEntity(users);usersService.updateById(users);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")@SysLog("删除管理员")public R delete(@RequestBody Long[] ids) {usersService.deleteBatchIds(Arrays.asList(ids));return R.ok();}}
<template><div><div class="login_view"><div class="outTitle_view"><el-image class="outTitle_img" fit="cover"src="http://clfile.zggen.cn/20240919/adbb126f981544b496bf576a0105c615.png"></el-image><div class="outTilte">停车场预约小程序登录</div></div><el-form :model="loginForm" class="login_form"><div v-if="loginType==1" class="list_item"><div class="list_label">账号:</div><input v-model="loginForm.username" class="list_inp" name="username" placeholder="请输入账号"/></div><div v-if="loginType==1" class="list_item"><div class="list_label">密码:</div><input v-model="loginForm.password" class="list_inp" placeholder="请输入密码" type="password"@keydown.enter.native="handleLogin"/></div><div v-if="userList.length>1" class="list_type"><div class="list_label">用户类型:</div><el-select v-model="loginForm.role" placeholder="请选择用户类型"><el-option v-for="(item,index) in userList" :label="item.roleName" :value="item.roleName"></el-option></el-select></div><div v-if="loginType==1" class="remember_view"><el-checkbox v-model="rememberPassword" :false-label="false" :true-label="true" label="记住密码"size="large"/></div><div class="btn_view"><el-button v-if="loginType==1" class="login" type="success" @click="handleLogin">登录</el-button></div></el-form></div></div>
</template>
<script setup>
import {getCurrentInstance, onMounted, ref,} from "vue";
import {useStore} from 'vuex'const store = useStore()
const userList = ref([])
const menus = ref([])
const loginForm = ref({role: '',username: '',password: ''
})
const tableName = ref('')
const loginType = ref(1)
//是否记住密码
const rememberPassword = ref(true)
const context = getCurrentInstance()?.appContext.config.globalProperties;
const handleLogin = () => {if (!loginForm.value.username) {context?.$toolUtil.message('请输入用户名', 'error')return;}if (!loginForm.value.password) {context?.$toolUtil.message('请输入密码', 'error')return;}if (userList.value.length > 1) {if (!loginForm.value.role) {context?.$toolUtil.message('请选择角色', 'error')verifySlider.value.reset()return;}for (let i = 0; i < menus.value.length; i++) {if (menus.value[i].roleName == loginForm.value.role) {tableName.value = menus.value[i].pathName || menus.value[i].tableName;}}} else {tableName.value = userList.value[0].pathName || userList.value[0].tableName;loginForm.value.role = userList.value[0].roleName;}login()
}
const login = () => {context?.$http({url: `${tableName.value}/login?username=${loginForm.value.username}&password=${loginForm.value.password}`,method: 'post'}).then(res => {//是否保存当前账号密码至缓存if (rememberPassword.value) {let loginForm1 = JSON.parse(JSON.stringify(loginForm.value))delete loginForm1.codecontext?.$toolUtil.storageSet("loginForm", JSON.stringify(loginForm1));} else {context?.$toolUtil.storageRemove("loginForm")}context?.$toolUtil.storageSet("Token", res.data.token);context?.$toolUtil.storageSet("role", loginForm.value.role);context?.$toolUtil.storageSet("sessionTable", tableName.value);context?.$toolUtil.storageSet("adminName", loginForm.value.username);store.dispatch('user/getSession')	//vuex中获取用户信息并保存context?.$router.push('/')}, err => {})
}
//获取菜单
const getMenu = () => {let params = {page: 1,limit: 1,sort: 'id',}context?.$http({url: "menu/list",method: "get",params: params}).then(res => {menus.value = JSON.parse(res.data.data.list[0].menujson)for (let i = 0; i < menus.value.length; i++) {if (menus.value[i].hasBackLogin == '是') {userList.value.push(menus.value[i])}}//获取缓存是否有保存的账号密码let form = context?.$toolUtil.storageGet('loginForm')if (form) {} else {loginForm.value.role = userList.value[0].roleName}context?.$toolUtil.storageSet("menus", JSON.stringify(menus.value));})
}
//初始化
const init = () => {getMenu();//获取缓存是否有保存的账号密码let form = context?.$toolUtil.storageGet('loginForm')if (form) {loginForm.value = JSON.parse(form)}
}
onMounted(() => {init()})
</script><style lang="scss" scoped>
.login_view {background-image: url("http://clfile.zggen.cn/20240921/fb6feddfbb544df593bbf3240e3437db.webp");// 标题盒子.outTitle_view {// 标题图片.outTitle_img {}.outTilte {}}// 表单盒子.login_form {}// item盒子.list_item {// label.list_label {}// 输入框.list_inp {}}.list_type {.list_label {}// 下拉框样式:deep(.el-select) {//去掉默认样式.select-trigger {height: 100%;.el-input {height: 100%;}}}}// 记住密码样式.remember_view {// 未选中样式:deep(.el-checkbox) {// 复选框.el-checkbox__inner {}// 提示文字.el-checkbox__label {}}// 选中样式:deep(.is-checked) {//复选框.el-checkbox__inner {}// 提示文字.el-checkbox__label {}}}// 按钮盒子.btn_view {// 登录.login {}}
}</style>
<style>
.login_view {min-height: 100vh;position: relative;display: flex;flex-direction: column;align-items: center;justify-content: center;background-position: center center;background-size: 100% 100% !important;background-repeat: no-repeat;background-attachment: fixed;background-origin: initial;background-clip: initial;background-color: initial;
}.login_view .outTitle_view img.el-image__inner {width: 78px;height: 78px;
}.login_view .outTilte {color: #FFFFFF;line-height: 26px;font-size: 26px;margin-top: 30px;
}.login_view .outTitle_view {text-align: center;
}.login_view .login_form {width: 710px;background: #F6F6F6;border-radius: 60px 60px 0px 0px;margin-top: 40px;padding: 80px 80px 30px;display: flex;flex-wrap: wrap;
}.login_view .list_item {background: #fff;display: flex;padding: 0;width: 100%;height: 50px;margin-bottom: 40px;border-radius: 5px;order: 1;
}.login_view .list_label {line-height: 50px;position: relative;margin-right: 10px;width: 90px;flex-shrink: 0;text-align: center;
}.login_view input.list_inp {height: 50px;flex: 1;border: none;
}.login_view .list_label:after, .login_view .listCode_label:after {content: '';position: absolute;right: 0;height: 30px;width: 2px;background: linear-gradient(180deg, #FFFFFF 0%, #6F9867 46%, rgba(111, 152, 103, 0) 100%);top: 10px;
}.login_view .list_type {width: 100%;background: #fff;height: 50px;display: flex;padding: 0;margin-bottom: 40px;border-radius: 5px;order: 2;
}.login_view .list_type .el-select {flex: 1;
}.login_view .listCode_view {width: 100%;height: 50px;display: flex;padding: 0;margin-bottom: 40px;order: 3;
}.login_view .listCode_label {line-height: 50px;width: 90px;text-align: center;position: relative;background: #fff;border-radius: 5px 0 0 5px;
}.login_view input.listCode_inp {background: #fff;border: none;padding-left: 10px;width: 250px;margin-right: 10px;border-radius: 0 5px 5px 0;
}.login_view .listCode_btn {flex: 1;background: var(--theme);text-align: center;line-height: 50px;border-radius: 5px;
}.login_view .btn_view {width: 100%;display: flex;flex-wrap: wrap;row-gap: 20px;justify-content: center;column-gap: 20px;order: 4;
}.login_view .el-button.login {background: var(--theme);border: none;width: 100%;color: #fff;height: 50px;order: 1;
}.login_view .remember_view {display: none;
}.login_view .el-button.register {order: 3;border: 1px solid var(--theme);background: #fff;color: var(--theme);height: 50px;width: 122px;margin-left: 0;
}.login_view .el-button.forget {width: 194px;order: 20;background: #DADEDA;height: 50px;border-radius: 5px;color: var(--theme);margin: 0;
}.login_view .face {text-align: center;width: 100%;margin-top: 30px;font-size: 16px;order: 4;
}.login_view .el-button {font-size: 16px;
}.login_view .listCode_btn span {font-size: 22px !important;
}.login_view .el-select, .login_view .el-input {border: none;
}
</style>

源码下载

链接:https://pan.baidu.com/s/1hHVU7anVoxqJUeBDe5lcoA
提取码:1234

http://www.lqws.cn/news/578683.html

相关文章:

  • Instrct-GPT 强化学习奖励模型 Reward modeling 的训练过程原理实例化详解
  • 【Cyberstrikelab】lab2
  • 百胜软件获邀走进华为,AI实践经验分享精彩绽放
  • 使用 C++ 和 OpenCV 构建驾驶员疲劳检测软件
  • C++ STL之string类
  • 如何让宿主机完全看不到Wi-Fi?虚拟机独立联网隐匿上网实战!
  • Webpack优化详解
  • 赋能低压分布式光伏“四可”建设,筑牢电网安全新防线
  • 爬虫详解:Aipy打造自动抓取代理工具
  • UI前端与数字孪生融合新趋势:智慧医疗的可视化诊断辅助
  • 2025年XXE攻击全面防御指南:从漏洞原理到智能防护实践
  • python 利用socketio(WebSocket协议)实现轻量级穿透方案
  • GO 语言学习 之 Map
  • PyTorch 中 nn.Linear() 参数详解与实战解析(gpt)
  • K8s环境下基于Nginx WebDAV与TLS/SSL的文件上传下载部署指南
  • 极易搭建的自助Git服务Gogs
  • LeetCode 594. Longest Harmonious Subsequence
  • Hyperledger Fabric 入门笔记(二十一)Fabric V2.5 使用K8S部署测试网络
  • UI_NGUI_三大基础控件
  • 祛魅 | 在祛魅中成长,在成长中祛魅
  • DAY 43 预训练模型
  • 完整的ROS节点来实现果蔬巡检机器人建图与自主避障系统
  • 《从量子奇境到前端优化:解锁卡西米尔效应的隐藏力量》
  • API接口安全-1:身份认证之传统Token VS JWT
  • VMware 在局域网环境将虚拟机内部ip 端口开放
  • 使用SRS+ffmpeg实现https推流flv
  • python+uniapp基于微信小程序面向品牌会员的在线商城系统
  • 如何让Excel自动帮我们算加减乘除?
  • 基于llama-factory+ollama+vllm加速大模型训推生产
  • 深入 ARM-Linux 的系统调用世界