Blame view

report-ui/src/components/SmModal.vue 5.02 KB
王涛 authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
<template>
    <!-- 过渡动画 -->
    <transition name="modal-fade">
        <!-- 关闭模态框事件 和 控制模态框是否显示 -->
        <div class="modal-backdrop" @click="$emit('closeModal')" v-show="show">
            <div class="modal" @click.stop>
                <div class="modal-body" id="modalDescription">
                    <!-- 状态提示文字的插槽 -->
                    <slot name="status">{{statusText}}</slot>
                    <slot name="body">
                    </slot>
                  <el-button class="icon-btn_style fr" @click="$emit('closeModal')">×</el-button>
                </div>
                <!-- 模态框内容文字 可有可无 -->
                <div class="modal-content" v-if="contentText">
                    <slot>this is Modal-content</slot>
                </div>
                <ul>
                    <!-- 模态框按钮 可选单个确定按钮 和 两个确定、取消按钮 -->
                    <!-- 单个确定按钮 -->
                    <li v-if="alert" :class="buttonBackground" @click.stop="$emit('button')">确定</li>
                    <!-- 确定和取消按钮 -->
                    <li v-else class="confirm">
                        <div>取消</div>
                        <div :class="buttonBackground" @click.stop="$emit('confirm')">{{sure}}</div>
                    </li>
                </ul>
            </div>
        </div>
    </transition>
</template>
<script>
export default {
    name: "modal",
    // 通过 props 传值
    props: {
        imgadress: String,
        title: String, //标题文字
        show: {
            //显示取消
            type: Boolean,
            default: false
        },
        statusText: String, //状态文字
        contentText: String, //描述文字
        IDList: Array, //ID 列表
        payMoney: Number,
        yuan: String,
        buttonBackground: String, //按钮背景色
        alert: String, //判断一个还是两个按钮
        sure: String //第二个按钮的提示文字
    },
    data() {
        return {
            closemodal: "close",
            // isModalVisible:false,
            // 确定和取消按钮的两种颜色
            // red: "redBackground",
            // blue: "blueBackground"
        };
    },
    components: {
    },
    methods: {
        // 关闭模态框事件
        close() {
            this.$emit("close");
        }
    }
};
</script>
<style lang="scss" scoped>
.modal-backdrop {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: rgba(0, 0, 0, 0.3);
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 12;
    .modal {
        width: 50%;
        padding-bottom:10px;
        top:50px;
        background-color: #fff;
        box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.3);
        overflow-x: auto;
        display: flex;
        flex-direction: column;
        // width: 11.8rem;
        position: relative;
        border-radius: 0.2rem;
        .img {
            width: 3.6rem;
            height: 3.6rem;
            margin: 0.8rem 4.1rem;
        }
        .modal-header {
            padding: 0.6rem 4.1rem;
            width: 3.6rem;
            height: 3.6rem;
            box-sizing: border-box;
            .img {
                width: 100%;
                height: 100%;
            }
            div {
                width: 100%;
                height: 100%;
                background: #000;
            }
        }
        .modal-body {
            width: 100%;
            padding:1.6rem;
            margin-bottom: 0.8rem;
            box-sizing: border-box;
            display: flex;
            justify-content: space-between;
            align-items: center;
            li {
                width: 2rem;
                height: 0.04rem;
                background: #eeeee5;
            }
        }
        .modal-content {
            width: 100%;
            // height: 0.6rem;
             max-height: 61vh;
            overflow: auto;
            margin-bottom: 0.8rem;
            text-align: center;
            color: #34304b;
            span {
                color: #32b8b9;
                i {
                    color: #4f4f4f;
                }
            }
        }
        ul {
            li {
                width: 100%;
                height: 1.52rem;
                line-height: 1.52rem;
                text-align: center;
                color: #fff;
                font-size: 0.56rem;
                letter-spacing: 0.4rem;
            }
            .confirm {
                display: flex;
                div:nth-child(1) {
                    flex: 1;
                    background: #dedede;
                    color: #bcbbbf;
                }
                div:nth-child(2) {
                    flex: 1;
                    color: #fff;
                }
            }
        }
    }
}
/* 动画 */
.modal-fade-enter,
.modal-fade-leave-active {
    opacity: 0;
}
.modal-fade-enter-active,
.modal-fade-leave-active {
    transition: opacity 0.5s ease;
}
</style>