在这个解决方案当中,我对原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 "-//W 3C //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:# 0A 52CB' οnclick='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+"' οnmοuseοver='img_onmouseover(this);' οnmοuseοut='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' οnclick='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>
2006-08-18