From a5a1c29f019603e5c62fee32278461872f8f1b9a Mon Sep 17 00:00:00 2001 From: wuzilong <704541015@qq.com> Date: Fri, 11 Sep 2026 22:42:45 +0800 Subject: [PATCH] feat(miniprogram): add workbench menu permission filter helper. Pure function filters modules by menuAll or mini:db:* menuCodes. Co-authored-by: Cursor --- miniprogram/utils/workbenchMenuFilter.js | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 miniprogram/utils/workbenchMenuFilter.js 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) +}