|
@@ -14,13 +14,14 @@ import { addRevisePassword, getNoticePageList, getPageList, getUnreadNotificatio
|
|
|
import { translateNavigation } from '@/utils';
|
|
|
import { removeToken } from '@/utils/auth';
|
|
|
|
|
|
+import type { RouteRecordRaw } from 'vue-router';
|
|
|
import type { FormInstance, Rule } from 'ant-design-vue/es/form';
|
|
|
import type { MenuInfo } from 'ant-design-vue/es/menu/src/interface';
|
|
|
import type { ChangePasswordForm, DeviceGroupItem, NoticePageItem, PageParams } from '@/types';
|
|
|
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
-const { resetToken } = useUserInfoStore();
|
|
|
+const { permission, resetToken } = useUserInfoStore();
|
|
|
|
|
|
const menuRef = useTemplateRef('menu');
|
|
|
const selectedKeys = ref<string[]>([route.path]);
|
|
@@ -44,15 +45,44 @@ const messageTotal = ref<number>();
|
|
|
const { handleRequest } = useRequest();
|
|
|
let timer: number | null = null; // 保存定时器ID
|
|
|
const countNumber = ref<number>();
|
|
|
+
|
|
|
+// 递归过滤函数
|
|
|
+const filterRoutes = (routeList: Readonly<RouteRecordRaw[]>) => {
|
|
|
+ return routeList.filter((route) => {
|
|
|
+ const routeHasPermission =
|
|
|
+ route.meta &&
|
|
|
+ permission
|
|
|
+ ?.split(',')
|
|
|
+ .map(Number)
|
|
|
+ .includes(route.meta.permission as number);
|
|
|
+ let childrenHavePermission = false;
|
|
|
+
|
|
|
+ // 如果有子路由,递归过滤
|
|
|
+ if (routeHasPermission) {
|
|
|
+ if (route.children && route.children.length > 0) {
|
|
|
+ const filteredChildren: RouteRecordRaw[] = filterRoutes(route.children);
|
|
|
+ childrenHavePermission = filteredChildren.length > 0;
|
|
|
+
|
|
|
+ // 更新子路由为过滤后的结果
|
|
|
+ if (childrenHavePermission) {
|
|
|
+ route.children = filteredChildren;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 只有当路由自身有权限或子路由有权限才保留
|
|
|
+ return routeHasPermission || childrenHavePermission;
|
|
|
+ });
|
|
|
+};
|
|
|
const menuGroupList = computed(() => {
|
|
|
return [
|
|
|
{
|
|
|
category: t('common.dataCenter'),
|
|
|
- routes: dataCenterRoutes,
|
|
|
+ routes: filterRoutes(dataCenterRoutes),
|
|
|
},
|
|
|
{
|
|
|
category: t('common.opsCenter'),
|
|
|
- routes: opsCenterRoutes,
|
|
|
+ routes: filterRoutes(opsCenterRoutes),
|
|
|
},
|
|
|
];
|
|
|
});
|