Vue智慧商城项目

创建项目

vue组件库 — vant-ui(常用于移动端)

Vant 2 - 轻量、可靠的移动端组件库

安装vant

npm i vant@latest-v2 -S

引入组件

按需导入和全部导入

全部导入

整个组件库的所有组件都导进来,缺点是增加了代码包体积

main.js

import Vue from 'vue'

import Vant from 'vant'
import 'vant/lib/index.css'

//插件安装初始化:内部会将vant所有组件进行导入注册
Vue.use(Vant)

自动按需导入

安装插件:npm i babel-plugin-import -D  

-D:仅在开发过程中使用

--force 会无视冲突,并强制下载npm库资源,当有资源冲突时覆盖掉原先的版本

--legacy-peer-deps-告诉npm忽略项目中引入的 各个modules之间的相同modules 但不同版本的问题 并继续安装,保证各个引入的依赖之间对自身所使用的不同版本modules共存

babel.config.js中配置

main.js

测试使用

效果展示:

问题:按需导入的配置会很长

解决:抽离,专门封装到utils文件夹下的js文件里


项目中的vw适配

postcss 插件实现px到vw的自动转换

  • 安装插件

yarn add postcss-px-to-viewport@1.1.1 -D

  • 根目录新建postcss.config.js文件,填入配置
module.exports = {
    plugins: {
        'postcss-px-to-viewport': {
             //vw 适配的标准屏的宽度
             viewportWidth: 375
         }
    }
}

比如设计图拿的是750;2倍图调成1倍图375 => 适配375标准屏幕

                             640                             320 => 适配320标准屏幕;viewportWidth就要改成320


路由设计配置

怎么区分一级路由和二级路由:单个页面独立展示的是一级路由;带导航的,里面嵌的是二级路由

配置所有的一级路由

配置二级路由 

先实现底部的tabber
  • 在vant-ui.js中按需引入

  • layout.vue粘贴官方代码

  • 改文字
  • 改图标

  • 改颜色

 效果展示:

基于底部导航,完成二级路由的配置
  • 配置二级路由规则

  • 配置导航链接

  • 配置路由出口

一个小问题:网页默认访问 / ;我们给 / 添加一个重定向,重定向到home

效果展示:


登录页静态布局

头部的样式定制

按需导入

使用

通用样式覆盖 —— 所有页面左箭头变成灰黑色

上面那种写法等价于

或者改成

选择器权重问题

在 CSS 里面,如果有多个选择器作用在同一元素上面,那么会按照优先级顺序进行样式的选取;优先级越高,浏览器最终就显示哪种样式

举例说明:

下方静态结构

login/index.vue

<template>
  <div class="login">
    <!-- 头部 - vant当中的NavBar导航栏组件 -->
    <!-- left-arrow 左箭头  @click-left="$router.go(-1)" 返回上一页 -->
    <van-nav-bar title="会员登录" left-arrow @click-left="$router.go(-1)" />
    <!-- 主体 -->
    <div class="container">
      <div class="title">
        <h3>手机号登录</h3>
        <p>未注册的手机号登录后将自动注册</p>
      </div>

      <div class="form">
        <div class="form-item">
          <input class="inp" maxlength="11" placeholder="请输入手机号码" type="text">
        </div>
        <div class="form-item">
          <input class="inp" maxlength="5" placeholder="请输入图形验证码" type="text">
          <img src="@/assets/code.png" alt="">
        </div>
        <div class="form-item">
          <input class="inp" placeholder="请输入短信验证码" type="text">
          <button>获取验证码</button>
        </div>
      </div>

      <div class="login-btn">登录</div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'LoginPage'
}
</script>

<style lang="less" scoped>
.container {
  padding: 49px 29px;

  .title {
    margin-bottom: 20px;
    h3 {
      font-size: 26px;
      font-weight: normal;
    }
    p {
      // 网页中每行文字之间的距离
      line-height: 40px;
      font-size: 14px;
      color: #b8b8b8;
    }
  }

  .form-item {
    border-bottom: 1px solid #f3f1f2;
    padding: 8px;
    margin-bottom: 14px;
    display: flex;
    align-items: center;
    .inp {
      display: block;
      border: none;
      outline: none;
      height: 32px;
      font-size: 14px;
      flex: 1;
    }
    img {
      width: 94px;
      height: 31px;
    }
    button {
      height: 31px;
      border: none;
      font-size: 13px;
      color: #cea26a;
      background-color: transparent;
      padding-right: 9px;
    }
  }

  .login-btn {
    width: 100%;
    height: 42px;
    margin-top: 39px;
    background: linear-gradient(90deg,#ecb53c,#ff9211);
    color: #fff;
    border-radius: 39px;
    box-shadow: 0 10px 20px 0 rgba(0,0,0,.1);
    letter-spacing: 2px;
    display: flex;
    justify-content: center;
    align-items: center;
  }
}
</style>

效果展示:

request模块 — axios封装

目标:将axios请求方法,封装到request模块

接口文档:wiki - 智慧商城-实战项目

以获取图形验证码为例

  • 安装axios

yarn add axios

  • 新建request模块

utils/request.js

  • 创建axios实例

Axios 实例 | Axios中文文档 | Axios中文网

  • 配置导出实例

配置

什么是拦截器

在发请求和获取服务器响应数据的过程中,可以设置拦截器将请求或响应的数据流拦截下来,做相关操作以后再放行,有请求拦截器和响应拦截器两种

导出

  • 测试 

图片验证码功能

目标:基于请求回来的base64图片,实现图形验证码功能

将来在获取短信验证码的时候会用到 用户输入的图形验证码 和 请求响应回来的图形验证码key

需求:

  • 动态将请求回来(响应返回的)的base64图片,解析渲染出来

存在一个问题:每次刷新有一瞬间的图片损坏

图形验证码

 

因为一上来并没有默认给图片;改进:当picUrl有的时候才去加载图片

图形验证码改进

  • 点击验证码图片盒子,要刷新验证码 

封装图片验证码接口

目标:将请求封装成函数,统一放到API模块

好处:与页面逻辑分离;相同的请求在不同页面可以直接复用;请求进行了统一管理

步骤:

  • 在api文件中新建一个与登录相关的js请求模块

  • 封装请求函数

  • 页面中导入调用

Toast 轻提示

Vant 2 - 轻量、可靠的移动端组件库

使用场景:

在短信验证之前要输入手机号,那我们就要在短信验证之前加个校验,校验通过才发请求 —— 请输入正确的手机号

将来发送成功也要有个提示 —— 发送成功,请注意查收

步骤:

  • 注册安装

  • 两种使用方式:

导入调用(组件内index.vue 或 非组件内main.js都可使用)

效果展示:

通过this直接调用(必须在组件内)

本质是将方法注册挂载到了Vue原型上 Vue.prototype.$toast

扩展:

效果展示:

短信验证倒计时

步骤:

点击“获取验证码”,实现倒计时效果

  • 准备data数据

  • 给按钮注册点击事件

  • 开启倒计时

  • 离开页面 销毁定时器

倒计时之前进行校验处理(手机号校验、验证码校验)

  • 绑定数据

  • 在methods中把校验处理封装成一个方法

  • 请求倒计时前进行校验

封装短信验证请求接口,发送请求 添加提示

  • 封装接口 api/login.js

  • 调用接口,添加提示 

登录功能 

步骤:

  • 封装登录接口

  • 登录前的校验(手机号、图形验证码、短信验证码)

  • 调用方法,发送请求,成功添加提示并跳转

Vue实例中`this.$router.push(参数)`方法用来实现页面跳转操作

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

场景:图形验证码、短信验证码输入错误

响应拦截器是拿到数据的第一个数据流转站,可以在里面统一处理错误;只要不是200,就默认提示,抛出错误

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

灵途科技亮相2024世界传感器大会 分享光纤光源技术突破

12月1日至2日&#xff0c;2024世界传感器大会&#xff08;WSS&#xff09;在郑州国际会展中心隆重举办&#xff0c;泛自动驾驶领域光电感知专家灵途科技受邀参加“光纤传感器与激光雷达”分论坛&#xff0c;并在大会上带来《激光雷达用一体化光纤光源》专题演讲&#xff0c;同与…

【kotlin 】内联类(value class / inline class)

官方文档&#xff1a;https://kotlinlang.org/docs/inline-classes.html 注&#xff1a;inline class 关键字已经被废弃&#xff0c;取而代之的是value class。现在使用内联类需要定义类为value class&#xff0c;并使用JvmInline注解进行标注。 一、使用场景 有时候&#xff…

基于LSTM的A股股票价格预测系统(torch) :从数据获取到模型训练的完整实现

1. 项目简介 本文介绍了一个使用LSTM&#xff08;长短期记忆网络&#xff09;进行股票价格预测的完整系统。该系统使用Python实现&#xff0c;集成了数据获取、预处理、模型训练和预测等功能。 这个代码使用的是 LSTM (Long Short-Term Memory) 模型&#xff0c;这是一种特殊的…

【python自动化五】接口自动化基础--requests的使用

python的接口请求可以用requests库&#xff0c;这个介绍就不多说了&#xff0c;网上说得很详细。 接下来直接记录下如何使用&#xff08;当然也不限于自动化的使用&#xff09; 1.安装requests requests也需要安装一下 pip install requests2.requests请求 1.常用的请求方法…

【NLP 5、深度学习的基本原理】

目录 一、梯度下降算法 1.引例 —— 找极小值问题 目标&#xff1a; 方法&#xff1a; 2.梯度 例&#xff1a; 3.求解目标 为什么损失函数越小越好 4.梯度下降法 代码实现 5.细节问题 6.梯度爆炸和梯度消失 梯度爆炸 梯度消失 7.过拟合和欠拟合 欠拟合&#xff08;Underfitting…

DAY168内网对抗-基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建

知识点&#xff1a; 1、基石框架篇-单域架构-权限控制-用户和网络 2、基石框架篇-单域架构-环境搭建-准备和加入 3、基石框架篇-单域架构-信息收集-手工和工具 1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的资源&#xff0c;只要在“…

MATLAB 建筑顶面面积计算(95)

MATLAB 建筑顶面面积计算(95) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 根据给出的建筑顶面点云,计算建筑面积,具体的方法实现和结果如下: 二、算法实现 1.代码 代码如下(示例): % 从 PLY 文件读取点云数据 filename = D:\shuju\屋顶2.ply; % 替换为你的…

Mac M1 安装数据库

1. Docker下载 由于Sqlserver和达梦等数据库&#xff0c;不支持M系列的芯片&#xff0c;所以我们通过docker安装 下载并安装docker: https://www.docker.com/get-started/ 安装完成后&#xff0c;打开docker 2. SQL Server 安装 2.1 安装 打开终端&#xff0c;执行命令 doc…

二十(GIT3)、echarts(折线图、柱状图、饼图)、黑马就业数据平台(主页图表实现、闭包了解、学生信息渲染)

1. echarts 数据可视化&#xff1a;将数据转换为图形&#xff0c;数据特点更加突出 echarts&#xff1a;一个基于 JavaScript 的开源可视化图表库 echarts官网 1.1 echarts核心使用步骤 // 1. 基于准备好的dom&#xff0c;初始化echarts实例 const myChart echarts.init…

软考高级架构-9.4.4-双机热备技术 与 服务器集群技术

一、双机热备 1、特点&#xff1a; 软硬件结合&#xff1a;系统由两台服务器&#xff08;主机和备机&#xff09;、一个共享存储&#xff08;通常为磁盘阵列柜&#xff09;、以及双机热备软件&#xff08;提供心跳检测、故障转移和资源管理功能的核心软件&#xff09;组成。 …

【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤

&#x1f399;告诉你&#xff1a;Java是世界上最美好的语言 &#x1f48e;比较擅长的领域&#xff1a;前端开发 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持续下去的动力&#xff01; 目录 一. 作者有话说 …

Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https

目录 前言禁用HSTS禁止重定向到https关闭 HSTS 和设置 ssl-redirect 为 false 的区别 前言 客户请求经过ingress到服务后&#xff0c;默认加上了strict-transport-security&#xff0c;导致客户服务跨域请求失败&#xff0c;具体Response Headers信息如下&#xff1b; 分析 n…

小程序入门学习(八)之页面事件

一、下拉刷新新事件 1. 什么是下拉刷新 下拉刷新是移动端的专有名词&#xff0c;指的是通过手指在屏幕上的下拉滑动操作&#xff0c;从而重新加载页面数据的行为。 2. 启用下拉刷新 启用下拉刷新有两种方式&#xff1a; 全局开启下拉刷新&#xff1a;在 app.json 的 window…

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…

[Linux]文件属性和权限

目录 一.Linux文件的属性二.Linux用户权限分类三.文件权限的查询与修改1.修改用户的权限1).一般法2).8进制法 2.修改所属组和所属者3.如何在创建文件时权限预分配 在学习linux的时候&#xff0c;我们用ll命令显示文件的详情信息&#xff0c;难免会发现文件名前面会有一大堆其它…

ElK 8 收集 MySQL 慢查询日志并通过 ElastAlert2 告警至飞书

文章目录 1. 说明2. 启个 mysql3. 设置慢查询4. filebeat 设置5. 触发慢查询6. MySQL 告警至飞书 1. 说明 elk 版本&#xff1a;8.15.0 2. 启个 mysql docker-compose.yml 中 mysql&#xff1a; mysql:# restart: alwaysimage: mysql:8.0.27# ports:# - "3306:3306&q…

springSecurity权限控制

权限控制&#xff1a;不同的用户可以使用不同的功能。 我们不能在前端判断用户权限来控制显示哪些按钮&#xff0c;因为这样&#xff0c;有人会获取该功能对应的接口&#xff0c;就不需要通过前端&#xff0c;直接发送请求实现功能了。所以需要在后端进行权限判断。&#xff0…

力扣打卡9:重排链表

链接&#xff1a;143. 重排链表 - 力扣&#xff08;LeetCode&#xff09; 这是一道操作链表的题。按照要求&#xff0c;我们可以将解题的步骤分成三步。 1.找链表中间结点&#xff08;我使用了快慢指针寻找&#xff09;&#xff0c;并断开。 2.现在有2链表&#xff0c;将后段…

计算机键盘的演变 | 键盘键名称及其功能 | 键盘指法

注&#xff1a;本篇为 “键盘的演变及其功能” 相关几篇文章合辑。 英文部分机翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 键盘的演变&#xff1a;从打字机到技术奇迹 Introduction 介绍 The keyboard has journeyed from a humble mechanical…

【Appium报错】安装uiautomator2失败

目录 1、通过nmp安装uiautomator2&#xff1a;失败 2、通过 Appium 的平台直接安装驱动程序 3、通过pip 来安装 uiautomator2 1、通过nmp安装uiautomator2&#xff1a;失败 我先是通过npm安装的uiautomator2&#xff0c;也显示已经安装成功了&#xff1a; npm install -g …