/** * 带OTP的注册页面 * @邠心vbe on 2023/02/06 */ import React from 'react'; import { View, Text, ScrollView, StyleSheet, TextInput, Pressable, Image } from 'react-native'; import apiUser from '../../api/apiUser'; import Button from '../../components/Button'; import { PageList } from '../Router'; import Dialog from '../../components/Dialog'; import Modal from 'react-native-modal'; import { RegisterDialog } from '../charge/InfoDialog'; import Dropdown from '../../components/Dropdown'; import ImagePicker from 'react-native-image-crop-picker'; import apiUpload from '../../api/apiUpload'; import { host } from '../../api/http'; import { ModalProps } from '../../components/BottomModal'; import { CountryDropNum, GetCountryList } from '../../components/CountryIcon'; import StrengthView from './StrengthView'; import CheckBox from '../../components/CheckBox'; import { UploadThemes } from '../../components/ThemesConfig'; const options = { width: 300, height: 200, cropping: true, multiple: false, mediaType: 'photo', writeTempFile: false, compressImageQuality: 0.8, compressImageMaxWidth: 720, compressImageMaxHeight: 1280, ...UploadThemes } export default class RegisterV4 extends React.Component { constructor(props) { super(props); this.StrengthView = StrengthView.V2 this.state = { agree: true, strength: 0, countryNum: '65', countryShow: false, userInfo: { email: "", verificationCode: "" }, countryNums: [], wrongCount: 0, params: {...this.props.route.params}, email: '', password: '', fleetCompanyId: '', sendMinutes: 0, visible: false, isFleetDriver: false, pdvImages: ['', ''], companyList: [] }; } componentDidMount() { //console.log(this.state.params); if (this.state.params.isFleetUser) { this.setState({ isFleetDriver: true }) this.props.navigation.setOptions({ headerTitle: "Fleet / PHV Registration" }) } this.getCountryList(); this.getCompanyList(); } applyStrength(text) { this.StrengthView.apply(text, strength => { if (this.state.strength != strength) { this.setState({ password: text, strength: strength }); } else { this.setState({ password: text }); } }); } changeInfo(key, value) { var info = this.state.userInfo; info[key] = value; this.setState({ 'userInfo': info }); } getCountryList() { GetCountryList(list => { this.setState({ countryNums: list }) }) } getCompanyList() { apiUser.getConmpany().then(res => { if (res.data) { this.setState({ companyList: res.data }) } }).catch(err => [ toastShort(err) ]) } sendVerification() { var info = this.state.userInfo; if (!info.email) { toastShort('Please enter email address'); return; } if (!/^[a-zA-Z0-9]+[\S]+@[a-zA-Z0-9_-]+[\.][\Sa-zA-Z]+$/.test(info.email)) { toastShort('Email is incorrect format'); return; } Dialog.showProgressDialog() apiUser.sendVerificationCodeV2({email: info.email, type: "register"}).then(res => { Dialog.dismissLoading() //this.state.sendMinutes = 60; this.state.sendMinutes = res.data?.resendTime ?? 60; toastShort('Send verification code successfully'); this.contdownTime(); }).catch(err => { Dialog.dismissLoading() toastShort(err); }); } contdownTime() { if (this.state.sendMinutes > 0) { this.setState({ sendMinutes: this.state.sendMinutes - 1 }) setTimeout(() => { this.contdownTime(); }, 1000); } } onRegister() { //console.log('sign up', this.state); var info = this.state.userInfo; if (!info.nickName) { toastShort('Please enter display name'); return; } if (!info.email) { toastShort('Please enter email address'); return; } if (!/^[a-zA-Z0-9]+[\S]+@[a-zA-Z0-9_-]+[\.][\Sa-zA-Z]+$/.test(info.email)) { toastShort('Email is incorrect format'); return; } if (!info.verificationCode) { toastShort('Please enter verification code'); return; } if (!info.phone) { toastShort('Please enter contact number'); return; } if (!/^\d{6,15}$/.test(info.phone)) { toastShort('Phone Number is incorrect format'); return; } if (!this.state.password) { toastShort('Please enter password'); return; } if (this.state.strength < this.StrengthView.maxStrength) { toastShort('Password is not strong'); return; } if (!info.password) { toastShort('Please enter confirm password'); return; } if (info.password != this.state.password) { toastShort('The twice passwords are inconsistent'); if (this.state.wrongCount < 3) { this.setState({ wrongCount: this.state.wrongCount + 1 }) } return; } if (this.state.isFleetDriver) { if (!info.pdvLicence) { toastShort('Please enter PDV Licence'); return; } if (this.state.pdvImages[0] == '' || this.state.pdvImages[1] == '') { toastShort('Please upload PDV Licence Photos'); return; } } let param = Object.assign({}, info); //param.phone = this.state.countryNum + info.phone param.callingCode = this.state.countryNum; if (this.state.isFleetDriver) { param.userType = 'Driver'; param.pdvLicencePictures = this.state.pdvImages; param.fleetCompanyId = this.state.fleetCompanyId; } else { param.userType = 'Public'; } param.otp = param.verificationCode; console.log('params', param); Dialog.showProgressDialog(); apiUser.register(param).then(res => { Dialog.dismissLoading(); if (isIOS) { toastShort('Sign up successfully!'); setTimeout(() => { this.backToLogin(); }, 500); } else { this.setState({ email: param.email, visible: true }); } }).catch(err => { toastShort(err); Dialog.dismissLoading(); }); } getBackTopPosition() { return isIOS ? statusHeight - 16 : 8; } backToLogin() { if (this.state.params.actionLogin) { goBack() startPage(PageList.login); } else { goBack(); } } uploadImage(index) { ImagePicker.openPicker(options).then(image => { if (image.path) { apiUpload.uploadImage(image.path, image.mime, 'PDVL').then(res => { if (res.success && res.data.picturePath) { let imageUrl = this.state.pdvImages; imageUrl[index] = res.data.picturePath; this.setState({ pdvImages: imageUrl }); } else { toastShort('Upload failed, please retry'); } }).catch(err => { toastShort(err); }); } }).catch(err => { //console.log(err); }); } changeAgree(ag) { this.setState({ agree: ag }) } hideDialog() { this.setState({ visible: false }); this.backToLogin(); } render() { return ( {/* this.changeTab(false)} >Public Users this.changeTab(true)} >Fleet/PH Drivers */} Display Name this.changeInfo('nickName', v)} /> Email Address this.changeInfo('email', v)} /> Validate Email this.changeInfo('verificationCode', v)} />