美妆商城系统 SpringBoot + Vue 【毕业设计 资料 + 源码】

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

一、前言

使用技术栈 SpringBoot + Vue + Mybatis + Mysql
该系统只要稍微修改,就可以作为其它类似的商城系统

具体功能划分如下图所示,这里不在细说。源码已经分享到GitHub:仓库地址:美妆商城系统源码 目前本人 技术有效,如有BUG 或者 好的建议 请提出。我会进一步完善该系统。

在这里插入图片描述

二、功能划分

1.1 用户功能

用户功能划分如下

在这里插入图片描述

1.2 管理员功能

管理员功能划分如下,同时包含普通用户的所有功能。主要涉及 后台管理。

在这里插入图片描述

三、部分页面

1.1 用户部分页面截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2 管理员部分页面截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、部分源码

后台java代码

    @PostMapping("/login")public Result<Account> login(@RequestBody Account account, HttpServletRequest request) {if (StrUtil.isBlank(account.getName()) || StrUtil.isBlank(account.getPassword()) || account.getLevel() == null) {throw new CustomException(ResultCode.PARAM_LOST_ERROR);}Integer level = account.getLevel();Account login = new Account();if (1 == level) {login = adminInfoService.login(account.getName(), account.getPassword());}if (3 == level) {login = userInfoService.login(account.getName(), account.getPassword());}request.getSession().setAttribute("user", login);return Result.success(login);}@PostMapping("/register")public Result<Account> register(@RequestBody Account account) {Integer level = account.getLevel();Account login = new Account();if (1 == level) {AdminInfo info = new AdminInfo();BeanUtils.copyProperties(account, info);info.setAccount(0D);login = adminInfoService.add(info);}if (3 == level) {UserInfo info = new UserInfo();BeanUtils.copyProperties(account, info);info.setAccount(0D);login = userInfoService.add(info);}return Result.success(login);}@GetMapping("/logout")public Result logout(HttpServletRequest request) {request.getSession().setAttribute("user", null);return Result.success();}

页面代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="pragma" content="no-cache"/><meta http-equiv="content-type" content="no-cache, must-revalidate"/><meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT"/><title>购物车信息</title><link href="css/bootstrap.min.css" rel="stylesheet"><link href="css/my.css" rel="stylesheet"><link href="css/nav.css" rel="stylesheet"><style>[v-cloak] {display: none;}td{vertical-align: middle !important;}</style>
</head>
<body style="background-color: #f2dede">
<div id="wrapper" v-cloak><!-- 头部开始 --><div style="width: 100%; height: 30px; line-height: 30px; background-color: #518657"><div class="container"><div class="col-md-6" style="text-align: left"><a href="/end/page/login.html" target="_blank" style="color: white; margin-right: 20px" >登录</a><a href="/end/page/register.html" target="_blank" style="color: white">注册</a></div><div class="col-md-6" style="color: yellow; text-align: right"><span v-if="user.name">欢迎您,{{user.name}}<a style="color: white" href="javascript:void(0)" @click="logout">退出</a><a v-if="isCollect" style="margin-left: 10px" href="collectInfo.html">收藏夹</a></span></div></div><hr></div><div class="container"><div style="width: 100%; height: 80px;border-bottom: 1px solid #ccc"><div class="col-md-3" style="height: 80px; display: flex; justify-content: left;align-items: center;font-size: 30px;"><a style="color: red;" href="/front/index.html">MakeUp美妆网</a></div><div class="col-md-9"><div class="row" style="height: 80px; line-height: 80px"><ul style="display: flex;"><li class="nav-item"><a href="index.html">首页</a></li><li class="nav-item"><a href="advertiserInfo.html">公告信息</a></li><li class="nav-item"><a href="messageInfo.html">在线交流</a></li><li class="nav-item"><a href="cartInfo.html" class="nav-item-active">购物车信息</a></li><li class="nav-item"><a href="orderInfo.html">订单信息</a></li><li class="nav-item"><a href="commentInfo.html">评价信息</a></li><li class="nav-item"><a href="javascript:void(0)" @click="personalPage">个人信息</a></li><li class="nav-item" v-if="isShow"><a href="/end/page/index.html" target="_blank">进入后台系统</a></li></ul></div></div></div></div><!-- 头部结束 --><div class="container"  style="margin-top: 20px"><div class="col-md-12"><h4 style="margin: 10px 0">全部化妆品({{totalCount}}</h4><table class="table table-bordered table-hover"><thead><tr style="background-color: #f8eeee"><th>商品</th><th>单价</th><th>数量</th><th>折扣</th><th>小计</th><th>操作</th></tr></thead><tbody><tr v-for="(item,index) in cartData" :key="item.id"><td style="width:230px;"><div style="display: flex;align-items: center"><img style="width: 50%; height: 50%" :src=item.imgSrc><span style="font-size: 12px; margin-left: 10px">{{item.name}}</span></div></td><td>{{item.price}}</td><td>{{item.count}}</td><td>{{item.discountDesc}}</td><td>{{item.total}}</td><td><button class="btn btn-danger btn-xs" @click="del(item)">删除</button></td></tr></tbody></table><div class="layui-row" style="text-align: right"><div style="margin: 10px 0">应付金额:<span style="color: red; font-weight: bold;margin-left: 10px">{{totalMoney}}</span></div><button class="btn btn-info" @click="submitCart()">提交订单</button></div></div></div>
</div><script src="js/jquery-1.10.2.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.metisMenu.js"></script>
<script src="js/vue2.6.11/vue.min.js"></script>
<script src="js/vue2.6.11/axios.js"></script>
<script src="js/my.js"></script><script>new Vue({el: '#wrapper',data: {isCollect: false,cartData: [],totalCount: 0,user: {},totalMoney: 0,isShow: false},created: function() {this.loadCartInfo();},methods: {loadCartInfo() {axios.get('/auth').then(res => {if (res.data.code === '0') {this.user = res.data.data;if (this.user.level !== 3) {this.isShow = true;}axios.get("/cartInfo?userId=" + this.user.id + "&level=" + this.user.level).then(res => {if (res.data.code === '0') {let cartData = res.data.data;cartData.forEach(item => {this.totalCount += item.count;item.imgSrc = '/front/img/goods/default.png';// 获取展示图if (item.fileIds) {let fileIds = JSON.parse(item.fileIds);if (fileIds.length) {item.imgSrc = '/files/download/' + fileIds[0];}}// 获取小计item.total = (item.count * item.price * item.discount).toFixed(2);this.totalMoney += parseFloat(item.total);// 获取折扣展示item.discountDesc = item.discount < 1 ? item.discount * 10 + ' 折' : '-'});this.cartData = cartData;} else {alert(res.data.msg);}});} else {alert('请先登录');location.href = '/end/page/login.html';}})},del(data) {if (confirm('确定删除订单吗?')) {axios.delete('/cartInfo/goods/' + this.user.id + '/' + this.user.level + '/' + data.id).then(res => {if (res.data.code === '0') {alert('删除成功');this.loadCartInfo();}})}},submitCart() {if (!this.cartData.length) {alert('未选择商品');return;}let data = {userId: this.user.id, level: this.user.level, totalPrice: this.totalMoney, goodsList: this.cartData};axios.post('/orderInfo', data).then(res => {if (res.data.code === '0') {location.href = '/front/orderInfo.html'} else {alert(res.data.msg);}})},logout() {axios.get("/logout").then(res => {if(res.data.code === '0') {location.href = '/front/index.html';} else {msg('error', res.data.msg);}})}}})
</script>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云贝教育 |【喜报】云贝学员轻松拿下腾讯云 TDSQL-TCP(PG版)证书 最新课程介绍

亲们&#xff0c;11月18日-数据库交付运维高级工程师-腾讯云TDSQL(PostgreSQL版)-TCP&#xff01;上课了&#xff01;&#xff01; 云贝学员刚刚出炉的(postgresql)版TCP证书 课程试听 点击链接即可转跳试听课 【云贝教育】腾讯云TDSQL(PG版)交付运维高级工程师TCP认证https…

灰度图处理方法

做深度学习项目图像处理的时候常常涉及到灰度图处理&#xff0c;这里对自己处理灰度图的方式做一个记录&#xff0c;后续有更新的话会在此更新 一&#xff0c;多维数组可视化 将多维数组可视化为灰度图 img_gray Image.fromarray(img, modeL) # 实现array到image的转换,m…

不能错过的2个方法,轻松学会如何备份系统!

​天有不测风云&#xff0c;电脑也有旦夕祸福&#xff0c;谁也不能预料到未来会发生什么意外状况&#xff0c;为了防止系统故障而导致的数据丢失和系统崩溃状况&#xff0c;学会定期备份系统是很重要的。 那么我们该如何备份系统呢&#xff1f;方法其实还是有很多种…

使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值

数字图像处理–实验二B图像的一维熵与二维熵算法 本文主要是对图像进行一维熵以及二维熵的计算&#xff0c;下面附有实现的代码 文章目录 数字图像处理--实验二B图像的一维熵与二维熵算法一、 实验内容二、 一维熵1. 一维熵的定义2. 一维熵的C代码实现 三、 二维熵1. 二维熵的定…

【Android】画面卡顿优化列表流畅度五之下拉刷新上拉加载更多组件RefreshLayout修改

之前也写过类似组件的介绍&#xff1a; 地址&#xff1a;下拉刷新&上拉加载更多组件SmartRefreshLayout 本来打算用这个替换的&#xff0c;但在进行仔细研究发现不太合适。功能都很好&#xff0c;但嵌入不了当前的工程体系里。原因就是那啥体制懂的都懂。这样的组件需要改…

VUE组件的生命周期

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到 DOM&#xff0c;以及在数据改变时更新 DOM。在此过程中&#xff0c;它也会运行被称为生命周期钩子的函数&#xff0c;让开发者有机会在特定阶…

数字人,虚拟数字人——你看好数字人领域的发展吗?

你看好数字人领域的发展吗&#xff1f; 目录 一、虚拟人、数字人、虚拟数字人基本概念 1.1、虚拟人&#xff08;Virtual Person&#xff09; 1.2、 数字人&#xff08;Digital Human&#xff09; 1.3、虚拟数字人&#xff08;Virtual Digital Human&#xff09; 1.4、侧重…

chatGPT真的会改变我们的生活吗?

先不说生活影响有多大&#xff0c;工作职场影响很大&#xff0c;现在在职场&#xff0c;随处可见Chat GPT的身影 OpenAI 开发的 ChatGPT 和类似的人工智能工具在短时间内不会取代我们的工作。但是&#xff0c;在科技、媒体等许多行业中&#xff0c;它们可以帮助员工更好、更快地…

百度飞浆环境安装

前言&#xff1a; 在安装飞浆环境之前得先把pytorch环境安装好&#xff0c;不过关于pytorch网上教程最多的都是通过Anaconda来安装&#xff0c;但是Anaconda环境安装容易遇到安装超时导致安装失败的问题&#xff0c;本文将叫你如何通过pip安装的方式快速安装&#xff0c;其实这…

PHP 论文发表管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 论文发表管理系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php 论文发表系统1 代码 https://download.csdn.net/download/qq_412213…

一则DNS被重定向导致无法获取MySQL连接处理

同事反馈xwik应用端报java exception 获取MySQL连接超时无法连接到数据库实例 经过告警日志发现访问进来的IP地址数据库端无法被解析&#xff0c;这里可以知道问题出现在Dns配置上了 通过以上报错检查/etc/resolve.conf 发现namesever 被重定向设置成了114.114.114.114 域名 …

11.3SpringMVC

一.概念 1.SpringMvc: a.构建在Servlet(api)基础上. b.是一个Web框架(HTTP). c.来自于Spring webMVC模块. 2.MVC 二.注册路由的注解 1.RequestMapping("/test") // 路由注册 注意: 这个注解在类和方法上都要使用,代表不同等级的路由. 2.RestController a)R…