apzl_leasing/WebContent/Frame/page/tools/dialog/SelectTreeDialog.jsp
2018-06-03 22:26:41 +08:00

244 lines
6.2 KiB
Plaintext

<%@page import="com.amarsoft.are.util.json.JSONEncoder"%>
<%@page import="com.amarsoft.awe.ow.*"%>
<%@ page language="java" contentType="text/html; charset=GBK" %>
<%@ include file="/IncludeBegin.jsp"%>
<%
String sDoNo = CurPage.getParameter("DoNo");
String sParameters = CurPage.getParameter("Parameters");
String sSortField = CurPage.getParameter("SortField");
String sTextField = CurPage.getParameter("TextField");
String sReturnFields = CurPage.getParameter("ReturnFields");
boolean isMulti = "true".equals(CurPage.getParameter("IsMulti"));
boolean onlyLeaf = "true".equals(CurPage.getParameter("OnlyLeaf"));
ASObjectModel doTemp = new ASObjectModel(sDoNo, null);
ASObjectWindow dwTemp = new ASObjectWindow(CurPage, doTemp);
dwTemp.readonly = true;
dwTemp.setParameters(sParameters);
List<BizObject> bos = dwTemp.getResultList(null);
ObjectTree tree = new ObjectTree(doTemp.getModelName());
tree.getStorys().addAll(ObjectTreeManager.genTreeNodes(bos, null, sTextField, null, sSortField, null, null, null, null, sSortField, isMulti?new String[0]:null));
if(isMulti) ObjectTreeManager.setTreeNodesMulti(tree.getStorys(), onlyLeaf);
%>
<style>
body {
height: 100%;
overflow: hidden;
}
#HtmlTree {
height: 100%;
width: 100%;
overflow: auto;
}
.htmltreesearch {
background: #fff;
border: 1px solid #aaa;
position: absolute;
bottom: 5px;
right: 18px;
width: auto;
display: none;
}
.htmltreesearch input, .htmltreesearch input:focus {
width: 80px;
border: none;
}
.htmltree li .mark {
background: #b7dcf4;
}
</style>
<body><div id="HtmlTree"></div></body>
<script type="text/javascript">
var tree = new HtmlTree(document.getElementById("HtmlTree"), <%=JSONEncoder.encode(tree)%>);
var fields = "<%=sReturnFields%>".split("@");
function doSure(){
var nodes;
if(<%=isMulti%>){
nodes = tree.getChecked();
if(nodes.length == 0){
alert("请勾选节点!");
return;
}
}else{
nodes = [];
if(!tree.getClick()){
alert("请选择节点!");
return;
}
if(<%=onlyLeaf%> && tree.getClick().getChildren().length > 0){
alert("请选择节点细项!");
return;
}
nodes.push(tree.getClick());
}
var sStr = "";
for(var i = 0; i < nodes.length; i++){
if(i != 0) sStr += "~";
for(var j = 0; j < fields.length; j++){
if(j != 0) sStr += "@";
sStr += nodes[i].getAttribute(fields[j]);
}
}
parent.closeDialog(sStr);
}
// 设置初始化选择
setTimeout(function(){
// [attr1values, attr2values,...,attrNvalues]
var initSelected = "<%=CurPage.getParameter("ASelected")%>".split("@");
if(!initSelected || initSelected.length != fields.length) return;
if(!<%=isMulti%>){
var operations = new Array();
for(var i = 0; i < fields.length; i++){
operations.push({
key : fields[i],
operate : "equals",
value : initSelected[i]
});
}
var nodes = tree.getNodesByAttrs(operations);
if(nodes.length > 0) nodes[0].click();
}else{
var is0 = initSelected[0].split(",");
var values = new Array(is0);
for(var i = 0; i < is0.length; i++){
var operations = new Array();
for(var j = 0; j < fields.length; j++){
if(values.length < j + 1)
values.push(initSelected[j].split(","));
operations.push({
key : fields[j],
operate : "equals",
value : values[j][i]
});
}
var nodes = tree.getNodesByAttrs(operations);
for(var j = 0; j < nodes.length; j++){
nodes[j].check();
}
}
var nodes = tree.getChecked();
if(nodes.length > 0){
nodes[nodes.length - 1].mark("mark", true);
mark = nodes[nodes.length - 1];
}
}
}, 100);
// 增加快捷查找/选择功能 以下代码可以不要,不影响选择器的使用
if(tree.getChildren().length <= 3) for(var i = 0; i < tree.getChildren().length; i++){
tree.getChildren()[i].expand();
}
<%if(!isMulti){%>
tree.NodeOnDblclick = function(){
doSure();
};
<%}%>
var time = null, mark = null;
$(document).keydown(function(e){
if(e.ctrlKey && e.shiftKey){
if(e.keyCode == 70){ // Ctrl+Shift+F 显示查询框
var now = new Date();
if(time && now.getTime() - time.getTime() < 1000) return;
time = now;
showSearch();
return false;
}else if(e.keyCode == 80){ // Ctrl+Shift+P 聚焦到当前点击节点
var click = tree.getClick();
if(!click) return;
click.focus();
return false;
}
return;
}
var node = mark;
if(!node) node = tree.getClick();
if(e.keyCode == 37 && node){ // ←
node.collapse();
return false;
}else if(e.keyCode == 38){ // ↑
var up;
if(!node){
up = tree.getIndexNode(0);
}else{
up = node.getUp();
}
if(!up) return;
if(node) node.unmark("mark");
up.mark("mark", true);
mark = up;
return false;
}else if(e.keyCode == 39 && node){ // →
node.expand();
return false;
}else if(e.keyCode == 40){ // ↓
var down;
if(!node){
down = tree.getIndexNode(0);
}else{
down = node.getDown();
}
if(!down) return;
if(node) node.unmark("mark");
down.mark("mark", true);
mark = down;
return false;
}
});
function showSearch(){
if(!showSearch.input){
showSearch.input = $("<input/>").appendTo($("<div class='htmltreesearch'></div>").appendTo(document.body)).after("<span></span>");
var nodes = null, index = 0;
showSearch.input.keyup(function(e){
if(e.keyCode != 13){
nodes = null;
return;
}
});
showSearch.input.keypress(function(e){
if(!(e.ctrlKey && e.shiftKey))
AsLink.stopEvent(e);
if(e.keyCode == 27){
showSearch.input.blur().parent().hide();
if(mark) mark.focus();
return;
}
if(e.keyCode != 13){
nodes = null;
return;
}
if(!nodes){
index = 0;
nodes = tree.getRoot().getNodes(showSearch.input.val());
}
if(index == nodes.length) index = 0;
if(nodes.length > 0){
if(mark && nodes[index] != mark)
mark.unmark("mark");
nodes[index].mark("mark", true);
mark = nodes[index];
index++;
}
showSearch.input.next().text(index+"/"+nodes.length);
showSearch.input.focus();
});
}
var div = showSearch.input.parent();
if(div.is(":visible")){
div.hide();
showSearch.input.blur();
}else{
div.show();
showSearch.input.focus();
}
}
</script>
<%@ include file="/IncludeEnd.jsp"%>