You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<script setup lang="ts"> import { useI18n } from "vue-i18n"; import { ref, reactive } from "vue"; import Motion from "../utils/motion"; import { updateRules } from "../utils/rule"; import { message } from "@pureadmin/components"; import type { FormInstance } from "element-plus"; import { useVerifyCode } from "../utils/verifyCode"; import { $t, transformI18n } from "/@/plugins/i18n"; import { useUserStoreHook } from "/@/store/modules/user"; import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
const { t } = useI18n(); const loading = ref(false); const ruleForm = reactive({ phone: "", verifyCode: "", password: "", repeatPassword: "" }); const ruleFormRef = ref<FormInstance>(); const { isDisabled, text } = useVerifyCode(); const repeatPasswordRule = [ { validator: (rule, value, callback) => { if (value === "") { callback(new Error(transformI18n($t("login.passwordSureReg")))); } else if (ruleForm.password !== value) { callback(new Error(transformI18n($t("login.passwordDifferentReg")))); } else { callback(); } }, trigger: "blur" } ];
const onUpdate = async (formEl: FormInstance | undefined) => { loading.value = true; if (!formEl) return; await formEl.validate((valid, fields) => { if (valid) { // 模拟请求,需根据实际开发进行修改
setTimeout(() => { message.success(transformI18n($t("login.passwordUpdateReg"))); loading.value = false; }, 2000); } else { loading.value = false; return fields; } }); };
function onBack() { useVerifyCode().end(); useUserStoreHook().SET_CURRENTPAGE(0); } </script>
<template> <el-form ref="ruleFormRef" :model="ruleForm" :rules="updateRules" size="large" > <Motion> <el-form-item prop="phone"> <el-input clearable v-model="ruleForm.phone" :placeholder="t('login.phone')" :prefix-icon="useRenderIcon('iphone')" /> </el-form-item> </Motion>
<Motion :delay="100"> <el-form-item prop="verifyCode"> <div class="w-full flex justify-between"> <el-input clearable v-model="ruleForm.verifyCode" :placeholder="t('login.smsVerifyCode')" :prefix-icon=" useRenderIcon('ri:shield-keyhole-line', { online: true }) " /> <el-button :disabled="isDisabled" class="ml-2" @click="useVerifyCode().start(ruleFormRef, 'phone')" > {{ text.length > 0 ? text + t("login.info") : t("login.getVerifyCode") }} </el-button> </div> </el-form-item> </Motion>
<Motion :delay="150"> <el-form-item prop="password"> <el-input clearable show-password v-model="ruleForm.password" :placeholder="t('login.password')" :prefix-icon="useRenderIcon('lock')" /> </el-form-item> </Motion>
<Motion :delay="200"> <el-form-item :rules="repeatPasswordRule" prop="repeatPassword"> <el-input clearable show-password v-model="ruleForm.repeatPassword" :placeholder="t('login.sure')" :prefix-icon="useRenderIcon('lock')" /> </el-form-item> </Motion>
<Motion :delay="250"> <el-form-item> <el-button class="w-full" size="default" type="primary" :loading="loading" @click="onUpdate(ruleFormRef)" > {{ t("login.definite") }} </el-button> </el-form-item> </Motion>
<Motion :delay="300"> <el-form-item> <el-button class="w-full" size="default" @click="onBack"> {{ t("login.back") }} </el-button> </el-form-item> </Motion> </el-form> </template>
|