更新记录

3.3.8(2023-09-15)

1.新加了uv的日历组件

3.3.7(2023-06-23)

-1.修复图片赋值时,赋值错误

3.3.6(2022-08-02)

1.身份证错误提示

查看更多

平台兼容性

Vue2 Vue3
×
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 (插槽) ------ ----- 在输入框的位置的插槽

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问