13vue3实战-----退出登录和记住密码功能

devtools/2025/2/13 0:14:49/

13vue3实战-----退出登录功能和记住密码功能

  • 1.退出登录功能
  • 2.记住密码功能

1.退出登录功能

退出登录主要做两件事情:清除token等用户信息并且跳转路由到登录页面。

<script setup lang="ts">
import { useRouter } from 'vue-router'
import { LOGIN_TOKEN } from '@/global/constants'
import { localCache } from '@/utils/cache'const router = useRouter()
function handleExitClick() {localCache.removeCache(LOGIN_TOKEN)router.push('/login')
}
</script>

2.记住密码功能

父组件login-panel.vue:

<script setup lang="ts">
import { localCache } from '@/utils/cache'
import { ref, watch } from 'vue'
import PaneAccount from './pane-account.vue'
import PanePhone from './pane-phone.vue'const activeName = ref('account')
const isRemPwd = ref<boolean>(localCache.getCache('isRemPwd') ?? false)
//监听记住密码的复选框是否被勾选
watch(isRemPwd, (newValue) => {localCache.setCache('isRemPwd', newValue)
})
const accountRef = ref<InstanceType<typeof PaneAccount>>()
function handleLoginBtnClick() {if (activeName.value === 'account') {//loginAction中将密码是否勾选的值传给子组件accountRef.value?.loginAction(isRemPwd.value)} else {console.log('用户在进行手机登录')}
}
</script>

子组件pane-account.vue:

<script setup lang="ts">
import { reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
import type { FormRules, ElForm } from 'element-plus'
import useLoginStore from '@/store/login/login'
import type { IAccount } from '@/types'
import { localCache } from '@/utils/cache'const CACHE_NAME = 'name'
const CACHE_PASSWORD = 'password'// 1.定义account数据
const account = reactive<IAccount>({name: localCache.getCache(CACHE_NAME) ?? '',password: localCache.getCache(CACHE_PASSWORD) ?? ''
})// 2.定义校验规则
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'}]
}// 3.执行帐号的登录逻辑
const formRef = ref<InstanceType<typeof ElForm>>()
const loginStore = useLoginStore()
function loginAction(isRemPwd: boolean) {formRef.value?.validate((valid) => {if (valid) {// 1.获取用户输入的帐号和密码const name = account.nameconst password = account.password// 2.向服务器发送网络请求(携带账号和密码)loginStore.loginAccountAction({ name, password }).then(() => {// 3.判断是否需要记住密码if (isRemPwd) {localCache.setCache(CACHE_NAME, name)localCache.setCache(CACHE_PASSWORD, password)} else {localCache.removeCache(CACHE_NAME)localCache.removeCache(CACHE_PASSWORD)}})} else {ElMessage.error('Oops, 请您输入正确的格式后再操作~~.')}})
}defineExpose({loginAction
})
</script>

效果如下:
在这里插入图片描述


http://www.ppmy.cn/devtools/157781.html

相关文章

ubuntu和手机之间如何传递消息

在Ubuntu和手机之间传递消息可以通过以下几种方式实现&#xff1a; 1. 使用KDE Connect 安装KDE Connect&#xff1a; 在Ubuntu上安装KDE Connect&#xff1a;sudo apt update sudo apt install kdeconnect在手机上安装KDE Connect应用&#xff08;Android或iOS&#xff09;。…

第433场周赛:变长子数组求和、最多 K 个元素的子序列的最值之和、粉刷房子 Ⅳ、最多 K 个元素的子数组的最值之和

Q1、变长子数组求和 1、题目描述 给你一个长度为 n 的整数数组 nums 。对于 每个 下标 i&#xff08;0 < i < n&#xff09;&#xff0c;定义对应的子数组 nums[start ... i]&#xff08;start max(0, i - nums[i])&#xff09;。 返回为数组中每个下标定义的子数组中…

DeepSeek图解10页PDF

以前一直在关注国内外的一些AI工具&#xff0c;包括文本型、图像类的一些AI实践&#xff0c;最近DeepSeek突然爆火&#xff0c;从互联网收集一些资料与大家一起分享学习。 本章节分享的文件为网上流传的DeepSeek图解10页PDF&#xff0c;免费附件链接给出。 1 本地 1 本地部…

go-elasticsearch创建ik索引并进行查询操作

es-go client引入gomod go get github.com/elastic/go-elasticsearch/v8latest连接es服务器&#xff08;不经过安全校验) cfg : elasticsearch.Config{Addresses: []string{"http://localhost:9200",}, } es, err : elasticsearch.NewClient(cfg) if err ! nil {pa…

初窥强大,AI识别技术实现图像转文字(OCR技术)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作&#xff0c;主要擅长领域有&#xff1a;python…

at coder ABC 392

A - Shuffled Equation 题意&#xff1a;给一个整数序列&#xff08;A1,A2,A3&#xff09;,这三个数进行排序后形成&#xff08;B1,B2,B3&#xff09;问是否存在排序使B1*B2B3&#xff1f; 思路&#xff1a;因为一共就三个数&#xff0c;只有三种排列方式&#xff0c;我直接全…

【Linux】Socket编程—UDP

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…

设计模式-状态模式:让对象的行为随状态改变而清晰可控

🌟 引言 场景痛点: 你是否遇到过这样的代码? if (state == "待支付") {// 处理待支付逻辑 } else if (state == "已支付") {// 处理已支付逻辑 } else if (...) {// 无限的条件分支... }条件分支爆炸导致代码臃肿、难以维护?状态模式正是解决这类问…