You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
4.8 KiB
Vue
210 lines
4.8 KiB
Vue
<template>
|
|
<el-dialog
|
|
:width="dialogWidth"
|
|
:class="dialogFullScreen ? 'full-screen' : 'notfull-screen'"
|
|
center
|
|
:fullscreen="dialogFullScreen"
|
|
:visible.sync="dialogConfig.dialogVisible"
|
|
:before-close="handleDialogClose"
|
|
append-to-body
|
|
modal-append-to-body
|
|
>
|
|
<template v-slot:title>
|
|
{{ getDialogTitle(dialogConfig.dialogType) }}
|
|
<button
|
|
v-if="dialogConfig.isFullScreen"
|
|
type="button"
|
|
aria-label="Close"
|
|
class="el-dialog__headerbtn"
|
|
style="right: 50px"
|
|
@click="dialogFullScreen = !dialogFullScreen"
|
|
>
|
|
<i class="el-dialog__close el-icon el-icon-full-screen" />
|
|
</button>
|
|
</template>
|
|
<div class="card-body">
|
|
<div class="anji-card">
|
|
<div v-if="dialogConfig.isSetColRow" class="card-head">
|
|
<div class="main-card-header-button">
|
|
<el-button type="text" @click="handleSetRowColNum(4)"
|
|
>||||</el-button
|
|
>
|
|
<el-button type="text" @click="handleSetRowColNum(3)"
|
|
>|||</el-button
|
|
>
|
|
<el-button type="text" @click="handleSetRowColNum(2)">||</el-button>
|
|
</div>
|
|
</div>
|
|
<slot name="dialogCont" />
|
|
<slot />
|
|
</div>
|
|
</div>
|
|
<div slot="footer" class="anji-button">
|
|
<el-button
|
|
v-if="isBtnClose"
|
|
type="danger"
|
|
plain
|
|
@click="handleDialogClose"
|
|
>{{ dialogConfig.isBtnClose.text || $lang("btn_close") }}</el-button
|
|
>
|
|
<el-button
|
|
v-if="isBtnSave"
|
|
type="primary"
|
|
plain
|
|
@click="handleDialogSave"
|
|
>{{ dialogConfig.isBtnSave.text || $lang("btn_save") }}</el-button
|
|
>
|
|
<slot name="dialogBtn" />
|
|
</div>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
props: {
|
|
// 弹框配置文件
|
|
dialogConfig: {
|
|
required: true,
|
|
type: Object,
|
|
default: () => {
|
|
return {
|
|
dialogVisible: false,
|
|
dialogType: "add",
|
|
dialogWidth: "60%",
|
|
isFullScreen: true,
|
|
isSetColRow: true,
|
|
isBtnClose: {
|
|
value: true,
|
|
text: this.$lang("btn_close")
|
|
},
|
|
isBtnSave: {
|
|
value: true,
|
|
text: this.$lang("btn_save")
|
|
},
|
|
column: 2,
|
|
setColumnFn: () => {}
|
|
};
|
|
}
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
dialogFullScreen: false // 弹出框全屏
|
|
};
|
|
},
|
|
computed: {
|
|
dialogWidth() {
|
|
if (this.dialogConfig.dialogWidth) {
|
|
return this.dialogConfig.dialogWidth;
|
|
} else {
|
|
if (this.dialogConfig.column == 2) {
|
|
return "60%";
|
|
}
|
|
if (this.dialogConfig.column == 3) {
|
|
return "70%";
|
|
}
|
|
if (this.dialogConfig.column == 4) {
|
|
return "80%";
|
|
}
|
|
}
|
|
return "60%";
|
|
},
|
|
isBtnClose() {
|
|
return this.dialogConfig.isBtnClose || this.dialogConfig.isBtnClose.value;
|
|
},
|
|
isBtnSave() {
|
|
return this.dialogConfig.isBtnSave || this.dialogConfig.isBtnSave.value;
|
|
}
|
|
},
|
|
methods: {
|
|
getDialogTitle(type) {
|
|
let title = this.$lang("btn_add");
|
|
switch (type) {
|
|
case "add":
|
|
title = this.$lang("btn_add");
|
|
break;
|
|
case "edit":
|
|
title = this.$lang("btn_edit");
|
|
break;
|
|
case "view":
|
|
title = this.$lang("btn_view");
|
|
break;
|
|
default:
|
|
title = type;
|
|
break;
|
|
}
|
|
return title;
|
|
},
|
|
handleSetRowColNum(val) {
|
|
const cardRowColSpan = 24 / val;
|
|
this.dialogConfig.setColumnFn(cardRowColSpan);
|
|
},
|
|
handleDialogClose() {
|
|
this.$emit("handleClose");
|
|
},
|
|
handleDialogSave() {
|
|
this.$emit("handleDialogSave");
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.notfull-screen {
|
|
/deep/.el-dialog__body {
|
|
background-color: rgb(240, 242, 245);
|
|
padding: 5px;
|
|
max-height: 60vh;
|
|
overflow: auto;
|
|
}
|
|
}
|
|
.full-screen {
|
|
/deep/.el-dialog__body {
|
|
background-color: rgb(240, 242, 245);
|
|
padding: 5px;
|
|
height: calc(100vh - 110px);
|
|
overflow: auto;
|
|
}
|
|
}
|
|
.anji-card {
|
|
margin-bottom: 5px;
|
|
box-sizing: border-box;
|
|
padding: 0 20px;
|
|
color: rgba(0, 0, 0, 0.65);
|
|
font-size: 14px;
|
|
font-letiant: tabular-nums;
|
|
line-height: 1.5;
|
|
list-style: none;
|
|
font-feature-settings: "tnum";
|
|
position: relative;
|
|
background: #fff;
|
|
border-radius: 2px;
|
|
transition: all 0.3s;
|
|
}
|
|
.drawerContainer {
|
|
width: 100%;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
.drawerMain {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
padding: 0 20px;
|
|
}
|
|
.footer {
|
|
border-top: 1px solid #eff0f3;
|
|
height: 66px;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
}
|
|
.addForm {
|
|
text-align: center;
|
|
}
|
|
.activeColor /deep/.el-form-item__label {
|
|
color: #5887fb;
|
|
}
|
|
</style>
|