ResetPwd.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <el-form ref="formRef" :model="password" :rules="rules" label-width="80px">
  3. <el-form-item :label="t('profile.password.oldPassword')">
  4. <InputPassword v-model="password.oldPassword" />
  5. </el-form-item>
  6. <el-form-item :label="t('profile.password.newPassword')">
  7. <InputPassword v-model="password.newPassword" strength />
  8. </el-form-item>
  9. <el-form-item :label="t('profile.password.confirmPassword')">
  10. <InputPassword v-model="password.confirmPassword" strength />
  11. </el-form-item>
  12. <el-form-item>
  13. <XButton :title="t('common.save')" type="primary" @click="submit(formRef)" />
  14. <XButton :title="t('common.reset')" type="danger" @click="reset(formRef)" />
  15. </el-form-item>
  16. </el-form>
  17. </template>
  18. <script lang="ts" setup>
  19. import type { FormInstance, FormRules } from 'element-plus'
  20. import { InputPassword } from '@/components/InputPassword'
  21. import { updateUserPassword } from '@/api/system/user/profile'
  22. defineOptions({ name: 'ResetPwd' })
  23. const { t } = useI18n()
  24. const message = useMessage()
  25. const formRef = ref<FormInstance>()
  26. const password = reactive({
  27. oldPassword: '',
  28. newPassword: '',
  29. confirmPassword: ''
  30. })
  31. // 表单校验
  32. const equalToPassword = (value, callback) => {
  33. if (password.newPassword !== value) {
  34. callback(new Error(t('profile.password.diffPwd')))
  35. } else {
  36. callback()
  37. }
  38. }
  39. const rules = reactive<FormRules>({
  40. oldPassword: [
  41. { required: true, message: t('profile.password.oldPwdMsg'), trigger: 'blur' },
  42. { min: 3, max: 5, message: t('profile.password.pwdRules'), trigger: 'blur' }
  43. ],
  44. newPassword: [
  45. { required: true, message: t('profile.password.newPwdMsg'), trigger: 'blur' },
  46. { min: 6, max: 20, message: t('profile.password.pwdRules'), trigger: 'blur' }
  47. ],
  48. confirmPassword: [
  49. { required: true, message: t('profile.password.cfPwdMsg'), trigger: 'blur' },
  50. { required: true, validator: equalToPassword, trigger: 'blur' }
  51. ]
  52. })
  53. const submit = (formEl: FormInstance | undefined) => {
  54. if (!formEl) return
  55. formEl.validate(async (valid) => {
  56. if (valid) {
  57. await updateUserPassword(password.oldPassword, password.newPassword)
  58. message.success(t('common.updateSuccess'))
  59. }
  60. })
  61. }
  62. const reset = (formEl: FormInstance | undefined) => {
  63. if (!formEl) return
  64. formEl.resetFields()
  65. }
  66. </script>