package com.fsl.lcp.demo.vo;
 
import java.util.List;
 
import com.faster .jackson.databind.annotation.JsonSerialize;
import com.faster .jackson.databind.ser.std.ToStringSerializer;
 
public class TreeVo {
    
    @JsonSerialize(using=ToStringSerializer.class)
    private Long id;
    
    private String text;
    
    private Boolean expanded=false;
 
    private Boolean checked=false;
    
    private List<TreeVo> items;
 
    public Boolean getChecked() {
        return checked;
    }
 
    public void setChecked(Boolean checked) {
        this.checked = checked;
    }
 
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    public String getText() {
        return text;
    }
 
    public void setText(String text) {
        this.text = text;
    }
 
    public Boolean getExpanded() {
        return expanded;
    }
 
    public void setExpanded(Boolean expanded) {
        this.expanded = expanded;
    }
 
    public List<TreeVo> getItems() {
        return items;
    }
 
    public void setItems(List<TreeVo> items) {
        this.items = items;
    }
 
    
    
    
}
package com.fsl.lcp.demo.service.impl;
 
import com.fsl.lcp.demo.dto.SalesActivityDemo;
import com.fsl.lcp.demo.service.ISalesActivityDemoService;
import com.fsl.lcp.demo.vo.TreeVo;
import com.hand.hap.hr.dto.HrOrgUnit;
import com.hand.hap.hr.mapper.OrgUnitMapper;
import com.hand.hap.system.service.impl. ServiceImpl;
import org.spring work.beans.factory.annotation.Autowired;
import org.spring work.stereotype.Service;
import org.spring work.transaction.annotation.Transactional;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
@Service
@Transactional(rollbackFor = Exception.class)
public class SalesActivityDemoServiceImpl extends ServiceImpl<SalesActivityDemo> implements ISalesActivityDemoService{
 
    
    
    
    @Autowired
    OrgUnitMapper  orgUnitMapper;
    
    
    @Override
    public List<TreeVo> unitTreeGet() {
        
        List<HrOrgUnit> selectAllUnitAndCharge = orgUnitMapper.selectAllUnitAndCharge(new HrOrgUnit());
        List<TreeVo> treeList=new ArrayList<TreeVo>();
        //根节点
        List<HrOrgUnit> collect = selectAllUnitAndCharge.stream().filter((e)->null==e.getParentId()).collect(Collectors.toList());
        collect.stream().forEach((e)->{
            TreeVo vo=new TreeVo();
            vo.setId(e.getUnitId());
            vo.setText(e.getName());
            vo.setExpanded(true);
            treeList.add(vo);
        });
        //子节点
        getChildNodes(selectAllUnitAndCharge, treeList);
        return treeList;
    }
 
    
    public void getChildNodes(List<HrOrgUnit> unitsAll,List<TreeVo> treeList) {
        treeList.stream().forEach((a) -> {
            List<TreeVo> childNodes = new ArrayList<>();
            unitsAll.forEach((e) -> {
                if (null != e.getParentId()) {
                    if (e.getParentId().equals(a.getId())) {
                        //子节点-添加
                        TreeVo  child=new TreeVo();
                        child.setId(e.getUnitId());
                        child.setText(e.getName());
                        if(a.getExpanded()){
                            child.setExpanded(a.getExpanded());
                        }
                        if(a.getChecked()){
                            child.setChecked(a.getChecked());
                        }
                        if(e.getName().equals(\"办公室\")){
                            child.setChecked(true);
                        }
                        childNodes.add(child);
                    }
                }
            });
            
            if(childNodes.size()>0){
                a.setItems(childNodes);
                getChildNodes(unitsAll, childNodes);
            }
        });
    }
    
    
}
 
<#include \"../include/header.html\">
<body>
< src=\"${ .contextPath}/lib/kendoui/js/jquery.min.js\"></ >
 
< src=\"${ .contextPath}/lib/kendoui/js/jszip.min.js\"></ >
<!--< src=\"${ .contextPath}/resources/console.js\"></ >-->
< src=\"${ .contextPath}/resources/kendo.all.min.js\"></ >
< href=\"${ .contextPath}/resources/kendo.common.min.css\" rel=\"stylesheet\" type=\"text/css\"/>
< href=\"${ .contextPath}/resources/kendo.rtl.min.css\" rel=\"stylesheet\" type=\"text/css\"/>
< href=\"${ .contextPath}/resources/kendo.default.min.css\" rel=\"stylesheet\" type=\"text/css\"/>
< href=\"${ .contextPath}/resources/kendo.default.mobile.min.css\" rel=\"stylesheet\" type=\"text/css\"/>
< href=\"${ .contextPath}/resources/examples-offline.css\" rel=\"stylesheet\" type=\"text/css\"/>
 
 
 
 
 
<div id=\"treeList\">
    <div class=\"demo-section k-content\">
        <div id=\"dialog\">
            <div class=\"dialogContent\">
                <input id=\"filterText\" type=\"text\" placeholder=\"请输入\" />
                <div class=\"selectAll\">
                    <input type=\"checkbox\" id=\"chbAll\" class=\"k-checkbox\" =\"chbAll ()\" />
                    <label class=\"k-checkbox-label\" for=\"chbAll\">所有</label>
                    <span id=\"result\">未选择</span>
                </div>
                <div id=\"treeview\"></div>
            </div>
        </div>
        <select id=\"multiselect\"></select>
        <br />
        <button id=\"openWindow\" class=\"k-primary\">请选择</button>
    </div>
    < >
        var dataTree;
        var myDataSource;
        $.ajax({
            type: \"get\",
            url: \"${ .contextPath}/lcp/sales/activity/demo/audit/line/getTreeUnit\",
            /* data: kendo.stringify(data), */
            dataType: \"json\",
            contentType: \'application/json\',
            success: function (datas) {
              
                if(datas){
                    dataTree=datas;
                    myDataSource = new kendo.data.HierarchicalDataSource({
                        data: dataTree
                    });
 
                    $(\"#treeview\").kendoTreeView({
                        checkboxes: {
                            checkChildren: true
                        },
                        dataSource: myDataSource,
                        check: onCheck
                    });
                }
            }
        });
 
 
 
        $(\"#multiselect\").kendoMultiSelect({
            dataTextField: \"text\",
            dataValueField: \"id\"
        });
 
 
 
        $(document).ready(function () {
            var dialog = $(\"#dialog\");
            var multiSelect = $(\"#multiselect\").data(\"kendoMultiSelect\");
            $(\"#openWindow\").kendoButton();
 
            multiSelect.readonly(true);
 
            $(\"#openWindow\").click(function () {
 
                dialog.data(\"kendoDialog\").open();
                $(this).fadeOut();
                var nodes = $(\"#treeview\").data(\"kendoTreeView\").dataSource.view();
                var checkedNodes = [];
                getCheckedNodes(nodes, checkedNodes);
                setMessage(checkedNodes.length);
            });
 
 
 
 
 
 
 
 
 
            dialog.kendoDialog({
                width: \"400px\",
                : \"组织架构\",
                visible: false,
                actions: [
                    {
                        text: \'取消\',
                        primary: false,
                        action: onCancelClick
                    },
                    {
                        text: \'确定\',
                        primary: true,
                        action: onOkClick
                    }
                ],
                close: onClose
            }).data(\"kendoDialog\").close();
        });
 
        function onCancelClick(e) {
            e.sender.close();
        }
 
        function onOkClick(e) {
            debugger;
            var checkedNodes = [];
            var treeView = $(\"#treeview\").data(\"kendoTreeView\");
 
            getCheckedNodes(treeView.dataSource.view(), checkedNodes);
            populateMultiSelect(checkedNodes);
 
            e.sender.close();
        }
 
        function onClose() {
            $(\"#openWindow\").fadeIn();
        }
 
        function populateMultiSelect(checkedNodes) {
            var multiSelect = $(\"#multiselect\").data(\"kendoMultiSelect\");
            multiSelect.dataSource.data([]);
 
            var multiData = multiSelect.dataSource.data();
            if (checkedNodes.length > 0) {
                var array = multiSelect.value().slice();
                for (var i = 0; i < checkedNodes.length; i++) {
                    multiData.push({ text: checkedNodes[i].text, id: checkedNodes[i].id });
                    array.push(checkedNodes[i].id.toString());
                }
 
                multiSelect.dataSource.data(multiData);
                multiSelect.dataSource.filter({});
                multiSelect.value(array);
            }
        }
 
        function checkUncheckAllNodes(nodes, checked) {
            debugger;
            for (var i = 0; i < nodes.length; i++) {
                nodes[i].set(\"checked\", checked);
 
                if (nodes[i].hasChildren) {
                    checkUncheckAllNodes(nodes[i].children.view(), checked);
                }
            }
        }
 
        function chbAll () {
            debugger;
            var checkedNodes = [];
            var treeView = $(\"#treeview\").data(\"kendoTreeView\");
            var isAllChecked = $(\'#chbAll\').prop(\"checked\");
 
            checkUncheckAllNodes(treeView.dataSource.view(), isAllChecked)
 
            if (isAllChecked) {
                setMessage($(\'#treeview input[type=\"checkbox\"]\').length);
            }
            else {
                setMessage(0);
            }
        }
 
        function getCheckedNodes(nodes, checkedNodes) {
 
            var node;
 
            for (var i = 0; i < nodes.length; i++) {
                node = nodes[i];
 
                if (node.checked) {
                    checkedNodes.push({ text: node.text, id: node.id });
                }
 
                if (node.hasChildren) {
                    getCheckedNodes(node.children.view(), checkedNodes);
                }
            }
        }
 
        function onCheck() {
            var checkedNodes = [];
            var treeView = $(\"#treeview\").data(\"kendoTreeView\");
 
            getCheckedNodes(treeView.dataSource.view(), checkedNodes);
            setMessage(checkedNodes.length);
        }
 
        function setMessage(checkedNodes) {
            var message;
 
            if (checkedNodes > 0) {
                message =  \"已选择:\"+checkedNodes ;
            }
            else {
                message = \"未选择\";
            }
 
            $(\"#result\").html(message);
        }
 
        $(\"#filterText\").keyup(function (e) {
            var filterText = $(this).val();
 
            if (filterText !== \"\") {
                $(\".selectAll\").css(\"visibility\", \"hidden\");
 
                $(\"#treeview .k-group .k-group .k-in\").closest(\"li\").hide();
                $(\"#treeview .k-group\").closest(\"li\").hide();
                $(\"#treeview .k-group .k-group .k-in:contains(\" + filterText + \")\").each(function () {
                    $(this).parents(\"ul, li\").each(function () {
                        $(this).show();
                    });
                });
                $(\"#treeview .k-group .k-in:contains(\" + filterText + \")\").each(function () {
                    $(this).parents(\"ul, li\").each(function () {
                        $(this).show();
                    });
                });
            }
            else {
                $(\"#treeview .k-group\").find(\"li\").show();
                $(\".selectAll\").css(\"visibility\", \"visible\");
            }
        });
 
 
        var removeUnit = function(text,id){
 
            var multiSelect = $(\"#multiselect\").data(\"kendoMultiSelect\");
            var multiData = multiSelect.dataSource.data();
            var array = multiSelect.value().slice();
            multiData.remove({ text: text ,id: id});
            var index = array.indexOf(id.toString());
            if (index > -1) {
                array.splice(index, 1);
            }
 
            multiSelect.dataSource.data(multiData);
            multiSelect.dataSource.filter({});
            multiSelect.value(array);
 
                 debugger;
            var nodes = $(\"#treeview\").data(\"kendoTreeView\").dataSource.view();
 
            checkedToFalse(nodes,text,id);
            debugger;
            var checkedNodes = [];
            getCheckedNodes(nodes, checkedNodes);
            setMessage(checkedNodes.length);
            $(\'#chbAll\').prop(\"checked\",false);
 
        }
 
 
 
        function dealfalse(nodes, checked) {
               /* nodes.set(\"checked\", checked);
                if (nodes.hasChildren) {
                    dealfalse(nodes.children.view(), checked);
                }*/
 
 
            for (var i = 0; i < nodes.length; i++) {
                nodes[i].set(\"checked\", checked);
 
                if (nodes[i].hasChildren) {
                    checkUncheckAllNodes(nodes[i].children.view(), checked);
                }
            }
 
        }
 
 
        function checkedToFalse(treeView,text,id){
            var node;
            for (var i = 0; i < treeView.length; i++) {
                node = treeView[i];
                if (node.text==text&&node.id==id) {
                    debugger;
                    var nodes=new Array();
                    nodes[0]=node;
                    dealfalse(nodes,false);
                }
 
                if (node.hasChildren) {
                    checkedToFalse(node.children.view(), text,id);
                }
            }
        }
 
 
 
    </ >
    <style>
        html .k-dialog .k-window- bar {
            padding-left: 17px;
        }
 
        .k-dialog .k-content {
            padding: 17px;
        }
 
        #filterText {
            width: 100%;
            box-sizing: border-box;
            padding: 6px;
            border-radius: 3px;
            border: 1px solid #d9d9d9;
        }
 
        .selectAll {
            margin: 17px 0;
        }
 
        #result {
            color: #9ca3a6;
            float: right;
        }
 
        #treeview {
            height: 300px;
            overflow-y: auto;
            border: 1px solid #d9d9d9;
        }
 
        #openWindow {
            min-width: 180px;
        }
    </style>
</div>
</body>
</html>

收藏 打印