VUE實(shí)現(xiàn)注冊(cè)與登錄效果
本文實(shí)例為大家分享了VUE實(shí)現(xiàn)注冊(cè)與登錄效果的具體代碼,供大家參考,具體內(nèi)容如下
1.效果展示

2.注冊(cè)效果實(shí)現(xiàn)
<template>
<div class="login-section">
<el-form
label-position="top" label-width="100px" class="demo-ruleForm"
:rules="rules"
:model="rulesForm"
status-icon
ref="ruleForm"
>
<el-form-item label="用戶名" prop="name">
<el-input type="text" v-model="rulesForm.name"></el-input>
</el-form-item>
<el-form-item label="密碼" prop="password">
<el-input type="password" v-model="rulesForm.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')" >提交</el-button>
<el-button >重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import {register} from '@/service/api';
export default {
data() {
return {
rulesForm:{
name:'',
password:''
},
rules:{
name:[
{required:true,message:'請(qǐng)輸入名字',trigger:"blur"},
{min:1,max:5,message:"長(zhǎng)度3-5",trigger:"blur"}
],
password:[
{required:true,message:'請(qǐng)輸入密碼',trigger:"blur"},
{min:3,max:5,message:"長(zhǎng)度3-5",trigger:"blur"}
]
}
};
},
methods: {
submitForm(formName){
this.$refs[formName].validate((valid)=>{
if(valid){
//如果校檢通過(guò),在這里向后端發(fā)送用戶名和密碼
register({
name: this.rulesForm.name,
password: this.rulesForm.password,
}).then((data)=>{
console.log(data)
if(data.code === 0){
localStorage.setItem('token',data.data.token);
window.location.href= '/';
}
if(data.code === 1){
this.$message.error(data.mes)
}
});
}else{
console.log("error submit!!");
return false;
}
});
}
}
}
</script>
<style lang="stylus">
.login-section
padding 0px 20px
</style>
3.登錄頁(yè)面實(shí)現(xiàn)
<template>
<div class="login-section">
<el-form
label-position="top"
label-width="100px" class="demo-ruleForm"
:rules="rules"
:model="rulesForm"
status-icon
ref="ruleForm"
>
<el-form-item label="用戶名" prop="name">
<el-input type="text" v-model="rulesForm.name"></el-input>
</el-form-item>
<el-form-item label="密碼" prop="password">
<el-input type="password" v-model="rulesForm.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button>重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import {login} from '@/service/api';
export default {
data() {
return {
//存儲(chǔ)數(shù)據(jù)的對(duì)象
rulesForm:{
name:'',
password:''
},
rules:{
name:[
{required:true,message:'請(qǐng)輸入名字',trigger:"blur"},
{min:1,max:5,message:"長(zhǎng)度3-5",trigger:"blur"}
],
password:[
{required:true,message:'請(qǐng)輸入密碼',trigger:"blur"},
{min:3,max:5,message:"長(zhǎng)度3-5",trigger:"blur"}
]
}
};
},
methods: {
submitForm(formName){
this.$refs[formName].validate((valid)=>{
if(valid){
//如果校檢通過(guò),在這里向后端發(fā)送用戶名和密碼
login({
name: this.rulesForm.name,
password: this.rulesForm.password,
}).then((data)=>{
console.log(data)
if(data.code === 0){
localStorage.setItem('token',data.data.token);
window.location.href= '/';
}
if(data.code === 1){
this.$message.error(data.mes)
}
});
}else{
console.log("error submit!!");
return false;
}
});
}
}
}
</script>
<style lang="stylus">
.login-section
padding 0px 20px
</style>
4.路由跳轉(zhuǎn)實(shí)現(xiàn)
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
import Store from '@/store'
import {userInfo} from '@/service/api.js'
import Login from '@/views/user-login/index.vue'
const router = new Router({
mode:"history",
routes:[
{
path:'/login',
name:"login",
title:"登錄頁(yè)",
component:Login,
meta:{
login:true
}
}
]
});
//路由守衛(wèi)
router.beforeEach( async (to,from,next) => {
/*
有些路由是需要登錄的,判斷登錄狀態(tài)
1.沒(méi)有登錄:跳轉(zhuǎn)到登錄頁(yè)
2.登錄:直接進(jìn)入
有些路由是不需要登錄的,直接進(jìn)入
ps:是否需要登錄 --meta
*/
const token = localStorage.getItem('token');
const isLogin = !!token;
//進(jìn)入路由的時(shí)候,需要向后端發(fā)送token,驗(yàn)證是否合法
const data = await userInfo();
Store.commit('chageUserInfo',data.data)
if(to.matched.some(item => item.meta.login)){//需要登錄
console.log("需要登錄");
if(isLogin){//已經(jīng)登錄的,直接通過(guò)
if(data.error === 400){//后端告訴你,登錄不成功
next({name:'login'});
localStorage.removeItem('token');
return;
}
if(to.name === 'login'){
next({name:'home'});
}else{
next();
}
return;
}
if(!isLogin && to.name === 'login'){//未登錄,但是要去登錄頁(yè)
next();
}
if(!isLogin && to.name !== 'login'){//未登錄,去的也不是登錄頁(yè)
next({name:'login'});
}
}else{
next();
}
})
export default router;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue Elenent實(shí)現(xiàn)表格相同數(shù)據(jù)列合并
這篇文章主要為大家詳細(xì)介紹了Vue Elenent實(shí)現(xiàn)表格相同數(shù)據(jù)列合并,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
vue2與vue3下如何訪問(wèn)使用public下的文件
這篇文章主要介紹了vue2與vue3下如何訪問(wèn)使用public下的文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
Vue + element實(shí)現(xiàn)動(dòng)態(tài)顯示后臺(tái)數(shù)據(jù)到options的操作方法
最近遇到一個(gè)需求需要實(shí)現(xiàn)selector選擇器中選項(xiàng)值options 數(shù)據(jù)的動(dòng)態(tài)顯示,而非寫(xiě)死的數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家分享實(shí)現(xiàn)方法,感興趣的朋友一起看看吧2021-07-07
vue3基于elementplus 簡(jiǎn)單實(shí)現(xiàn)表格二次封裝過(guò)程
公司渲染表格數(shù)據(jù)時(shí)需要將空數(shù)據(jù)顯示‘-’,并且對(duì)于每一列數(shù)據(jù)的顯示也有一定的要求,基于這個(gè)需求對(duì)element-plus簡(jiǎn)單進(jìn)行了二次封裝,這篇文章主要介紹了vue3基于elementplus 簡(jiǎn)單實(shí)現(xiàn)表格二次封裝過(guò)程,需要的朋友可以參考下2024-05-05
vue3使用vuex實(shí)現(xiàn)頁(yè)面實(shí)時(shí)更新數(shù)據(jù)實(shí)例教程(setup)
在前端開(kāi)發(fā)中往往會(huì)遇到頁(yè)面需要實(shí)時(shí)刷新數(shù)據(jù)的情況,給用戶最新的數(shù)據(jù)展示,這篇文章主要給大家介紹了關(guān)于vue3使用vuex實(shí)現(xiàn)頁(yè)面實(shí)時(shí)更新數(shù)據(jù)(setup)的相關(guān)資料,需要的朋友可以參考下2022-09-09
vue跳轉(zhuǎn)頁(yè)面打開(kāi)新窗口,并攜帶與接收參數(shù)方式
這篇文章主要介紹了vue跳轉(zhuǎn)頁(yè)面打開(kāi)新窗口,并攜帶與接收參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue實(shí)現(xiàn)在線預(yù)覽office文件的示例代碼
本文主要介紹了vue實(shí)現(xiàn)在線預(yù)覽office文件,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10

