vue 工作记录登录后的一些好方法

//记住要跳转的地址

function handleLogin() {

  loginFormRef.value.validate((valid: boolean) => {

    if (valid) {

      loading.value = true;

      userStore

        .login(loginData.value)

        .then(() => {

          const query: LocationQuery = route.query;

          const redirect = (query.redirect as LocationQueryValue) ?? "/";

          const otherQueryParams = Object.keys(query).reduce(

            (acc: any, cur: string) => {

              if (cur !== "redirect") {

                acc[cur] = query[cur];

              }

              return acc;

            },

            {}

          );

          router.push({ path: redirect, query: otherQueryParams });

        })

        .catch(() => {

          // 验证失败,重新生成验证码

          getCaptcha();

        })

        .finally(() => {

          loading.value = false;

        });

    }

  });

}

/**

 * 获取验证码

 */

function getCaptcha() {

  getCaptchaApi().then(({ data }) => {

    loginData.value.captchaKey = data.captchaKey;

    captchaBase64.value = data.captchaBase64;

  });

}

<!-- 登录表单 -->

    <el-card

      class="z-1 !border-none w-100 !bg-transparent !rounded-4% <sm:w-83"

    >

      <div class="text-center relative">

        <h2>{{ title }}</h2>

        <el-tag class="ml-2 absolute top-0 right-0">{{ version }}</el-tag>

      </div>

      <el-form

        ref="loginFormRef"

        :model="loginData"

        :rules="loginRules"

        class="login-form"

      >

        <el-form-item prop="username">

          <div class="p-2">

            <svg-icon icon-class="user" />

          </div>

          <el-input

            ref="username"

            v-model="loginData.username"

            class="flex-1"

            size="large"

            :placeholder="$t('login.username')"

            name="username"

          />

        </el-form-item>

        <el-tooltip

          :disabled="isCapslock === false"

          content="Caps lock is On"

          placement="right"

        >

          <el-form-item prop="password">

            <span class="p-2">

              <svg-icon icon-class="password" />

            </span>

            <el-input

              v-model="loginData.password"

              class="flex-1"

              :placeholder="$t('login.password')"

              :type="passwordVisible === false ? 'password' : 'input'"

              size="large"

              name="password"

              @keyup="checkCapslock"

              @keyup.enter="handleLogin"

            />

            <span class="mr-2" @click="passwordVisible = !passwordVisible">

              <svg-icon

                :icon-class="passwordVisible === false ? 'eye' : 'eye-open'"

                class="cursor-pointer"

              />

            </span>

          </el-form-item>

        </el-tooltip>

        <!-- 验证码 -->

        <el-form-item prop="captchaCode">

          <span class="p-2">

            <svg-icon icon-class="captcha" />

          </span>

          <el-input

            v-model="loginData.captchaCode"

            auto-complete="off"

            :placeholder="$t('login.captchaCode')"

            class="w-[60%]"

            @keyup.enter="handleLogin"

          />

          <div class="captcha">

            <el-image

              :src="captchaBase64"

              @click="getCaptcha"

              class="w-[120px] h-[48px] cursor-pointer"

            >

              <template #error>

                <div class="image-slot">

                  <i-ep-picture />

                </div>

              </template>

            </el-image>

          </div>

        </el-form-item>

        <el-button

          :loading="loading"

          type="primary"

          class="w-full"

          @click.prevent="handleLogin"

          >{{ $t("login.login") }}

        </el-button>

        <!-- 账号密码提示 -->

        <div class="mt-10 text-sm">

          <span>{{ $t("login.username") }}: admin</span>

          <span class="ml-4"> {{ $t("login.password") }}: 123456</span>

        </div>

      </el-form>

    </el-card>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

logrus 打印日志时间注意事项

问题描述 程序运行中打印时间 和 logrus打印日志时间 差距十几分钟 go 日志打印处 log_init.LogIcmp.Info("Current time") 日志打印结果 {"func":"main.main","level":"info","msg":"Current time",…

EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测

EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测 目录 EI级 | Matlab实现VMD-TCN-GRU变分模态分解结合时间卷积门控循环单元多变量光伏功率时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现…

C# 强制类型转换和as区别和不同使用场景

文章目录 1.强制类型转换2. as 运算符3.实例总结&#xff1a; 在C#中&#xff0c;as 和 强制类型转换&#xff08;例如 (T)value&#xff09;的主要区别在于它们处理类型转换不成功时的行为和适用场景&#xff1a; 1.强制类型转换 使用语法&#xff1a;Type variable (Type)…

Python基础知识:整理7 字典的定义及其相关操作

1 字典的定义 # 1. 字典的定义 # 定义字典的字面量 # {key: value, key: value, ......, key: value}# 定义字典变量 # my_dict {key: value, key: value, ......, key: value}# 定义空字典 # my_dict {} # my_dict dict()定义重复Key的字典 my_dict1 {"张三": …

基于JavaWeb+SSM+Vue四六级词汇微信小程序系统的设计和实现

基于JavaWebSSMVue四六级词汇微信小程序系统的设计和实现 源码获取入口KaiTi 报告Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告 &#xff08;1&#xff09;课题背景 伴随着社会的快速发展, 现代社…

sql查看指定时间段的数据

要查看指定时间段的数据&#xff0c;您可以使用SQL中的WHERE子句来过滤日期或时间列&#xff0c;以仅选择在指定时间段内的行。以下是一个示例查询&#xff0c;假设您有一个名为table_name的表&#xff0c;其中包含一个名为date_column的日期列&#xff1a; SELECT * FROM tab…

海康威视校园招聘笔试题

1、10、10、4、4四个数&#xff0c;怎么算出24点&#xff1f;(10*10-4)/424 2、下列表达式在32位机器编译环境下的值&#xff08;&#xff09; [cpp] view plaincopyprint? class A { }; class B { public: B(); virtual ~B(); }; class C { private…

LINUX常见问题之oom kill

一、OOM含义 OOM(Out Of Memory)机制为Linux内核中一种自我保护机制&#xff0c;当系统分配不出内存时(触发条件)会触发这个机制&#xff0c;由系统在已有进程中挑选一个占用内存较多&#xff0c;回收内存收益最大的进程杀掉来释放内存。 Linux下允许程序申请比系统可用内存更…

2024年杭州电子科技大学843信号与系统考研大纲,真题,参考书,杭电843,信息与通信

杭电 杭州电子科技大学843考研信号与系统大纲&#xff0c;真题&#xff0c;参考书&#xff0c;博睿泽信息通信考研论坛。 杭州电子科技大学 全国硕士研究生招生考试业务课考试大纲 考试科目名称&#xff1a;信号与系统 科目代码&#xff1a;843 一、信号与系统概述 1、掌握连续…

Nginx location 配置 - Part 2

接上文 链接: Nginx 简介和入门 - part1 上文 我们简单地在 nginx 创建了3个虚拟主机&#xff0c; 虽然这个3个主机都是用占用80端口 但是我们可以用不同的域名来实现区分访问3台虚拟主机。 但是&#xff0c; 实际项目上&#xff0c; 我们更加多地会使用location 配置而不是…

机器学习-线性回归实践

目标&#xff1a;使用Sklearn、numpy模块实现展现数据预处理、线性拟合、得到拟合模型&#xff0c;展现预测值与目标值&#xff0c;展现梯度下降&#xff1b; 一、导入模块 import numpy as np np.set_printoptions(precision2) from sklearn.linear_model import LinearRegr…

JVM主要的几种垃圾回收算法

1、Java 为什么要实现自动内存管理 &#xff1f; 简化开发过程&#xff1a;通过内存自动管理可以避免手动分配和释放内存的麻烦&#xff0c;减少了内存泄漏和内存错误的风险&#xff0c;让研发能更专注于业务逻辑&#xff0c;不必纠结于内存管理的细节。 提高开发效率&#xff…

vite 搭建vue3 TS项目初始框架

目录 仓库地址&#xff1a; 一.搭建项目 1.安装 Vite&#xff1a; 2.创建 Vue 3 项目&#xff1a; 3.进入项目目录&#xff1a; 4.安装依赖&#xff1a; 5.运行项目&#xff1a; 6.流程实操 二.修改项目结构&#xff0c;显示自定义的页面 1.整理静态样式文件 1.1.在 sr…

Dell 机架式服务器 - 高级定制服务

Dell 机架式服务器 - 高级定制服务 1. Dell Technologies2. 机架式服务器 - 高级定制服务2.1. Servers & Storage (服务器及存储) -> Servers2.2. Rack Servers (机架式服务器)2.3. Shop2.4. PowerEdge Rack Servers (PowerEdge 机架式服务器)2.5. PowerEdge R760 Rack …

一些常用源分享

pip源 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学&#xff1a;http://pypi.hustunique.com/ 山东理工大学&#xff1a;h…

编译原理期末大题步骤——例题

一、预测分析方法步骤 提取左公因子&#xff0c;消除左递归判断文法是否为LL(1)文法若是&#xff0c;构造预测分析表&#xff1b;否则&#xff0c;不能进行分析。根据预测分析表对输入串进行分析 例子&#xff1a; 文法G[E]&#xff1a; …

mysql进阶-视图

目录 1. 用途 2. 语法 2.1 创建或替换视图 2.2 修改视图 2.3 查看视图&#xff1a; 2.4 删除视图&#xff1a; 3. 其他 3.1 操作视图 3.2 迁移数据库 1. 用途 视图可以理解为一个复杂查询的简称&#xff0c;它可以帮助我们简化查询&#xff0c;主要用于报表查询:例如…

DataFrame详解

清洗相关的API 清洗相关的API: 1.去重API: dropDupilcates 2.删除缺失值API: dropna 3.替换缺失值API: fillna 去重API: dropDupilcates dropDuplicates(subset):删除重复数据 1.用来删除重复数据,如果没有指定参数subset,比对行中所有字段内容,如果全部相同,则认为是重复数据,…

Hyperledger Fabric 自动发现网络信息 discover 工具使用

客户端要往 Fabric 网络中发送请求&#xff0c;首先需要知道网络的相关信息&#xff0c;如网络中成员组织信息、背书节点的地址、链码安装信息等。 在 Fabric v1.2.0 版本之前&#xff0c;这些信息需要调用者手动指定&#xff0c;容易出错&#xff1b;另外&#xff0c;当网络中…

拼多多API:电商智能化发展的强大引擎

拼多多API&#xff1a;电商智能化发展的强大引擎 随着互联网的快速发展和数字化转型的加速&#xff0c;电商行业正面临着前所未有的机遇与挑战。在这个背景下&#xff0c;拼多多API作为电商智能化发展的强大引擎&#xff0c;正发挥着越来越重要的作用。本文将探讨拼多多API如何…