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

本文介绍了在Vue应用中处理用户登录过程的函数handleLogin,包括表单验证、登录数据处理、验证码获取以及路由跳转逻辑。着重展示了如何使用axios进行API调用获取验证码并更新登录表单输入。
摘要由CSDN通过智能技术生成

//记住要跳转的地址

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>

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值