功能演示中用到了以下数据

mock()
import {maker} from '@form-create/element-ui' import Vue from 'vue' export default function mock() { return [ //hidden 组件 maker.hidden('id', '14'), maker.create('testSlot', 'testSlot', 'testSlotTitle').children([ maker.input('', 'asd').slot('asd').display(false), maker.input('', 'asd23').slot('asd'), ]), //cascader 多级联动组件 maker.cascader({title: '所在区域', style: 'color:red'}, 'address', ['陕西省', '西安市']).props({ options: [] }).effect({ address: '1' }).info({ info: '12312313123', }).wrap({ required: true }).prefix({ type: 'button', children: ['prefix'] }).suffix({ type: 'button', children: ['suffix'] }), // input 输入框组件 maker.input('商品名称', 'goods_name', 'iphone').props({ placeholder: '请输入商品名称', clearable: true, disabled: false, maxlength: 10, prefixIcon: 'el-icon-info' }).setProp('prefix', 'prefix').setProp('suffix', 'suffix').validate([ {required: true, message: '请输入商品名称', trigger: 'blur'} ]).control([ { value: 'append', child: true, rule: [maker.create('template').children(['append']).slot('append').setProp('suffix', { type: 'span', children: ['asdf'] })] }, { value: 'prepend', child: true, rule: [maker.create('template').children(['prepend']).slot('prepend')] }, ]).on({ input(v) { console.log(v); } }).emit(['change']).className('goods-name').children([ maker.create('template').children(['append']).slot('append') ]) .info('请输入商品名称!!!!!'), //autoComplete 自动选择组件 maker.auto('自动完成', 'auto', 'xaboy').props({ fetchSuggestions: function (queryString, cb) { cb([ {value: queryString}, {value: queryString + queryString} ]); } }).emitPrefix('xaboy').emit(['change']).link(['goods_info']).update((val, rule, fApi) => { console.log(val); return fApi.getValue('goods_info') === 'goods_info'; }), //textarea 组件 maker.textarea('商品简介', 'goods_info', '').props({ autosize: {minRows: 4, maxRows: 8}, placeholder: '请输入商品名称' }).update((val, rule, api) => { console.log('change'); return 'val' === api.getValue('auto'); }).link(['auto']).wrap({ show: true }), { type: 'object', title: '对象组件', field: 'object', value: {date: '2121-12-12', field: 10, field2: '123123123'}, props: { rule: [ { type: 'col', wrap: {show: true}, children: [ maker.date('date', 'date', '').native(false).col({span: 12}), { type: 'inputNumber', field: 'field', title: 'field', props: { disabled: false }, validate: [ {required: true, min: 10, type: 'number'} ], col: { span: 12 } } ] }, { type: 'input', field: 'field2', title: 'field2', props: { disabled: false }, validate: [ {required: true} ] } ] } }, { type: 'group', title: '批量添加', field: 'group', value: [{date: '2121-12-12', field: 10, field2: '123123123'}], suffix: 'suffixsuffix', props: { // field: 'field', expand: 3, rules: [ { type: 'col', wrap: {show: true}, children: [ { type: 'DatePicker', field: 'date', title: 'date', native: false, col: {span: 12} }, { type: 'inputNumber', field: 'field', title: 'field', props: { disabled: false }, validate: [ {required: true, min: 10, type: 'number'} ], col: { span: 12 } } ] }, { type: 'input', field: 'field2', title: 'field2', props: { disabled: false }, validate: [ {required: true} ] } ] }, validate: [ {required: true, min: 3, type: 'array', message: '最少增加3项', trigger: 'change'}, ] }, //radio 单选框组件 maker.radio('是否包邮(control)', 'is_postage', 1).options([ {value: 0, label: '不包邮', disabled: false}, {value: 1, label: '包邮', disabled: false}, {value: 2, label: '未知', disabled: true}, ]).col({span: 8}).control([ { value: 1, prepend: 'is_postage', rule: [ maker.number('满额包邮1', 'postage_money1', 0).effect({ open: '1' }).control([ { value: 0, prepend: 'rate', rule: [ maker.number('满额包邮2', 'postage_money2', 0) ] } ]) ] }, { value: 0, prepend: 'goods_info', rule: [ maker.number('满额包邮3', 'postage_money3', 0).control([ { value: 0, prepend: 'goods_name', rule: [ maker.number('满额包邮4', 'postage_money4', 0) ] } ]) ] } ]), //checkbox 复选框付选择 maker.checkbox('标签', 'label', [1]).options([ {value: 1, label: '好用', disabled: true}, {value: 2, label: '方便', disabled: false}, {value: 3, label: '实用', disabled: false}, {value: 4, label: '有效', disabled: false}, ]).col({span: 8}).children([ { type: 'el-checkbox', children: ['asdf'], slot: 'default' } ]), //switch 开关组件 maker.switch('是否上架', 'is_show', '1').props({ 'activeValue': '1', 'inactiveValue': '0', 'slot': { open: '上架', close: '下架', } }).col({span: 8, labelWidth: '100'}), //自定义组件 maker.createTmp('<el-button @click="onClick" style="width:100%;" :disabled="disabled">{{button}}字符串测试{{test}}-{{num}}</el-button>', function () { return new Vue({ data: function () { return { test: 'createTmp渲染', button: '<i-button />', num: '', } }, props: { disabled: Boolean, value: Number, formCreate: Object }, watch: { value: { handler(n) { this.num = n; }, immediate: true, } }, methods: { onClick: function () { console.log('click'); this.num++; this.$emit('input', this.num); }, } }) }, 'tmp', '自定义 title').prefix('prefixprefixprefix').value(100).props('disabled', false), //自定义组件 maker.create('el-button', 'btn').props('disabled', false).col({span: 12}).children([ maker.create('span').domProps({ innerHTML: '测试自定义按钮' }) ]).emit(['click']).emitPrefix('btn'), //自定义组件 maker.create('el-tooltip', 'tip', '自定义 title').props({ content: '这里是提示文字', }).col({span: 11, push: 1}).children([ maker.create('span').domProps({ innerHTML: '当鼠标经过这段文字时,会显示一个气泡框' }) ]).value(false), //select 下拉选择组件 maker.select('产品分类', 'cate_id', '105').options([ {'value': '104', 'label': '生态蔬菜', 'disabled': false, 'slot': '<div style:\'color:#ff7271;\'>自定义显示内容</div>'}, {'value': '106', 'label': '植物植物', 'disabled': false}, { 'value': '105', 'label': '新鲜水果', 'disabled': false, 'slot': function ($h) { return $h('div', { style: 'color:#ff7271;' }, ['新鲜水果']); } }, ]).props({multiple: true}), { type: 'div', name: 'div2', children: [] }, { type: 'div', name: 'div', children: [ 'asdfasf', { type: 'el-col', props: { span: 12 }, name: 'cal', children: [ //datePicker 日期选择组件 maker.date('活动日期', 'section_day', ['2018-02-20 12:12:12', '2018-03-20 12:12:12']).props({ 'type': 'datetimerange', }), //timePicker 时间选择组件 maker.time('活动时间', 'section_time', ['11:11:11', '22:22:22']).props({ 'isRange': true, 'placeholder': '请选择活动时间' }), ] }, { type: 'el-col', props: { span: 12 }, children: [ //inputNumber 数组输入框组件 maker.number('排序', 'sort', 0).props({ precision: 2 }).col({span: 12}).validate( [{require: true, type: 'number', min: 10}] ), //colorPicker 颜色选择组件 maker.color('颜色', 'color', '#ff7271').props({ 'format': 'hex' }).props({ 'hue': true }).col({span: 12}), ] } ], native: true }, //rate 评分组件 maker.rate('推荐级别', 'rate', 2) .props({ 'max': 10, }) .validate({required: true, type: 'number', min: 3, message: '请大于3颗星', trigger: 'change'}) .col({span: 12}).control([ { handle: function (val) { return val > 5; }, rule: [ maker.input('好评原因', 'goods_reason', '').props({disabled: false}) ] }, { handle: function (val) { return val < 5; }, rule: [ maker.input('差评原因', 'bad_reason', '').props({disabled: false}) ] } ]), //slider 滑块组件 maker.slider('滑块', 'slider', [30, 80]).props({ 'min': 0, 'max': 100, 'range': true, }).col({span: 12}), { type: 'wangEditor', field: 'txt', title: '富文本框', value: '<h1 style="color: #419bf7;">form-create</h1><a href="https://github.com/xaboy/form-create">GitHub</a>' }, //upload 上传组件 maker.upload('轮播图', 'pic', ['http://file.lotkk.com/form-create.jpeg']) .props({ 'action': 'https://mock.uutool.cn/4erua2dig4i0', 'limit': 2, 'uploadType': 'image', 'name': 'file', 'onSuccess': function (res, file) { console.log('upload success'); file.url = res.thumbUrl; }, 'onRemove': function (file, fileList) { console.log(file, fileList); }, 'beforeRemove': function () { console.log('before-remove'); }, 'allowRemove': true, }), //frame 框架组件 maker.frame('素材', 'fodder', ['http://file.lotkk.com/form-create.jpeg']).props({ src: '/iframe.html', maxLength: 0, type: 'image', width: '80%', modalTitle: '预览~~~', okBtnText: 'ok', closeBtnText: 'close', title: 'select' }).validate([ {required: true, type: 'array', min: 2, message: '请选择2张图片', trigger: 'change'} ]), //tree 树形组件 maker.tree('权限', 'tree', [11, 12]).props({ type: 'checked', multiple: true, showCheckbox: true, emptyText: '暂无数据', defaultExpandAll: true, expandOnClickNode: false, data: [ { title: 'parent 1', expand: true, selected: false, id: 1, children: [ { title: 'parent 1-1', expand: true, id: 2, children: [ { title: 'leaf 1-1-1', disabled: true, id: 11 }, { title: 'leaf 1-1-2', selected: true, id: 12 } ] }, { title: 'parent 1-2', expand: true, id: 3, children: [ { title: 'leaf 1-2-1', checked: true, id: 13, }, { title: 'leaf 1-2-1', id: 14, } ] } ] } ], }).validate([ {required: true, type: 'array', min: 2, message: '至少选择2个', trigger: 'change'} ]) ]; } 
jsonMock()
export default function jsonMock() { //以下是组件的生成规则及参数默认值 return [ //hidden 组件 { type: 'hidden', field: 'id', value: '1' }, //cascader 多级联动组件 { type: 'cascader', title: '所在区域', field: 'address', value: ['陕西省', '西安市', '新城区'], props: { separator: '/', }, effect: { address: 1 } }, //input 输入框组件 { type: 'input', title: '商品名称', field: 'goods_name', value: 'iphone', props: { placeholder: '请输入商品名称', //输入框占位文本 disabled: false, //禁用 }, validate: [ {required: true, message: '请输入商品名称', trigger: 'blur'} ] }, //input 输入框组件 { type: 'input', title: '商品简介', field: 'goods_info', value: '', props: { type: 'textarea', //输入框类型,text,textarea 和其他 原生 input 的 type 值 rows: 10, //输入框行数,只对 type="textarea" 有效 autosize: {minRows: 4, maxRows: 8}, //自适应内容高度,只对 type="textarea" 有效,可传入对象,如,{ minRows: 2, maxRows: 6 } }, children: ['asd'] }, //autoComplete 自动选择组件 { type: 'autoComplete', title: '自动完成', field: 'auto', value: 'xaboy', props: { fetchSuggestions: function (queryString, cb) { cb([ {value: queryString}, {value: queryString + queryString} ]); }, } }, { type: 'object', title: '对象组件', field: 'object', value: {date: '2121-12-12', field: 10, field2: '123123123'}, props: { rule: [ { type: 'col', wrap: {show: true}, children: [ { type: 'datePicker', field: 'date', title: 'date', col: { span: 12 } }, { type: 'inputNumber', field: 'field', title: 'field', props: { disabled: false }, validate: [ {required: true, min: 10, type: 'number'} ], col: { span: 12 } } ] }, { type: 'input', field: 'field2', title: 'field2', props: { disabled: false }, validate: [ {required: true} ] } ] } }, { type: 'group', title: '批量添加', field: 'group', value: [{date: '2121-12-12', field: 10, field2: '123123123'}], suffix: 'suffixsuffix', props: { // field: 'field', rules: [ { type: 'col', wrap: {show: true}, children: [ { type: 'DatePicker', field: 'date', title: 'date', native: false, col: {span: 12} }, { type: 'inputNumber', field: 'field', title: 'field', props: { disabled: false }, validate: [ {required: true, min: 10, type: 'number'} ], col: { span: 12 } } ] }, { type: 'input', field: 'field2', title: 'field2', props: { disabled: false }, validate: [ {required: true} ] } ] }, validate: [ {required: true, min: 3, type: 'array', message: '最少增加3项', trigger: 'change'}, ] }, // // //radio 单选框组件 { 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: { disabled: false, } }, //checkbox 复选框付选择 { type: 'checkbox', title: '标签', field: 'label', value: [ '1', '2', '3' ], options: [ {value: '1', label: '好用', disabled: true}, {value: '2', label: '方便', disabled: false}, {value: '3', label: '实用', disabled: false}, {value: '4', label: '有效', disabled: false}, ], props: { disabled: false, //是否禁用 } }, //switch 开关组件 { type: 'switch', title: '是否上架', field: 'is_show', value: '1', props: { disabled: false,//是否禁用 } }, //select 下拉选择组件 { type: 'select', field: 'cate_id', title: '产品分类', value: ['104', '105'], props: { multiple: true, //是否支持多选 disabled: false, //是否禁用 }, options: [ {'value': '104', 'label': '生态蔬菜', 'disabled': false}, {'value': '105', 'label': '新鲜水果', 'disabled': false}, ] }, //datePicker 日期选择组件 { type: 'datePicker', field: 'section_day', title: '活动日期', value: ['2018-02-20', '2021-02-20'], props: { type: 'daterange', //显示类型 year/month/date/dates/ week/datetime/datetimerange/daterange disabled: false, //禁用 } }, //timePicker 时间选择组件 { type: 'timePicker', field: 'section_time', title: '活动时间', value: ['01:01:01', '12:12:12'], props: { disabled: false, //禁用 isRange: true } }, //inputNumber 数组输入框组件 { type: 'inputNumber', field: 'sort', title: '排序', value: 0, props: { step: 0.1, //计数器步长, precision: 2, //数值精度 } }, //colorPicker 颜色选择组件 { type: 'colorPicker', field: 'color', title: '颜色', value: '#ff7271', props: { disabled: false, //是否禁用 }, }, //rate 评分组件 { type: 'rate', field: 'rate', title: '推荐级别', value: 3.5, props: { max: 10, //最大分值 disabled: false, //是否为只读 } }, //slider 滑块组件 { type: 'slider', field: 'slider', title: '滑块', value: [0, 50], props: { min: 0, //最小值 max: 100, //最大值 disabled: false, //是否禁用滑块 range: true, //是否为范围选择 } }, { type: 'wangEditor', field: 'txt', title: '富文本框', value: '<h1 style="color: #419bf7;">form-create</h1><a href="https://github.com/xaboy/form-create">GitHub</a>' }, //upload 上传组件 { type: 'upload', field: 'pic', title: '轮播图', value: ['http://file.lotkk.com/form-create.jpeg'], //input值 props: { uploadType: 'image', action: 'http://0.0.0.0:8000/index/index/upload.html', //必选参数,上传的地址 onSuccess: function (res, file) { file.url = res.data.filePath; }, //文件上传成功时的钩子,返回字段为 response, file, fileList } }, //frame 框架组件 { type: 'frame', title: '素材', field: 'fodder', value: ['http://file.lotkk.com/form-create.jpeg'], props: { type: 'image', //frame类型,有input,file,image src: '/iframe.html', //iframe地址 maxLength: 2, //value的最大数量 }, }, { type: 'tree', title: '权限', field: 'tree', value: [12, 13, 14], props: { showCheckbox: true, data: [ { title: 'parent 1', expand: true, selected: false, id: 1, children: [ { title: 'parent 1-1', expand: true, id: 2, children: [ { title: 'leaf 1-1-1', disabled: true, id: 11 }, { title: 'leaf 1-1-2', selected: true, id: 12 } ] }, { title: 'parent 1-2', expand: true, id: 3, children: [ { title: 'leaf 1-2-1', checked: true, id: 13, }, { title: 'leaf 1-2-1', id: 14, } ] } ] } ],//展示数据 props: { label: 'title' }, //配置选项 type: 'indeterminate', } } ] } 
addressEffect
import data from '@form-create/data/dist/province_city' //自定义属性 自动插入省市区数据 export default { name: 'address', components: ['cascader'], //rule初始化 init(val, rule, fapi) { rule.props.options = data; } } 
testSlot 组件
//自定义组件 Vue.component('testSlot', { render(h) { return h('div', {}, [this.$slots.asd]); } })