FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的低代码表单生成组件。它支持 7 个 UI 框架,适配移动端,并且支持生成任何 Vue 组件。内置 20+ 种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定

使用 npm 安装
通过 npm 安装可以更好地与现代构建工具(如 Webpack)集成。
sh
npm i @form-create/antdv-next@^3
npm i antdv-next
引入和挂载
js
// 引入 form-create 组件库
import formCreate from '@form-create/antdv-next';
import Antdv from 'antdv-next';
import 'antdv-next/dist/reset.css';
// 创建 Vue 应用
const app = Vue.createApp({});
app.use(formCreate);
app.use(Antdv)
app.mount('#app');
高级版FormCreate表单设计器强势登场,让表单设计更简单
CDN 引入
可从 npm CDN 获取 @form-create/antdv-next 的打包文件。请先安装并在应用中挂载 antdv-next(含样式),再在同页或模块中加载 FormCreate;日期类组件通常还需 Day.js,请一并引入。
html
<link href="https://unpkg.com/antdv-next/dist/reset.css" rel="stylesheet">
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/dayjs"></script>
<!-- 按 antdv-next 文档挂载组件库后再引入 -->
<script src="https://unpkg.com/@form-create/antdv-next@^3/dist/form-create.min.js"></script>
创建表单
rule
const rule = [
{ type: 'input', field: 'goods_name', title: '商品名称', value: 'form-create' },
{
type: 'select',
field: 'category',
title: '分类',
value: 'digital',
options: [
{ label: '数码', value: 'digital' },
{ label: '家居', value: 'home' },
],
},
{ type: 'switch', field: 'enabled', title: '上架', value: true },
{
type: 'checkbox',
field: 'label',
title: '标签',
value: [0, 1],
options: [
{ label: '好用', value: 0 },
{ label: '快速', value: 1 },
{ label: '高效', value: 2 },
{ label: '全能', value: 3 },
],
},
];
const option = {
form: {
layout: 'horizontal',
labelAlign: 'right',
labelCol: { span: 6 },
wrapperCol: { span: 18 },
},
row: { gutter: 16 },
submitBtn: { show: true, innerText: '提交' },
resetBtn: { show: true, innerText: '重置' },
};
vue
<template>
<form-create :rule="rule" v-model:api="api" v-model="formData" :option="options" @submit="handleSubmit" />
</template>
<script setup>
import { ref } from 'vue';
const api = ref({});
const formData = ref({});
const handleSubmit = (formData) => {
alert(JSON.stringify(formData));
};
const options = ref({
resetBtn: true,
});
const rule = ref([
{
type: 'input',
field: 'goods_name',
title: '商品名称',
value: 'form-create',
},
{
type: 'checkbox',
field: 'label',
title: '标签',
value: [0, 1, 2, 3],
options: [
{ label: '好用', value: 0 },
{ label: '快速', value: 1 },
{ label: '高效', value: 2 },
{ label: '全能', value: 3 },
],
},
]);
</script>
AutoComplete 自动补全输入框
基础示例
js
const rule = {
type: "autoComplete",
title: "自动完成",
field: "auto",
value: "xaboy",
props: {
options: [{ value: "xaboy" }],
placeholder: "请输入"
}
}
Props 配置示例
支持清除 + 受控展开
js
const rule = {
type: "autoComplete",
title: "自动完成",
field: "auto",
value: "",
props: {
allowClear: true,
open: true,
options: [{ value: "a" }, { value: "b" }],
placeholder: "请输入"
}
}
搜索联动动态更新 options
js
const rule = {
type: "autoComplete",
title: "自动完成",
field: "auto",
value: "",
inject: true,
props: {
options: [],
placeholder: "请输入关键字"
},
on: {
search: (inject, value) => {
inject.self.props.options = !value
? []
: [{ value }, { value: value + value }, { value: value + value + value }]
}
}
}
整段禁用
js
const rule = {
type: "autoComplete",
title: "历史词(禁用)",
field: "hist_locked",
value: "antd",
props: {
disabled: true,
options: [{ value: "antd" }],
placeholder: "不可编辑",
},
}
尺寸对比(小 / 中 / 大)
js
const rule = [
{
type: "autoComplete",
title: "关键字(小)",
field: "kw_sm",
value: "",
props: {
size: "small",
allowClear: true,
placeholder: "小尺寸",
options: [],
},
},
{
type: "autoComplete",
title: "关键字(中)",
field: "kw_default",
value: "",
props: {
size: "middle",
allowClear: true,
placeholder: "默认尺寸",
options: [],
},
},
{
type: "autoComplete",
title: "关键字(大)",
field: "kw_lg",
value: "",
props: {
size: "large",
allowClear: true,
placeholder: "大尺寸",
options: [],
},
},
]
Cascader 级联选择器
基础示例
js
const rule = {
type: "cascader",
title: "所在区域",
field: "address",
value: ["陕西省", "西安市", "新城区"],
props: {
options: [
{
value: "beijing",
label: "北京",
children: [
{ value: "gugong", label: "故宫" },
{ value: "tiantan", label: "天坛" },
],
},
{
value: "jiangsu",
label: "江苏",
children: [
{
value: "nanjing",
label: "南京",
children: [{ value: "fuzimiao", label: "夫子庙" }],
},
],
},
],
},
}
Props 配置示例
可搜索
js
const rule = {
type: "cascader",
title: "所在区域",
field: "address",
props: {
options: [
{
value: "bj",
label: "北京",
children: [{ value: "gg", label: "故宫" }],
},
],
showSearch: true,
placeholder: "请选择或搜索区域",
},
}
任意一级可选(changeOnSelect)
js
const rule = {
type: "cascader",
title: "商品分类",
field: "category",
props: {
options: [
{
value: "a",
label: "电子产品",
children: [
{ value: "phone", label: "手机" },
{ value: "pc", label: "电脑" },
],
},
],
changeOnSelect: true,
placeholder: "可选择任意级别",
},
}
整段禁用
js
const rule = {
type: "cascader",
title: "固定区域(禁用)",
field: "region_locked",
value: ["bj", "gg"],
props: {
disabled: true,
options: [
{
value: "bj",
label: "北京",
children: [{ value: "gg", label: "故宫" }],
},
],
placeholder: "不可修改",
},
}
尺寸对比(小 / 中 / 大)
js
const cascSizeOpts = [
{
value: "zj",
label: "浙江",
children: [{ value: "hz", label: "杭州" }],
},
]
const rule = [
{
type: "cascader",
title: "区域(小)",
field: "region_sm",
props: {
size: "small",
allowClear: true,
placeholder: "小尺寸",
options: cascSizeOpts,
},
},
{
type: "cascader",
title: "区域(中)",
field: "region_default",
props: {
size: "middle",
allowClear: true,
placeholder: "默认尺寸",
options: cascSizeOpts,
},
},
{
type: "cascader",
title: "区域(大)",
field: "region_lg",
props: {
size: "large",
allowClear: true,
placeholder: "大尺寸",
options: cascSizeOpts,
},
},
]
Checkbox 多选框
基础示例
js
const rule = {
type: "checkbox",
title: "标签",
field: "label",
value: ["1", "2"],
options: [
{ value: "1", label: "好用", disabled: true },
{ value: "2", label: "方便", disabled: false },
{ value: "3", label: "实用", disabled: false },
],
props: {},
}
Props 配置示例
整组禁用
js
const rule = {
type: "checkbox",
title: "标签",
field: "label",
value: [],
options: [
{ value: "a", label: "选项 A" },
{ value: "b", label: "选项 B" },
],
props: {
disabled: true,
},
}
ColorPicker 颜色选择器
基础示例
js
const rule = {
type: "colorPicker",
title: "主题色",
field: "color",
value: "#1677ff",
props: {
showText: true,
},
}
Props 配置示例
渐变模式 / 预设色
js
const rule = {
type: "colorPicker",
title: "颜色",
field: "color",
props: {
mode: ["single", "gradient"],
presets: [
{ label: "推荐", colors: ["#1677ff", "#52c41a"] },
],
},
}
禁用
js
const rule = {
type: "colorPicker",
title: "品牌主色(禁用)",
field: "color_locked",
value: "#1677ff",
props: {
showText: true,
disabled: true,
},
}
尺寸对比(小 / 中 / 大)
js
const rule = [
{
type: "colorPicker",
title: "主题色(小)",
field: "color_sm",
value: "#52c41a",
props: {
showText: true,
size: "small",
},
},
{
type: "colorPicker",
title: "主题色(中)",
field: "color_default",
value: "#52c41a",
props: {
showText: true,
size: "middle",
},
},
{
type: "colorPicker",
title: "主题色(大)",
field: "color_lg",
value: "#52c41a",
props: {
showText: true,
size: "large",
},
},
]
DatePicker 日期选择器
基础示例(日期)
js
const rule = {
type: "datePicker",
title: "活动日期",
field: "section_day",
value: "2020-04-04",
props: {},
}
Props 配置示例
按粒度:周 / 月 / 季度 / 年
js
// 周
const week = {
type: "datePicker",
title: "周",
field: "section_day2",
value: "2026-20th",
props: { picker: "week" },
}
// 月
const month = {
type: "datePicker",
title: "月",
field: "section_day3",
value: "2020-04",
props: { picker: "month" },
}
// 季度(4.1.0+)
const quarter = {
type: "datePicker",
title: "季度",
field: "section_day4",
value: "2020-q4",
props: { picker: "quarter" },
}
// 年
const year = {
type: "datePicker",
title: "年",
field: "section_day5",
value: "2020",
props: { picker: "year" },
}
日期区间(RangePicker)
js
const rule = {
type: "datePicker",
title: "日期区间",
field: "section_day6",
value: ["2018-02-02", "2026-02-02"],
props: {
picker: "date",
range: true,
},
}
日期时间区间
js
const rule = {
type: "datePicker",
title: "日期时间区间",
field: "section_day7",
value: ["2018-02-02 12:12:12", "2026-02-02 23:23:23"],
props: {
showTime: true,
range: true,
},
}
多选日期(不支持 showTime)
js
const rule = {
type: "datePicker",
title: "日期多选",
field: "section_day8",
value: ["2018-02-02", "2026-02-02"],
props: {
multiple: true,
},
}
整段禁用
js
const rule = {
type: "datePicker",
title: "活动日期(禁用)",
field: "day_locked",
value: "2024-06-01",
props: {
disabled: true,
format: "YYYY-MM-DD",
},
}
尺寸对比(小 / 中 / 大)
js
const rule = [
{
type: "datePicker",
title: "活动日期(小)",
field: "day_sm",
value: null,
props: {
size: "small",
allowClear: true,
format: "YYYY-MM-DD",
placeholder: "小尺寸",
},
},
{
type: "datePicker",
title: "活动日期(中)",
field: "day_default",
value: null,
props: {
size: "middle",
allowClear: true,
format: "YYYY-MM-DD",
placeholder: "默认尺寸",
},
},
{
type: "datePicker",
title: "活动日期(大)",
field: "day_lg",
value: null,
props: {
size: "large",
allowClear: true,
format: "YYYY-MM-DD",
placeholder: "大尺寸",
},
},
]
Input
基础示例
js
const rule = {
type: "input",
title: "商品名称",
field: "goods_name",
value: "iphone",
props: {
placeholder: "请输入商品名称",
disabled: false,
allowClear: true,
},
}
整段禁用
js
const rule = {
type: "input",
title: "订单号(禁用)",
field: "order_no",
value: "NO-20260101",
props: {
disabled: true,
allowClear: false,
},
}
尺寸对比(小 / 中 / 大)
js
const rule = [
{
type: "input",
title: "备注(小)",
field: "note_sm",
props: {
placeholder: "小尺寸",
size: "small",
allowClear: true,
},
},
{
type: "input",
title: "备注(中)",
field: "note_default",
props: {
placeholder: "默认尺寸",
size: "middle",
allowClear: true,
},
},
{
type: "input",
title: "备注(大)",
field: "note_lg",
props: {
placeholder: "大尺寸",
size: "large",
allowClear: true,
},
},
]
InputNumber 数字输入框
基础示例
js
const rule = {
type: "inputNumber",
title: "排序",
field: "sort",
value: 0,
props: {
step: 0.1,
precision: 2,
},
}
Props 配置示例
最大最小与步长
js
const rule = {
type: "inputNumber",
title: "数量",
field: "qty",
value: 1,
props: {
min: 0,
max: 100,
step: 1,
},
}
整段禁用
js
const rule = {
type: "inputNumber",
title: "固定值(只读)",
field: "locked",
value: 8,
props: {
min: 0,
max: 99,
disabled: true,
},
}
尺寸对比(小 / 中 / 大)
js
const rule = [
{
type: "inputNumber",
title: "数量(小)",
field: "qty_sm",
value: 2,
props: {
min: 1,
max: 10,
size: "small",
},
},
{
type: "inputNumber",
title: "数量(中)",
field: "qty_default",
value: 2,
props: {
min: 1,
max: 10,
size: "middle",
},
},
{
type: "inputNumber",
title: "数量(大)",
field: "qty_lg",
value: 2,
props: {
min: 1,
max: 10,
size: "large",
},
},
]
Radio 单选框
基础示例
js
const rule = {
type: "radio",
title: "是否包邮",
field: "is_postage",
value: "0",
options: [
{ value: "0", label: "不包邮", disabled: false },
{ value: "1", label: "包邮", disabled: false },
{ value: "2", label: "未知", disabled: true },
],
}
Props 配置示例
按钮样式
js
const rule = {
type: "radio",
title: "是否包邮",
field: "is_postage",
value: "0",
options: [
{ value: "0", label: "否" },
{ value: "1", label: "是" },
],
props: {
optionType: "button",
buttonStyle: "solid",
},
}
整组禁用
js
const rule = {
type: "radio",
title: "活动类型(只读)",
field: "act_ro",
value: "a",
options: [
{ value: "a", label: "满减" },
{ value: "b", label: "折扣" },
],
props: {
disabled: true,
},
}
按钮样式 · 尺寸对比(小 / 中 / 大)
js
const skuOpts = [
{ value: "s", label: "S" },
{ value: "m", label: "M" },
{ value: "l", label: "L" },
]
const rule = [
{
type: "radio",
title: "规格(按钮·小)",
field: "sku_sm",
value: "m",
options: skuOpts,
props: {
optionType: "button",
size: "small",
},
},
{
type: "radio",
title: "规格(按钮·中)",
field: "sku_default",
value: "m",
options: skuOpts,
props: {
optionType: "button",
size: "middle",
},
},
{
type: "radio",
title: "规格(按钮·大)",
field: "sku_lg",
value: "m",
options: skuOpts,
props: {
optionType: "button",
size: "large",
},
},
]
Select 下拉选择框
基础示例(单选)
js
const rule = {
type: "select",
title: "产品分类",
field: "cate_id",
value: "104",
options: [
{ value: "104", label: "生态蔬菜", disabled: false },
{ value: "105", label: "新鲜水果105", disabled: false },
],
}
Props 配置示例
多选
js
const rule = {
type: "select",
title: "多选",
field: "cate_id2",
value: ["104", "105"],
props: {
mode: "multiple",
},
options: [
{ value: "104", label: "生态蔬菜" },
{ value: "105", label: "新鲜水果105" },
],
}
标签模式(tags)
js
const rule = {
type: "select",
title: "标签",
field: "cate_id3",
value: ["104", "105"],
props: {
mode: "tags",
},
options: [
{ value: "104", label: "生态蔬菜" },
{ value: "105", label: "新鲜水果105" },
],
}
整段禁用
js
const rule = {
type: "select",
title: "分类(禁用)",
field: "cate_locked",
value: "104",
props: {
disabled: true,
},
options: [
{ value: "104", label: "生态蔬菜" },
{ value: "105", label: "新鲜水果105" },
],
}
可清空单选
js
const rule = {
type: "select",
title: "分类(可清空)",
field: "cate_clear",
value: undefined,
props: {
allowClear: true,
placeholder: "请选择分类",
},
options: [
{ value: "201", label: "A 类" },
{ value: "202", label: "B 类" },
],
}
小号 + 加载态
js
const rule = {
type: "select",
title: "异步数据(演示)",
field: "cate_async",
value: undefined,
props: {
size: "small",
loading: true,
placeholder: "加载中...",
},
options: [],
}