| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <template>
- <mx-submit-layout title="新用户注册" button-text="现在注册" :loading="loading" @submit="handleRegister">
- <uv-form ref="form" :model="model" :rules="rules">
- <mobile-code-fields/>
- <pwd-repeat-fields/>
- <name-gender-fields/>
- <province-field/>
- <type-major-fields/>
- </uv-form>
- <template #append>
- <agreement-view v-model="isAgree" class="my-20"/>
- </template>
- </mx-submit-layout>
- </template>
- <script setup>
- import {onMounted, ref} from 'vue'
- import mxConst from "@/common/mxConst";
- import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
- import {register, sendSms} from "@/api/login";
- import {useUserStore} from "@/hooks/useUserStore";
- import {useTransfer} from "@/hooks/useTransfer";
- import {createRegisterModelRules} from "@/pages/login/components/hooks/defineFormModels";
- import {useProvideFormData} from "@/pages/login/components/hooks/useFormDataInjection";
- import MobileCodeFields from "@/pages/login/components/register-fields/mobile-code-fields.vue";
- import PwdRepeatFields from "@/pages/login/components/register-fields/pwd-repeat-fields.vue";
- import NameGenderFields from "@/pages/login/components/register-fields/name-gender-fields.vue";
- import ProvinceField from "@/pages/login/components/register-fields/province-field.vue";
- import TypeMajorFields from "@/pages/login/components/register-fields/type-major-fields.vue";
- import AgreementView from "@/pages/login/components/agreement-view.vue";
- import {useProvideFormRef} from "@/pages/login/components/hooks/useFormRefInjection";
- import {useProvideSendSmsFn} from "@/pages/login/components/hooks/useSmsInjection";
- import {useProvideProvince} from "@/pages/login/components/hooks/useProvinceInjection";
- import {getLocationsList} from "@/api/webApi/resources";
- const loading = ref(false)
- const isAgree = ref(false)
- const {SyncToken} = useUserStore()
- const {transferTo} = useTransfer()
- // form related.
- const [m, r, modelToCommit] = createRegisterModelRules()
- const [model, rules] = useProvideFormData(m, r)
- const form = ref(null)
- useProvideFormRef(form)
- // service related.
- useProvideSendSmsFn((args) => handleSendSms(args))
- const provinceOptions = ref([])
- useProvideProvince(provinceOptions)
- // hooks
- onMounted(async () => {
- // 获取系统支持的省份(无限制)
- const res = await getLocationsList({level: 1})
- provinceOptions.value = res.data.map(p => p.sname) || []
- })
- // functions
- const handleSendSms = (events) => {
- return sendSms({mobile: model.value.mobile, smsType: 1, ...events})
- }
- const handleRegister = async () => {
- await form.value.validate()
- if (!isAgree.value) return toast('请先勾选同意条款')
- if (loading.value) return
- loading.value = false
- try {
- const commit = modelToCommit()
- const res = await register(commit)
- toast('注册成功')
- await SyncToken(res.token)
- transferTo(mxConst.routes.bindProfile)
- } finally {
- loading.value = false
- }
- }
- </script>
- <style lang="scss">
- </style>
|