|
|
@@ -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)
|
|
|
+}
|