黑马智慧商城项目学习笔记

目录

  • 智慧商城项目
    • 创建项目
    • 调整初始化目录
    • vant组件库
      • vant按需导入和全部导入
    • 项目中的vw适配
    • 路由设计配置
    • 登录页静态布局
    • 图形验证码功能
      • request模块-axios封装
      • api模块-封装图片验证码接口
    • Toast轻提示(vant组件)
    • 短信验证倒计时功能
    • 登录功能
    • 响应拦截器统一处理错误提示
    • 登陆权证信息存储
    • storage存储模块-vuex持久化处理
    • 添加loading效果
    • 页面访问拦截
    • 首页-静态结构准备&动态渲染
    • 搜索-历史记录管理
    • 搜索列表-静态布局&渲染
    • 商品详情-静态布局&渲染
    • 加入购物车-弹层显示
    • 加入购物车-数字框基本封装

智慧商城项目

  • 业务功能流程
    在这里插入图片描述

  • 核心业务技术点
    在这里插入图片描述

创建项目

基于VueCLi自定义创建项目架子
在这里插入图片描述

调整初始化目录

  1. 删除多余文件
  2. 修改路由配置和App.vue
  3. 新增两个目录 api/utils
  4. api接口模块:发送axios请求的接口模块
  5. utils工具模块:自己封装的一些工具方法模块

vant组件库

Vue的组件库不是唯一的,一般会按照不同平台进行分类:

  1. PC端:element-ui(element-plus)、ant-design-vue
  2. 移动端:vant-ui、Mint UI(饿了么)、Cube UI(滴滴)
  • 安装
    1. vue3安装:npm i vant -S
    2. vue2安装:npm i vant@latest-v2 -Syarn add vant@latest-v2 -S

vant按需导入和全部导入

  1. 全部导入:引入所有组件会增加代码包体积,性能低,不推荐
    ① 安装vant-ui: yarn add vant@latest-v2 -S
    ② main.js中注册:
    import Vue from 'vue'
    import Vant from 'vant'
    import 'vant/lib/index.css'Vue.use(Vant)
    
    ③ 使用测试:<van-button type="primary">主要按钮</van-button>
  2. 按需导入:性能高,推荐自动按需导入
    1. 安装vant-ui: yarn add vant@latest-v2 -S
    2. 安装插件npm i babel-plugin-import -D,如果有依赖项冲突,则用npm i babel-plugin-import -D --legacy-peer-deps
    3. 配置babel.config.js文件:
    module.exports = {plugins: [['import', {libraryName: 'vant',libraryDirectory: 'es',style: true}, 'vant']]
    };
    
    1. main.js中按需导入eg:import '@/utils/vant-ui'
    2. 测试使用
    3. 提取按需导入部分到utils/vant-ui.js中,然后main.js导入
      eg:
    import { Toast } from 'vant'
    Vue.use(Toast)
    

项目中的vw适配

基于postcss插件实现项目vw适配

  1. 安装插件yarn add postcss-px-to-viewport@1.1.1 -D
  2. 根目录新建postcss.config.js文件并配置
module.exports = {plugins: {'postcss-px-to-viewport': {viewportWidth: 375,},},
};

路由设计配置

  1. 分析项目页面,设计路由,配置一级路由
    只要是单个页面独立展示的都是一级路由
    在这里插入图片描述

  2. 使用vant组件库,实现底部导航tabbar

    1. vant-ui.js按需导入
    2. layout.vue粘贴官方代码
    3. 修改文字、图标、颜色
      在这里插入图片描述
  3. 二级路由设置

    1. 配置二级路由(规则&组件)
    2. 配置导航链接:给首页底部导航组件添加route属性,用to配置跳转链接
    3. 配置路由出口

登录页静态布局

  1. 新建styles/common.less重置默认样式
  2. main.js导入common.less
  3. 拷贝图片素材
  4. 使用vant头部组件nav-bar
  5. 通用样式覆盖
  6. 其他静态结构编写

图形验证码功能

request模块-axios封装

将axios请求方法封装到utils/request模块
使用axios来请求后端接口,一般都会对axios进行一些配置(eg:配置基础地址,请求响应拦截器),所以项目开发中,都会对axios进行基本的二次封装,单独封装到一个request模块中,便于维护和使用

  • 步骤:
    1. 安装axios
    2. 新建request模块
    3. 创建实例&配置(基地址和请求响应拦截器),导出实例
    4. 测试使用
    5. 动态将请求回来的base64图片,解析渲染出来
    6. 点击验证码盒子,刷新验证码

api模块-封装图片验证码接口

将请求封装成方法,统一存放到api模块,与页面分离

  • 好处: ① 请求代码复用 ② 统一管理请求 ③ 请求与页面逻辑分离
  • 步骤:
    1. 新建请求模块
    2. 封装请求函数
    3. 页面中导入调用

Toast轻提示(vant组件)

Toast可以完成普通的文字提示,也可以完成加载、成功、失败提示

  1. 注册安装(utils/vant-ui.js)
import { Toast } from 'vant'
Vue.use(Toast)
  1. 两种使用方法
    1. 导入调用:组件内和非组件内均可
    import { Toast } from 'vant'
    Toast('提示内容')
    
    1. 通过this直接调用:只能在组件内
      本质:将方法注册挂载到了Vue原型上Vue.prototype.$toast=xxx
      this.toast('提示内容')
  • 加载提示
<!-- 使用 Toast.loading 方法展示加载提示,通过 forbidClick 属性可以禁用背景点击 -->
Toast.loading({message: '加载中...',forbidClick: true,
});
  • 成功/失败提示
Toast.success('成功文案');
Toast.fail('失败文案');

短信验证倒计时功能

  1. 点击按钮,实现倒计时效果
    1. 准备data数据
    2. 给按钮注册点击事件
    3. 开启倒计时
    4. destroyed清除定时器
  2. 倒计时之前的校验处理(手机号、验证码)
    1. 准备data数据,双向绑定
    2. 封装校验方法
    3. 倒计时前校验
  3. 封装短信验证请求接口,发送请求添加提示
    1. 封装接口
    2. 调用

登录功能

封装api登录接口,实现登录功能

  1. 阅读接口文档,封装登录接口
  2. 登录校验(手机号、图形验证码、短信验证码)
  3. 调用方法发送请求

响应拦截器统一处理错误提示

问题:每次请求都可能有错误,就都需要错误提示
说明:响应拦截器是拿到数据的第一个数据流转战,可以在里面统一处理错误
只要状态码不是200,就给默认提示抛出错误

登陆权证信息存储

在这里插入图片描述

vuex构建user模块存储登录权证(token&userId)

  • 说明:① token存入vuex的好处:易获取响应式 ② vuex需要分模块 => user模块
  • 步骤
    1. 构建user模块
    2. 挂载到vuex
    3. 提供mutations
    4. 页面中commit调用

storage存储模块-vuex持久化处理

封装storage存储模块,利用本地存储,进行vuex持久化处理

添加loading效果

  • 好处:
    ① 节流处理:防止用户在一次请求还没回来之前,进行多次点击,发送无效请求
    ② 友好提示:告知用户,目前是在加载中,请耐心等待,用户体验会更好
  • 实操步骤:
    1. 请求拦截器中,每次请求,打开loading
    2. 响应拦截器中,每次响应,关闭loading

页面访问拦截

基于全局前置守卫,进行页面访问拦截处理

  • 路由导航守卫-全局前置守卫

    1. 所有的路由一旦被匹配到,都会先经过全局前置守卫
    2. 所有全局前置守卫放行,才会真正解析渲染组件,看到页面内容
      访问权限页面时,拦截或放行的关键点:用户是否有登录权证token
      在这里插入图片描述
  • 语法:

    <!-- 在router/index.js中 -->
    router.beforeEach((to, from, next) => {
    })
    
  • 参数:

    1. to:到哪去的路由信息对象
    2. from:从哪来的路由信息对象
    3. next表示是否放行:next() 调用就是放行、next(路径) 是拦截到某个路径页面

首页-静态结构准备&动态渲染

  1. 准备静态结构
  2. 封装接口
  3. 页面调用
  4. 动态渲染

搜索-历史记录管理

构建搜索页的静态布局,完成历史记录的管理

  • 需求
    1. 搜索历史渲染
    2. 点击搜索(添加历史)
      点击搜索按钮或底下的历史记录,都能进行搜索
      1. 若之前没有相同搜索关键字,直接追加到前面
      2. 若之前已有相同关键字,就将原有关键字移除再追加
    3. 清空历史:添加清空图标,清空历史记录
    4. 持久化:搜索历史需要持久化,刷新历史不丢失

搜索列表-静态布局&渲染

实现搜索列表页静态结构,封装接口,完成搜索列表页的渲染
静态接口=>封装接口=>查询参数获取参数query=>获取数据,渲染

商品详情-静态布局&渲染

实现商品详情页静态结构,封装接口,完成商品详情页的渲染
静态接口=>封装接口=>动态获取参数=>获取数据,渲染

加入购物车-弹层显示

加入购物车-数字框基本封装

  1. 静态结构
  2. 数字框的数字,从外部传递过来的(父传子
  3. 点击±号,修改数字(子传父
  4. 使用v-model实现封装(:value和@input的简写)
  5. 数字不能减到1

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

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

相关文章

MySQL中将一个字符串字段按层级树状展开

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 需求1.分析2.实现3.思路刨析表结构和数据 需求 数据库中有个字段如下 如何将其转换为如下形式&#xff1a; 1.分析 1.他的层级个数是不确定的&#xff0c;也就是说有的有2层有的有5…

IDEA优雅debug

目录 引言一、断点分类&#x1f384;1.1 行断点1.2 方法断点1.3 属性断点1.4 异常断点1.5 条件断点1.6 源断点1.7 多线程断点1.8 Stream断点 二、调试动作✨三、Debug高级技巧&#x1f389;3.1 watch3.2 设置变量3.3 异常抛出3.4 监控JVM堆大小3.5 数组过滤和筛选 引言 使用ID…

springboot基于Web足球青训俱乐部管理后台系统开发(代码+数据库+LW)

摘 要 随着社会经济的快速发展&#xff0c;人们对足球俱乐部的需求日益增加&#xff0c;加快了足球健身俱乐部的发展&#xff0c;足球俱乐部管理工作日益繁忙&#xff0c;传统的管理方式已经无法满足足球俱乐部管理需求&#xff0c;因此&#xff0c;为了提高足球俱乐部管理效率…

STM32保护内部FLASH

在实际发布的产品中&#xff0c;在STM32芯片的内部FLASH存储了控制程序&#xff0c;如果不作任何保护措施的话&#xff0c;可以使用下载器直接把内部FLASH的内容读取回来&#xff0c;得到bin或hex文件格式的代码拷贝&#xff0c;别有用心的厂商即可利用该代码文件山寨产品。为此…

树的直径计算:算法详解与实现

树的直径计算:算法详解与实现 1. 引言2. 算法概述3. 伪代码实现4. C语言实现5. 算法分析6. 结论在图论中,树的直径是一个关键概念,它表示树中任意两点间最长路径的长度。对于给定的树T=(V,E),其中V是顶点集,E是边集,树的直径定义为所有顶点对(u,v)之间最短路径的最大值。…

无人机场景 - 目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;无人机场景车辆检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如无人机场景城市道路行驶车辆图片、无人机场景城市道边停车车辆图片、无人机场景停车场车辆图片、无人机场景小区车辆图片、无人机场景车辆遮挡、车…

爬虫——Requests库的使用

在爬虫开发中&#xff0c;HTTP请求是与服务器进行交互的关键操作。通过发送HTTP请求&#xff0c;爬虫可以获取目标网页或接口的数据&#xff0c;而有效地处理请求和响应是爬虫能够高效且稳定运行的基础。Requests库作为Python中最常用的HTTP请求库&#xff0c;因其简洁、易用和…

基于python Django的boss直聘数据采集与分析预测系统,爬虫可以在线采集,实时动态显示爬取数据,预测基于技能匹配的预测模型

本系统是基于Python Django框架构建的“Boss直聘”数据采集与分析预测系统&#xff0c;旨在通过技能匹配的方式对招聘信息进行分析与预测&#xff0c;帮助求职者根据自身技能找到最合适的职位&#xff0c;同时为招聘方提供更精准的候选人推荐。系统的核心预测模型基于职位需求技…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

杰控通过 OPCproxy 获取数据发送到服务器

把数据从 杰控 取出来发到服务器 前提你在杰控中已经有变量了&#xff08;wincc 也适用&#xff09; 打开你的opcproxy 软件包 opcvarFile 添加变量 写文件就写到 了 opcproxy.ini中 这个文件里就是会读取到的数据 然后 opcproxy.exe发送到桌面快捷方式再考回来 &#…

Ubuntu 的 ROS 操作系统 turtlebot3 导航仿真

引言 导航仿真是机器人自动化系统中不可或缺的一部分&#xff0c;能够帮助开发者在虚拟环境中测试机器人在复杂场景下的运动与路径规划。 在 Gazebo 仿真环境中&#xff0c;TurtleBot3 配合 ROS 操作系统提供了强大的导航功能。在进行导航仿真时&#xff0c;首先需要准备地图&…

Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构

目录 一、Python Web框架要点二、Django流程2.1 Django介绍2.1.1 简介2.1.2 特点2.1.3 MVT模式2.1.4 Django新特性2.1.5 Django学习资料 2.2 搭建Django框架开发环境2.2.1 安装Python语言环境2.2.2 安装Django框架 2.3 创建Django项目2.4 Pycharm创建项目2.5 初试Django52.5.1 …

Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】

下面是项目级完整配置1➡eslint&#xff1a;【吐血分享&#xff0c;博主踩过的坑你跳过去&#xff01;&#xff01;跳不过去&#xff1f;太过分了给博主打钱】 浏览器自动打开项目&#xff1a; 你想释放双手吗&#xff1f;你想每天早上打开电脑运行完项目自动在浏览器打开吗&a…

【流量分析】常见webshell流量分析

免责声明&#xff1a;本文仅作分享&#xff01; 对于常见的webshell工具&#xff0c;就要知攻善防&#xff1b;后门脚本的执行导致webshell的连接&#xff0c;对于默认的脚本要了解&#xff0c;才能更清晰&#xff0c;更方便应对。 &#xff08;这里仅针对部分后门代码进行流量…

【MQTT.fx 客户端接入 阿里云平台信息配置】

1、打开界面&#xff0c;点击如下图⚙图标 2、点击左下角➕&#xff0c;添加新的配置&#xff0c;Profile Name 同阿里云平台设备名。 3、打开已经配置好的阿里云平台&#xff0c;进入设备信息界面&#xff0c;点击“MQTT连接参数”&#xff0c; 4、其他参数&#xff0c;对…

抽象java入门1.5.3.1——类的进阶

前言&#xff1a;在研究神技代码Hello word的时候&#xff0c;发现了一个重大公式bug&#xff0c;在代码溯源中&#xff0c;我发现了一个奇怪的东西&#xff0c;就是OUT不是类中类&#xff08;不是常规类的写法&#xff09; 内容总结&#xff1a; 代码运行的顺序复习 正片开始…

vue2+3 —— Day5/6

自定义指令 自定义指令 需求&#xff1a;当页面加载时&#xff0c;让元素获取焦点&#xff08;一进页面&#xff0c;输入框就获取焦点&#xff09; 常规操作&#xff1a;操作dom “dom元素.focus()” 获取dom元素还要用ref 和 $refs <input ref"inp" type&quo…

JAVA-链表

1.链表的概念及结构 链表是一种物理存储结构上非连续存储结构(逻辑上连续)&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 注意&#xff1a; 根据上图可看出&#xff0c;链表是在逻辑结构连续的&#xff0c;但是在物理结构上不一定现实中的结点一般都是通…

RTSP播放器EasyPlayer.js播放器UniApp或者内嵌其他App里面webview需要截图下载

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…

DB Type

P位 p 1时段描述符有效&#xff0c;p 0时段描述符无效 Base Base被分成了三个部分&#xff0c;按照实际拼接即可 G位 如果G 0 说明描述符中Limit的单位是字节&#xff0c;如果是G 1 &#xff0c;那么limit的描述的单位是页也就是4kb S位 S 1 表示代码段或者数据段描…