jstree 中文帮助文档:http://blog.youkuaiyun.com/qq_24472595/article/details/70053863#search
创建后的没有层次的树如下
树的源码和树的结构如下:
@At
@Ok("json")
@RequiresPermissions("o2omarket.ProcurementCar")
public Object tree(@Param("pid") String pid) {
// List<Cms_channel> list = cmsChannelService.query(Cnd.where("parentId", "=", Strings.sBlank(pid)).asc("location").asc("path"));
List<Shop> list = null;
if (pid != null && pid.toLowerCase().indexOf("shopsearch") != -1) {
if (pid.split(",") != null && pid.split(",").length > 1){
SqlExpressionGroup e1 = Cnd.exps("fdShopName", "LIKE", "%" + pid.split(",")[1]+"%").and("1", "=", "1");
list = shopService.query(Cnd.where(e1));
}
else
list = shopService.query(Cnd.where("1","=","1"));
}
else
list = shopService.query(Cnd.where("1","=","1"));
List<Map<String, Object>> tree = new ArrayList<>();
for (Shop shop : list) {
Map<String, Object> obj = new HashMap<>();
obj.put("id", shop.getFdShopId());
obj.put("text", shop.getFdShopName());
tree.add(obj);
}
return tree;
}
<%
layout("/layouts/platform.html"){
%>
<script src="${base!}/assets/plugins/ueditor/ueditor.config.js"></script>
<script src="${base!}/assets/plugins/ueditor/ueditor.all.min.js"></script>
<header class="header navbar bg-white shadow">
<div class="btn-group tool-button">
<a id="fh" class="btn btn-primary navbar-btn" href="${base}/platform/o2omarket/procurementCar" data-pjax><i class="ti-angle-left"></i> 返回</a>
</div>
<div class="pull-right">
<div class="btn-group tool-button">
<button class="btn btn-primary navbar-btn" type="button" id="save"> 保存</button>
</div>
</div>
</header>
<div class="content-wrap">
<div class="wrapper" style="min-height:500px;height: 100%;">
<form id="addForm" role="form" class="form-horizontal parsley-form" data-parsley-validate
action="${base}/platform/o2omarket/procurementCar/addDo" method="post">
<div class="col-lg-12">
<div class="form-group has-feedback">
<label for="storeId" class="col-sm-2 control-label">商家</label>
<div class="col-sm-8">
<div class="input-group">
<input id="storeId" type="text" class="form-control" placeholder="请选择商家" disabled
value="<%if(!isEmpty(channel)){%>${channel.name}<%}%>" />
<span class="input-group-btn">
<button type="button" class="btn btn-primary" data-toggle="modal"
data-target="#dialogSelect"><i class="ti-plus"></i>选择
</button>
</span>
</div>
<input type="hidden" name="storeId" value="<%if(!isEmpty(channel)){%>${channel.id}<%}%>">
</div>
</div>
<div class="form-group">
<label for="type" class="col-sm-2 control-label">车型</label>
<div class="col-sm-2">
<select class="form-control" name="vehicleTypeId" id="vehicleTypeId" onchange="getTypeName()">
<option value="1" selected = "selected">轻型货车</option>
<option value="2">中型货车</option>
<option value="3">重型货车</option>
</select>
</div>
<input id="vehicleTypeName" name="vehicleTypeName" type="hidden">
</div>
<div class="form-group">
<label for="indicatorsName" class="col-sm-2 control-label">车牌</label>
<div class="col-sm-4">
<input type="text" id="licensePlate" class="form-control" name="licensePlate" data-parsley-required="true"
value="" placeholder="车牌号码">
</div>
</div>
<input type="hidden" name="regUserId" value="${userId!}">
<!-- <div class="form-group">
<label for="at" class="col-sm-2 control-label">时间</label>
<div class="col-sm-8 input-group date form_datetime " style="padding-left: 16px;padding-right: 16px;" data-date="1979-09-16T05:25:07Z" data-date-format="dd MM yyyy - HH:ii p" data-link-field="createAt">
<input type="text" size="16" readonly class="form-control" value="${@date.getDateTime()}" data-parsley-required="true">
<span class="input-group-addon"><span class="glyphicon glyphicon-remove"></span></span>
<span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>
</div>
<input type="hidden" id="createAt" name="createAt" value="${@date.getDateTime()}" />
</div> -->
<div class="form-group">
<label for="content" class="col-sm-2 control-label">备注</label>
<div class="col-sm-8">
<textarea id="note" name="note" style="width:100%;height:200px;"></textarea>
</div>
</div>
</div>
</form>
</div>
</div>
<div id="dialogSelect" class="modal fade bs-modal-sm" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">选择商家</h4>
<!-- Here add by William at 2018年3月1日11:15:26 ,where click "add shop" button,add searching function -->
<div>
<input id="searchShopId" type="text" class="form-control"
placeholder="请要搜索的商家名称" />
<span class="input-group-btn" style="padding:10px 0px">
<button id="searchShopBt" type="button" class="btn btn-primary" >
查询
</button>
</span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取
消</button>
<button type="button" class="btn btn-primary" onclick="select()">确认选择</button>
</div>
</div>
<div class="modal-body">
<div class="row">
<div class="col-xs-12">
<div id="jsTree" class="demo"></div>
</div>
</div>
</div>
<div class="modal-footer" id="bootom_bts">
<button type="button" class="btn btn-default" data-dismiss="modal">取 消</button>
<button type="button" class="btn btn-primary" onclick="select()">确认选择</button>
</div>
</div>
</div>
</div>
<script language="JavaScript">
/* Here add by William at 2018年3月1日11:15:26 ,where click "add shop" button,add searching function */
$(document).ready(function() {
searching();
});
function searching() {
$("#searchShopBt").click(function() {
var tree = $("#jsTree");
tree.jstree({ 'core': { data: null } });
tree.jstree({ 'plugins': [ "wholerow", "json_data" ] });
var inputVal = $("#searchShopId").val();
//shopSearch , id 进行搜索
var url = (inputVal === null || inputVal === undefined || inputVal === '') ? "${base}/platform/o2omarket/procurementCar/tree": "${base}/platform/o2omarket/procurementCar/tree?pid=" + ("shopSearch," + inputVal);
$.get(url,function(data,status){
//数据为空的话,提示没有这些搜索记录
if ((data === null || data === undefined || data === '') || (data instanceof Array && data.length == 0)) {
Toast.error("["+inputVal + "],搜索不到记录");
return;
}
//记录数少的话,隐藏底部确认按钮
if (data.length < 20) $('#bootom_bts').css({"display":"none"});
else $('#bootom_bts').css({"display":"block"});
tree.jstree(true).settings.core.data = data;
tree.jstree(true).refresh();
});
});
}
/* Here add by William at 2018年3月1日11:15:26 ,where click "add shop" button,add searching function */
function clearFile() {
$("#img").html("");
$("#queue").html("");
$("#fileUrl").val("");
}
function initTreeView() {
$("#jsTree").jstree(
{
plugins : [ "wholerow", "json_data" ],
core : {
data : {
dataType : "json",
url : function(node) {
return node.id === "#" ? "${base}/platform/o2omarket/procurementCar/tree"
: "${base}/platform/o2omarket/procurementCar/tree?pid="
+ node.id
}
},
multiple : false
}
}).on("dblclick.jstree", function(node) {
select();
});
}
//选择父菜单
function select() {
var tree = $.jstree.reference("#jsTree");
var node = tree.get_selected(true);
$("#addForm #storeId").val(node[0].text);
$("#addForm input[name='storeId']").val(node[0].id);
$("#dialogSelect").modal("hide");
}
var ue;
$(document).ready(function() {
setTimeout(function() {
ue = new baidu.editor.ui.Editor();
ue.render('note');
}, 500);
myForm.init();
$('.form_datetime').datetimepicker({
language : 'zh-CN',
format : 'yyyy-mm-dd hh:ii:ss',
weekStart : 1,
todayBtn : 1,
autoclose : 1,
todayHighlight : 1,
startView : 2,
forceParse : 0,
showMeridian : 1
});
initTreeView();
$("#save").on("click", function() {
$("#footer_content").val(ue.getContent());
$('#addForm').submit();
});
$('#addForm').ajaxForm({
dataType : 'json',
beforeSubmit : function(arr, form, options) {
sublime.showLoadingbar($(".main-content"));
},
success : function(data, statusText, xhr, form) {
if (data.code == 0) {
Toast.success(data.msg);
$("#fh").trigger("click");
} else {
Toast.error(data.msg);
}
sublime.closeLoadingbar($(".main-content"));
}
});
});
function getTypeName() {
var vehicleTypeName = $('#vehicleTypeId option:selected').text();//选中的文本
$("#vehicleTypeName").val(vehicleTypeName);
}
</script>
<%}%>
创建有层次的树如下:
<% layout("/layouts/platform.html"){ %>
<script src="${base!}/assets/plugins/ueditor/ueditor.config.js"></script>
<script src="${base!}/assets/plugins/ueditor/ueditor.all.min.js"></script>
<header class="header navbar bg-white shadow">
<div class="btn-group tool-button">
<a id="fh" class="btn btn-primary navbar-btn"
href="${base}/platform/o2omarket/monthWarranty" data-pjax><i
class="ti-angle-left"></i> 返回</a>
</div>
<div class="pull-right">
<div class="btn-group tool-button">
<button class="btn btn-primary navbar-btn" type="button" id="save">
保存</button>
</div>
</div>
</header>
<div class="content-wrap">
<div class="wrapper" style="min-height: 500px; height: 100%;">
<form id="addForm" role="form" class="form-horizontal parsley-form"
data-parsley-validate
action="${base}/platform/o2omarket/monthWarranty/addDo" method="post">
<div class="col-lg-12">
<div class="form-group has-feedback">
<label for="storeId" class="col-sm-2 control-label">商家</label>
<div class="col-sm-8">
<div class="input-group">
<input id="storeId" type="text" class="form-control"
placeholder="请选择商家" disabled value="" /> <span
class="input-group-btn">
<button type="button" class="btn btn-primary"
data-toggle="modal" data-target="#dialogSelect">
<i class="ti-plus"></i>选择
</button>
</span>
</div>
<input type="hidden" name="storeId" value="">
</div>
</div>
<div class="form-group">
<label for="indicatorsName" class="col-sm-2 control-label">车型品牌</label>
<div class="col-sm-4">
<input type="text" id="vehicleBrand" class="form-control"
name="vehicleBrand" data-parsley-required="true" value=""
placeholder="车品牌">
</div>
</div>
<div class="form-group">
<label for="indicatorsName" class="col-sm-2 control-label">车牌</label>
<div class="col-sm-4">
<input type="text" id="licensePlate" class="form-control"
name="licensePlate" data-parsley-required="true" value=""
placeholder="车牌号码">
</div>
</div>
<input type="hidden" name="regUserId" value="${userId!}">
<div class="form-group">
<label for="at" class="col-sm-2 control-label">开始时间</label>
<div class="col-sm-8 input-group date form_datetime "
style="padding-left: 16px; padding-right: 16px;"
data-date="1979-09" data-date-format="yyyy-mm"
data-link-field="startDate">
<input type="text" size="16" readonly class="form-control"
value="${@date.getDate()}" data-parsley-required="true">
<span class="input-group-addon"><span
class="glyphicon glyphicon-remove"></span></span> <span
class="input-group-addon"><span
class="glyphicon glyphicon-th"></span></span>
</div>
<input type="hidden" id="startDate" name="startDate"
value="${@date.getDate()}" />
</div>
<div class="form-group">
<label for="type" class="col-sm-2 control-label">月数</label>
<div class="col-sm-2">
<select class="form-control" name="months" id="months">
<option value="1">1个月</option>
<option value="2">2个月</option>
<option value="3">3个月</option>
<option value="4">4个月</option>
<option value="5">5个月</option>
<option value="6">6个月</option>
<option value="7">7个月</option>
<option value="8">8个月</option>
<option value="9">9个月</option>
<option value="10">10个月</option>
<option value="11">11个月</option>
<option value="12">12个月</option>
</select>
</div>
</div>
<div class="form-group">
<label for="content" class="col-sm-2 control-label">备注</label>
<div class="col-sm-8">
<textarea id="note" name="note"
style="width: 100%; height: 200px;"></textarea>
</div>
</div>
</div>
</form>
</div>
</div>
<div id="dialogSelect" class="modal fade bs-modal-sm" tabindex="-1"
role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button>
<h4 class="modal-title">选择商家</h4>
<!-- Here add by William at 2018年3月1日11:15:26 ,where click "add shop" button,add searching function -->
<div>
<input id="searchShopId" type="text" class="form-control"
placeholder="请要搜索的商家名称" />
<span class="input-group-btn" style="padding:10px 0px">
<button id="searchShopBt" type="button" class="btn btn-primary" >
查询
</button>
</span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取
消</button>
<button type="button" class="btn btn-primary" onclick="select()">确认选择</button>
</div>
</div>
<div class="modal-body">
<div class="row">
<div class="col-xs-12">
<div id="jsTree" class="demo"></div>
</div>
</div>
</div>
<div class="modal-footer" id="bootom_bts">
<button type="button" class="btn btn-default" data-dismiss="modal">取
消</button>
<button type="button" class="btn btn-primary" onclick="select()">确认选择</button>
</div>
</div>
</div>
</div>
<script language="JavaScript">
/* Here add by William at 2018年3月1日11:15:26 ,where click "add shop" button,add searching function */
$(document).ready(function() {
searching();
});
function searching() {
$("#searchShopBt").click(function() {
var tree = $("#jsTree");
tree.jstree({ 'core': { data: null } });
tree.jstree({ 'plugins': [ "wholerow", "json_data" ] });
var inputVal = $("#searchShopId").val();
//shopSearch , id 进行搜索
var url = (inputVal === null || inputVal === undefined || inputVal === '') ? "${base}/platform/o2omarket/monthWarranty/tree?pid=-99": "${base}/platform/o2omarket/monthWarranty/tree?pid=" + ("shopSearch," + inputVal)+"&site=''";
$.get(url,function(data,status){
//数据为空的话,提示没有这些搜索记录
if ((data === null || data === undefined || data === '') || (data instanceof Array && data.length == 0)) {
Toast.error("["+inputVal + "],搜索不到记录");
return;
}
//记录数少的话,隐藏底部确认按钮
if (data.length < 20) $('#bootom_bts').css({"display":"none"});
else $('#bootom_bts').css({"display":"block"});
tree.jstree(true).settings.core.data = data;
tree.jstree(true).refresh();
});
});
}
/* Here add by William at 2018年3月1日11:15:26 ,where click "add shop" button,add searching function */
function clearFile() {
$("#img").html("");
$("#queue").html("");
$("#fileUrl").val("");
}
function initTreeView() {
$("#jsTree")
.jstree(
{
plugins : [ "wholerow", "json_data" ],
core : {
data : {
dataType : "json",
url : function(node) {
//alert(JSON.stringify(node));
var txt_site="";//$("#txt_site").val();
return node.id === "#" ? "${base}/platform/o2omarket/monthWarranty/tree"
: "${base}/platform/o2omarket/monthWarranty/tree?pid="
+ node.id+"&site="+txt_site;
}
},
multiple : false
}
}).on("dblclick.jstree", function(node) {
select();
});
}
//选择父菜单
function select() {
var tree = $.jstree.reference("#jsTree");
var node = tree.get_selected(true);
$("#addForm #storeId").val(node[0].text);
$("#addForm input[name='storeId']").val(node[0].id);
$("#dialogSelect").modal("hide");
}
var ue;
$(document).ready(function() {
setTimeout(function() {
ue = new baidu.editor.ui.Editor();
ue.render('note');
}, 500);
myForm.init();
$('.form_datetime').datetimepicker({
language : 'zh-CN',
format : 'yyyy-mm',
weekStart : 1,
todayBtn : 1,
autoclose : 1,
todayHighlight : 1,
startView : 4,
minView : 3,
forceParse : 1,
showMeridian : 1
});
initTreeView();
$("#save").on("click", function() {
$("#footer_content").val(ue.getContent());
$('#addForm').submit();
});
$('#addForm').ajaxForm({
dataType : 'json',
beforeSubmit : function(arr, form, options) {
sublime.showLoadingbar($(".main-content"));
},
success : function(data, statusText, xhr, form) {
if (data.code == 0) {
Toast.success(data.msg);
$("#fh").trigger("click");
} else {
Toast.error(data.msg);
}
sublime.closeLoadingbar($(".main-content"));
}
});
$("#txt_site").change(function(){
//var txt_site=$("#txt_site").val();
$('#jsTree').jstree(true).search($('#txt_site').val());
});
});
</script>
<%}%>
@At
@Ok("json")
@RequiresPermissions("o2omarket.monthWarranty")
public Object tree(@Param("pid") String pid ,@Param("site") String site) {
List<Map<String, Object>> tree = new ArrayList<>();
// List<Cms_channel> list =
// cmsChannelService.query(Cnd.where("parentId", "=",
// Strings.sBlank(pid)).asc("location").asc("path"));
// List<Shop> list = shopService.query(Cnd.where("1","=","1"));
if (StringUtils.isBlank(pid)) {
List<BU_Floor> list = bu_FloorService.query(Cnd.NEW().asc("fdFlooSort"));
for (BU_Floor shop : list) {
Map<String, Object> obj = new HashMap<>();
obj.put("id", shop.getFdFlooId());
obj.put("text", shop.getFdFlooName());
obj.put("children", true);
tree.add(obj);
}
} else {
Cnd cnd = null;
//-99无意义,仅为空字符串查询全部数据而已 modify by william
if (!pid.equalsIgnoreCase("-99"))
cnd=Cnd.where("fdShopFloor", "=", pid);
else
cnd=Cnd.where("1","=" ,"1");
//cnd.desc("licensePlate");
if(StringUtils.isNotBlank(site))
{
cnd=cnd.and("fdShopNum","like" ,"%"+site+"%");
}
/*List<View_MonthWarrantyShop> list = viewMonthWarrantyShopService
.query(cnd.desc("licensePlate").asc("fdShopNum"));*/
List<View_MonthWarrantyShop> list = null;
if (pid != null && pid.toLowerCase().indexOf("shopsearch") != -1) {
if (pid.split(",") != null && pid.split(",").length > 1 && !StringUtils.isEmpty(pid.split(",")[1])){
SqlExpressionGroup e1 = Cnd.exps("fdShopName", "LIKE", "%" + pid.split(",")[1]+"%").and("1", "=", "1");
list = viewMonthWarrantyShopService.query(Cnd.where(e1));
}
else
list = viewMonthWarrantyShopService.query(cnd.desc("licensePlate").asc("fdShopNum"));
}
else
list = viewMonthWarrantyShopService.query(cnd.desc("licensePlate").asc("fdShopNum"));
// modify by william
for (View_MonthWarrantyShop shop : list) {
Map<String, Object> obj = new HashMap<>();
obj.put("id", shop.getFdShopId());
obj.put("text", shop.getFdShopName()
+ (StringUtils.isBlank(shop.getFdShopNum()) ? "" : ("(" + shop.getFdShopNum() + ")"))
+ (StringUtils.isBlank(shop.getLicensePlate()) ? "" : ("[" + shop.getLicensePlate() + "]")));
obj.put("children", false);
tree.add(obj);
}
}
return tree;
}