两种方式
1.vuex方法写(复杂)
2.直接methods中写(简单)
下载依赖包
npm i crypto-js -S
第一种 (复杂)
Html
<div class="userFrom" v-if="!isSwitch">
<el-input placeholder="用户名/手机/邮箱" v-model.trim="user.username" @keyup.enter.native="sigIn" class="user">
<i slot="prefix" class="glyphicon glyphicon-user"></i>
</el-input>
<span v-show="usernameError" class="usernameSpan">* 请输入用户名</span>
<el-input type="password" placeholder="请输入密码" v-model.trim="user.password" @keyup.enter.native="sigIn" class="password">
<i slot="prefix" class="glyphicon glyphicon-lock"></i>
<!-- <i slot="suffix" class="iconfont iconyanjing" @click="handleIconClick"></i> -->
</el-input>
<span v-show="passwordError" class="passwordSpan">* 请输入密码</span>
<el-checkbox v-model="user.checked">记住密码</el-checkbox>
<el-button type="primary" class="login-button" @click="sigIn">登录</el-button>
</div>
<div class="login-pass"><router-link to="/resetPassword" tag="span">忘记密码?</router-link></div>
vuex state模块
const state = {
user:{
username:'',
password:'',
checked:false,
setDate:7,
},
}
vuex mutation模块
import CryptoJS from "crypto-js";
clearUser(state,data){
state.user.username=''
state.user.password = ''
},
//设置cookie
setCookie(state,data) {
var cipherPsw = CryptoJS.AES.encrypt(data.password,'secretkey').toString();
var exdate = new Date(); //获取时间
exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * data.setDate); //保存的天数
//字符串拼接cookie
window.document.cookie = "userName" + "=" + data.username + ";path=/;expires=" + exdate.toGMTString();
window.document.cookie = "userPwd" + "=" + cipherPsw + ";path=/;expires=" + exdate.toGMTString();
},
//读取cookie
getCookie(state,data) {
if (document.cookie.length > 0) {
var arr = document.cookie.split('; '); //这里显示的格式需要切割一下自己可输出看下
for (var i = 0; i < arr.length; i++) {
var arr2 = arr[i].split('='); //再次切割
//判断查找相对应的值
if (arr2[0] == 'userName') {
state.user.username = arr2[1]; //保存到保存数据的地方
state.user.checked=true
} else if (arr2[0] == 'userPwd') {
var bytes = CryptoJS.AES.decrypt(arr2[1],'secretkey');
state.user.password = bytes.toString(CryptoJS.enc.Utf8);;
}
}
}
},
vuex action模块
//获取登录个人信息
async loginInfoA ({commit,state, dispatch}) {
await axios.post(接口)
.then(response => {
//登录成功之后
//判断复选框是否被勾选 勾选则调用配置cookie方法
if (state.user.checked == true) {
//传入账号名,密码,和保存天数3个参数
commit('setCookie',state.user)
}else {
//清空Cookie
commit('setCookie',{password: "",username: "",setDate:-1})
commit('clearUser')
}
});
},
第二种(简单)
HTML
<div class="ms-login">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="0px" class="demo-ruleForm">
<el-form-item prop="username">
<el-input v-model="ruleForm.username" placeholder="用户名"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input type="password" placeholder="密码" v-model="ruleForm.password" @keyup.enter.native="submitForm('ruleForm')"></el-input>
</el-form-item>
<!-- `checked` 为 true 或 false -->
<el-checkbox v-model="checked">记住密码</el-checkbox>
<br>
<br>
<div class="login-btn">
<el-button type="primary" @click="submitForm('ruleForm')">登录</el-button>
</div>
</el-form>
</div>
//页面加载调用获取cookie值
mounted() {
this.getCookie();
},
methods: {
submitForm(formName) {
const self = this;
//判断复选框是否被勾选 勾选则调用配置cookie方法
if (self.checked == true) {
console.log("checked == true");
//传入账号名,密码,和保存天数3个参数
self.setCookie(self.ruleForm.username, self.ruleForm.password, 7);
}else {
console.log("清空Cookie");
//清空Cookie
self.clearCookie();
}
//与后端请求代码,本功能不需要与后台交互所以省略
console.log("登陆成功");
});
},
//设置cookie
setCookie(c_name, c_pwd, exdays) {
var exdate = new Date(); //获取时间
exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * exdays); //保存的天数
//字符串拼接cookie
window.document.cookie = "userName" + "=" + c_name + ";path=/;expires=" + exdate.toGMTString();
window.document.cookie = "userPwd" + "=" + c_pwd + ";path=/;expires=" + exdate.toGMTString();
},
//读取cookie
getCookie: function() {
if (document.cookie.length > 0) {
var arr = document.cookie.split('; '); //这里显示的格式需要切割一下自己可输出看下
for (var i = 0; i < arr.length; i++) {
var arr2 = arr[i].split('='); //再次切割
//判断查找相对应的值
if (arr2[0] == 'userName') {
this.ruleForm.username = arr2[1]; //保存到保存数据的地方
} else if (arr2[0] == 'userPwd') {
this.ruleForm.password = arr2[1];
}
}
}
},
//清除cookie
clearCookie: function() {
this.setCookie("", "", -1); //修改2值都为空,天数为负1天就好了
}