08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / project / hivuiMain / App.vue
caibinghong on 4 Jun 2021 add
<template>
    <div class="app">
        <transition>
            <router-view v-if="$store.state.appStatus=='success'" />
        </transition>
        <transition>

            <div
                v-if="$store.state.appStatus!='success'"
                class="loader"
            >
                <div class="pl-logo-lg fadeInUp animated">
                    <img
                        src="@main/assets/logo_max.png"
                        v-if="logoSrc==''"
                    >
                    <img
                        :src="logoSrc"
                        v-if="logoSrc!=''"
                    >
                </div>
                <span class="txt">
                    <span v-for="str in loadTexts">{{str}}</span>
                    <span v-if="$store.state.appStatus=='loading'">{{$lang('sysLoading')||'系统加载中...'}}</span>
                    <span
                        v-if="$store.state.appStatus!='loading'"
                        style="color:red"
                        @click="handleReload"
                    >{{$lang('loadedFailClickRefresh')||'加载失败,点我重试!'}}</span>
                </span>
            </div>
        </transition>
    </div>
</template>
<script>
export default {
    data() {
        let cfg = this.$store.state.app.config || {};
        let loadText =
            (cfg.sysLoadLogo && cfg.sysLoadLogo.title) || "";
        let logoSrc = (cfg.sysLoadLogo && cfg.sysLoadLogo.src) || "";
        return {
            loadTexts: loadText.split(""),
            logoSrc: logoSrc
        };
    },
    methods: {
        handleReload() {
            window.location.reload();
        },        
        detectZoom (){
            var ratio = 0,
                screen = window.screen,
                ua = navigator.userAgent.toLowerCase();
            if (window.devicePixelRatio !== undefined) {
                ratio = window.devicePixelRatio;
            }
            else if (~ua.indexOf('msie')) {
                if (screen.deviceXDPI && screen.logicalXDPI) {
                ratio = screen.deviceXDPI / screen.logicalXDPI;
                }
            }
            else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
                ratio = window.outerWidth / window.innerWidth;
            }
            if (ratio){
                ratio = Math.round(ratio * 100);
            }
            return ratio;
        },
        checkZoom(){
            let ratio = this.detectZoom();
            if(ratio!=100){
                // this.$message.error('警告,浏览器没有按正常比例显示会影响部份功能!')
            }
        }
    },
    mounted() {
        // this.checkZoom();
        // window.addEventListener('resize',()=>{
        //     this.checkZoom();
        // });
    }
};
</script>
<style scoped>
.app {
    height: 100%;
    background: linear-gradient(
        rgb(255, 255, 255) 0px,
        rgb(243, 248, 253) 50%,
        rgb(229, 240, 250)
    );
}
.animated {
    -webkit-animation-duration: 1s;
    animation-duration: 1s;
    -webkit-animation-fill-mode: both;
    animation-fill-mode: both;
}

@-webkit-keyframes fadeInUp {
    0% {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }

    to {
        opacity: 1;
        -webkit-transform: translateZ(0);
        transform: translateZ(0);
    }
}

@keyframes fadeInUp {
    0% {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }

    to {
        opacity: 1;
        -webkit-transform: translateZ(0);
        transform: translateZ(0);
    }
}

.fadeInUp {
    -webkit-animation-name: fadeInUp;
    animation-name: fadeInUp;
}
@-webkit-keyframes fadeInDown {
    0% {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }

    to {
        opacity: 1;
        -webkit-transform: translateZ(0);
        transform: translateZ(0);
    }
}

@keyframes fadeInDown {
    0% {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }

    to {
        opacity: 1;
        -webkit-transform: translateZ(0);
        transform: translateZ(0);
    }
}

.fadeInDown {
    -webkit-animation-name: fadeInDown;
    animation-name: fadeInDown;
}

.loader {
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -50px;
    -webkit-transform: translate(-50%, -50%);
    -moz-transform: translate(-50%, -50%);
    -mos-transform: translate(-50%, -50%);
    -o-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    text-align: center;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    cursor: default;
}
.loader .txt {
    display: inline-block;
    word-break: normal;
    white-space: nowrap;
    margin: auto;
    text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9,
        0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1),
        0 1px 3px rgba(0, 0, 0, 0.1), 0 3px 5px rgba(0, 0, 0, 0.1),
        0 5px 10px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.1),
        0 20px 20px rgba(0, 0, 0, 0.15);
}
.loader .txt span {
    display: inline-block;
    font-size: 68px !important;
    padding: 0 5px;
    -webkit-animation: text cubic-bezier(0.75, 0, 0.5, 1) 1.2s infinite;
    -moz-animation: text cubic-bezier(0.75, 0, 0.5, 1) 1.2s infinite;
    -moz-animation: text cubic-bezier(0.75, 0, 0.5, 1) 1.2s infinite;
    -ms-animation: text cubic-bezier(0.75, 0, 0.5, 1) 1.2s infinite;
    -o-animation: text cubic-bezier(0.75, 0, 0.5, 1) 1.2s infinite;
    animation: text cubic-bezier(0.75, 0, 0.5, 1) 1.2s infinite;
    color: #0066cc;
}
.loader .txt span:nth-child(1) {
    -webkit-animation-delay: 0ms;
    -moz-animation-delay: 0ms;
    -ms-animation-delay: 0ms;
    -o-animation-delay: 0ms;
    animation-delay: 0ms;
}
.loader .txt span:nth-child(2) {
    -webkit-animation-delay: 100ms;
    -moz-animation-delay: 100ms;
    -ms-animation-delay: 100ms;
    -o-animation-delay: 100ms;
    animation-delay: 100ms;
}
.loader .txt span:nth-child(3) {
    -webkit-animation-delay: 200ms;
    -moz-animation-delay: 200ms;
    -ms-animation-delay: 200ms;
    -o-animation-delay: 200ms;
    animation-delay: 200ms;
}
.loader .txt span:nth-child(4) {
    -webkit-animation-delay: 300ms;
    -moz-animation-delay: 300ms;
    -ms-animation-delay: 300ms;
    -o-animation-delay: 300ms;
    animation-delay: 300ms;
}
.loader .txt span:nth-child(5) {
    -webkit-animation-delay: 400ms;
    -moz-animation-delay: 400ms;
    -ms-animation-delay: 400ms;
    -o-animation-delay: 400ms;
    animation-delay: 400ms;
}
.loader .txt span:nth-child(6) {
    -webkit-animation-delay: 500ms;
    -moz-animation-delay: 500ms;
    -ms-animation-delay: 500ms;
    -o-animation-delay: 500ms;
    animation-delay: 500ms;
}
.loader .txt span:nth-child(7) {
    -webkit-animation-delay: 600ms;
    -moz-animation-delay: 600ms;
    -ms-animation-delay: 600ms;
    -o-animation-delay: 600ms;
    animation-delay: 600ms;
}
.loader .txt span:nth-child(8) {
    -webkit-animation-delay: 700ms;
    -moz-animation-delay: 700ms;
    -ms-animation-delay: 700ms;
    -o-animation-delay: 700ms;
    animation-delay: 700ms;
}
.loader .txt span:nth-child(9) {
    -webkit-animation-delay: 800ms;
    -moz-animation-delay: 800ms;
    -ms-animation-delay: 800ms;
    -o-animation-delay: 800ms;
    animation-delay: 800ms;
}
.loader .txt span:nth-child(10) {
    -webkit-animation-delay: 900ms;
    -moz-animation-delay: 900ms;
    -ms-animation-delay: 900ms;
    -o-animation-delay: 900ms;
    animation-delay: 900ms;
}
.loader .txt span:last-child {
    display: block;
    padding-top: 15px;
    font-size: 16px !important;
    text-shadow: none;
    color: #0272bd;
    text-shadow: none;
    animation: none;
    -webkit-animation: none;
}
@-webkit-keyframes text {
    0% {
        color: #0066cc;
    }
    40% {
        color: #fff;
    }
    70%,
    100% {
        color: #0066cc;
    }
}
@-moz-keyframes text {
    0% {
        color: #0066cc;
    }
    40% {
        color: #fff;
    }
    70%,
    100% {
        color: #0066cc;
    }
}
@-mos-keyframes text {
    0% {
        color: #0066cc;
    }
    40% {
        color: #fff;
    }
    70%,
    100% {
        color: #0066cc;
    }
}
@-o-keyframes text {
    0% {
        color: #0066cc;
    }
    40% {
        color: #fff;
    }
    70%,
    100% {
        color: #0066cc;
    }
}
@keyframes text {
    0% {
        color: #0066cc;
    }
    40% {
        color: #fff;
    }
    70%,
    100% {
        color: #0066cc;
    }
}
</style>