2024-04-20 16:54:12 +08:00
|
|
|
|
import pinia from "@/store/index";
|
|
|
|
|
|
import { storeToRefs } from "pinia";
|
2025-07-26 13:15:35 +08:00
|
|
|
|
import { useRouteConfigStore } from "@/store/modules/route-config";
|
2025-07-20 18:09:41 +08:00
|
|
|
|
import { findCategoryById, findPathOfParentNode } from "@/utils/tree-tools";
|
2025-05-18 17:40:23 +08:00
|
|
|
|
|
2024-04-20 16:54:12 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 路由处理hooks,内置多种路由处理场景
|
|
|
|
|
|
* @returns 路由方法
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const useRoutingMethod = () => {
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 从一维路由中查找路由
|
2025-07-20 18:09:41 +08:00
|
|
|
|
* @param {string} path 路由的path
|
2024-04-20 16:54:12 +08:00
|
|
|
|
* @returns 查找到的路由,undefined则表示未找到
|
|
|
|
|
|
*/
|
2025-07-20 18:09:41 +08:00
|
|
|
|
const findLinearArray = (path: string) => {
|
2025-07-26 13:15:35 +08:00
|
|
|
|
const routerStore = useRouteConfigStore(pinia);
|
2025-07-20 18:09:41 +08:00
|
|
|
|
const { routeTree } = storeToRefs(routerStore);
|
|
|
|
|
|
return findCategoryById(routeTree.value, "path", path);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 根据当前路由找到所有直属父级路由
|
|
|
|
|
|
* @param {string} path 路由的path
|
|
|
|
|
|
* @returns 查找到的所有父级路由,未找到则null
|
|
|
|
|
|
*/
|
|
|
|
|
|
const getAllParentRoute = (path: string) => {
|
2025-07-26 13:15:35 +08:00
|
|
|
|
const routerStore = useRouteConfigStore(pinia);
|
2025-07-20 18:09:41 +08:00
|
|
|
|
const { routeTree } = storeToRefs(routerStore);
|
|
|
|
|
|
return findPathOfParentNode(routeTree.value, "path", path);
|
2024-04-20 16:54:12 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2025-05-18 17:40:23 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 从一维路由中判断路由是否存在
|
|
|
|
|
|
* @param {string} key 路由的name
|
|
|
|
|
|
* @returns 路由是否存在,true存在 false不存在
|
|
|
|
|
|
*/
|
|
|
|
|
|
const hasRoute = (key: string) => {
|
2025-07-26 13:15:35 +08:00
|
|
|
|
const routerStore = useRouteConfigStore(pinia);
|
2025-05-18 17:40:23 +08:00
|
|
|
|
const { routeList } = storeToRefs(routerStore);
|
|
|
|
|
|
return routeList.value.some((item: Menu.MenuOptions) => item.name == key);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2024-04-20 16:54:12 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 从tabs路由中查找路由
|
|
|
|
|
|
* @param {string} key 路由的name
|
|
|
|
|
|
* @returns 查找到的路由,undefined则表示未找到
|
|
|
|
|
|
*/
|
|
|
|
|
|
const findTagsList = (key: string) => {
|
2025-07-26 13:15:35 +08:00
|
|
|
|
const routerStore = useRouteConfigStore(pinia);
|
2024-04-20 16:54:12 +08:00
|
|
|
|
const { tabsList } = storeToRefs(routerStore);
|
|
|
|
|
|
return tabsList.value.find((item: Menu.MenuOptions) => item.name == key);
|
|
|
|
|
|
};
|
2024-06-28 19:01:54 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 处理外链跳转,打开一个新窗口并根据url跳转
|
|
|
|
|
|
* @param {any} route 路由
|
|
|
|
|
|
*/
|
|
|
|
|
|
const openExternalLinks = (route: any) => {
|
|
|
|
|
|
// 处理外链跳转
|
|
|
|
|
|
if (route.meta.link && !route.meta.iframe) {
|
|
|
|
|
|
window.open(route.meta.link as string, "_blank");
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2025-05-18 17:40:23 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 检测是否是动态匹配路由,如果是动态匹配路由,则path必然带有"/:"字样,例如:/user/:id
|
|
|
|
|
|
* @param {string} path 路由path
|
|
|
|
|
|
* @returns 是否是动态匹配路由
|
|
|
|
|
|
*/
|
|
|
|
|
|
const isDynamicRoute = (path: string) => {
|
|
|
|
|
|
return path.includes("/:");
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2024-04-20 16:54:12 +08:00
|
|
|
|
return {
|
|
|
|
|
|
findLinearArray,
|
2025-07-20 18:09:41 +08:00
|
|
|
|
getAllParentRoute,
|
2024-06-28 19:01:54 +08:00
|
|
|
|
findTagsList,
|
2025-05-18 17:40:23 +08:00
|
|
|
|
openExternalLinks,
|
|
|
|
|
|
isDynamicRoute,
|
|
|
|
|
|
hasRoute
|
2024-04-20 16:54:12 +08:00
|
|
|
|
};
|
|
|
|
|
|
};
|