<template>
<el-form
class="form"
:inline="formConfig.inline"
:model="value"
:label-width="formConfig.labelWidth"
:rules="rules"
:size='formConfig.size'
>
<slot name="formItem" />
<el-form-item
v-for="(item,index) in formConfig.formItemList"
:key="index"
:label="item.label"
:prop="item.prop"
:width="formConfig.width"
>
<el-input
v-if="item.type=='input'"
v-model="value[item.prop]"
:disabled="item.disabled"
:clearable="true"
:placeholder="item.placeholder"
></el-input>
<el-select
:clearable="true"
v-else-if="item.type=='select'"
v-model="value[item.prop]"
:disabled="item.disabled"
:placeholder="item.placeholder"
>
<el-option
v-for="(optItem,index) in item.optList"
:key="index"
:label="optItem.label"
:value="optItem.value"
></el-option>
</el-select>
<el-date-picker
:value-format="item.dateFormate"
v-else
v-model="value[item.prop]"
:type="item.type"
:disabled="item.disabled"
:clearable="true"
:placeholder="item.label"
></el-date-picker>
</el-form-item>
<div class="searchBtn">
<el-button-group>
<el-button
class="btn"
v-for="(item, index) in formConfig.operate"
:key="index"
:size="item.size"
:type="item.type"
:icon="item.icon"
@click="item.handleClick(value)"
>{{item.name}}
</el-button>
</el-button-group>
<slot name="operate"></slot>
</div>
</el-form>
</template>
<script>
export default {
components: {},
props: {
formConfig: {
type: Object,
required: true
},
value: {
type: Object,
required: true
},
rules: {
type: Object
}
},
computed: {},
methods: {
setDefaultValue() {
const formData = { ...this.value };
// 设置默认值
this.formConfig.formItemList.forEach(({ key, value }) => {
if (formData[key] === undefined || formData[key] === null) {
formData[key] = value;
}
});
}
},
mounted() {
this.setDefaultValue();
}
};
</script> <style lang="scss" scoped>
.form {
min-width: 300px;
} .searchBtn {
.btn {
margin-left: 20px;
}
}
</style>

formConfig配置

formConfig: {
inline: true,
size: "normal",
labelWidth: '100',
width: '180',
formItemList: [
{label: '商品名称',prop: 'name',type: 'input', placeholder: '请输入商品名称'},
{label: '进价',prop: 'incode',type: 'input', placeholder: '请输入进价'},
{label: '售价',prop: 'expend',type: 'input', placeholder: '请输入售价'},
{label: '库存数量',prop: 'number',type: 'input', placeholder: '请输入库存数量'},
{label: '商品描述',prop: 'remark',type: 'input', placeholder: '请输入商品描述'},
{label: '供应商',prop: 'resource',type: 'input', placeholder: '请输入供应商'}
],
operate: [
{type: 'primary',icon: '',name: '取消',size: 'normal',handleClick: function() {}},
{type: 'primary',icon: '',name: '确定',size: 'normal',handleClick: (form) => {
this.handleSubmit(form);
}},
]
}

Elemnt ui 组件封装(form)的更多相关文章

  1. Elemnt ui 组件封装(table)

    <template> <div class="table"> <el-table :data="tableData2" :bord ...

  2. 前端如何搭建vue UI组件库/封装插件(从零到有)

    需求 因之前是做外包项目居多,经常用到相同的组件,之前的办法是在一个项目中写一个组件,其他项目直接将compents下的组件复制,粘贴到项目中使用,缺点是维护起来,改一个项目,其他项目也需要修改,所以 ...

  3. Vue + Element UI 实现权限管理系统 (功能组件封装)

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  4. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  5. DCloud-MUI:文档 UI组件

    ylbtech-DCloud-MUI:文档 UI组件 1.返回顶部 1.accordion(折叠面板) 折叠面板从二级列表中演化而来,dom结构和二级列表类似,如下: <ul class=&qu ...

  6. [开源] 基于Layui组件封装的后台模版,HG-Layui-UI通用后台管理框架V1.0版

    HG框架简介 HG-Layui-UI框架,是基于layui最新版UI搭建的一套通用后台管理框架,借鉴了市面上各大主流框架风格,采用iframe标签页实现,保留了传统开发模式的简单实用性. 为快速开发减 ...

  7. Element Ui使用技巧——Form表单的校验规则rules详细说明

    Element UI中对Form表单验证的使用介绍: Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item的 prop 属性设置为需校验的字段名 ...

  8. Atitit.web ui  组件化 vs  mvc

    Atitit.web ui  组件化 vs  mvc   组件化  与 mvc并不矛盾..单双方适用的地方有所不同.. React推荐以组件的方式去重新思考UI构成,将UI上每一个功能相对独立的模块定 ...

  9. AngularJs的UI组件ui-Bootstrap分享(七)——Buttons和Dropdown

    在ui-Bootstrap中,Buttons控件和Dropdown控件与form表单中的按钮和下拉框名字很像,但实际上这两个控件有新的含义. 先说Buttons,它是一组按钮,用来实现form表单中的 ...

随机推荐

  1. 【bjdctf】 BJD hamburger competition

    是一个游戏 静态分析和动态分析都没思路 尝试查看运行时动态链接库 其中assembly-csharp.dll可能为实现游戏功能的动态链接库 .net逆向 Dnspy反编译 关键代码如上 Getflag ...

  2. 垃圾收集器G1和CMS ,以及老年代和新生代的比例设置

    首先 1.G1是包括年轻代和年老代的GC 2.CMS是年老代GC 3.二者在某些时候都需要FullGC(serial old GC)的辅助 ###CMS收集器:CMS(ConCurrent Mark ...

  3. Java时间处理类LocalDate和LocalDateTime常用方法

    Java时间处理类LocalDate和LocalDateTime常用方法 https://blog.csdn.net/weixin_42579074/article/details/93721757

  4. char 和 varchar 的区别是什么?float 和 double 的区别是什么?

    char 和 varchar 的区别是什么? char(n) :固定长度类型,比如订阅 char(10),当你输入"abc"三个字符的时候,它们占的空间还是 10 个字节,其他 7 ...

  5. 集合迭代器Iterator

    迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节. 什么是迭代器Iterator? Java集合框架的集合类,我们有时候称之为容器.容器的种类有很多种,比 ...

  6. 面试问题之C++语言:多态

    什么是多态? 概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性.简单的说,就是用基类的引用指向子类的对象. 为什么要用多态呢? 原因:封装可以隐藏实现细节,使得代码模 ...

  7. Java中如何声明方法?JavaScript中如何声明函数?

    public void method(){ } //实例方法 Function Declaration 可以定义命名的函数变量,而无需给变量赋值.Function Declaration 是一种独立的 ...

  8. MySQL安装速成指南(ZIP)

    MySQL初始化数据库 第一步:将MySQL ZIP压缩包进行解压 第二部:在MySQL主目录创建my.ini文件,并添加以下内容 [client] port=3306 socket=/tmp/mys ...

  9. 抽象的(abstract)方法是否可同时是静态的(static), 是否可同时是本地方法(native),是否可同时被 synchronized 修饰?

    都不能.抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛 盾的.本地方法是由本地代码(如 C 代码)实现的方法,而抽象方法是没有实现 的,也是矛盾的.synchronized 和方法的实 ...

  10. Linux分区问题

    一.基本分区的作用及其大小 /boot分区: 存放引导文件和Linux内核文件等. 引导文件:判断启动哪一个操作系统或启动哪个内核. 内核:管理硬件和软件资源,程序与硬件之间的桥梁. 分区大小:100 ...