form-create表单生成器 自定义加载异步数据

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)

生成表单

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加载异步数据

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的选项




在这里插入图片描述

在这里插入图片描述

如需其他配置请参考官方文档 http://www.form-create.com/

你可能感兴趣的:(form-create表单生成器 自定义加载异步数据)