/* 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