08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / project / hivuiMain / App.vue
<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="logoSrc" v-if="logoSrc != ''">
                </div>
                <span class="txt">
                    <span v-for="(str, index) in loadTexts" :key="index">{{ str }}</span>
                    <span class="msgInfo" v-if="$store.state.appStatus == 'loading'">{{ $t('hivuiMain_sysLoading')
                    }}</span>
                    <span class="msgInfo" v-if="$store.state.appStatus != 'loading' && !mainPageInitErrorJump"
                        style="color:red" @click="handleReload">{{ $store.state.appStatusMsg ||
                            $t('hivuiMain_loadedFailClickRefresh') }}</span>
                </span>
            </div>
        </transition>
    </div>
</template>
<script>
import Cookies from 'js-cookie'
import LoginPic from "@main/assets/logo_max.png"
import { getUrlValue, setUrlValue, getUrlSearch } from "@main/utils";
import { getToken } from '@main/utils/auth'
import md5 from "js-md5";
import WebScoketManager from '@main/utils/websocket.js'
export default {
    data() {
        return {
            loadTexts: "",
            logoSrc: "",
            mainPageInitErrorJump: window.mainPageInitErrorJump,
            loginStatusWS: null
        };
    },
    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('警告,浏览器没有按正常比例显示会影响部份功能!')
            }
        },

        createSocket() {
            let me = this;
            if ("WebSocket" in window) {
                try {
                    // 构造 WebSocket 路径
                    let socketHost = window.HIVUI_SETTING?.serverUrl.replace("http", "ws");
                    let pName =  window.HIVUI_SETTING?.projectName;
                    let wsClientId = md5(getToken() || '');
                    // let socketHost = "https://e52.hieap.cn".replace('http', 'ws')
                    // let pName = 'fdszh';
                    // let wsClientId = md5('eyJhbGciOiJIUzUxMiJ9.eyJ1aWQiOiJhZG1pbiIsImV4cGlyZXMiOjE3Njc5NjgxNzYxNjMsInBob25lIjoiMTg4ODg4MDA4ODgiLCJuYW1lIjoi566h55CG5ZGYIiwidGVybSI6InBjIiwidG9rZW4iOiI1NDQ2ODJmZC03MTIxLTRmMzAtODkzNC1jN2UyNDk1OTRkNTcifQ.1UJbTnGmfTHmCEdlMqHz3QJ9weRrYGUAMYQGfO-j-_5KLKKNKwWSC-FXl-5Pq0xQXrPCr7EkCT12u4zwOwR_Kg')
                    let url = socketHost + "/" + pName + "/ws/p2p/" + wsClientId;

                    // 创建 WebSocket 实例
                    me.loginStatusWS = new WebScoketManager({
                        link: url,
                        //"reConnect":true,
                    });
                    // 初始化 WebSocket 事件
                    me.initWSEvent();

                } catch (error) {
                    console.error("WebSocket 初始化失败:", error);
                    reject(new Error("WebSocket 初始化失败: " + error.message));
                }
            } else {
                // 浏览器不支持 WebSocket
                alert("您的浏览器不支持 WebSocket!");
                reject(new Error("浏览器不支持 WebSocket"));
            }
        },
        //初始化WS事件
        initWSEvent() {
            let me = this;
            let _ws = me.loginStatusWS;
            if (!_ws) {
                console.log("WebSocket 实例未初始化");
                return;
            }
            console.log('开始连接websocket');
            //建立连接
            _ws.on("onopen", () => {
                console.log('数据发送中...');
            });
            //连接失败
            _ws.on("onclose", () => {
                console.log('连接已关闭...');
            });
            //超时关闭
            _ws.on("overtime", () => {
                console.log('服务器连接超时');
            });
            _ws.on("reConnect", () => {
                console.log('重新连接websocket中');
            });
            _ws.on("endReConnect", () => {
                console.log('重新连接次数超出上限,终止连接');
            });
            //接受消息
            _ws.on("onmessage", (data) => {
                console.log('数据已接收: ' + data);
            });
        },
    },
    mounted() {
        // this.checkZoom();
        // window.addEventListener('resize',()=>{
        //     this.checkZoom();
        // });
        let me = this;
        // 设置任务中心刷新状态
        top.window.__setRefreshTaskcenter = function (state) {
            if (state == undefined) {
                state = true;
            }
            top.window.__refreshTaskcenter = state;
        }
        let urlPn = getUrlValue(location.search, "pn");
        if (urlPn) {
            if (!getUrlValue(window.HIVUI_SETTING.loginUrl, "pn")) {
                window.HIVUI_SETTING.loginUrl += "?pn=" + urlPn;
            }
            if (!getUrlValue(window.HIVUI_SETTING.mainPageUrl, "pn")) {
                window.HIVUI_SETTING.mainPageUrl += "?pn=" + urlPn;
            }
            if (!getUrlValue(window.HIVUI_SETTING.customLoginUrl, "pn")) {
                window.HIVUI_SETTING.customLoginUrl += "?pn=" + urlPn;
            }
        }
        //如果token不一致,替换掉然后重新载入
        let urlToken = getUrlValue(location.href, "access_token");
        let nowToken = getToken();
        if (false && !window._global && urlToken && nowToken && (urlToken != nowToken)) {//正式环境
            let newUrl = setUrlValue(decodeURIComponent(location.href), "access_token", nowToken);
            location = newUrl;
            location.reload();
        }
        //系统间跳转,将ticket去除
        if (!window._global && getUrlValue(decodeURIComponent(location.href), "ticket")) {
            let newUrl = setUrlValue(decodeURIComponent(location.href), "ticket", "");
            location = newUrl.replace("&ticket=", "") + (location.hash ? location.hash : "#/");
            //location.reload();
        }
        window.Scp = {
            User: {
                id: "admin",
                name: "管理员",
                deptId: "",
                deptName: "",
                positionId: "GLY",
                postionName: "管理员",
                bzId: "admin_3",
                bzName: "管理员岗位3",
                bzDeptId: ".WLDJT.DGS",
                bzDeptName: "D公司",
                bzPositionId: "HQRY",
                bzPositionName: "后勤人员",
                orgId: "admin_3",
                defOrgId: "admin_3"
            }
        }
        //customSysCofig默认值
        window.customSysCofig = _.merge({
            showMiniLogin: true,
        }, window.customSysCofig);
        if (!window.localStorage.getItem("locale")) {
            window.localStorage.setItem("locale", JSON.stringify({
                desc: "中文",
                name: "zh-CN",
            }));
            Cookies.set("locale", "zh-CN");
        }
        window.__guid = new Date().valueOf();
        //window.customSysCofig=_.merge(window.default_customSysCfg,window.customSysCofig||{});
        window == top && window.customSysCofig && window.customSysCofig.thirdParty && window.customSysCofig.thirdParty.forEach((item) => {//第三方脚本样式资源引用
            let _dom;
            switch (item.type) {
                case "js":
                    _dom = document.createElement("script");
                    _dom.type = "text/javascript";
                    _dom.src = item.link;
                    if (item.callback) {
                        _dom.onload = () => {
                            item.callback();
                        }
                    }
                    break;
                case "css":
                    _dom = document.createElement("link");
                    _dom.rel = "stylesheet";
                    _dom.href = item.link;
                    break;
            }
            document.querySelector("head").appendChild(_dom);
        });
        setTimeout(() => {
            window.__sysConfig = _.merge({
                events: {
                    onLoad1: function () {

                    }
                },
                projectName: "eaptpl",
                /*sysProjectMange: {
                    id: __guid++,
                    name: '工程树',
                    iconClass: 'icon-tree',
                    uri: 'amreport/designer/tree/design.do',
                    url: '/amrept-web/amreport/designer/tree/design.do'
                },*/
                sysList: [

                ],
                langList: {
                    id: __guid++,
                    name: (window.localStorage.getItem("locale") ? (JSON.parse(window.localStorage.getItem("locale")).desc) : "中文"),
                    type: 'lang',
                    iconClass: 'icon-language',
                    children: [
                        {
                            id: __guid++,
                            name: "中文",
                            key: "zh-CN",
                        }, {
                            id: __guid++,
                            name: "English",
                            key: "en",
                        },
                    ]
                },
                userInfo: {
                    id: __guid++,
                    name: '${fusername}',
                    type: 'userInfo',
                    iconClass: 'icon-user',
                    children: [
                        {
                            id: __guid++,
                            name: me.$t('hivuiMain_app_user') + ':${fusername}/${fuserid}',
                            iconClass: 'icon-user',
                        },
                        {
                            id: __guid++,
                            name: me.$t('hivuiMain_app_orgbz') + ':${fbzname}/${fbzid}',
                            iconClass: 'icon-user',
                            type: "orgBz",
                        },
                        {
                            id: __guid++,
                            name: me.$t('hivuiMain_app_orgname') + ':${forgname}/${forgid}',
                            iconClass: 'icon-user',
                        },
                        {
                            id: __guid++,
                            name: me.$t('hivuiMain_app_rolename') + ':${frolename}/${froleid}',
                            iconClass: 'icon-user',
                        },
                        {
                            id: __guid++,
                            name: me.$t('hivuiMain_app_personal_Center'),
                            iconClass: 'icon-user',
                            type: "personalCenter"
                        },
                        /*{
                            id: __guid++,
                            iconClass:'icon-edit',
                            name:'修改用户信息',
                            type:'modifyUserInfo',
                        },*/
                        {
                            id: __guid++,
                            iconClass: 'icon-edit',
                            name: me.$t('hivuiMain_app_modifyPw'),
                            type: 'modifyPw',
                        },
                    ]
                },
            }, window.customSysCofig);
            if (window.customSysCofig.addLangList) {
                window.__sysConfig.langList.children = [...window.__sysConfig.langList.children, ...window.customSysCofig.addLangList];
            }
            this.$store.dispatch("app/getSysConfig").then(res => {
                let cfg = this.$store.state.app.config || {};
                let loadText = (cfg.sysLoadLogo && cfg.sysLoadLogo.title) || "";
                let logoSrc = (cfg.sysLoadLogo && cfg.sysLoadLogo.src) || "";
                this.loadTexts = loadText.split("");
                this.logoSrc = cfg.sysLoadLogo.hide ? "" : (logoSrc || LoginPic);
            });
        }, 0);


        if(window.customSysCofig.loginStatusMonitorWs && window.customSysCofig.loginStatusMonitorWs.enable){
            this.createSocket();
        }


    }
};
</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:nth-child(11) {
    -webkit-animation-delay: 1000ms;
    -moz-animation-delay: 1000ms;
    -ms-animation-delay: 1000ms;
    -o-animation-delay: 1000ms;
    animation-delay: 1000ms;
}

.loader .txt span:nth-child(12) {
    -webkit-animation-delay: 1100ms;
    -moz-animation-delay: 1100ms;
    -ms-animation-delay: 1100ms;
    -o-animation-delay: 1100ms;
    animation-delay: 1100ms;
}

.loader .txt span:nth-child(13) {
    -webkit-animation-delay: 1200ms;
    -moz-animation-delay: 1200ms;
    -ms-animation-delay: 1200ms;
    -o-animation-delay: 1200ms;
    animation-delay: 1200ms;
}

.loader .txt span.msgInfo {
    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>