diff --git a/miniprogram/utils/workbenchMenuFilter.js b/miniprogram/utils/workbenchMenuFilter.js new file mode 100644 index 000000000..40265dc0b --- /dev/null +++ b/miniprogram/utils/workbenchMenuFilter.js @@ -0,0 +1,30 @@ +/** + * 按菜单权限过滤工作台模块。 + * @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) +}