当前位置:   article > 正文

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

element ui form-create

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

安装

// ElementUI 版本
npm i @form-create/element-ui
// 工具类
npm i @form-create/utils
  • 1
  • 2
  • 3
  • 4

注册

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

生成表单

<div id="app1">
    <form-create v-model="fApi" :rule="rule" :option="option" :value.sync="value"></form-create>
</div>
  • 1
  • 2
  • 3

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))
                }
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

自定义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;
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

全局挂载自定义属性扩展, 重写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) {
  // }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

定义自定义处理事件

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)
    })
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

示例
通过接口加载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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

在这里插入图片描述
在这里插入图片描述
如需其他配置请参考官方文档 http://www.form-create.com/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/797344
推荐阅读
相关标签
  

闽ICP备14008679号