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>
继续阅读与本文标签相同的文章
呼吁行业良性竞争,万邑通全力赋能跨境电商货通全球
统一通信的要素
-
Flink Checkpoint 问题排查实用指南
2026-05-18栏目: 教程
-
[集合]AbstractCollection源码解析(2)
2026-05-18栏目: 教程
-
月活用户达7.55亿,阿里淘系如何在后流量时代引爆用户增长?
2026-05-18栏目: 教程
-
再议 C 语言中的指针与数组(4)
2026-05-18栏目: 教程
-
Apache Flink 进阶入门(二):Time 深度解析
2026-05-18栏目: 教程
