<template> 
 | 
  <LoginPageLayout class="registerForm-page-wrapper" title="注册"> 
 | 
    <div class="loginB-form-wrapper"> 
 | 
      <div class="register-form-title-wrapper"> 
 | 
        <div class="register-form-title">注册</div> 
 | 
        <div class="register-form-title-line"></div> 
 | 
      </div> 
 | 
      <div class="verification-code-login-form-wrapper"> 
 | 
        <nut-form 
 | 
          class="verification-code-login-form" 
 | 
          ref="formRef" 
 | 
          :model-value="form" 
 | 
          :rules="rules" 
 | 
        > 
 | 
          <nut-form-item label="" class="bole-form-item" prop="phoneNumber" required> 
 | 
            <nut-input 
 | 
              v-model.trim="form.phoneNumber" 
 | 
              class="bole-input-text" 
 | 
              placeholder="请输入手机号" 
 | 
              type="text" 
 | 
            /> 
 | 
          </nut-form-item> 
 | 
          <nut-form-item label="" class="bole-form-item" prop="verificationCode" required> 
 | 
            <nut-input 
 | 
              v-model.trim="form.verificationCode" 
 | 
              class="bole-input-text" 
 | 
              placeholder="请输入验证码" 
 | 
              type="number" 
 | 
            > 
 | 
              <template #right> 
 | 
                <ProFormCaptcha 
 | 
                  :onGetCaptcha="onGetCaptcha" 
 | 
                  phonePropName="phoneNumber" 
 | 
                  :validateField="formRef?.validate" 
 | 
                ></ProFormCaptcha> 
 | 
              </template> 
 | 
            </nut-input> 
 | 
          </nut-form-item> 
 | 
        </nut-form> 
 | 
        <LargeButton class="login-btn" @click="handleRegister" :loading="form.loading" 
 | 
          >注册</LargeButton 
 | 
        > 
 | 
        <div class="go-register-btn" @click="goLogin">立即登录</div> 
 | 
      </div> 
 | 
    </div> 
 | 
    <Policy 
 | 
      v-model="state.policyChecked" 
 | 
      policyBtnText="我已阅读并同意" 
 | 
      class="loginB-form-policy" 
 | 
    /> 
 | 
  </LoginPageLayout> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
import LoginPageLayout from '../components/LoginPageLayout/LoginPageLayout.vue'; 
 | 
import { Policy } from '@/components'; 
 | 
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; 
 | 
import { FormValidator, Message } from '@12333/utils'; 
 | 
import { LargeButton } from '@/components'; 
 | 
import { ProFormCaptcha } from 'senin-mini/components'; 
 | 
import { VerificationCodeBusinessType } from '@12333/constants'; 
 | 
import Taro from '@tarojs/taro'; 
 | 
import { ResponseCode } from '@12333/constants'; 
 | 
import * as authServices from '@12333/services/apiV2/auth'; 
 | 
import { APP_ENV } from '@/constants'; 
 | 
import { useUserStore } from '@/stores/modules/user'; 
 | 
  
 | 
defineOptions({ 
 | 
  name: 'registerForm', 
 | 
}); 
 | 
  
 | 
const userStore = useUserStore(); 
 | 
  
 | 
const { jump } = useLoginedJump(); 
 | 
  
 | 
const state = reactive({ 
 | 
  policyChecked: false, 
 | 
}); 
 | 
  
 | 
const formRef = ref(null); 
 | 
  
 | 
const form = reactive({ 
 | 
  loading: false, 
 | 
  phoneNumber: '', 
 | 
  verificationCode: '', 
 | 
}); 
 | 
  
 | 
const rules = reactive<FormRules>({ 
 | 
  phoneNumber: [ 
 | 
    { required: true, message: '请输入手机号' }, 
 | 
    { validator: FormValidator.validatorPhoneNumber, message: '请输入正确的手机号' }, 
 | 
  ], 
 | 
  verificationCode: [{ required: true, message: '请输入验证码' }], 
 | 
}); 
 | 
  
 | 
async function onGetCaptcha() { 
 | 
  const res = await authServices.sendLoginOrRegisterVerifyCode( 
 | 
    { 
 | 
      phoneNumber: form.phoneNumber, 
 | 
    }, 
 | 
    { 
 | 
      showLoading: false, 
 | 
      getResponse: true, 
 | 
      // customErrorHandler(error) { 
 | 
      //   if (error?.response?.data?.error?.code === ResponseCode.RegisterExistsPhoneNumber) { 
 | 
      //     Message.confirm({ 
 | 
      //       message: '该手机号已注册,请去登录页登录', 
 | 
      //       confirmText: '去登录', 
 | 
      //     }).then(() => { 
 | 
      //       goLogin(); 
 | 
      //     }); 
 | 
      //     return true; 
 | 
      //   } 
 | 
      // }, 
 | 
    } 
 | 
  ); 
 | 
  
 | 
  if (res && APP_ENV === 'staging') { 
 | 
    // @ts-ignore 
 | 
    form.verificationCode = res?.data?.extras?.code ?? ''; 
 | 
  } 
 | 
} 
 | 
  
 | 
async function handleRegister() { 
 | 
  try { 
 | 
    if (state.policyChecked) { 
 | 
      const { valid } = await formRef.value.validate(); 
 | 
      if (valid) { 
 | 
        let params: API.RegisterPersonalUserCommand = { 
 | 
          verifyCode: form.verificationCode, 
 | 
          phoneNumber: form.phoneNumber, 
 | 
        }; 
 | 
        let res = await authServices.registerPersonalUser(params); 
 | 
        if (res) { 
 | 
          Message.success('注册成功', { 
 | 
            onClosed: async () => { 
 | 
              userStore.loginSuccess(res); 
 | 
              jump(); 
 | 
            }, 
 | 
          }); 
 | 
        } 
 | 
      } 
 | 
    } else { 
 | 
      noAccess(); 
 | 
    } 
 | 
  } catch (error) { 
 | 
  } finally { 
 | 
    form.loading = false; 
 | 
  } 
 | 
} 
 | 
  
 | 
function noAccess() { 
 | 
  Message.warning('请先阅读并勾选协议'); 
 | 
} 
 | 
  
 | 
const router = Taro.useRouter(); 
 | 
  
 | 
function goLogin() { 
 | 
  Taro.navigateBack(); 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss"> 
 | 
@import '@/styles/common.scss'; 
 | 
@import '../styles/login.scss'; 
 | 
  
 | 
.registerForm-page-wrapper { 
 | 
  .register-form-title-wrapper { 
 | 
    padding-top: 20px; 
 | 
    margin-bottom: 92px; 
 | 
  
 | 
    .register-form-title { 
 | 
      font-weight: 400; 
 | 
      font-size: 28px; 
 | 
      color: boleGetCssVar('color', 'primary'); 
 | 
      line-height: 40px; 
 | 
      text-align: center; 
 | 
      margin-bottom: 8px; 
 | 
    } 
 | 
  
 | 
    .register-form-title-line { 
 | 
      width: 38px; 
 | 
      height: 2px; 
 | 
      background-color: boleGetCssVar('color', 'primary'); 
 | 
      margin: 0 auto; 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</style> 
 |