reset-mobile-popup.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <mx-popup-template ref="popup" :loading="loading" keep title="变更手机号" left="取消" right="保存"
  3. @left="close" @right="handleSubmit">
  4. <uv-form ref="form" :model="model" :rules="rules">
  5. <mobile-code-fields label-mobile="新手机号码"/>
  6. </uv-form>
  7. </mx-popup-template>
  8. </template>
  9. <script setup>
  10. import {ref} from 'vue'
  11. import {sendSms} from "@/api/login";
  12. import {updatePhonenumber} from "@/api/system/user";
  13. import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
  14. import {useUserStore} from "@/hooks/useUserStore";
  15. import MobileCodeFields from "@/pages/login/components/register-fields/mobile-code-fields.vue";
  16. import {createChangePhoneModelRules} from "@/pages/login/components/hooks/defineFormModels";
  17. import {useProvideFormData} from "@/pages/login/components/hooks/useFormDataInjection";
  18. import {useProvideFormRef} from "@/pages/login/components/hooks/useFormRefInjection";
  19. import {useProvideSendSmsFn} from "@/pages/login/components/hooks/useSmsInjection";
  20. const {GetInfo} = useUserStore()
  21. const loading = ref(false)
  22. // form data and service
  23. const form = ref(null)
  24. const popup = ref(null)
  25. const [m, r, modelToCommit] = createChangePhoneModelRules()
  26. const [model, rules] = useProvideFormData(m, r)
  27. useProvideFormRef(form)
  28. useProvideSendSmsFn(() => handleSendSms())
  29. // methods
  30. const handleSendSms = function () {
  31. return sendSms({mobile: model.value.mobile, smsType: 1})
  32. }
  33. const handleSubmit = async function () {
  34. await form.value.validate()
  35. loading.value = true
  36. try {
  37. const commit = modelToCommit()
  38. await updatePhonenumber(commit)
  39. toast('手机号变更成功')
  40. form.value.resetFields()
  41. await GetInfo()
  42. } finally {
  43. loading.value = false
  44. }
  45. }
  46. const open = function () {
  47. popup.value.open()
  48. }
  49. const close = function () {
  50. form.value.clearValidate()
  51. popup.value.close()
  52. }
  53. defineExpose({open, close})
  54. </script>
  55. <style scoped>
  56. </style>