0.1.0 • Published 11 months ago

way-el-form v0.1.0

Weekly downloads
-
License
-
Repository
-
Last release
11 months ago

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

form

参数名称类型是否必选说明
namestringtrue显示在表单的 label 名称
placeholderstring占位提示符 一般会根据 name 和类型自动生成
typestringtrue表单的类型,如 'Select'、'Input' 等
keystringtrue表单提交时的键名,对应表单数据对象的属性名
valueany表单的默认值
rulesarray表单的校验规则
requiredboolean表单是否必填 rules 的快捷设置
componentsPropsobject表单组件的 props 配置,如 'filterable'、'clearable' 等
componentsEventsobject表单组件的事件,如 'on-change'、'on-input' 等
sourceobject表单项的数据源,包含 API 接口、接口参数、处理函数
showNameobject显示在选项中的名称的键名
showValueobject选项值的键名
colPropsobject在 type=='Row'作为根节点时有效,用于设置表单项外层的 props
classstring用于设置表单项外层form-item的 class 【Title/Row设置的都是本身元素】
stylestring用于设置表单项外层form-item的 style 【Title/Row设置的都是本身元素】

type 可选类型

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

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

参数名称类型是否必选说明
Inputstringtrue输入框
Selectstringtrue选择器
DatePickerstringtrue日期选择器
TimePickerstringtrue时间选择器
InputNumberstringtrue数字输入框
Switchstringtrue开关
Checkboxstringtrue多选框
CheckkboxGroupstringtrue多选框组
Radiostringtrue单选框
RadioGroupstringtrue单选框组
Cascaderstringtrue级联选择器
Ratestringtrue评分
Rowstringtrue
Titlestringtrue自定义 Title,类似行

! Title/Upload 额外有slot选项

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

参考:

              [{
              message: '装完时间不能大于卸完时间',
                trigger: 'change',
                validator: this.validateShiftLoadAndDumpTime
              },
              ....,
              {
                required: true,
                message: '请输入正整数',
                trigger: ['change'],
                pattern: /^[1-9]\d*$/
              }]
source
参数名称类型是否必选说明
apistring数据源的 API 接口 store 中存的 key
paramsobject数据源的 API 接口参数
handlefunction数据源的处理函数,第一个参数为接口返回的数据
dataarray手动设置的数据源的数据
data
参数名称类型是否必选说明
labelstring显示在表单的 label 名称
valueany对应值

参考:

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

actionProps

参数名称类型是否必选说明
componentsPropsobject按钮组件的 props 配置,如 'type'、'size'、'icon' 等
componentsEventsobject按钮组件的事件,如 'on-click' 等
textstring按钮的文字

示例:

// 重写默认的搜索重置按钮
   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设置表单数据data
setFormValues设置表单数据(key, value)
updateSources更新数据源key
formRef获取表单实例

场景一:联动查询

        {
      name: '设备类型',
      type: 'el-elect',
      key: 'deviceType',
      componentsProps: {
        clearable: true,
        filterable: true,
        'label-in-value': true,
      },
      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,
      },
      componentsEvents: {
        'on-change': (val) => {
          if (val && val.label) {
            this.$refs.queryForm.formValues['truckDriverName'] = val.label
          }
        }
      },
      source: {
        api: 'vehicleList',
        params: {
          limit: 2000,
          type: 1
        },
        handle: function (res) {
          return res.page.list
        },
      },
      showName: 'deviceName',
      showValue: 'equipmentId',
    },

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

// 获取设备
getDevices() {
    // 通过ref 获取当前表单的值
    const { manufacturerName, deviceType } = this.$refs.queryForm.formValues
    // 更新设备编号的数据源的筛选条件
    this.originData.find(item => item.key === 'equipmentId').source.params = {
      limit: 2000,
      manufacturer: manufacturerName,
      deviceType: deviceType
    }
    // 手动更新数据源
    this.$refs.queryForm.updateSources('equipmentId')
  },

Feature

  • 兼容CheckBoxButton