iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >LayUI下拉树TreeSelect的使用解读
  • 977
分享到

LayUI下拉树TreeSelect的使用解读

LayUI下拉树TreeSelect使用LayUI下拉树TreeSelect 2022-11-13 18:11:01 977人浏览 安东尼
摘要

目录显示效果图js渲染样式代码后台响应加载下拉树数据方法(有详细注释)Dept实体类代码JSON数据格式JSON数据树形结构在实际开发中是很长用的一种结构。最近写了一个LayUI的小

树形结构在实际开发中是很长用的一种结构。最近写了一个LayUI的小案例,其中用到了TreeSelect,这里整理一下。

TreeSelect官网地址:https://fly.layui.com/extend/treeSelect/

显示效果图

因为TreeSelect不是LayUI官方开发的,而是第三方基于LayUI开发的,所以需要先用Layui引入一下文件。

之后页面只需要引入LayUI的CSS和JS就可以了。

页面给一个标签,用于显示TreeSelect下拉树选中的内容值,获取选中值时,直接获取标签值,就是选中的内容值。

<input type="text" name="parentId" id="tree2" lay-filter="tree2" class="layui-input" />

JS渲染样式代码

<script type="text/javascript">
    layui.use(["treeSelect", "fORM", "tree"], function () {
        var form = layui.form;
        var tree = layui.tree;
        var treeSelect = layui.treeSelect;
        treeSelect.render({
            // 选择器
            elem: '#tree',
            // 异步获取下拉树需要显示的数据
            data: 'dept/treeSelect',
            // 异步加载方式:get/post,默认get
            type: 'post',
            // 占位符
            placeholder: '上级菜单',
            // 是否开启搜索功能:true/false,默认false
            search: true,
            // 一些可定制的样式
            style: {
                folder: {
                    enable: true
                },
                line: {
                    enable: true
                }
            },
            // 点击节点回调
            click: function(d){
                //console.log(d);
            },
            // 加载完成后的回调函数
            success: function (d) {
                //console.log(d);
                // 选中节点,根据id筛选,一般修改时会有默认选中状态,可以在这里设置
                //treeSelect.checknode('tree', 2);
                //console.log($('#tree').val());
                // 获取zTree对象,可以调用zTree方法
                //var treeObj = treeSelect.zTree('tree');
                // console.log(treeObj);
                // 刷新树结构
                //treeSelect.refresh('tree');
            }
        });
    });
 
</script>

后台响应加载下拉树数据方法(有详细注释)

@RequestMapping(value="/treeSelect")
@ResponseBody
//这里写的,新增和修改数据请求都是同一个方法,如果是修改会传递一个修改对象的id
public Object treeSelect(Integer id) {
    Sort sort = Sort.by("idx");    //排序
    Specification<Dept> spec = buildSpec1();    //查询条件,查询父节点为null的元素
    List<Dept> list = deptService.findAll(spec,sort);    //查询,Dept为实体类
    return buildTree(list, id);    //转换为treeSelect指定的JSON数据格式方法
}
 
private Object buildTree(List<Dept> list, Integer id) {
    List<HashMap<String, Object>> result=new ArrayList<>();
    for (Dept dept : list) {
        if(dept.getId() != id) {    //判断如果是修改的话,修改的节点及下级节点不显示,也就不加载
            HashMap<String, Object> node=new HashMap<>();
            node.put("id", dept.getId());    //节点id
            node.put("name",dept.getName());    //节点数据名称
            node.put("open", false);        //是否展开
            node.put("checked", false);    //是否选中,前台也可以设置是否选中
            if(dept.getChildren().size() != 0) {    //如果下级节点不为空,
                node.put("children",buildTree(dept.getChildren(), id));    //递归加载下级节点
            }
            result.add(node);
        }
    }
    return result;
}
 
public Specification<Dept> buildSpec1() {
    Specification<Dept> specification = new Specification<Dept>() {
 
        private static final long serialVersionUID = 1L;
 
        @Override
        public Predicate toPredicate(Root<Dept> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
            HashSet<Predicate> rules=new HashSet<>();
            Predicate parent = cb.isNull(root.get("parent"));  //查询父节点为null的元素
            rules.add(parent);
            return cb.and(rules.toArray(new Predicate[rules.size()]));
        }
 
    };
    return specification;
}

Dept实体类代码

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.data.annotation.CreatedBy;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
 
@Entity
public class Dept {
    private Integer id;
    private String name;    //部门名称
    private String deptName;    //部门负责人
    private String phone;   //电话号
    private String number;  //编号
    private double idx;     //排序
    @JsonIgnore
    private Dept parent;
    @JsonIgnore
    private List<Dept> children = new ArrayList<>();
 
    @Id
    @GeneratedValue
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getDeptName() {
        return deptName;
    }
 
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
 
    public String getPhone() {
        return phone;
    }
 
    public void setPhone(String phone) {
        this.phone = phone;
    }
 
    public String getNumber() {
        return number;
    }
 
    public void setNumber(String number) {
        this.number = number;
    }
 
    public double getIdx() {
        return idx;
    }
 
    public void setIdx(double idx) {
        this.idx = idx;
    }
 
    @ManyToOne
    @CreatedBy
    public Dept getParent() {
        return parent;
    }
 
    public void setParent(Dept parent) {
        this.parent = parent;
    }
 
    @OneToMany(cascade=CascadeType.ALL,mappedBy="parent")
    @OrderBy(value="idx")
    public List<Dept> getChildren() {
        return children;
    }
 
    public void setChildren(List<Dept> children) {
        this.children = children;
    }
 
    public Dept(Integer id, String name, String deptName, String phone, String number, double idx, Dept parent, List<Dept> children) {
        this.id = id;
        this.name = name;
        this.deptName = deptName;
        this.phone = phone;
        this.number = number;
        this.idx = idx;
        this.parent = parent;
        this.children = children;
    }
 
    public Dept(Integer id) {
        this.id = id;
    }
 
    public Dept() {
    }
}

这里后台持久层是使用的Spring-Data-Jpa,如果你是用的其他持久层框架,只要返回的JSON数据格式一样就可以了。

JSON数据格式

JSON数据

[
	{
		"children": [	//下级节点
			{
				"children": [
					{
						"name": "测试",
						"checked": false,
						"id": 30,
						"open": false
					}, {
						"name": "开发",
						"checked": false,
						"id": 31,
						"open": false
					}, {
						"children": [
							{
								"name": "测试节点",
								"checked": false,
								"id": 36,
								"open": false
							}
						],
						"name": "测试",
						"checked": false,
						"id": 32,
						"open": false
					}
				],
				"name": "技术部",
				"checked": false,
				"id": 2,
				"open": false
			}, {
				"name": "财务部",
				"checked": false,
				"id": 19,
				"open": false
			}
		],
		"name": "某某公司",	//节点内容
		"checked": false,	//是否选中
		"id": 1,		//id
		"open": false	//是否展开
	}, {
		"name": "测试",
		"checked": false,
		"id": 33,
		"open": false
	}
]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: LayUI下拉树TreeSelect的使用解读

本文链接: https://www.lsjlt.com/news/170149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • LayUI下拉树TreeSelect的使用解读
    目录显示效果图JS渲染样式代码后台响应加载下拉树数据方法(有详细注释)Dept实体类代码JSON数据格式JSON数据树形结构在实际开发中是很长用的一种结构。最近写了一个LayUI的小...
    99+
    2022-11-13
    LayUI下拉树 TreeSelect使用 LayUI下拉树TreeSelect
  • LayUI—tree树形结构的使用解析
    目录先看一下显示的效果图案例对应的实体类Dept完整代码如下树形结构在实际开发中很长用到,比如部门管理,权限菜单等。因为用树形结构来展示会显的很清晰明了。 最近写了一个个人博客小项目...
    99+
    2022-11-13
    LayUI树形表格 treetable使用 树形表格treetable
  • Spinner(下拉列表)的使用
      目录 一、介绍: Spinner相关属性: 二、例子 例子一:(含适配器) 完整代码: 例子二(不含适配器): 完整代码: 一、介绍:         安卓的Spinner是一个下拉菜单控件,通常用于选择一组选项中的一个。它可以为...
    99+
    2023-10-26
    android java android studio
  • 如何解决layui 三级联动下拉框更新时回显的问题
    小编给大家分享一下如何解决layui 三级联动下拉框更新时回显的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近接触lay...
    99+
    2024-04-02
  • FastAdmin 动态下拉(SelectPage)的使用
    1、视图层定义一个input 其中,data-source 为数据源 URL 2、编写控制器 public function list(){ $this->model = (new Manys...
    99+
    2023-09-06
    php
  • 使用layui监听器监听select下拉框,事件绑定不成功怎么办
    这篇文章主要为大家展示了“使用layui监听器监听select下拉框,事件绑定不成功怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“使用layui监听器监听...
    99+
    2024-04-02
  • 如何使用ajax解决下拉框的onchange问题
    这篇文章将为大家详细讲解有关如何使用ajax解决下拉框的onchange问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 即在触发地区下拉...
    99+
    2024-04-02
  • 使用ajax怎么异步读取后台传递回下拉选项的值
    这篇文章将为大家详细讲解有关使用ajax怎么异步读取后台传递回下拉选项的值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。jsp中html相关代码<tr>  &...
    99+
    2023-06-08
  • excel下拉菜单使用问题怎么解决
    本篇内容主要讲解“excel下拉菜单使用问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“excel下拉菜单使用问题怎么解决”吧!excel下拉菜单使用教程:首先需要打开可编辑的exce...
    99+
    2023-06-30
  • Android下拉列表框Spinner使用方法详解
    本文实例为大家分享了Android下拉列表框Spinner的基本使用,供大家参考,具体内容如下 文件目录如下: 在activity_main.xml中布局一个下拉列表框Spinne...
    99+
    2024-04-02
  • ListView下拉列表控件使用方法详解
    本文实例为大家分享了ListView下拉列表控件的使用方法,供大家参考,具体内容如下 ListView列表控件 列表的显示需要三个元素: view 用来显示数据的view适配器 用来...
    99+
    2024-04-02
  • 大数据中异步下拉树使用要求及实际操作是什么
    这篇文章的内容主要围绕大数据中异步下拉树使用要求及实际操作是什么进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!问题:  &nbs...
    99+
    2023-06-04
  • Vue下拉选择框Select组件使用详解(二)
    本文实例为大家分享了Vue下拉选择框Select组件的使用方法,供大家参考,具体内容如下 效果图如下: 下拉组件宽度可自定义设置以下属性: ①下拉组件宽度width属性,...
    99+
    2024-04-02
  • Vue中select下拉框的默认选中项的三种情况解读
    目录vue select下拉框的默认选中项的三种情况第一种是option的值写在HTML中第二种是option 选项内容写在JS中的第三种是option 选项内容vue中select...
    99+
    2023-05-20
    Vue中select下拉框 select的默认选中项 select下拉框的默认选中项
  • Vue下拉选择框Select组件使用详解(一)
    本文实例为大家分享了Vue下拉选择框Select组件的使用方法,供大家参考,具体内容如下 效果图如下:  展开图如下: ①创建组件Select.vue:预设两...
    99+
    2024-04-02
  • 如何解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
    这篇文章主要介绍如何解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先:引入需要的css和js<l...
    99+
    2024-04-02
  • 如何解决layui使用layui-icon出现默认图标的问题
    这篇文章主要介绍了如何解决layui使用layui-icon出现默认图标的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先上图:后台代码...
    99+
    2024-04-02
  • Bootstrap中下拉菜单类的使用方法
    这篇文章主要介绍Bootstrap中下拉菜单类的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!下拉菜单是一种非常常见的效果,用于展示可切换、有关联的一组链接,它可以节省网页排版空间,使网页布局简洁有序。Boo...
    99+
    2023-06-14
  • 如何正确的使用bootstrap下拉菜单
    如何正确的使用bootstrap下拉菜单?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。单按钮下拉菜单在按钮中做一些改变,就可以作为下拉菜单。<div&nb...
    99+
    2023-06-14
  • Android第三方开源下拉框NiceSpinner使用详解
    android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Android原生提供的下拉框Spinner所提供的设计样式,而改用自定制或者第三方设计的下拉框Spinner。...
    99+
    2023-05-30
    android 下拉框 spinner
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作