“vue”: “^2.7.13” “element-ui”: “^2.15.7”
代码地址
【说明】 该组件时使用vue3(vue2.7)语法封装,使用时可用vue2语法使用也可以使用vue3语法使用
一、vue2语法使用案例
基础用法
< template> < div class = " form-demo" > < div class = " form" > < BasicForm:schemas = " schemas" :colProps = " {span: 12}" :showActionButtonGroup = " false" @register = " register" @change = " handleChange" /> </ div> < div class = " btns" > < el-button type = " primary" @click = " saveForm" > 保存</ el-button> < el-button @click = " resetForm" > 重置</ el-button> </ div> </ div>
</ template> < script> export default { name : 'BasicFormDemo' , data ( ) { return { schemas : [ { prop : 'id' , component : 'Input' , show : false } , { prop : 'username' , component : 'Input' , label : '姓名' , labelWidth : '100px' , defaultValue : '张三' , colProps : { span : 8 } , required : true } , { prop : 'address' , component : 'Input' , label : '地址' , labelWidth : '100px' , defaultValue : 1 , componentProps : { maxlength : 10 , showWordLimit : true } , colProps : { span : 8 } } , { prop : 'rate' , component : 'Input' , label : '税率' , labelWidth : '100px' , componentProps : { append : '%' } , colProps : { span : 8 } } , { prop : 'url' , component : 'Input' , label : '网址' , labelWidth : '100px' , componentProps : { prepend : 'http' } , colProps : { span : 8 } } , { prop : 'inputNumber' , component : 'InputNumber' , label : '距离' , labelWidth : '100px' , defaultValue : 1 } , { prop : 'age' , component : 'Switch' , label : '年龄' , labelWidth : '100px' , defaultValue : true } , { prop : 'remark' , component : 'Input' , label : '评论' , labelWidth : '100px' , componentProps : { type : 'textarea' , placeholder : '请输入评论' } } , { prop : 'divider' , component : 'Divider' , labelWidth : '0px' , componentProps : { contentPosition : 'left' , content : '日期类型组件' } } , { prop : 'time1' , component : 'TimePicker' , label : '时间选择器' } , { prop : 'time2' , component : 'TimePicker' , label : '时间选择器' , componentProps : { isRange : true , rangeSeparator : '至' , startPlaceholder : '开始时间' , endPlaceholder : '结束时间' , placeholder : '选择时间范围' } } , { prop : 'createDate' , component : 'DatePicker' , label : '创建日期' , componentProps : { } } , { prop : 'endDate' , component : 'DatePicker' , label : '带快捷选项' , componentProps : { valueFormat : 'yyyy-MM-dd' , pickerOptions : { disabledDate ( time ) { return time. getTime ( ) > Date. now ( ) } , shortcuts : [ { text : '今天' , onClick ( picker ) { picker. $emit ( 'pick' , new Date ( ) ) } } , { text : '昨天' , onClick ( picker ) { const date = new Date ( ) date. setTime ( date. getTime ( ) - 3600 * 1000 * 24 ) picker. $emit ( 'pick' , date) } } , { text : '一周前' , onClick ( picker ) { const date = new Date ( ) date. setTime ( date. getTime ( ) - 3600 * 1000 * 24 * 7 ) picker. $emit ( 'pick' , date) } } ] } } } , { prop : 'weekly' , component : 'DatePicker' , label : '周' , componentProps : { type : 'week' , format : 'yyyy 第 WW 周' , placeholder : '请选择周' } } , { prop : 'dateRange' , component : 'DatePicker' , label : '日期范围' , componentProps : { type : 'daterange' , rangeSeparator : '至' , startPlaceholder : '开始日期' , endPlaceholder : '结束日期' } } , { prop : 'dateRange1' , component : 'DatePicker' , label : '日期范围-带快捷选项' , labelWidth : '140px' , componentProps : { type : 'daterange' , align : 'right' , unlinkPanels : true , rangeSeparator : '至' , startPlaceholder : '开始日期' , endPlaceholder : '结束日期' , pickerOptions : { shortcuts : [ { text : '最近一周' , onClick ( picker ) { const end = new Date ( ) const start = new Date ( ) start. setTime ( start. getTime ( ) - 3600 * 1000 * 24 * 7 ) picker. $emit ( 'pick' , [ start, end] ) } } , { text : '最近一个月' , onClick ( picker ) { const end = new Date ( ) const start = new Date ( ) start. setTime ( start. getTime ( ) - 3600 * 1000 * 24 * 30 ) picker. $emit ( 'pick' , [ start, end] ) } } , { text : '最近三个月' , onClick ( picker ) { const end = new Date ( ) const start = new Date ( ) start. setTime ( start. getTime ( ) - 3600 * 1000 * 24 * 90 ) picker. $emit ( 'pick' , [ start, end] ) } } ] } } } , { prop : 'monthRange' , component : 'DatePicker' , label : '月份范围' , componentProps : { type : 'monthrange' , rangeSeparator : '至' , startPlaceholder : '开始月份' , endPlaceholder : '结束月份' } } , { prop : 'monthRange1' , component : 'DatePicker' , label : '月份范围-带选项' , labelWidth : '130px' , componentProps : { type : 'monthrange' , align : 'right' , unlinkPanels : true , rangeSeparator : '至' , startPlaceholder : '开始月份' , endPlaceholder : '结束月份' , pickerOptions : { shortcuts : [ { text : '本月' , onClick ( picker ) { picker. $emit ( 'pick' , [ new Date ( ) , new Date ( ) ] ) } } , { text : '今年至今' , onClick ( picker ) { const end = new Date ( ) const start = new Date ( new Date ( ) . getFullYear ( ) , 0 ) picker. $emit ( 'pick' , [ start, end] ) } } , { text : '最近六个月' , onClick ( picker ) { const end = new Date ( ) const start = new Date ( ) start. setMonth ( start. getMonth ( ) - 6 ) picker. $emit ( 'pick' , [ start, end] ) } } ] } } } , { prop : 'DateTimePicker' , component : 'DatePicker' , label : '日期时间选择器' , labelWidth : '110px' , componentProps : { type : 'datetime' } } , { prop : 'divider' , component : 'Divider' , labelWidth : '0px' , componentProps : { contentPosition : 'left' , content : '单选框' } } , { prop : 'radio' , component : 'RadioGroup' , label : '单选框' , defaultValue : '2' , colProps : { span : 12 } , componentProps : { options : [ { label : '1' , value : '选项1' } , { label : '2' , value : '选项2' } , { label : '3' , value : '选项3' , border : true } , { label : '4' , value : '选项4' , disabled : true } ] } } , { prop : 'divider' , component : 'Divider' , labelWidth : '0px' , componentProps : { contentPosition : 'left' , content : '复选框' } } , { prop : 'checkbox' , component : 'CheckboxGroup' , label : '复选框' , defaultValue : [ '2' ] , colProps : { span : 12 } , componentProps : { options : [ { label : '1' , value : '选项1' } , { label : '2' , value : '选项2' } , { label : '3' , value : '选项3' , border : true } , { label : '4' , value : '选项4' , disabled : true } ] } } , { prop : 'selectAll' , component : 'SelectAll' , label : '全选' , colProps : { span : 12 } , defaultValue : [ '2' ] , componentProps : { options : [ { label : '1' , value : '选项1' } , { label : '2' , value : '选项2' } ] } } , { prop : 'divider' , component : 'Divider' , labelWidth : '0px' , componentProps : { contentPosition : 'left' , content : '下拉框' } } , { prop : 'select' , component : 'Select' , label : '下拉框' , defaultValue : '2' , componentProps : { options : [ { label : '选项1' , value : '1' } , { label : '选项2' , value : '2' , disabled : true } ] } } , { prop : 'select1' , component : 'Select' , label : '多选' , componentProps : { multiple : true , placeholder : '请选择' , options : [ { unitName : '选项1' , id : '1' } , { unitName : '选项2' , id : '2' , disabled : true } ] , fieldNames : { label : 'unitName' , value : 'id' } } } , { prop : 'select11' , component : 'ApiSelect' , label : '远程下拉框' , componentProps : { api : ( ) => this . getOpt ( ) , resultField : 'result' , fieldNames : { label : 'unitName' , value : 'id' } } } , { prop : 'ApiTreeSelect' , component : 'ApiTreeSelect' , label : '树下拉框' , componentProps : { api : ( ) => this . getTreeData ( ) , resultField : 'result' , fieldNames : { label : 'name' } } } , { prop : 'divider1' , component : 'Divider' , labelWidth : '0px' , componentProps : { contentPosition : 'left' , content : '级联选择器' } } , { prop : 'Cascader' , component : 'Cascader' , label : '基本用法' , componentProps : { options : [ { value : 'zhinan' , label : '指南' , children : [ { value : 'shejiyuanze' , label : '设计原则' , children : [ { value : 'yizhi' , label : '一致' } , { value : 'fankui' , label : '反馈' } , { value : 'xiaolv' , label : '效率' } , { value : 'kekong' , label : '可控' } ] } , { value : 'daohang' , label : '导航' , children : [ { value : 'cexiangdaohang' , label : '侧向导航' } , { value : 'dingbudaohang' , label : '顶部导航' } ] } ] } , { value : 'zujian' , label : '组件' , children : [ { value : 'basic' , label : 'Basic' , children : [ { value : 'layout' , label : 'Layout 布局' } , { value : 'color' , label : 'Color 色彩' } , { value : 'typography' , label : 'Typography 字体' } , { value : 'icon' , label : 'Icon 图标' } , { value : 'button' , label : 'Button 按钮' } ] } , { value : 'form' , label : 'Form' , children : [ { value : 'radio' , label : 'Radio 单选框' } , { value : 'checkbox' , label : 'Checkbox 多选框' } , { value : 'input' , label : 'Input 输入框' } , { value : 'input-number' , label : 'InputNumber 计数器' } , { value : 'select' , label : 'Select 选择器' } , { value : 'cascader' , label : 'Cascader 级联选择器' } , { value : 'switch' , label : 'Switch 开关' } , { value : 'slider' , label : 'Slider 滑块' } , { value : 'time-picker' , label : 'TimePicker 时间选择器' } , { value : 'date-picker' , label : 'DatePicker 日期选择器' } , { value : 'datetime-picker' , label : 'DateTimePicker 日期时间选择器' } , { value : 'upload' , label : 'Upload 上传' } , { value : 'rate' , label : 'Rate 评分' } , { value : 'form' , label : 'Form 表单' } ] } , { value : 'data' , label : 'Data' , children : [ { value : 'table' , label : 'Table 表格' } , { value : 'tag' , label : 'Tag 标签' } , { value : 'progress' , label : 'Progress 进度条' } , { value : 'tree' , label : 'Tree 树形控件' } , { value : 'pagination' , label : 'Pagination 分页' } , { value : 'badge' , label : 'Badge 标记' } ] } , { value : 'notice' , label : 'Notice' , children : [ { value : 'alert' , label : 'Alert 警告' } , { value : 'loading' , label : 'Loading 加载' } , { value : 'message' , label : 'Message 消息提示' } , { value : 'message-box' , label : 'MessageBox 弹框' } , { value : 'notification' , label : 'Notification 通知' } ] } , { value : 'navigation' , label : 'Navigation' , children : [ { value : 'menu' , label : 'NavMenu 导航菜单' } , { value : 'tabs' , label : 'Tabs 标签页' } , { value : 'breadcrumb' , label : 'Breadcrumb 面包屑' } , { value : 'dropdown' , label : 'Dropdown 下拉菜单' } , { value : 'steps' , label : 'Steps 步骤条' } ] } , { value : 'others' , label : 'Others' , children : [ { value : 'dialog' , label : 'Dialog 对话框' } , { value : 'tooltip' , label : 'Tooltip 文字提示' } , { value : 'popover' , label : 'Popover 弹出框' } , { value : 'card' , label : 'Card 卡片' } , { value : 'carousel' , label : 'Carousel 走马灯' } , { value : 'collapse' , label : 'Collapse 折叠面板' } ] } ] } , { value : 'ziyuan' , label : '资源' , children : [ { value : 'axure' , label : 'Axure Components' } , { value : 'sketch' , label : 'Sketch Templates' } , { value : 'jiaohu' , label : '组件交互文档' } ] } ] } } , { prop : 'Cascader2' , component : 'Cascader' , label : '多选' , componentProps : { props : { multiple : true } , options : [ { value : 'zhinan' , label : '指南' , children : [ { value : 'shejiyuanze' , label : '设计原则' , children : [ { value : 'yizhi' , label : '一致' } , { value : 'fankui' , label : '反馈' } , { value : 'xiaolv' , label : '效率' } , { value : 'kekong' , label : '可控' } ] } , { value : 'daohang' , label : '导航' , children : [ { value : 'cexiangdaohang' , label : '侧向导航' } , { value : 'dingbudaohang' , label : '顶部导航' } ] } ] } , { value : 'zujian' , label : '组件' , children : [ { value : 'basic' , label : 'Basic' , children : [ { value : 'layout' , label : 'Layout 布局' } , { value : 'color' , label : 'Color 色彩' } , { value : 'typography' , label : 'Typography 字体' } , { value : 'icon' , label : 'Icon 图标' } , { value : 'button' , label : 'Button 按钮' } ] } , { value : 'form' , label : 'Form' , children : [ { value : 'radio' , label : 'Radio 单选框' } , { value : 'checkbox' , label : 'Checkbox 多选框' } , { value : 'input' , label : 'Input 输入框' } , { value : 'input-number' , label : 'InputNumber 计数器' } , { value : 'select' , label : 'Select 选择器' } , { value : 'cascader' , label : 'Cascader 级联选择器' } , { value : 'switch' , label : 'Switch 开关' } , { value : 'slider' , label : 'Slider 滑块' } , { value : 'time-picker' , label : 'TimePicker 时间选择器' } , { value : 'date-picker' , label : 'DatePicker 日期选择器' } , { value : 'datetime-picker' , label : 'DateTimePicker 日期时间选择器' } , { value : 'upload' , label : 'Upload 上传' } , { value : 'rate' , label : 'Rate 评分' } , { value : 'form' , label : 'Form 表单' } ] } , { value : 'data' , label : 'Data' , children : [ { value : 'table' , label : 'Table 表格' } , { value : 'tag' , label : 'Tag 标签' } , { value : 'progress' , label : 'Progress 进度条' } , { value : 'tree' , label : 'Tree 树形控件' } , { value : 'pagination' , label : 'Pagination 分页' } , { value : 'badge' , label : 'Badge 标记' } ] } , { value : 'notice' , label : 'Notice' , children : [ { value : 'alert' , label : 'Alert 警告' } , { value : 'loading' , label : 'Loading 加载' } , { value : 'message' , label : 'Message 消息提示' } , { value : 'message-box' , label : 'MessageBox 弹框' } , { value : 'notification' , label : 'Notification 通知' } ] } , { value : 'navigation' , label : 'Navigation' , children : [ { value : 'menu' , label : 'NavMenu 导航菜单' } , { value : 'tabs' , label : 'Tabs 标签页' } , { value : 'breadcrumb' , label : 'Breadcrumb 面包屑' } , { value : 'dropdown' , label : 'Dropdown 下拉菜单' } , { value : 'steps' , label : 'Steps 步骤条' } ] } , { value : 'others' , label : 'Others' , children : [ { value : 'dialog' , label : 'Dialog 对话框' } , { value : 'tooltip' , label : 'Tooltip 文字提示' } , { value : 'popover' , label : 'Popover 弹出框' } , { value : 'card' , label : 'Card 卡片' } , { value : 'carousel' , label : 'Carousel 走马灯' } , { value : 'collapse' , label : 'Collapse 折叠面板' } ] } ] } , { value : 'ziyuan' , label : '资源' , children : [ { value : 'axure' , label : 'Axure Components' } , { value : 'sketch' , label : 'Sketch Templates' } , { value : 'jiaohu' , label : '组件交互文档' } ] } ] } } , { prop : 'field3' , component : 'Cascader' , label : '可搜索' , componentProps : { filterable : true , props : { label : 'unitName' , value : 'id' } , options : [ { unitName : '神印王座' , id : 1 , children : [ { unitName : '龙皓晨' , id : 11 } , { unitName : '圣彩儿' , id : 12 } ] } , { unitName : '吞噬星空' , id : 2 } , { unitName : '天行九歌' , id : 3 } ] } } , { prop : 'field3' , component : 'ApiCascader' , label : 'ApiCascader' , componentProps : { filterable : true , props : { label : 'unitName' , value : 'id' } , api : ( ) => this . getCascaderOpt ( ) } } , { prop : 'field4' , component : 'Divider' , labelWidth : '0px' , componentProps : { contentPosition : 'left' , content : '上传' } } , { prop : 'field4' , component : 'Upload' , label : '上传附件' , componentProps : { action : 'https://httpbin.org/post' } } ] , formAction : { } } } , methods : { register ( e ) { this . formAction = econsole. log ( 'e' , e) } , handleChange ( e ) { console. log ( 'handleChange' , e) } , saveForm ( ) { this . formAction. validate ( ) console. log ( 't' , this . formAction. getFieldValues ( ) ) } , resetForm ( ) { this . formAction. clearValidate ( ) } , getOpt ( ) { return new Promise ( resolve => { const result = { result : [ { id : '选项1' , unitName : '黄金糕' } , { id : '选项2' , unitName : '双皮奶' } , { id : '选项3' , unitName : '蚵仔煎' } , { id : '选项4' , unitName : '龙须面' } , { id : '选项5' , unitName : '北京烤鸭' } , { id : '选项6' , unitName : '冰激淋' } , { id : '7' , unitName : '榴莲千层' } , { id : '8' , unitName : '煎饼' } , { id : '9' , unitName : '手抓饼' } ] } resolve ( result) } ) } , getTreeData ( ) { return Promise. resolve ( [ { id : 118808 , parentId : null , name : '新疆' , children : [ { id : 118809 , parentId : 118808 , name : '巴州乐禾' , children : [ { id : 118817 , parentId : 118809 , name : '采购部' } , { id : 118818 , parentId : 118809 , name : '销售部' } , { id : 118824 , parentId : 118809 , name : '运营部' } , { id : 111824 , parentId : 113809 , name : '研发部' } , { id : 118814 , parentId : 118829 , name : '市场部' } ] } ] } , { id : 118809 , parentId : null , name : '广东' , children : [ { id : 118879 , parentId : 118801 , name : '广州' } ] } ] ) } , getCascaderOpt ( ) { return Promise. resolve ( [ { unitName : '神印王座' , id : 1 , children : [ { unitName : '龙皓晨' , id : 11 } , { unitName : '圣彩儿' , id : 12 } ] } , { unitName : '吞噬星空' , id : 2 } , { unitName : '天行九歌' , id : 3 } ] ) } } }
</ script>
< style lang = " scss" > .form-demo { display : flex; flex-direction : column; height : 100%; overflow : hidden; background-color : white; .form { flex : 1; overflow : hidden; } .btns { display : flex; align-items : center; justify-content : flex-end; padding : 16px; box-shadow : 0 -1px #ddd; } }
</ style>
可折叠表单
< template> < div class = " form-demo" > < div class = " form" > < BasicForm:schemas = " schemas" :colProps = " {span: 12}" @register = " register" @change = " handleChange" /> </ div> </ div>
</ template> < script> export default { name : 'BasicFormDemo' , data ( ) { return { schemas : [ { prop : 'username' , component : 'Input' , label : '姓名' } , { prop : 'address' , component : 'Input' , label : '地址' } , { prop : 'rate' , component : 'Input' , label : '税率' , componentProps : { append : '%' } } ] , formAction : { } } } , methods : { register ( e ) { this . formAction = econsole. log ( 'formAction' , e) } , handleChange ( e ) { console. log ( 'handleChange' , e) } } }
</ script>
< style lang = " scss" > .form-demo { display : flex; flex-direction : column; height : 100%; overflow : hidden; background-color : white; .form { flex : 1; overflow : hidden; } .btns { display : flex; align-items : center; justify-content : flex-end; padding : 16px; box-shadow : 0 -1px #ddd; } }
</ style>
设置表单表项值
< template> < div class = " form-demo" > < div class = " form" > < BasicForm:schemas = " schemas" :colProps = " {span: 12}" :showActionButtonGroup = " false" @register = " register" @change = " handleChange" /> </ div> < div class = " btns" > < el-button type = " primary" @click = " setFormData" > 设置值</ el-button> < el-button type = " primary" @click = " updateSchema" > 更新表单项配置项</ el-button> < el-button type = " primary" @click = " insetSchema" > 插入表单项</ el-button> < el-button type = " primary" @click = " removeSchemaByFiled" > 删除表单项</ el-button> < el-button type = " primary" @click = " resetSchemas" > 重置表单</ el-button> </ div> </ div>
</ template> < script> export default { name : 'BasicFormDemo' , data ( ) { return { schemas : [ { prop : 'username' , component : 'Input' , label : '姓名' } , { prop : 'address' , component : 'Input' , label : '地址' } , { prop : 'rate' , component : 'Input' , label : '税率' , componentProps : { append : '%' } } ] , formAction : { } } } , methods : { register ( e ) { this . formAction = econsole. log ( 'formAction' , e) } , handleChange ( e ) { console. log ( 'handleChange' , e) } , setFormData ( ) { const data = this . formAction. setFieldValues ( { username : '李四' } ) console. log ( 'data' , data) } , updateSchema ( ) { this . formAction. updateSchema ( { prop : 'rate' , component : 'Input' , label : '税率' , componentProps : { placeholder : '请输入税率' } } ) } , insetSchema ( ) { this . formAction. insetSchema ( 'rate' , { prop : 'rate1' , component : 'Input' , label : '新增' , componentProps : { placeholder : '请输入' } } ) } , removeSchemaByFiled ( ) { this . formAction. removeSchemaByFiled ( 'address' ) } , resetSchemas ( ) { this . formAction. resetSchemas ( ) } } }
</ script>
< style lang = " scss" > .form-demo { display : flex; flex-direction : column; height : 100%; overflow : hidden; background-color : white; .form { flex : 1; overflow : hidden; } .btns { display : flex; align-items : center; justify-content : flex-end; padding : 16px; box-shadow : 0 -1px #ddd; } }
</ style>
使用插槽 slots
< template> < div class = " form-demo" > < div class = " form" > < BasicForm :schemas = " schemas" :colProps = " {span: 24}" > < template #username > < span> username slot</ span> </ template> < template #submitBefore > submit 左侧插槽</ template> </ BasicForm> </ div> </ div>
</ template> < script> export default { name : 'BasicFormDemo' , data ( ) { return { schemas : [ { prop : 'username' , component : 'Input' , label : '姓名' , slots : 'username' } , { prop : 'address' , component : 'Input' , label : '地址' } , { prop : 'rate' , component : 'Input' , label : '税率' , componentProps : { append : '%' } } ] } } }
</ script>
< style lang = " scss" > .form-demo { display : flex; flex-direction : column; height : 100%; overflow : hidden; background-color : white; .form { flex : 1; overflow : hidden; } .btns { display : flex; align-items : center; justify-content : flex-end; padding : 16px; box-shadow : 0 -1px #ddd; } }
</ style>
二、vue3语法使用
<template><BasicForm@register="register"@submit="handleSubmit"@reset="handleSubmit"@change="handleChange"/>
</template><script setup>
const [register, { updateSchema, getFieldValues, setFieldValues }] = useForm({schemas: [{prop: 'orgUnitId',component: 'ApiSelect',label: 'label1',componentProps: {api: $api.getOrgUnitByUserId,fieldNames: { label: 'departmentName', value: 'id' },resultField: 'result'},required: true},{prop: 'projectId',component: 'Select',label: 'label2',required: true},],labelWidth: '110px'
})
</script>
Form Attributes
参数 说明 类型 可选值 默认值 colon label 是否显示冒号 boolean — 显示 schemas 必填 ,表单配置项,具体 看下表array — — colProps 表单项栅格布局,具体看下表 objeact — — labelWidth label 宽度 string — ‘100px’ labelPosition 表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-width string — right showActionButtonGroup 是否显示操作按钮 boolean — true showSearchBtn 是否显示查询按钮 boolean — true showResetBtn 是否显示清空按钮 Boolean — true searchText 查询按钮文本 string — ‘查询’ resetText 清空按钮文本 string — 清空 isFlex 是否开启自适应布局 boolean — true formSize 尺寸,不同的lebel设置不同的尺寸以适应屏幕, 设置此属性必须设置isFlex为true boolean — true model 表单数据对象 object — — isEnterSearch 是否按下回车查询 boolean — true formItemMb 表单项的 margin-bottom String — ‘16px’
Schemas Attributes
参数 说明 类型 可选值 默认值 colon label 是否显示冒号 boolean —— true prop 必填 ,字段名称, 唯一
string —— —— component 必填 ,输入框类型,string Input、InputNumber 、TimePicker、DatePicker、Switch、RadioGroup、CheckboxGroup、SelectAll、Select、ApiSelect、ApiTreeSelect、Cascader、ApiCascader、Upload、Divider —— label 标签文本 string —— —— label-width 表单域标签的的宽度 string —— ’100px‘ required 是否必填 boolean —— false show 表单项显示隐藏 boolean —— false componentProps 可设置组件属性(element 组件的属性,具体可查看 element 组件文档),如禁用输入框componentProps={disabled: true}
object —— {} defaultValue 输入框默认值 any —— —— colProps 表单项栅格布局,具体看下表 object —— —— rules 表单验证规则 array —— —— disabled 是否禁用, 如此处设置表单禁用,无需在 componentProps 中设置 false —— —— slots 表单项插槽 string —— —— renderContent 渲染内容, 需要返回渲染函数,否则会报错 Function —— —— formItemMb 表单项的 margin-bottom String —— ‘16px’
colProps Attributes
参数 说明 类型 可选值 默认值 span 栅格占据的列数 number —— 8 xs <768px
响应式栅格数或者栅格属性对象number —— —— sm ≥768px
响应式栅格数或者栅格属性对象number —— —— md ≥992px
响应式栅格数或者栅格属性对象number —— —— lg ≥1200px
响应式栅格数或者栅格属性对象number —— —— xl ≥1920px
响应式栅格数或者栅格属性对象number —— ——
Events
事件名称 说明 回调参数 change 值改变时触发,InputNumber 类型输入如果设置默认值, 初始时会触发一次 change 事件 e: any register 注册 BasicForm 组件实例, 获取实例上的方法 e: object
Slots
name 说明 submitBefore submit btn 左侧插槽 resetBefore reset btn 左侧插槽 resetAfter reset btn 右侧插槽 moreAfter 更多 右侧插槽
Methods
⚠️ 该组件二次封装后需注册 register
事件, 获取实例方法, 并且需要保存到当前组件实例中
方法名 说明 参数 validate 校验 — clearValidate 清空表单校验 — reset 清空表单校验, 清空输入框值 — getFieldValues 获取表单的值 — setFieldValues 设置表单的值, 返回值是更新之后表单的值 object updateSchema 更新表单配置项, prop 必须存在 schemas 中, 不存在则更新失败 — insetSchema 插入表单项 field, schema removeSchemaByFiled 删除表单项 field resetSchemas 重置配置项, 恢复初始值 —