| 123456789101112131415161718192021222324252627282930 |
- /**
- * 按菜单权限过滤工作台模块。
- * @param {Array} modules WORKBENCH_MODULES 风格数组
- * @param {{ menuAll?: boolean, menuCodes?: string[] }} auth
- * @returns {Array} 过滤后的模块(menus 已裁剪;无叶子的模块去掉)
- */
- export function filterWorkbenchModules(modules, auth) {
- const list = Array.isArray(modules) ? modules : []
- const menuAll = !!(auth && auth.menuAll)
- const codeSet = new Set(
- (auth && Array.isArray(auth.menuCodes) ? auth.menuCodes : [])
- .map((c) => String(c || '').trim())
- .filter(Boolean)
- )
- return list
- .filter((m) => m && m.visible !== false)
- .map((m) => {
- const menus = Array.isArray(m.menus) ? m.menus : []
- const nextMenus = menus.filter((item) => {
- if (!item || item.enabled === false) return false
- if (menuAll) return true
- const p = item.perms
- if (!p) return false
- return codeSet.has(String(p))
- })
- return { ...m, menus: nextMenus }
- })
- .filter((m) => m.menus.length > 0)
- }
|