form-create的基本使用

先贴上官网:[官网]http://www.form-create.com/

第一、下载安装

有很多版本的,这里我下载的是element-ui版本的

npm i @form-create/element-ui

第二、引入

在main.js文件里面

import formCreate from '@form-create/element-ui' // form-create 表单生成器
Vue.use(formCreate)

第三、生成表单

组件模式
使用 <form-create></form-create> 标签创建表单

import { timestarpContrast } from '../../utils/myFunc'  // 这个是在公共组件封装的方法引入
<div id="app1">
    <form-create v-model="fApi" :rule="rule" :option="option" :value.sync="value"></form-create>
</div>

还有其他的模式,可以去看官网。

第四、在vue页面中使用

<form-create v-model="fields" :rule="searchrule" :option="searchOptions" ref="searchForm"></form-create>

配置项

export default {
    data() {
        return {
            //实例对象
            fApi: {},
            //表单数据
            value: {},
            //组件参数配置    http://www.form-create.com/v2/element-ui/global.html#option-form
            searchOptions: {
              submitBtn: false,  // 这里是不需要提交按钮的意思
               // 表单提交事件    -- 如果有需要提交,可以用这个
              //  onSubmit: function (formData) {
              //      alert(JSON.stringify(formData))
             //    },
              //行内表单模式
              inline: false,
              //表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-width
              labelPosition: 'right',
              //表单域标签的后缀
              labelSuffix: undefined,
              //是否显示必填字段的标签旁边的红色星号
            hideRequiredAsterisk: false,
            //表单域标签的宽度,例如 '50px'。作为 Form 直接子元素的 form-item 会继承该值。支持 auto。
            labelWidth: '125px',
            //是否显示校验错误信息
            showMessage: true,
            //是否以行内形式展示校验信息
            inlineMessage: false,
            //是否在输入框中显示校验结果反馈图标
            statusIcon: false,
            //是否在 rules 属性改变后立即触发一次验证
            validateOnRuleChange: true,
            //是否禁用该表单内的所有组件。若设置为 true,则表单内组件上的 disabled 属性不再生效
            disabled: false,
            //用于控制该表单内组件的尺寸 medium / small / mini
            size: undefined,
            //是否显示 label
            title: true
            },
            //表单生成规则  链接:http://www.form-create.com/v2/guide/rule.html#%E7%A4%BA%E4%BE%8B
            rule: [
             {
          type: "el-row",  
          native: true,  // 类型: Bool   是否原样生成组件,不嵌套的FormItem中
          children: [
            {
              type: "input",   // 生成组件的名称(就是表单的名称:如input,radio,checkbox,select,DatePicker等)
              field: "sqrxm",  // 表单组件的字段名称
              title: "申购人姓名:", // 组件的名称
              col: {    // 设置组件的布局规则
                span: 8,
              },
              value: "",  // 表单组件的字段值
              className: "modelFormOption",  // 设置FormItem的class,不推荐,建议使用 wrap 配置
            },
            {
              type: "DatePicker",
              field: "xfsjq",
              title: "选房时间起",
              col: {
                span: 8,
              },
              value: "",
              className: "modelFormOption",
              props: {    // 设置组件的props
                type: "date",
                format: "yyyy-MM-dd",
                placeholder: "请选择开始时间",
                style:"width:100%",
              },
              info: "开始时间不得晚于结束时间",
              on: {  // 这里做了一个校验
                change: () => {
                  // 校验开始时间是否晚于结束时间
                  timestarpContrast(
                    this.fields,
                    "xfsjq",
                    "xfsjz",
                    "xfsjq",
                    () => {
                      this.$alert("开始时间不得晚于结束时间", "错误信息", {
                        confirmButtonText: "确定",
                      });
                    }
                  );
                },
              },
            },
            {
              type: "DatePicker",
              field: "xfsjz",
              title: "选房时间止",
              col: {
                span: 8,
              },
              value: "",
              className: "modelFormOption",
              props: {
                type: "date",
                format: "yyyy-MM-dd",
                placeholder: "请选择结束时间",
                style:"width:100%",
              },
              info: "结束时间不得早于开始时间",
              on: {   // 这里做了一个校验
                change: () => {
                  // 校验开始时间是否晚于结束时间
                  timestarpContrast(
                    this.fields,
                    "xfsjq",
                    "xfsjz",
                    "xfsjz",
                    () => {
                      this.$alert("结束时间不得早于开始时间", "错误信息", {
                        confirmButtonText: "确定",
                      });
                    }
                  );
                },
              },
            },
            },
          ],
        },
            ],
            //组件参数配置
            option: {
                //表单提交事件
                onSubmit: function (formData) {
                    alert(JSON.stringify(formData))
                }
            }
        }
    }
}

封装的函数方法:

// 开始时间、结束时间的范围校验(配合form-create使用)
export function timestarpContrast(fApi, startTimeName, endTimeName, targetName, callback) {
  let starttimestarp
  let endtimestarp
  const starttime = fApi.getValue(startTimeName)
  const endtime = fApi.getValue(endTimeName)
  if (starttime && endtime) {
    starttimestarp = new Date(starttime)
    endtimestarp = new Date(endtime)
    if (starttimestarp > endtimestarp) {
      callback()
      fApi.setValue(targetName, '')
    }
  }
}

插入一个props:{width:100%;}的图片


1.png

第五、重置

我这里是顶部搜索栏,所以有查询、重置等功能按钮。

         <div class="txtcenter">
            <el-button type="primary" size="mini" @click="searchXfrgjg"
              >查询</el-button
            >
            <el-button
              type="primary"
              plain
              size="mini"
              @click="handleReset"
              >重置</el-button
            >
          </div>

重置表单值http://www.form-create.com/v2/instance.html#%E8%AE%BE%E7%BD%AE%E8%A1%A8%E5%8D%95%E5%80%BC

// 用法:fApi.resetFields()
    handleReset() {
      this.$refs.searchForm.$f.resetFields();  // 重置表单值 --用法fApi.resetFields()
      // this.fApi.resetFields();  这种也行
      // 如果有选项要清空--rule就是配置的规则,里面是每一项配置,如果里面还有children,则要点下去
     // this.rule[0].options = []
     // this.searchrule[0].children[1].options = [];   我这里就是指明清空哪几个表单选项
     // this.fields.getRule("zh").options = [];   建议使用这种方法
    }

第六、查询(主要是获取表单值/表单数据)

链接:http://www.form-create.com/v2/instance.html#%E8%8E%B7%E5%8F%96%E8%A1%A8%E5%8D%95%E6%95%B0%E6%8D%AE

// 获取表单数据
// 用法: const formData = fApi.formData()
    searchXfrgjg() {
 // fields: {},  实例对象    和上面的fApi是相等的,换了个名字而已 
      console.log(this.fields.formData())
    },

第七、设置表单值

// 用法:fApi.setValue({goods_name:'HuaWei'})

    // 设置表单数据
    getData() {
      this.fApi.setValue({
       sqrxm: "潇洒哥",
        xfsxh: "333",
        xfsjq: "2022-03-13",
        xfsjz: "2023-03-13",
        zjhm: "440000022020022020202",
        xq: "万达华府",
        rcgwdz: "广东省xxxxxx",

后续会更新...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容