164 lines
2.9 KiB
Vue
164 lines
2.9 KiB
Vue
<template>
|
|
<section class="ai-dialog__wrapper">
|
|
<el-dialog
|
|
custom-class="ai-dialog"
|
|
v-on="$listeners"
|
|
v-if="isEmpty"
|
|
:close-on-click-modal="closeOnClickModal"
|
|
v-bind="$attrs"
|
|
:destroy-on-close="destroyOnClose"
|
|
:visible.sync="dialogVisible">
|
|
<div class="ai-dialog__header" slot="title">
|
|
<h2>{{ title }}</h2>
|
|
</div>
|
|
<div class="ai-dialog__content" :style="{'max-height': isScrool ? '500px' : 'auto'}">
|
|
<div class="ai-dialog__content--wrapper" :style="{'padding-right': isScrool ? '8px' : '0'}">
|
|
<slot></slot>
|
|
</div>
|
|
</div>
|
|
<template v-if="customFooter" slot="footer">
|
|
<slot name="footer"></slot>
|
|
</template>
|
|
<div v-else class="dialog-footer" slot="footer">
|
|
<el-button @click="onCancel">取消</el-button>
|
|
<el-button @click="onConfirm" type="primary" style="width: 92px;">确认</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
</section>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'AiDialog',
|
|
props: {
|
|
visible: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
title: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
customFooter: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
'close-on-click-modal': {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
destroyOnClose: {
|
|
type: Boolean,
|
|
default: true
|
|
}
|
|
},
|
|
|
|
data () {
|
|
return {
|
|
dialogVisible: false,
|
|
isScrool: true,
|
|
isEmpty: true
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
visible: {
|
|
handler (val) {
|
|
this.dialogVisible = val
|
|
|
|
// if (val) {
|
|
// this.$nextTick(() => {
|
|
// setTimeout(() => {
|
|
// this.isScrool = document.querySelector('.ai-dialog__content') && document.querySelector('.ai-dialog__content').clientHeight >= 500
|
|
// }, 100)
|
|
// })
|
|
// }
|
|
|
|
if (this.destroyOnClose && !val) {
|
|
setTimeout(() => {
|
|
this.isEmpty = false
|
|
|
|
setTimeout(() => {
|
|
this.isEmpty = true
|
|
}, 50)
|
|
}, 500)
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
mounted () {
|
|
},
|
|
|
|
methods: {
|
|
onCancel () {
|
|
this.$emit('update:visible', false)
|
|
this.$emit('onCancel')
|
|
},
|
|
|
|
onConfirm () {
|
|
this.$emit('onConfirm')
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
<style lang="scss">
|
|
.ai-dialog {
|
|
margin: 0!important;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
|
|
.el-dialog__body {
|
|
padding: 20px 40px 20px;
|
|
}
|
|
|
|
.ai-dialog__content {
|
|
overflow-y: auto;
|
|
padding-bottom: 4px;
|
|
|
|
.ai-dialog__content--wrapper {
|
|
height: 100%;
|
|
overflow-x: hidden;
|
|
overflow-y: overlay;
|
|
}
|
|
}
|
|
|
|
.ai-dialog__header {
|
|
height: 48px;
|
|
line-height: 48px;
|
|
padding: 0 16px;
|
|
border-bottom: 1px solid #eee;
|
|
|
|
h2 {
|
|
font-size: 16px;
|
|
font-weight: 700;
|
|
}
|
|
}
|
|
|
|
.el-dialog__footer {
|
|
padding: 16px 20px;
|
|
box-sizing: border-box;
|
|
background: #F3F6F9;
|
|
text-align: center;
|
|
|
|
& + .el-button {
|
|
margin-left: 8px;
|
|
}
|
|
|
|
.el-button {
|
|
width: 92px!important;
|
|
}
|
|
}
|
|
|
|
.el-dialog__header {
|
|
padding: 0;
|
|
}
|
|
|
|
.el-dialog__headerbtn {
|
|
top: 24px;
|
|
transform: translateY(-50%);
|
|
}
|
|
}
|
|
</style>
|