基于Vue开发的一个仿京东电商购物平台系统(附源码下载)

news2024/9/28 9:32:47

电商购物平台项目

项目完整源码下载

基于Vue开发的一个仿京东电商购物平台系统

Build Setup

# csdn下载该项目源码压缩包
解压重命名为sangpinghui_project

# 进入项目目录
cd sangpinghui_project

# 安装依赖
npm install

# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npm.taobao.org

# 启动服务
npm run serve

技术选型

image-20220608150139753

前端路由

image-20220608150232527

API 接口

image-20220608150314003

目录介绍

image-20220608150502494

header 组件

image-20220608151719241

使用声明式路由导航与编程式路由导航

解决编程式路由导航的一个错误

编程式路由跳转到当前路由(参数不变), 会抛出 NavigationDuplicated 的警告错误,如何解决?

通过修正 Vue 原型上的 push 和 replace 方法

// 缓存原型上的push函数
const originPush = VueRouter.prototype.push;
const originReplace = VueRouter.prototype.replace;
// 给原型对象上的push指定新函数函数
VueRouter.prototype.push = function (location, onComplete, onAbort) {
  // 判断如果没有指定回调函数, 通过call调用源函数并使用catch来处理错误
  if (onComplete === undefined && onAbort === undefined) {
    return originPush.call(this, location, onComplete, onAbort).catch(() => {});
  } else {
    // 如果有指定任意回调函数, 通过call调用源push函数处理
    originPush.call(this, location, onComplete, onAbort);
  }
};
VueRouter.prototype.replace = function (location, onComplete, onAbort) {
  if (onComplete === undefined && onAbort === undefined) {
    return originReplace
      .call(this, location, onComplete, onAbort)
      .catch(() => {});
  } else {
    originReplace.call(this, location, onComplete, onAbort);
  }
};

Footer 组件

image-20220608152337887

利用路由元信息 meta 配置和 v-show 控制 footer 组件的显示和隐藏在

{
  path: '/register',
  component: Register,
  meta: { // 需要隐藏footer的路由添加此配置
    isHideFooter: true
  }
},

{
  path: '/login',
  component: Login,
  meta: {
    isHideFooter: true
  }
},
//在组件上面添加<Footer v-show="!$route.meta.isHideFooter"/>

Home 组件

image-20220608152939577

子组件

image-20220608153006927

封装 ajax 请求模块

/* 
对axios进行二次包装
1. 配置通用的基础路径和超时
2. 显示请求进度条
3. 成功返回的数据不再是response, 而直接是响应体数据response.data
4. 统一处理请求错误, 具体请求也可以选择处理或不处理
*/
import axios from 'axios';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';

// 配置不显示右上角的旋转进度条, 只显示水平进度条
NProgress.configure({ showSpinner: false });

const service = axios.create({
  baseURL: '/api', // 基础路径
  timeout: 15000, // 连接请求超时时间
});

service.interceptors.request.use((config) => {
  // 显示请求中的水平进度条
  NProgress.start();

  // 必须返回配置对象
  return config;
});

service.interceptors.response.use(
  (response) => {
    // 隐藏进度条
    NProgress.done();
    // 返回响应体数据
    return response.data;
  },
  (error) => {
    // 隐藏进度条
    NProgress.done();

    // 统一处理一下错误
    alert(`请求出错: ${error.message || '未知错误'}`);

    // 后面可以选择不处理或处理
    return Promise.reject(error);
  }
);

export default service;

配置代理服务器

devServer: {
  proxy: {
    '/api': { // 只对请求路由以/api开头的请求进行代理转发
      target: 'http://182.92.128.115', // 转发的目标url
      changeOrigin: true // 支持跨域
    }
  }
},

使用 vuex 管理状态

由于项目体积比较大,向服务器发请求的接口过多,服务器返回的数据也会很多,如果还用以前的方式存储数据,导致 vuex 中的 state 数据格式比较复杂。采用 vuex 模块式管理数据。
Vuex 核心概念:state、actions、mutations、getters、modules

Mock/模拟数据接口

Mockjs: 用来拦截 ajax 请求, 生成随机数据返回

mock/mockServer.js

// 先引入mockjs模块

import Mock from 'mockjs';
//把JSON数据格式引入进来[JSON数据格式根本没有对外暴露,但是可以引入]
//webpack默认对外暴露的:图片、JSoN数据格式
import banner from './banner.json';
import floor from './floor.json';
//mock数据:第一个参数请求地址第二个参数:请求数据
Mock.mock('/mock/banner', { code: 200, data: banner }); //模拟首页大的轮播图的数据
Mock.mock('/mock/floor', { code: 200, data: floor });

api/ajaxMock.js

/* 
专门请求mock接口的axios封装
*/
import axios from 'axios';

const mockAjax = axios.create({
  baseURL: '/mock', // 路径前缀
  timeout: 10000, // 请求超时时间
});

mockAjax.interceptors.request.use((config) => {
  return config;
});

mockAjax.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    return Promise.reject(error);
  }
);

export default mockAjax;

api/index.js

import mockAjax from './mockAjax';

// 获取广告轮播列表
export const reqBanners = () => mockAjax.get('/banners');

// 获取首页楼层列表
export const reqFloors = () => mockAjax.get('/floors');

Search 路由

1.搜索查询条件参数理解与准备 2.组件动态数据显示 3.根据分类和关键字进行搜索 4.根据品牌进行搜索 5.根据属性进行搜索 6.排序搜索 7.自定义分页组件

image-20220608155022983

image-20220608155044667

Detail 路由

1)图片放大镜效果 2)小图轮播

image-20220608155212247

AddCartSuccess 路由

区别使用 sessionStorage 与 localStorage

image-20220608155413517

ShopCart 路由

1)用户临时 ID 的处理 2)购物车数据的管理(复杂) 3)不使用 v-model 监控用户输入
4)async / await / Promise.all() 的使用

image-20220608155635581

注册与登陆路由

1)注册/登陆请求后组件的响应处理 2)登陆后自动携带 token 数据

image-20220608155847993

image-20220608155904866

测试用的账号和密码:

账号:13700000000
密码:111111

导航和路由守卫

a.只有登陆了, 才能查看交易/支付/个人中心界面
b.只有没有登陆, 才能查看登陆界面
c.只有携带的 skuNum 以及 sessionStorage 中有 skuInfo 数据, 才能查看添加购物车成功的界面
d.只能从购物车界面, 才能跳转到交易界面
e.只能从交易界面, 才能跳转到支付界面
f.只有从支付界面, 才能跳转到支付成功的界面

订单与支付

1)提交订单 2)支付二维码 3)获取订单状态

image-20220609105837105

image-20220609105953404

image-20220609110004433

支付组件

image-20220609110322172

image-20220609110333949

支付成功组件

image-20220609110358429

我的订单组件

image-20220609110438770

图片懒加载

还没有加载得到目标图片时, 先显示 loading 图片
在进入可视范围才加载请求目标图片

路由懒加载

(1)当打包构建应用时,JS 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了
(2)本质就是 Vue 的异步组件在路由组件上的应用
需要使用动态 import 语法, 也就是 import()函数

前台表单校验

(1)项目中有一些如注册/登陆表单, 在提交请求前是需要进行表单输入数据校验的
(2)只有前台表单验证成功才会发请求
(3)如果校验失败, 以界面红色文本的形式提示, 而不是用 alert 的形式
(4)校验的时机, 除了点击提交时, 还有输入过程中实时进行校验

image-20220609110707175

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python异常捕获和处理语句 try-except-else-finally

目录 try-except-else-finally语句 1. 基本用法 2. 多个异常处理 3. 处理所有其他异常 4. 多个except子句 5. 使用else子句 6. 使用finally子句 7. 使用as关键字 实例 例1 例2 例3 例4 例5 例6 例7 例8 结论 try-except-finally语句 在Python中&#xff0c;try-e…

基于差分进化算法优化的Elman神经网络数据预测 - 附代码

基于差分进化算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于差分进化算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于差分进化优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

基于Springboot的摄影跟拍预定管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的摄影跟拍预定管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

前端框架中的状态管理(State Management)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Spring AOP—通知类型 和 切入点表达式 万字详解(通俗易懂)

目录 一、前言 二、AOP—快速入门 1.动态代理优化 : 2.问题分析 : 3.AOP—基本介绍 : 4.AOP—使用说明 : 5.AOP—入门案例 : 三、AOP—切入点表达式 1.基本说明 : 2.语法格式 : 3.注意事项 : 4.代码演示 : 四、AOP—切入点表达式的更多细节 1.JoinPoint : 1.1 简…

c语言-库函数qsort()初识

目录 前言一、qsort()的介绍及使用1.1 qsort()的介绍1.2 qsort()的使用1.2.1 使用qsort|()对整型数组按照升序排序1.2.2 使用qsort()对整型数组按照降序排序1.2.3 使用qsort()对结构体数组数据进行排序 二、利用冒泡排序模拟实现对任何数据进行排序2.1 冒泡排序2.2 模仿qsort()…

无锁队列 SPSC

无锁队列 SPSC Queuehttps://www.cnblogs.com/sinkinben/p/17949761/spsc-queue 在多线程编程中&#xff0c;一个著名的问题是生产者-消费者问题 (Producer Consumer Problem, PC Problem)。 对于这类问题&#xff0c;通过信号量加锁 (https://www.cnblogs.com/sinkinben/p/1…

06、Kafka ------ 各个功能的作用解释(ISR 同步副本、非同步副本、自动创建主题、修改主题、删除主题)

目录 CMAK 各个功能的作用解释★ ISR副本 (同步副本&#xff09;★ 非同步副本★ 自动创建主题★ 修改主题★ 删除主题 CMAK 各个功能的作用解释 ★ ISR副本 (同步副本&#xff09; 简单来说 &#xff0c;ISR 副本 就是 Kafka 认为与 领导者副本 同步的副本。 ISR&#xff0…

基于黄金正弦算法优化的Elman神经网络数据预测 - 附代码

基于黄金正弦算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于黄金正弦算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于黄金正弦优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

vue+nodejs微信小程序基于uniapp的学生宿舍打卡失物招领管理系统

基于微信的宿舍管理系统的设计基于现有的手机&#xff0c;可以实现等功能。方便用户对宿舍管理系统查看个人中心、失物招领管理、失物认领管理、晚归打卡管理、宿舍信息管理、宿舍更新管理、交流论坛、系统管理等功能模块的管理及详细的设计与统计分析。根据系统功能需求建立的…

JS手写apply,call,bind函数

本篇文章咱们来手写简易版的apply&#xff0c;call&#xff0c;bind函数。 实现思路 首先咱们需要思考下这三个函数放到哪里比较合适&#xff0c;因为这三个函数是被函数对象调用的&#xff0c;并且每个函数都可以调用&#xff0c;所以不难想到有一个位置非常合适&#xff0c;…

【每日论文阅读】生成模型篇

联邦多视图合成用于元宇宙 标题: Federated Multi-View Synthesizing for Metaverse 作者: Yiyu Guo; Zhijin Qin; Xiaoming Tao; Geoffrey Ye Li 摘要: 元宇宙有望提供沉浸式娱乐、教育和商务应用。然而&#xff0c;虚拟现实&#xff08;VR&#xff09;在无线网络上的传输是…

HNU-数据库系统-作业

数据库系统-作业 计科210X 甘晴void 202108010XXX 第一章作业 10.09 1.(名词解释)试述数据、数据库、数据库管理系统、数据库系统的概念。 数据&#xff0c;是描述事物的符号记录。 数据库&#xff08;DB&#xff09;&#xff0c;是长期存储在计算机内、有组织、可共享的大量…

windows安装nvm以及nvm常用命令

目录 1.什么是nvm以及为啥要用nvm 1.什么是nvm 2.为什么要用nvm 2.安装nvm 1. 下载 2. 安装 1.双击解压后的文件,nvm-setup.exe 2.同意 3.安装路径 4.下一步&#xff0c;这里有建议改成自己的文件夹&#xff0c;这个是用来存储通过nvm切换node后版本的存储路径 5.安装…

基础面试题整理2

1.抽象类与接口区别 语法&#xff1a; 抽象类用abstract定义&#xff1b;接口用interface定义抽象类被子类继承extends&#xff08;不可用final修饰&#xff09;&#xff1b;接口被类实现implements抽象类的属性访问无限制,方法不可用private修饰&#xff1b;接口中的方法只能…

DQL命令查询数据(三)

本课目标 掌握MySQL的多表查询 SQL语句的综合应用 多表连接查询 通过各个表之间共同列的关联性&#xff08;例如&#xff1a;外键&#xff09;来查询的 分类&#xff1a; 内连接(INNER JOIN) &#xff0c;可简写为 JOIN&#xff1b;左外连接(LEFT OUTER JOIN)&#xff0c;…

2023全球软件研发技术大会(SDCon2023)-核心PPT资料下载

一、峰会简介 本次峰会包含12大会议主题&#xff1a;云原生设施与平台、微服务架构实践、软件质量与效能、大数据实践与前沿、架构设计与演进、高可用与高性能架构、Web与大前端开发、编程语言与平台、AIGC与大模型、推荐系统实践、AI智能应用与研究、机器学习架构实践。 软件…

SpringCloud系列篇:核心组件之声明式HTTP客户端组件【远程消费】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一. 远程消费组件是什么 二. 远程消…

一个简单的KNN实现方法

对于许多离散问题&#xff0c;经过神经网络解决再通过softmax之后每一个值在[0,1]之间的连续变量&#xff0c;想要将其离散化&#xff0c;即离散化到每个元素都是 binary-variable&#xff0c;即 0-1 &#xff0c;这时可以用KNN方法&#xff0c;其实就是找到与这个向量的方差最…

JavaWeb——新闻管理系统(Jsp+Servlet)之jsp新闻修改

java-ee项目结构设计 1.dao:对数据库的访问&#xff0c;实现了增删改查 2.entity:定义了新闻、评论、用户三个实体&#xff0c;并设置对应实体的属性 3.filter&#xff1a;过滤器&#xff0c;设置字符编码都为utf8&#xff0c;防止乱码出现 4.service:业务逻辑处理 5.servlet:处…