对话框二次封装

// 对话框子组件
<template>
  <div>
    <el-dialog
      class="comn_dialog"
      :title="dialogTitle"
      :visible.sync="visible"
      :width="popupWidth"
      :top="popupTop"
    >
      <slot>
        <p>弹窗内容自定义</p>
      </slot>
      <span slot="footer" class="dialog-footer">
        <el-button @click="Cancel">取 消</el-button>
        <el-button type="primary" @click="Save">确定</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
export default {
  props: {
    dialogTitle: {
      type: String,
      default: "标题"
    },
    centerDialogVisible: {
      type: Boolean,
      default() {
        return false;
      }
    },
    popupWidth: {
      type: String,
      default() {
        return "430px";
      }
    },
    popupTop: {
      type: String,
      default() {
        return "23vh";
      }
    }
  },
  computed: {
    visible: {
      get() {
        return this.centerDialogVisible;
      },
      set(val) { // 当visible改变的时候,触发父组件的 updateVisible方法,在该方法中更改传入子组件的 centerDialogVisible的值
        this.$emit("updateVisible", val);
      }
    }
  },
  methods: {
    Cancel() {
      this.$emit("resetPopupData");
    },
    Save() {
      this.$emit("submitPopupData");
    }
  }
};
</script>
<style lang="scss">
.comn_dialog {
  .el-dialog__header {
    padding: 20px 0px 9px 20px;
    border-bottom: 1px solid #e7e6e6;
    box-shadow: 0px 4px 4px -4px #d1d0d0;
  }
  .el-dialog__title {
    font-size: 16px;
    letter-spacing: 1px;
    color: #464646;
    font-weight: bolder;
  }
  .el-dialog__footer {
    padding: 0px 20px 20px 0px;
  }
  .el-dialog__headerbtn {
    position: static; // 兼容IE11 ,取消原有的position定位
  }
  .el-dialog__close {
    font-size: 20px;
    font-weight: bolder;
    position: absolute;
    top: 8px;
    right: 8px;
    &::after {
      content: '';
      width: 20px;
      height: 20px;
      border-radius: 25px;
      position: absolute;
      right: -2px;
      top: -3px;
    }
  }
  .el-dialog__body {
    padding: 20px;
  }
}
</style>
// 引入对话框的组件
<template>
  <div class="test">
    <comn-dialog
      :dialogTitle="dialogTitle"
      :centerDialogVisible="visible"
      @updateVisible="updateVisible"
      @resetPopupData="resetPopupData"
      @submitPopupData="submitPopupData"
      :popupWidth="'550px'"
      :popupTop="'200px'"
    >
      <div class="enable_font">
        <span>
          确定要
          <em class="operate_font"> 删除</em>
          选中数据吗?
        </span>
      </div>
    </comn-dialog>
  </div>
</template>
<script>
import comnDialog from "@/components/Dialog.vue" // 引入Dialog
export default {
components:{
    comnDialog
},
  data() {
    return {
      dialogTitle: "", // 标题
      visible: false
    };
  },
  methods: {
  // 点击旁边对话框消失 updateVisible(val) {
this.visible = val; }, resetPopupData() { this.visible = false; }, // 确定按钮 submitPopupData() { this.visible = false; }, } }; </script>

 可以直接套用

posted @ 2021-07-12 16:48  挽你手  阅读(138)  评论(1编辑  收藏  举报