244 lines
6.2 KiB
Plaintext
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"%> |