ebike-plus-ui/src/store/modules/route-config.ts

125 lines
4.1 KiB
TypeScript
Raw Normal View History

import { defineStore } from "pinia";
import router from "@/router/index";
import { getMenuListAPI } from "@/api/modules/system/index";
import { moduleReplacement, linearArray } from "@/router/route-output";
/**
*
* @methods setRouteNames
* @methods setTabs tabs标签页
* @methods setCurrentRoute
* @methods removeTabsList tabs页的指定路由
* @methods removeRouteName
* @methods removeRouteNames
* @methods initSetRouter
*/
export const routesConfigStore = () => {
const routeTree = ref<any>([]); // 有访问权限的路由树
const routeList = ref<any>([]); // 有访问权限的一维路由数组
const cacheRoutes = ref<string[]>([]); // 所有可缓存路由的路由名
const tabsList = ref<any>([]); // 标签页数据
const currentRoute = ref<any>({}); // 当前路由
/**
*
* @param {string} name
*/
function setRouteNames(name: string) {
let state = cacheRoutes.value.some((item: string) => item === name);
if (state) return;
cacheRoutes.value.push(name);
}
/**
* tabs标签页
* @param {object} data tabs路由
*/
function setTabs(data: Menu.MenuOptions) {
// 当前路由在tags中是否存在不存在则缓存
let isExist = tabsList.value.some((item: Menu.MenuOptions) => item.name === data.name);
if (isExist) return;
tabsList.value.push(data);
}
/**
*
* @param {object} data
*/
function setCurrentRoute(data: Menu.MenuOptions) {
if (currentRoute.value.name && data.name === currentRoute.value.name) return;
currentRoute.value = data;
}
/**
* tabs页的指定路由
* @param {string} key name
*/
function removeTabsList(key: string) {
const index = tabsList.value.findIndex((item: Menu.MenuOptions) => item.name === key);
if (tabsList.value[index].meta.affix) return;
if (index === -1) return;
tabsList.value.splice(index, 1);
}
/**
*
* @param {string} key
*/
function removeRouteName(key: string) {
const index = cacheRoutes.value.findIndex((item: string) => item === key);
if (index === -1) return;
cacheRoutes.value.splice(index, 1);
}
/**
*
* @param {Array} list
*/
function removeRouteNames(list: Array<string>) {
cacheRoutes.value = cacheRoutes.value.filter((item: string) => !list.includes(item));
}
/**
* routeTree路由树
*/
async function resetRoute() {
routeTree.value = [];
}
/**
*
* 1
* 2
* 3
* 4
* 5
* 6
*/
async function initSetRouter() {
// 1、获取过滤角色权限后的树后端做排序处理
let { data } = await getMenuListAPI();
// 2、将模块设置为真实模块
let tree = await moduleReplacement(data);
// 3、存储路由树用于生成菜单
routeTree.value = tree;
// 4、根据树生成一维路由数组
tree = linearArray(tree);
// 5、动态添加路由
tree.forEach((route: any) => router.addRoute("layout", route));
// 6、缓存一维路由
routeList.value = tree;
}
return {
routeTree,
routeList,
cacheRoutes,
tabsList,
currentRoute,
setRouteNames,
setTabs,
setCurrentRoute,
removeTabsList,
removeRouteName,
removeRouteNames,
resetRoute,
initSetRouter
};
};
export const useRoutesConfigStore = defineStore("route-config", routesConfigStore);