• SpringBoot+vue+elementui实现前后端分离的化妆品销售商城网站


    文末获取源码

    开发语言:Java

    框架:springboot

    JDK版本:JDK1.8

    服务器:tomcat7

    数据库:mysql 5.7/8.0

    数据库工具:Navicat11

    开发软件:eclipse/myeclipse/idea

    Maven包:Maven3.3.9

    浏览器:谷歌浏览器

    一、前言介绍 

    随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,化妆品销售商城当然也不能排除在外。化妆品销售商城是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot框架构建的一个管理系统。整个开发过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计等;详细设计主要包括系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对系统进行功能测试,并对测试结果进行分析总结,得出系统中存在的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为今后开发类似系统提供了借鉴和帮助。这种个性化的网上管理系统特别注重交互协调与管理的相互配合,激发了管理人员的创造性与主动性,对化妆品销售商城而言非常有利。

    本化妆品销售商城采用的数据库是Mysql,使用springboot框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

    二、项目设计目标与原则

    1、关于化妆品销售商城的基本要求

    1)功能要求:可以管理首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理等功能模块。

    2)性能:在不同操作系统上均能无差错实现在不同类型的用户登入相应界面后能不出差错、方便地进行预期操作。

    3)安全与保密要求:用户都必须通过注册、登录才能进入系统,并且用户的权限也需要根据用户的类型进行限定。

    4)环境要求:支持多种平台,可在Windows系列、Vista系统等多种操作系统下使用。

    2、开发目标

    化妆品销售商城的主要开发目标如下:

    1)实现管理系统信息关系的系统化、规范化和自动化;

    2)减少维护人员的工作量以及实现用户对信息的控制和管理。

    3)方便查询信息及管理信息等;

    4)通过网络操作,改善处理问题的效率,提高操作人员利用率;

    5)考虑到用户多样性特点,要求界面简单,操作简便。

    3、设计原则

    化妆品销售商城采用Java技术,Mysql数据库开发,充分保证了系统稳定性、完整性。

    化妆品销售商城的设计与实现的设计思想如下:

    1. 操作简单方便、系统界面安全良好、简单明了的页面布局、方便查询相关信息。
    2. 即时可见:对化妆品销售商城信息的处理将立马在对应地点可以查询到,从而实现“即时发布、即时见效”的系统功能。

    4、化妆品销售商城结构图

     

    三、系统详细设计 

    前台首页功能模块

    化妆品销售商城,在化妆品销售商城可以查看首页、商品信息、商品资讯、个人中心、后台管理、购物车、在线客服等内容,如图 

    用户登录用户注册,通过注册获取用户名、密码、姓名、联系电话等信息进行注册、登录,如图 

    商品信息

    在商品信息页面可以查看商品名称、商品分类、图片、品牌、规格、价格等信息进行添加到购物车、立即购买,如图

    个人中心

    在个人中心页面可以查看用户名、姓名、性别、头像、联系电话等进行更新信息、退出登录如图 

     

    管理员功能模块

    管理员登录,通过填写用户名、密码、角色进行登录,如图

    管理员登录进入化妆品销售商城可以查看首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理等信息。 

    用户管理

    在用户管理页面中可以查看用户名、姓名、性别、头像、联系电话等信息,并可根据需要对用户管理进行详情、修改或删除等操作,如图 

    商品分类管理

    在商品分类管理页面中可以查看商品分类等信息,并可根据需要对商品分类管理进行详情、修改或删除等详细操作,如图 

    商品信息管理

    在商品信息管理页面中可以查看商品名称、商品分类、图片、品牌、规格、价格等内容,并且根据需要对商品信息管理进行详情,修改或删除等详细操作,如图 

    轮播图

    该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作,如图 

    订单管理

    在订单管理页面中可以查看订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址等内容,并且根据需要对订单管理进行详情、修改或删除等详细操作,如图 

    订单评价管理

    在订单评价管理页面中可以查看订单编号、商品名称、商品分类、品牌、规格、评分、添加图片、评价内容、评价日期、用户名、审核回复、审核状态、审核等内容,并且根据需要对订单评价管理进行详情、修改或删除等详细操作,如图 

    四、部分核心代码

    购物车

    1. /**
    2. * 购物车表
    3. * 后端接口
    4. * @author
    5. * @email
    6. * @date 2021-03-13 12:49:52
    7. */
    8. @RestController
    9. @RequestMapping("/cart")
    10. public class CartController {
    11. @Autowired
    12. private CartService cartService;
    13. /**
    14. * 后端列表
    15. */
    16. @RequestMapping("/page")
    17. public R page(@RequestParam Map<String, Object> params,CartEntity cart,
    18. HttpServletRequest request){
    19. if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    20. cart.setUserid((Long)request.getSession().getAttribute("userId"));
    21. }
    22. EntityWrapper<CartEntity> ew = new EntityWrapper<CartEntity>();
    23. PageUtils page = cartService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cart), params), params));
    24. return R.ok().put("data", page);
    25. }
    26. /**
    27. * 前端列表
    28. */
    29. @RequestMapping("/list")
    30. public R list(@RequestParam Map<String, Object> params,CartEntity cart, HttpServletRequest request){
    31. EntityWrapper<CartEntity> ew = new EntityWrapper<CartEntity>();
    32. PageUtils page = cartService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cart), params), params));
    33. return R.ok().put("data", page);
    34. }
    35. /**
    36. * 列表
    37. */
    38. @RequestMapping("/lists")
    39. public R list( CartEntity cart){
    40. EntityWrapper<CartEntity> ew = new EntityWrapper<CartEntity>();
    41. ew.allEq(MPUtil.allEQMapPre( cart, "cart"));
    42. return R.ok().put("data", cartService.selectListView(ew));
    43. }
    44. /**
    45. * 查询
    46. */
    47. @RequestMapping("/query")
    48. public R query(CartEntity cart){
    49. EntityWrapper< CartEntity> ew = new EntityWrapper< CartEntity>();
    50. ew.allEq(MPUtil.allEQMapPre( cart, "cart"));
    51. CartView cartView = cartService.selectView(ew);
    52. return R.ok("查询购物车表成功").put("data", cartView);
    53. }
    54. /**
    55. * 后端详情
    56. */
    57. @RequestMapping("/info/{id}")
    58. public R info(@PathVariable("id") Long id){
    59. CartEntity cart = cartService.selectById(id);
    60. return R.ok().put("data", cart);
    61. }
    62. /**
    63. * 前端详情
    64. */
    65. @RequestMapping("/detail/{id}")
    66. public R detail(@PathVariable("id") Long id){
    67. CartEntity cart = cartService.selectById(id);
    68. return R.ok().put("data", cart);
    69. }
    70. /**
    71. * 后端保存
    72. */
    73. @RequestMapping("/save")
    74. public R save(@RequestBody CartEntity cart, HttpServletRequest request){
    75. cart.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    76. //ValidatorUtils.validateEntity(cart);
    77. cart.setUserid((Long)request.getSession().getAttribute("userId"));
    78. cartService.insert(cart);
    79. return R.ok();
    80. }
    81. /**
    82. * 前端保存
    83. */
    84. @RequestMapping("/add")
    85. public R add(@RequestBody CartEntity cart, HttpServletRequest request){
    86. cart.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    87. //ValidatorUtils.validateEntity(cart);
    88. cartService.insert(cart);
    89. return R.ok();
    90. }
    91. /**
    92. * 修改
    93. */
    94. @RequestMapping("/update")
    95. public R update(@RequestBody CartEntity cart, HttpServletRequest request){
    96. //ValidatorUtils.validateEntity(cart);
    97. cartService.updateById(cart);//全部更新
    98. return R.ok();
    99. }
    100. /**
    101. * 删除
    102. */
    103. @RequestMapping("/delete")
    104. public R delete(@RequestBody Long[] ids){
    105. cartService.deleteBatchIds(Arrays.asList(ids));
    106. return R.ok();
    107. }
    108. /**
    109. * 提醒接口
    110. */
    111. @RequestMapping("/remind/{columnName}/{type}")
    112. public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
    113. @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    114. map.put("column", columnName);
    115. map.put("type", type);
    116. if(type.equals("2")) {
    117. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    118. Calendar c = Calendar.getInstance();
    119. Date remindStartDate = null;
    120. Date remindEndDate = null;
    121. if(map.get("remindstart")!=null) {
    122. Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
    123. c.setTime(new Date());
    124. c.add(Calendar.DAY_OF_MONTH,remindStart);
    125. remindStartDate = c.getTime();
    126. map.put("remindstart", sdf.format(remindStartDate));
    127. }
    128. if(map.get("remindend")!=null) {
    129. Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
    130. c.setTime(new Date());
    131. c.add(Calendar.DAY_OF_MONTH,remindEnd);
    132. remindEndDate = c.getTime();
    133. map.put("remindend", sdf.format(remindEndDate));
    134. }
    135. }
    136. Wrapper<CartEntity> wrapper = new EntityWrapper<CartEntity>();
    137. if(map.get("remindstart")!=null) {
    138. wrapper.ge(columnName, map.get("remindstart"));
    139. }
    140. if(map.get("remindend")!=null) {
    141. wrapper.le(columnName, map.get("remindend"));
    142. }
    143. if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    144. wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));
    145. }
    146. int count = cartService.selectCount(wrapper);
    147. return R.ok().put("count", count);
    148. }
    149. }

     用户登录

    1. /**
    2. * 登录
    3. */
    4. @IgnoreAuth
    5. @RequestMapping(value = "/login")
    6. public R login(String username, String password, String captcha, HttpServletRequest request) {
    7. YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", username));
    8. if(user==null || !user.getMima().equals(password)) {
    9. return R.error("账号或密码不正确");
    10. }
    11. String token = tokenService.generateToken(user.getId(), username,"yonghu", "用户" );
    12. return R.ok().put("token", token);
    13. }

    数据库配置

    1. # Tomcat
    2. server:
    3. tomcat:
    4. uri-encoding: UTF-8
    5. port: 8080
    6. servlet:
    7. context-path: /springboot7z60r
    8. spring:
    9. datasource:
    10. driverClassName: com.mysql.jdbc.Driver
    11. url: jdbc:mysql://127.0.0.1:3308/shop?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
    12. username: root
    13. password: 123456
    14. # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
    15. # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springboot7z60r
    16. # username: sa
    17. # password: 123456
    18. servlet:
    19. multipart:
    20. max-file-size: 10MB
    21. max-request-size: 10MB
    22. resources:
    23. static-locations: classpath:static/,file:static/
    24. #mybatis
    25. mybatis-plus:
    26. mapper-locations: classpath*:mapper/*.xml
    27. #实体扫描,多个package用逗号或者分号分隔
    28. typeAliasesPackage: com.entity
    29. global-config:
    30. #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    31. id-type: 1
    32. #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    33. field-strategy: 2
    34. #驼峰下划线转换
    35. db-column-underline: true
    36. #刷新mapper 调试神器
    37. refresh-mapper: true
    38. #逻辑删除配置
    39. logic-delete-value: -1
    40. logic-not-delete-value: 0
    41. #自定义SQL注入器
    42. sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
    43. configuration:
    44. map-underscore-to-camel-case: true
    45. cache-enabled: false
    46. call-setters-on-nulls: true
    47. #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
    48. jdbc-type-for-null: 'null'

  • 相关阅读:
    组合总和(Lc39)——排序+剪枝+回溯
    直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析(二)
    数据包的奇妙旅程:揭秘网络传输的7个关键步骤
    要闻 | 人大金仓重磅亮相2022南京软博会
    智慧园区软件平台设计方案Word(1129页)
    Vue3 + Three.js + gltf-pipeline大型园区场景渲染与3D业务
    我们用到的3种Mock测试方案​
    HDMI字符显示实验
    算法通过村第十一关-位运算|青铜笔记|初始位运算
    <二>Qt斗地主游戏开发:过场动画的实现
  • 原文地址:https://blog.csdn.net/m0_49113107/article/details/126849304