vue尚品汇商城项目-day05【30.登录与注册静态组件(处理公共图片资源问题)+31.注册的业务+登录业务】

在这里插入图片描述

30.登录与注册静态组件(处理公共图片资源问题)

  • 登录与注册的静态组件
  • assets文件夹:一般也是放置静态资源(一般放置多个组件共用的静态资源),需要注意,放在assets文件夹里的静态资源,在webpack打包时,会把此静态资源当作一个模块,打包到JS文件中。
  • 在CSS样式中也可以使用@符号【src别名】,切记在前面加上~

修改代码:

在assets/新建images/文件夹,并把共用图片icons.png放在里面;

同时删除src/pages/Home/ListContainer/images路径下的icons.png图片

src/pages/Login/index.vue

background: url(~@/assets/images/icons.png) no-repeat -10px -201px;

src/pages/Home/ListContainer/index.vue

background-image: url(~@/assets/images/icons.png);

注意点1:把共用的图片icons.png放在目录下assets/images/,在CSS中使用时写成~@/xxx/icons.png,即可使用。

31.注册的业务

重难点说明

  1. 注册/登陆请求后组件的响应处理
  1. 登陆后自动携带token数据
  • 注册业务|登录业务中表单验证先不处理【最后一天统一处理】
  • 获取验证码的接口
  • 注册—通过数据库存储用户信息(名字、密码)

修改代码:

src/api/index.js

//获取验证码
//URL:/api/user/passport/sendCode/{phone}  method:get
export const getCode = (phone)=>requests({url:`/user/passport/sendCode/${phone}`,method:'get'});
//注册
//url:/api/user/passport/register  method:post    phone code password
export const registerUser = (params)=>requests({url: `/user/passport/register`,method: 'post', data: params});

src/store/index.js

把注册js和登录js合并到一起,统一叫用户模块业务

src/store/loginAndRegister/index.js

import {getCode, registerUser} from "@/api";

//Login+register模块的小仓库
//actions代表一系列动作,可以书写自己的业务逻辑,也可以处理异步
const actions = {
    //获取验证码
    async getCode({commit}, phone) {
        let response = await getCode(phone);
        console.log("******获取验证码-response:{}", response);
        if (response.code == 200) {
            commit('GET_CODE', response.data);
            //返回的是成功的标记
            return "OK";
        } else {
            //返回的是失败的标记
            return Promise.reject(new Error("fail"))
        }
    },
    //用户注册
    async registerUser({commit}, data) {
        let response = await registerUser(data);
        console.log("******注册用户-response:{}", response);

        if (response.code == 200) {
            //返回的是成功的标记
            return "OK";
        } else {
            //返回的是失败的标记
            return Promise.reject(new Error("fail"))
        }
    },
}
//mutations代表维护,操作维护的是state中的数据,且state中数据只能在mutations中处理
const mutations = {
    GET_CODE(state, code) {
        state.code = code;
    }
}
//state代表仓库中的数据
const state = {
    code: ''
}
//getters理解为计算属性,用于简化仓库数据,让组件获取仓库的数据更加方便
const getters = {}

//创建并暴露store
export default {
    actions,
    mutations,
    state,
    getters
}

src/pages/Register/index.vue

<input type="text" placeholder="请输入你的手机号" v-model="phone">
<button style="width: 100px; height: 38px" @click="getCode">获取验证码</button>
<input type="password" placeholder="请输入你的登录密码" v-model="password">
<input type="password" placeholder="请输入确认密码" v-model="passwordConfirm">
<input name="m1" type="checkbox" v-model="checkedAgreement">

data() {
      return {
        // 收集表单数据--手机号
        phone: '',
        //验证码
        code: '',
        //密码
        password: '',
        //确认密码
        passwordConfirm: '',
        //是否同意
        checkedAgreement: true,
      }
    },
    methods: {
      //获取验证码
      async getCode() {
        try {
          //成功
          //如果获取到验证码
          const {phone} = this;
          phone && await this.$store.dispatch('getCode', phone);
          //将组件的code属性值变为仓库中验证码[验证码直接自己填写了]
          this.code = this.$store.state.user.code;
        } catch (error) {
          //失败
          alert(error.message)
        }
      },
      //用户注册
      async registerUser() {
        try {
           //成功
          //全部表单验证成功,在向服务器发请求,进行祖册
          //只要有一个表单没有成功,不会发请求
          const {phone, code, password, passwordConfirm} = this
          phone && code && password==passwordConfirm && await this.$store.dispatch('registerUser', {phone, password, code})
          //注册成功进行路由的跳转
          this.$router.push('/login')
        } catch (error) {
           //失败
           alert(error.message)
        }
      },
    },

32.登录业务

  • 登录—登陆成功的时候,后台为了区分你这个用户是谁-服务器下发token【令牌:唯一标识符】

修改代码:

src/api/index.js

//登录
//URL:/api/user/passport/login  method:post phone password
export const reqUserLogin = (data)=>requests({url:'/user/passport/login',data,method:'post'});

src/store/loginAndRegister/index.js

import {reqUserLogin} from "@/api";

//用户登录
async reqUserLogin({commit}, data) {
        let response = await reqUserLogin(data);
        console.log("******登录用户-response:{}", response);
        //服务器下发token,用户唯一标识符(uuid)
        //将来经常通过带token找服务器要用户信息进行展示
        if (response.code == 200) {
            //用户已经登录成功且获取到token
            commit('REQ_USER_LOGIN', response.data.token);
            //返回的是成功的标记
            return "OK";
        } else {
            //返回的是失败的标记
            return Promise.reject(new Error(response.message))
        }
    },
    
REQ_USER_LOGIN(state, token) {
        state.token = token;
    },  
    
 token: '',    

src/pages/Login/index.vue

<button class="btn" @click.prevent="reqUserLogin">登&nbsp;&nbsp;录</button>

methods: {
      //登录的回调函数
      async reqUserLogin() {
        try {
           //成功
          const {phone, password} = this;
          phone && password && await this.$store.dispatch('reqUserLogin',{phone, password});
          this.$router.push("/home");
        } catch (error) {
           //失败
           alert(error.message)
        }
      }
    }

注意点1:vuex存储的数据不是持久化的,一刷新页面就没了。

注意点2:登录接口会返回一个token令牌,这个是后端生成的,跟咱之前前端生成的uuid不一样。

注意点3:给登录按钮绑定事件时,要清除form上面的action条件以及默认跳转,否则会出现哪怕登录失败后也会跳转页面到首页的场景

<form action="##">  改为 <form>
<button class="btn" @click.prevent="reqUserLogin">登&nbsp;&nbsp;录</button>

本人其他相关文章链接

1.vue尚品汇商城项目-day05【30.登录与注册静态组件(处理公共图片资源问题)+31.注册的业务+登录业务】
2.vue尚品汇商城项目-day05【33.token令牌理解+34.用户登录携带token获取用户信息+35.退出登录】
3.vue尚品汇商城项目-day05【36.导航守卫理解】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘大猫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值