Merge branch 'psap' of http://192.168.2.166:3180/OMC/ems_frontend_vue3 into psap
This commit is contained in:
@@ -29,12 +29,15 @@ import { MENU_PATH_INLINE } from '@/constants/menu-constants';
|
|||||||
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
|
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
|
||||||
import { parseDateToStr } from '@/utils/date-utils';
|
import { parseDateToStr } from '@/utils/date-utils';
|
||||||
import { parseUrlPath } from '@/plugins/file-static-url';
|
import { parseUrlPath } from '@/plugins/file-static-url';
|
||||||
|
import useNeInfoStore from '@/store/modules/neinfo';
|
||||||
|
|
||||||
const { proConfig, waterMarkContent } = useLayoutStore();
|
const { proConfig, waterMarkContent } = useLayoutStore();
|
||||||
const { t, currentLocale } = useI18n();
|
const { t, currentLocale } = useI18n();
|
||||||
const routerStore = useRouterStore();
|
const routerStore = useRouterStore();
|
||||||
const tabsStore = useTabsStore();
|
const tabsStore = useTabsStore();
|
||||||
const appStore = useAppStore();
|
const appStore = useAppStore();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const neListStore = useNeInfoStore();
|
||||||
|
|
||||||
/**菜单面板 */
|
/**菜单面板 */
|
||||||
const layoutState = reactive({
|
const layoutState = reactive({
|
||||||
@@ -65,18 +68,23 @@ watch(
|
|||||||
);
|
);
|
||||||
|
|
||||||
// 动态路由添加到菜单面板
|
// 动态路由添加到菜单面板
|
||||||
const rootRoute = router.getRoutes().find(r => r.name === 'Root');
|
const menuData = computed(() => {
|
||||||
if (rootRoute) {
|
const rootRoute = router.getRoutes().find(r => r.name === 'Root');
|
||||||
const children = routerStore.setRootRouterData(rootRoute.children);
|
if (rootRoute) {
|
||||||
const buildRouterData = routerStore.buildRouterData;
|
const children = routerStore.setRootRouterData(rootRoute.children);
|
||||||
if (buildRouterData.length > 0) {
|
const buildRouterData = routerStore.buildRouterData;
|
||||||
rootRoute.children = children.concat(buildRouterData);
|
if (buildRouterData.length > 0) {
|
||||||
} else {
|
rootRoute.children = children.concat(buildRouterData);
|
||||||
rootRoute.children = children;
|
} else {
|
||||||
|
rootRoute.children = children;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
const neTypes = neListStore.getNeSelectOtions.map(v => v.value);
|
||||||
|
let routes = clearMenuItem(router.getRoutes());
|
||||||
const { menuData } = getMenuData(clearMenuItem(router.getRoutes()));
|
routes = routerStore.clearMenuItemByNeList(routes, neTypes);
|
||||||
|
const { menuData } = getMenuData(routes);
|
||||||
|
return menuData;
|
||||||
|
});
|
||||||
|
|
||||||
/**面包屑数据对象,排除根节点和首页不显示 */
|
/**面包屑数据对象,排除根节点和首页不显示 */
|
||||||
const breadcrumb = computed(() => {
|
const breadcrumb = computed(() => {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import { validHttp } from '@/utils/regular-utils';
|
|||||||
import useUserStore from '@/store/modules/user';
|
import useUserStore from '@/store/modules/user';
|
||||||
import useAppStore from '@/store/modules/app';
|
import useAppStore from '@/store/modules/app';
|
||||||
import useRouterStore from '@/store/modules/router';
|
import useRouterStore from '@/store/modules/router';
|
||||||
|
import useNeInfoStore from '@/store/modules/neinfo';
|
||||||
|
|
||||||
// NProgress Configuration
|
// NProgress Configuration
|
||||||
NProgress.configure({ showSpinner: false });
|
NProgress.configure({ showSpinner: false });
|
||||||
@@ -210,6 +211,8 @@ router.beforeEach(async (to, from, next) => {
|
|||||||
const user = useUserStore();
|
const user = useUserStore();
|
||||||
if (user.roles && user.roles.length === 0) {
|
if (user.roles && user.roles.length === 0) {
|
||||||
try {
|
try {
|
||||||
|
// 获取网元信息
|
||||||
|
await useNeInfoStore().fnNelist();
|
||||||
// 获取用户信息
|
// 获取用户信息
|
||||||
await user.fnGetInfo();
|
await user.fnGetInfo();
|
||||||
// 获取路由信息
|
// 获取路由信息
|
||||||
@@ -230,6 +233,13 @@ router.beforeEach(async (to, from, next) => {
|
|||||||
await user.fnLogOut();
|
await user.fnLogOut();
|
||||||
next({ name: 'Login' });
|
next({ name: 'Login' });
|
||||||
}
|
}
|
||||||
|
} else if (
|
||||||
|
to.meta.neType &&
|
||||||
|
//Array.isArray(to.meta.neType) &&
|
||||||
|
to.meta.neType.length > 0 &&
|
||||||
|
!useNeInfoStore().fnHasNe(to.meta.neType)
|
||||||
|
) {
|
||||||
|
next({ name: 'NotPermission' });
|
||||||
} else {
|
} else {
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,6 +109,32 @@ const useNeInfoStore = defineStore('neinfo', {
|
|||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 含有网元
|
||||||
|
* @param metaNeType ['udm', 'ims', 'udm+ims', 'SGWC'] 支持大小写
|
||||||
|
* @returns boolean
|
||||||
|
*/
|
||||||
|
fnHasNe(metaNeType: string[]) {
|
||||||
|
if (this.neList.length > 0) {
|
||||||
|
const neTypes = this.neSelectOtions.map(item => item.value);
|
||||||
|
let match = false; // 匹配
|
||||||
|
for (const netype of metaNeType) {
|
||||||
|
if (netype.indexOf('+') > -1) {
|
||||||
|
metaNeType = netype.split('+');
|
||||||
|
match = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match) {
|
||||||
|
// 同时匹配
|
||||||
|
return metaNeType.every(item => neTypes.includes(item.toUpperCase()));
|
||||||
|
}
|
||||||
|
// 有一种
|
||||||
|
return metaNeType.some(item => neTypes.includes(item.toUpperCase()));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import type {
|
|||||||
RouteComponent,
|
RouteComponent,
|
||||||
RouteLocationRaw,
|
RouteLocationRaw,
|
||||||
RouteMeta,
|
RouteMeta,
|
||||||
|
RouteRecord,
|
||||||
RouteRecordRaw,
|
RouteRecordRaw,
|
||||||
} from 'vue-router';
|
} from 'vue-router';
|
||||||
import { getRouters } from '@/api/router';
|
import { getRouters } from '@/api/router';
|
||||||
@@ -54,6 +55,62 @@ const useRouterStore = defineStore('router', {
|
|||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 根据网元类型过滤菜单
|
||||||
|
* @param routes 经过clearMenuItem(router.getRoutes())处理
|
||||||
|
* @param neTypes 网元类型
|
||||||
|
* @returns 过滤后的菜单
|
||||||
|
*/
|
||||||
|
clearMenuItemByNeList(
|
||||||
|
routes: RouteRecord[] | RouteRecordRaw[],
|
||||||
|
neTypes: string[]
|
||||||
|
): RouteRecordRaw[] {
|
||||||
|
return routes
|
||||||
|
.map((item: RouteRecord | RouteRecordRaw) => {
|
||||||
|
const finalItem = { ...item };
|
||||||
|
// 过滤网元类型
|
||||||
|
if (
|
||||||
|
Array.isArray(finalItem.meta?.neType) &&
|
||||||
|
finalItem.meta?.neType.length > 0
|
||||||
|
) {
|
||||||
|
let metaNeType: string[] = finalItem.meta.neType;
|
||||||
|
let match = false; // 匹配
|
||||||
|
for (const netype of metaNeType) {
|
||||||
|
if (netype.indexOf('+') > -1) {
|
||||||
|
metaNeType = netype.split('+');
|
||||||
|
match = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match && !metaNeType.every(item => neTypes.includes(item))) {
|
||||||
|
// 同时匹配
|
||||||
|
return null;
|
||||||
|
} else if (!metaNeType.some(item => neTypes.includes(item))) {
|
||||||
|
// 有一种
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 有子菜单进行递归
|
||||||
|
if (finalItem.children && finalItem.children.length > 0) {
|
||||||
|
const children = this.clearMenuItemByNeList(
|
||||||
|
finalItem.children,
|
||||||
|
neTypes
|
||||||
|
);
|
||||||
|
// 如果子菜单都被过滤掉了,就不显示
|
||||||
|
if (children.length === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
finalItem.children = children;
|
||||||
|
return finalItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete finalItem.children;
|
||||||
|
return finalItem;
|
||||||
|
})
|
||||||
|
.filter(item => item) as RouteRecordRaw[];
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
2
src/typings/router.d.ts
vendored
2
src/typings/router.d.ts
vendored
@@ -9,5 +9,7 @@ declare module 'vue-router' {
|
|||||||
permissions?: string[];
|
permissions?: string[];
|
||||||
/**角色 */
|
/**角色 */
|
||||||
roles?: string[];
|
roles?: string[];
|
||||||
|
/**网元类型信息 */
|
||||||
|
neType?: string[];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user