08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / project / hivuiMain / views / layout / components / tabpanel / panel.vue
<template>
    <div class="pl-tabs-panel" :title="title" v-show="active">
        <div class="pl-loading pl-loading-fixed" v-show="url && !loaded" ref="dom-loader">
            <span></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>

        <iframe v-if="url" :src="url" @load="handleIframeLoad" :name="'iframe' + name" ref="iframe" />
        <slot v-else></slot>
    </div>
</template>

<script>
export default {
    name: 'PTabpanel',
    props: {
        close: [String, Number, Boolean],
        itemData: Object,
        title: {
            type: String,
            default: ''
        },
        name: {
            type: [String, Number],
            default: ''
        },
        url: {
            type: String,
            default: ''
        },
        index: [String, Number]
    },
    data() {
        return {
            loaded: false
        }
    },
    computed: {
        active() {
            return this.$parent.currentName === this.name
        }
    },
    watch: {
        // 监听url变更:切换地址,重置加载状态
        url(newVal) {
            if (newVal) {
                this.loaded = false
            }
        },
        // 切换tab隐藏时重置状态
        active(val) {
            if (!val && this.url) {
                this.loaded = false
            }
        }
    },
    updated() {
        this.$parent.$emit('tab-nav-update')
    },
    methods: {
        handleIframeLoad(evt) {
            this.loaded = true
            this.$emit('onIframeLoad', this, evt)
        }
    }
}
</script>