欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

LayUI下拉樹TreeSelect的使用解讀

 更新時(shí)間:2022年10月26日 09:21:06   作者:小馬 同學(xué)  
這篇文章主要介紹了LayUI下拉樹TreeSelect的使用解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

樹形結(jié)構(gòu)在實(shí)際開發(fā)中是很長用的一種結(jié)構(gòu)。最近寫了一個(gè)LayUI的小案例,其中用到了TreeSelect,這里整理一下。

TreeSelect官網(wǎng)地址:https://fly.layui.com/extend/treeSelect/

顯示效果圖

因?yàn)門reeSelect不是LayUI官方開發(fā)的,而是第三方基于LayUI開發(fā)的,所以需要先用Layui引入一下文件。

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

頁面給一個(gè)標(biāo)簽,用于顯示TreeSelect下拉樹選中的內(nèi)容值,獲取選中值時(shí),直接獲取標(biāo)簽值,就是選中的內(nèi)容值。

<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',
            // 異步獲取下拉樹需要顯示的數(shù)據(jù)
            data: 'dept/treeSelect',
            // 異步加載方式:get/post,默認(rèn)get
            type: 'post',
            // 占位符
            placeholder: '上級菜單',
            // 是否開啟搜索功能:true/false,默認(rèn)false
            search: true,
            // 一些可定制的樣式
            style: {
                folder: {
                    enable: true
                },
                line: {
                    enable: true
                }
            },
            // 點(diǎn)擊節(jié)點(diǎn)回調(diào)
            click: function(d){
                //console.log(d);
            },
            // 加載完成后的回調(diào)函數(shù)
            success: function (d) {
                //console.log(d);
                // 選中節(jié)點(diǎn),根據(jù)id篩選,一般修改時(shí)會有默認(rèn)選中狀態(tài),可以在這里設(shè)置
                //treeSelect.checkNode('tree', 2);
                //console.log($('#tree').val());
                // 獲取zTree對象,可以調(diào)用zTree方法
                //var treeObj = treeSelect.zTree('tree');
                // console.log(treeObj);
                // 刷新樹結(jié)構(gòu)
                //treeSelect.refresh('tree');
            }
        });
    });
 
</script>

后臺響應(yīng)加載下拉樹數(shù)據(jù)方法(有詳細(xì)注釋)

@RequestMapping(value="/treeSelect")
@ResponseBody
//這里寫的,新增和修改數(shù)據(jù)請求都是同一個(gè)方法,如果是修改會傳遞一個(gè)修改對象的id
public Object treeSelect(Integer id) {
    Sort sort = Sort.by("idx");    //排序
    Specification<Dept> spec = buildSpec1();    //查詢條件,查詢父節(jié)點(diǎn)為null的元素
    List<Dept> list = deptService.findAll(spec,sort);    //查詢,Dept為實(shí)體類
    return buildTree(list, id);    //轉(zhuǎn)換為treeSelect指定的JSON數(shù)據(jù)格式方法
}
 
private Object buildTree(List<Dept> list, Integer id) {
    List<HashMap<String, Object>> result=new ArrayList<>();
    for (Dept dept : list) {
        if(dept.getId() != id) {    //判斷如果是修改的話,修改的節(jié)點(diǎn)及下級節(jié)點(diǎn)不顯示,也就不加載
            HashMap<String, Object> node=new HashMap<>();
            node.put("id", dept.getId());    //節(jié)點(diǎn)id
            node.put("name",dept.getName());    //節(jié)點(diǎn)數(shù)據(jù)名稱
            node.put("open", false);        //是否展開
            node.put("checked", false);    //是否選中,前臺也可以設(shè)置是否選中
            if(dept.getChildren().size() != 0) {    //如果下級節(jié)點(diǎn)不為空,
                node.put("children",buildTree(dept.getChildren(), id));    //遞歸加載下級節(jié)點(diǎn)
            }
            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"));  //查詢父節(jié)點(diǎn)為null的元素
            rules.add(parent);
            return cb.and(rules.toArray(new Predicate[rules.size()]));
        }
 
    };
    return specification;
}

Dept實(shí)體類代碼

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;    //部門負(fù)責(zé)人
    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數(shù)據(jù)格式一樣就可以了。

JSON數(shù)據(jù)格式

JSON數(shù)據(jù)

[
	{
		"children": [	//下級節(jié)點(diǎn)
			{
				"children": [
					{
						"name": "測試",
						"checked": false,
						"id": 30,
						"open": false
					}, {
						"name": "開發(fā)",
						"checked": false,
						"id": 31,
						"open": false
					}, {
						"children": [
							{
								"name": "測試節(jié)點(diǎn)",
								"checked": false,
								"id": 36,
								"open": false
							}
						],
						"name": "測試",
						"checked": false,
						"id": 32,
						"open": false
					}
				],
				"name": "技術(shù)部",
				"checked": false,
				"id": 2,
				"open": false
			}, {
				"name": "財(cái)務(wù)部",
				"checked": false,
				"id": 19,
				"open": false
			}
		],
		"name": "某某公司",	//節(jié)點(diǎn)內(nèi)容
		"checked": false,	//是否選中
		"id": 1,		//id
		"open": false	//是否展開
	}, {
		"name": "測試",
		"checked": false,
		"id": 33,
		"open": false
	}
]

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Summernote實(shí)現(xiàn)圖片上傳功能的簡單方法

    Summernote實(shí)現(xiàn)圖片上傳功能的簡單方法

    下面小編就為大家?guī)硪黄猄ummernote實(shí)現(xiàn)圖片上傳功能的簡單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • 如何改進(jìn)javascript代碼的性能

    如何改進(jìn)javascript代碼的性能

    在web應(yīng)用中,應(yīng)用了大量的Javascript,因此代碼的執(zhí)行效率變得尤為重要,也就是性能!為了提高JS的性能,我們應(yīng)該掌握一些基本的性能優(yōu)化方式,并讓它成為我們書寫代碼的習(xí)慣。下面介紹幾種優(yōu)化性能的方式,很多初學(xué)者甚至有經(jīng)驗(yàn)的開發(fā)者也會忽略,希望對你有幫助
    2015-04-04
  • JS實(shí)現(xiàn)快速的導(dǎo)航下拉菜單動(dòng)畫效果附源碼下載

    JS實(shí)現(xiàn)快速的導(dǎo)航下拉菜單動(dòng)畫效果附源碼下載

    本文給大家分享一個(gè)帶有變形動(dòng)畫特效的下拉導(dǎo)航菜單特效,該導(dǎo)航菜單在菜單項(xiàng)之間切換時(shí),下拉菜單會快速的根據(jù)菜單內(nèi)容的大小來動(dòng)態(tài)變形,顯示合適的下拉菜單大小,效果非常棒。對導(dǎo)航下拉菜單代碼感興趣的朋友可以參考下本文
    2016-11-11
  • PNG背景在不同瀏覽器下的應(yīng)用

    PNG背景在不同瀏覽器下的應(yīng)用

    論壇中kayeun在我的版面發(fā)了一個(gè)問題,關(guān)于PNG透明背景在FIREFOX瀏覽器下顯示異常。 這里談一下不同瀏覽器內(nèi),如何應(yīng)用PNG圖片作背景。
    2009-06-06
  • 深入理解事件冒泡(Bubble)和事件捕捉(capture)

    深入理解事件冒泡(Bubble)和事件捕捉(capture)

    下面小編就為大家?guī)硪黄钊肜斫馐录芭?Bubble)和事件捕捉(capture)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • javascript 動(dòng)態(tài)創(chuàng)建表格的2種方法總結(jié)

    javascript 動(dòng)態(tài)創(chuàng)建表格的2種方法總結(jié)

    本文給大家總結(jié)了2種使用javascript動(dòng)態(tài)創(chuàng)建表格的方法,非常簡單實(shí)用,小伙伴們自己對比下看看哪種更適合你呢,一般本人是使用第一種的。
    2015-03-03
  • JS延遲加載的幾種方式小結(jié)

    JS延遲加載的幾種方式小結(jié)

    JS延遲加載,也就是等頁面加載完成之后再加載 JavaScript 文件,JS延遲加載有助于提高頁面加載速度,本文小編給大家介紹了JS延遲加載的幾種方式小結(jié),感興趣的小伙伴跟著小編一起來看看吧
    2024-08-08
  • JavaScript鼠標(biāo)事件,點(diǎn)擊鼠標(biāo)右鍵,彈出div的簡單實(shí)例

    JavaScript鼠標(biāo)事件,點(diǎn)擊鼠標(biāo)右鍵,彈出div的簡單實(shí)例

    下面小編就為大家?guī)硪黄狫avaScript鼠標(biāo)事件,點(diǎn)擊鼠標(biāo)右鍵,彈出div的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • 不到200行 JavaScript 代碼實(shí)現(xiàn)富文本編輯器的方法

    不到200行 JavaScript 代碼實(shí)現(xiàn)富文本編輯器的方法

    這篇文章主要介紹了不到200行 JavaScript 代碼實(shí)現(xiàn)富文本編輯器的方法,需要的朋友可以參考下
    2018-01-01
  • 微信小程序的注冊頁面包含倒計(jì)時(shí)驗(yàn)證碼、獲取用戶信息

    微信小程序的注冊頁面包含倒計(jì)時(shí)驗(yàn)證碼、獲取用戶信息

    本文通過實(shí)例代碼給大家介紹了微信小程序的注冊頁面包含倒計(jì)時(shí)驗(yàn)證碼、獲取用戶信息的相關(guān)知識,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-05-05

最新評論