Skip to content

QilinForm组件

QilinForm组件用于表单,基于element-plus的el-form组件封装。

注意

1、若表单内级联组件必填,则trigger触发方式须填change或含change。

基本使用

vue
<template>
    <QilinForm v-model:formConfig="formConfig" ref="formConfigRef">
        <template v-slot:projectIntroduce="slotData">
            <el-form-item :label="slotData.data.item.labelName" :prop="slotData.data.item.dataName"
                :style="slotData.data.item.style"
            >
                <el-input v-model="formConfig.submitData[slotData.data.item.dataName]"
                    placeholder="请输入项目介绍!!"
                ></el-input>
            </el-form-item>
        </template>
        <template v-slot:evaluation="slotData">
            <el-input v-model="formConfig.submitData[slotData.data.item.dataName]"
                placeholder="请输入个人评价~~~"
            ></el-input>
        </template>
        <template v-slot:extraFormItem>
            <el-form-item label="年收入" prop="salary" style="width:100%">
                <el-input v-model="formConfig.submitData.salary" placeholder="分逼不挣"></el-input>
            </el-form-item>
        </template>
        <template v-slot:extraItem>
            <div>这是独立于form表单之外的元素,常用于一些项目的额外奇葩的需求实现!</div>
        </template>
    </QilinForm>
</template>

<script setup>
import {reactive,ref,onMounted} from "vue";

// 获取提交表单元素DOM
const formConfigRef=ref(null);

/*
    逻辑脚本代码区域
*/
const changeProjectName=(item,index,info)=>{
    // console.log(item,index,info);
};

const formConfig=reactive({
    elFormConfig:{
        labelWidth:"100px",
        // labelSuffix:":",
        border:true,
        validateOnRuleChange:false
    },
    itemConfig:[
        {
            hideLabel:false,
            labelName:"简介",
            dataName:"description",
            type:"input",
            inputType:"textarea",
            maxlength:300,
            rows:3,
            width:24,
            itemStyle:"color:red;"
        },
        {
            labelName:"身份证号码",
            dataName:"idCard",
            type:"input",
            inputType:"number",
            width:12,
            otherValidate:"idCardValidator"
        },
        {
            labelName:"手机号码",
            dataName:"phonenumber",
            type:"input",
            inputType:"text",
            width:12,
            otherValidate:"phoneValidator"
        },
        {
            labelName:"出生日期",
            dataName:"birthday",
            type:"date",
            dateType:"date",
            format:"YYYY-MM-DD",
            valueFormat:"YYYY-MM-DD",
            defaultValue:new Date(2000,1,1),
            width:12
        },
        {
            labelName:"年龄",
            dataName:"age",
            type:"number",
            width:12
        },
        {
            labelName:"性别",
            dataName:"gender",
            type:"select",
            dataListName:"genderList",
            width:12
        },
        {
            labelName:"参与项目",
            dataName:"projectName",
            type:"cascader",
            dataListName:"projectNameList",
            filterable:true,
            cascaderProps:{
                label:"name",
                value:"id",
                children:"children",
                multiple:true
            },
            change:changeProjectName,
            style:"width:100%",
            width:12
        },
        {
            labelName:"项目介绍",
            hideLabel:true,
            dataName:"projectIntroduce",
            type:"itemSlot",
            slotName:"projectIntroduce",
            style:"width:50%;",
            width:12
        },
        {
            labelName:"个人评价",
            dataName:"evaluation",
            type:"slot",
            slotName:"evaluation",
            width:12
        }
    ],
    selectLists:{
        genderList:[
            {
                label:"男",
                value:0
            },
            {
                label:"女",
                value:1
            },
            {
                label:"人妖",
                value:2
            }
        ],
        projectNameList:[
            {
                name:"南京冠霆智能科技有限公司",
                id:1,
                children:[
                    {
                        name:"看守所项目",
                        id:11
                    },
                    {
                        name:"拘留所项目",
                        id:12
                    },
                    {
                        name:"戒毒所项目",
                        id:13
                    },
                    {
                        name:"安康医院项目",
                        id:14
                    }
                ]
            },
            {
                name:"亚信安全有限公司",
                id:2,
                children:[
                    {
                        name:"亚信智网有限公司",
                        id:21,
                        children:[
                            {
                                name:"SDP零信任项目",
                                id:211
                            },
                            {
                                name:"动态应用安全防护系统BSG",
                                id:212
                            }
                        ]
                    }
                ]
            },
            {
                name:"苏软科技(南京)有限公司",
                id:3,
                children:[
                    {
                        name:"云上贵州项目",
                        id:31
                    },
                    {
                        name:"红花街道h5项目",
                        id:32
                    },
                    {
                        name:"温州市党政机关信息化项目",
                        id:33
                    }
                ]
            },
            {
                name:"南京联创智慧城市科技有限公司",
                id:4,
                children:[
                    {
                        name:"U创办公管理系统",
                        id:41
                    },
                    {
                        name:"U创办公小程序",
                        id:42
                    }
                ]
            }
        ]
    },
    buttonConfig:[
        {
            btnName:"重置",
            btnType:"default",
            btnSize:"default",
            isHideFn:(item)=>{
                return true;
            },
            formRefName:formConfigRef,
            btnClick:(formRef)=>{
                formRef.formResetFields();
            }
        },
        {
            btnName:"修改",
            btnType:"primary",
            btnSize:"default",
            isHide:true,
            formRefName:formConfigRef,
            btnClick:(formRef)=>{

            }
        },
        {
            btnName:"提交",
            btnType:"primary",
            btnSize:"default",
            formRefName:formConfigRef,
            btnClick:(formRef)=>{
                formRef.formValidate((valid)=>{
                    if(valid){
                    }
                })
            }
        },
    ],
    submitData:{
        description:"",
        idCard:"",
        phonenumber:"",
        birthday:"",
        age:0,
        gender:0,
        projectName:"",
        projectIntroduce:"",
        evaluation:"",
        salary:""
    }
});


/*
    生命周期等代码区域
*/


</script>

示例:

Props参数

formConfig object

核心配置项,支持以下参数。

属性名类型
说明
可选值默认值
elFormConfigobjectel-form标签元素上的相关配置,详见elFormConfig--
itemConfigarray表单内每个组件的配置项,详见itemConfig--
selectListsobject下拉数据集,详见selectLists--
buttonConfigarray表单内的按钮配置项,详见buttonConfig--
submitDataobject提交到后台的数据集,详见submitData--

elFormConfig object

el-form标签元素上的相关配置

属性名类型
说明
可取值默认值
labelWidthstring/numberlabel标签的长度-60px
labelPositionstringlabel标签的位置left/right/topleft
labelSuffixstringlabel标签的后缀-
sizestring表单内组件的尺寸large/small/defaultdefault
classNamestringel-form的自定义类名--
styleobject/string最外层元素即QilinForm元素的自定义行内样式--
borderboolean是否将表单元素转为表格样式-false
borderColorstring表格样式的边框颜色-#E9E9E9
validateOnRuleChangeboolean是否在表单验证规则发生变化时重新触发表单验证-false

itemConfig object

表单内每个组件的配置项。

属性名类型
说明
可取值默认值
labelNamestringlabel标签的文字-默认名称
dataNamestring对应后台的数据字段名--
isHideboolean是否隐藏该表单项-false
hideLabelboolean是否隐藏该表单项的label标签-false
labelNameTextstringlabel标签的额外字段--
typestring表单组件的类型input/number/select/radio/checkbox/date/upload/cascader/rate/switch/image/wangEditor/vueEditor/kaitifytext/slot/itemSlotinput
inputTypestringinput的类型,当且仅当type=input时生效text/password/textarea/numbertext
showPasswordboolean是否显示切换密码图标,当且仅当inputType=password时生效-false
autocompletestring是否启用表单自动完成的功能,当且仅当type=input时生效,设置为off即关闭自动填充(有些浏览器并不生效,测试设置为new-password即可)on/off/new-password/new-text/...new-text
clearableboolean是否显示可以一键清空按钮-true
rowsnumber行高,当且仅当inputType=textarea时生效-2
numbernumber当输入框为数字输入框时,允许输入的整数位数,当inputType=number或者inputType=true时生效,你也可以直接在项目中用此指令v-number--
decimalnumber当输入框为数字输入框时,允许输入的小数位数,当inputType=number或者inputType=true时生效--
maxlengthnumber最大输入长度,当inputType为text、textarea、password时生效--
minlengthnumber最小输入长度,当inputType为text、textarea、password时生效--
prefixIconstring输入框前置内置图标,当且仅当type=input时生效--
prefixSlotNamestring输入框前置内置图标插槽名称,当且仅当type=input时生效--
suffixIconstring输入框后置内置图标,当且仅当type=input时生效--
suffixSlotNamestring输入框后置内置图标插槽名称,当且仅当type=input时生效--
maxnumber最大输入数字,当且仅当type=number时生效--
minnumber最小输入数字,当且仅当type=number时生效--
rateSizestring评分组件的尺寸,当且仅当type=rate时生效large/small/defaultdefault
allowHalfboolean是否允许半选,当且仅当type=rate时生效-false
dataListNamestring下拉数据名称对应selectLists中属性名,当type=select、cascader、checkbox、radio时生效--
multipleboolean是否可以多选,当type=select、checkbox时生效-false
collapseTagsboolean多选时是否将选中值按文字的形式展示,当type=select时生效-false
filterableboolean是否可搜索,当type为selectcascader时生效,cascader时默认为false-
cascaderPropsobject配置级联选择器的选项,具体的配置参数详见element官网el-cascader文档,当type=cascader时生效--
customLabelNamestring下拉选项中自定义label对应字段值,当type=select、radio、checkbox时生效-label
customValueNamestring下拉选项中自定义value对应字段值,当type=select、radio、checkbox时生效-value
loadingboolean是否正在从远程获取数据,当type=select时生效-false
remoteboolean其中的选项是否从服务器远程加载,当type=select时生效-false
remoteMethodfunction定义远程搜索方法,启用远程搜索需要开filterableremote设置为true,当type=select时生效--
dateTypestring日期选择器的类型,当type=date时生效year/years/month/date/dates/datetime/week/datetimerange/daterange/monthrangedate
defaultTimeDate/[Date,Date]选择日期后的默认时间值,默认8点半,当type=date且为范围选择时生效-new Date(2000,1,1,8,30,0)
defaultValueDate/[Date,Date]选择器打开时默认显示的时间--
formatstring显示在输入框中的格式化时间设置,当type=date时生效-YYYY-MM-DD HH:mm:ss
valueFormatstring传给后台的格式化时间设置,当type=date时生效-YYYY-MM-DD HH:mm:ss
startPlaceholderstring日期开始提示语,当type=date且dateType=***range时生效--
endPlaceholderstring日期结束提示语,当type=date且dateType=***range时生效--
timeFormatstring时间选择器时分秒下拉列表中显示的时间格式,当type=date时生效-HH:mm:ss
rangeSeparatorstring时间选择器的范围分隔符,当type=date且dateType=***range时生效-
switchSizestring开关组件的尺寸,当type=switch时生效large/small/defaultdefault
activeTextstring开关打开时的文字描述,当type=switch时生效--
inactiveTextstring开关关闭时的文字描述,当type=switch时生效--
activeValuestring开关打开时的值,当type=switch时生效--
inactiveValuestring开关关闭时的值,当type=switch时生效--
inlinePromptbooleanswitch时图标或文字是否显示在开关内,当type=switch时生效-false
widthstring表单每项组件的栅栏占比宽度6/8/12/16/18/2424
classNamestring表单每项组件即el-form-item的自定义类名--
itemStylestring表单每项组件即el-form-item的自定义样式--
disabledboolean是否禁用该项-false
slotNamestringslot具名插槽名称,当type=slot时生效--
stylestring额外的行内样式,当type=input/select/cascader/radio/switch/checkbox时生效--
dateWidthstringdate组件元素的长度,默认为auto,当type=date时生效-auto
placeholderstring表单占位符提示语--
validatearray表单的简单校验规则,取值为对象数组--
otherValidatestringQilin表单组件的内置校验规则emailValidator/phoneValidator/idCardValidator-
changefunctionchange事件(item,val)=>{}-
clearfunctionclear事件,当type=input、select时生效(item)=>{}-
customFnfunction自定义事件,当type=image、upload且无指定action时生效,主要用于上传文件时手动即时上传文件至服务器(item,file)=>{}-

selectLists object

下拉数据集,当type=selectcheckboxradiocascader时其内属性名须对应dataListName的值。

buttonConfig array

表单底部操作提交按钮相关配置项。

属性名类型
说明
可取值默认值
btnNamestring按钮名称-按钮
btnTypestring按钮类型primary/success/warning/danger/info/textdefault
btnSizestring按钮尺寸large/small/defaultdefault
classNamestring按钮自定义类名--
formRefNameDOM表单元素的DOM--
btnClickfunction按钮点击事件(formRef,event)=>{}-
buttonConfigClassNamestring表单底部按钮外父元素自定义类名--

submitData object

提交到后台的数据集,即每个itemConfig的dataName值组成的对象。

Events

组件的暴露事件。

事件名类型参数
说明
-functionitem,value\event\undefined,undefined\ref每个itemConfig表单元素的change、blur、clear等事件,配置在itemConfig中,事件名就是他们的属性名,如change

Exposes

组件的暴露方法。

方法名类型参数
说明
formValidatefunctionvalid对整个表单的内容进行验证,接受一个回调函数或返回Promise
formResetFieldsfunctionprops/undefined重置该表单项,将其值重置为初始值,并移除校验结果,未指定字段的话就是重置整个表单
formClearValidatefunctionprops/undefined清理某个字段的表单验证信息,未指定字段的话就是清理整个表单
formValidateFieldfunctionprops对单个表单项进行校验
createFormRulesfunction-用于创建表单的校验规则,用于在更新表单校验规则后触发该方法,解决校验规则更新不成功的问题

Slots

组件的插槽。

插槽名数据值
说明
{item.slotName}data:{scope,item}设置itemConfig配置项中的type为slot或者itemSlot时即可使用,用于需要对元素某项进行特殊处理的需求,其中设置的slotName属性值就是该插槽名
extraFormItem-用于需要自定义表单插槽,该插槽位置在所有表单项之后
extraItem-用于需要自定义表单之外的插槽,该插槽位置在表单元素之后