/** * 按菜单权限过滤工作台模块。 * @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) }