UNPKG

real-name-pc

Version:
152 lines (132 loc) 4.14 kB
import React, { useState } from 'react'; import classnames from 'classnames'; import { validateMate } from 'utils'; import './index.less'; const RealName = ({ className, canClose, onClose, onSubmit }) => { const componentClassName = classnames('real-name', className); // 姓名 const [name, setName] = useState(''); // 姓名是否有效 const [isNameValid, setIsNameValid] = useState(null); // 姓名无效的错误提示信息 const [nameErrorInfo, setNameErrorInfo] = useState(null); // 身份证号 const [card, setCard] = useState(''); // 身份证是否有效 const [isCardValid, setIsCardValid] = useState(null); // 身份证无效时的错误提示信息 const [cardErrorInfo, setCardErrorInfo] = useState(null); /** * 处理输入框值的变更 * @param {*} e */ const handleInputChane = e => { const inputName = e.target.name; const value = e.target.value; if (inputName === 'name') { setName(value); } else if (inputName === 'card') { setCard(value); } } /** * 处理姓名输入框失去焦点事件 * @param {*} e */ const handleNameBlur = e => { const name = e.target.value; if (validateMate.checkName(name)) { setIsNameValid(true); setNameErrorInfo(null); } else { setIsNameValid(false); setNameErrorInfo('请输入真实姓名'); } } /** * 处理身份证输入框失去焦点事件 * @param {*} e */ const handleCardBlur = e => { const numOfCard = e.target.value; const checkCardResult = validateMate.checkCard(numOfCard); if (checkCardResult.isRight) { setIsCardValid(true); setCardErrorInfo(null); } else { setIsCardValid(false); setCardErrorInfo(checkCardResult.errorInfo); } } /** * 处理关闭事件 */ const handleClose = () => { onClose(); } /** * 处理提交实名认证 */ const handleSubmit = () => { if (!isNameValid) { setIsNameValid(false); setNameErrorInfo('请输入真实姓名'); return false; } if (!isCardValid) { const checkCardResult = validateMate.checkCard(card); setIsCardValid(false); setCardErrorInfo(checkCardResult.errorInfo); return false; } onSubmit(name, card); } return ( <div className={componentClassName}> <h4> 为保护您的合法权益,请完善帐号信息 {canClose && <i className="real-name__close" onClick={handleClose} />} </h4> <ul className="real-name__title"> <li> 身份证绑定 </li> </ul> <div className="real-name__main"> <div className="real-name__item"> <span className="real-name__item-label">真实姓名</span> <input className='real-name__item-input' name='name' type="text" id="real-name" value={name} onChange={handleInputChane} onBlur={handleNameBlur} /> <span className={classnames('icon', {'icon-succ': isNameValid, 'icon-error': isNameValid === false })} /> <p className="hint">{nameErrorInfo}</p> </div> <div className="real-name__item"> <span className="real-name__item-label">身份证</span> <input className='real-name__item-input' name='card' type="text" id="real-card" value={card} onChange={handleInputChane} onBlur={handleCardBlur} /> <span className={classnames('icon', {'icon-succ': isCardValid, 'icon-error': isCardValid === false })} /> <p className="hint">{cardErrorInfo}</p> </div> <a className="real-name__submit" id="bind-approve" onClick={handleSubmit}>立即绑定</a> </div> <div className="real-name__bottom"> 按照政府部门关于实名注册的要求,在您 <span>未绑定有效身份信息之前</span> ,帐号无法游戏和充值,敬请谅解。 </div> </div> ) } export default RealName;