3 Commits

Author SHA1 Message Date
试着奔跑的菜鸟
9f587fe366 Pre Merge pull request !373 from 试着奔跑的菜鸟/master 2025-03-06 03:10:13 +00:00
RuoYi
088cec8adf 菜单管理新增路由名称 2025-03-06 11:09:34 +08:00
试着奔跑的菜鸟
ad34bc5698 优化部门管理组装树型结构数据
1. 使用Set集合代替List判断元素是否存在
2. 修改recursionFn中通过map集合的内容判断是否有子元素的方法

Signed-off-by: 试着奔跑的菜鸟 <846933465@qq.com>
2024-05-15 00:24:15 +00:00
2 changed files with 33 additions and 22 deletions

View File

@@ -3,6 +3,7 @@ package com.ruoyi.system.service.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -68,21 +69,20 @@ public class SysDeptServiceImpl implements ISysDeptService
* @return 树结构列表 * @return 树结构列表
*/ */
@Override @Override
public List<SysDept> buildDeptTree(List<SysDept> depts) public List<SysDept> buildDeptTree(List<SysDept> depts) {
{
List<SysDept> returnList = new ArrayList<SysDept>(); List<SysDept> returnList = new ArrayList<SysDept>();
List<Long> tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList()); List<Long> tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
for (SysDept dept : depts) // 按父级分组
{ Map<Long, List<SysDept>> groupByParentIdDepts = depts.stream().filter(dept -> dept.getParentId() != null)
.collect(Collectors.groupingBy(SysDept::getParentId));
for (SysDept dept : depts) {
// 如果是顶级节点, 遍历该父节点的所有子节点 // 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(dept.getParentId())) if (!tempList.contains(dept.getParentId())) {
{ recursionFn(groupByParentIdDepts, dept);
recursionFn(depts, dept);
returnList.add(dept); returnList.add(dept);
} }
} }
if (returnList.isEmpty()) if (returnList.isEmpty()) {
{
returnList = depts; returnList = depts;
} }
return returnList; return returnList;
@@ -296,17 +296,17 @@ public class SysDeptServiceImpl implements ISysDeptService
/** /**
* 递归列表 * 递归列表
*/ */
private void recursionFn(List<SysDept> list, SysDept t) private void recursionFn(Map<Long, List<SysDept>> groupByParentIdDepts, SysDept t) {
{
// 得到子节点列表 // 得到子节点列表
List<SysDept> childList = getChildList(list, t); List<SysDept> childList = groupByParentIdDepts.get(t.getDeptId());
t.setChildren(childList); if (childList != null) {
for (SysDept tChild : childList) t.setChildren(childList);
{ // 为每个子节点递归找到子节点
if (hasChild(list, tChild)) for (SysDept tChild : childList) {
{ recursionFn(groupByParentIdDepts, tChild);
recursionFn(list, tChild);
} }
} else {
t.setChildren(new ArrayList<>(0));
} }
} }

View File

@@ -130,7 +130,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24" v-if="form.menuType != 'F'"> <el-col :span="12" v-if="form.menuType != 'F'">
<el-form-item label="菜单图标" prop="icon"> <el-form-item label="菜单图标" prop="icon">
<el-popover <el-popover
placement="bottom-start" placement="bottom-start"
@@ -151,6 +151,11 @@
</el-popover> </el-popover>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="orderNum">
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
</el-form-item>
</el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@@ -158,9 +163,15 @@
<el-input v-model="form.menuName" placeholder="请输入菜单名称" /> <el-input v-model="form.menuName" placeholder="请输入菜单名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="form.menuType == 'C'">
<el-form-item label="显示排序" prop="orderNum"> <el-form-item prop="routeName">
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" /> <el-input v-model="form.routeName" placeholder="请输入路由名称" />
<span slot="label">
<el-tooltip content="默认不填则和路由地址相同:如地址为:`user`,则名称为`User`(注意:为避免名字的冲突,特殊情况下请自定义,保证唯一性)" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
路由名称
</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>