更新记录
3.3.8(2023-09-15)
下载此版本
1.新加了uv的日历组件
3.3.7(2023-06-23)
下载此版本
-1.修复图片赋值时,赋值错误
3.3.6(2022-08-02)
下载此版本
1.身份证错误提示
查看更多
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 3.3.11 |
× |
√ |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
× |
× |
× |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
√ |
√ |
√ |
√ |
√ |
× |
× |
√ |
√ |
formList 表单组件
uniapp 表单组件,可根据自身需求配置生成表单,集合身份证验证,手机验证,发送验证码等一般业务需求,可根据用户选择改变表单元素
在线H5-demo
form-list
平台兼容
H5 |
微信小程序 |
支付宝小程序 |
百度小程序 |
头条小程序 |
QQ 小程序 |
App |
√ |
√ |
未测 |
未测 |
未测 |
未测 |
√ |
QQ群
821391485
安装
直接导入即可
代码演示
基本用法
html
<zhaoxin-formList @change="change" @enter="enter" ref="formRef" :formArr="formArr" :formObj.sync="formObj" @valid="valid" :config="config" @yzmRelatCode="yzmRelatCode" />
<view @click="submit" :class="{sub:validTF}">注册</view>
props
formArr 传入一个包含对象的数组,构建表单
formObj 传入一个对象,初始化组件的值
changeState 动态修改元素属性,或者配合单选多选显示隐藏某些元素
countList 传入一个字符串的数组,自动计算属性,可多条同时执行
config 组件通用配置,(可不传的)
buttons 内置的按钮组传入数组或对象,(可不传的)
重要的props
changeState
//html里
:changeState="changeState"
// data里
change:(val)=>{
if (val.code=='xxx'&&val.value==1) {
this.changeState=[
{
code:'xxx',
show:true,
},
{
el:'span',
code:'xxx',
show:false,
},
]
}
}
countList 自动计算
//html里
:countList="countList"
// data里
// 1. 可多条同时简单的加减乘除计算,
// 2.等号后面的字段也是必须写的,
// 3.不能有括号例如:(a+b)*c
countList:['code1+code2-code3*code4/code5=end1','code1-code3*code4/code5=end2']
let formArr= [
{
el: 'input',//输入框的类型,input是默认可以不写的
label: '姓名',// 显示的名字,输入错误、placeholder也会默认“请输入+label”
code: 'name',// 表单验证后接收的字段,这个需要是唯一的
type: 'text',// 文本格式,text(默认普通文本),number(数字),digit(小数点,数值),idcard(身份证),password(密码)
maxlength: 11,// 最小长度
rexType: 'zh',//验证规则(zh 中文,number 数字,password 数字加特殊字符,phone 手机号,email 邮箱,idCard 身份证),也可以在util.js里的refObject配置自己需要的通用规则
minlength: 3,// 最大长度
required:false,//是否是必填,默认必填
fun:getdata3,//传入请求数据的promise函数,组件会自动请求结果,默认会取res.data的值,不是的话用funMode(小程序不支持)
// res是返回的结果,处理好了再返回给组件,完成自定义处理返回结果(小程序不支持)
funMode:(res)=>[{value:56,label:'请求后加的数据'},...res.xxx.xx.map(v=>({value:v.id,label:v.name}))],
},
// 一般输入框可以怎样写
{
label: '姓名',
code: 'name',
},
{
el: 'select',
label: '简单下拉',
code: 'select',
list:['羽毛球','LOL','mmp']//
},
]
// 对应数组里的code字段,写了就会赋值进去(用于修改信息),不写也会自动创建
let formObj={
name:'2498489'
},
buttons 按钮组
// buttons 是数组时
buttons:[
{
funType:'confirm',// confirm:确认按钮 触发验证事件,reset重置
text:'验证变色',// 显示文字
class:'btn_orange_h86 long round',// 内置按钮可见demo(或button.scss),也可自己写按钮样式,添加对于的class
style:{// 按钮样式
},
changColor:true,//验证通过是否需要变色,通过会自动加上cant这class,如果自己写的按钮,也要加上&.cant不然不起作用
changCantText:'未通过',//未通过时的文字,(默认不填)
changCantStyle:{//自定义修改未通过验证的样式,样式层级高于style
background:'gray'
},
},
{
funType:'reset',// 重置按钮
text:'重置',
class:'btn_red_h72 long'
},
{
text:'一般按钮',
class:'btn_wx_h64 long'
},
]
// buttons 是对象时
buttons:{
class:'',//作用于按钮组父级的class
style:'',//作用于按钮组父级的 style
list:[//按钮组
{
text:'一般按钮',
class:'btn_wx_h64 long'
},
]
}
事件
事件名 |
返回值 |
说明 |
@change |
Object |
表单内的值变化,会传出{el,code,value,formObj} |
@enter |
false/Object |
按下enter键验证表单 |
@valid |
false/true |
实时监听所有表单输入值是否通过验证 |
@rightClick |
Object |
右边点击事件,返回相对于的列的对象以及对应的值(obj.value) |
@yzmRelatCode |
false/String |
接收验证码绑定的那个表单的验证结果,没有通过就是false,通过了就是通过验证的值(目前一个表单只能有一个验证码) |
@addFile |
Array |
在不是UNiCloud服务器下,自己接收添加文件的事件,用于上传自己的服务器 |
@buttonClick |
Object |
内置按钮点击事件返回点击的按钮对象,funType:'confirm',时会传出结果 |
接收结果
submit(){
if (this.$refs.formRef.checkForm()) {
let data=this.$refs.formRef.checkForm()
}
}
// 添加了按钮的才会有结果,funType=='confirm'时只有通过才会有回调,且有values
buttonClick(button){
if (button.funType=='confirm') {
let data=button.values
console.log(data)
// todo 提交结果
}
}
重置表单
this.$refs.formRef.reset()
// 保留不重置的字段,用逗号隔开
this.$refs.formRef.reset('code1,code2')
enter
// 按下enter时触发提交表单
enter(val){
if (val) {
this.submit()
}
},
change
// 表单变化change
change(val){
console.log(val)
},
验证码处理
组件里加 @yzmRelatCode="yzmRelatCode"
// 接受验证码 接收的是关联的组件有code和 results 返回值
yzmRelatCode(val){
if (val.results) {
// 验证码是可以多个的
if(val.code==xxx){
// 这里做请求
}
if(val.code==xxx){
// 这里做请求
}
}
},
动态获取验证结果
// 是否通过可以用来改变按钮颜色
valid(val){
this.validTF=val
},
右边点击事件
// 返回对应的对象,val.value是前面输入框的值,val.valueRight 多个元素时点中的元素
rightClick(val){
console.log(val)
console.log(val.value)
},
checkForm 接收表单验证后返回的结果
返回值 |
说明 |
false |
表单输入值没有通过验证 |
Object |
通过验证 |
小程序配置自定义验证的添加
(鉴于小程序不能动态传入正则于此做的妥协)
// 在全局添加一个selfPattern的对象
Vue.prototype.selfPattern={
test:{
name:'中文',//这个key这是提示,不必填的
pattern:/^[\u4e00-\u9fa5]+$/,// 正则
error:'请输入中文',// 验证失败时的报错
},
test2:{
name:'中文',//这个key这是提示,不必填的
pattern:/^[\u4e00-\u9fa5]+$/,// 正则
error:'请输入中文',// 验证失败时的报错
},
}
// 使用时直接用它的key即可
rexType:'test'
config 表单配置
字段 |
类型 |
默认值 |
说明 |
pureMode |
Boolean |
false |
是否只返回表单数据(纯净模式) |
labelShow |
Boolean |
true |
是否显示label |
labelWidth |
String |
5em |
label文字宽度(默认可以不写的,初始化时会自动用最长的label做长度,单位是中文的em,英文的要自己设置最大长度) |
labelAlign |
String |
left |
label文字对齐方式,left左对齐,right右对齐,center居中,justify分布两边对齐 |
required |
Boolean |
true |
是否显示* |
background |
String |
白色 |
背景颜色 |
once |
Boolean |
true |
输入错误提示,所有验证是否只提醒第一个 |
clear |
Boolean |
true |
是否显示X清除 |
theme |
String |
'' |
主题,默认是登录主题,内置了一个边框主题,borderFormList,可以自己写css替换主题 |
inputItemStyle |
Object |
{} |
每个item的样式 |
requiredStyle |
Object |
{} |
*外部样式 |
requiredInStyle |
Object |
{} |
*内部样式 |
labelStyle |
Object |
{} |
label外部样式 |
labelStyleIn |
Object |
{} |
label内部样式 |
inputStyleOut |
Object |
{} |
输入框外部样式 |
formArr说明
字段 |
类型 |
默认值/是否必填 |
说明 |
el |
String |
input |
input(默认),span(文本),yzm(),line(分割线),select(下拉选择),switch(开关) |
label |
String |
必填 |
表单前面名字,只有el=line时不是必填 |
required |
Boolean |
true |
是否必填,默认必填 |
code |
String |
必填 |
字段名,用于接收表单返回值,formObj里填入相对于值,可以用于编辑 |
add |
Boolean |
false |
是否允许复制自己,有复制个数控制 addMax,自定义样式和内容,具体操作看demo |
valueChange |
Function |
- |
(小程序不支持)value变化时操作(value,formObj)=>[],value当前值,formObj当前结果,返回一个可以改变其他元素的list,作用和changeState相同 |
插槽 |
------ |
------ |
--------- |
el== itemSlot |
String |
null |
整体插槽,整体一条被替换 |
el== slot |
String |
null |
内部插槽 ,显示内容插槽, |
slot |
String |
null |
内部插槽 |
itemSlot |
String |
null |
整体插槽 |
labelSlot |
String |
null |
label的插槽,label被替换 |
beforeSlot |
String |
null |
label之前的插槽 |
afterSlot |
String |
null |
显示数据之后的插槽 |
el=input(输入框) |
|
----- |
----- |
claer |
Boolean |
true |
是否显示x,默认显示 |
maxlength |
Number |
非必填 |
最大长度 |
minlength |
Number |
非必填 |
最小长度 |
type |
String |
text |
el=input时,验证输入格式,默认text,和uni-app的input的type一样 |
rexType |
String |
非必填 |
el=input时,内置的验证输入格式验证,有idCard(身份证验证),phone(手机),zh(中文),number(整数),password(密码,数字加特殊字符),email(邮箱) |
rexStr |
String |
非必填 |
el=input时,自定义验证输入格式,例如/[1-5]+/ |
placeholder |
String |
非必填 |
未输入时的提示 |
errTips |
String |
非必填 |
验证错误时的提示 |
rightClick |
String/Array |
非必填 |
右边文字(可字符串可数组,数组元素:text显示的文字,valueRight 用于区分的值,className css类,style样式),用@rightClick接收相对于的对象 |
rightClickStyle |
Object |
非必填 |
右边文字样式,例如{color:red} |
el = yzm(验证码发送的输入框) |
----- |
----- |
----- |
time |
String/Number |
60 |
重新发验证码的时间 |
unit |
String |
s |
时间单位 |
botton |
String |
获取验证码 |
右边按钮的文本 |
after |
String |
重新获取 |
发送后文字 |
relatCode |
String |
必填 |
关联绑定的输入框的字段,会获取相对于的输入框的验证后的值 |
storage |
Boolean |
false |
是否本地存储上一次发生验证码的时间,true时浏览器刷新后依然有倒计时 |
el = textArea |
----- |
----- |
----- |
autoHeight |
Boolean |
false |
自动高度,设置自动高度后height不会生效 |
height |
String |
200rpx |
高度 |
el = select(下拉选择) |
----- |
----- |
----- |
list |
Array |
非必填 |
选择的数组,可以是对象数组(例如:{ value:1,label:'羽毛球'}) |
isObj |
Boolean |
false |
(弃用,传入字符串也自动会转成对象) 数组内元素的属性,默认是字符串 |
getValue |
String |
code+'_id' |
选中的value的返回字段 |
search |
Boolean |
false |
开启搜索,默认不开启 |
join |
String |
, |
如何拼接字符串 |
selectType |
String |
label |
默认是label,返回结果是 label,value返回结果是value,all,同时返回:label(code对应的结果),value(code+'_id') |
getKey |
String |
label |
取值的键值,默认是 label(只能用label或value,其他值会报错),在赋值和取值的时候会用到 |
el = area(省市区选择) |
----- |
----- |
----- |
level |
Number |
3 |
级数选择3省市区,2省市,1省 |
getValue |
String |
code+'_id' |
选中的value的返回字段 |
list |
Array |
非必填 |
省市区数据,在config里的areaData里也可以设置地区数据 |
--- |
-- |
-- |
省市区默认选择格式,例子area:'四川省,成都市,成都市'(注意是英文的逗号)。areaData.js里是省市区格式 |
el = switch |
----- |
----- |
----- |
color |
String |
#1cbbb4 |
颜色 |
el = date(日期,时间选择) |
----- |
----- |
----- |
timeType |
String |
date |
属性 date 年月日,year-month 年月,year 年,datetime 年月日 时分,datetime-all 年月日 时分秒,time 时分秒,hour-minute 时分 |
startYear |
String/Number |
1900 |
开始年 |
endYear |
String/Number |
未来5年 |
结束年 |
el = checkBox(多选框,单选) |
----- |
----- |
----- |
list |
Array |
[] |
选择选项 |
getLabel |
String |
code+'_label' |
接收选中的label字段 |
listType |
String |
String |
(弃用,传入字符串也自动会转成对象) list内部元素是String还是Object |
multi |
Boolean |
false |
是否是多选 |
color |
String |
#9AA3AC |
未选中颜色 |
activeColor |
String |
#1677FF |
选中颜色 |
solid |
Boolean |
false |
是否实心 |
round |
Boolean |
false |
是否圆 |
custom |
Boolean |
false |
是否启用自定义样式 |
customCheck |
String |
'' |
自定义选中,在uni.scss里定义一个类,详情可以参考demo里的uni.scss的操作 |
customNoCheck |
String |
'' |
自定义未选中 |
el = signature(签名) |
----- |
----- |
----- |
config |
Object |
{} |
默认:height:400rpx(图片高度),heightSign: '340rpx'(画布高度),title: '请签字', cancel:'取消',clear:'清空', sure:'确定',inline:false. inline是否内联在表单里 |
el = update(上传文件,不支持小程序) |
----- |
----- |
----- |
uniCloud |
Boolean |
false |
是否是上传到uniCloud,Cloud要自己申请配置 |
model |
String |
必填 |
上传模式,img(图片),file(文件),video(视频) |
filePre |
String |
'' |
文件名前缀 |
rows |
Number |
4 |
一列放几个 |
max |
Number |
9 |
最大个数 |
aLiYunOss |
Boolean |
false |
是否使用阿里云oss上传图片,测试不完全,需要自己改代码,在formList里搜aLiYunOss |
sign |
Object |
{} |
阿里云的动态签名, aLiYunOss为true时,必填host,policy,accessId,signature |
el = slot (插槽) |
------ |
----- |
在输入框的位置的插槽 |