init
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* 路由工具函数
|
||||
*/
|
||||
|
||||
// 统一的URL正则表达式
|
||||
export const URL_REGEX = /^https?:\/\//;
|
||||
|
||||
/**
|
||||
* 生成iframe路径
|
||||
* @param {Object} item - 菜单项
|
||||
* @param {String} pathKey - 路径字段名
|
||||
* @returns {String} 生成的路径
|
||||
*/
|
||||
export function generateIframePath(item, pathKey = 'path') {
|
||||
const path = item[pathKey];
|
||||
if (!path) return path;
|
||||
|
||||
// 如果是URL且有ID,生成iframe路径
|
||||
if (URL_REGEX.test(path) && item.id) {
|
||||
return `/iframe/${item.id}`;
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理URL参数,将&替换为#以避免路由参数问题
|
||||
* @param {String} url - 原始URL
|
||||
* @returns {String} 处理后的URL
|
||||
*/
|
||||
export function processUrlForQuery(url) {
|
||||
if (!url) return url;
|
||||
return url.replace(/&/g, '#');
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成iframe的query参数
|
||||
* @param {Object} item - 菜单项
|
||||
* @param {String} pathKey - 路径字段名
|
||||
* @param {String} queryKey - query字段名
|
||||
* @returns {Object} query参数
|
||||
*/
|
||||
export function generateIframeQuery(item, pathKey = 'path', queryKey = 'query') {
|
||||
const originalPath = item[pathKey];
|
||||
const existingQuery = item[queryKey] || {};
|
||||
|
||||
// 如果是URL且没有url参数,添加处理后的URL
|
||||
if (URL_REGEX.test(originalPath)) {
|
||||
// 保留现有query,只在没有url时添加
|
||||
if (!existingQuery.url) {
|
||||
return {
|
||||
...existingQuery,
|
||||
url: processUrlForQuery(originalPath)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return existingQuery;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为iframe路由
|
||||
* @param {String} path - 当前路径
|
||||
* @param {String} originalPath - 原始路径
|
||||
* @returns {Boolean} 是否为iframe路由
|
||||
*/
|
||||
export function isIframeRoute(path, originalPath) {
|
||||
// 路径以/iframe/开头且原始路径是URL
|
||||
return path && path.startsWith('/iframe/') && URL_REGEX.test(originalPath);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断路径是否为URL
|
||||
* @param {String} path - 路径
|
||||
* @returns {Boolean} 是否为URL
|
||||
*/
|
||||
export function isURL(path) {
|
||||
return URL_REGEX.test(path);
|
||||
}
|
||||
Reference in New Issue
Block a user