diff --git a/src/utils/menuUtils.js b/src/utils/menuUtils.js index f56b73a..6c2e283 100644 --- a/src/utils/menuUtils.js +++ b/src/utils/menuUtils.js @@ -10,29 +10,40 @@ export function filterMenu(menuList) { .sort((a, b) => a.id - b.id); // 按 id 升序 } +// 过滤 只获得第三级的菜单 +export function filterFirstMenu(menuList) { + return menuList + .map(menu => ({ + ...menu, + children: menu.children ? filterMenu(menu.children) : [] + })) + .sort((a, b) => a.id - b.id); // 按 id 升序 +} + // 辅助函数:查找第一个可访问的菜单项 -export function findFirstAccessibleMenu(menuList) { - if (!menuList || menuList.length === 0) return null +export function findFirstThirdLevelMenu(menuList) { + if (!menuList || menuList.length === 0) return null; for (const menu of menuList) { - if (menu.menuType === 1) { // 根 - const childResult = findFirstAccessibleMenu(menu.children) - if (childResult) return childResult - } else if (menu.menuType === 2) { // 目录 - return menu - } else if (menu.menuType === 3) { // 菜单 - console.log('菜单:', menu) - return menu + // 先检查当前菜单是否为三级菜单 + if (menu.menuType === 3) { + return menu; + } + // 若不是,递归查找其子菜单(无论当前菜单是几级,都深入子菜单找三级) + const childResult = findFirstThirdLevelMenu(menu.children); + if (childResult) { + return childResult; } } - return null + return null; } -// 路由映射 +// 路由映射(左侧菜单栏) export const getRoutePath = (menu) => { // 路由映射表:key为接口menuName,value为对应路由路径 const routeMap = { '工作台': '/workspace', + '工作台展示': '/workspace', '财务审核': '/audit', '金币审核': '/audit', @@ -65,4 +76,38 @@ export const getRoutePath = (menu) => { // 未匹配的菜单默认使用id作为路由(可根据实际需求调整) return routeMap[menu.menuName] || '/noPermission' +} + + +// 路由映射(获取第一个菜单) +export const getFirstRoutePath = (menu) => { + // 路由映射表:key为接口menuName,value为对应路由路径 + const routeMap = { + '工作台展示': '/workspace', + + '金币审核': '/audit', + '金豆审核': '/beanAudit', + + '汇率管理': '/rate', + + + '金币充值': '/coinRecharge', + '金豆充值': '/beanRecharge', + + '金币消耗': '/coinConsume', + '金豆消耗': '/beanConsume', + + + '金币退款': '/coinRefund', + // '金豆退款': '/beanRefund', + + '权限管理': '/permissions', + + '金币客户账户明细': '/usergold', + '金豆客户账户明细': '/userbean', + }; + + // 未匹配的菜单默认使用id作为路由(可根据实际需求调整) + return routeMap[menu.menuName] || '/noPermission' + } \ No newline at end of file diff --git a/src/views/login.vue b/src/views/login.vue index c757ab1..d4a941b 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -6,7 +6,7 @@ import {useRouter} from 'vue-router' import API from "@/util/http.js"; import {useAdminStore} from '@/store' // 方法抽出来 三个地方会用到 -import {filterMenu, findFirstAccessibleMenu, getRoutePath} from "../utils/menuUtils.js" +import {filterFirstMenu, findFirstThirdLevelMenu, getFirstRoutePath,} from "../utils/menuUtils.js" const router = useRouter() // 获取路由实例 //获取当前浏览器地址 @@ -62,11 +62,14 @@ const login = async function () { adminStore.setMenuTree(menuTree) // 过滤 - const filteredMenu = filterMenu(adminStore.menuTree) + const filteredMenu = filterFirstMenu(adminStore.menuTree) + console.log('过滤后的菜单树', filteredMenu) // 获取第一个可访问的菜单 - const firstMenu = findFirstAccessibleMenu(filteredMenu) + const firstMenu = findFirstThirdLevelMenu(filteredMenu) + console.log('获取到的第一个可访问的菜单', firstMenu) + // 获取第一个可访问的菜单的 path - const redirectPath = firstMenu ? getRoutePath(firstMenu) : '/noPermission' + const redirectPath = firstMenu ? getFirstRoutePath(firstMenu) : '/noPermission' // 跳转 router.push(redirectPath)