10vue3實戰-----實現登錄的基本功能

10vue3實戰-----實現登錄的基本功能

  • 1.基本頁面的搭建
  • 2.賬號登錄的驗證規則配置
  • 3.點擊登錄按鈕
  • 4.表單的校驗
  • 5.賬號的登錄邏輯和登錄狀態保存
  • 6.定義IAccount對象類型

1.基本頁面的搭建

大概需要搭建成這樣子的頁面:
在這里插入圖片描述
具體的搭建界面就不多講。各個項目都有自己的登錄界面,搭建方法大同小異,這是基礎,在這不做贅敘。

2.賬號登錄的驗證規則配置

直接使用element-plus中現成的表單校驗功能。
template:

<template><div class="pane-account"><el-form:model="account":rules="accountRules"label-width="60px"size="large"status-iconref="formRef"><el-form-item label="帳號" prop="name"><el-input v-model="account.name" /></el-form-item><el-form-item label="密碼" prop="password"><el-input v-model="account.password" show-password /></el-form-item></el-form></div>
</template>

script:

<script setup lang="ts">
import { reactive} from 'vue'
import type { FormRules} from 'element-plus'
// 1.定義account數據
const account = reactive({name: '',password: ''
})
// 2.定義校驗規則
//這里accountRules不需要用reactive進行響應式,因為一般不會改變。
const accountRules: FormRules = {name: [{ required: true, message: '必須輸入帳號信息~', trigger: 'blur' },{pattern: /^[a-z0-9]{6,20}$/,message: '必須是6~20數字或字母組成~',trigger: 'blur'}],password: [{ required: true, message: '必須輸入密碼信息~', trigger: 'blur' },{pattern: /^[a-z0-9]{3,}$/,message: '必須是3位以上數字或字母組成',trigger: 'blur'}]
}
</script>

3.點擊登錄按鈕

上面的登錄界面把它封裝成了多個組件。登錄模塊目錄結構如下:
在這里插入圖片描述
如上,Login.vue有一個login-panel登錄面板子組件,登錄面板組件下有pane-account和pane-phone兩個子組件。
在這里插入圖片描述
這里“立即登錄”按鈕是在login-panel組件中,點擊按鈕后需要用到賬號和密碼的信息,但他們都在子組件。有一種方法是把子組件傳到父組件;還有一種方法是login-panel父組件中調用子組件的方法。這里我用第二種方法:
以賬號登錄為例,子組件pane-account文件:

<script setup lang="ts">
import { reactive, ref } from 'vue'
// 1.定義account數據
const account = reactive({name: '',password: ''
})
...
// 3.執行帳號的登錄邏輯
function loginAction() {console.log("用戶正在登錄",account.name,account.password);
}
//一定要暴露出來,父組件才能使用子組件的方法:
defineExpose({loginAction
})
</script>

父組件login-panel.vue文件:

<script setup lang="ts">
import { ref } from 'vue'
import PaneAccount from './pane-account.vue'
import PanePhone from './pane-phone.vue'const activeName = ref('account')
//下面這行代碼要特別注意,經常會用到
//一般都是用InstanceType<typeof xxx>這種方法
//這里最好不要const accountRef = ref<any>()
//雖然萬事都可以any,但那樣子的話就沒有相關提示了
const accountRef = ref<InstanceType<typeof PaneAccount>>()
//點擊登錄按鈕
function handleLoginBtnClick() {if (activeName.value === 'account') {//簡寫方式,accountRef存在才執行accountRef.value.loginAction()accountRef.value?.loginAction()} else {console.log('用戶在進行手機登錄')}
}
</script>

4.表單的校驗

子組件pane-account文件:

<script setup lang="ts">
import { reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
import type { FormRules, ElForm } from 'element-plus'
// 1.定義account數據
const account = reactive({name: '',password: ''
})
...
// 3.執行帳號的登錄邏輯
//這個與上面的accountRef是一樣的道理
const formRef = ref<InstanceType<typeof ElForm>>()
function loginAction() {formRef.value?.validate((valid) => {if (valid) {console.log("驗證成功","登錄的操作")} else {ElMessage.error('Oops, 請您輸入正確的格式后再操作~~.')}})
}defineExpose({loginAction
})
</script>

5.賬號的登錄邏輯和登錄狀態保存

首先要封裝一下登錄的網絡接口:
在service文件夾中新建main和login模塊:
在這里插入圖片描述
service/login/login.ts:

import hyRequest from '..'
//這里account類型暫時為any,后面再處理
export function accountLoginRequest(account: any) {return hyRequest.post({url: '/login',data: account})
}

登錄之后需要把用戶信息保存到pinia中,所以在store里面也要新建login和main模塊來處理相關業務:
在這里插入圖片描述
store/login/login.ts:

import { defineStore } from 'pinia'
import { accountLoginRequest } from '@/service/login/login'
const useLoginStore = defineStore('login', {state: () => ({id: '',token:'',name: ''}),actions: {//account暫時為any,后面會再進行處理async loginAccountAction(account: any) {// 1.賬號登錄, 獲取token等信息const loginResult = await accountLoginRequest(account)this.id = loginResult.data.idthis.name = loginResult.data.namethis.token = loginResult.data.token...}}
})export default useLoginStore

pinia中的數據一刷新就會消失,下一章節將會解決該問題https://blog.csdn.net/fageaaa/article/details/145532580。

6.定義IAccount對象類型

在上面很多文件里面都用到了一個對象,里面包含有賬號和密碼,但給它的類型都是any:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
這樣子是不好的。我們可以把account的類型提取出來,放在一個文件中。
在src中新建一個types文件夾:
在這里插入圖片描述
types/login.ts:

export interface IAccount {name: stringpassword: string
}

types/index.ts:

 export * from './login'

然后在需要的文件中引入:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895070.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895070.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895070.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RestTemplate Https 證書訪問錯誤

錯誤信息 resttemplate I/O error on GET request for “https://21.24.6.6:9443/authn-api/v5/oauth/token”: java.security.cert.CertificateException: No subject alternative names present; nested exception is javax.net.ssl.SSLHandshakeException: java.security.c…

講人話的理解ai學習原理

通過把各種東西打上分數標簽存起來。ai不花算力是不可能的&#xff0c;需要巨大的算力&#xff0c;需要要大量gpu芯片&#xff0c;如果大大降低成本&#xff0c;就需要蒸餾別人成果&#xff0c;把這些參數偷偷弄過來。 比如”貓睡在石頭上感覺很涼快&#xff0c;很舒服&#x…

【雜談】-文明的量子躍遷:AI時代人類物種的自我重構

文章目錄 文明的量子躍遷&#xff1a;AI時代人類物種的自我重構一、文明基因的雙螺旋進化二、意識矩陣的拓撲重構三、倫理穹頂下的共生協議 文明的量子躍遷&#xff1a;AI時代人類物種的自我重構 在撒哈拉沙漠的巖壁上&#xff0c;史前人類用赭石顏料繪制出羚羊與獵人的身影&a…

vue3 點擊圖標從相冊選擇二維碼圖片,并使用jsqr解析二維碼(含crypto-js加密解密過程)

vue3 點擊圖標從相冊選擇二維碼圖片&#xff0c;并使用jsqr解析二維碼&#xff08;含crypto-js加密解密過程&#xff09; 1.安裝 jsqr 和 crypto-js npm install -d jsqr npm install crypto-js2.在util目錄下新建encryptionHelper.js文件&#xff0c;寫加密解密方法。 // e…

支持多種網絡數據庫格式的自動化轉換工具——VisualXML

一、VisualXML軟件介紹 對于DBC、ARXML……文件的編輯、修改等繁瑣操作&#xff0c;WINDHILL風丘科技開發的總線設計工具——VisualXML&#xff0c;可輕松解決這一問題&#xff0c;提升工作效率。 VisualXML是一個強大且基于Excel表格生成多種網絡數據庫文件的轉換工具&#…

【JVM詳解四】執行引擎

一、概述 Java程序運行時&#xff0c;JVM會加載.class字節碼文件&#xff0c;但是字節碼并不能直接運行在操作系統之上&#xff0c;而JVM中的執行引擎就是負責將字節碼轉化為對應平臺的機器碼讓CPU運行的組件。 執行引擎是JVM核心的組成部分之一。可以把JVM架構分成三部分&am…

C++ 順序表

順序表的操作有以下&#xff1a; 1 順序表的元素插入 給定一個索引和元素&#xff0c;這個位置往后的元素位置都要往后移動一次&#xff0c;元素插入的步驟有以下幾步 &#xff08;1&#xff09;判斷插入的位置是否合法&#xff0c;如果不合法則拋出異常 &#xff08;2&…

mysql安裝starting the server報錯

win10家庭版無法啟動服務的&#xff0c;先不要退出&#xff0c;返回上一欄&#xff0c;然后通過電腦搜索欄輸入服務兩個字&#xff0c;在里面找到mysql80&#xff0c;右鍵屬性-登錄&#xff0c;登錄身份切換為本地系統就行了

萬有的函數關係速成2. 連續和導數

1.討論間斷點類型 定義: 若函數在某點不滿足連續的條件,則該點為間斷點。 第一類間斷點是左右極限都存在的間斷點,其中左右極限相等的是可去間斷點,不相等的是跳躍間斷點; 第二類間斷點是左右極限至少有一個不存在的間斷點,包括無窮間斷點(極限為無窮)和振蕩間斷點…

【專題】2025年我國機器人產業發展形勢展望:人形機器人量產及商業化關鍵挑戰報告匯總PDF洞察(附原數據表)

原文鏈接&#xff1a;https://tecdat.cn/?p39668 機器人已廣泛融入我們生活的方方面面。在工業領域&#xff0c;它們宛如不知疲倦的工匠&#xff0c;精準地完成打磨、焊接等精細工作&#xff0c;極大提升了生產效率和產品質量&#xff1b;在日常生活里&#xff0c;它們是貼心…

用docker在本地用open-webui部署網頁版deepseek

前置條件 用Ollama在本地CMD窗口運行deepseek大模型-CSDN博客文章瀏覽閱讀109次&#xff0c;點贊5次&#xff0c;收藏2次。首次運行需要下載deepseek的大模型包&#xff08;大約5GB&#xff0c;根據本地網速的不同在半個小時到幾個小時之間下載完成&#xff09; &#xff0c;并…

android的DataBinding簡介

Android DataBinding 簡介 DataBinding 是 Android Jetpack 中的數據綁定庫&#xff0c;用于將 UI 組件直接與數據模型綁定&#xff0c;減少模板代碼并實現雙向數據同步。它通過聲明式布局簡化 UI 更新邏輯&#xff0c;常用于 MVVM&#xff08;Model-View-ViewModel&#xff0…

企業如何利用DeepSeek提升網絡安全管理水平

企業可以通過深度整合DeepSeek的AI能力&#xff0c;構建智能化、動態化的網絡安全防御體系&#xff0c;以應對APT&#xff08;高級持續性威脅&#xff09;等復雜攻擊。以下是具體策略與實踐路徑&#xff1a; 1. AI驅動的威脅檢測與分析 多模態威脅狩獵 DeepSeek的深度學習技術能…

DeepSeek-R1 云環境搭建部署流程

DeepSeek橫空出世&#xff0c;在國際AI圈備受關注&#xff0c;作為個人開發者&#xff0c;AI的應用可以有效地提高個人開發效率。除此之外&#xff0c;DeepSeek的思考過程、思考能力是開放的&#xff0c;這對我們對結果調優有很好的幫助效果。 DeepSeek是一個基于人工智能技術…

x小兔鮮vue.js

LayoutFooter.vue <template><footer class"app_footer"><!-- 聯系我們 --><div class"contact"><div class"container"><dl><dt>客戶服務</dt><dd><i class"iconfont icon-kef…

磁盤分區損壞:深度解析與數據恢復策略

一、磁盤分區損壞現象概述 磁盤分區損壞是計算機數據存儲領域的一個常見問題&#xff0c;它通常表現為硬盤上的某個分區無法正常訪問&#xff0c;數據讀寫失敗&#xff0c;甚至整個分區消失。這種損壞可能源于多種因素&#xff0c;不僅影響用戶的正常使用&#xff0c;更可能導…

fetch請求總結,fastadmin中后臺接口強制返回json數據

fetch請求 提交圖片,只支持formData方式,這樣會自動變為multiform方式,而且一般的post大多都可以用這樣的方式來完成請求 const formData new FormData(); formData.append(file, fileInput.files[0]); formData.append(pid, id); formData.append(dc, 1);fetch(/api/common…

Python----Python高級(網絡編程:網絡基礎:發展歷程,IP地址,MAC地址,域名,端口,子網掩碼,網關,URL,DHCP,交換機)

一、網絡 早期的計算機程序都是在本機上運行的&#xff0c;數據存儲和處理都在同一臺機器上完成。隨著技術的發展&#xff0c;人 們開始有了讓計算機之間相互通信的需求。例如安裝在個人計算機上的計算器或記事本應用&#xff0c;其運行環 境僅限于個人計算機內部。這種設置雖然…

k8sollama部署deepseek-R1模型,內網無坑

這是目錄 linux下載ollama模型文件下載到本地,打包遷移到k8s等無網絡環境使用下載打包ollama鏡像非k8s環境使用k8s部署訪問方式非ollama運行deepseek模型linux下載ollama 下載后可存放其他服務器 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linu…

機器學習基本概念(附代碼)

這里的“機器”指的是計算機軟硬件組織&#xff0c;而非傳統的機械裝置&#xff1b;而“學習”&#xff0c;則是指軟件通過訓練過程&#xff0c;其性能得以提升的過程。 一、算法與模型的關系 在機器學習領域&#xff0c;算法和模型是兩個核心概念。算法是一種偏抽象的概念&a…