手机号验证码登录

点击获取验证码登录---点击获取验证码的时候要对手机号进行校验点击登录按钮的时候也要对表单进行一个校验

静态页面

1、静态页面代码---样式自己写1

<template>
  <!-- #ifdef APP || H5 -->

  <uni-forms class="login-form" :rules="mobileRules" ref="form" :model="formData">
    <view class="title">
      <text>手机验证码登录</text>
    </view>
    <uni-forms-item name="mobile">
      <input type="text" placeholder="请输入手机号" v-model="formData.mobile" class="uni-input-input" placeholder-style="color: #818181" />
    </uni-forms-item>
    <uni-forms-item name="code">
      <input type="text" placeholder="请输入验证码" v-model="formData.code" class="uni-input-input" placeholder-style="color: #818181" />
      <text class="text-button" @click="getCode">{{ time == 5 ? '获取验证码' : `${time}秒后重新获取` }}</text>
    </uni-forms-item>
    <button type="primary" @click="submitButton" class="submitButton">登录</button>
  </uni-forms>
  <!-- #endif -->
</template>

2、定义一个手机号和验证码的表单 && 校验规则

<script setup>
import { ref } from 'vue';

const formData = ref({
  mobile: '',
  code: ''
});

// 校验规则
const mobileRules = ref({
  mobile: {
    rules: [
      { required: true, errorMessage: '请输入手机号' },
      { pattern: /^1[3-9]\d{9}$/, errorMessage: '手机号格式不正确' }
    ]
  },
  code: {
    rules: [
      { required: true, errorMessage: '请输入验证码' },
      { pattern: '^\\d{6}$', errorMessage: '验证码格式不正确' }
    ]
  }
});
<script>

3、点击获取验证码的时候--- 对手机号进行校验----校验通过之后--进行倒计时---调接口----要把手机号的参数传给后台

<script setup>
const getCode = async () => {
  console.log('点击验证码', 1111);
  try {
    const mobile = formData.value.mobile;
    //点击---获取验证码--校验--手机号格式
    const mobileRegex = /^1[1-9]\d{9}$/;
    if (!mobileRegex.test(mobile)) {
      uni.showToast({
        title: '手机号码格式不正确',
        icon: 'none'
      });
      return;
    }

    if (time.value == 5) {
      // 调验证码接口
      const yzm = await login({ phoneNumber: formData.value.mobile });
      console.log('验证码', yzm);

      // 成功的提示
      if (yzm.code !== 500) {
        uni.showToast({
          title: yam.message,
          icon: 'success',
          duration: 2000
        });
      } else {
        uni.showToast({
          title: yzm.message,
          icon: 'none',
          duration: 2000
        });
      }

      let timer = setInterval(() => {
        time.value--;
        if (time.value == 0) {
          clearInterval(timer);
          time.value = 5;
          console.log('重置后的time', time.value);
        }
      }, 1000);
    } else {
      // uni.showToast({
      //   title: '请勿重复获取验证码',
      //   icon: 'none'
      // });
    }
  } catch (error) {
    uni.showToast({
      title: '验证码已发送',
      icon: 'none',
      duration: 2000
    });
  }
};
</script>

 

 

 

4、点击登录-- 调接口--传手机号和验证码两个参数

<script setup>
// 登录
const time = ref(5);
const form = ref();
import { useUserStore } from '@/stores/user.js';
// 存储token
const userStore = useUserStore();
// 点击登录按钮
const submitButton = async () => {
  console.log('点击登录', 1111);
  const formJy = await form.value.validate();
  if (formJy) {
    // 调登录按钮---->>接口--->把手机号和验证码传给后台
    const loginAPI = await loginButton({ phoneNumber: formData.value.mobile, verifyCode: formData.value.code });
    console.log('loginAPI,', loginAPI);

    if (loginAPI.code == 200) {
      // 保存token
      userStore.token = loginAPI.data.access_token;
      // console.log('userStore11', userStore.token);

      await uni.showToast({
        title: '登录成功',
        icon: 'success',
        duration: 1000
      });
      setTimeout(() => {
        uni.navigateTo({
          url: '/pages/index/index'
        });
      }, 1000);
    } else {
      uni.showToast({
        title: '登录失败',
        icon: 'none'
      });
    }
    console.log('登录接口--数据', loginAPI);
  } else {
    uni.showToast({
      title: '登录失败',
      icon: 'none'
    });
  }
};
</script>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值