showModal.vue 4.15 KB
<template>
    <div class="show-modal" v-if="isShow && options">
        <div class="layer-box" :class="defaultOptions.classType || ''" @click="hideLayer" @touchmove.stop.prevent>
            <div class="box" @click.stop.prevent>
                <div class="title" v-if="defaultOptions.title">{{defaultOptions.title}}</div>
                <slot name="htmlMessage"></slot>
                <div class="message" v-if="defaultOptions.message">
                    <div class="message-content" v-html="defaultOptions.message"></div>
                </div>
                <div class="buttons-box">
                    <div class="btn btn-cancel" v-if="defaultOptions.showCancelButton" @click="cancel(defaultOptions.params || defaultOptions)">{{defaultOptions.cancelButtonText}}</div>
                    <div class="btn btn-confirm" v-if="defaultOptions.showConfirmButton" @click="confirm(defaultOptions.params || defaultOptions)">{{defaultOptions.confirmButtonText}}</div>
                </div>
            </div>
            <div class="bottomClose" v-if="defaultOptions.bottomClose" @click="hideLayer">
                <img src="static/img/icon_layer_bottom_close.png" class="close-img" />
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        data: function () {
            return {
                isShow: false,
                defaultOptions: null		// 默认参数
            }
        },
        props: ["options"],
        methods: {

            /**
             * 显示提示用户升级层
             */
            showLayer() {

                // 设置浮层显示
                this.$set(this, "isShow", true);
            },

            /**
             * 隐藏提示用户升级层
             */
            hideLayer() {

                // 设置浮层隐藏
                this.$set(this, "isShow", false);
            },

            /**
             * 初始化showModal默认参数
             */
            initDefaultOptions() {

                // 初始化默认参数
                this.$set(this, "defaultOptions", {
                    title: "",
                    message: "",
                    classType: "",
                    showConfirmButton: true,
                    confirmButtonText: "确定",
                    confirmButtonClass: "",
                    confirmButtonCallback: null,
                    showCancelButton: false,
                    cancelButtonText: "",
                    cancelButtonClass: "",
                    cancelButtonCallback: null,
                    bottomClose: false,
                    closeOnClickModal: true
                });
            },

            /**
             * 点击"确定"回调
             * @param {object} options [回调参数]
             */
            confirm(options) {

                // 隐藏层
                this.hideLayer();

                if (typeof this.options === "object" && typeof this.options.confirmButtonCallback === "function") {
                    this.options.confirmButtonCallback(options);
                }
            },

            /**
             * 点击"取消"回调
             * @param {object} options [回调参数]
             */
            cancel(options) {

                // 隐藏层
                this.hideLayer();

                if (typeof this.options === "object" && typeof this.options.cancelButtonCallback === "function") {
                    this.options.cancelButtonCallback(options);
                }
            }
        },
        watch: {

            /**
             * 监听选项变化
             */
            options(newVal, oldVal) {

                // this.$nextTick(function() {
                if (newVal !== null && typeof newVal === "object") {

                    // 初始化showModal默认参数
                    this.initDefaultOptions();

                    // 合并提示框配置选项
                    Object.assign(this.defaultOptions, newVal);
                }
                // });
            }
        }
    }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style rel="stylesheet/less" lang="less">
    @import './show_modal';
</style>