菜单的排序,删除等
This commit is contained in:
parent
672c7d96c7
commit
d1cf9e161d
@ -34,4 +34,18 @@ public interface FeatureResourceApi {
|
||||
|
||||
@PostMapping("/api/featureResource/saveOrUpdate")
|
||||
ApiResult<Void> saveMenu(@RequestBody FeatureResourceTreeSaveReq req);
|
||||
|
||||
/** 删除菜单/页面/组件 **/
|
||||
@PostMapping("/api/featureResource/delete")
|
||||
ApiResult<Void> deleteFeatureResource(@RequestParam Long featureId, @RequestParam Long operatorId);
|
||||
|
||||
|
||||
/** 重排序菜单/页面/组件 **/
|
||||
@PostMapping("/api/featureResource/reorder")
|
||||
ApiResult<Void> reorderFeatureTree(@RequestParam Long featureId, @RequestParam Integer offset);
|
||||
|
||||
|
||||
/** 获取菜单/页面/组件 及子孙节点 **/
|
||||
@PostMapping("/api/featureResource/list")
|
||||
ApiResult<List<FeatureResourceTreeNode>> listFeatureDescendant(@RequestParam Long featureId);
|
||||
}
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
package cn.axzo.tyr.client.model.res;
|
||||
|
||||
public class FeatureResourceDetailResp {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -48,10 +48,28 @@ public class FeatureResourceController implements FeatureResourceApi {
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> saveMenu(FeatureResourceTreeSaveReq req) {
|
||||
log.info("save feature resouce req : " + req.toString());
|
||||
|
||||
log.info("save feature resource req : " + req.toString());
|
||||
featureResourceService.saveOrUpdateMenu(req);
|
||||
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> deleteFeatureResource(Long featureId, Long operatorId) {
|
||||
log.info("deleteFeatureResource featureId : {}, operatorId : {}", featureId, operatorId);
|
||||
featureResourceService.deleteMenuFeature(featureId, operatorId);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> reorderFeatureTree(Long featureId, Integer offset) {
|
||||
log.info("reorderFeatureTree featureId : {}, offset : {}", featureId, offset);
|
||||
featureResourceService.reorderMenuFeature(featureId, offset);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<List<FeatureResourceTreeNode>> listFeatureDescendant(Long featureId) {
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,6 +17,16 @@ import java.util.List;
|
||||
public interface SaasFeatureResourceService {
|
||||
|
||||
void saveOrUpdateMenu(FeatureResourceTreeSaveReq req);
|
||||
|
||||
/**递归的**/
|
||||
List<SaasFeatureResource> listDescendant(Long featureId);
|
||||
|
||||
/**删除指定菜单**/
|
||||
void deleteMenuFeature(Long featureId, Long operatorId);
|
||||
|
||||
/**菜单重排序**/
|
||||
void reorderMenuFeature(Long featureId, Integer offset);
|
||||
|
||||
/** 根据ID查询导航菜单页面信息 仅可显示 - 限制查询字段 **/
|
||||
List<SaasFeatureResource> listNavByIds(List<Long> featureIds);
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.basics.common.model.IBaseTree;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.pokonyan.config.redis.RedisClient;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceAuthType;
|
||||
@ -14,16 +15,23 @@ import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import io.swagger.models.auth.In;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.tyr.server.common.constants.CacheConstant.KEY_AUTH_FREE;
|
||||
@ -186,4 +194,61 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 查询resource节点及子节点
|
||||
@Override
|
||||
public List<SaasFeatureResource> listDescendant(Long featureId) {
|
||||
return featureResourceDao.lambdaQuery()
|
||||
.eq(BaseEntity::getIsDelete,0)
|
||||
.apply("FIND_IN_SET('" + featureId + "', path)")
|
||||
.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteMenuFeature(Long featureId, Long operatorId) {
|
||||
// 删除自己及自己的子集
|
||||
featureResourceDao.lambdaUpdate()
|
||||
.eq(BaseEntity::getIsDelete,0)
|
||||
.apply("FIND_IN_SET('" + featureId + "', path)")
|
||||
.set(SaasFeatureResource::getUpdateBy, operatorId)
|
||||
.set(BaseEntity::getIsDelete,1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reorderMenuFeature(Long featureId, Integer offset) {
|
||||
// 删除自己及自己的子集
|
||||
SaasFeatureResource resource = featureResourceDao.lambdaQuery()
|
||||
.eq(BaseEntity::getIsDelete,0)
|
||||
.eq(SaasFeatureResource::getId, featureId)
|
||||
.one();
|
||||
Assert.notNull(resource, "菜单不存在");
|
||||
|
||||
List<SaasFeatureResource> parallelFeature = featureResourceDao.lambdaQuery()
|
||||
.eq(BaseEntity::getIsDelete,0)
|
||||
.eq(SaasFeatureResource::getParentId, resource.getParentId())
|
||||
.orderByAsc(SaasFeatureResource::getDisplayOrder)
|
||||
.list();
|
||||
List<Long> parallelIds = parallelFeature.stream().map(SaasFeatureResource::getId).collect(Collectors.toList());
|
||||
int index = parallelIds.indexOf(featureId);
|
||||
Assert.isTrue(index >= 0, "未查询到元素下标");
|
||||
Integer offsetIndex = index + offset;
|
||||
if (offsetIndex < 0) {
|
||||
offsetIndex = 0;
|
||||
}
|
||||
if (offsetIndex > parallelFeature.size() - 1) {
|
||||
offsetIndex = parallelFeature.size() - 1;
|
||||
}
|
||||
// 要交换和当前下标一致,代表不需要交换,比如下标为0时上移,下标最大时下移
|
||||
if (offsetIndex.equals(index)) {
|
||||
return;
|
||||
}
|
||||
Assert.isTrue(index >= 0, "移动下班");
|
||||
Collections.swap(parallelFeature, index, offsetIndex);
|
||||
for (int i = 0; i < parallelFeature.size(); i++) {
|
||||
SaasFeatureResource featureResource = parallelFeature.get(i);
|
||||
featureResource.setDisplayOrder(i);
|
||||
}
|
||||
featureResourceDao.updateBatchById(parallelFeature);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user