Browse Source

refactor(login): 跳转第一个页面逻辑

zhangrenyuan/feature-20250728113353-金币前端三期
lihui 3 weeks ago
parent
commit
0baa0cd622
  1. 69
      src/utils/menuUtils.js
  2. 11
      src/views/login.vue

69
src/utils/menuUtils.js

@ -10,29 +10,40 @@ export function filterMenu(menuList) {
.sort((a, b) => a.id - b.id); // 按 id 升序 .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) { 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) => { export const getRoutePath = (menu) => {
// 路由映射表:key为接口menuName,value为对应路由路径 // 路由映射表:key为接口menuName,value为对应路由路径
const routeMap = { const routeMap = {
'工作台': '/workspace', '工作台': '/workspace',
'工作台展示': '/workspace',
'财务审核': '/audit', '财务审核': '/audit',
'金币审核': '/audit', '金币审核': '/audit',
@ -66,3 +77,37 @@ export const getRoutePath = (menu) => {
return routeMap[menu.menuName] || '/noPermission' 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'
}

11
src/views/login.vue

@ -6,7 +6,7 @@ import {useRouter} from 'vue-router'
import API from "@/util/http.js"; import API from "@/util/http.js";
import {useAdminStore} from '@/store' import {useAdminStore} from '@/store'
// //
import {filterMenu, findFirstAccessibleMenu, getRoutePath} from "../utils/menuUtils.js"
import {filterFirstMenu, findFirstThirdLevelMenu, getFirstRoutePath,} from "../utils/menuUtils.js"
const router = useRouter() // const router = useRouter() //
// //
@ -62,11 +62,14 @@ const login = async function () {
adminStore.setMenuTree(menuTree) 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 // 访 path
const redirectPath = firstMenu ? getRoutePath(firstMenu) : '/noPermission'
const redirectPath = firstMenu ? getFirstRoutePath(firstMenu) : '/noPermission'
// //
router.push(redirectPath) router.push(redirectPath)

Loading…
Cancel
Save