最近改动一个老系统,发现原始layui tree当点击子级时,父级也会选中。因业务需要,需要将父子联动取消掉。因老版本的源代码未找到。索性将layui最新版本的tree.js源代码从gitee上copy下来进行修改。
tree.js变更点
setCheckbox方法变更位置:
getChecked方法变更位置:
不加此处逻辑,当获取选中状态时,无法获取子级
修改后的代码已上传到github
使用
前台:
var tree = layui.tree;
window.orgTreeList = function(){
$.ajax({
type: 'POST',
url: '/plugin/admin/organ/queryAllOrganTree',
data : {},
success:function(data){
tree.render({
elem: '#organTree',
data: data,
showCheckbox: true,
checkChirld: false,
id: 'id'
});
//设置初始化选中
var selectedOrg = $("#orgIds").val();
tree.setChecked('id', selectedOrg.split(","));
}
});
}
后台递归:
public Object queryAllOrganTree() {
UsualReturnDTO dto = new UsualReturnDTO();
dto.setCode(0);
List<ZtreeNodeBo> organs = organService.findAllOrgan();
List<ZtreeNodeBo> orgTree = this.eachList(organs);
return orgTree;
}
private List<ZtreeNodeBo> eachList(List<ZtreeNodeBo> allOrgs) {
List<ZtreeNodeBo> orgTree = new ArrayList<ZtreeNodeBo>();
for(ZtreeNodeBo org : allOrgs) {
if (StringUtils.isEmpty(org.getpId())) {
org = bulidTree(allOrgs,org);
orgTree.add(org);
}
}
return orgTree;
}
private ZtreeNodeBo bulidTree(List<ZtreeNodeBo> allOrgs,ZtreeNodeBo node) {
List<ZtreeNodeBo> children = new ArrayList<ZtreeNodeBo>();
for(int i=0;i < allOrgs.size(); i++) {
if(node.getId().equals(allOrgs.get(i).getpId())){
children.add(bulidTree(allOrgs,allOrgs.get(i)));
}
}
node.setChildren(children);
return node;
}
/**
* ztree 节点
*/
public class ZtreeNodeBo {
private String id;
private String pId;
private String name;
private String title;
private String open;
private String checked;
private List<ZtreeNodeBo> children;
}