<!--定义一个有按钮的对话框 相当于dialog和按钮组合使用-->
<template>
  <!-- 有按钮的对话框 这个位置的代码会被包裹过去-->
  <!--close-on-click-modal	是否可以通过点击 modal 关闭 Dialog append-to-body控制不能出现遮挡层-->
  <el-dialog
      :title="title"
      :show-close="ShowClose"
    :fullscreen="fullscreen"
    :close-on-click-modal="closeOnClickModal"
    :visible.sync="visible"
    :width="width"
    :destroy-on-close="destroyOnClose"
    @close="close"
      append-to-body
  >
    <!--向别的位置包裹代码 上面的代码会被包裹过去-->
    <slot />
    <!--定义所在插槽的按钮-->
    <div slot="footer">
      <template v-if="buttonList">
        <el-button
          v-for="(button, index) in buttonList"
          :key="index"
          :type="button.type"
          :icon="button.icon"
          @click="button.onClick"
        >
          {{ button.text }}
        </el-button>
      </template>
      <!--定义其中的确定取消按钮-->
      <template v-else>
        <el-button v-if="ListShow" @click="cancel">{{ cancelButtonText }}</el-button>
        <el-button type="primary" @click="ok" :disabled="disabled">{{ okButtonText }}</el-button>
      </template>
    </div>
  </el-dialog>
</template>
<script>
export default {
  name: "ButtonDialog",
  /*通过父子组件传值可以通过父子组件传值*/
  props: {
    /*定义一个标题*/
    title: { type: String, required: false }, // 标题
    /*是否为全屏显示*/
    fullscreen: { type: Boolean, default: false, required: false }, // 是否为全屏显示
    /*是否可以通过model关闭*/
    closeOnClickModal: { type: Boolean, default: true, required: false }, // 见 element ui 参数
    /*确定按钮显示文字*/
    okButtonText: { type: String, default: "确 定", required: false }, // 确定按钮显示文字
    /*取消按钮显示文字*/
    cancelButtonText: { type: String, default: "取 消", required: false }, // 取消按钮显示文字
    /*显示按钮显示文字*/
    buttonList: { type: Array, required: false }, // 显示按钮列表;如果设置了该参数,默认的按钮会被覆盖
    /*设置宽度*/
    width: { type: String, required: false, default: "50%" }, // 宽度
    /*关闭时候销毁dialog里的元素*/
    destroyOnClose: { type: Boolean, default: false, required: false }, // 见 element ui 参数
    /*控制按钮禁用*/
    disabled:{type:Boolean},
    /*控制是否有关闭按钮*/
    ShowClose:{type:Boolean,default:false},
    /*按钮是否禁用*/
    ListShow:{type:Boolean,default:true}
  },
  data() {
    return {
      visible: false,
    };
  },
  methods: {
    /*控制dialog的显示*/
    show() {
      this.visible = true;
    },
    /*控制dialog的关闭*/
    close() {
      this.visible = false;
      this.$emit("close");
    },
    /*控制dialog的调用父组件的方法*/
    ok() {
      this.$emit("ok");
    },
    /*控制组件调用父级的方法*/
    cancel() {
      this.$emit("cancel");
      this.close();
    }
  }
};
</script>

<style scoped></style>

父子组件传值

通过mode控制按钮禁用

<button-dialog :disabled="!mode" :ListShow="false" ref="dialog" width="600px" @ok="confirm">
    <h2 class="login-h1">请选择登录角色</h2>
    <div class="container" >
    <el-radio-group  v-model="mode">
      <div class="login-btn">
      <el-radio-button class="login-btn" label="0">营销端</el-radio-button>
      </div>
      <div class="login-btn">
      <el-radio-button class="login-btn" label="1">业务端</el-radio-button>
      </div>
    </el-radio-group>
    </div>
  </button-dialog>