在这个解决方案当中,我对原
xg_delayth
的方案
做了一些改进,让首节点也可以通过点击传递数据。其中修改的地方用红字标出。
<%@
page
contentType
=
"text/html; charset=gb2312"
language
=
"java"
import
=
"java.sql.*"
errorPage
=
""
%>
<%@
page
import
=
"system.*"
%>
<%@
page
import
=
"pub.*"
%>
<%
int
x=Check.CheckPage(request,
"admin_admindepart_list"
);
String Error=
""
;
if
(x==1){
Error=
"<script>alert('
你已掉线,需要重新登陆
!');top.location.href='../login.jsp'</script>"
;
}
else
{
if
(x==2){
Error=
"<script>alert('
你无权进入该页面
!');history.back();</script>"
;
}
}
%>
<%=
Error
%>
<%
if
(x!=0){
return
;
}
%>
<!
DOCTYPE
HTML
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=gb2312"
>
<
link
href
=
"../css/putong.css"
type
=
"text/css"
rel
=
"stylesheet"
>
<
title
>
无标题文档
</
title
>
</
head
>
<
script
>
// JavaScript Document
//***********************************************************************************************************************
//--- Function: the define of tree's node object
//--- Return:
//--- Parameters:
//--- ANodeID: the nodeID of the treeNode
//--- ANodeInnerHtml: view in the node_div
//--- ANodeParentID: the nodeID of the parentNode,if it is the root node the ANodeParentID is "-1"
//--- ANodeDivID: the id of the node_div
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
xg_TreeNode(ANodeID,ANodeInnerHtml,ANodeParentID,ANodeDivID)
{
this
.nodeID=ANodeID;
this
.nodeInnerHtml=ANodeInnerHtml;
this
.nodeParentID=ANodeParentID;
this
.nodeDivID=ANodeDivID;
//-- if 0 not view the children else if 1 view the children
this
.nodeIsView=0;
}
//***********************************************************************************************************************
//--- Function: the define of xg_Tree
//--- Return:
//--- Parameters:
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
xg_Tree()
{
var crop=document.all.hiddenCropName.value
//-- store the information about the tree
this
.xg_TreeArray=
new
Array();
//-- create the root node
//this
.xg_TreeArray[0]=
new
xg_TreeNode(0,
部门结构图,
-1,
"xgDiv0"
);
this.xg_TreeArray[0]=new xg_TreeNode(0,"<a style='cursor:hand; color:#0A52CB' onclick='selnode(0);' >"+crop+"</a>",-1,"xgDiv0");
//-- store the tree_node number
this
.xg_ArrayCount=1;
this
.xg_TreeInsert=xg_TreeInsert;
this
.xg_TreeSearch=xg_TreeSearch;
this
.xg_TreeDelete=xg_TreeDelete;
this
.xg_GetNodeCount=xg_GetNodeCount;
}
//***********************************************************************************************************************
//--- Function: insert a node into the tree
//--- Return:
//--- Parameters:
//--- ATreeNode: the new node to insert into the tree
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
xg_TreeInsert(ATreeNode)
{
with
(
this
)
{
//-- if ATreeNode is null or it's parentid is null or it's id had been in tree return -1;
if
(!ATreeNode ||
""
==xg_TreeSearch(
this
,ATreeNode.nodeParentID) ||
""
!=xg_TreeSearch(
this
,ATreeNode.nodeID))
{
return
-1;
}
xg_TreeArray[xg_ArrayCount]=ATreeNode;
xg_ArrayCount++;
}
}
//***********************************************************************************************************************
//--- Function: search the node by the nodeID inputed
//--- Return:
//--- Parameters:
//--- AXGTree: the object of xg_Tree insert
//--- ANodeID: the nodeID about the searching node
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
xg_TreeSearch(AXGTree,ANodeID)
{
with
(AXGTree)
{
for
(
var
i=0;i<xg_TreeArray.length;i++)
{
if
(xg_TreeArray[i].nodeID==ANodeID)
{
return
xg_TreeArray[i];
}
}
return
""
;
}
}
//***********************************************************************************************************************
//--- Function: Get children's count
//--- Return: the count of the number of children
//--- Parameters:
//--- AXGTree: the object of xg_Tree
//--- ANodeID: the parentnode's nodeID
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
xg_GetNodeCount(AXGTree,ANodeID)
{
with
(AXGTree)
{
var
childCount=0;
for
(
var
i=0;i<xg_ArrayCount;i++)
{
if
(xg_TreeArray[i].nodeParentID==ANodeID)
{
childCount++;
}
}
return
childCount;
}
}
//***********************************************************************************************************************
//--- Function: delete the node of the tree and it's children by recursion
//--- Return:
//--- Parameters:
//--- AXGTree: the object of xg_Tree
//--- ANodeID: the node to be deleted
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
xg_TreeDelete(AXGTree,ANodeID)
{
with
(AXGTree)
{
while
(1==1)
{
if
(0==xg_GetNodeCount(AXGTree,ANodeID))
{
//-- if no children be found
for
(
var
i=0;i<xg_TreeArray.length;i++)
{
//-- wipe off the delete_node
if
(xg_TreeArray[i].nodeID==ANodeID)
{
for
(
var
j=i+1;j<xg_TreeArray.length;j++)
{
xg_TreeArray[j-1]=xg_TreeArray[j];
}
//-- reduce the length of the array
xg_TreeArray.pop();
AXGTree.xg_ArrayCount--;
}
}
return
;
} else{
//-- if children be found,delete the children by recursion
for
(
var
i=0;i<xg_ArrayCount;i++)
{
if
(xg_TreeArray[i].nodeParentID==ANodeID)
{
xg_TreeDelete(AXGTree,xg_TreeArray[i].nodeID);
}
}
}
}
}
}
//***********************************************************************************************************************
//--- Function: make the show table
//--- Return:
//--- Parameters:
//--- AXGTree: the object of xg_Tree
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
xg_ShowTree(AXGTree)
{
var
tmpOut=
""
;
tmpOut+=
"<table align=left>"
;
tmpOut+=
"<tr><td>"
;
tmpOut+=xg_GetChildren(AXGTree,0,0);
tmpOut+=
"</td></tr>"
;
tmpOut+=
"</table>"
;
return
tmpOut;
}
//***********************************************************************************************************************
//--- Function: make the show div by recursion
//--- Return:
//--- Parameters:
//--- AXGTree: the object of xg_Tree
//--- ANodeID: the root nodeID
//--- ALevel: the level the div
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
xg_GetChildren(AXGTree,ANodeID,ALevel)
{
var
tmpNode=xg_TreeSearch(AXGTree,ANodeID);
var
tmpOut=
""
;
with
(tmpNode)
{
tmpOut+=
"<div id='"
+nodeDivID+
"' nodeID='"
+nodeID+
"' style='display:inline;'>"
;
tmpOut+=
"<br>"
;
for
(
var
i=0;i<ALevel;i++)
{
tmpOut+=
" "
;
}
tmpOut+=
"<img id='img"
+tmpNode.nodeID+
"' onmouseover='img_onmouseover(this);' onmouseout='img_onmouseout(this);' "
;
if
(0==xg_GetNodeCount(AXGTree,ANodeID))
{
tmpOut+=
"src='../images/file.gif' "
;
} else{
tmpOut+=
"src='../images/folder.gif' "
;
}
tmpOut+=
"width='16' height='16' onclick='div_viewOnclick("
+nodeID+
",this)' style='color:blue;cursor:hand;'> "
;
tmpOut+=nodeInnerHtml;
for
(
var
i=0;i<AXGTree.xg_TreeArray.length;i++)
{
if
(ANodeID==AXGTree.xg_TreeArray[i].nodeParentID)
{
tmpOut+=xg_GetChildren(AXGTree,AXGTree.xg_TreeArray[i].nodeID,ALevel+1);
}
}
tmpOut+=
"</div>"
;
}
return
tmpOut;
}
//--- Function: control the view of the tree
//--- Return:
//--- Parameters:
//--- ANodeID: the node to be clicked
//--- AImg: the AImg object stand by with the node
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function
div_viewOnclick(ANodeID,AImg)
{
with
(xgTree)
{
if
(0==xg_GetNodeCount(xgTree,ANodeID))
return
;
var
tmpNode=xg_TreeSearch(xgTree,ANodeID);
for
(
var
i=0;i<xg_TreeArray.length;i++)
{
if
(ANodeID==xg_TreeArray[i].nodeParentID)
{
if
(0==tmpNode.nodeIsView)
eval(xg_TreeArray[i].nodeDivID+
".style.display='inline';"
);
else
eval(xg_TreeArray[i].nodeDivID+
".style.display='none';"
);
}
}
if
(0==tmpNode.nodeIsView)
{
tmpNode.nodeIsView=1;
AImg.src=
'../images/folderopen.gif'
;
} else{
tmpNode.nodeIsView=0;
AImg.src=
'../images/folder.gif'
;
}
}
}
//***********************************************************************************************************************
function
img_onmouseover(AImg)
{
AImg.style.filter=
'alpha(opacity=40)'
;
}
//***********************************************************************************************************************
function
img_onmouseout(AImg)
{
AImg.style.filter=
'alpha(opacity=100)'
;
}
function
findObj(theObj, theDoc)
{
var
p, i, foundObj;
if
(!theDoc) theDoc = document;
if
( (p = theObj.indexOf(
"?"
)) > 0 && parent.frames.length)
{
theDoc = parent.frames[theObj.substring(p+1)].document;
theObj = theObj.substring(0,p);
}
if
(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj];
for
(i=0; !foundObj && i < theDoc.forms.length; i++)
foundObj = theDoc.forms[i][theObj];
for
(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++)
foundObj = findObj(theObj,theDoc.layers[i].document);
if
(!foundObj && document.getElementById) foundObj = document.getElementById(theObj);
return
foundObj;
}
function
setColor(objName, bg)
{
obj = findObj(objName);
if
(obj.style)
{
obj.style.backgroundColor =bg;
}
}
function
selnode(key)
{
if (key==0){
document.all.selected.value=document.all.hiddenCropID.value;
// var me='123';
// alert(me);
}
else{
document.all.selected.value=key;
}
}
function
selok(key)
{
var
inputs = document.all.tags(
"INPUT"
);
for
(
var
i=0; i< inputs.length; i++)
{
if
(inputs[i].type==
"checkbox"
&& inputs[i].checked)
{
document.all.selected.value=document.all.selected.value+inputs[i].value+
','
;
}
}
if
(document.all.selected.value.length>0)
{
document.all.selected.value=document.all.selected.value.substring(0,document.all.selected.value.length-1);
}
document.FormList.action=
"role_fun.jsp?Oper=1&Key="
+key;
document.FormList.submit();
}
function
Add()
{
if
(document.all.selected.value!=
""
)
{
var
a=showModalDialog(
"admindepart_edit.jsp?Oper=add&Key=0&Parent="
+document.all.selected.value+
"&cropid="
+document.all.selcropid.value,
""
,
"status:no;resizable:yes;dialogHeight:410px;dialogWidth:460px;unadorne:yes"
);
if
((a==0))
{
document.FormList.submit();
}
}else{
alert(
'
请选择机构
'
);
}
}
function
Edit()
{
if
(document.all.selected.value!=
"0"
)
{
var
a=showModalDialog(
"admindepart_edit.jsp?Oper=add&Key="
+document.all.selected.value+
"&cropid="
+document.all.selcropid.value,
""
,
"status:no;resizable:yes;dialogHeight:410px;dialogWidth:460px;unadorne:yes"
);
if
((a==0))
{
document.FormList.submit();
}
}else{
alert(
'
请选择机构
'
);
}
}
function
Del
()
{
if
(window.confirm(
"
确实要删除吗?
"
))
{
if
(document.all.selected.value!=
"0"
)
{
var
a=showModalDialog(
"admindepart_ctl.jsp?Oper=del&Key="
+document.all.selected.value,
""
,
"status:no;resizable:yes;dialogHeight:410px;dialogWidth:460px;unadorne:yes"
);
if
((a==0))
{
document.FormList.submit();
}
}else{
alert(
'
请选择机构
'
);
}
}
}
function
onsel()
{
document.FormList.action=
"admindepart_list.jsp"
;
document.FormList.submit();
}
</
script
>
<
body
>
<
form
name
=
"FormList"
action
=
"admindepart_list.jsp"
method
=
"post"
>
<
table
cellSpacing
=
"0"
cellPadding
=
"0"
width
=
"100%"
bgColor
=
"#bfcae6"
border
=
"0"
background
=
"../images/subtitle.gif"
>
<
tr
>
<
td
width
=
"100%"
height
=
"26"
><
FONT
face
=
"
宋体
"
>
<
DIV
align
=
"left"
><
FONT
face
=
"
宋体
"
color
=
"#ffffff"
>
当前位置:系统管理
>>
组织机构
>>
部门设置
</
FONT
>
</
DIV
>
</
FONT
>
</
td
>
</
tr
>
</
table
>
<%
MachineBean corp=
new
MachineBean();
String cropid=request.getParameter(
"selcropid"
);
String strCropName=
""
;
String strCropID=
""
;
if
(cropid==
null
) {
cropid=
""
+session.getAttribute(
"cropid"
);
}
DataTable dt =
new
DataTable();
Conn conn=
new
Conn
();
String mSql=
"Select MachID,MachName from sys04_Machine where MachID="
+cropid;
System.out.println(
"mSql:"
+mSql);
if
(conn.querySql(mSql,dt)){
if
(dt.getRowCount()>0){
strCropName = dt.getItemForName(0,"MachName");
strCropID = dt.getItemForName(0,"MachID");
}
}
%>
<input type="hidden" name="selected" value="0">
<input type="hidden" name="hiddenCropName" value="<%=strCropName%>" >
<input type="hidden" name="hiddenCropID" value="<%=strCropID%>" >
<
table
border
=
"0"
cellpadding
=
"0"
cellspacing
=
"0"
width
=
"100%"
background
=
"../images/ico_14.jpg"
>
<
tr
>
<
td
height
=
"26"
align
=
"right"
background
=
"../images/ico_14.jpg"
>
选择公司:
<
select
name
=
"selcropid"
onChange
=
"onsel()"
></
select
>
<
input
type
=
"button"
class
=
"button"
value
=
"
新增子机构
"
onclick
=
"Add();"
>
<
input
type
=
"button"
class
=
"button"
value
=
"
编辑
"
onclick
=
"Edit();"
>
<
input
type
=
"button"
value
=
"
删除
"
class
=
"button"
onClick
=
"Del();"
size
=
"50"
>
</
td
>
</
tr
>
</
table
>
<
div
style
=
"overflow-y:scroll ;width:100%; height:458px"
>
<
div
id
=
divID
></
div
>
</
div
>
<%
out.println(PubClass.BindAllCorpList(
"document.all.selcropid"
));
out.println(
"<script>document.all.selcropid.value="
+cropid+
";</script>"
);
%>
<%=
corp.getAllTree(
"select * from sys04_Machine where cropid="
+cropid)
%>
</
form
>
<
script
language
=
javascript
>
divID.innerHTML=xg_ShowTree(xgTree);
eval(xgTree.xg_TreeArray[0].nodeDivID+
".style.display='inline';"
);
</
script
>
</
body
>
</
html
>