更新记录
1.0.1(2023-04-10)
下载此版本
1.0.1 增加和兼容表单校验逻辑
1.0.0(2023-04-09)
下载此版本
1.0.0初始版本
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 3.7.0 |
× |
√ |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
× |
× |
√ |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
× |
× |
× |
× |
× |
× |
× |
× |
× |
fuhy-form动态表单
fuhy-form:基于uni-app原生组件,无任何第三方依赖;配置简单、无任何第三方依赖,支持输入框
、多行文本
、单选
、多选
、图片/视频上传
、多图片上传
;支持表单验证、默认数据等。
使用方法
demo
<template>
<view class="content">
<view class="title">基础表单</view>
<fuhy-form @submit="submit" @uploadMedia="uploadMedia" :formData="formData" @updateValue="updateValue" :config="config">
</fuhy-form>
</view>
</template>
<script>
export default {
data() {
return {
formData: {},
config: [
{label: '输入框',placeholder: '请输入', key: 'temperature', type: 'input',unit: '℃', inputType: 'text'},
{label: '单选', placeholder: '请选择', key: 'age', type: 'picker',options: [{label: '1岁',value: '1'},{label: '2岁',value: '2'}],},
{label: '多选', key: 'bloodPressure', options: [{label: '看电影', value: '1'},{label: '下棋',value: '2'}],type: 'multipleChoice'},
{label: '文本框', placeholder: '请输入', key: 'remark',type: 'textarea'},
{label: '图片/视频', placeholder: '请上传图片', key: 'images',type: 'uploadMedia'},
{label: '日期', placeholder: '请选择日期', key: 'date',type: 'date'},
{label: '时间',placeholder: '请选择时间', key: 'time',type: 'time'},
{label: '多图上传', placeholder: '请上传图片', key: 'picture',type: 'pictureGroup', max: 2},
{label: '附件', placeholder: '请上传图片', key: 'button',type: 'inputButton',className:"buttonClass",buttonText:"计算",},//在原有基础上新增了计算按钮
{label: '制作日期', placeholder: '请选择日期', key: 'date',type: 'datetime'},//在原有基础上新增了日期范围选择器
{label: '场站', placeholder: '请选择', key: 'age', type: 'pickerElse',title:"选择进场",options: [{label: '1岁',detail:123333,value: '1'},{label: '2岁',value: '2'}]},//新增了父项以及多选
]
}
},
methods: {
// 更新数据
updateValue(val) {
this.formData = val
},
// 提交数据
submit(val) {
console.log(val)
console.log(this.formData)
},
// 图片/视频上传
uploadMedia(e) {
// 如果 在formData中没有定义该字段,则需要进行深拷贝
const data = JSON.parse(JSON.stringify(this.formData))
data[e.key] = e.tempFiles
this.formData = JSON.parse(JSON.stringify(data))
/* 如果定义了formData: {images: ''},则不需要进行深拷贝
this.formData[e.key] = e.tempFiles
*/
},
// 多图上传
uploadPicture(e) {
// 如果 在formData中没有定义该字段,则需要进行深拷贝
const data = JSON.parse(JSON.stringify(this.formData))
if(data[e.key] && data[e.key].length){
data[e.key] = [...data[e.key], e.tempFiles[0].tempFilePath]
}else{
data[e.key] = [e.tempFiles[0].tempFilePath]
}
this.formData = JSON.parse(JSON.stringify(data))
/* 如果定义了formData: {images: ''},则不需要进行深拷贝
this.formData[e.key] = [...this.formData[e.key], ...e.tempFiles[0].tempFilePath]
*/
},
}
}
</script>
配置说明
参数/事件 |
说明 |
默认值 |
类型 |
formData |
表单数据 |
{} |
Object |
config |
表单配置项,具体见下方文档 |
[] |
Array<Object> |
showButton |
是否显示提交按钮 |
true |
Boolean |
buttonText |
提交按钮文字 |
提交 |
String |
rules |
表单验证规则 |
[] |
Object |
@updateValue |
用于更新formData中的数据 |
-- |
Function |
@submit |
showButton为true时,点击提交按钮触发 |
-- |
Function |
@uploadMedia |
图片/视频上传回调函数 |
-- |
Function |
@uploadPicture |
图片视频上传回调函数(图片组) |
-- |
Function |
config 配置说明
字段名 |
说明 |
可选值 |
默认值 |
label |
标签文本 |
-- |
-- |
placeholder |
默认展示文字 |
-- |
-- |
key |
表单域 model 字段名称 |
-- |
-- |
type |
表单类型 |
input/textarea/picker/bloodPressure/uploadMedia/time/date/pictureGroup |
-- |
unit |
数据单位,在type等于input时生效 |
-- |
-- |
inputType |
input类型,在type等于input时生效 |
见uni-app中input的type |
-- |
verify |
是否必填项,如未传rules,则只验证数据是否有值 |
true/false |
-- |
options |
type为picker/bloodPressure时有效,结构为[{label: '', value:''}] |
[] |
-- |
count |
type为uploadMedia时生效,具体见uni.chooseMedia |
1-9 |
9 |
mediaType |
type为uploadMedia时生效,具体见uni.chooseMedia |
['image', 'video'] |
['image', 'video'] |
sourceType |
type为uploadMedia时生效,具体见uni.chooseMedia |
['album', 'camera'] |
['album', 'camera'] |
maxDuration |
type为uploadMedia时生效,具体见uni.chooseMedia |
1-30 |
30 |
camera |
type为uploadMedia时生效,具体见uni.chooseMedia |
back |
back |
start |
type为date/time时生效,具体见picker |
-- |
-- |
end |
type为date/time时生效,具体见picker |
-- |
-- |
fields |
type为date时生效,具体见picker |
year/month/day |
day |
max |
type为pictureGroup时生效,最多上传几张图片 |
1-10 |
1 |
rules 配置说明
目前rules
支持验证是否为必填、是否符合输入长度、以及正则验证,如验证失败,则通过uni
提供的uni.showToast
方法弹出message
;具体如下:
demo:
<template>
<view class="content">
<view class="title">表单验证</view>
<fuhy-form :rules="rules" @submit="submit" :formData="formData" @updateValue="updateValue" :config="config">
</fuhy-form>
</view>
</template>
<script>
export default {
data() {
return {
formData: {},
rules: {
temperature: [
{
required: true,
message: '请输入邮箱'
},
{
min: 3,
max: 11,
message: '长度在 3 到 5 个字符'
},
{
regular: '/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/',
message: '不符合规则'
}
],
},
config: [
{
label: '输入框',
placeholder: '请输入',
key: 'temperature',
type: 'input',
unit: '℃',
inputType: 'digit',
verify: true
},
]
}
},
methods: {
updateValue(val) {
this.formData = val
},
// 提交数据
submit(val) {
console.log(val)
console.log(this.formData)
},
}
}
</script>
配置说明:
字段名 |
说明 |
可选值 |
默认值 |
message |
提示语 |
-- |
-- |
required |
必填项验证 |
true |
true |
min/max |
验证数据是否在指定区间 |
-- |
-- |
regular |
正则 |
'' |
'' |
反馈&&交流
如有问题,可以评论区反馈