使用element-ui二次封装一个可复用弹窗组件

源码链接:可复用弹窗组件

组件:

<template>
<transition name="el-fade-in">
<div v-if="modalCfg.visible" style="width:100%;height:100%;position:fixed;top:0px;left:0px;z-index:8;">
    <!-- 遮罩 -->
    <div class="ces-mask"></div>
    <div class="ces-modal-wrap">
      <div class="ces-modal" :style="{width:width}">
        <!-- 标题头部 -->
          <section  style="padding:10px;border-bottom: solid 1px #f1f1f1;" v-if="isHeader">
              <div class="ces-modal__header" >
              <div>{{modalCfg.title}}</div>
              <i class="el-icon-close ces-modal-close" @click="modalCfg.close(that)"></i>
              </div>
          </section>
          <!-- body -->
          <section class="ces-modal__body" style="padding:10px;" v-loading="modalLoading">
              <slot></slot>
          </section>
          <!-- 操作底部 -->
          <section style="padding:10px;border-top: solid 1px #f1f1f1;" v-if=‘isHandle‘>
              <div class="ces-modal__footer">
              <span>
                <el-button v-for=‘item in modalCfg.handles‘ :key="item.label"
                    :type=‘item.type‘
                    :icon=‘item.icon‘
                    :size=‘item.size‘
                    :disabled=‘item.disabled‘
                    @click="item.handle(that)">{{item.label}}</el-button>
              </span>
              </div>
          </section>
      </div>
  </div>
</div>
</transition>
</template>

<script>

export default {

    props:{
      that: { type: Object, default: this },
      modalCfg:{
        visible:false,
        title:‘‘,
        handles:[]
      },
      width:{
        type:String,
        default:‘50%‘
      },
      isHeader:{
        type:Boolean,
        default:true
      },
      modalLoading:{
        type:Boolean,
        default:false
      },
      isHandle:{
        type:Boolean,
        default:true
      }

    },
    computed: {

    },
    methods: {
      close(){
        this.$emit(‘close‘)
      }
    }
}
</script>

页面调用:因为该组件和其他组件合在一起,这是一个系列

<template>
  <div class="ces-main">
    <!-- 搜索 -->
    <ces-search
      :that=‘that‘
      size=‘mini‘
      labelWidth = ‘50px‘
      :searchData = "searchData"
      :searchForm = "searchForm"
      :searchHandle="searchHandle"></ces-search>

    <!-- 操作表格 -->
    <ces-table
      :that=‘that‘
      size=‘mini‘
      :isSelection=‘true‘
      :isIndex=‘true‘
      :isPagination=‘true‘
      :isHandle=‘true‘
      :tableData=‘tableData‘
      :tableCols=‘tableCols‘
      :tableHandles=‘tableHandles‘
      :tablePage=‘tablePage‘></ces-table>

    <!-- 弹窗 -->
    <ces-modal width=‘450px‘
      :that=‘that‘ :modalCfg=‘modalCfg‘>
        <ces-edit ref=‘cesEdit‘ :that=‘that‘
          :editCfg=‘editForm‘
          :editData=‘editData‘
          :editRules=‘editRules‘ ></ces-edit>
      </ces-modal>
  </div>
</template>

<script>
import cesSearch from ‘@/components/common/Form/searchForm‘
import cesTable from ‘@/components/common/Table/Table‘
import cesModal from ‘@/components/common/Modal/Modal‘
import cesEdit from ‘@/components/common/Form/editForm‘
import { createNamespacedHelpers } from ‘vuex‘
const { mapGetters, mapActions } = createNamespacedHelpers(‘Base‘)

export default {
  data () {
    return {
      that:this
    }
  },
  components:{
    cesTable,
    cesSearch,
    cesModal,
    cesEdit
  },
  computed:{
    ...mapGetters([
      ‘searchData‘,‘searchForm‘,‘searchHandle‘,
      ‘loading‘,‘tableData‘,‘tableCols‘,‘tableHandles‘,‘tablePage‘,
      ‘modalCfg‘,
      ‘editForm‘,‘editData‘,‘editRules‘])
  },
  methods:{
    ...mapActions([‘init‘,‘showEditModal‘,‘hideEditModal‘,‘getData‘,‘resetData‘,‘validateAdd‘,‘confirmDel‘,‘validateEdit‘])
  }
}
</script>

<style>

</style>

最终效果图:

原文地址:https://www.cnblogs.com/xingguozhiming/p/10739183.html

时间: 2024-10-08 14:34:41

使用element-ui二次封装一个可复用弹窗组件的相关文章

使用element-ui二次封装一个可复用编辑表单组件

源码:可复用表单组件 组件代码: <!-- 搜索表单 --> <template> <el-form ref='editForm' :size="size" inline :label-width="labelWidth" :model="editData" :rules="editRules"> <el-form-item v-for='item in editCfg' :label

封装一个简单的solrserver组件

一个简单的solrserver组件 实现索引更新的异步处理,以及查询接口,日志/线程池/队列监控没有加上. SolrDocment封装 接口: public interface ISolrDocument { public SolrInputDocument convertToInputDocument() throws Exception; public void buildSolrDocument(SolrDocument document) throws Exception; } 实现:

对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache

虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或其它参数.同时在工作中,我们还会发现,有一些ajax请求的数据,对实时性要求不高,即使我们把第一次请求到的这些数据缓存起来,然后当相同请求再次发起时直接拿之前缓存的数据返回也不会对相关功能有影响,通过这种手工的缓存控制,减少了ajax请求,多多少少也能帮助我们提高网页的性能.本文介绍我自己关于这两方

android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件

网络请求是全部App都不可缺少的功能,假设每次开发都重写一次网络请求或者将曾经的代码拷贝到新的App中,不是非常合理,出于此目的,我希望将整个网络请求框架独立出来,与业务逻辑分隔开,这样就能够避免每次都要又一次编写网络请求,于是基于我比較熟悉的asynchttpclient又一次二次封装了一个网络请求框架. 思路:网络请求层唯一的功能就是发送请求,接收响应数据,请求取消,cookie处理这几个功能,二次助封装后这些功能能够直接调用封装好的方法就可以. 二次助封装代码例如以下: 1.功能接口: /

element table 二次封装 父子组件传值 组件通信

新建一个组件(即子组件)table.vue 子组件编辑内容如下图所示 子组件通过props获取父组件传递过来的参数,如下图所示,type指明传递到子组件的数据类型,default指定默认值,一般不给 子组件通过事件发射向父组件传递事件及参数,$emit即为发射事件,第一个参数为向父组件传递的事件名,第二个参数为向父组件传递的参数 下面为父组件调用子组件: 在父组件中通过import引入子组件,并注册 父组件调用子组件并传递参数,同时监听子组件事件 父组件处理监听子组件事件 最终效果如下 当然功能

vue中封装一个全局的弹窗js

/** * Created by yx on 2017/12/21. */ export default { /** * 带按钮的弹框 * <!--自定义提示标题,内容,单个按钮事件--> */ showAlert:function(content,callback,singleButton){ if(typeof(content)=="string"){ if(callback){ if(singleButton){ // alert("内容加function两

使用jquery封装一个可以复用的提示框

首先在html中 <div class="backcap"> <div class="diolag"> <div class="diolag-div"> <img class="diolag-icon" src="{{ basePath }}/img/solution/app/close.png"> <div class="img"&

用vue2.x注册一个全局的弹窗alert组件

一.在实际的开发当中,弹窗是少不了的,默认系统的弹窗样式太丑,难以满足项目的实际需求,所以需要自己定义弹窗组件,把弹窗组价定义为全局的,这样减少每次使用的时候引入麻烦,节省开发时间.本文将分享如何定义一个全局的弹窗组件.下边开始上代码. 二.实际代码如下: 1.在components目录下的public目录新建一个文件夹alert,然后新建两个文件alert.vue和alert.scss.组件的样式代码我喜欢跟组件放到一起,这样按模块去划分管理.公共的样式就放到公共的样式文件里就行了. 2.al

vue + element ui table表格二次封装 常用功能

因为在做后台管理项目的时候用到了大量的表格, 且功能大多相同,因此封装了一些常用的功能, 方便多次复用. 组件封装代码: <template> <el-table :data="tableData" size="medium" ref="multipleTable" border fit @sort-change="handleSort" @filter-change="filterHandler&