You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
4.4 KiB

4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
  1. // 菜单树过滤 (展示的? )
  2. export function filterMenu(menuList) {
  3. return menuList
  4. // 过滤不是4级的 123 为菜单
  5. .filter(menu => menu.menuType === 1 || menu.menuType === 2 || menu.menuType === 3)
  6. .map(menu => ({
  7. ...menu,
  8. children: menu.children ? filterMenu(menu.children) : []
  9. }))
  10. .sort((a, b) => a.id - b.id); // 按 id 升序
  11. }
  12. // 过滤 只获得第三级的菜单
  13. export function filterFirstMenu(menuList) {
  14. return menuList
  15. .map(menu => ({
  16. ...menu,
  17. children: menu.children ? filterMenu(menu.children) : []
  18. }))
  19. .sort((a, b) => a.id - b.id); // 按 id 升序
  20. }
  21. // 辅助函数:查找第一个可访问的菜单项
  22. export function findFirstThirdLevelMenu(menuList) {
  23. if (!menuList || menuList.length === 0) return null;
  24. for (const menu of menuList) {
  25. // 先检查当前菜单是否为三级菜单
  26. if (menu.menuType === 1) {
  27. return menu;
  28. }
  29. // 若不是,递归查找其子菜单(无论当前菜单是几级,都深入子菜单找三级)
  30. const childResult = findFirstThirdLevelMenu(menu.children);
  31. if (childResult) {
  32. return childResult;
  33. }
  34. }
  35. return null;
  36. }
  37. /**
  38. * 根据菜单信息获取对应的路由路径
  39. * @param {Object} menu - 菜单对象必须包含 id 属性对应接口返回的 menuName 数值标识
  40. * @returns {string} 匹配的路由路径无匹配时返回 '/noPermission'无权限页面
  41. */
  42. export const getRoutePath = (menu) => {
  43. // 路由映射表:
  44. // key: 接口返回的菜单唯一标识(menuName 对应的数值)
  45. // value: 前端对应的路由路径(用于页面跳转)
  46. const routeMap = {
  47. "2": "/workbench", // 工作台
  48. "3": "/goldManage", // 金币管理
  49. "58": "/moneyManage", // 现金管理
  50. "119": "/activityManage", // 活动管理
  51. "124": "/channelManage", // 频道管理
  52. "146": "/language", // 多语言配置
  53. "5": "/audit", // 金币审核
  54. "20": "/beanAudit", // 金豆审核
  55. "27": "/rate", // 汇率管理
  56. "31": "/coinRecharge", // 金币充值
  57. "34": "/beanRecharge", // 金豆充值
  58. "39": "/coinConsume", // 金币消耗
  59. "42": "/beanConsume", // 金豆消耗
  60. "47": "/coinRefund", // 退款管理
  61. "55": "/history", // 历史数据查询(父菜单)
  62. "56": "/history/newHistory", // 新版金币查询(历史数据查询子菜单)
  63. "57": "/history/oldHistory", // 旧版金币查询(历史数据查询子菜单)
  64. "128": "/permissions", // 权限管理(父菜单)
  65. "129": "/permissions/userPermission", // 用户管理(权限管理子菜单)
  66. "136": "/permissions/rolePermission", // 角色管理(权限管理子菜单)
  67. "51": "/usergold", // 金币客户账户明细
  68. "54": "/userbean", // 金豆客户账户明细
  69. "59": "/moneyManage/receiveDetail", // 收款明细(现金管理子菜单)
  70. "60": "/moneyManage/receiveDetail/receiveService", // 收款-地区客服(收款明细子菜单)
  71. "67": "/moneyManage/receiveDetail/receiveFinance", // 收款-地区财务(收款明细子菜单)
  72. "79": "/moneyManage/receiveDetail/receiveManager", // 收款-地区负责人(收款明细子菜单)
  73. "91": "/moneyManage/receiveDetail/receiveHeader", // 收款-总部财务(收款明细子菜单)
  74. "98": "/moneyManage/refundDetail", // 退款明细(现金管理子菜单)
  75. "99": "/moneyManage/refundDetail/refundService", // 退款-地区客服(退款明细子菜单)
  76. "103": "/moneyManage/refundDetail/refundFinance", // 退款-地区财务(退款明细子菜单)
  77. "107": "/moneyManage/refundDetail/refundCharge", // 退款-地区负责人(退款明细子菜单)
  78. "111": "/moneyManage/refundDetail/refundHeader", // 退款-总部财务(退款明细子菜单)
  79. "115": "/moneyManage/executor", // 执行明细(现金管理子菜单)
  80. "125": "/channelManage/reward", // 打赏管理(频道管理子菜单)
  81. "126": "/channelManage/fans", // 铁粉管理(频道管理子菜单)
  82. "127": "/channelManage/cart" // 小黄车管理(频道管理子菜单)
  83. };
  84. // 从映射表中匹配路由,无匹配时返回无权限页面路径
  85. return routeMap[menu.id] || '/noPermission';
  86. }