| | |
| | | <template> |
| | | <el-form size="large" class="login-content-form"> |
| | | <el-form-item class="login-animation1"> |
| | | <el-form size="large" ref="dialogFormRef" :model="state.ruleForm" :rules="formRules" class="login-content-form"> |
| | | <el-form-item class="login-animation1" prop="userName"> |
| | | <el-input text :placeholder="$t('message.mobile.placeholder1')" v-model="state.ruleForm.userName" clearable autocomplete="off"> |
| | | <template #prefix> |
| | | <i class="iconfont icon-dianhua el-input__icon"></i> |
| | | <i class="myiconfont icon-dianhua el-input__icon"></i> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item class="login-animation2"> |
| | | <el-form-item class="login-animation2" prop="code"> |
| | | <el-col :span="15"> |
| | | <el-input text maxlength="4" :placeholder="$t('message.mobile.placeholder2')" v-model="state.ruleForm.code" clearable autocomplete="off"> |
| | | <el-input |
| | | text |
| | | maxlength="4" |
| | | :placeholder="$t('message.mobile.placeholder2')" |
| | | v-model="state.ruleForm.code" |
| | | clearable |
| | | autocomplete="off" |
| | | > |
| | | <template #prefix> |
| | | <el-icon class="el-input__icon"><ele-Position /></el-icon> |
| | | </template> |
| | |
| | | </el-col> |
| | | <el-col :span="1"></el-col> |
| | | <el-col :span="8"> |
| | | <el-button v-waves class="login-content-code">{{ $t('message.mobile.codeText') }}</el-button> |
| | | <el-button v-waves class="login-content-code" @click="sendSMS">{{ sendCodeMsg }}</el-button> |
| | | </el-col> |
| | | </el-form-item> |
| | | <el-form-item class="login-animation3"> |
| | |
| | | <span>{{ $t('message.mobile.btnText') }}</span> |
| | | </el-button> |
| | | </el-form-item> |
| | | <div class="font12 mt30 login-animation4 login-msg">{{ $t('message.mobile.msgText') }}</div> |
| | | <!-- <div class="font12 mt30 login-animation4 login-msg">{{ $t('message.mobile.msgText') }}</div> --> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <script setup lang="ts" name="loginMobile"> |
| | | import { reactive } from 'vue'; |
| | | import { FormInstance, FormRules } from 'element-plus'; |
| | | import { reactive, ref } from 'vue'; |
| | | import { verifyPhone } from '/@/utils/toolsValidate'; |
| | | import { loginVerifyMessage } from '/@/api/ai/user'; |
| | | import { computed } from 'vue'; |
| | | |
| | | // 定义变量内容 |
| | | const state = reactive({ |
| | | ruleForm: { |
| | | userName: '', |
| | | code: '', |
| | | countNum: null, |
| | | countTimer: null, |
| | | }, |
| | | }); |
| | | |
| | | const validatePhoneNum = (_rule: any, value: any, callback: any) => { |
| | | if (!value) { |
| | | callback('请输入手机号'); |
| | | } else if (!verifyPhone(value)) { |
| | | callback(new Error('请输入正确的手机号')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | const formRules = ref<FormRules>({ |
| | | code: [{ required: true, message: '请输入验证码', trigger: 'blur' }], |
| | | userName: [{ required: true, validator: validatePhoneNum, trigger: 'blur' }], |
| | | }); |
| | | function stopCount() { |
| | | state.ruleForm.countNum = null; |
| | | clearInterval(state.ruleForm.countTimer); |
| | | } |
| | | |
| | | const hasSended = computed(() => state.ruleForm.countNum !== null); |
| | | const sendCodeMsg = computed(() => (hasSended ? '获取验证码' : `${state.ruleForm.countNum} 秒后重试`)); |
| | | function startCount() { |
| | | stopCount(); |
| | | state.ruleForm.countNum = 60; |
| | | state.ruleForm.countTimer = setInterval(() => { |
| | | if (state.ruleForm.countNum === 0) { |
| | | state.ruleForm.countNum = null; |
| | | clearInterval(state.ruleForm.countTimer); |
| | | return; |
| | | } |
| | | state.ruleForm.countNum--; |
| | | }, 1000); |
| | | } |
| | | |
| | | const dialogFormRef = ref<FormInstance>(null); |
| | | |
| | | const sendSMS = async () => { |
| | | if (state.ruleForm.countNum !== null) { |
| | | return; |
| | | } |
| | | const valid = await dialogFormRef.value.validateField(['userName']).catch(() => {}); |
| | | if (!valid) return; |
| | | |
| | | state.ruleForm.code = ''; |
| | | |
| | | await loginVerifyMessage( |
| | | { |
| | | phone: state.ruleForm.userName, |
| | | }, |
| | | { |
| | | noAuth: true, |
| | | } |
| | | ); |
| | | |
| | | startCount(); |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |