index.vue 3.22 KB
<template>
  <el-dialog :visible.sync="dialogVisible" v-if="dialogVisible" :width="width" :fullscreen="fullscreen" top="0"
    :append-to-body="appendToBody" :lock-scroll="true" :close-on-click-modal="false" @close="closeDialog" :key="key"
    :custom-class="isMain ? 'mainCenter dialogBox' : 'contentCenter dialogBox'" :destroy-on-close="true" ref="dialogBox"
    id="dialogBox">
    <div slot="title">
      <div class="dialog_title">
        <b>{{ title }}</b>
        <div v-if="isFullscreen" class="dialog_full">
          <i class="el-icon-rank" v-if="fullscreen" @click="handleFullscreen"></i>
          <i class="el-icon-full-screen" v-else @click="handleFullscreen" />
        </div>
      </div>
    </div>
    <div class="dialogBox-content" :style="{ height: scrollerHeight }">
      <slot></slot>
    </div>
    <div slot="footer" class="dialog_footer" v-if="isButton">
      <btn nativeType="cz" @click="closeDialog" v-if="isReset">取消</btn>
      <btn nativeType="cx" type="primary" plain @click="submitForm" v-if="isSave" :disabled="btnDisabled"
        :loading="saveloding">
        {{ saveButton }}</btn>
    </div>
  </el-dialog>
</template>
<script>
export default {
  props: {
    value: { type: Boolean, default: false },
    isMain: {
      type: Boolean,
      default: false
    },
    appendToBody: {
      type: Boolean,
      default: true
    },
    isButton: {
      type: Boolean,
      default: true,
    },
    width: {
      type: String,
      default: '70%',
    },
    title: {
      type: String,
      default: '',
    },
    isFullscreen: {
      type: Boolean,
      default: false,
    },
    isSave: {
      type: Boolean,
      default: true,
    },
    saveButton: {
      type: String,
      default: '提交',
    },
    isReset: {
      type: Boolean,
      default: true,
    },
    saveloding: {
      type: Boolean,
      default: false,
    },
    btnDisabled: {
      type: Boolean,
      default: false
    },
    height: {
      type: String,
      default: ''
    }
  },
  data () {
    return {
      key: 0,
      dialogVisible: false,
      fullscreen: false,
      scrollerHeight: ''
    }
  },
  watch: {
    value (val) {
      this.dialogVisible = val
      this.height && (this.scrollerHeight = this.height + 'px')
    }
  },
  methods: {
    /**
     * @description: handleFullscreen
     * @author: renchao
     */
    handleFullscreen () {
      this.fullscreen = !this.fullscreen
      if (!this.fullscreen) {
        this.scrollerHeight = ''
      } else {
        this.scrollerHeight = (window.innerHeight - 120) + 'px'
      }
    },
    /**
     * @description: submitForm
     * @author: renchao
     */
    submitForm () {
      if (this.isButton) {
        this.$emit('submitForm');
      }
    },
    /**
     * @description: closeDialog
     * @author: renchao
     */
    closeDialog () {
      this.key++
      this.$emit('input', false)
      this.$emit('closeDialog')
    }
  },
}
</script>
<style rel="stylesheet/scss" lang="scss" >
// @import "~@/styles/mixin.scss";
// @import "~@/styles/dialogBox.scss";
</style>
<style rel="stylesheet/scss" scoped lang="scss" >
/deep/.is-fullscreen {
  position: absolute;
  top: 50% !important;
  left: 50% !important;
  transform: translate(-50%, -50%) !important;
}
</style>