feat: 修改密码静态路由目录调整
This commit is contained in:
@@ -1,219 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, computed } from 'vue';
|
||||
import { message } from 'ant-design-vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { getEmailCode, resetPassword, updatePasswordByOld } from '@/service/api/auth';
|
||||
import { useRouterPush } from '@/hooks/common/router';
|
||||
import { useFormRules } from '@/hooks/common/form';
|
||||
|
||||
const { t } = useI18n();
|
||||
const { routerPushByKey } = useRouterPush();
|
||||
|
||||
// 修改方式
|
||||
const resetType = ref('email'); // 'email' | 'password'
|
||||
|
||||
// 邮箱验证表单数据
|
||||
const emailFormData = reactive({
|
||||
email: '',
|
||||
code: '',
|
||||
password: '',
|
||||
confirmPassword: ''
|
||||
});
|
||||
|
||||
// 原密码表单数据
|
||||
const pwdFormData = reactive({
|
||||
oldPassword: '',
|
||||
newPassword: '',
|
||||
confirmPassword: ''
|
||||
});
|
||||
|
||||
// 验证码按钮状态
|
||||
const codeButtonLoading = ref(false);
|
||||
const countdown = ref(0);
|
||||
const timer = ref<NodeJS.Timeout>();
|
||||
|
||||
// 邮箱验证表单规则
|
||||
const emailRules = computed(() => {
|
||||
const { formRules, createConfirmPwdRule } = useFormRules();
|
||||
|
||||
return {
|
||||
email: formRules.email,
|
||||
code: formRules.code,
|
||||
password: formRules.pwd,
|
||||
confirmPassword: createConfirmPwdRule(emailFormData.password)
|
||||
};
|
||||
});
|
||||
|
||||
// 原密码表单规则
|
||||
const pwdRules = computed(() => {
|
||||
const { formRules, createConfirmPwdRule } = useFormRules();
|
||||
|
||||
return {
|
||||
oldPassword: formRules.pwd,
|
||||
newPassword: formRules.pwd,
|
||||
confirmPassword: createConfirmPwdRule(pwdFormData.newPassword)
|
||||
};
|
||||
});
|
||||
|
||||
// 获取验证码
|
||||
const handleGetCode = async () => {
|
||||
try {
|
||||
if (!emailFormData.email) {
|
||||
message.error(t('page.resetPwd.emailRequired'));
|
||||
return;
|
||||
}
|
||||
|
||||
codeButtonLoading.value = true;
|
||||
await getEmailCode(emailFormData.email);
|
||||
message.success(t('page.resetPwd.codeSent'));
|
||||
|
||||
// 开始倒计时
|
||||
countdown.value = 60;
|
||||
timer.value = setInterval(() => {
|
||||
if (countdown.value > 0) {
|
||||
countdown.value--;
|
||||
} else {
|
||||
clearInterval(timer.value);
|
||||
}
|
||||
}, 1000);
|
||||
} catch (error) {
|
||||
console.error('Failed to get code:', error);
|
||||
} finally {
|
||||
codeButtonLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// 提交表单
|
||||
const emailFormRef = ref();
|
||||
const pwdFormRef = ref();
|
||||
|
||||
const handleSubmit = async () => {
|
||||
try {
|
||||
if (resetType.value === 'email') {
|
||||
await emailFormRef.value?.validate();
|
||||
const hide = message.loading(t('common.loading'), 0);
|
||||
await resetPassword({
|
||||
email: emailFormData.email,
|
||||
code: emailFormData.code,
|
||||
password: emailFormData.password
|
||||
});
|
||||
hide();
|
||||
} else {
|
||||
await pwdFormRef.value?.validate();
|
||||
const hide = message.loading(t('common.loading'), 0);
|
||||
await updatePasswordByOld({
|
||||
oldPassword: pwdFormData.oldPassword,
|
||||
newPassword: pwdFormData.newPassword
|
||||
});
|
||||
hide();
|
||||
}
|
||||
|
||||
message.success(t('page.resetPwd.success'));
|
||||
routerPushByKey('login');
|
||||
} catch (error) {
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="flex-col-stretch items-center justify-center min-h-500px p-24px">
|
||||
<div class="w-full max-w-400px">
|
||||
<h2 class="text-24px font-bold mb-24px text-center">{{ t('page.resetPwd.title') }}</h2>
|
||||
|
||||
<!-- 修改方式选择 -->
|
||||
<a-radio-group v-model:value="resetType" class="mb-16px">
|
||||
<a-radio value="email">{{ t('page.resetPwd.byEmail') }}</a-radio>
|
||||
<a-radio value="password">{{ t('page.resetPwd.byPassword') }}</a-radio>
|
||||
</a-radio-group>
|
||||
|
||||
<!-- 邮箱验证表单 -->
|
||||
<a-form
|
||||
v-if="resetType === 'email'"
|
||||
ref="emailFormRef"
|
||||
:model="emailFormData"
|
||||
:rules="emailRules"
|
||||
layout="vertical"
|
||||
>
|
||||
<a-form-item name="email" :label="t('page.resetPwd.email')">
|
||||
<div class="flex gap-8px">
|
||||
<a-input
|
||||
v-model:value="emailFormData.email"
|
||||
:placeholder="t('page.resetPwd.emailPlaceholder')"
|
||||
/>
|
||||
<a-button
|
||||
:loading="codeButtonLoading"
|
||||
:disabled="countdown > 0"
|
||||
@click="handleGetCode"
|
||||
>
|
||||
{{ countdown > 0 ? `${countdown}s` : t('page.resetPwd.getCode') }}
|
||||
</a-button>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item name="code" :label="t('page.resetPwd.code')">
|
||||
<a-input
|
||||
v-model:value="emailFormData.code"
|
||||
:placeholder="t('page.resetPwd.codePlaceholder')"
|
||||
/>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item name="password" :label="t('page.resetPwd.newPassword')">
|
||||
<a-input-password
|
||||
v-model:value="emailFormData.password"
|
||||
:placeholder="t('page.resetPwd.passwordPlaceholder')"
|
||||
/>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item name="confirmPassword" :label="t('page.resetPwd.confirmPassword')">
|
||||
<a-input-password
|
||||
v-model:value="emailFormData.confirmPassword"
|
||||
:placeholder="t('page.resetPwd.confirmPasswordPlaceholder')"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
|
||||
<!-- 原密码表单 -->
|
||||
<a-form
|
||||
v-else
|
||||
ref="pwdFormRef"
|
||||
:model="pwdFormData"
|
||||
:rules="pwdRules"
|
||||
layout="vertical"
|
||||
>
|
||||
<a-form-item name="oldPassword" :label="t('page.resetPwd.oldPassword')">
|
||||
<a-input-password
|
||||
v-model:value="pwdFormData.oldPassword"
|
||||
:placeholder="t('page.resetPwd.oldPasswordPlaceholder')"
|
||||
/>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item name="newPassword" :label="t('page.resetPwd.newPassword')">
|
||||
<a-input-password
|
||||
v-model:value="pwdFormData.newPassword"
|
||||
:placeholder="t('page.resetPwd.passwordPlaceholder')"
|
||||
/>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item name="confirmPassword" :label="t('page.resetPwd.confirmPassword')">
|
||||
<a-input-password
|
||||
v-model:value="pwdFormData.confirmPassword"
|
||||
:placeholder="t('page.resetPwd.confirmPasswordPlaceholder')"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
|
||||
<!-- 提交按钮 -->
|
||||
<a-form-item>
|
||||
<a-button type="primary" block @click="handleSubmit">
|
||||
{{ t('common.submit') }}
|
||||
</a-button>
|
||||
</a-form-item>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.max-w-400px {
|
||||
max-width: 400px;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user