update
init
This commit is contained in:
@@ -0,0 +1,292 @@
|
||||
<template>
|
||||
<div class="aui-content">
|
||||
<div class="aui-container">
|
||||
<div class="aui-form">
|
||||
<div class="aui-image">
|
||||
<div class="aui-image-text">
|
||||
<img :src="adTextImg" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="aui-formBox">
|
||||
<div class="aui-formWell">
|
||||
<div class="aui-step-box">
|
||||
<div class="aui-step-item" :class="activeKey === 1 ? 'activeStep' : ''">
|
||||
<div class="aui-step-tags">
|
||||
<em>1</em>
|
||||
<p>{{ t('sys.login.authentication') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="aui-step-item" :class="activeKey === 2 ? 'activeStep' : ''">
|
||||
<div class="aui-step-tags">
|
||||
<em>2</em>
|
||||
<p>{{ t('sys.login.resetLoginPassword') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="aui-step-item" :class="activeKey === 3 ? 'activeStep' : ''">
|
||||
<div class="aui-step-tags">
|
||||
<em>3</em>
|
||||
<p>{{ t('sys.login.resetSuccess') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="" style="height: 230px; position: relative">
|
||||
<a-form ref="formRef" :model="formData" v-if="activeKey === 1">
|
||||
<!-- 身份验证 begin -->
|
||||
<div class="aui-account aui-account-line aui-forgot">
|
||||
<a-form-item>
|
||||
<div class="aui-input-line">
|
||||
<a-input type="text" :placeholder="t('sys.login.mobile')" v-model:value="formData.mobile" />
|
||||
</div>
|
||||
</a-form-item>
|
||||
<div class="aui-input-line">
|
||||
<a-form-item>
|
||||
<a-input type="text" :placeholder="t('sys.login.smsCode')" v-model:value="formData.smscode" />
|
||||
</a-form-item>
|
||||
<div v-if="showInterval" class="aui-code-line" @click="getLoginCode">{{
|
||||
t('component.countdown.normalText')
|
||||
}}</div>
|
||||
<div v-else class="aui-code-line">{{ t('component.countdown.sendText', [unref(timeRuning)]) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 身份验证 end -->
|
||||
</a-form>
|
||||
<a-form ref="pwdFormRef" :model="pwdFormData" v-else-if="activeKey === 2">
|
||||
<!-- 重置密码 begin -->
|
||||
<div class="aui-account aui-account-line aui-forgot">
|
||||
<a-form-item>
|
||||
<div class="aui-input-line">
|
||||
<a-input
|
||||
type="password"
|
||||
:placeholder="t('sys.login.passwordPlaceholder')"
|
||||
v-model:value="pwdFormData.password"
|
||||
/>
|
||||
</div>
|
||||
</a-form-item>
|
||||
<a-form-item>
|
||||
<div class="aui-input-line">
|
||||
<a-input
|
||||
type="password"
|
||||
:placeholder="t('sys.login.confirmPassword')"
|
||||
v-model:value="pwdFormData.confirmPassword"
|
||||
/>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<!-- 重置密码 end -->
|
||||
</a-form>
|
||||
<!-- 重置成功 begin -->
|
||||
<div class="aui-success" v-else>
|
||||
<div class="aui-success-icon">
|
||||
<img :src="successImg" />
|
||||
</div>
|
||||
<h3>恭喜您,重置密码成功!</h3>
|
||||
</div>
|
||||
<!-- 重置成功 end -->
|
||||
</div>
|
||||
<div class="aui-formButton" style="padding-bottom: 40px">
|
||||
<div class="aui-flex" v-if="activeKey === 1 || activeKey === 2">
|
||||
<a class="aui-link-login aui-flex-box" @click="nextStepClick">{{ t('sys.login.nextStep') }}</a>
|
||||
</div>
|
||||
<div class="aui-flex" v-else>
|
||||
<a class="aui-linek-code aui-flex-box" @click="toLogin">{{ t('sys.login.goToLogin') }}</a>
|
||||
</div>
|
||||
<div class="aui-flex">
|
||||
<a class="aui-linek-code aui-flex-box" @click="goBack"> {{ t('sys.login.backSignIn') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" name="mini-forgotpad" setup>
|
||||
import { reactive, ref, toRaw, unref } from 'vue';
|
||||
import { useI18n } from '/@/hooks/web/useI18n';
|
||||
import { SmsEnum, useFormRules, useFormValid, useLoginState } from '/@/views/sys/login/useLogin';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import { getCaptcha, passwordChange, phoneVerify } from '/@/api/sys/user';
|
||||
import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
|
||||
import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
|
||||
import successImg from '/@/assets/loginmini/icon/icon-success.png';
|
||||
|
||||
//下一步控制
|
||||
const activeKey = ref<number>(1);
|
||||
const { t } = useI18n();
|
||||
const { handleBackLogin } = useLoginState();
|
||||
const { notification, createMessage, createErrorModal } = useMessage();
|
||||
//是否显示获取验证码
|
||||
const showInterval = ref<boolean>(true);
|
||||
//60s
|
||||
const timeRuning = ref<number>(60);
|
||||
//定时器
|
||||
const timer = ref<any>(null);
|
||||
const formRef = ref();
|
||||
const pwdFormRef = ref();
|
||||
//账号数据
|
||||
const accountInfo = reactive<any>({});
|
||||
//手机号表单
|
||||
const formData = reactive({
|
||||
mobile: '',
|
||||
smscode: '',
|
||||
});
|
||||
//密码表单
|
||||
const pwdFormData = reactive<any>({
|
||||
password: '',
|
||||
confirmPassword: '',
|
||||
});
|
||||
const emit = defineEmits(['go-back', 'success', 'register']);
|
||||
|
||||
/**
|
||||
* 下一步
|
||||
*/
|
||||
async function handleNext() {
|
||||
if (!formData.mobile) {
|
||||
createMessage.warn(t('sys.login.mobilePlaceholder'));
|
||||
return;
|
||||
}
|
||||
if (!formData.smscode) {
|
||||
createMessage.warn(t('sys.login.smsPlaceholder'));
|
||||
return;
|
||||
}
|
||||
const resultInfo = await phoneVerify(
|
||||
toRaw({
|
||||
phone: formData.mobile,
|
||||
smscode: formData.smscode,
|
||||
})
|
||||
);
|
||||
if (resultInfo.success) {
|
||||
Object.assign(accountInfo, {
|
||||
username: resultInfo.result.username,
|
||||
phone: formData.mobile,
|
||||
smscode: formData.smscode,
|
||||
});
|
||||
activeKey.value = 2;
|
||||
setTimeout(() => {
|
||||
pwdFormRef.value.resetFields();
|
||||
}, 300);
|
||||
} else {
|
||||
notification.error({
|
||||
message: '错误提示',
|
||||
description: resultInfo.message || t('sys.api.networkExceptionMsg'),
|
||||
duration: 3,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 完成修改密码
|
||||
*/
|
||||
async function finishedPwd() {
|
||||
if (!pwdFormData.password) {
|
||||
createMessage.warn(t('sys.login.passwordPlaceholder'));
|
||||
return;
|
||||
}
|
||||
if (!pwdFormData.confirmPassword) {
|
||||
createMessage.warn(t('sys.login.confirmPassword'));
|
||||
return;
|
||||
}
|
||||
if (pwdFormData.password !== pwdFormData.confirmPassword) {
|
||||
createMessage.warn(t('sys.login.diffPwd'));
|
||||
return;
|
||||
}
|
||||
const resultInfo = await passwordChange(
|
||||
toRaw({
|
||||
username: accountInfo.username,
|
||||
password: pwdFormData.password,
|
||||
smscode: accountInfo.smscode,
|
||||
phone: accountInfo.phone,
|
||||
})
|
||||
);
|
||||
if (resultInfo.success) {
|
||||
accountInfo.password = pwdFormData.password;
|
||||
//修改密码
|
||||
activeKey.value = 3;
|
||||
} else {
|
||||
//错误提示
|
||||
createErrorModal({
|
||||
title: t('sys.api.errorTip'),
|
||||
content: resultInfo.message || t('sys.api.networkExceptionMsg'),
|
||||
});
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 下一步
|
||||
*/
|
||||
function nextStepClick() {
|
||||
if (unref(activeKey) == 1) {
|
||||
handleNext();
|
||||
} else if (unref(activeKey) == 2) {
|
||||
finishedPwd();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 去登录
|
||||
*/
|
||||
function toLogin() {
|
||||
emit('success', { username: accountInfo.username, password: accountInfo.password });
|
||||
initForm();
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回
|
||||
*/
|
||||
function goBack() {
|
||||
emit('go-back');
|
||||
initForm();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取手机验证码
|
||||
*/
|
||||
async function getLoginCode() {
|
||||
if (!formData.mobile) {
|
||||
createMessage.warn(t('sys.login.mobilePlaceholder'));
|
||||
return;
|
||||
}
|
||||
const result = await getCaptcha({ mobile: formData.mobile, smsmode: SmsEnum.FORGET_PASSWORD });
|
||||
if (result) {
|
||||
const TIME_COUNT = 60;
|
||||
if (!unref(timer)) {
|
||||
timeRuning.value = TIME_COUNT;
|
||||
showInterval.value = false;
|
||||
timer.value = setInterval(() => {
|
||||
if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
|
||||
timeRuning.value = timeRuning.value - 1;
|
||||
} else {
|
||||
showInterval.value = true;
|
||||
clearInterval(unref(timer));
|
||||
timer.value = null;
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化表单
|
||||
*/
|
||||
function initForm() {
|
||||
activeKey.value = 1;
|
||||
Object.assign(formData, { phone: '', smscode: '' });
|
||||
Object.assign(pwdFormData, { password: '', confirmPassword: '' });
|
||||
Object.assign(accountInfo, {});
|
||||
if (unref(timer)) {
|
||||
clearInterval(unref(timer));
|
||||
timer.value = null;
|
||||
showInterval.value = true;
|
||||
}
|
||||
setTimeout(() => {
|
||||
formRef.value.resetFields();
|
||||
}, 300);
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
initForm,
|
||||
});
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
@import '/@/assets/loginmini/style/home.less';
|
||||
@import '/@/assets/loginmini/style/base.less';
|
||||
</style>
|
||||
Reference in New Issue
Block a user