123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- import { RouteRecordRaw } from 'vue-router';
- import { storeToRefs } from 'pinia';
- import { formatTwoStageRoutes, formatFlatteningRoutes, router } from '/@/router/index';
- import { dynamicRoutes, notFoundAndNoPower } from '/@/router/route';
- import pinia from '/@/stores/index';
- import { Session } from '/@/utils/storage';
- import { useUserInfo } from '/@/stores/userInfo';
- import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
- import { useRoutesList } from '/@/stores/routesList';
- import { NextLoading } from '/@/utils/loading';
- export async function initFrontEndControlRoutes() {
-
- if (window.nextLoading === undefined) NextLoading.start();
-
- if (!Session.get('token')) return false;
-
-
- await useUserInfo(pinia).setUserInfos();
-
-
- if (useUserInfo().userInfos.roles.length <= 0) return Promise.resolve(true);
-
- await setAddRoute();
-
- await setFilterMenuAndCacheTagsViewRoutes();
- }
- export async function setAddRoute() {
- await setFilterRouteEnd().forEach((route: RouteRecordRaw) => {
- router.addRoute(route);
- });
- }
- export async function frontEndsResetRoute() {
- await setFilterRouteEnd().forEach((route: RouteRecordRaw) => {
- const routeName: any = route.name;
- router.hasRoute(routeName) && router.removeRoute(routeName);
- });
- }
- export function setFilterRouteEnd() {
- let filterRouteEnd: any = formatTwoStageRoutes(formatFlatteningRoutes(dynamicRoutes));
-
-
- filterRouteEnd[0].children = [...setFilterRoute(filterRouteEnd[0].children), ...notFoundAndNoPower];
- return filterRouteEnd;
- }
- export function setFilterRoute(chil: any) {
- const stores = useUserInfo(pinia);
- const { userInfos } = storeToRefs(stores);
- let filterRoute: any = [];
- chil.forEach((route: any) => {
- if (route.meta.roles) {
- route.meta.roles.forEach((metaRoles: any) => {
- userInfos.value.roles.forEach((roles: any) => {
- if (metaRoles === roles) filterRoute.push({ ...route });
- });
- });
- }
- });
- return filterRoute;
- }
- export function setCacheTagsViewRoutes() {
-
- const stores = useUserInfo(pinia);
- const storesTagsView = useTagsViewRoutes(pinia);
- const { userInfos } = storeToRefs(stores);
- let rolesRoutes = setFilterHasRolesMenu(dynamicRoutes, userInfos.value.roles);
-
- storesTagsView.setTagsViewRoutes(formatTwoStageRoutes(formatFlatteningRoutes(rolesRoutes))[0].children);
- }
- export function setFilterMenuAndCacheTagsViewRoutes() {
- const stores = useUserInfo(pinia);
- const storesRoutesList = useRoutesList(pinia);
- const { userInfos } = storeToRefs(stores);
- storesRoutesList.setRoutesList(setFilterHasRolesMenu(dynamicRoutes[0].children, userInfos.value.roles));
- setCacheTagsViewRoutes();
- }
- export function hasRoles(roles: any, route: any) {
- if (route.meta && route.meta.roles) return roles.some((role: any) => route.meta.roles.includes(role));
- else return true;
- }
- export function setFilterHasRolesMenu(routes: any, roles: any) {
- const menu: any = [];
- routes.forEach((route: any) => {
- const item = { ...route };
- if (hasRoles(roles, item)) {
- if (item.children) item.children = setFilterHasRolesMenu(item.children, roles);
- menu.push(item);
- }
- });
- return menu;
- }
|