更新记录

1.0.0(2025-02-14) 下载此版本

  • 1、动态表单组件v1.0.0发布
  • 2、基于uni-ui -> uni-forms开发
  • 3、加入自定义组件
  • 4、集成【单行文本、文本域、数字、小数、身份证、手机号、日期、单选框、复选框、下拉选项、弹出单选、弹出多选、级联选择器、图片上传、视频上传、附件上传】组件
  • 5、专注于配置信息,无需关注前端表单元素
  • 6、后端开发程序猿-懒人福利

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.1.0 × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

ziqirj-dynamic-form 动态表单组件

  • 组件名:ziqirj-dynamic-form
  • 代码块: ziqirj-dynamic-form
  • 关联组件:scss/sass

插件说明

  • 1、动态表单组件v1.0.0发布
  • 2、基于uni-ui -> uni-forms开发
  • 3、加入自定义组件
  • 4、集成【单行文本、文本域、数字、小数、身份证、手机号、日期、单选框、复选框、下拉选项、弹出单选、弹出多选、级联选择器、图片上传、视频上传、附件上传】组件
  • 5、专注于配置信息,无需关注前端表单元素
  • 6、后端开发程序猿-懒人福利

使用说明

组件参数Props

参数 类型 默认值 必填 描述
formId Stirng 'dynamicFormRef' false 表单ref,唯一标识
validateTrigger String 'blur' false 表单验证触发方式 可选值
labelPosition Stirng 'left' false label位置 可选值
labelWidth Stirng '100px' false label宽度
labelAlign Stirng 'right' false label对齐方向 可选值
border Boolean true false 是否显示分格线
formList Object [] true 动态表单配置信息
dynamicForm Object {} false 动态表单form
formRules Object {} false 表单验证规则
button Object {cancel: {show: true, icon: 'close', text: '取消', style: {color: '#686868'}},
confirm: {show: true, icon: 'checkbox', text: '确定', style: {color: '#fff'}}}
false 按钮配置

formList 数据格式

属性名 类型 必须 描述
formName String true 表单属性名,formList中唯一存在
formTitle String true 表单label文本
formType String true 表单类型
required Boolean true 是否必填
placeholder String true 表单输入提示文本
requiredTip String false 表单验证提示文本,required为true时必填
forbidden Boolean true 是否禁用
options Array false 【radio|checkbox|select|popupSelect|dataPicker】必填
数据格式:[{{value: 1, text: '选项一'}}]
config Object false 详见下方【formType可选值,及其config参数】

formType可选值,及其config参数

描述 表单值 示例值 config参数
text 单行文本 String 'set单行文本'
textarea 文本域 String 'set文本域' {maxlength: 最大可输入字符数,默认:200}
number 数字 Number 123
digit 小数 Number 12.3
idcard 身份证,H5自带格式验证 '5303253' String
phonenumber 手机号,H5自带格式验证 '' String
datetime 日期时间 String '2025-02-13' 参考【uni-datetime-picker 日期选择器】,所有参数修改命名方式为驼峰命名,
如start-placeholder修改为startPlaceholder
radio 单选 String|Number 1
checkbox 复选框 Array [1, 3]
select 下拉选项 String|Number 2
popupSelect 弹出多选 Array [2, 4] 参考【ziqirj-popup-select 弹出选择器
dataPicker 级联选择器 Array [{value: '1-0', text: '一年级'}, {value: '1-1', text: '1.1班'}]
uploadImage 图片上传 Array [{name: '文件名', url: '可访问链接'}] 参考【ziqirj-ui 图片或视频文件上传
uploadVideo 视频上传,微信小程序支持预览 Array [{name: '文件名', url: '可访问链接'}] 参考【ziqirj-ui 图片或视频文件上传
uploadAffix 文件上传 Array [{name: '文件名', url: '可访问链接'}] 参考【ziqirj-ui 文件上传

回调函数

方法名 参数 描述
clickAffix Object 文件上传组件,附件点击回调函数,
参考【ziqirj-ui 文件上传
uploadAffix Object 文件上传组件,关闭自动上传,回调函数,
参考【ziqirj-ui 文件上传
cancel 点击【取消】回调函数
confirm {formId: 表单ref,唯一标识, formData: 表单数据} 表单验证通过后,点击【确定】回调函数

可用方法

方法名 参数 描述
clearForm 清空表单方法
uploadSuccess {param: '表单属性名',
affixList: [{name: '文件名', url: '可访问url'}]}
文件上传属性赋值,关闭文件自动上传,
可在手动上传成功后调用,手动赋值

使用示例

<template>
    <view style="padding: 0 15px;">

        <view style="display: flex; flex-wrap: wrap; justify-content: flex-start;">
            <button @click="setFormData">设置表单值</button>
            <button @click="disabledItem">{{ this.disabled?'禁用': '启用' }}部分表单</button>
            <button @click="clearForm">重置表单</button>
        </view>

        <ziqirj-dynamic-form ref="dynamicFormRef" :form-id="formId" :form-list="formList"
            :dynamic-form="form" label-width="90px" @cancel="back" @confirm="confirm" />

        <view style="height: 30px;"></view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                formId: 'dynamicFormId',
                formList: [
                    { formName: 'text', formTitle: '单行文本', formType: 'text', required: true, placeholder: '请输入单行文本', requiredTip: '单行文本不能为空', forbidden: false },
                    { formName: 'textarea', formTitle: '文本域', formType: 'textarea', required: false, placeholder: '请输入文本域', requiredTip: '文本域不能为空', forbidden: false,
                        config: {maxlength: 200}},
                    { formName: 'number', formTitle: '数字', formType: 'number', required: true, placeholder: '请输入数字', requiredTip: '数字不能为空', forbidden: false },
                    { formName: 'digit', formTitle: '小数', formType: 'digit', required: false, placeholder: '请输入小数', requiredTip: '数字不能为空', forbidden: false },
                    { formName: 'idcard', formTitle: '身份证', formType: 'idcard', required: true, placeholder: '请输入身份证', requiredTip: '身份证不能为空', forbidden: false },
                    { formName: 'phonenumber', formTitle: '手机号', formType: 'phonenumber', required: false, placeholder: '请输入手机号', requiredTip: '手机号不能为空', forbidden: false },
                    { formName: 'datetime', formTitle: '日期', formType: 'datetime', required: true, placeholder: '请选择日期', requiredTip: '请选择日期', forbidden: false,
                        config: {}},
                    { formName: 'radio', formTitle: '单选框', formType: 'radio', required: true, requiredTip: '请选择选项', 
                        options: [{value: 1, text: '选项一', selected: false}, {value: 2, text: '选项二', selected: false}], forbidden: false },
                    { formName: 'checkbox', formTitle: '复选框', formType: 'checkbox', required: false, requiredTip: '请选择选项', forbidden: false, 
                        options: [{value: 1, text: '选项一', selected: false}, {value: 2, text: '选项二', selected: false}, {value: 3, text: '选项三', selected: false}, {value: 4, text: '选项四', selected: false}, {value: 5, text: '选项五', selected: false}] },
                    { formName: 'select', formTitle: '下拉选项', formType: 'select', required: true, requiredTip: '请选择选项', placeholder: '请选择选项', forbidden: false,
                        options: [{value: 1, text: '选项一', selected: false}, {value: 2, text: '选项二', selected: false}, {value: 3, text: '选项三', selected: false}, {value: 4, text: '选项四', selected: false}, {value: 5, text: '选项五', selected: false}] },
                    { formName: 'popupSelectRadio', formTitle: '弹出单选', formType: 'popupSelect', required: true, requiredTip: '请选择选项', placeholder: '请选择选项', forbidden: false,
                        options: [{value: 1, text: '选项一', selected: false}, {value: 2, text: '选项二', selected: false}, {value: 3, text: '选项三', selected: false}, {value: 4, text: '选项四', selected: false}, {value: 5, text: '选项五', selected: false}],
                        config: {multiple: false} },
                    { formName: 'popupSelect', formTitle: '弹出多选', formType: 'popupSelect', required: true, requiredTip: '请选择选项', placeholder: '请选择选项', forbidden: false,
                        options: [{value: 1, text: '选项一', selected: false}, {value: 2, text: '选项二', selected: false}, {value: 3, text: '选项三', selected: false}, {value: 4, text: '选项四', selected: false}, {value: 5, text: '选项五', selected: false}] },
                    { formName: 'dataPicker', formTitle: '级联选择器', formType: 'dataPicker', required: true, placeholder: '请选择选项', requiredTip: '请选择选项', forbidden: false,
                        options: [{"text":"一年级","value":"1-0","children":[{"text":"1.1班","value":"1-1"},{"text":"1.2班","value":"1-2"}]},{"text":"二年级","value":"2-0"},{"text":"三年级","value":"3-0"}],
                        config: {} },
                    { formName: 'uploadImage', formTitle: '图片', formType: 'uploadImage', required: true, placeholder: '请上传图片', requiredTip: '请上传图片', forbidden: false,
                        config: {limit: 5, url: 'http://localhost:9002/common/upload', config: {name: 'originalFilename', url: 'url'}} },
                    { formName: 'uploadVideo', formTitle: '视频', formType: 'uploadVideo', required: true, placeholder: '请上传视频', requiredTip: '请上传视频', forbidden: false,
                        config: {url: 'http://localhost:9002/common/upload', config: {name: 'originalFilename', url: 'url'}} },
                    { formName: 'uploadAffix', formTitle: '附件', formType: 'uploadAffix', required: true, placeholder: '请上传附件', requiredTip: '请上传附件', forbidden: false,
                        config: {url: 'http://localhost:9002/common/upload', config: {name: 'originalFilename', url: 'url'}} }
                ],
                form: {},
                formRules: [],
                disabled: true
            }
        },
        methods: {
            setFormData() {
                this.form = {
                    text: 'set单行文本',
                    textarea: 'set文本域',
                    number: 123,
                    digit: 12.3,
                    idcard: '5322251',
                    phonenumber: '',
                    datetime: '2025-02-13',
                    radio: 1,
                    checkbox: [1, 3],
                    select: 2,
                    popupSelectRadio: [4],
                    popupSelect: [2, 4],
                    dataPicker: [{value: '1-0', text: '一年级'}, {value: '1-1', text: '1.1班'}],
                    uploadImage: [{name: 'logo.png', url: 'https://icon.jjzqkj.cn/logo.png'}],
                    uploadVideo: [{name: 'uni-app.mp4', url: 'https://icon.jjzqkj.cn/uni-app.mp4'}],
                    uploadAffix: [{name: 'RuoYi-Vue-master3.8.7.zip', url: 'https://icon.jjzqkj.cn/RuoYi-Vue-master3.8.7.zip'}]
                }
            },
            disabledItem() {
                this.formList[0].forbidden = this.disabled
                this.formList[2].forbidden = this.disabled
                this.formList[4].forbidden = this.disabled
                this.formList[8].forbidden = this.disabled
                this.formList[10].forbidden = this.disabled
                this.formList[this.formList.length - 3].forbidden = this.disabled
                this.formList[this.formList.length - 1].forbidden = this.disabled

                this.disabled = !this.disabled
            },
            clearForm() {
                this.$refs.dynamicFormRef.clearForm()
            },
            back() {
                uni.navigateBack({delta: 1})
            },
            confirm(e) {
                console.log("confirm form", e)
            }
        }
    }
</script>

<style>

</style>

依赖组件

scss/sass

uni-data-checkbox

uni-datetime-picker

uni-data-select

uni-data-picker

uni-easyinput

uni-forms

uni-icons

ziqirj-file-upload

ziqirj-media-upload

ziqirj-popup-select

如使用过程中有任何问题,或者您对组件有一些好的建议,欢迎留言

Email:zhangji_59@qq.com

紫琪程序猿

ziqiui示例

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。

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