mirror of
https://gitee.com/lab1024/smart-admin.git
synced 2025-11-16 07:33:49 +08:00
2.0的js版本和后端 完成
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* 此文件是处理 菜单数据的类,主要用于:
|
||||
* 1、菜单树形表格的构造
|
||||
* 2、菜单的前端过滤
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-06-15 16:47:20
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022
|
||||
*/
|
||||
|
||||
import _ from 'lodash';
|
||||
/**
|
||||
* 过滤菜单
|
||||
* @param {*} menuList
|
||||
* @param {*} queryForm
|
||||
* @returns
|
||||
*/
|
||||
export const filterMenuByQueryForm = (menuList, queryForm) => {
|
||||
if (!menuList || menuList.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
let filterResult = [];
|
||||
for (const menu of menuList) {
|
||||
if (isMenuExistKeywords(menu, queryForm.keywords) && isMenuExistMenuType(menu, queryForm.menuType) && isMenuExistMenuFlag(menu, queryForm)) {
|
||||
filterResult.push(menu);
|
||||
}
|
||||
}
|
||||
return filterResult;
|
||||
};
|
||||
|
||||
/**
|
||||
* 构建菜单表格树形数据
|
||||
*/
|
||||
export const buildMenuTableTree = (menuList) => {
|
||||
let topMenuList = [];
|
||||
const menuIdSet = new Set();
|
||||
for (const menu of menuList) {
|
||||
menuIdSet.add(menu.menuId);
|
||||
}
|
||||
|
||||
for (const menu of menuList) {
|
||||
const parentId = menu.parentId;
|
||||
// 不存在父节点,则为顶级菜单
|
||||
if (!menuIdSet.has(parentId)) {
|
||||
topMenuList.push(menu);
|
||||
}
|
||||
}
|
||||
|
||||
recursiveMenuTree(menuList, topMenuList);
|
||||
return topMenuList;
|
||||
};
|
||||
|
||||
/**
|
||||
* 递归遍历菜单树形数据
|
||||
* @param {*} menuList
|
||||
* @param {*} parentArray
|
||||
*/
|
||||
function recursiveMenuTree(menuList, parentArray) {
|
||||
for (const parent of parentArray) {
|
||||
const children = menuList.filter((e) => e.parentId === parent.menuId);
|
||||
if (children.length > 0) {
|
||||
parent.children = children;
|
||||
recursiveMenuTree(menuList, parent.children);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 过滤菜单状态
|
||||
* @param {*} menu
|
||||
* @param {*} queryForm
|
||||
* @returns
|
||||
*/
|
||||
function isMenuExistMenuFlag(menu, queryForm) {
|
||||
let frameFlagCondition = false;
|
||||
if (!_.isNil(queryForm.frameFlag)) {
|
||||
frameFlagCondition = !_.isNil(menu.frameFlag) && menu.frameFlag === (queryForm.frameFlag === 1);
|
||||
} else {
|
||||
frameFlagCondition = true;
|
||||
}
|
||||
|
||||
let cacheFlagCondition = false;
|
||||
if (!_.isNil(queryForm.cacheFlag)) {
|
||||
cacheFlagCondition = !_.isNil(menu.cacheFlag) && menu.cacheFlag === (queryForm.cacheFlag === 1);
|
||||
} else {
|
||||
cacheFlagCondition = true;
|
||||
}
|
||||
|
||||
let visibleFlagCondition = false;
|
||||
if (!_.isNil(queryForm.visibleFlag)) {
|
||||
visibleFlagCondition = !_.isNil(menu.visibleFlag) && menu.visibleFlag === (queryForm.visibleFlag === 1);
|
||||
} else {
|
||||
visibleFlagCondition = true;
|
||||
}
|
||||
|
||||
let disabledFlagCondition = false;
|
||||
if (!_.isNil(queryForm.disabledFlag)) {
|
||||
disabledFlagCondition = !_.isNil(menu.disabledFlag) && menu.disabledFlag === (queryForm.disabledFlag === 1);
|
||||
} else {
|
||||
disabledFlagCondition = true;
|
||||
}
|
||||
|
||||
return frameFlagCondition && cacheFlagCondition && visibleFlagCondition && disabledFlagCondition;
|
||||
}
|
||||
|
||||
/**
|
||||
* 过滤菜单类型
|
||||
* @param {*} menu
|
||||
* @param {*} menuType
|
||||
* @returns
|
||||
*/
|
||||
function isMenuExistMenuType(menu, menuType) {
|
||||
if (!menuType) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (menu.menuType && menu.menuType === menuType) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 过滤关键字
|
||||
*/
|
||||
function isMenuExistKeywords(menu, keywords) {
|
||||
if (!keywords) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (menu.component && menu.component.indexOf(keywords) > -1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (menu.menuName && menu.menuName.indexOf(keywords) > -1) {
|
||||
return true;
|
||||
}
|
||||
if (menu.path && menu.path.indexOf(keywords) > -1) {
|
||||
return true;
|
||||
}
|
||||
if (menu.apiPerms && menu.apiPerms.indexOf(keywords) > -1) {
|
||||
return true;
|
||||
}
|
||||
if (menu.webPerms && menu.webPerms.indexOf(keywords) > -1) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user