瀏覽代碼

fix: 修复动态路由 `rank` 问题

xiaoxian521 2 年之前
父節點
當前提交
1419df10d2
共有 2 個文件被更改,包括 10 次插入5 次删除
  1. 1 1
      src/directives/auth/index.ts
  2. 9 4
      src/router/utils.ts

+ 1 - 1
src/directives/auth/index.ts

@@ -5,7 +5,7 @@ export const auth: Directive = {
   mounted(el: HTMLElement, binding: DirectiveBinding) {
     const { value } = binding;
     if (value) {
-      !hasAuth(value) && el.parentNode.removeChild(el);
+      !hasAuth(value) && el.parentNode?.removeChild(el);
     } else {
       throw new Error("need auths! Like v-auth=\"['btn.add','btn.edit']\"");
     }

+ 9 - 4
src/router/utils.ts

@@ -29,9 +29,13 @@ const modulesRoutes = import.meta.glob("/src/views/**/*.{vue,tsx}");
 // 动态路由
 import { getAsyncRoutes } from "@/api/routes";
 
-function handRank(ramk: number, name: string, path: string) {
-  return isAllEmpty(ramk) || (ramk === 0 && name !== "Home" && path !== "/")
-    ? true
+function handRank(routeInfo: any) {
+  const { name, path, parentId, meta } = routeInfo;
+  return isAllEmpty(parentId)
+    ? isAllEmpty(meta?.rank) ||
+      (meta?.rank === 0 && name !== "Home" && path !== "/")
+      ? true
+      : false
     : false;
 }
 
@@ -39,7 +43,7 @@ function handRank(ramk: number, name: string, path: string) {
 function ascending(arr: any[]) {
   arr.forEach((v, index) => {
     // 当rank不存在时,根据顺序自动创建,首页路由永远在第一位
-    if (handRank(v?.meta?.rank, v.name, v.path)) v.meta.rank = index + 2;
+    if (handRank(v)) v.meta.rank = index + 2;
   });
   return arr.sort(
     (a: { meta: { rank: number } }, b: { meta: { rank: number } }) => {
@@ -351,6 +355,7 @@ function hasAuth(value: string | Array<string>): boolean {
   if (!value) return false;
   /** 从当前路由的`meta`字段里获取按钮级别的所有自定义`code`值 */
   const metaAuths = getAuths();
+  if (!metaAuths) return false;
   const isAuths = isString(value)
     ? metaAuths.includes(value)
     : isIncludeAllChildren(value, metaAuths);