mirror of
https://gitee.com/ssssssss-team/magic-boot.git
synced 2025-04-02 19:32:38 +08:00
122 lines
2.4 KiB
Vue
122 lines
2.4 KiB
Vue
<template>
|
|
<el-dialog
|
|
v-model="dialogVisible"
|
|
:custom-class="customClass"
|
|
:fullscreen="fullscreen"
|
|
:width="width"
|
|
:title="title"
|
|
:close-on-click-modal="false"
|
|
:destroy-on-close="destroyOnClose"
|
|
:append-to-body="true"
|
|
draggable
|
|
@open="$emit('open')"
|
|
@close="$emit('close')"
|
|
>
|
|
<slot name="content" />
|
|
<template #footer>
|
|
<div slot="footer" class="dialog-footer">
|
|
<slot name="btns">
|
|
<el-button @click="hide">
|
|
关闭
|
|
</el-button>
|
|
<el-button type="primary" :loading="confirmLoading" @click="confirmClick">
|
|
确认
|
|
</el-button>
|
|
</slot>
|
|
</div>
|
|
</template>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
emits: ['confirm-click', 'open', 'close'],
|
|
props: {
|
|
title: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
width: {
|
|
type: String,
|
|
default: '50%'
|
|
},
|
|
fullscreen: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
destroyOnClose: {
|
|
type: Boolean,
|
|
default: true
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
dialogVisible: false,
|
|
confirmLoading: false,
|
|
customClass: 'mbDialog' + this.$common.uuid()
|
|
}
|
|
},
|
|
watch: {
|
|
dialogVisible(value) {
|
|
if(value){
|
|
this.addStyle()
|
|
}else{
|
|
this.removeStyle()
|
|
}
|
|
}
|
|
},
|
|
created() {
|
|
this.addStyle()
|
|
},
|
|
methods: {
|
|
confirmClick() {
|
|
this.$emit('confirm-click', this)
|
|
},
|
|
loading(){
|
|
this.confirmLoading = true
|
|
},
|
|
hideLoading(){
|
|
this.confirmLoading = false
|
|
},
|
|
show() {
|
|
this.dialogVisible = true
|
|
},
|
|
hide() {
|
|
this.dialogVisible = false
|
|
},
|
|
addStyle(){
|
|
var componentStyle = document.createElement("style");
|
|
var cc = this.customClass
|
|
if (this.fullscreen) {
|
|
componentStyle.innerHTML = `
|
|
.${cc}{
|
|
margin-top: 0vh;
|
|
margin-bottom: 0vh;
|
|
}
|
|
.${cc} .el-dialog__body{
|
|
max-height: 100vh;
|
|
}
|
|
`
|
|
} else {
|
|
componentStyle.innerHTML = `
|
|
.${cc}{
|
|
margin-top: 10vh;
|
|
margin-bottom: 10vh;
|
|
}
|
|
.${cc} .el-dialog__body{
|
|
max-height: 60vh;
|
|
overflow: auto;
|
|
}
|
|
`
|
|
}
|
|
componentStyle.id = cc
|
|
document.head.appendChild(componentStyle);
|
|
},
|
|
removeStyle(){
|
|
document.getElementById(this.customClass) && document.getElementById(this.customClass).remove()
|
|
}
|
|
}
|
|
}
|
|
|
|
</script>
|