Skip to content

Commit a290664

Browse files
committed
feat: Add reset password (#123)
1 parent bc51ede commit a290664

File tree

7 files changed

+50
-23
lines changed

7 files changed

+50
-23
lines changed

mock/modules/user.mock.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,12 @@ export default defineMock([
4848
return builder(code)
4949
},
5050
},
51+
{
52+
url: '/api/user/reset-password',
53+
delay: 1000,
54+
body: () => {
55+
const res = true
56+
return builder(res)
57+
},
58+
},
5159
])

src/api/user.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,7 @@ export function getUserInfo() {
3030
export function getEmailCode(): Promise<any> {
3131
return request.get('/user/email-code')
3232
}
33+
34+
export function resetPassword(): Promise<any> {
35+
return request.post('/user/reset-password')
36+
}

src/locales/en-US.json

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,30 +46,31 @@
4646
"logout": "Sign Out",
4747
"email": "Email",
4848
"password": "Password",
49-
"pleaseEnterEmail;": "Please enter email",
49+
"pleaseEnterEmail": "Please enter email",
5050
"pleaseEnterPassword": "Please enter password",
5151
"sign-up": "Click to sign up",
52-
"forgot-password": "Forgot Password?"
52+
"forgot-password": "Forgot password?"
5353
},
5454
"forgot-password": {
5555
"email": "Email",
5656
"code": "Code",
5757
"password": "Password",
5858
"comfirmPassword": "Password again",
5959
"pleaseEnterEmail": "Please enter email",
60-
"pleaseEnterCode": "Please enter Code",
60+
"pleaseEnterCode": "Please enter code",
6161
"pleaseEnterPassword": "Please enter password",
6262
"pleaseEnterConfirmPassword": "Please enter password again",
63+
"passwordsDoNotMatch": "Passwords do not match",
6364
"confirm": "Confirm",
6465
"backToLogin": "Back to login",
6566
"getCode": "Get code",
66-
"gettingCode": "Getting Code",
67-
"sendCodeSuccess": "Sent, the code is"
68-
67+
"gettingCode": "Getting code",
68+
"sendCodeSuccess": "Sent, the code is",
69+
"passwordResetSuccee": "Password reset succeeded"
6970
},
7071
"settings": {
7172
"logout": "Sign Out",
72-
"currentVersion": "Current version",
73+
"currentVersion": "Current Version",
7374
"comfirmTitle": "Confirm Exit?"
7475
}
7576
}

src/locales/zh-CN.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,13 @@
6060
"pleaseEnterCode": "请输入验证码",
6161
"pleaseEnterPassword": "请输入密码",
6262
"pleaseEnterConfirmPassword": "请再次输入密码",
63+
"passwordsDoNotMatch": "两次输入的密码不一致",
6364
"confirm": "确认",
6465
"backToLogin": "返回登录",
6566
"getCode": "获取验证码",
6667
"gettingCode": "获取中",
67-
"sendCodeSuccess": "已发送,验证码为"
68+
"sendCodeSuccess": "已发送,验证码为",
69+
"passwordResetSuccee": "密码重置成功"
6870
},
6971
"settings": {
7072
"logout": "退出登录",

src/pages/forgot-password/index.vue

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script setup lang="ts">
2-
import { type RouteMap, useRouter } from 'vue-router'
2+
import { useRouter } from 'vue-router'
3+
import type { FieldRule } from 'vant'
34
import { useUserStore } from '@/stores'
45
56
const { t } = useI18n()
@@ -14,6 +15,8 @@ const postData = reactive({
1415
confirmPassword: '',
1516
})
1617
18+
const validatorPassword = (val: string) => val === postData.password
19+
1720
const rules = reactive({
1821
email: [
1922
{ required: true, message: t('forgot-password.pleaseEnterEmail') },
@@ -26,20 +29,20 @@ const rules = reactive({
2629
],
2730
confirmPassword: [
2831
{ required: true, message: t('forgot-password.pleaseEnterConfirmPassword') },
29-
],
32+
{ required: true, validator: validatorPassword, message: t('forgot-password.passwordsDoNotMatch') },
33+
] as FieldRule[],
3034
})
3135
32-
async function reset(values: any) {
36+
async function reset() {
3337
try {
3438
loading.value = true
35-
await userStore.login({ ...postData, ...values })
36-
const { redirect, ...othersQuery } = router.currentRoute.value.query
37-
router.push({
38-
name: (redirect as keyof RouteMap) || 'home',
39-
query: {
40-
...othersQuery,
41-
},
42-
})
39+
40+
const res = await userStore.reset()
41+
42+
if (res.code === 0) {
43+
showNotify({ type: 'success', message: t('forgot-password.passwordResetSuccee') })
44+
router.push({ name: 'login' })
45+
}
4346
}
4447
finally {
4548
loading.value = false
@@ -68,13 +71,13 @@ async function getCode() {
6871
}
6972
7073
function handleBackLogin() {
71-
router.replace({ name: 'login' })
74+
router.push({ name: 'login' })
7275
}
7376
</script>
7477

7578
<template>
7679
<div class="m-x-a w-7xl text-center">
77-
<van-form :model="postData" :rules="rules" @submit="reset">
80+
<van-form :model="postData" :rules="rules" validate-trigger="onSubmit" @submit="reset">
7881
<div class="overflow-hidden rounded-3xl">
7982
<van-field
8083
v-model.trim="postData.email"

src/pages/login/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ function handleReset() {
6161
<van-image :src="dark ? logoDark : logo" class="h-120 w-120" />
6262
</div>
6363

64-
<van-form :model="postData" :rules="rules" @submit="login">
64+
<van-form :model="postData" :rules="rules" validate-trigger="onSubmit" @submit="login">
6565
<div class="overflow-hidden rounded-3xl">
6666
<van-field
6767
v-model="postData.email"

src/stores/modules/user.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { defineStore } from 'pinia'
22
import type { LoginData, UserState } from '@/api/user'
3-
import { getEmailCode, getUserInfo, login as userLogin, logout as userLogout } from '@/api/user'
3+
import { getEmailCode, getUserInfo, resetPassword, login as userLogin, logout as userLogout } from '@/api/user'
44
import { clearToken, setToken } from '@/utils/auth'
55

66
const InitUserInfo = {
@@ -57,12 +57,21 @@ export const useUserStore = defineStore('user', () => {
5757
catch {}
5858
}
5959

60+
const reset = async () => {
61+
try {
62+
const data = await resetPassword()
63+
return data
64+
}
65+
catch {}
66+
}
67+
6068
return {
6169
userInfo,
6270
info,
6371
login,
6472
logout,
6573
getCode,
74+
reset,
6675
}
6776
}, {
6877
persist: true,

0 commit comments

Comments
 (0)