npm install ele-form
yarn add ele-form
// main.js中
import eleForm from 'ele-form'
Vue.use(eleForm)
<script>
import eleForm from 'ele-form'
export default {
components: {
eleForm
}
}
</script>
<template>
<div>
<ele-form ref='form' v-model='form' :formData="formData"/>
<div>
<el-button type='primary' @click='submit'>提交</el-button>
</div>
</div>
</template>
<script>
// 若全局引入,此处不需要再引入
import eleForm from 'ele-form'
export default {
components: {
// 若全局引入,此处不需要再引入
eleForm
},
data () {
return {
form: {},
formData: {
name: {
type: 'input',
label: '姓名'
}
}
}
},
methods: {
// 提交
submit () {
this.$refs.form.validate(() => {
// 校验成功
})
}
}
}
</script>
<style lang='scss' scoped>
</style>
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
formData | 表单数据项 | object | - | - | 见下方 |
v-model | 绑定值 | object | - | - | - |
labelWidth | 表单项label宽度 | string | - | auto | '100px' |
span | 布局分栏数(同Element UI) | number | 1-24 | 24 | 8 |
disabled | 禁用 | boolean | - | false | true |
ref | Vue组件的ref属性 | string | - | - | - |
采用键值对形式,其中key为表单项字段,value则为该表单配置项
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
type | 表单项类型 | string | 见下方 | - | - |
label | 标签文本 | string | - | - | - |
disabled | 禁用 | boolean/function/number | - | false | 0/true/() => this.disabled |
show | 控制表单项显隐方法,接受function返回值为布尔类型 | function | - | - | form => form.type == 1 |
prompt | label后面的提示信息 | object | - | title默认为“提示”,width默认为200 | {title: '提示', content: '提示内容', width: 200} |
type类型
一、输入框类
1、输入框input
2、数字框number
3、整数框integer
4、文本框textarea
二、带选项类
1、select
2、radio
3、checkbox
三、开关类
1、switch
四、日期选择器类
1、year
2、month
3、date
4、datetime
5、datetimerange
6、daterange
五、时间选择器类
1、time
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
type | 表单项类型 | string | input/number/integer/textarea | - | - |
placeholder | 输入框类型表单项占位符 | string/function | - | - | 请输入姓名/() => this.placeholder |
prepend | type为input/number/integer类型是输入框前置内容,非必须 | string | - | - | ¥ |
append | type为input/number/integer类型是输入框后置内容,非必须 | string | - | - | 元 |
maxlength | 输入框类型表单项最大内容长度 | number | - | 无限制 | 200 |
rows | type为textarea时的行数 | number | - | 4 | 6 |
min | type为textarea时的行数最小值 | number | - | - | - |
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
type | 表单项类型 | string | select/radio/checkbox | - | - |
placeholder | type为select时表单项占位符 | string/function | - | - | 请选择性别/() => this.placeholder |
option | 带选项类表单项的数据项 | array/object/function | - | - | 详见下方 |
labelKey | option为数组时,label的对应key | string | - | label | name |
valueKey | option为数组时,value的对应key | string | - | value | id |
// 1、object
option: {1: '张三', 2: '李四'}
// 2、标准Array
option: [{label: '张三', value: 1}, {label: '李四', value: 2}]
// 3、非标准Array
option: [{name: '张三', id: 1}, {name: '李四', id: 2}],
labelKey: 'name',
valueKey: 'id'
// 4、function
this.option = {1: '张三', 2: '李四'}
...
option: () => this.option
...
<ele-form :formData='formData' v-model='form' .../>
...
data () {
return {
formData: {
hobby: {
type: 'checkbox',
label: '爱好'
}
},
form: {
hobby: []
},
}
}
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
type | 表单项类型 | string | switch | - | - |
activeValue | switch 打开时的值 | boolean/string/number | - | true | - |
inactiveValue | switch 关闭时的值 | boolean/string/number | - | false | - |
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
type | 表单项类型 | string | year/month/date/datetime/datetimerange/daterange | - | - |
placeholder | 输入框类型表单项占位符 | string/function | - | - | 请选择日期/() => this.placeholder |
format | 显示在输入框中的格式 | string | - | yyyy-MM-dd HH:mm:ss | - |
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
type | 表单项类型 | string | time | - | - |
placeholder | 输入框类型表单项占位符 | string/function | - | - | 请选择日期/() => this.placeholder |
format | 显示在输入框中的格式 | string | - | HH:mm:ss | - |
pickerOptions | 当前时间日期选择器特有的选项参考下表(同Element UI) | object/function | - | - | - |
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
type | 表单项类型 | string | dynamicForm | - | - |
labelWidth | 表单项label宽度 | string | - | auto | '100px' |
formData | 动态表单项集合(同五、FormData Attributes) | object | - | - | - |
max | 动态表单项最大添加数量 | number | - | - | - |
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
type | 表单项类型 | string | slot | - | - |
参数 | 说明 | 类型 | 可选值 | 默认值 | 举例 |
---|---|---|---|---|---|
required | 是否必填 | boolean | true/false | 默认都为必填true | false |
validator | 自定义验证规则 | array/function | - | - | 同element UI,示例见完整示例 |
rule | type为输入框类型时,使用ele-form自带的校验规则 | string | phone/idNumber/email/link | - | - |
// 放在event里,
name: {
type: 'input'
label: '姓名',
// 事件
event: {
change: (e) => {},
blur: (e) => {},
input: (e) => {},
}
}
事件名 | 说明 | 举例 |
---|---|---|
validate | 提交验证 | this.$refs.form.validate(() => { // todo }) |
resetFields | 重置表单 | this.$refs.form.resetFields() |
(1) 自定义表单验证
(2) 带选项类动态option
(3) 绑定事件
(4) 输入框后置内容
(5) 控制显隐
(6) 表单项非必填
(7) 清空表单
(8) 提交表单
(9) 布局分栏
(10) 使用组件内部校验规则
(11) 动态表单
<template>
<div>
<el-button type='warning' @click="changeOption">点击改变优惠券类型couponTypes</el-button>
<ele-form
ref='eleForm'
v-model='form'
labelWidth='100px'
:formData="formData"/>
<el-button type='primary' @click="submit">提交</el-button>
</div>
</template>
<script>
// 若全局引入,此处不需要再引入
import eleForm from 'ele-form'
export default {
components: {
// 若全局引入,此处不需要再引入
eleForm
},
data () {
// (1) 自定义表单验证
const floatRequireMoney = (rule, value, callback) => {
if (value) {
var reg = /^(([1-9]{1}\d*)|(0{1}))(\.\d{1})?$/
if (value < 0 || value > 9.9) {
return callback(new Error('折扣范围在0~9.9之间'))
} else if (!reg.test(value)) {
return callback(new Error('最多保留1位小数'))
} else {
callback()
}
}
}
return {
// (2) 动态option,changeOption方法触发改变
couponTypes: {
1: '抵扣劵',
2: '折扣劵'
},
formData: {
phone: {
type: 'input',
label: '手机号',
// (10) 使用组件内部校验规则
rule: 'phone'
},
couponName: {
type: 'input',
label: '优惠券名称',
// (3) 绑定事件
event: {
// (3) 输入框input事件
input: this.inputCouponName
},
// (9) 布局分栏
span: 12
},
// (2) 动态option,请使用Funtion返回参数
type: {
type: 'radio',
label: '优惠券类型',
option: () => this.couponTypes,
// (9) 布局分栏
span: 12
},
rate: {
type: 'number',
label: '折扣比例',
placeholder: '请输入折扣比例,如8.5',
// (1) 自定义表单验证
validator: floatRequireMoney,
// (4) 输入框后置内容
append: '折',
// (5) 控制显隐
show: form => form.type === 2
},
date: { type: 'datetimerange', label: '有效期' },
way: {
type: 'radio',
label: '投放方式',
// 静态option
option: {
1: '系统主动发放'
2: '用户自领'
}
},
instructions: { type: 'textarea', label: '使用说明' },
// (6) 备注设置非必填
remark: { type: 'textarea', label: '备注', required: false },
// (11) 动态表单
limitList: {
type: 'dynamicForm',
label: '使用限制',
labelWidth: 'auto',
max: 3,
formItem: {
couponType: {
type: 'select',
label: '优惠券类型',
option: {
1: '抵扣劵',
2: '折扣劵'
},
},
limit: {
type: 'integer',
label: '每次可使用',
append: '张'
}
}
}
},
form: {}
}
},
methods: {
// (3) 绑定输入框input事件
inputCouponName (e) {
console.log(e)
},
// (2) 点击改变优惠券类型couponTypes
changeOption () {
this.couponTypes = {
1: '满减券',
2: '免单券',
3: '打折券'
}
},
// (7) 清空表单
clear () {
this.$refs.eleForm.resetFields()
},
// (8) 提交表单
submit () {
// 表单验证
this.$refs.eleForm.validate(() => {
// todo...
})
}
}
}
</script>
<style lang='scss' scoped>
</style>
作者VX:Nice2cu_Hu,目前ele-form已投入实际生产中,极大的减少前端工程师开发后台管理系统表单的工作量
稳定且可靠,作者长期维护中…