Skip to content

mlzk/way-el-form

Repository files navigation

way-el-form

基于 elementUI 封装的 JSON To Form 轻量化表单组件,支持 Search 和 Form 两种模式

Example: https://mlzk.github.io/way-el-form/

Install

npm install way-el-form --save

Usage

// main.js
// ...引入vue和iview之后
// 引入组件库
import WayElForm from "way-el-form";
import "way-el-form/dist/way-el-form.css";
Vue.use(WayElForm);

run demo

npm run serve

写的比较简单,具体使用看 demo 实现的效果

参数说明

Props

参数 说明 类型 默认值 可选值
model 表单模式 string 'form' 'form' / 'search'
singleStepErrorTip 是否启用单步错误提示 该属性用于定义是否启用单步错误提示。如果设置为 true,则只会依次提示第一个未通过的表单项。如果设置为 false,则会依次提示所有未通过的表单项。 boolean false -
enableSpin 是否启用 spin 该属性用于定义是否启用加载状态 UI。如果设置为 true,则会在组件中显示一个加载状态 UI,表示当前正在加载数据。如果设置为 false,则不会显示加载状态 UI。 boolean true -
inlineBlock 该属性用于定义行内换行模式。如果设置为 true,则表单控件会在同一行中显示,并根据内容自动换行。如果设置为 false,则表单控件会分行显示。 boolean false -
form 该属性用于定义表单数据。该属性必须是一个数组,数组的每个元素为一个对象,每个对象都表示一个表单项。 Array - -
status 该属性用于定义表单的状态。可以为 'add' 添加状态,'edit' 编辑状态或 'view' 查看状态。默认为 'add' 添加状态。 string 'add' 'add' / 'edit'
formProps 该属性用于定义 elementUI form 表单的全量配置 Object {} -
formEvents 该属性用于定义表单的 elementUI form 表单的全量事件。可以设置表单提交、重置等事件的回调函数。默认为一个空对象。 Object {} -
formItemProps 该属性用于定义表单项的配置。可以设置表单项的布局、宽度、高度、对齐方式、标签等。默认为一个空对象。 Object {} -
showFooter 该属性用于定义是否展示表单底部。如果设置为 true,则会在表单底部显示一个操作按钮区域,用于提交、重置、取消等操作。如果设置为 false,则不会显示表单底部。 boolean true -
footerRowProps 该属性用于定义表单底部的 Row 行配置。可以设置行的对齐方式、宽度、高度等。默认为一个空对象。 Object {} -
action 表单操作按钮配置选项 该属性用于定义表单操作按钮。可以包含 'submit' 提交按钮,'reset' 重置按钮以及其他自定义按钮。默认只包含一个 'submit' 提交按钮。 顺序敏感可调整按钮顺序 Array ['submit'] -
actionProps 该属性用于定义表单操作按钮的配置。可以设置按钮的类型、大小、图标、文字等。默认为一个空对象。 Object {} -

form

参数名称 类型 是否必选 说明
name string true 显示在表单的 label 名称
placeholder string 占位提示符 一般会根据 name 和类型自动生成
type string true 表单的类型,如 'Select'、'Input' 等
key string true 表单提交时的键名,对应表单数据对象的属性名
value any 表单的默认值
rules array 表单的校验规则
required boolean 表单是否必填 rules 的快捷设置
effectKeys array 组件值发生变化之后影响的字段数据源例如 on-change 之后触发effectKeys中联动组件key的数据源刷新(如果在componentsEvents自定义on-change事件该配置无效请手动使用ref方法调用updateSource)
componentsProps object 表单组件的 props 配置,如 'filterable'、'clearable' 等
componentsEvents object 表单组件的事件,如 'on-change'、'on-input' 等
source object 表单项的数据源,包含 API 接口、接口参数、处理函数
showName object 显示在选项中的名称的键名
showValue object 选项值的键名
colProps object 在 type=='Row'作为根节点时有效,用于设置表单项外层的 props
class string 用于设置表单项外层 form-item 的 class 【Title/Row 设置的都是本身元素】
style string 用于设置表单项外层 form-item 的 style 【Title/Row 设置的都是本身元素】

type 可选类型

理论上末级组件都可以作为表单项(通过 props 设置的均可,slot 配置的暂不支持)Title 为特殊组件,用于分组;

!> 理论上其他框架的组件也可以作为表单项,只要支持 v-model 即可

参数名称 类型 是否必选 说明
Input string true 输入框
Select string true 选择器
DatePicker string true 日期选择器
TimePicker string true 时间选择器
InputNumber string true 数字输入框
Switch string true 开关
Checkbox string true 多选框
CheckkboxGroup string true 多选框组
Radio string true 单选框
RadioGroup string true 单选框组
Cascader string true 级联选择器
Rate string true 评分
Row string true
Title string true 自定义 Title,类似行

! Title/Upload 额外有 slot 选项

rules
参数名称 类型 是否必选 说明
required boolean 是否必填
message string 校验未通过时的提示信息
trigger string 触发校验的时机,可选值为 'blur'、'change'、'input'、'submit'、'manual'
pattern RegExp 正则表达式校验规则
validator function 自定义校验规则,接收两个参数,第一个参数为表单项的值,第二个参数为表单项的配置

参考:

              [{
              message: '装完时间不能大于卸完时间',
                trigger: 'change',
                validator: this.validateShiftLoadAndDumpTime
              },
              ....,
              {
                required: true,
                message: '请输入正整数',
                trigger: ['change'],
                pattern: /^[1-9]\d*$/
              }]
source
参数名称 类型 是否必选 说明
requestFunction async function 获取数据的异步函数
params object 数据源的 API 接口静态参数
handle function 数据源的处理函数,第一个参数为接口返回的数据,第二个参数为请求参数,第三个参数是 form
effectKeys array form 中设置为请求参数的 key 集合,
effectKeysHandle function effectKeys 参数值的处理函数返回值作为请求方法的参数

| data | array | | 手动设置的数据源的数据(配合 showName/showValue)requestFunction 的优先级高于 data 设置的数据 |

注意:api 参数已弃用

data
参数名称 类型 是否必选 说明
label string 显示在表单的 label 名称
value any 对应值

参考:

//默认使用label和value也可以通过设置showValue和showName修改keyName
[
  ({
    label: "是",
    value: true,
  },
  {
    label: "否",
    value: false,
  }),
];

actionProps
参数名称 类型 是否必选 说明
componentsProps object 按钮组件的 props 配置,如 'type'、'size'、'icon' 等
componentsEvents object 按钮组件的事件,如 'on-click' 等
text string 按钮的文字

示例:

// 重写默认的搜索重置按钮
   actionProps: {
        submit: {
          componentsProps: {
            type: 'primary',
            icon: 'md-search',
          },
          text: '查询'
        },
        reset: {
         componentsProps: {
            type: 'default',
            icon: 'md-refresh',
          },
          text: '重置'
        },
      },

//配合aciton 增加新的按钮
action: ['submit', 'reset', 'add'],
actionProps: {

  add: {
    componentsProps: {
      type: 'primary',
      icon: 'md-add',
    },
    compoentsEvents: {
      'on-click': () => {
        this.$router.push({
          path: '/add',
        })
      },
    },
    text: '新增'
  },
},

formProps

elementUI form 的全量配置 参考链接:https://element.eleme.cn/#/zh-CN/component/form

formItemProps

elementUI form-item 的全量配置 参考链接:https://element.eleme.cn/#/zh-CN/component/form

footerRowProps

elementUI row 的全量配置 参考链接:https://element.eleme.cn/#/zh-CN/component/layout

事件

事件名称 说明 回调参数
submit 表单提交事件 formData
reset 表单重置事件

formData 参数

参数名称 说明 类型
valid 是否通过校验 boolean
formvalues 表单对象 object

方法

方法名称 说明 参数 返回值
submit 提交
reset 重置
setFormData 设置表单数据 form
setFormValues 设置表单数据 (key, value)
getFormValues 获取表单数据
updateSources 更新数据源 [key]
formRef 获取表单实例
getThis 获取表单实例 key 字段 key 值如果传入则返回该 key 值的 ref 对象,为空则返回 form 组件的 this

场景一:联动查询

        {
      name: '设备类型',
      type: 'el-elect',
      key: 'deviceType',
      componentsProps: {
        clearable: true,
        filterable: true,
        'label-in-value': true,
      },
      effectKeys:['equipmentId'],
      componentsEvents: {
        'on-change': (val) => {
          this.getDevices()
        }
      },
      source: {
        data: [
          {
            id: '1',
            name: '运输设备'
          },
          {
            id: '2',
            name: '挖掘设备'
          },
          {
            id: '3',
            name: '卸载设备'
          },
          {
            id: '4',
            name: '其它车辆'
          },
        ]
      },
      showName: 'name',
      showValue: 'id',
    },    {
      name: '设备编号',
      type: 'el-select',
      key: 'equipmentId',

      componentsProps: {
        filterable: true,
        'label-in-value': true,
        clearable: true,
      },
      source: {
        requestFunction: 'vehicleList',
        params: {
          limit: 2000,
        },
        effectKeys:['deviceType']
        handle: function (res) {
          return res.page.list
        },
      },
      showName: 'deviceName',
      showValue: 'equipmentId',
    },

在上面的场景中设备编号的数据源需要通过设备类型来筛选,所以在设备类型的 change 事件中调用 getDevices 方法来更新筛选后的设备编号数据源

// 获取设备
getDevices() {
    this.$refs.queryForm.updateSources('equipmentId')
  },

About

基于elementUI 封装的 JSON To Form 表单组件,支持 Search 和 Form 两种模式

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published