workbenchMenuFilter.js 1.0 KB

123456789101112131415161718192021222324252627282930
  1. /**
  2. * 按菜单权限过滤工作台模块。
  3. * @param {Array} modules WORKBENCH_MODULES 风格数组
  4. * @param {{ menuAll?: boolean, menuCodes?: string[] }} auth
  5. * @returns {Array} 过滤后的模块(menus 已裁剪;无叶子的模块去掉)
  6. */
  7. export function filterWorkbenchModules(modules, auth) {
  8. const list = Array.isArray(modules) ? modules : []
  9. const menuAll = !!(auth && auth.menuAll)
  10. const codeSet = new Set(
  11. (auth && Array.isArray(auth.menuCodes) ? auth.menuCodes : [])
  12. .map((c) => String(c || '').trim())
  13. .filter(Boolean)
  14. )
  15. return list
  16. .filter((m) => m && m.visible !== false)
  17. .map((m) => {
  18. const menus = Array.isArray(m.menus) ? m.menus : []
  19. const nextMenus = menus.filter((item) => {
  20. if (!item || item.enabled === false) return false
  21. if (menuAll) return true
  22. const p = item.perms
  23. if (!p) return false
  24. return codeSet.has(String(p))
  25. })
  26. return { ...m, menus: nextMenus }
  27. })
  28. .filter((m) => m.menus.length > 0)
  29. }