257 lines
6.3 KiB
Plaintext
257 lines
6.3 KiB
Plaintext
<%@page import="com.amarsoft.app.base.util.XMLHelper"%>
|
|
<%@page import="com.amarsoft.app.base.businessobject.*"%>
|
|
<%@page import="com.amarsoft.are.util.json.JSONEncoder"%>
|
|
<%@ page language="java" contentType="text/html; charset=GBK" %>
|
|
<%@ include file="/IncludeBegin.jsp"%>
|
|
<%
|
|
String xmlFile = CurPage.getParameter("XMLFile");
|
|
String xmlTags = CurPage.getParameter("XMLTags");
|
|
String keys = CurPage.getParameter("Keys");//Ö÷¼ü
|
|
String names = CurPage.getParameter("Names");//Ãû³Æ
|
|
String treeName = CurPage.getParameter("TreeName");//Ê÷ͼÃû³Æ
|
|
|
|
|
|
String sReturnFields = CurPage.getParameter("ReturnFields");
|
|
boolean isMulti = "true".equals(CurPage.getParameter("IsMulti"));
|
|
boolean onlyLeaf = "true".equals(CurPage.getParameter("OnlyLeaf"));
|
|
|
|
ObjectTree tree = new ObjectTree(treeName);
|
|
|
|
List<BusinessObject> list = XMLHelper.getBusinessObjectList(xmlFile, xmlTags, keys);
|
|
BusinessObjectHelper.sortBusinessObject(list, keys);
|
|
for(BusinessObject l:list)
|
|
{
|
|
TreeStory story = new TreeStory(l.getString(names));
|
|
story.setTips(l.getString(keys));
|
|
for(String key:l.getAttributeIDArray())
|
|
{
|
|
story.getAttributes().put(key, l.getString(key));
|
|
}
|
|
tree.getStorys().add(story);
|
|
}
|
|
|
|
ObjectTreeManager.packTreeNodes(tree.getStorys(), keys);
|
|
|
|
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"%> |