赞
踩
form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持3个UI框架,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。
// ElementUI 版本
npm i @form-create/element-ui
// 工具类
npm i @form-create/utils
import Vue from 'vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import formCreate from '@form-create/element-ui'
Vue.use(ElementUI)
Vue.use(formCreate)
<div id="app1">
<form-create v-model="fApi" :rule="rule" :option="option" :value.sync="value"></form-create>
</div>
NodeJs
export default { data() { return { //实例对象 fApi: {}, //表单数据 value: {}, //表单生成规则 rule: [ { type: 'input', field: 'goods_name', title: '商品名称' }, { type: 'datePicker', field: 'created_at', title: '创建时间' } ], //组件参数配置 option: { //表单提交事件 onSubmit: function (formData) { alert(JSON.stringify(formData)) } } } } }
fetch类型
type fetch = string | { //接口地址 action: String; //异步数据插入的位置,例如:'options', 'props.options' to?: String; //解析接口返回的数据,返回最终数据. 默认取 `res.data` parse?: (body: any, rule:Rule, fapi:fApi) => any; //请求方式, 默认 GET method?: String; //调用接口附带数据 data?: Object; //调用接口附带数据的提交方式,默认为 `formData` dataType?: 'json'; //自定义 header 头信息 headers?: Object; //接口请求失败回调 onError?: (e: Error | ProgressEvent) => void; }
全局挂载自定义属性扩展, 重写fetch解析函数
formCreate.register('fetch', { init: (option, rule, fapi) => { customFetch(option, rule, fapi) }, watch: (option, rule, fapi) => { customFetch(option, rule, fapi) }, // //rule加载完成 // loaded({val}, rule, fapi) { // }, // //组件的值发生变化 // value({val}, rule, fapi) { // }, // //control 生效 // control({val}, rule, fapi) { // }, // //rule 移除 // deleted({val}, rule, fapi) { // }, // //rule 生成 // mounted({val}, rule, fapi) { // } });
定义自定义处理事件
import deepSet from "@form-create/utils/lib/deepset" function customFetch(option, rule, fapi) { let value = option.value; if (value && value.action) { request({ url: value.action, method: value.method || 'GET', data: value.data, header: value.header || {}, }).then(res => { let data = res; if (value.parse && typeof value.parse == "function") { data = value.parse(res) } if (value.to) { deepSet(rule, value.to, data) rule.__fc__.$api.sync(rule) } }).catch(err => { value.onError && value.onError(err) }) } }
示例
通过接口加载select的选项
<template> <div> <form-create :rule="rule" v-model="fApi" :option="options"/> </div> </template> <script> export default { data(){ return { fApi:{}, options:{ onSubmit:(formData)=>{ alert(JSON.stringify(formData)) } }, rule:[ { type:'select', field:'city', title:'城市', value:'', options: [], effect:{ fetch: { action:'http://datavmap-public.oss-cn-hangzhou.aliyuncs.com/areas/csv/100000_province.json', to: 'options', method:'GET', parse(res){ return res.rows.map(row=>{ return { label: row.name, value: row.adcode } }) } } } } ] } } } </script>
如需其他配置请参考官方文档 http://www.form-create.com/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。