forget-pwd.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <template>
  2. <mx-submit-layout title="找回密码" :loading="loading" @submit="handleSubmit">
  3. <uv-form ref="form" :model="model" :rules="rules">
  4. <mobile-code-fields/>
  5. <pwd-repeat-fields/>
  6. </uv-form>
  7. </mx-submit-layout>
  8. </template>
  9. <script setup>
  10. import {ref} from 'vue'
  11. import {resetCardPassword, sendSmsNoValidationNoToken} from "@/api/login";
  12. import {sleep, toast} from "@/uni_modules/uv-ui-tools/libs/function";
  13. import {useTransfer} from "@/hooks/useTransfer";
  14. import {useProvideFormData} from "@/pages/login/components/hooks/useFormDataInjection";
  15. import {createForgetPwdModelRules} from "@/pages/login/components/hooks/defineFormModels";
  16. import MobileCodeFields from "@/pages/login/components/register-fields/mobile-code-fields.vue";
  17. import PwdRepeatFields from "@/pages/login/components/register-fields/pwd-repeat-fields.vue";
  18. import {useProvideFormRef} from "@/pages/login/components/hooks/useFormRefInjection";
  19. import {useProvideSendSmsFn} from "@/pages/login/components/hooks/useSmsInjection";
  20. const {transferBack} = useTransfer()
  21. const loading = ref(false)
  22. // form and service
  23. const form = ref(null)
  24. const [m, r, modelToCommit] = createForgetPwdModelRules()
  25. const [model, rules] = useProvideFormData(m, r)
  26. useProvideFormRef(form)
  27. useProvideSendSmsFn(async (args) => await handleSendSms(args))
  28. // methods
  29. const handleSendSms = async (events) => {
  30. await sendSmsNoValidationNoToken({mobile: model.value.mobile, smsType: 1, ...events})
  31. }
  32. const handleSubmit = async () => {
  33. await form.value.validate()
  34. if (loading.value) return
  35. loading.value = true
  36. try {
  37. const commit = modelToCommit()
  38. await resetCardPassword(commit)
  39. toast('新密码修改成功')
  40. await sleep(1000)
  41. transferBack()
  42. } finally {
  43. loading.value = false
  44. }
  45. }
  46. </script>
  47. <style lang="scss" scoped>
  48. </style>