form
- 作者:liuduan
- 邮箱:liuduan.05.05@163.com
- 版本:
1.0.2
介绍
表单组件,包含input、checkbox、radio、select、textarea、agreement、switch、validate、valiate.rule、autoclear
安装
lm-*
组件使用 npm
进行管理,命名空间统一为 lm-
,请使用以下命令进行组件安装。
npm i lm-form --save
- 如果你还没有安装
npm
,可通过以下方式进行 安装。 - 安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
使用
样例文档
- 用于input输入过程中校验
// 只需调用Sumit组件,无需引用Validate // onClick提交表单,参数为校验值系列化对象 // onError用于错误信息提示 // disabled:默认true必须所有必填项填完才能改为false // input要使用InputValidate组件 <Submit onClick=thisonValidateSubmit onError=thisonValidateError disabled=disabled> input 验 证 提 交 </Submit> // valiate.type === 'submitValidate'用于区分input输入过程中校验还是sumit提交时校验,默认值为'inputValidate' <InputValidate label="姓名" name="inputvalidate1" type="text" placeholder="validate input" value=thisstateinputValidate1 onChange= this validate= rule: /^\d+$/ param: requireMsg: '该字段必填' errMsg: '请输入数字1' type: 'submitValidate' required />
validate
-用于submit提交过程中校验
// 使用高阶组件ValidateHoc获取校验属性 ; // submit校验 thisprops // onBlur校验 const isValid message = thisprops; /* 根据·isValid·判断input是否校验通过,包括 required && validate rule 校验,true 为通过,false 为不通过 根据·message·返回信息 如果为 'required' 可执行toast提示改项为必须项, 如果为 其他 可执行toast提示错误信息message */
validateArr
let validateArr = ref: thisinputRef name: 'input' value: text // rule: 可以为字符串、数组、正则,字符串或数组必须在rule.js中属性,数组意为检验符合多个规则 rule: 'idNumber' 'idcardUnique' //rule: /\d+/, param: 0 2 err: 'textErr' required: true errMsg: 'input错误' requireMsg: 'input必填' name: 'checkbox' value: checkbox required: true ;
使用
最少配置参数为:
InputValidate
组件(input输入过程中校验)
<InputValidate type="text" placeholder="validate input" value=thisstateinputValidate onChange= this validate= rule: /^\d+$/ param: requireMsg: '该字段必填' errMsg: '请输入数字' required />
Input
组件(可控)使用
<Cell> <div className="lm-cell-label">Input</div> <CellBody> <Input ref= thisinputRef = el type="text" value=thisstatetext err=thisstatetextErr onChange= this onBlur= this placeholder="please input" /> </CellBody> <CellFooter>元</CellFooter></Cell>
Input
组件(非控)使用
<Cell> <div className="lm-cell-label">Smscode</div> <CellBody> <Input type="text" defaultValue="input" placeholder="please smscode" /> </CellBody> <Smscode style= paddingTop: 0 paddingBottom: 0 >开启倒计时</Smscode></Cell>
Checkbox
组件(可控)使用
<Checkboxgroup data=data inline=false name="checkbox" checked=thisstatecheckbox onChange=thishandleChange />
Checkbox
组件(非控)使用
<Cell> <div className="lm-cell-label">Checkbox</div> <CellBody> <Checkboxgroup data=data defaultChecked=false /> </CellBody></Cell>
Redio
组件(可控)使用
<Radiogroup data=data inline=false name="radio" checked=thisstateradio onChange=thishandleChange />
Redio
组件(非控)使用
<Cell> <div className="lm-cell-label">Radio</div> <CellBody> <Radiogroup name="radio-inline" data=data defaultChecked=false /> </CellBody></Cell>
Switch
组件使用
<Switch label='switch' checked=thisstateswitchinput onChange=thishandleChange />
Agreement
组件使用
<Agreement label='同意' checked=thisstateagree onChange=thishandleChange> <a>《车分期征信查询授权书》</a> <a>《车分期征信查询授权书》</a> <a>《车分期征信查询授权书》</a> <a>《车分期征信查询授权书》</a></Agreement>
Select
组件使用
<Cell> <div className="lm-cell-label">Select</div> <CellBody> <Select name="select" value=thisstateselect placeholder="选我" onChange=thishandleChange data=data /> </CellBody> <CellFooter direction="down" /></Cell>
Textarea
组件使用
<Cell> <Textarea name="textarea" value=thisstatetextarea onChange=thishandleTextareaChange maxLength=50 /></Cell>
Input配置参数
Prop | Type | Default | Description |
---|---|---|---|
className |
string |
undefined |
自定义类名 |
placeholder |
string |
'请输入' |
提示信息 |
defaultValue |
string |
'' |
默认值,用于非控制input |
value |
string || number |
'' |
值,配合onChange使用 |
type |
string |
'text' |
input类型 |
err |
bool |
false |
判断输入是否符合错误,错误:true,正确:false |
onChange |
function |
'onChange(){} |
onchange事件回调 |
onFocus |
function |
onFocus(){} |
onfocus事件回调 |
onBlur |
function |
'onBlur(){} |
onblur事件回调 |
refName |
string |
'inputRef' |
原生ref属性值,可通过container中的ref.inputRef获取原生input的ref |
maxLength |
number |
- |
长度限制 |
useClear |
bool |
true |
true:使用自动清除,false:不使用 |
- 其他input支持属性Input组件都可支持
InputVaidate配置参数
Prop | Type | Default | Description |
---|---|---|---|
hintClassName |
string |
undefined |
自定义类名 |
validate |
object |
{} |
验证参数对象 |
required |
bool |
false |
是否必填 |
onChange |
function |
() => {} |
回调 |
onFocus |
function |
() => {} |
回到 |
onBlur |
function |
() => {} |
回调 |
label |
string |
`` | 左侧label文案 非必填 |
- 其他Input支持属性InputValidate组件都可支持
- 其他input支持属性Input组件都可支持
Checkbox/Radio/Switch/Agreement配置参数
Prop | Type | Default | Description |
---|---|---|---|
className |
string |
undefined |
自定义类名 |
inline |
bool |
true |
多个checkbox是否在一行显示 |
defaultChecked |
bool |
undefined |
默认是否选中,用于非控制checkbox |
checked |
bool |
undefined |
是否选中,配合onChange使用 |
label |
string | number | element |
'' |
label |
disabled |
bool |
false |
禁用 |
onChange |
function |
'onChange(){} |
onchange事件回调 |
Checkboxgroup配置参数
Prop | Type | Default | Description |
---|---|---|---|
data |
array isRequired |
[] |
数据 |
checked |
array |
undefinde |
多选选中value值数组 |
disabled |
bool |
false |
禁用,如果disabled不同,可用过data属性传入 |
name |
string |
'' |
checkbox name,如果name不同,可用过data属性传入name |
Radiogroup配置参数
Prop | Type | Default | Description |
---|---|---|---|
data |
array isRequired |
[] |
数据 |
checked |
any |
undefinde |
单选选中value值 |
disabled |
bool |
false |
禁用,如果disabled不同,可用过data属性传入 |
- 其他Checkbox支持属性Checkboxgroup组件都可支持,其中label、value属性必须在data中传入
- 其他Radio支持属性Radiogroup组件都可支持,其中label、value属性必须在data中传入
- data 格式, 属性名不能更改
const data = value: 0 label: 'Ph.D.' value: 1 label: 'Bachelor' value: 2 label: 'College' name: 'a' disabled: false
Textarea配置参数
Prop | Type | Default | Description |
---|---|---|---|
className |
string |
undefined |
自定义类名 |
placeholder |
string |
'请输入' |
提示信息 |
defaultValue |
string |
'' |
默认值,用于非控制input |
value |
string || number |
undefined |
值,配合onChange使用 |
err |
bool |
false |
判断输入是否符合错误,错误:true,正确:false |
maxLength |
number |
50 |
最大输入字数 |
showCounter |
bool |
true |
是否显示字数提示,默认显示 |
onChange |
function |
onChange(){} |
onchange事件回调 |
onFocus |
function |
onFocus(){} |
onfocus事件回调 |
onBlur |
function |
onBlur(){} |
onblur事件回调 |
useClear |
bool |
true |
true:使用自动清除,false:不使用 |
- 其他textarea支持属性Textarea组件都可支持
Select单选配置参数
Prop | Type | Default | Description |
---|---|---|---|
className |
string |
undefined |
自定义类名 |
placeholder |
string |
'请输入' |
提示信息 |
value |
string || number |
'' |
选中值 |
data |
array |
[] |
渲染option用数据,若不传可自定义children 作为option |
disabled |
bool |
false |
禁用,如果disabled不同,可用过data属性传入 |
onChange |
function |
'onChange(){} |
onchange事件回调 |
- 其他select支持属性Select组件都可支持,但只支持单选,不支持多选
- data 格式
Submit配置参数
Prop | Type | Default | Description |
---|---|---|---|
className |
string |
undefined |
自定义类名 |
style |
object |
undefinde |
自定义样式 |
type |
string |
'' |
button-type |
disabled |
book |
true |
必须在所有必填项有之后才可解除禁用 |
onClick |
function |
onClick(){} |
提交表单回调,参数为验证表单序列化对象 |
onError |
function |
'onError(){} |
错误信息事件回调,参数为错误信息 |
const data = value: 0 label: 'Ph.D.' value: 1 label: 'Bachelor' value: 2 label: 'College' disabled: false
validate.rule 校验规则
Prop | Type | Default | Description | Message |
---|---|---|---|---|
password |
string |
- |
密码校验 | 请填写${param[0]}-${param[1]}位字母、数字 |
equal |
string |
- |
两次输入是否一致校验 | 两次输入${param[1]}不一致 备注: param[0] 为同value比较的值 |
age |
string |
- |
年龄校验 | 对不起,您的年龄不符合准入要求 |
idNumber |
string |
- |
身份证号校验 | 请填写正确的身份证号 |
digital |
string |
- |
大于0数字,两个小数点 | 请填写大于0数字(如:8.25) |
intRange |
string |
- |
整数范围 | 请填写${param[0]}-${param[1]}的整数 |
digitalRange |
string |
- |
金额数字范围 | 还款金额请填写${param[0]}-${param[1]}的数字 |
number |
string |
- |
正整数-位数范围校验 | 请填写${param[0]}-${param[1]}位正整数 |
inviteCode |
string |
- |
邀请码数字范围校验 | 请填写${param[0]}-${param[1]}位数字 |
name |
string |
- |
姓名校验,不带'·' | 请填写${param[0]}-${param[1]}个中文 |
nameAddDot |
string |
- |
姓名校验,带'·' | 请填写${param[0]}-${param[1]}个中文 |
areacode |
string |
- |
区号校验 | 请填写正确的区号 |
telephone |
string |
- |
固定电话校验 | 请填写正确的区号 或 请填写正确的固话 备注: param[0] 为区号 |
mobilephone |
string |
- |
手机号码校验 | 请填写正确的手机号 |
length |
string |
- |
字符长度校验 | 请填写${param[0]}-${param[1]}个字符 |
bankCard |
string |
- |
银行卡检验,允许0开头 | 请填写正确的银行卡号 |
creditCard |
string |
- |
信用卡号校验 | 请填写正确的信用卡号 |
consistency |
string |
- |
两个值不能相同校验 | ${param[1]}与${param[2]}不能相同 备注: param[0] 为同value比较的值 |
idcardUnique |
string |
- |
通过后台同步请求验证身份证号是否被注册过 | 该身份证号已注册! |
lt |
string |
- |
可用余额校验 | 可用余额${param[0]}<${param[1]},暂不能提现! |
digitalRangeTwo |
string |
- |
数字范围,提示数字单位为万 | 请填写${param[0]}万-${param[1]}万的数字 |
imageCode |
string |
- |
图形验证码校验 | 请填写${param[0]}位图形验证码 |
smsCode |
string |
- |
短信验证码校验 | 请填写${param[0]}位短信验证码 |
income |
string |
- |
月收入校验,特殊处理 | 收入金额过小或格式错误(最多两位小数) |
VIN |
string |
- |
车架号校验 | 请填写正确的车架号 |
carPlateNumber |
string |
- |
车牌号校验 | 请输入正确的车牌号 |
dateNum |
string |
- |
无链接符日期校验 | 请填写${param[0]}-${param[1]}位数字 |
limitDigital |
string |
- |
车辆成交价校验 | 请填写${param[0]}元-${param[1]}元的数字 |
email |
string |
- |
邮箱校验 | 请填写正确的邮箱格式 |
- 校验参数
param
类型为array
注意事项
- 组件注意事项
自定义校验规则可通过,ValidateHoc(App, rule)
第二个参数rule传入,rule类型为对象,书写规范参考validate.rule.js
。
validate.rule.js
内部已定义部分检验规则。
若想直接通过正则表达式校验,可在 this.props.formValidate(validateArr) 调用的 validateArr 中,rule直接赋值正则表达式。
- 校验函数示例
// 整数范围 validator: '^[1-9]\\d*$' 'g' && >= param0 && <= param1 message: `请填写-的整数`
开发调试
进入项目目录后,使用 node
命令启动服务
npm run start
打包发布可通过 node
命令执行
npm run build
npm publish
相关资料
Changelog
0.1.0
- init
0.1.1
- 更新input样式
0.1.2
- validate bugfix
0.1.3
- validata 增加
errMsg
、requireMsg
属性,区分错误提示信息
0.1.4
- 修复Input、Textarea组件readOnly时会显示autoClear的bug
- 增加input readonly、disabled显示样式
0.1.5
- 修复Input type为number类型时maxLength属性失效问题
- 修复Input 样式bug
- 修改Input、Textarea readOnly状态样式
0.1.6
- 增加validate.rule readme
- Input readme增加maxLength属性
- Input 增加refName属性,用于获取原生input
- validate.rule增加 mobilephone 手机号校验
- validate errMsg支持array类型,用于多个rule时,不同校验规则下的错误提示信息。若errMsg为string类型,只能提示一个错误提示信息
0.1.7
- 姓名校验增加自动去空格功能
- 表单序列化时增加字符串类型自动去掉两端空格功能
- validate.rule对param进行容错处理
0.1.8
- input placehoder err时增加颜色显示
- select、input[type=number]增加兼容火狐浏览器样式处理
0.1.9
- 修复了validate中校验逻辑中的bug
- 增加了
InputValidate
、TextareaValidate
、Form
组件,用于input输入中校验场景
0.2.0
- 去掉了
Form
组件 - 增加了
Submit
组件,代替之前Form
组件 - 增加了
InputValidate
的通用性,适用于input输入过程中校验和只在submit阶段校验两种业务场景,通过validate属性的type属性区分,type为'submitValidate'则只在提交时校验,type默认为input输入时校验。
0.2.1
- 修复了
Autoclear
组件pc端bug - 校验规则中增加了
dateNum
、email
、limitDigital
校验规则
0.2.3
- 修改
Autoclear
显示样式
0.2.4
- 增加
Autoclear
是否显示属性useClear
- 修复
Input
value undefined值时报错问题 - 修复
Input
number 类型可输入e问题 - 修正无连接符日期
dateNum
校验规则
0.2.5
- 修改
checkinput
组件中label
的属性类型为字符串或数字或dom元素
0.2.6
- 增加电话号码号段校验
0.2.7
- 校验年龄bug修复
0.2.8
- 移除includes方法
- 修复input type number bug
0.2.9
- 修改日期校验规则
0.2.10
- 修改车架号校验规则
0.3.0
- 升级至react-16版本
0.3.2
- 修复input、textarea 组件卸载时setState bug
0.3.3
- 修复input、textarea onBlur时x号一直显示bug
- validate.js rule 兼容function
0.3.4
- bugfix for validate.js rule
0.3.5
- setTimeout add clearTimeout
0.3.6
- 升级ui
0.3.7
- agreement组件bugfix
0.3.8
- agreement组件bugfix,增加uuid
0.3.9
- 修改姓名校验规则
0.3.11
- select bugfix
0.3.12
- optimize animation
0.3.13
- input and lm-cell-label style bugfix
1.0.0
- modify css because new ui standard
1.0.1
- modify checkbox and agreement css
1.0.2
- upgrade dependency lm-cell version