|
@@ -2,7 +2,7 @@
|
|
|
<div class="forgot-password-page">
|
|
<div class="forgot-password-page">
|
|
|
<!-- 顶部导航 -->
|
|
<!-- 顶部导航 -->
|
|
|
<van-nav-bar
|
|
<van-nav-bar
|
|
|
- :title="$t('auth.resetPassword')"
|
|
|
|
|
|
|
+ :title="$t('auth.forgotPasswordTitle')"
|
|
|
left-arrow
|
|
left-arrow
|
|
|
@click-left="goBack"
|
|
@click-left="goBack"
|
|
|
/>
|
|
/>
|
|
@@ -10,7 +10,7 @@
|
|
|
<!-- 表单 -->
|
|
<!-- 表单 -->
|
|
|
<div class="form-section">
|
|
<div class="form-section">
|
|
|
<div class="form-content">
|
|
<div class="form-content">
|
|
|
- <div class="input-group">
|
|
|
|
|
|
|
+ <div class="input-group" v-if="resetType === 'phone'">
|
|
|
<van-field
|
|
<van-field
|
|
|
v-model="form.phone"
|
|
v-model="form.phone"
|
|
|
type="tel"
|
|
type="tel"
|
|
@@ -25,6 +25,15 @@
|
|
|
</template>
|
|
</template>
|
|
|
</van-field>
|
|
</van-field>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <div class="input-group" v-else>
|
|
|
|
|
+ <van-field
|
|
|
|
|
+ v-model="form.email"
|
|
|
|
|
+ type="text"
|
|
|
|
|
+ :placeholder="$t('auth.pleaseInputEmail')"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ left-icon="envelop-o"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
|
|
|
<div class="input-group">
|
|
<div class="input-group">
|
|
|
<van-field
|
|
<van-field
|
|
@@ -102,14 +111,16 @@
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
import { ref, reactive } from 'vue';
|
|
import { ref, reactive } from 'vue';
|
|
|
-import { useRouter } from 'vue-router';
|
|
|
|
|
|
|
+import { useRouter, useRoute } from 'vue-router';
|
|
|
import { useI18n } from 'vue-i18n';
|
|
import { useI18n } from 'vue-i18n';
|
|
|
import { toast } from 'vue-sonner';
|
|
import { toast } from 'vue-sonner';
|
|
|
import { requestSendCode, requestResetPassword } from '@/api/auth';
|
|
import { requestSendCode, requestResetPassword } from '@/api/auth';
|
|
|
|
|
|
|
|
const { t } = useI18n();
|
|
const { t } = useI18n();
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
|
|
+const route = useRoute();
|
|
|
|
|
|
|
|
|
|
+const resetType = ref((route.query.type as string) || 'phone');
|
|
|
const loading = ref(false);
|
|
const loading = ref(false);
|
|
|
const showPassword = ref(false);
|
|
const showPassword = ref(false);
|
|
|
const showConfirmPassword = ref(false);
|
|
const showConfirmPassword = ref(false);
|
|
@@ -119,6 +130,7 @@ const countdown = ref(0);
|
|
|
|
|
|
|
|
const form = reactive({
|
|
const form = reactive({
|
|
|
phone: '',
|
|
phone: '',
|
|
|
|
|
+ email: '',
|
|
|
code: '',
|
|
code: '',
|
|
|
newPassword: '',
|
|
newPassword: '',
|
|
|
confirmPassword: ''
|
|
confirmPassword: ''
|
|
@@ -142,18 +154,22 @@ const goBack = () => {
|
|
|
|
|
|
|
|
// 发送验证码
|
|
// 发送验证码
|
|
|
const sendCode = async () => {
|
|
const sendCode = async () => {
|
|
|
- if (!form.phone) {
|
|
|
|
|
- toast.error(t('auth.pleaseInputPhone'));
|
|
|
|
|
|
|
+ const account = resetType.value === 'phone' ? form.phone : form.email;
|
|
|
|
|
+ if (!account) {
|
|
|
|
|
+ toast.error(t(resetType.value === 'phone' ? 'auth.pleaseInputPhone' : 'auth.pleaseInputEmail'));
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- const res = await requestSendCode({
|
|
|
|
|
- type: 'phone',
|
|
|
|
|
- account: form.phone,
|
|
|
|
|
- areaCode: areaCode.value,
|
|
|
|
|
|
|
+ const params: any = {
|
|
|
|
|
+ type: resetType.value,
|
|
|
|
|
+ account,
|
|
|
scene: 'reset'
|
|
scene: 'reset'
|
|
|
- });
|
|
|
|
|
|
|
+ };
|
|
|
|
|
+ if (resetType.value === 'phone') {
|
|
|
|
|
+ params.areaCode = areaCode.value;
|
|
|
|
|
+ }
|
|
|
|
|
+ const res = await requestSendCode(params);
|
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
|
toast.success(t('common.success') || '验证码已发送');
|
|
toast.success(t('common.success') || '验证码已发送');
|
|
|
countdown.value = 60;
|
|
countdown.value = 60;
|
|
@@ -171,8 +187,9 @@ const sendCode = async () => {
|
|
|
|
|
|
|
|
// 提交重置密码
|
|
// 提交重置密码
|
|
|
const handleSubmit = async () => {
|
|
const handleSubmit = async () => {
|
|
|
- if (!form.phone) {
|
|
|
|
|
- toast.error(t('auth.pleaseInputPhone'));
|
|
|
|
|
|
|
+ const account = resetType.value === 'phone' ? form.phone : form.email;
|
|
|
|
|
+ if (!account) {
|
|
|
|
|
+ toast.error(t(resetType.value === 'phone' ? 'auth.pleaseInputPhone' : 'auth.pleaseInputEmail'));
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
if (!form.code) {
|
|
if (!form.code) {
|
|
@@ -194,13 +211,16 @@ const handleSubmit = async () => {
|
|
|
|
|
|
|
|
loading.value = true;
|
|
loading.value = true;
|
|
|
try {
|
|
try {
|
|
|
- const res = await requestResetPassword({
|
|
|
|
|
- type: 'phone',
|
|
|
|
|
- account: form.phone,
|
|
|
|
|
|
|
+ const params: any = {
|
|
|
|
|
+ type: resetType.value,
|
|
|
|
|
+ account,
|
|
|
code: form.code,
|
|
code: form.code,
|
|
|
- newPassword: form.newPassword,
|
|
|
|
|
- areaCode: areaCode.value
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ newPassword: form.newPassword
|
|
|
|
|
+ };
|
|
|
|
|
+ if (resetType.value === 'phone') {
|
|
|
|
|
+ params.areaCode = areaCode.value;
|
|
|
|
|
+ }
|
|
|
|
|
+ const res = await requestResetPassword(params);
|
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
|
toast.success(t('auth.resetSuccess') || '密码重置成功');
|
|
toast.success(t('auth.resetSuccess') || '密码重置成功');
|
|
|
router.replace('/login');
|
|
router.replace('/login');
|