<template>
<el-dialog
:custom-class="customClass"
:title="dialogVue.title + dialogVue.titleInfo"
:visible.sync="dialogVue.visible"
:width="sizeConfig.w"
:height="sizeConfig.h"
:modal-append-to-body="false"
:append-to-body="dialogVue.appendToBody"
:close-on-click-modal="false"
:dragDialog="true"
footer-border
:fullscreen="dialogVue.isFullScreen"
@opened="dialogVue.beforeOpenedDialog()"
@close="dialogVue.cancelDialogShow()"
@closed="dialogVue.closed()"
:before-close="dialogVue.beforeClose()">
<scroll :parent="dialogVue">
<div v-if="$slots.comment" class="dialog__comment">
<el-alert type="info" :closable="false" show-icon>
<template slot="title">
<slot name="comment"></slot>
</template>
</el-alert>
</div>
<el-form :model="dialogVue.modalData" :label-width="dialogVue.labelWidth" ref="modalDataForm" class="el-form">
<slot></slot>
</el-form>
<slot name="custom"></slot>
<scroll>
<template v-if="dialogVue.hasFooterSlot">
<div slot="footer">
<slot name="footer">
<el-button type="primary" @click="dialogVue.handleConfirmSet()">确定</el-button>
<el-button type="info" @click="dialogVue.cancelDialogShow()">取消</el-button>
</slot>
</div>
</template>
</el-dialog>
</template>
<script>
const SIZE_ENUM = {
small: {
w: '560px',
h: '380px'
},
medium: {
w: '560px',
h: '560px'
},
medium: {
w: '560px',
h: '680px'
},
custom: {
w: '560px',
h: '680px'
}
}
const scroll = {
render(h) {
if (this.parent.hasScrollbar) {
return h('el-scrollbar', {
props: {
scrollbarClass: 'scrollbar--specific'
}
}, this.$slots.default);
} else {
return h('div', {
props: {
class: 'el-dialog__body--noscroll'
}
}, this.$slots.default);
}
},
props: {
parent: {
type: Object
}
}
}
export default {
components: {
scroll
},
props: {
// 指定父组件的this
parent: {
type: Object
}
},
data() {
return {
dialogVue: this.parent || this.$parent,
sizeConfig: {}
}
},
computed: {
customClass() {
let custom = this.dialogVue['custom-class'];
if (!this.dialogVue.hasFooterSlot) {
custom += ' no-footer-slot'
}
if (!this.dialogVue.hasTablePadding) {
custom += ' has-table-padding'
}
return custom;
}
},
created() {
this.sizeConfig = this.diaglog.size == 'custom' ? this.dialogVue.sizeCustom : SIZE_ENUM[this.dialogVue.size];
},
methods: {
// 验证
validate(callback) {
this.$refs.modalDataForm &&
this.$refs.modalDataForm.validate((valid) => {
callback(valid);
});
},
// 重置
resetFields() {
this.$refs.modalDataForm && this.$refs.modalDataForm.resetFields();
},
clearValidate(props) {
this.$refs.modalDataForm && this.$refs.modalDataForm.clearValidate(props);
}
}
}
</script>