diff --git a/web/src/views/index.vue b/web/src/views/index.vue index 08772799..74d134c0 100644 --- a/web/src/views/index.vue +++ b/web/src/views/index.vue @@ -304,9 +304,21 @@ const flattenMenus = (menus: any[], parentChain: string[] = [], parentPath = '', menus.forEach((menu, menuIndex) => { // 跳过隐藏的菜单 if (menu.hidden === true) { + console.log(`跳过隐藏菜单: ${menu.meta?.title || menu.name}`); return; } + // 添加调试信息,特别关注工作流菜单 + if (menu.meta?.title === '工作流' || menu.name === 'Workflow11616') { + console.log('=== 工作流菜单处理开始 ==='); + console.log('工作流菜单原始数据:', menu); + console.log('工作流菜单组件类型:', menu.component); + console.log('工作流菜单是否有子菜单:', !!menu.children); + console.log('工作流菜单子菜单数量:', menu.children?.length || 0); + console.log('工作流菜单层级:', level); + console.log('工作流菜单父路径:', parentPath); + } + // 构建完整路径 - 移到外层,确保在递归调用中也能访问 let fullPath = menu.path; @@ -363,8 +375,40 @@ const flattenMenus = (menus: any[], parentChain: string[] = [], parentPath = '', // 检查是否有可见的子菜单 const hasVisibleChildren = menu.children && menu.children.some((child: any) => !child.hidden); - // 只有叶子节点(没有子菜单或子菜单都是隐藏的)才作为可点击的菜单项 - if (!hasVisibleChildren && fullPath && fullPath !== '/') { + // 检查是否为目录类型菜单 + // 1. 组件为Layout或ParentView字符串 + // 2. 组件为Vue对象且没有子菜单(可能是目录) + // 3. menuType为'M'(目录类型) + const isDirectoryMenu = menu.component === 'Layout' || + menu.component === 'ParentView' || + (typeof menu.component === 'object' && !hasVisibleChildren) || + menu.menuType === 'M'; + + // 添加工作流菜单的详细调试信息 + if (menu.meta?.title === '工作流' || menu.name === 'Workflow11616') { + console.log('=== 工作流菜单判断过程 ==='); + console.log('hasVisibleChildren:', hasVisibleChildren); + console.log('isDirectoryMenu:', isDirectoryMenu); + console.log('menu.component:', menu.component); + console.log('menu.component类型:', typeof menu.component); + console.log('menu.menuType:', menu.menuType); + console.log('menu.children:', menu.children); + console.log('fullPath:', fullPath); + console.log('level:', level); + console.log('是否应该创建菜单项:', !hasVisibleChildren && !isDirectoryMenu && fullPath && fullPath !== '/'); + console.log('完整菜单对象:', JSON.stringify(menu, null, 2)); + } + + // 目录菜单处理逻辑:如果是目录菜单且没有子菜单,直接跳过 + if (isDirectoryMenu && !hasVisibleChildren) { + if (menu.meta?.title === '工作流' || menu.name === 'Workflow11616') { + console.log('=== 工作流菜单被跳过 ==='); + console.log('原因: 是目录菜单且没有子菜单'); + } + // 不创建菜单项,直接跳过 + } + // 只有叶子节点(没有子菜单或子菜单都是隐藏的)且不是目录菜单才作为可点击的菜单项 + else if (!hasVisibleChildren && !isDirectoryMenu && fullPath && fullPath !== '/') { const menuAction: MenuAction = { id: `menu-${menu.name || fullPath}`, title: menu.meta.title, @@ -389,6 +433,9 @@ const flattenMenus = (menus: any[], parentChain: string[] = [], parentPath = '', ); result.push(menuAction); + } else if (menu.meta?.title === '工作流' || menu.name === 'Workflow11616') { + console.log('=== 工作流菜单被过滤掉 ==='); + console.log('原因: 是目录菜单或没有有效路径'); } }