一、

最近使用layui做了个项目,由于合同额小,也不需要太多繁琐复杂的处理,于是前端选用的layui。但是用到layui的树时,layui对树支持的不太好,后来找到了Dtree这个第三方插件。

二、

官网:http://www.wisdomelon.com/DTreeHelper/

里面有很多示例和使用帮助,我要实现的是,点一个input标签,然后打开一个树页面,选取一个节点,然后把选中的节点信息返回到input标签里。废话不多说,只说我是怎么用的。

三、

  1. 首先,下载dtree,如下图,放在项目静态文件目录
  2. 页面引入css,如下,你会看到,没有引入js,是因为,js可以用layui直接加载,后面提供方法;
  3. js,加载dtree,并且初始化树
layui.extend({dtree : basePath + '/pack/dtree/dtree' // {/}的意思即代表采用自有路径,即不跟随 base 路径
}).use([ 'dtree', 'layer', 'jquery' ], function() {var dtree = layui.dtree, layer = layui.layer, $ = layui.jquery;var DTree = dtree.render({// obj: $(layero).find("#openTree1"),// 如果直接用elem加载不出来,则可以使用这个方式加载jquery的DOMelem : "#demoTree",url : basePath+ "/ach/common/initOrgTree",method : 'POST',initLevel: 2,  // 指定初始展开节点级别cache: false  // 当取消节点缓存时,则每次加载子节点都会往服务器发送请求});// 绑定节点的双击dtree.on("nodedblclick('demoTree')", function(obj) {var index = parent.layer.getFrameIndex(window.name); //获取窗口索引parent.setObject(obj.param);parent.layer.close(index);});$('#commit').on('click', function() {var obj = dtree.getNowParam("demoTree");var index = parent.layer.getFrameIndex(window.name); //获取窗口索引parent.setObject(obj);parent.layer.close(index);});
});
  1. 后台代码
    controller:接收一个参数,就是当前节点id,来实现异步加载树。
 @RequestMapping(value = "/initOrgTree", method = RequestMethod.POST)@ResponseBodypublic TreeResDto initOrgTree(String nodeId) {TreeResDto res = new TreeResDto();TreeStatusDto status = new TreeStatusDto();status.setCode("200");status.setMessage("成功");res.setStatus(status);List<TreeNodeDto> data = new ArrayList<TreeNodeDto>();data = dtreeService.getData(nodeId);res.setData(data);return res;}

service:

@Service("dtreeService")
@Lazy
@Transactional(readOnly = false)
public class DtreeServiceImpl implements DtreeService{@Autowiredprivate DtreeDao dtreeDao;@Overridepublic List<TreeNodeDto> getData(String id) {List<TreeNodeDto> resList = new ArrayList<TreeNodeDto>();if(StringUtils.isBlank(id)){// 获取根节点Map<String, Object> rootMap = dtreeDao.getRootNode();TreeNodeDto rootNode = new TreeNodeDto();rootNode.setId((String) rootMap.get("C_HID"));rootNode.setTitle((String) rootMap.get("C_NAME"));rootNode.setBasicData(rootMap);rootNode.setParentId("-1");rootNode.setIconClass("dtree-icon-home1");rootNode.setLast(false);List<Map<String, Object>> childrenList = dtreeDao.getChildrenNode((String)rootMap.get("C_HID"));List<TreeNodeDto> childList = new ArrayList<TreeNodeDto>();for (Map<String, Object> cMap : childrenList) {TreeNodeDto child = new TreeNodeDto();child.setId((String) cMap.get("C_HID"));child.setTitle((String) cMap.get("C_NAME"));child.setBasicData(cMap);child.setParentId((String) cMap.get("parentId"));child.setLast(false); // child.setLast((Boolean) cMap.get("hashChild"));// 判断是否为公司if("0".equals(cMap.get("C_TYPE"))){child.setIconClass("dtree-icon-xiangmuxiaoxi");}else{child.setIconClass("dtree-icon-fenzhijigou");}childList.add(child);}rootNode.setChildren(childList);resList.add(rootNode);}else{// 循环根节点查找子节点List<Map<String, Object>> childrenList =  dtreeDao.getChildrenNode(id);for (Map<String, Object> cMap : childrenList) {TreeNodeDto child = new TreeNodeDto();child.setId((String) cMap.get("C_HID"));child.setTitle((String) cMap.get("C_NAME"));child.setBasicData(cMap);child.setParentId((String) cMap.get("parentId"));child.setLast(false); // child.setLast((Boolean) cMap.get("hashChild"));// 判断是否为公司if("0".equals(cMap.get("C_TYPE"))){child.setIconClass("dtree-icon-xiangmuxiaoxi");}else{child.setIconClass("dtree-icon-fenzhijigou");}resList.add(child);}}return resList;}
}

dao:(这个可以忽略不看,因为low的让我自己都觉得丢人。。。)

@Repository
public class DtreeDaoImpl implements DtreeDao{private JdbcOperator jdbcOperator = JdbcOperator.getInstance();@Overridepublic Map<String, Object> getRootNode() {StringBuilder sql = new StringBuilder();sql.append("select * ");sql.append("from TB_ORG_ORGUNIT ");sql.append("where C_HID = '7f304de353c358egcfg267f023db8f25' ");Map<String, Object> res = this.jdbcOperator.queryForMap(sql.toString());return res;}@Overridepublic List<Map<String, Object>> getChildrenNode(String id) {StringBuilder sql = new StringBuilder();sql.append(" SELECT org_.C_OID,org_.C_NAME,org_.C_TYPE,org_.C_CODE,org_.C_EST_DATE,org_.C_LEVEL,");sql.append(" org_.C_LOCATION_HID,org_.C_STATUS,org_.C_BEGIN_DATE,org_.C_END_DATE,org_.C_HID,relationTable.C_SUPERIOR_HID parentId ");sql.append(" FROM TB_ORG_ORGUNIT org_, TB_ORG_UNITRELATION relationTable ");sql.append(" WHERE org_.C_HID = relationTable.C_ORG_HID ");sql.append(" AND relationTable.C_SUPERIOR_HID = :id ");//'7f304de353c358egcfg267f023db8f25'sql.append(" AND relationTable.C_BEGIN_DATE <= :now ");sql.append(" AND relationTable.C_END_DATE >= :now ");sql.append(" AND org_.C_BEGIN_DATE <= :now  ");sql.append(" AND org_.C_END_DATE >= :now  ");sql.append(" AND org_.C_STATUS =1   ");sql.append(" AND relationTable.C_STATUS =1  ");sql.append(" ORDER BY relationTable.C_DISPLAYNO,org_.C_EST_DATE ");Map<String, Object> map = new HashMap<String, Object>();map.put("id", id);map.put("now", new Date());List<Map<String, Object>> res = this.jdbcOperator.queryForMapList(sql.toString(), map);return res;}
}

dto:重要因为,就相当于,我把插件需要的那些关键名,封成javabean,返回给前端,这样,就不需要再一个个转了,可以直接拿过去用,另外需要的可根据自己的需要再新加。

public class TreeNodeDto{/** 节点ID*/private String id;/** 上级节点ID*/private String parentId;/** 节点名称*/private String title;/** 是否最后一级节点*/private Boolean last;/** 自定义图标class*/private String iconClass;/** 表示用户自定义需要存储在树节点中的数据*/private Object basicData;/** 复选框集合*/private List<CheckArr> checkArr = new ArrayList<CheckArr>();// 子节点private List<TreeNodeDto> children = new ArrayList<TreeNodeDto>();(get,set方法...)
}

四、

效果:

ps:当前显示的是我根据当前登录人设置的默认。。。

嗯嗯,大概就是这样的效果了,双击,或者点击选中一个点确认选择,都是可以的

五、

综上,个人蛮喜欢layui的总体风格的,这个dtree也是非常的契合layui,总之,这个项目用起来还是挺爽的。
反正我爽了,你们要不要去爽一下?!哈哈

Layui第三方Dtree的使用——简单记录相关推荐

  1. python 绘图脚本系列简单记录

    简单记录平时画图用到的python 便捷小脚本 1. 从单个文件输入 绘制坐标系图 #!/usr/bin/python # coding: utf-8 import matplotlib.pyplot ...

  2. ubuntu bind9 配置简单记录

    ubuntu bind9 配置简单记录 ubuntu版本:Ubuntu 12.04.2 bind9安装:apt-get install bind9 bind9配置文件目录:/etc/bind bind ...

  3. 简单记录一下fabric版本1.4的环境搭建,

    简单记录一下fabric版本1.4的环境搭建,运行环境为Ubuntu18.04,其中一些内容是根据官方文档整理的,如有错误欢迎批评指正. 本文只介绍最简单的环境搭建方法,具体的环境搭建解析在这里深入解 ...

  4. oracle 9i 手工建库,简单记录Oracle 9i数据库手工建库过程

    简单记录Oracle 9i数据库手工建库过程Oracle 9i手工建库 By Oracle老菜 今天客户要用oracle 9.2.0.5,aix 6.1已经不支持了,只好从别的数据库把软件拷贝过来重编 ...

  5. mysql signal函数_MySQL:简单记录信号处理

    码版本:5.7.29 简单记录信号如何生效的.poll收到信号后如何中断后如何处理的,需要确认. --- ###一 初始化信号处理方式,设置信号的处理的处理方式,屏蔽某些信号,并且继承到子线程(pth ...

  6. 简单记录双系统安装Ububtu22.04

    简单记录双系统安装Ububtu22.04 tag: #Linux #Ubuntu 双系统安装Ububtu22.04 设备:R9000P 2021 系统:win11 + ubuntu22.04 1.制作 ...

  7. 关于majaro安装后的配置,简单记录 机型华硕FZ53v

    关于majaro安装后的配置,简单记录 机型华硕FZ53v 关于majaro安装后的配置,简单记录 机型华硕FZ53v 关于majaro安装后的配置,简单记录 机型华硕FZ53v ##关于v2ray配 ...

  8. 简单记录下几家公司的面试经历(Java一年经验)

    一年经验,记录下最近几家公司的面试经历. 1.深圳缇铭科技有限公司 1)先让自我介绍,讲一下最近的项目 根据项目提问,比如: redis你是如何部署的?你的code是直接套用他们的模板去编写,还是自己 ...

  9. git版本回退简单记录

    简单记录git版本回退的命令,参考的是这篇文章1 首先查看以前存档的版本: git log 1. 知道要回退的版本和现在的版本差了多少代 回退上一代版本(1个以前) git reset –hard H ...

最新文章

  1. 库存事务处理现有量检查
  2. 激光雷达与相机—哪种更适合自动驾驶?
  3. ruby require的使用
  4. 《说服力——让你的PPT会说话》读书笔记02
  5. 关于逆元的概念、用途和可行性的思考(附51nod 1013 和 51nod 1256)
  6. TD-SCDMA智能天线波束赋形能力的讨论
  7. html5页面主题,HTML5页面开发笔记
  8. python链表和树实验报告_数据结构树和森林实验报告
  9. java 内省 反射_如何使用反射/内省来维护程序?
  10. debian php mysql 包_debian php mysql
  11. 台达ms300变频器使用手册中文_台达ms300变频器说明书.doc
  12. bp神经网络算法matlab程序,bp神经网络的matlab实现
  13. 塔防类游戏性能优化分享
  14. 航班查询接口调用介绍
  15. gcc/g++搜索路径
  16. 位运算常用技巧分析汇总(算法进阶)
  17. Python 文件IO操作
  18. 职业情商修炼的3523法
  19. 马来西亚理科大学计算机专业雅思,【马来西亚理科大学本科雅思成绩要求】 - 马来西亚留学联盟...
  20. 【git】git 命令行删除远程仓库

热门文章

  1. 通过 Tensorflow 的基础类,构建卷积神经网络,用于花朵图片的分类
  2. 奇葩商业运营案例精选(1)
  3. 程序员搞笑日常来袭,承包你一周的笑点!
  4. 如何与Nintendo Switch上的朋友一起玩Mario Kart(在线和面对面)
  5. c语言,学生信息管理
  6. 开机卡logope引导不了_TCL MS901主板卡logo故障案例
  7. css 背景图片自适应全屏
  8. 培训机构出来的iOS学员怎么了?
  9. mockjs语法详解
  10. Java 获取当前时间周数,及根据周数获取周的起止时间