basic-info.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <mx-submit-layout :title="prevData.settingName" :loading="loading" @submit="handleSubmit">
  3. <uv-form ref="form" :model="model" :rules="rules">
  4. <name-gender-fields/>
  5. <phone-with-change-field/>
  6. <province-field disabled/>
  7. <gaokao-year-field v-if="isBind" disabled/>
  8. <school-info-fields v-if="isBind" disabled/>
  9. <type-major-fields :disabled="!enableAuthModify"/>
  10. </uv-form>
  11. </mx-submit-layout>
  12. </template>
  13. <script setup>
  14. import {ref, watch} from 'vue'
  15. import {useTransfer} from "@/hooks/useTransfer";
  16. import {useUserStore} from "@/hooks/useUserStore";
  17. import {improveUserInfo} from "@/api/login";
  18. import {sleep, toast} from "@/uni_modules/uv-ui-tools/libs/function";
  19. import PhoneWithChangeField from "@/pages/login/components/register-fields/phone-with-change-field.vue";
  20. import NameGenderFields from "@/pages/login/components/register-fields/name-gender-fields.vue";
  21. import ProvinceField from "@/pages/login/components/register-fields/province-field.vue";
  22. import {createBasicInfoModelRules} from "@/pages/login/components/hooks/defineFormModels";
  23. import {useProvideFormData} from "@/pages/login/components/hooks/useFormDataInjection";
  24. import _ from "lodash";
  25. import TypeMajorFields from "@/pages/login/components/register-fields/type-major-fields.vue";
  26. import GaokaoYearField from "@/pages/login/components/register-fields/gaokao-year-field.vue";
  27. import SchoolInfoFields from "@/pages/login/components/register-fields/school-info-fields.vue";
  28. const {prevData, relaunch} = useTransfer()
  29. const {currentUser, isBind, enableAuthModify, GetInfo} = useUserStore()
  30. const form = ref(null)
  31. const model = ref({}) // 不要改变model.value, 因为内部有很多服务在监听它。
  32. const loading = ref(false)
  33. // form & service
  34. const [m, r, modelToCommit] = createBasicInfoModelRules(model)
  35. const [, rules] = useProvideFormData(m, r)
  36. // hooks
  37. watch(currentUser, () => _.assign(model.value, currentUser.value), {immediate: true})
  38. // methods
  39. const handleSubmit = async () => {
  40. await form.value.validate()
  41. if (loading.value) return
  42. loading.value = true
  43. try {
  44. const commit = modelToCommit()
  45. await improveUserInfo(commit)
  46. await GetInfo()
  47. toast('保存成功,即将返回首页')
  48. await sleep(1000)
  49. relaunch()
  50. } finally {
  51. loading.value = false
  52. }
  53. }
  54. </script>
  55. <style scoped lang="scss">
  56. </style>