效果图
效果说明:同级别节点可以用上下 ↑ ↓ 箭头进行位置互换

java后端代码如下:此代码用了公司框架封装,如有不明白的可留言
package com.hndfsj.test;
import com.alibaba.fastjson.JSONObject;
import com.hndfsj.app.monitoring.domain.MonitoringNode;
import com.hndfsj.app.monitoring.service.IMonitoringNodeService;
import com.hndfsj.framework.common.MReturnObject;
import com.hndfsj.framework.pager.PageModel;
import com.hndfsj.framework.pager.PageRequest;
import com.hndfsj.framework.pager.SearchCondition;
import com.hndfsj.framework.utils.MessageUtils;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import java.util.List;
public class 上下箭头排序 {
@Resource
private IMonitoringNodeService monitoringNodeService;
@ApiOperation("排序接口")
@GetMapping("/sortNode")
public JSONObject sortNode(@RequestParam String nodeId, @RequestParam String upOrDown) {
MonitoringNode lineNode = monitoringNodeService.getById(nodeId);
PageRequest pageRequest = new PageRequest();
pageRequest.addAndCondition(MonitoringNode.PARENT_ID, SearchCondition.EQUAL, lineNode.getParentId());
pageRequest.addSortConditions(MonitoringNode.SORT, PageRequest.ORDER_ASC);
List<MonitoringNode> list = monitoringNodeService.findAll(pageRequest);
for (MonitoringNode lineNodeExchanged : list) {
if (lineNode.getId().equals(lineNodeExchanged.getId())) {
int index = list.indexOf(lineNodeExchanged);
if ("up".equals(upOrDown)) {
if (index != 0) {
MonitoringNode lineNodeBeExchanged = list.get(index - 1);
sortNode(lineNodeBeExchanged, lineNodeExchanged);
MReturnObject mReturnObject = new MReturnObject(MReturnObject.SUCCESS, MessageUtils.OPERA_SUCCESS);
return PageModel.getInstance().excludePage(mReturnObject);
} else {
MReturnObject mReturnObject = new MReturnObject(MReturnObject.ERROR, "该节点已经排在最前,无法继续上移");
return PageModel.getInstance().excludePage(mReturnObject);
}
} else if ("down".equals(upOrDown)) {
if (index != list.size() - 1) {
MonitoringNode lineNodeBeExchanged = list.get(index + 1);
sortNode(lineNodeBeExchanged, lineNodeExchanged);
MReturnObject mReturnObject = new MReturnObject(MReturnObject.SUCCESS, MessageUtils.OPERA_SUCCESS);
return PageModel.getInstance().excludePage(mReturnObject);
} else {
MReturnObject mReturnObject = new MReturnObject(MReturnObject.ERROR, "该节点已经排在后,无法继续下移");
return PageModel.getInstance().excludePage(mReturnObject);
}
} else {
MReturnObject mReturnObject = new MReturnObject(MReturnObject.ERROR, MessageUtils.OPERATING_PARAMETERS_ERROR);
return PageModel.getInstance().excludePage(mReturnObject);
}
}
}
return null;
}
private void sortNode(MonitoringNode lineNodeBeExchanged, MonitoringNode lineNodeExchanged) {
if (lineNodeExchanged.getSort() == null) {
initSort(lineNodeExchanged);
lineNodeExchanged = monitoringNodeService.getById(lineNodeExchanged.getId());
}
if (lineNodeBeExchanged.getSort() == null) {
initSort(lineNodeBeExchanged);
lineNodeBeExchanged = monitoringNodeService.getById(lineNodeBeExchanged.getId());
}
if (lineNodeExchanged.getSort().equals(lineNodeBeExchanged.getSort())) {
initSort(lineNodeBeExchanged);
lineNodeBeExchanged = monitoringNodeService.getById(lineNodeBeExchanged.getId());
lineNodeExchanged = monitoringNodeService.getById(lineNodeExchanged.getId());
}
int be = lineNodeBeExchanged.getSort();
int ex = lineNodeExchanged.getSort();
lineNodeBeExchanged.setSort(ex);
lineNodeExchanged.setSort(be);
monitoringNodeService.update(lineNodeBeExchanged);
monitoringNodeService.update(lineNodeExchanged);
}
private void initSort(MonitoringNode monitoringNode) {
if (StringUtils.isNotBlank(monitoringNode.getParentId())) {
PageRequest pageRequest = new PageRequest();
pageRequest.addAndCondition(MonitoringNode.PARENT_ID, SearchCondition.EQUAL, monitoringNode.getParentId());
pageRequest.addSortConditions(MonitoringNode.SORT, PageRequest.ORDER_ASC);
List<MonitoringNode> nodeslist = monitoringNodeService.findAll(pageRequest);
if (nodeslist.size() > 0) {
for (MonitoringNode child : nodeslist) {
child.setSort(nodeslist.indexOf(child));
monitoringNodeService.update(child);
}
}
} else {
monitoringNode.setSort(0);
monitoringNodeService.update(monitoringNode);
}
}
}