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

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"%>