Vue 对element-ui的Popover进行二次封装

效果:
在这里插入图片描述
代码:

全局封装(复用)

<template>
  <div class="screen">
    <el-popover
      :placement="placement"
      :width="screenWidth"
      trigger="click"
      popper-class="popperScreen"
      :title="title"
      ref="popoverSH"
    >
      <div>
        <slot></slot>
      </div>
      <div style="text-align: center; margin: 10px 0 0 0">
        <el-button class="smallBtn" @click="determine">确定</el-button>
        <el-button class="skyBtn" @click="cancel">重置</el-button>
      </div>
      <div slot="reference" class="selectStyle mt5 ml10">{{ screenTitle }}</div>
    </el-popover>
  </div>
</template>
<script>
export default {
  name: "gb-screen",
  data() {
    return {}
  },
  props: {
    // 箭头位置
    placement: {
      type: String,
      default: 'bottom-start'
    },
    // 宽度
    screenWidth: {
      type: String,
      default: '400'
    },
    // 标题
    title: {
      type: String,
      default: '请选择筛选条件'
    },
    // 按钮标题
    screenTitle: {
      type: String,
      default: '请筛选'
    }
  },
  methods: {
    determine() {
      this.$emit('submitScreenData')
    },
    cancel() {
      this.$emit('resetScreenData')
    }
  }
}
</script>
<style lang="less">
.el-popover.popperScreen {
  margin-top: 5px !important;
}
</style>

使用

1、引入

import gb-screen from './gb-screen'  // (引入路径)

2、注册

components: { 
    gb-screen,
},

3、调用代码

<template>
   <gb-screen ref="customerInvoice" :screenWidth="screenWidth" @resetScreenData="resetScreenData" @submitScreenData="submitScreenData">
   </gb-screen>
</template>

data(){
	return {
		screenWidth: 'calc(100vw - 600px)', // 筛选框
    }
},
methods:{
	submitScreenData(){
		this.$refs.customerInvoice.$refs.popoverSH.doClose()
	},
	resetScreenData() {
        this.$refs.customerInvoice.$refs.popoverSH.doClose()
    }
}