Vue 登录模块之记住密码步骤分解

登录模块结构代码

<template>
  <div class="user-login">
    <!-- 登录页 -->
    <div class="user-login-form">
      <h2>
        <span>登录</span>
      </h2>
      <el-form :model="form" :rules="rules" ref="form" class="user-login-content">
        <el-form-item prop="userId">
          <el-input type="number" :maxlength="11" placeholder="请输入手机号码" v-model="form.userId"></el-input>
        </el-form-item>
        <el-form-item prop="password">
          <el-input type="password" placeholder="请输入密码" v-model="form.password" @keyup.enter.native="doLogin"></el-input>
        </el-form-item>
        <el-checkbox v-model="checked" @change="rememberPassword">记住密码</el-checkbox>
        <el-form-item>
          <el-button type="primary" @click="handleSubmit('form')" class="user-login-button" :loading="loading">登 录</el-button>
        </el-form-item>
        <div class="forget-password">
          <router-link to="/user/forgetPassword">忘记密码</router-link>
          <router-link to="/user/register">立即注册&gt;</router-link>
        </div>
      </el-form>
    </div>
  </div>
</template>

common.js 定义全局公共方法

/**
 * 设置cookie
 * @description < 登录时,写入cookie >
 */

export function setCookie (name, value, expiremMinutes) {
  let exDate = new Date();
  exDate.setTime(exDate.getTime() + expiremMinutes * 60 * 1000);
  document.cookie = name + '=' + escape(value) + ((expiremMinutes == null) ? '' : ';expires=' + exDate.toGMTString());
}

/**
 * 读取cookie
 * @description < 点击保存密码时,读取cookie >
 */
export function getCookie (name) {
  if (document.cookie.length > 0) {
    let start = document.cookie.indexOf(name + '=');
    if (start !== -1) {
      start = start + name.length + 1;
      let end = document.cookie.indexOf(';', start);
      if (end === -1) {
        end = document.cookie.length;
        return unescape(document.cookie.substring(start, end));
      }
    }
  }
  return '';
}

/**
 * 删除cookie
 * @description < 未点击保存密码时,删除cookie >
 */
export function delCookie (name) {
  let exp = new Date();
  exp.setTime(exp.getTime() - 1);
  var cval = getCookie(name);
  if (cval != null) {
    document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString();
  }
}

登录JS逻辑代码

<script>
  import {mapActions} from 'vuex';
  import {ACC_INFO} from '../../store/mutation-types';
  import CONFIG from '../../js/configs';
  import SERVER from '../../js/servers';
  import {communicate} from '../../js/communication';
  import {setCookie, delCookie, getCookie} from '../../js/common';
  // import routes from '@/router/shop';
  export default {
    data () {
      return {
        form: {
          userId: '',
          password: ''
        },
        loading: false,
        checked: false,
        rules: {
          userId: [
            {required: true, pattern: CONFIG.MOBILE_REGEXP, message: '请输入正确的手机号码', trigger: 'blur'}
          ],
          password: [
            {required: true, message: '请输入登录密码', trigger: 'blur'}
          ]
        }
      };
    },
    methods: {
      ...mapActions([ACC_INFO]),
      handleSubmit (formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            let form = this.form;
            let params = {
              username: form.userId,
              password: form.password
            };
            // 记住密码
            let rememberStatus = this.checked;
            let userInfo = params.username + '&' + params.password;
            communicate.call(this, {
              url: SERVER.LOGIN.LOG,
              params,
              method: 'post',
              sucFn: (res) => {
                let accountInfo = {
                  name: res.data.name,
                  userId: res.data.userId,
                  userName: form.userId
                };
                this[ACC_INFO]({...accountInfo});
                // 勾选记住密码,保存到Cookie中
                if (rememberStatus) {
                  setCookie('userInfo', userInfo, 1440 * 3);
                } else {
                  delCookie('userInfo');
                }
                this.$router.push('/user/guidance');
              },
              errFn: (data) => {
                this.$message({
                  message: (data && data.message) || '获取数据失败!',
                  type: 'error'
                });
                this.loading = false;
              }
            });
          }
        });
      },
      // 回车登录事件
      doLogin () {
        this.handleSubmit('form');
      },
      // 记住密码
      rememberPassword () {
        console.log(this.checked);
      },
      loadUserInfo () {
        let userInfo = getCookie('userInfo');
        if (!!userInfo === true) {
          let userName = '';
          let passWord = '';
          let index = userInfo.indexOf('&');
          userName = userInfo.substring(0, index);
          passWord = userInfo.substring(index + 1);
          this.form.userId = userName;
          this.form.password = passWord;
          this.checked = true;
        }
      }
    },
    mounted () {
      this.loadUserInfo();
    }
  };
</script>
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值