[Vue項(xiàng)目實(shí)戰(zhàn)]登錄功能實(shí)現(xiàn)

2021-9-22    前端達(dá)人

寫在前面

vue文件最后要空一行,不然會報(bào)錯(cuò),真的奇葩…

登錄概述

登錄業(yè)務(wù)流程

  • 1.在登錄頁面輸入用戶名和密碼
  • 2.調(diào)用后臺接口進(jìn)行驗(yàn)證
  • 3.通過驗(yàn)證之后,根據(jù)后臺得響應(yīng)狀態(tài)跳轉(zhuǎn)到項(xiàng)目主頁

登錄業(yè)務(wù)的相關(guān)技術(shù)點(diǎn)

  • http是無狀態(tài)的
  • 通過cookie在客戶端記錄狀態(tài)
  • 通過session在服務(wù)器端記錄狀態(tài)
  • 通過token方式維持狀態(tài)

這里要清楚哦!

登錄—token原理分析

  • 1.登錄頁面輸入用戶名和密碼進(jìn)行登錄
  • 2.服務(wù)器驗(yàn)證通過之后生成該用戶的token并返回
  • 3.客戶端存儲該token
  • 4.后續(xù)所有的請求都攜帶該token發(fā)送請求
  • 5.服務(wù)器端驗(yàn)證token是否通過

登錄功能實(shí)現(xiàn)

登錄頁面的布局

通過Element-UI組件實(shí)現(xiàn)布局

  • el-form
  • el-form-item
  • el-input
  • el-button
  • 字體圖標(biāo)

在vscode打開終端ctrl+~

git status 查看當(dāng)前git狀態(tài)
git checkout -b login 創(chuàng)建一個(gè)新的分支叫l(wèi)ogin
git branch 切換分支
在這里插入圖片描述


在vue ui中啟動(dòng)!
在這里插入圖片描述


終端指令npm run serve也可以運(yùn)行!

在components文件下創(chuàng)建一個(gè)vue文件

import Vue from 'vue' import VueRouter from 'vue-router' import login from './components/login.vue' Vue.use(VueRouter) const routes = [ {path:'/login',component:login} ] const router = new VueRouter({ routes }) export default router 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

配置路由(并添加路由重定向)

const router = new VueRouter({ routes: [ { path: '/', redirect: '/login' }, { path: '/login', component: login } ] }) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

一定要注意空格,不然會報(bào)錯(cuò),可惡??!

頁面編寫

先給一個(gè)全局樣式表

/* 全局樣式表 */ html, body, #app{ height: 100%; margin: 0; padding: 0; } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

并在main.js中導(dǎo)入

import './assets/css/global.css' 
  • 1

完成登錄框居中

注意:translate 進(jìn)行移動(dòng),完成真正的居中

.login_box{ width: 450px; height: 300px; background-color: #fff; position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在這里插入圖片描述

添加一個(gè)登錄圖標(biāo)
 .avatar_box{ height: 130px; width: 130px; border: 1px solid #eee; border-radius: 50%; padding: 10px; box-shadow: 0px 0px 10px #ddd; position: absolute; left: 50%; transform: translate(-50%,-50%); background-color: #fff;
        img{ width: 100%; height: 100%; border-radius: 50%; background-color: #eee; } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在這里插入圖片描述

登錄表單的布局

通過Element-UI組件實(shí)現(xiàn)布局

  • el-form
  • el-form-item
  • el-input
  • el-button
  • 字體圖標(biāo)

elements組件庫網(wǎng)頁
在網(wǎng)站里面可以找到一些可以使用的基礎(chǔ)模板代碼

導(dǎo)入組件

import Vue from 'vue'
import { Button, Form, FormItem, Input } from 'element-ui'//分開import會報(bào)錯(cuò)

Vue.use(Button) Vue.use(Form) Vue.use(FormItem) Vue.use(Input) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

中間form和button都是直接到上面的組件庫里面去找的

中間一些代碼不貼了,比較枯燥呀

特別地,我們的小圖標(biāo)是從阿里的icon庫里面下載的

具體用法見以前寫得一篇博客
阿里巴巴icon圖標(biāo)盡在掌握(前端如何引入icon庫,美麗圖標(biāo)隨你處置T.T)
在這里插入圖片描述

登錄表單的數(shù)據(jù)綁定
  • 1.:model=“l(fā)oginForm” 綁定一個(gè)表單
  • 2.在form-item中用v-model雙向綁定數(shù)據(jù)對象
  • 3.在export default中data() return表單數(shù)據(jù)
登錄表單的驗(yàn)證規(guī)則
  • 1.:rules="ruleForm"綁定一個(gè)規(guī)則
  • 2.在form-item中用prop屬性設(shè)置為需要校驗(yàn)的字段名
 // 這是表單的驗(yàn)證規(guī)則對象 loginFormRules: { // 驗(yàn)證用戶名是否合法 username: [ { required: true, message: '請輸入登錄名稱', trigger: 'blur' }, { min: 3, max: 10, message: '長度在 3 到 10 個(gè)字符', trigger: 'blur' } ], // 驗(yàn)證密碼是否合法 password: [ { required: true, message: '請輸入登錄密碼', trigger: 'blur' }, { min: 6, max: 15, message: '長度在 6 到 15 個(gè)字符', trigger: 'blur' } ] } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在這里插入圖片描述

登錄表單的重置
  • 1.在el-form中添加ref引用名稱,以便獲取表單
  • 2.在方法中添加方法,用this.$refs.loginFormRef.resetFields()來重置表單,注意表單的值會變?yōu)閐ata里面設(shè)置的初值
登錄預(yù)驗(yàn)證
  • 1.同樣的this.$refs.loginFormRef.validate()
  • 2.配置axios
import axios from 'axios' // 配置請求的根路徑 axios.defaults.baseURL = 'https://127.0.0.1:8888/api/private/v1/' Vue.prototype.$http = axios 
  • 1
  • 2
  • 3
  • 4
  • 3.如下獲取查詢的結(jié)果
    使用async 和await要獲取返回結(jié)果
 this.$refs.loginFormRef.validate(async valid => { if (!valid) return const { data: res } = await this.$http.post('login', this.loginForm) console.log(res) if (res.meta.status !== 200) return console.log('登錄失敗') console.log('登錄成功') }) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
登錄組件配置彈窗提示
  • 1.在element.js中引入message并掛載到vue上
Vue.prototype.$message = Message // 掛載到了Vue上 
  • 1
  • 2.直接調(diào)用this.$message.error(‘登錄失??!’)
    在這里插入圖片描述
登錄成功后的行為
1.將登錄之后的token,保存到客戶端的sessionStorage中
  • 1.項(xiàng)目中除了登錄之外的其他API接口,必須在登錄之后才能訪問
  • 2.token只應(yīng)在當(dāng)前網(wǎng)站打開期間生效,所以將token保存在sessionStorage中
    將這個(gè)token存儲到了會話存儲
    在這里插入圖片描述

藍(lán)藍(lán)設(shè)計(jì)建立了UI設(shè)計(jì)分享群,每天會分享國內(nèi)外的一些優(yōu)秀設(shè)計(jì),如果有興趣的話,可以進(jìn)入一起成長學(xué)習(xí),請掃碼藍(lán)小助,報(bào)下信息,藍(lán)小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請與我們聯(lián)系。

分享此文一切功德,皆悉回向給文章原作者及眾讀者.

轉(zhuǎn)自:csdn
免責(zé)聲明:藍(lán)藍(lán)設(shè)計(jì)尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時(shí)與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

藍(lán)藍(lán)設(shè)計(jì)www.bouu.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)



分享本文至:

日歷

鏈接

個(gè)人資料

存檔