[免费]苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序医院预约挂号管理系统(uni-app+SpringBoot后端+Vue管理端),分享下哈。
项目视频演示
【免费】苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端+Vue管理端) Java毕业设计_哔哩哔哩_bilibili
项目介绍
当前高速发展的经济模式下,人们的工作和生活压力都很大,根本没有时间去下厨,在哪里下厨变成了一个问题,于是,在家里下厨的传统习惯逐渐地变成了无法完成的事情。以往,人们都是通过订购电话来进行订餐,但是,随着近年来的发展,订购电话已经不能满足更多的订购人员的需求,其缺点也逐渐显现出来[1]。正是由于上述各种因素,改变了传统的以电话、当面为基础的餐饮配送模式,成为一种更加便捷、快速的、以互联网为基础的外卖网上订购模式,成为了该系统的设计目的。
首先对项目进行了需求分析,系统角色可分为管理员和用户,管理员可以管理员工信息、分类管理、导出分类信息数据表格、菜品信息管理、套餐信息管理、订单明细查询、订单管理、导出订单明细数据表格、修改个人信息等。用户可以查看菜品信息、查看菜品详情、选择菜品规格、管理购物车、收货地址管理、修改个人信息、查看订单信息、下单支付等。然后外卖订餐系统根据需求分析进行系统功能模块设计和数据库设计。最后详细描述了外卖订餐系统各个功能模块是如何实现的。
本毕业设计管理系统使用HTML 5、AJAX、JavaScript、Vue、Element-UI框架等技术实现前端;使用Spring、Spring MVC、Spring Boot、MyBatis-Plus实现后端;采用 MySQL的关系数据库对数据进行存储,采用 Redis的方式对数据进行缓存,以 MySQL为主要的内存,以 Redis为主要的内存对数据进行缓存,以提高对数据的存取效率;使用Linux系统和Tomcat搭建服务器,完成项目的部署。
系统展示
部分代码
package com.sky.controller.user;import com.sky.constant.StatusConstant;
import com.sky.entity.Dish;
import com.sky.result.Result;
import com.sky.service.DishService;
import com.sky.vo.DishVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;@RestController("userDishController")
@RequestMapping("/user/dish")
@Slf4j
@Api(tags = "C端-菜品浏览接口")
public class DishController {@Autowiredprivate DishService dishService;@Autowiredprivate RedisTemplate redisTemplate;/*** 根据分类id查询菜品** @param categoryId* @return*/@GetMapping("/list")@ApiOperation("根据分类id查询菜品")public Result<List<DishVO>> list(Long categoryId) {//构造redis中的key,规则:dish_分类idString key = "dish_" + categoryId;//查询redis中是否存在菜品数据List<DishVO> list = (List<DishVO>) redisTemplate.opsForValue().get(key);if(list != null && list.size() > 0){//如果存在,直接返回,无须查询数据库return Result.success(list);}Dish dish = new Dish();dish.setCategoryId(categoryId);dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品//如果不存在,查询数据库,将查询到的数据放入redis中list = dishService.listWithFlavor(dish);redisTemplate.opsForValue().set(key, list);return Result.success(list);}}
<template><div class="login"><div class="login-box"><img src="@/assets/login/login-l.png" alt="" /><div class="login-form"><el-form ref="loginForm" :model="loginForm" :rules="loginRules"><div class="login-form-title"><imgsrc="@/assets/login/icon_logo.png"style="width: 149px; height: 50px"alt=""/><!-- <span class="title-label">食遇记</span> --></div><el-form-item prop="username"><el-inputv-model="loginForm.username"type="text"auto-complete="off"placeholder="账号"prefix-icon="iconfont icon-user"/></el-form-item><el-form-item prop="password"><el-inputv-model="loginForm.password"type="password"placeholder="密码"prefix-icon="iconfont icon-lock"@keyup.enter.native="handleLogin"/></el-form-item><el-form-item style="width: 100%"><el-button:loading="loading"class="login-btn"size="medium"type="primary"style="width: 100%"@click.native.prevent="handleLogin"><span v-if="!loading">LOGIN</span><span v-else>登录中...</span></el-button></el-form-item></el-form></div></div></div>
</template><script lang="ts">
import { Component, Vue, Watch } from 'vue-property-decorator'
import { Route } from 'vue-router'
import { Form as ElForm, Input } from 'element-ui'
import { UserModule } from '@/store/modules/user'
import { isValidUsername } from '@/utils/validate'@Component({name: 'Login',
})
export default class extends Vue {private validateUsername = (rule: any, value: string, callback: Function) => {if (!value) {callback(new Error('请输入用户名'))} else {callback()}}private validatePassword = (rule: any, value: string, callback: Function) => {if (value.length < 6) {callback(new Error('密码必须在6位以上'))} else {callback()}}private loginForm = {username: '',password: '',} as {username: Stringpassword: String}loginRules = {username: [{ validator: this.validateUsername, trigger: 'blur' }],password: [{ validator: this.validatePassword, trigger: 'blur' }],}private loading = falseprivate redirect?: string@Watch('$route', { immediate: true })private onRouteChange(route: Route) {}// 登录private handleLogin() {;(this.$refs.loginForm as ElForm).validate(async (valid: boolean) => {if (valid) {this.loading = trueawait UserModule.Login(this.loginForm as any).then((res: any) => {if (String(res.code) === '1') {this.$router.push('/')} else {// this.$message.error(res.msg)this.loading = false}}).catch(() => {// this.$message.error('用户名或密码错误!')this.loading = false})} else {return false}})}
}
</script><style lang="scss">
.login {display: flex;justify-content: center;align-items: center;height: 100%;// background: #476dbe;background-color: #f1ebeb;
}.login-box {width: 1000px;height: 474.38px;border-radius: 8px;display: flex;img {width: 60%;height: auto;}
}.title {margin: 0px auto 10px auto;text-align: left;color: #707070;
}.login-form {background: #ffffff;width: 40%;border-radius: 0px 8px 8px 0px;display: flex;justify-content: center;align-items: center;.el-form {width: 214px;height: 307px;}.el-form-item {margin-bottom: 30px;}.el-form-item.is-error .el-input__inner {border: 0 !important;border-bottom: 1px solid #fd7065 !important;background: #fff !important;}.input-icon {height: 32px;width: 18px;margin-left: -2px;}.el-input__inner {border: 0;border-bottom: 1px solid #e9e9e8;border-radius: 0;font-size: 12px;font-weight: 400;color: #333333;height: 32px;line-height: 32px;}.el-input__prefix {left: 0;}.el-input--prefix .el-input__inner {padding-left: 26px;}.el-input__inner::placeholder {color: #aeb5c4;}.el-form-item--medium .el-form-item__content {line-height: 32px;}.el-input--medium .el-input__icon {line-height: 32px;}
}.login-btn {border-radius: 17px;padding: 11px 20px !important;margin-top: 10px;font-weight: 500;font-size: 12px;border: 0;font-weight: 500;color: #333333;// background: #09a57a;background-color: #5A8B4F;&:hover,&:focus {// background: #09a57a;background-color: #5A8B4F;color: #ffffff;}
}
.login-form-title {height: 36px;display: flex;justify-content: center;align-items: center;margin-bottom: 40px;.title-label {font-weight: 500;font-size: 20px;color: #333333;margin-left: 10px;}
}
</style>
源码下载
链接:https://pan.baidu.com/s/1k7Bk8OqhRBWze-RO2qfETw
提取码:1234
相关文章:

[免费]苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端),分享下哈。 项目视频演示 【免费】苍穹微信小程序外卖点餐系统修改版(跑腿点餐系统)(SpringBoot后端Vue管理端) Java毕业设计…...

【RAG】RAG-MCP:基于检索增强生成来缓解大语言模型工具选择中的提示膨胀问题
摘要 由于提示膨胀和选择复杂性,大型语言模型 (LLM) 难以有效利用越来越多的外部工具,例如模型上下文协议 (MCP)[1]中定义的那些工具。 我们引入了 RAG-MCP,这是一个检索增强生成框架,通过卸载工具发现来克服这一挑战。 RAG-MCP …...

甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)
2025年甘特图工具的全面指南 在项目管理领域,甘特图作为最直观的任务规划和进度追踪工具,已成为团队协作和项目执行的核心手段。随着数字化技术的快速发展,2025年的甘特图工具市场呈现出前所未有的多元化和智能化趋势。从开源软件到云端协作…...
UI自动化测试中,一个完整的断言应所需要考虑的问题
在UI自动化测试中,一个完整的断言应全面覆盖用户界面(UI)的功能性、交互性和视觉正确性。以下是断言需要包含的核心内容及详细说明: 一、基础元素验证 存在性断言 验证元素存在于DOM中示例代码(Python + Selenium):assert driver.find_element(By.ID, "submit_btn&…...

AIGC与数字金融:人工智能金融创新的新纪元
AIGC与数字金融:人工智能金融创新的新纪元 引言 人工智能生成内容(AIGC)在数字金融领域发挥着关键作用,从金融内容生成到智能风控,从个性化服务到投资决策,AIGC正在重塑金融的方式和效果。本文将深入探讨A…...
CSS详解:特性、选择器与优先级
CSS详解:特性、选择器与优先级 目录 CSS详解:特性、选择器与优先级一、CSS的核心特性1. 层叠性(Cascading)2. 继承性(Inheritance)3. 优先级(Specificity)4. 响应式设计5. 动画与过渡…...

手机怎么查看网络ip地址?安卓/iOS设备查询指南
在移动互联网时代,IP地址作为设备的网络身份证,无论是网络调试、远程连接还是排查故障都至关重要。本文将系统介绍安卓和iOS设备查看IP地址的多种方法,帮助您快速掌握这一实用技能。 一、安卓手机查看IP地址方法 1、通过WiFi设置查看 打开设…...
React-useRef
useRef useRef 是 React 的一个 Hook,用来创建一个 可变的引用对象,这个引用对象在组件的整个生命周期内保持不变。 翻译成人话就是,用useRef创建一个相对共享的对象管理器,它里面装的内容的读写是不会引起界面渲染的。 典型的应用…...

无损耗协议:PROFINET和EtherNet IP网关的高效安装指南
作为风力发电机组监控系统的重要组成部分,PROFINET和EtherNet/IP协议转换网关倍讯BX-606-EIP的安装至关重要。作为安装工,我们要确保网关安装的高效顺利,保证风力发电机组的稳定运行。 首先,我们需要仔细检查网关的硬件接口,确保所有连接线缆与设备端口相匹配。网关…...

【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
std::ranges::iota
std::ranges::iota_view 和 std::views::iota 是 C23 Ranges 库中的一部分,用于生成一系列递增的值,类似 Python 的 range() 或传统的 for 循环生成器。 一 原形 Defined in header <numeric> Call signature template< std::input_or_output…...
C++(24):容器类<list>
目录 一、核心概念 二、基本语法 1. 声明与初始化 2.添加元素 3.访问与遍历 4. 删除元素 三、特点 1. 高效插入/删除 2. 不支持随机访问 3. 特有成员函数 4. 内存与性能 四、示例代码 五、成员函数 六、使用场景 七、注意事项 Lists将元素按顺序储…...
【C++】不推荐使用的std::allocator<void>
文章目录 不推荐使用的std::allocator<void>1. 核心区别2. 成员函数对比(1) allocate 和 deallocate(2) construct 和 destroy 3. 设计动机(1) std::allocator<T>(2) std::allocator<void> 4. 使用场景示例(1) std::allocator<int>(2) std::allocator&…...

基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务
1、简介 本文讲述了如何实现简易的后端鉴权服务。所谓“鉴权”,就是“身份鉴定”“权限判断”。涉及的技术有:OAuth2、SpringSecurity、Jwt、过滤器、拦截器。OAuth2用于授权,使用Jwt签发Access Token和Refresh Token,并管理token…...
vue3 el-table实现字段可编辑
在Vue 3中,如果你想让el-table(Element Plus的表格组件)的字段可编辑,你可以通过以下方式来实现: 使用cell-mouse-enter和cell-mouse-leave事件动态显示编辑图标或控件 你可以在鼠标进入单元格时显示一个编辑图标或输…...
基于React的高德地图api教程005:圆形标记的绘制、删除、修改
文章目录 5、圆形绘制和编辑5.1 绘制圆5.1.1 添加绘制圆按钮5.1.2 点击地图绘制圆心5.2 修改圆5.2.1 修改圆的基本信息5.2.2 修改圆的位置和大小5.3 删除圆标记5.4 定位到圆5.5 代码下载5.05、圆形绘制和编辑 5.1 绘制圆 5.1.1 添加绘制圆按钮 实现代码: {!isActiveDrawCi…...

liunx定时任务,centos定时任务
yum install cronie crontabs -y直接运行 crond -n 在前台运行 crond -i 守护进程在没有inotify支持的情况下运行systemctl service crond start # 启动服务 systemctl enable crond.service # 设置开机自启 sudo systemctl restart crond # 重启 cron 服务systemctl serv…...

三种嵌入式开发常用的组网方式
一、三种嵌入式开发常用的组网方式 这里记录了三种嵌入式开发常用的网络环境,最终目标也就是让开发板、虚拟机、物理机在同一个局域网下。一般的网络环境下都非常容易实现,但是对于学生校园网可得想些法子了,因为校园网一般会有设备连接数限…...

ubuntu 20.04 ping baidu.coom可以通,ping www.baidu.com不通 【DNS出现问题】解决方案
ping baidu.coom可以通,ping www.baidu.com不通【DNS出现问题】解决方案 检查IPV6是否有问题 # 1. 检查 IPv6 地址,记住网络接口的名称 ip -6 addr show# 2. 测试本地 IPv6,eth0换成自己的网络接口名称 ping6 ff02::1%eth0# 3. 检查路由 ip…...

城市排水管网流量监测系统解决方案
一、方案背景 随着工业的不断发展和城市人口的急剧增加,工业废水和城市污水的排放量也大量增加。目前,我国已成为世界上污水排放量大、增加速度快的国家之一。然而,总体而言污水处理能力较低,有相当部分未经处理的污水直接或间接排…...

Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群
Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群 1.本机部署个代理 这里我是自己用dockersing-box 部署的 http://192.168.2.105:10808 如果 用v2rayN等软件部署的,记得开启局域网共享 2.安装虚拟机 我本机使用的是Ubuntu Desktop ,这里在QEMU/K…...

YOLOv8 在单片机上的几种部署方案
YOLOv8 在单片机上的部署方案 单片机资源(如内存、计算能力)有限,直接部署完整的 YOLOv8 模型并不现实。不过,我们可以通过模型量化、优化和使用轻量级框架来实现简化版的目标检测。下面为你介绍几种可行的方案: 方案…...

后端框架(1):Mybatis
什么是框架? 盖高楼,框架结构。 框架结构就是高楼的主体,基础功能。 把很多基础功能已经实现了(封装了)。 在基础语言之上,对各种基础功能进行封装,方便开发者,提高开发效率。 mybatis:对jd…...

linux下tcp/ip网络通信笔记1,
本文章主要为博主在学习网络通信的笔记一个Udp_echo_server,和client的代码实现 1,网络发展,网络协议,意识到网络通信——不同主机的进程间通信, 2,学习如何在应用层调用系统提供的接口进行通信,echo_Udp…...
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
/// <summary> /// SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。 /// </summary> public class SqlHelper : IDbHelper {private readonly IDbConnectionFactory _connectionFactory;private…...

语音识别——声纹识别
通过将说话人的声音与数据库中的记录声音进行比对,判断说话人是否为数据库白名单中的同一人,从而完成语音验证。目前,3D-Speaker 声纹验证的效果较为出色。 3D-Speaker 是一个开源工具包,可用于单模态和多模态的说话人验证、说话…...

window 显示驱动开发-报告图形内存(三)
图形内存报告示例 示例 1:笔记本电脑上的 128 MB 专用板载图形内存 以下屏幕截图显示了使用 Intel Iris 离散图形适配器运行 Windows 11 的 Surface 笔记本电脑的计算图形内存数。 适配器的可用内存总数为 16424 MB,用于图形用途,细分如下&…...
安全运维 -- linux磁盘挂载到windows
0x00 背景 一个需求需要将linux服务器文件同步到windows。在此过程中遇到了三连报错,特此记录一下。 0x00 error 1 一开始死活挂不上,报错 mount: /mnt/Folder: mount(2) system call failed: No route to host. 一开始以为是dns问题,其实…...
使用 Apache POI 生成 Word 文档
创建一个包含标题、段落和表格的简单文档。 步骤 1:添加依赖 确保你的项目中已经添加了 Apache POI 的依赖。如果你使用的是 Maven,可以在 pom.xml 中添加以下内容: <dependency><groupId>org.apache.poi</groupId>...
高防服务器流量“清洗”什么意思
在当今数字化的时代,网络安全成为了备受关注的焦点。其中,高防服务器流量“清洗”这个概念,对于许多朋友来说可能还比较陌生。今天,就让我们一起来揭开它神秘的面纱。 首先,咱们得明白,高防服务器流量“清…...