目录
- 毕设目的 1
- 开发环境 1
- 毕设内容 1
- 需求分析 2 4.1功能性需求分析 2 4.2非功能性需求 6 4.3设计约束 7
- 设计过程 7 5.1概要设计 7 5.2数据库设计 8 5.3系统详细设计 17 5.4、编码设计(具体实现流程) 20
- 调试过程 38 6.1 背景 38 6.2 测试目的 38 6.3测试环境 38 6.4 测试策略 39 6.5 测试方法 39 6.4 测试需求分析 39 6.5 测试设计与测试结果 40 6.6 测试报告 43
- 小结 43
- 参考文献 44 附录: 44
- 开发环境 硬件环境: Window11 电脑、Centos7.6 服务器 软件环境: IntelliJ IDEA 2021.1.3 开发工具 JDK 16 运行环境 Mysql 8 Navicat 15 for MySQL XShell、XFtp Redis5 RDM Docker Node.js 16.3.1 Maven Nginx 1.9.9
- 毕设内容 完成商城的基本功能模块: 登录模块、注册模块、首页商品列表显示模块、商品列表显示模块、 商品详情模块、购物车模块、收获地址模块、订单模块、个人中心模块。
- 需求分析 4.1功能性需求分析 网上商城主要分为两部分前台和后台,前台是面向用户的,其中包括用户在线注册、登录、购物、提交订单、付款等操作;本文转载自http://www.biyezuopin.vip/onews.asp?id=15217另一部分是商城的后台,是管理员用来管理商城的,这部分包括,商成数据展示、商品分类管理、商品信息管理、会员管理、订单管理。 4.1.1用户注册基本需求 1.用户需要输入用户名、邮箱、密码、以及重复密码 2.用户提交后会对表单数据进行校验,用户名不可用重复,邮箱格式也必须正确且不允许重复,密码用户自定义,重复密码需要与密码栏书写一致,防止用户操作失误输入错误的密码。 3.用户阅读并且勾选服务协议,才可注册。 4.注册后,系统会向用户注册邮箱发送激活链接,用户需要去邮箱查看并且点击激活用户,才可以使用此账号进行购物操作。
<template> <div class="app-container home"> <el-row :gutter="20"> <el-col :span="4"> <el-card class="box-card"> <el-row class="cart-content"> <el-col :span="10"> <i class="el-icon-user-solid" style="color: #F56C6C;"></i> </el-col> <el-col :span="14"> <span>{ { homeData.topData.memberCountNow }}</span> <p>今日登录会员</p> </el-col> </el-row> </el-card> </el-col> <el-col :span="4"> <el-card class="box-card"> <el-row class="cart-content"> <el-col :span="10"> <i class="el-icon-s-order" style="color: rgb(68,177,84)"></i> </el-col> <el-col :span="14"> <span>{ { homeData.topData.orderCountNow }}</span> <p>今日付款订单</p> </el-col> </el-row> </el-card> </el-col> <el-col :span="4"> <el-card class="box-card"> <el-row class="cart-content"> <el-col :span="10"> <i class="el-icon-s-finance" style="color: rgb(59,212,175)"></i> </el-col> <el-col :span="14"> <span>{ { homeData.topData.orderSumNow }}</span> <p>今日收益</p> </el-col> </el-row> </el-card> </el-col> <el-col :span="4"> <el-card class="box-card"> <el-row class="cart-content"> <el-col :span="10"> <i class="el-icon-shopping-bag-2" style="color: rgb(146,47,163)"></i> </el-col> <el-col :span="14"> <span>{ { homeData.topData.categoryCount }}</span> <p>商品类别数量</p> </el-col> </el-row> </el-card> </el-col> <el-col :span="4"> <el-card class="box-card"> <el-row class="cart-content"> <el-col :span="10"> <i class="el-icon-s-shop" style="color: rgb(83,172,230)"></i> </el-col> <el-col :span="14"> <span>{ { homeData.topData.sumTotalprice }}</span> <p>累计收益</p> </el-col> </el-row> </el-card> </el-col> <el-col :span="4"> <el-card class="box-card"> <el-row class="cart-content"> <el-col :span="10"> <i class="el-icon-s-custom" style="color: rgb(217,105,127)"></i> </el-col> <el-col :span="14"> <span>{ { homeData.topData.countMember }}</span> <p>累计会员数量</p> </el-col> </el-row> </el-card> </el-col> </el-row> <el-row :gutter="20" style="margin-top: 30px"> <el-col :span="16"> <div id="myChart" class="chart"></div> </el-col> <el-col :span="8"> <div id="classChart" class="chart"></div> </el-col> </el-row> </div> </template> <script> import {getTopData} from "@/api/shop/indexdata" export default { name: "Index", data() { return { // 版本号 version: "3.7.0", homeData: { topData: {}, categoryCountChart: {}, xData: [], yData: [] } }; }, methods: { getTop() { getTopData().then(response => { this.homeData = response.data; console.log("----", response.data) this.drawLine() }) }, goTarget(href) { window.open(href, "_blank"); }, drawLine() { // 基于准备好的dom,初始化echarts实例 var charDom = document.getElementById(myChart) var classChart = document.getElementById(classChart) let myClassChart = this.$echarts.init(classChart) let myChart = this.$echarts.init(charDom) var option; // 绘制图表 option = { title: { text: 近一个月销售记录, subtext: 总的销售金额, left: center }, xAxis: { type: category, data: this.homeData.xData }, yAxis: { type: value }, series: [ { data: this.homeData.yData, type: line } ], tooltip: { trigger: axis, } }; option && myChart.setOption(option) var option1; option1 = { title: { text: 商品分类占比, subtext: 各类商品的数量, left: center }, tooltip: { trigger: item }, series: [ { name: 类别名称, type: pie, radius: 50%, data: this.homeData.categoryCountChart, emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: rgba(0, 0, 0, 0.5) } } } ] }; option1 && myClassChart.setOption(option1) } }, created() { this.getTop() }, mounted() { console.log("+++++", this.homeData) // this.drawLine() } }; </script> <style scoped lang="scss"> //.cart-content{ //margin-top: 20px; //} .chart { height: 450px; background-color: #fff; padding-top: 20px; } //.el-row{ // margin-bottom: 30px; //} .box-card i { font-size: 60px; } .app-container { background-color: rgb(246, 246, 246); } .home { blockquote { padding: 10px 20px; margin: 0 0 20px; font-size: 17.5px; border-left: 5px solid #eee; } hr { margin-top: 20px; margin-bottom: 20px; border: 0; border-top: 1px solid #eee; } .col-item { margin-bottom: 20px; } ul { padding: 0; margin: 0; } font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; color: #676a6c; overflow-x: hidden; ul { list-style-type: none; } h4 { margin-top: 0px; } h2 { margin-top: 10px; font-size: 26px; font-weight: 100; } p { margin-top: 10px; b { font-weight: 700; } } .update-log { ol { display: block; list-style-type: decimal; margin-block-start: 1em; margin-block-end: 1em; margin-inline-start: 0; margin-inline-end: 0; padding-inline-start: 40px; } } } </style>
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/290632.html