fix: fix menu active bug

This commit is contained in:
kailong321200875 2022-07-30 10:49:16 +08:00
parent bff7d9370d
commit ff59fc7e13
2 changed files with 8 additions and 10 deletions

View File

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

View File

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