2022-04-02 16:58·字数:37·阅读:450
1、查询全量菜单(双层循环方式)
/
查询全量菜单
@return
/
@Override
public List<输出对象> querAllTree() {
loginfo("查询全量树");
// 开始时间
long stime = SystemcurrentTimeMillis();
//查询相对机构
List<对象> OrgList = baseMapperselectList(null);
// 转换输出格式
List<输出对象> resOrgList = OrgListstream()map(u -> {
输出对象 name = new 输出对象();
BeanUtilscopyProperties(u, name);
return name;
})collect(CollectorstoList());
//返回的树形结构数据
List<输出对象> trees = new ArrayList<>();
//循环菜单树形数据
for (输出对象menuTree : resOrgList) {
//菜单级别为0,则是一级数据,根据实际情况判断可修改相关关联判断
if ("00"equals(menuTreegetOrgClass())) {
treesadd(menuTree);
for (输出对象 it : resOrgList) {
//找出一级菜单下面的所有二级菜单,并加入到list中去
if (menuTreegetOrgCode()equals(itgetOrgSuperCode())) {
if (menuTreegetOrgChildrenMap() == null) {
menuTreesetOrgChildrenMap(new ArrayList<>());
}
menuTreegetOrgChildrenMap()add(it);
}
}
}
}
// 结束时间
long etime = SystemcurrentTimeMillis();
loginfo("机构数查询耗时:" + (etime - stime) + "毫秒");
return trees;
}
2、查询全量菜单(递归方式)
/
使用递归方法建树
@param menuTrees 子节点集合
@return List
/
public static List<输出对象> buildByRecursive(List<输出对象> menuTrees) {
List<输出对象> trees = new ArrayList<>();
for (输出对象 menuTree : menuTrees) {
//菜单级别为00,则是一级数据,根据实际情况判断可修改相关关联判断
if ("00"equals(menuTreegetOrgClass())) {
treesadd(findChildren(menuTree,menuTrees));
}
}
return trees;
}
/
递归查找子节点
@param menuTree 菜单数对象
@param menuTrees 子节点
@return MenuTree
/
private static 输出对象 findChildren(输出对象 menuTree,List<输出对象> menuTrees) {
for (输出对象 it : menuTrees) {
if(menuTreegetOrgCode()equals(itgetOrgSuperCode())) {
if (menuTreegetChildren() == null) {
menuTreesetChildren(new ArrayList<输出对象>());
}
menuTreegetOrgChildrenMap()add(findChildren(it,menuTrees));
}
}
return menuTree;
}
3、全部菜单树(一次循环)
/
查询全量菜单
@return
/
@Override
public List
querAllTree(TOrgInfoReq tOrgInfoReq) {
loginfo("查询全量树");
String orgPath = tOrgInfoReqgetOrgCode();
// 开始时间
long stime = SystemcurrentTimeMillis();
//查询相对机构
List
OrgList = tOrgInfoMapperqueryAllTree();
// 转换输出格式
List
不建议做单表自联结,还是用单独的映射表比较好
比如
部门表
ID 名称
部门映射表
父ID 子ID
然后通过映射表内联父子来递归出树形结构。
无分无码
根据用户的权限来产生菜单,做起来比较麻烦,我看不如设计一个统一的菜单,把所有菜单项的单击事件代码都写出来,然后在数据库中设计一个用户表,在这个表中设计这样一些字段,登录名,登录密码,权限分类编号这个编号的值也就是12345吧
建表之后,就写代码吧既然有用户权限,那肯定就有登录窗口吧,把登录窗口的创建代码,放在主窗口的创建事件中,用户在登录窗口选择自己的用户名和输入登录密码之后,这样也就获得了权限分类编号,
在取得编号的代码之后写一个case语句,如:
case
权限分类编号
of
1:begin
首先使所有菜单项能用;
禁用本权限不应该使用的菜单;
end;
2:begin
endl;
比你那个根据数据表产生菜单容易一些吧在delphi中要实现一个功能的途径有很多,不要死抱一种途径不放也就是不要老在一棵树上吊死换一棵树嘛
以上就是关于数据库如何导出树状图全部的内容,包括:数据库如何导出树状图、C#设计一个为树状结构,即部门下面还可以无限的增加子部门,在数据库中保存树状结构位置和层次、Delphi 用户权限自动生产树形菜单,数据表怎么设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)