优化常用菜单功能以支持拼接路由地址

在用户系统模块的常用菜单服务中,优化了菜单地址的拼接逻辑。修复了菜单路由地址处理方法,菜单数据现在将根据其层级结构正确地拼接路由地址。这确保了前端路由的正确解析和导航。
This commit is contained in:
aikai 2024-09-10 18:05:20 +08:00
parent 2fbd8fcd0a
commit 4042b6a3bc

View File

@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
import cn.iocoder.yudao.module.system.dal.mysql.commonlyused.CommonlyUsedMapper;
import cn.iocoder.yudao.module.system.service.permission.MenuService;
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -107,17 +108,27 @@ public class CommonlyUsedServiceImpl implements CommonlyUsedService {
}
List<CommonlyUsedRespVO> commonlyUsedRespVOS = new ArrayList<>();
Map<Long, MenuDO> menuMap = menuList.stream().collect(Collectors.toMap(MenuDO::getId, a -> a));
for (MenuDO menuDO : menuList) {
menuDO.setSelectedFlag(false);
if (menuIds.contains(String.valueOf(menuDO.getId()))) {
menuDO.setSelectedFlag(true);
List<CommonlyUsedDO> menus = map.get("2" + "_" + menuDO.getId());
CommonlyUsedDO commonlyUsedDO = menus.get(0);
CommonlyUsedRespVO commonlyUsedRespVO = BeanUtil.copyProperties(commonlyUsedDO, CommonlyUsedRespVO.class);
commonlyUsedRespVO.setImg(menuDO.getIcon());
commonlyUsedRespVO.setName(menuDO.getName());
commonlyUsedRespVO.setRouting(menuDO.getPath());
commonlyUsedRespVOS.add(commonlyUsedRespVO);
// -- 是菜单的才返回回去
if (menuDO.getType() == 2) {
List<CommonlyUsedDO> menus = map.get("2" + "_" + menuDO.getId());
CommonlyUsedDO commonlyUsedDO = menus.get(0);
CommonlyUsedRespVO commonlyUsedRespVO = BeanUtil.copyProperties(commonlyUsedDO, CommonlyUsedRespVO.class);
commonlyUsedRespVO.setImg(menuDO.getIcon());
commonlyUsedRespVO.setName(menuDO.getName());
// -- 这里的路由需要拼接
List<String> routingList = new ArrayList<>();
routingList.add(menuDO.getPath());
this.recursiveConcatenationOfRoutingAddresses(routingList, menuDO, menuMap);
//list反转
String routing = String.join("/", Lists.reverse(routingList));
commonlyUsedRespVO.setRouting(routing);
commonlyUsedRespVOS.add(commonlyUsedRespVO);
}
}
}
@ -142,6 +153,23 @@ public class CommonlyUsedServiceImpl implements CommonlyUsedService {
return vo;
}
/**
* 递归拼接路由
*
* @param routingList
* @param menuDO
* @param menuMap
*/
private void recursiveConcatenationOfRoutingAddresses(List<String> routingList, MenuDO menuDO, Map<Long, MenuDO> menuMap) {
if (menuDO.getParentId() == 0L) {
return;
}
//获取上级
MenuDO parentMenuDO = menuMap.get(menuDO.getParentId());
routingList.add(parentMenuDO.getPath());
this.recursiveConcatenationOfRoutingAddresses(routingList, parentMenuDO, menuMap);
}
@Override
public void batchUpdate(List<CommonlyUsedSaveReqVO> list) {
@ -163,7 +191,11 @@ public class CommonlyUsedServiceImpl implements CommonlyUsedService {
}
List<CommonlyUsedDO> oldList = commonlyUsedMapper.selectList(new LambdaQueryWrapper<CommonlyUsedDO>().eq(CommonlyUsedDO::getUserId, userId));
List<CommonlyUsedDO> newList = BeanUtils.toBean(list, CommonlyUsedDO.class);
if (CollectionUtil.isEmpty(oldList)) {
for (CommonlyUsedDO commonlyUsedDO : newList) {
commonlyUsedDO.setUserId(userId);
}
commonlyUsedMapper.insertBatch(newList);
return;
}