使用 json 的方式便捷开发 form
npm install chem-form
# or
yarn add chem-form
Vue.js + Element-ui 的组合加快了我们开发中台系统的速度,但是开发中发现存在大量的重复的操作,根据业内比较 🔥 的 scheme 的方式配置表单的方式,对其进行二次开发,加速实际开发速度。
// main.js
import chemForm from "chem-form"
Vue.use(chemForm)
// common.vue
<template>
<chem-form v-model="formData" :scheme="formConfig"></chem-form>
</template>
<script lang="ts">
import { Vue, Component } from "vue-property-decorator";
@Component
export default class extends Vue {
formData:Record<string, any> = {}
formConfig = {
DEBUG: true,
items: [
{ prop: "name", label: "姓名" },
{ prop: "age", label: "年龄", "x-component": "number"},
// ... add other form config
]
}
}
</script>
Name | Description | Type |
---|---|---|
v-model | 表单数据 | { } |
scheme | 表单配置 | |
auth | 表单权限 | Array |
Name | Description | params |
---|---|---|
DEBUG | 开启调试模式 | Boolean |
layout | 展示的形态 type 为展示类型, span 为表格模式下每个 form-item 占的大小 | { type: "default / inline / table", span: 8 } |
onlyRead | 是否为只读模式 | Boolean |
attrs | 扩充属性 element-ui 中 form 自带的属性 | Object |
items | 表单要展示的内容配置 | 参照 form-item props 配置 |
Name | Description | callback | params |
---|---|---|---|
resetForm | 重置表单 | - |
- |
validateForm | 校验表单 | Promise |
- |
clearValidate | 清空校验 | - |
`propName?: string |
setItem | 设置某字段的值 | - |
propName: string, value: any |
getItemRef | 获取某字段 Ref | Vue |
propName: string |
getFormModel | 获取所有表单数据 | Object |
removeNull:boolean |
submit | 表单提交 | Function(model) |
- |
Name | 说明 | 类型 | 默认值 |
---|---|---|---|
prop | 绑定的值(对应后端字段) | string | 必填 |
label | 页面中显示的名称 | string | 必填 |
isRender | 是否显示 | boolean | Function | true |
required | 是否进行校验 | boolean | false |
rules | 校验规则 | Array | [{ required: true, message: "label 为必填项"}] |
description | 对字段填写的提示信息 | string | VNode | null |
slot | 插槽的名字 - 该字段使用插槽内容展示 | string | null |
x-component | 自带的组件名字 | string | input (input / number / select / radio / checkbox / switch /slider / timePicker/ datePicker/ rate / upload ) |
attrs | 扩展属性,element-ui 中自带的的属性 | Record<string, any> | {} |
listeners | 扩展监听器,element-ui 该组件自带的监听器 | Record<string, Function> | {} |
source | 源数据,radio,select,checkbox 用来展示的数据 | { labelKey: string, valueKey: string, data: any[] | Function } | radio / checkbox / select 为必填项 |
colSpan | 表格模式下 form-item 占的大小 - 参照饿了么组件 el-col 中的 span 字段 | number | 8 |
supportEntry | 表格模式下该字段是否支持 | boolean | input / number / select 默认是 true |