Browse Source

fix: fix menu active bug

kailong321200875 2 years ago
parent
commit
ff59fc7e13

+ 2 - 2
src/components/Menu/src/Menu.vue

@@ -94,8 +94,8 @@ export default defineComponent({
         >
           {{
             default: () => {
-              const { renderMenuItem } = useRenderMenuItem(unref(routers), unref(menuMode))
-              return renderMenuItem()
+              const { renderMenuItem } = useRenderMenuItem(unref(menuMode))
+              return renderMenuItem(unref(routers))
             }
           }}
         </ElMenu>

+ 6 - 8
src/components/Menu/src/components/useRenderMenuItem.tsx

@@ -1,23 +1,21 @@
 import { ElSubMenu, ElMenuItem } from 'element-plus'
 import type { RouteMeta } from 'vue-router'
-import { getAllParentPath, hasOneShowingChild } from '../helper'
+import { hasOneShowingChild } from '../helper'
 import { isUrl } from '@/utils/is'
 import { useRenderMenuTitle } from './useRenderMenuTitle'
 import { useDesign } from '@/hooks/web/useDesign'
 import { pathResolve } from '@/utils/routerHelper'
 
 export const useRenderMenuItem = (
-  allRouters: AppRouteRecordRaw[] = [],
+  // allRouters: AppRouteRecordRaw[] = [],
   menuMode: 'vertical' | 'horizontal'
 ) => {
-  const renderMenuItem = (routers?: AppRouteRecordRaw[]) => {
-    return (routers || allRouters).map((v) => {
+  const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => {
+    return routers.map((v) => {
       const meta = (v.meta ?? {}) as RouteMeta
       if (!meta.hidden) {
         const { oneShowingChild, onlyOneChild } = hasOneShowingChild(v.children, v)
-        const fullPath = isUrl(v.path)
-          ? v.path
-          : getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/')
+        const fullPath = isUrl(v.path) ? v.path : pathResolve(parentPath, v.path) // getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/')
 
         const { renderMenuTitle } = useRenderMenuTitle()
 
@@ -46,7 +44,7 @@ export const useRenderMenuItem = (
             >
               {{
                 title: () => renderMenuTitle(meta),
-                default: () => renderMenuItem(v.children)
+                default: () => renderMenuItem(v.children!, fullPath)
               }}
             </ElSubMenu>
           )