/* eslint-disable no-unused-vars */
/* eslint-disable no-irregular-whitespace */
/* eslint-disable no-undef */

//  * open/route/location/replace
//  * modal-dialog/replace-state/push-state
// that.$link.toLinkUrl(url,that,{
//   method: "route",//location/open/modal
//   params: {},
//   query: {},
//   target: null,
//   args:null
// })

// eslint-disable-next-line no-unused-vars
/**
 * 请求地址重新封装  便于二次处理 
 * 统一跳转,便于后期扩展
 * @param {*} url 
 * @param {*} that  组件里面对象
 * @param {*} option 
 * open/route/location/replace
 * modal-dialog/replace-state/push-state/open/route/location/replace/bs-dialog
 */
export function toLinkUrl(url, that, option = {
    method: "route",
    params: {},
    query: {}
}) {
    //replace/blank/location/route
    if (!url || option.deving === true) {
        that.$msgBox.error('接入中...');
        return;
    }


    if (!option.method) option.method = "route";

    let queryUrl = "";

    if (option.method !== "route") {
        let querys = [];
        if (option && option.query) {
            Object.keys(option.query).forEach(temp => {
                querys.push(`${temp}=${option.query[temp]}`)
            });
        }
        if (querys.length > 0) {
            queryUrl = "?" + querys.join('&');
        }
    }
    openIE / replace - state / push - state / bs - dialog
    if (that && option && option.method === "openIE") {
        window.location.href = "openIE:" + url + queryUrl;
    } else if (that && option && option.method === "replace-state") {
        // replaceState和pushState原理一样使用也一样:
        // 最常用的方法:window.history.replaceState(null,null,'download?id=1');
        // 完整使用:var oState= {title: '下载' };
        // window.history.replaceState(oState, '下载', 'download?id=1');
        // 特点:replaceState不会加入到历史记录里面,用history.go(-1)
        // 会跳过当前页面相当于是history.go(-2)。  
        //:state:一个与指定网址相关的状态对象,popstate事件触发时,
        //该对象会传入回调函数。如果不需要这个对象,
        //此处可以填null。title:新页面的标题,
        window.history.replaceState(option.state, option.title, url + queryUrl);
    } else if (that && option && option.method === "push-state") {
        window.history.pushState(option.state, option.title, url + queryUrl);
    } else if (that && option && option.method === "bs-dialog") {
        let src = url + queryUrl;
        if (url === "component") {
            src = "component";
        }
        let bsDialog = JSON.parse(JSON.stringify(option));
        bsDialog.src = src;
        bsDialog.visible = true;
        that.$store.dispatch("bsDialog", bsDialog);
        // {
        //     link: {
        //         url: "url",
        //         option: {
        //             style:"border: none; width: 100%; height: calc(100vh - 60px)",
        //             class:"bs-root-dialog",
        //             title:"数据中心",
        //             method:"bs-dialog",// "modal-dialog",
        //             args: null,
        //             params: {},
        //             query: {
        //                 "_k": "monitorInfo"
        //             }
        //         }
        //     },
        //     sortId: 5,
        //     name: "数据中心",
        //     meta: {
        //         imgUrl: null,
        //         icon: null,
        //         attrs: {},
        //     },
        // }

    } else if (that && option && option.method === "modal-dialog") {
        //dialogWidth:1920px; dialogHeight:1080px; 
        let args = "status:no; directories:yes;scrollbars:no;Resizable=no;help=no"
        let returnValue = window.open(url + queryUrl, option.target, option.args || args);
        if (returnValue == undefined) {
            returnValue = window.returnValue;
        }
        return returnValue;
        //子串口调用
        //   if (window.opener != undefined) {
        //     //for chrome
        //     window.opener.returnValue = "opener returnValue";
        // }
        // else {
        //     window.returnValue = "window returnValue";
        // }
        // window.close();
    } else if (that && option && (option.method === "blank" || option.method === "open")) {
        // 1.该名称由字母、数字和下划线字符组成。 
        // 2."_top"、"_blank"、"_self"具有特殊意义的名称。 
        //   _blank:在新窗口显示目标网页 
        //   _self:在当前窗口显示目标网页 
        //   _top:框架网页中在上部窗口中显示目标网页 
        // 3.相同 name 的窗口只能创建一个,要想创建多个窗口则 name 不能相同。 
        // 4.name 不能包含有空格。 
        // ————————————————
        //     window.open('url','_top','width=600,height=400,top=100,left=0');  
        window.open(url + queryUrl, option.target || '_blank', option.args);
    } else if (that && option && option.method === "route") {
        that.$router.push({
            path: url,
            query: option.query,
            params: option.params
        });
    } else if (that && option && option.method === "replace") {
        window.location.replace(url + queryUrl);
    } else if (that && option && option.method === "location") {
        window.location.href = url + queryUrl;
    }
}

/**
 * 便于后期扩展
 */
export function goHome() {
    // if (history.length ===1) {
    //   window.location.replace("/");
    // }
}

/**
 * 处理历史记录返回直接跳转到指定页面
 * @param {*} url 
 */
export function goBack(url, router) {
    // console.log(`h:${window.history.length}`);
    let $app = window.$appNavs;
    let tempUrl = url;
    if (url && url.indexOf($app.currentRoot) > 0) {
        tempUrl = url
            .replace($app.currentRoot, "")
            .replace("http:/", "/")
            .replace("https:/", "/");
    }
    if (
        navigator.userAgent.indexOf("MSIE") >= 0 &&
        navigator.userAgent.indexOf("Opera") < 0
    ) {
        // IE
        if (url) {
            // router.push({
            //   path: tempUrl
            // });
            window.location.replace(tempUrl);
        } else {
            if (history.length > 2 && history.state !== null) {
                window.history.go(-1);
            } else {
                // router.push({
                //   path: "/"
                // });
                window.location.replace("/");
            }
            //window.location.href = "/";
        }
    } else {
        //非IE浏览器
        if (
            navigator.userAgent.indexOf("Firefox") >= 0 ||
            navigator.userAgent.indexOf("Opera") >= 0 ||
            navigator.userAgent.indexOf("Safari") >= 0 ||
            navigator.userAgent.indexOf("Chrome") >= 0 ||
            navigator.userAgent.indexOf("WebKit") >= 0
        ) {
            if (url) {
                // router.push({
                //   path: tempUrl
                // });
                window.location.replace(tempUrl);
            } else {
                if (window.history.length > 2 && window.history.state !== null) {
                    window.history.go(-1);
                } else {
                    window.location.replace("/");
                    // router.push({
                    //   path: "/"
                    // });
                }
            }
        } else if (window.history.state !== null) {
            if (url) {
                window.location.replace(tempUrl);
                // router.push({
                //   path: tempUrl
                // });
            } else {
                //未知的浏览器
                if (window.history.length > 2 && window.history.state !== null) {
                    window.history.go(-1);
                } else {
                    window.location.replace("/");
                    // router.push({
                    //   path: "/"
                    // });
                }
            }
            // window.history.back(); //返回上一页
        } else {
            if (url) {
                // router.push({
                //   path: tempUrl
                // });
                window.location.replace(tempUrl);
            } else {
                // router.push({
                //   path: "/"
                // });
                window.location.replace("/");
            }
            //未知的浏览器
            //window.location.href = "/";
        }
    }
}


export default {
    toLinkUrl,
    goBack
};
文档更新时间: 2021-10-07 06:42   作者:admin