7 changed files with 158 additions and 7 deletions
@ -0,0 +1,92 @@ |
|||
<template> |
|||
<BasicModal |
|||
@register="registerModal" |
|||
:title="$t('layout.header.changePassword')" |
|||
@ok="handleChangePassword" |
|||
> |
|||
<BasicForm @register="registerForm" /> |
|||
</BasicModal> |
|||
</template> |
|||
|
|||
<script lang="ts" setup> |
|||
import type { ChangePasswordParams } from '@/api/sys/model/userModel'; |
|||
|
|||
import { useModalInner, BasicModal } from '@/components/Modal'; |
|||
import { useForm, BasicForm } from '@/components/Form'; |
|||
import { useI18n } from '@/hooks/web/useI18n'; |
|||
import { useUserStore } from '@/store/modules/user'; |
|||
import { successMessage } from '@/utils/message/SystemNotice'; |
|||
|
|||
const { t } = useI18n(); |
|||
|
|||
const [registerModal, { changeOkLoading, closeModal }] = useModalInner(() => { |
|||
resetFields(); |
|||
}); |
|||
|
|||
const handleChangePassword = async () => { |
|||
try { |
|||
changeOkLoading(true); |
|||
const model = (await validate()) as ChangePasswordParams; |
|||
const { changePassword } = useUserStore(); |
|||
await changePassword(model); |
|||
successMessage({ |
|||
message: t('app.changePassword.successMessage'), |
|||
}); |
|||
closeModal(); |
|||
} finally { |
|||
changeOkLoading(false); |
|||
} |
|||
}; |
|||
|
|||
const [registerForm, { validate, resetFields }] = useForm({ |
|||
showActionButtonGroup: false, |
|||
colon: true, |
|||
baseColProps: { |
|||
span: 24, |
|||
}, |
|||
labelCol: { |
|||
span: 6, |
|||
}, |
|||
wrapperCol: { |
|||
span: 17, |
|||
}, |
|||
schemas: [ |
|||
{ |
|||
label: t('app.changePassword.oldPassword'), |
|||
field: 'oldPassword', |
|||
component: 'InputPassword', |
|||
required: true, |
|||
}, |
|||
{ |
|||
label: t('app.changePassword.newPassword'), |
|||
field: 'newPassword', |
|||
component: 'StrengthMeter', |
|||
required: true, |
|||
}, |
|||
{ |
|||
label: t('app.changePassword.newPasswordConfirm'), |
|||
field: 'newPasswordConfirm', |
|||
component: 'InputPassword', |
|||
dynamicRules: ({ model }) => { |
|||
return [ |
|||
{ |
|||
required: true, |
|||
validator: (rule, value) => { |
|||
const { newPassword } = model; |
|||
if (!newPassword) { |
|||
return Promise.resolve(); |
|||
} |
|||
if (newPassword !== value) { |
|||
return Promise.reject('密码不一致'); |
|||
} |
|||
return Promise.resolve(); |
|||
}, |
|||
}, |
|||
]; |
|||
}, |
|||
}, |
|||
], |
|||
}); |
|||
</script> |
|||
|
|||
<style scoped></style> |
|||
Loading…
Reference in new issue