更新记录

1.0.0(2026-08-14) 下载此版本

  • 首次发布:基于 uView Pro 的 JSON 规则动态表单渲染器
  • 兼容 form-create / form-create-uni 规则约定
  • 支持声明式(rule prop)与命令式(showForm)用法
  • 内置 input / password / textarea / inputNumber / radio / checkbox / select / cascader / switch / datePicker / timePicker / dateRange / timeRange / slider / rate / upload / color / transfer / tree / treeSelect / editor / signature 等字段类型

平台兼容性

uni-app(5.15)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

其他

多语言 暗黑模式 宽屏模式
× ×

form-create-uviewPro

基于 uView Pro 的 JSON 规则动态表单渲染器,兼容 form-create / form-create-uni 的规则约定。把一份 JSON 规则渲染成 uView Pro 原生样式的表单,支持填写、校验、提交、重置,全端可用(H5 / 小程序 / App)。

特性

  • JSON 规则驱动,规则约定对齐 form-create / form-create-uni,PC 端设计器产物可直接复用
  • 内置字段类型:input / password / textarea / inputNumber / radio / checkbox / select / cascader / switch / datePicker / timePicker / dateRange / timeRange / slider / rate / upload / color / transfer / tree / treeSelect / editor(富文本)/ signature(手写签名)
  • 展示类字段:span / el-divider / el-alert / el-button / div
  • 支持声明式(rule prop)与命令式(showForm)两种用法

前置依赖

本插件基于 uView Pro 组件渲染,使用前请先安装并全局配置 uView Pro^0.5.16)。富文本(editor)、手写签名(signature)依赖 uni 原生 editor / canvas,各端能力存在差异,请以实测为准。

安装

在 uni-app 项目中通过 uni_modules 导入本插件后,easycom 会自动注册组件,无需手动 import。

基础用法(声明式)

<template>
  <form-create-uview-pro ref="formRef" :rule="rule" :option="option" @submit="onSubmit" />
</template>

<script setup lang="ts">
import { ref } from 'vue'

const formRef = ref()
const rule = ref([
  { type: 'input', field: 'name', title: '姓名', value: '', props: { placeholder: '请输入姓名' }, validate: [{ required: true, message: '请输入姓名' }] },
  { type: 'radio', field: 'sex', title: '性别', value: 1, options: [{ label: '男', value: 1 }, { label: '女', value: 2 }] },
])
const option = ref({ labelPosition: 'left' })

function onSubmit(finalRule) {
  // finalRule 为写回 value 后的规则数组
  console.log(finalRule)
}
</script>

命令式用法

// 动态设置规则并渲染
formRef.value.showForm(rule)
// 回填表单值(field → value)
formRef.value.setFormModel({ name: '张三', sex: 2 })
// 校验
formRef.value.validate((valid) => { /* ... */ })
// 取写回 value 后的规则数组 / 扁平数据对象
const finalRule = formRef.value.getFormData()
const model = formRef.value.getFormModel()
// 重置
formRef.value.resetFields()

Props

属性 类型 默认值 说明
rule JsonFormFieldRule[] [] JSON 字段规则数组(对齐 form-create-uni rule)
option JsonFormConfig {} 表单整体配置(对齐 form-create-uni option)

Events

事件 参数 说明
submit rule: JsonFormFieldRule[] 提交时触发,回传写回 value 后的规则数组

暴露方法(defineExpose)

方法 签名 说明
showForm (rule: JsonFormFieldRule[]) => void 命令式设置规则并渲染
getFormData () => JsonFormFieldRule[] 获取写回 value 后的规则数组
getFormModel () => Record<string, any> 获取扁平的表单数据对象
setFormModel (model: Record<string, any>) => void 命令式回填表单值
validate (cb: (valid: boolean) => void) => void 触发校验
resetFields () => void 重置表单

规则字段(JsonFormFieldRule)

完整类型契约见组件目录下 types.ts顶层公共字段(各控件通用):

字段 说明
type 字段类型(见下表)
field 表单数据 key(提交/取值的属性名)
title 标签文案
value 初始值
$required 必填:true 或自定义提示语(等价 validate.required
props 透传到底层控件的属性对象,仅下表列出的键生效
options 选项数组 { label, value, children? }(radio/checkbox/select/cascader/transfer/tree 用)
children 文本内容(展示类 span/el-divider/el-buttonchildren[0]
style 内联样式(div 间距等)

支持的字段类型与重要属性

下表 props 列为该控件唯一被解析的属性键;未列出的属性不生效。

类型 type 说明 支持的 props
input 单行输入 placeholder maxlength minlength disabled readonly clearable
password 密码输入 placeholder maxlength disabled
textarea 多行输入 placeholder maxlength disabled
inputNumber 数字步进 min max step disabled
radio 单选 disabled(选项用 options
checkbox 多选 disabled(选项用 options
select 下拉选择 placeholder multiple disabled(选项用 options
cascader 级联 placeholder multiple checkStrictly showAllLevels separator(数据用 options+children
switch 开关 activeColor disabled
slider 滑块 min max step blockWidth showInput activeColor disabled
rate 评分 max allowHalf disabled
datePicker / timePicker 日期 / 时间 placeholder minDate maxDate
dateRange / timeRange 日期 / 时间区间 placeholder minDate maxDate
upload 上传 action limit multiple accept listType autoUpload limitType
color 颜色选择 predefine placeholder
transfer 穿梭框 titles data
tree data nodeKey checkStrictly multiple
treeSelect 树选择 placeholder data nodeKey checkStrictly multiple
editor 富文本 placeholder(依赖原生 editor,各端能力有差异)
signature 手写签名 penColor lineWidth(依赖原生 canvas,各端能力有差异)
span / el-divider / el-alert / el-button / div 展示 / 占位 文本取 children[0]div 支持 style

表单整体配置(option / JsonFormConfig)

字段 说明
submitBtn { show?, text? } 提交按钮,show=false 隐藏
resetBtn { show?, text? } 重置按钮,show=true 显示
form.labelPosition 标签位置 top / left / right
form.labelWidth 标签宽度
form.showMessage 是否展示校验错误信息

不支持的组件(明确不渲染)

子表单组件、辅助组件、布局组件、栅格 row/col、表格 table、标签页 tabs、卡片 card、折叠面板 collapse、步骤条 steps、间距 space,以及任何未在上表列出的自定义 / 高级组件。遇到这些容器时,请在传入前递归扁平化、只保留其中的基础控件。

递归扁平化示例

form-create 的布局/容器组件(栅格、表格、标签页、卡片、折叠面板等)没有 field,表单控件都挂在其 children 里。本插件已内置 flattenControls 工具,把含布局容器的规则树一行拍平成「基础控件数组」,无需自己实现,直接 import 即可:

// 短路径(推荐):从插件根入口引用
import { flattenControls } from '@/uni_modules/form-create-uviewPro'
// 或完整路径:
// import { flattenControls } from '@/uni_modules/form-create-uviewPro/components/form-create-uview-pro/utils'

// designerRule 为 PC 设计器导出的原始规则(可能含栅格/表格/标签页等布局容器)
const controls = flattenControls(designerRule)

// 再传给组件:声明式绑定 :rule,或命令式 showForm
formRef.value.showForm(controls)
// 也可直接绑定:<form-create-uview-pro :rule="controls" />

内部判据flattenControls 的处理规则):

  1. hidden === true(设计器「隐藏」开关)的节点整体跳过(容器隐藏则内部控件同跳过);
  2. field 的节点 = 基础控件叶子 → 直接收集、不再下钻(子表单等复合控件当作不透明整体,不误拆内部字段);
  3. field 的节点 = 布局/容器 → 忽略自身、递归下钻 children

控件保持原有出现顺序。函数签名:flattenControls(nodes: Record<string, any>[]): Record<string, any>[]

兼容性

平台兼容矩阵以插件详情页 / package.json 为准。

许可

本插件基于 MIT License 开源,版权归 向小江,详见插件根目录 LICENSE

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT License

Copyright (c) 2026 向小江

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

暂无用户评论。