function BSTreeView(name, formname, showType, style, father, showCheck,
disabled) {
this.name = name || "BSTreeView";
this.formname = formname || "frmBusiness";
this.showType = showType || false;
this.style = style || "";
this.nodeList = new Array();
this.rootList = new Array();
this.addList = new Array();// 大批量提交的节点存储列表
this.batchFlg = false;// 是否大批量提交
this.thisDeepNo = 0;
this.htmlStr = "";
this.clickID = -1;
this.isFinish = true;
this.rmObj = null;
this.imagePath = "../common/images/tree/";// 缺省的路径
this.showLine = true;// 是否显示连线
this.showAddImg = true;// 是否显示+-
this.showNodeImg = true;// 是否现实图片
this.father = father || "";
this.freshJsfun = "";
this.thisOppNode = null;// 记录当前即点即查的节点
this.isBinaryStar = false;
this.showCheck = showCheck || false;// 是否显示CheckBox。true:显示;false:不显示;缺省为显示。
this.disabled = disabled || false;// 是否可用。true:不可用;false:可用;缺省为可用。
this.canDrag = false;
this.inDrag = false;
this.dragId = -1;
this.dragX = -1;
this.dragFun = "";// 拖拽完成后的附加方法
this.isShow = false;
this.checkType = 0;// checkBox的类别,0:关心上下级,1;只关心自己
this.inDataGrid = null;
/** ***get/set方法开始**** */
// 设置刷新状态时的方法(限于BinaryStar框架使用)
this.resetTree = function () {
this.nodeList = new Array();
this.rootList = new Array();
this.clickID = 0;
this.thisDeepNo = 0;
this.dragId = -1;
this.dragX = -1;
}
this.setFreshJsfun = function (inFreshJsfun) {
this.freshJsfun = inFreshJsfun;
};
// 设置图片的路径
this.setImagesPath = function (inPath) {
this.imagePath = inPath;
};
// 是否显示线
this.setShowLine = function (showFlg) {
this.showLine = showFlg;
};
// 是否显示节点图片
this.setShowNodeImg = function (showNodeImgFlg) {
this.showNodeImg = showNodeImgFlg;
};
// 是否显示+-图片
this.setShowAddImg = function (showAddImgFlg) {
this.showAddImg = showAddImgFlg;
};
// 设置是否有CheckBox
this.showCheckBox = function (flg) {
this.showNodeCheckBox(-1, flg);
};
// 设置是否显示节点的CheckBox
this.showNodeCheckBox = function (inId, flg) {
if (this.isShow && this.isDisabled()) {
return;
}
if (flg == null) {
flg = false;
}
var disStr = "none";
if (flg) {
disStr = "";
}
// 非根节点
if (inId >= 0 && inId < this.nodeList.length) {
var pnode = this.nodeList[inId];
if (pnode.disabled) {
return;
}
pnode.showCheck = flg;
pnode.isChecked = false;
pnode.halfChecked = false;
var pnodecheelm = document.getElementById(this.name + "_che_"
+ pnode.id);
if (pnodecheelm != null) {
pnodecheelm.style.display = disStr;
pnodecheelm.checked = false;
pnodecheelm.indeterminate = false;
}
for (var i = 0; i < pnode.childList.length; i++) {
var node = this.nodeList[pnode.childList[i]];
this.showNodeCheckBox(node.id, flg);
}
} else {
this.showCheck = flg;
for (var i = 0; i < this.nodeList.length; i++) {
var node = this.nodeList[i];
if (!node.isDelete) {
node.showCheck = flg;
node.isChecked = false;
node.halfChecked = false;
var nodecheelm = document.getElementById(this.name
+ "_che_" + node.id);
if (nodecheelm != null) {
nodecheelm.style.display = disStr;
nodecheelm.checked = false;
nodecheelm.indeterminate = false;
}
}
}
}
};
// 得到树的深度
this.getDeep = function () {
return this.thisDeepNo;
};
// 设置树可用标志
this.setDisabled = function (inFlg) {
this.setNodeDisabled(-1, inFlg);
};
// 设置树节点可用标志
this.setNodeDisabled = function (inId, inFlg) {
if (inFlg == null) {
inFlg = false;
}
// 非根节点
if (inId >= 0 && inId < this.nodeList.length) {
var pnode = this.nodeList[inId];
if (this.isShow && this.isDisabled()) {
return null;
} else if (!this.isShow) {
pnode.disabled = inFlg;
return null;
}
if (pnode.parent() != null && pnode.parent().disabled) {
inFlg = true;
}
if (!pnode.isDelete && pnode.disabled != inFlg) {
if (this.clickID = pnode.id) {
this.changeClickID(-1);
}
pnode.disabled = inFlg;
var thiscb = document
.getElementById(this.name + "_" + pnode.id);
if (thiscb != null) {
thiscb.disabled = inFlg;
thiscb.clssName = "tree_a";
var ch_thiscb = document.getElementById(this.name + "_che_"
+ pnode.id);
ch_thiscb.disabled = inFlg;
}
for (var i = 0; i < pnode.childList.length; i++) {
var node = this.nodeList[pnode.childList[i]];
this.setNodeDisabled(node.id, inFlg)
}
}
} else {
this.changeClickID(-1);
this.disabled = inFlg;
for (var i = 0; i < this.nodeList.length; i++) {
var node = this.nodeList[i];
node.disabled = inFlg;
if (!node.isDelete) {
var thiscb = document.getElementById(this.name + "_" + i);
if (thiscb != null) {
thiscb.disabled = inFlg;
thiscb.clssName = "tree_a";
var ch_thiscb = document.getElementById(this.name
+ "_che_" + i);
ch_thiscb.disabled = inFlg;
}
}
}
}
};
/** ***get/set方法结束**** */
this.doError = function (inIndex, inErr, inStr, funName) {
var node = this.nodeList[inIndex];
if (this.showType) {
node.isOpen = false;
node.isDoOpen = false;
}
var errStr = "*^_^*恭喜你中招了!\n\r " + inErr.name + ":" + inErr.message
+ " \n\r" + inStr + "\n\r" + funName + "\n\r发生严重错误!";
alert(errStr);
var str = document.getElementById(this.name + "_" + inIndex);
str.className = "tree_error";
str.title = errStr;
this.isFinish = false;
node.isError = true;
closeDialog();
};
/** ***节点操作方法开始**** */
// 判断是否可用
this.isDisabled = function () {
return this.disabled;
};
// 添加跟节点
this.addRootNode = function (name, showStr, jsfun, openjs, paras, isOpen,
isDoOpen, openImg, closeImg, nodeImg) {
return this.addNode(-1, 0, name, showStr, jsfun, openjs, paras, isOpen,
isDoOpen, openImg, closeImg, nodeImg);
};
// 添加节点
this.addNode = function (pid, deepID, name, showStr, jsfun, openjs, paras,
isOpen, isDoOpen, openImg, closeImg, nodeImg) {
if ((this.isShow && this.isDisabled())
|| (this.isShow && pid > 0 && this.nodeList[pid].disabled)) {
return null;
}
var inNode = new BSNode(this.nodeList.length, pid, deepID, this.name,
name, showStr, jsfun, openjs, paras, isOpen, isDoOpen);
if (pid > 0) {
inNode.disabled = this.nodeList[pid].disabled;
} else if (this.disabled) {
inNode.disabled = true;
}
// 设置图片
if (openImg != null && $.trim(openImg) != "") {
inNode.openImg = openImg;
}
if (closeImg != null && $.trim(closeImg) != "") {
inNode.closeImg = closeImg;
}
if (nodeImg != null && $.trim(nodeImg) != "") {
inNode.nodeImg = nodeImg;
}
// 设置CheckBox
if (this.showCheck || (pid >= 0 && this.nodeList[pid].showCheck)) {
inNode.showCheck = true;
// 设置选中checkbox
if (pid >= 0 && this.nodeList[pid].isChecked && this.checkType == 0) {
inNode.isChecked = true;
}
}
if (pid >= 0) {
// 设置兄弟结点
if (this.nodeList.length > 0) {
inNode.prevId = this.nodeList[pid].childList[this.nodeList[pid].childList.length - 1];
}
this.nodeList[pid].addChildItem(this.nodeList.length);
} else {
// 设置兄弟结点
if (this.nodeList.length > 0) {
inNode.prevId = this.rootList[this.rootList.length - 1];
}
this.rootList.length++;
this.rootList[this.rootList.length - 1] = this.nodeList.length;
}
this.nodeList.length++;
this.nodeList[this.nodeList.length - 1] = inNode;
if (inNode.prevId >= 0) {
this.nodeList[inNode.prevId].nextId = inNode.id;
}
if (deepID > this.thisDeepNo) {
this.thisDeepNo = deepID;
}
if (this.isShow) {
// 树已生成时动态添加
if (this.batchFlg) {
this.addList.length++;
this.addList[this.addList.length - 1] = inNode.id;
} else {
this.showAddNode(inNode.id);
}
// this.setScroll(inNode.id);
}
return inNode;
};
// 添加单个节点对象(用于调度)
this.addOneNode = function (pid, inNode) {
if (this.isShow && this.isDisabled()) {
return null;
}
if (inNode == null) {
alert("没有可添加的节点");
return;
}
if (pid >= 0) {
if (this.nodeList[pid].disabled) {
return null;
}
this.nodeList[pid].addChildItem(inNode.id);
} else {
this.rootList.length++;
this.rootList[this.rootList.length - 1] = inNode.id;
}
inNode.pid = pid;
inNode.isDelete = false;
// 重设深度
inNode.deepID = this.nodeList[pid].deepID + 1;
if (inNode.deepID > this.thisDeepNo) {
this.thisDeepNo = inNode.deepID;
}
if (document.getElementById(this.name + "_main") != null) {
// 树已生成
this.showAddNode(inNode.id);
}
// 处理CheckBox的选中
var tempFlg = -1;
if (inNode.isChecked) {
tempFlg = 1;
} else if (inNode.halfChecked) {
tempFlg = 0;
}
this.doParentChecked(inNode.id, tempFlg);
return inNode;
};
// 更新节点
this.updateNode = function (id, inNode) {
if (this.isShow && this.isDisabled()) {
return null;
}
if (inNode == null) {
alert("没有可更改的节点");
return null;
}
var thisNode = this.nodeList[id];
if (thisNode.disabled) {
return null;
}
inNode.pid = thisNode.pid;
// 重设深度
inNode.id = thisNode.id;
inNode.deepID = thisNode.pid.deepID;
this.nodeList[id] = inNode;
if (document.getElementById(this.name + "_main") != null) {
// 树已生成
var thisdiv = document.getElementById(this.name + "_" + inNode.id
+ "_node");
// 重画父节点
var strTemp = "";
strTemp += "";
strTemp += this.DrawLink(inNode.id);
strTemp += this.DrawShowStr(inNode.id);
strTemp += "";
thisdiv.innerHTML = strTemp;
}
return inNode;
};
// 打开父亲节点
this.openParent = function (id) {
if (id >= 0) {
var node = this.nodeList[id];
if (node.isOpen) {
return;
}
var div = document.getElementById(this.name + "_" + id + "_div");
var thisdiv = document.getElementById(this.name + "_" + node.id
+ "_node");
if (div != null) {
div.style.display = "block";
}
node.isOpen = true;
node.isDoOpen = true;
// 重画父节点
var strTemp = "";
strTemp += "";
strTemp += this.DrawLink(node.id);
strTemp += this.DrawShowStr(node.id);
strTemp += "";
thisdiv.innerHTML = strTemp;
this.openParent(node.pid);
}
}
// 动态添加节点
this.showAddNode = function (id) {
if (this.isShow && this.isDisabled()) {
return false;
}
var node = this.nodeList[id];
if (node.disabled || (node.pid >= 0 && this.nodeList[node.pid].disabled)) {
return null;
}
// 得到父节点对象
this.openParent(node.pid);
var p_node = this.nodeList[node.pid];
if (p_node != null) {
// 重画父节点的元素
this.reDrawSelfNode(node.pid);
if (p_node.childList.length <= 0) {
this.reDrawAllNode(node.pid);
} else {
// 展现自身
this.reDrawOneChildNode(node.pid, id);
}
} else {
this.reDrawOneChildNode(node.pid, id);
}
if (this.isBinaryStar) {
this.optionFrame(true);
}
}
// 调度节点
this.changeNode = function (fNode, tNode) {
if (this.isChildNode(fNode.id, tNode.id)) {
alert("对不起,不能调度到拖拽到孩子节点!");
} else {
if (fNode.disabled || tNode.disabled) {
return tNode;
}
fNode.remove();
if (tNode.childList.length > 0) {
var l_node = this.nodeList[tNode.childList[tNode.childList.length - 1]];
fNode.prevId = l_node.id;
l_node.nextId = fNode.id;
}
tNode.addOneNode(fNode.id);
}
return tNode;
}
// 判断孩子有无指定ID
this.isChildNode = function (inPid, inId) {
var p_node = this.nodeList[inPid];
if (p_node != null) {
for (var i = 0; i < p_node.childList.length; i++) {
var temp_node = this.nodeList[p_node.childList[i]];
if (temp_node.id == inId
|| this.isChildNode(temp_node.id, inId)) {
return true;
}
}
}
return false;
}
// DataGrid中树的操作
this._doOpen = function (node, type) {
if (this.inDataGrid != null) {
// 找到对应的孩子的TR
for (var i = 0; i < node.childList.length; i++) {
var tr = document.getElementById(this.inDataGrid + "_row_"
+ node.childList[i]);
var child = this.nodeList[node.childList[i]];
if (!type) {
tr.style.display = "block";
// 孩子节点还有孩子,
if (child.childList.length > 0 && child.isOpen) {
this._doOpen(child, false);
}
} else {
tr.style.display = "none";
// 如果有孩子
if (child.childList.length > 0 && child.isOpen) {
this._doOpen(child, true);
}
}
}
} else {
var div = document.getElementById(this.name + "_" + node.id
+ "_div");
if (div.style.display == "none") {
div.style.display = "block";
} else {
div.style.display = "none";
}
}
}
// 节点打开操作
this.doOpen = function (id) {
if (this.showType && !this.isFinish) {
alert("您的节点事件出现异常,或是重复提交!");
return;
}
this.isFinish = false;
var node = this.nodeList[id];
var str = document.getElementById(this.name + "_" + id);
var imgo = document.getElementById(this.name + "_" + id + "_o");
var imgf = document.getElementById(this.name + "_" + id + "_f");
try {
var thisForm = eval(this.formname);
} catch (e) {
var thisForm = null;
}
if (this.isBinaryStar) {
this.optionFrame(true);
thisForm.target = "BSTree_frame";
}
if (node.isOpen) {
this.setTreeNodeID(id);
if (this.getChgFlg(id)) {
str.focus();
this.changeClickID(id);
}
if (this.showType && node.isDoOpen) {
this.setTreeNodeID(id);
if (this.isBinaryStar && this.freshJsfun != null
&& $.trim(this.freshJsfun) != "") {
try {
eval(this.freshJsfun);
} catch (e) {
this.doError(id, e, "刷新节点状态的方法", this.freshJsfun);
return;
}
}
}
this._doOpen(node, true);
if (imgo != null) {
imgo.src = imgo.src.replace("minus.png", "plus.png");
}
if (imgf != null) {
imgf.src = imgf.src.replace(node.openImg, node.closeImg);
}
node.isOpen = false;
this.isFinish = true;
if (node.closejs != null && $.trim(node.closejs) != "") {
try {
eval(node.closejs);
} catch (e) {
this.doError(id, e, "关闭节点状态的方法", node.closejs);
return;
}
}
} else {
if (node.childList.length > 0) {
this._doOpen(node, false);
node.isOpen = true;
}
if (imgf != null) {
imgf.src = imgf.src.replace(node.closeImg, node.openImg);
}
if (imgo != null) {
imgo.src = imgo.src.replace("plus.png", "minus.png");
}
this.setTreeNodeID(id);
// 判断是否是即点即查
if (this.showType && !node.isDoOpen && node.childList.length == 0) {
node.isDoOpen = true;
if (this.isShow && this.isDisabled()) {
node.isOpen = false;
node.isDoOpen = false;
return false;
}
if (node.openjs != "") {
// 弹出提示框
try {
eval(node.openjs);
} catch (e) {
this.doError(id, e, "打开节点的方法", node.openjs);
return;
}
} else if (node.childList.length == 0) {
if (this.isBinaryStar && this.freshJsfun != null
&& $.trim(this.freshJsfun) != "") {
try {
eval(this.freshJsfun);
} catch (e) {
this.doError(id, e, "刷新节点状态的方法", this.freshJsfun);
return;
}
}
this.isFinish = true;
}
node.isDoOpen = true;
} else if (this.showType && node.isDoOpen) {
if (this.isBinaryStar && this.freshJsfun != null
&& $.trim(this.freshJsfun) != "") {
try {
eval(this.freshJsfun);
} catch (e) {
this.doError(id, e, "刷新节点状态的方法", this.freshJsfun);
return;
}
}
this.isFinish = true;
} else {
this.isFinish = true;
}
// 调整父元素的滚动条
if (!this.showType) {
this.setScroll(id);
}
}
if (this.inDataGrid != null) {
var dgObj = eval(this.inDataGrid);
dgObj.divOnScrollH(eval(this.inDataGrid + "_div"));
}
};
// 调整父元素的滚动条
this.setScroll = function (id) {
if (this.inDataGrid != null) {
return;
}
var div = document.getElementById(this.name + "_" + id + "_div");
var str = document.getElementById(this.name + "_" + id);
var mainDiv = document.getElementById(this.name + "_main");
var pNode = mainDiv.parentNode;
if (pNode != null) {
var dif = div.offsetTop;
var curH = dif - pNode.scrollTop;// 该节点在相对高度
var difH = pNode.offsetHeight - curH - (str.offsetHeight);
var addH = 0;
if ((curH + div.offsetHeight) > pNode.offsetHeight) {
addH = div.offsetHeight - difH;
}
if ((curH - addH) < 0) {
addH = curH - (str.offsetHeight + 2);
}
pNode.scrollTop = pNode.scrollTop + addH;
}
};
// 删除孩子节点
this.removeAllChildren = function (inId) {
if (this.isShow && this.isDisabled()) {
return;
}
if (inId >= 0 && inId < this.nodeList.length) {
var thisNode = this.nodeList[inId];
thisNode.setNodeActive();
// 父亲节点的重画
for (var i = 0; i < thisNode.childList.length; i++) {
this.nodeList[thisNode.childList[i]].isDelete = true;
this.nodeList[thisNode.childList[i]].deleteOneChildNode();
}
thisNode.childList.length = 0;
this.reDrawSelfNode(inId);
thisNode.isOpen = false;
if (thisNode.halfChecked) {
thisNode.halfChecked = false;
var thiscb = document
.getElementById(this.name + "_che_" + inId);
if (thiscb != null) {
thiscb.checked = false;
thiscb.indeterminate = false;
}
}
// 清除孩子节点
var thisc_div = document.getElementById(this.name + "_" + inId
+ "_div");
if (thisc_div != null) {
thisc_div.style.display = "none";
thisc_div.innerHTML = "";
}
}
};
// 删除节点
this.removeNode = function (inId) {
if (this.isShow && this.isDisabled()) {
return;
}
if (inId >= 0 && inId < this.nodeList.length) {
var thisNode = this.nodeList[inId];
if (thisNode.disabled) {
return;
}
this.changeClickID("-1");
this.setTreeNodeID("-1");
var ch_node = thisNode.prev();
if (ch_node == null) {
ch_node = thisNode.next();
if (ch_node == null) {
ch_node = thisNode.parent();
}
}
thisNode.isDelete = true;
// 处理CheckBox的选中
if (ch_node != null) {
if (!ch_node.halfChecked && ch_node.showCheck) {
this.doCheckBox(ch_node.id, ch_node.isChecked);
}
}
if (document.getElementById(this.name + "_" + inId + "_node") != null) {
var pnodeElm = document.getElementById(this.name + "_" + inId
+ "_node").parentNode;
pnodeElm.removeChild(document.getElementById(this.name + "_"
+ inId + "_node"));
pnodeElm.removeChild(document.getElementById(this.name + "_"
+ inId + "_div"));
}
var prevNode = thisNode.prev();
var nextNode = thisNode.next();
if (prevNode != null && nextNode != null) {
nextNode.prevId = prevNode.id;
prevNode.nextId = nextNode.id;
} else if (prevNode == null && nextNode != null) {
nextNode.prevId = -1;
} else if (prevNode != null && nextNode == null) {
prevNode.nextId = -1;
}
thisNode.deleteOneChildNode();
// 父亲节点的重画
var p_node = this.nodeList[thisNode.pid];
var div = document.getElementById(this.name + "_" + p_node.id
+ "_div");
this.reDrawSelfNode(p_node.id);
// 重画兄弟和本身
strTemp = "";
div.style.display = "none";
if (p_node.childList.length > 0) {
div.style.display = "block";
if (prevNode != null) {
strTemp = "";
this.reDrawAllNode(prevNode.id);
}
if (nextNode != null) {
strTemp = "";
this.reDrawAllNode(nextNode.id);
}
}
}
};
// 删除根节点
this.removeRoot = function () {
if (this.isShow && this.isDisabled()) {
return;
}
if ($("#" + this.name + "_main").length > 0) {
var pnodeElm = document.getElementById(this.name + "_main").parentNode;
pnodeElm.removeChild(document.getElementById(this.name + "_main"));
this.nodeList = new Array();
this.rootList = new Array()
this.thisDeepNo = 0;
this.htmlStr = "";
this.clickID = -1;
this.isFinish = true;
this.rmObj = null;
}
};
this.onDragStart = function (inObj, inId) {
var fNode = this.getNodeById(inId);
if (fNode != null && !fNode.disabled && this.canDrag) {
var left = document.body.scrollLeft + window.event.clientX - 5;
var top = document.body.scrollTop + window.event.clientY - 5;
var jsObj = document.createElement("div");
jsObj.id = this.name + "_drag_div";
jsObj.style.cssText = "position:absolute;left:" + (left) + ";top:"
+ (top) + ";border:0;z-index:100;";
var node = this.nodeList[inId];
jsObj.innerHTML = inObj.outerHTML;
document.body.appendChild(jsObj);
this.inDrag = true;
this.dragId = inId;
}
};
this.onDrag = function (inObj, inId) {
var fNode = this.getNodeById(inId);
if (fNode != null && !fNode.disabled && this.canDrag) {
var left = document.body.scrollLeft + window.event.clientX - 5;
var top = document.body.scrollTop + window.event.clientY - 5;
var dragDiv = document.getElementById(this.name + "_drag_div");
if (dragDiv != null) {
dragDiv.style.posLeft = left;
dragDiv.style.posTop = top;
}
this.inDrag = true;
this.dragId = inId;
}
};
this.onDragEnd = function (inObj, inId) {
// if (this.canDrag && !this.disabled){
var dragDiv = document.getElementById(this.name + "_drag_div");
if (dragDiv != null) {
document.body.removeChild(dragDiv);
}
this.inDrag = false;
this.dragX = event.x;
// }
};
this.onDragIn = function (inObj, inId) {
var fNode = this.getNodeById(this.dragId);
var tNode = this.getNodeById(inId);
if (fNode != null && !fNode.disabled && fNode != null
&& !fNode.disabled && this.canDrag && !this.inDrag
&& this.dragId > 0
&& (event.x - this.dragX <= 2 && event.x - this.dragX >= -2)) {
if (inId != this.dragId) {
var ret = false;
if (tNode != null && fNode.pid != tNode.id) {
if (this.dragFun != null && this.dragFun != "") {
try {
ret = eval(this.dragFun + "(" + fNode.id + ", "
+ tNode.id + ");");
} catch (e) {
this
.doError(this.dragId, e, "拖拽附加方法",
this.dragFun);
}
} else {
ret = true;
}
if (ret != null && ret) {
this.changeNode(fNode, tNode);
}
}
fNode.setNodeActive();
this.inDrag = false;
this.dragId = -1;
}
}
if (this.canDrag && !this.disabled && this.inDrag && inObj != null) {
inObj.className = "tree_node_onfocus";
}
this.dragX = -1;
};
/** ***节点操作方法结束**** */
/** ***树的绘制方法开始**** */
// 画树
this.DrawTree = function (in_showType) {
var type = in_showType || false;
this.htmlStr = "
";
this.htmlStr += this.initTree();
for (var i = 0; i < this.rootList.length; i++) {
if (!this.rootList[i].isDelete) {
this.htmlStr += this.DrawNode(this.rootList[i]);
}
}
// alert(this.htmlStr);
this.htmlStr += "
";
if (type) {
if (this.father != ""
&& document.getElementById(this.father) != null) {
var fatObj = document.getElementById(this.father);
fatObj.innerHTML = this.htmlStr;
} else {
document.writeln(this.htmlStr);
}
this.setTreeNodeID("-1");
// 处理CheckBox
for (var i = 0; i < this.nodeList.length; i++) {
var oneNode = this.nodeList[i];
if (!oneNode.isDelete && oneNode.isChecked) {
var chElm = document
.getElementById(this.name + "_che_" + i);
if (chElm.checked) {
this.doCheckBox(i, true);
}
}
// alert(oneNode.showStr + " " + oneNode.disabled);
if (!oneNode.isDelete && oneNode.disabled) {
// oneNode.setDisabled(i, true);
}
}
this.isShow = true;
} else {
this.htmlStr = this.initTree();
document.writeln(this.htmlStr);
this.isShow = false;
}
return this.htmlStr;
};
// 重画本节点和孩子节点
this.reDrawAllNode = function (inId) {
var node = this.nodeList[inId];
if (node.disabled) {
return;
}
// 画本身
this.reDrawSelfNode(inId);
this.reDrawChildNode(inId);
}
// 重画本节点
this.reDrawSelfNode = function (inId) {
var node = this.nodeList[inId];
if (node.disabled) {
return;
}
// 画本身
var thisdiv = document.getElementById(this.name + "_" + inId + "_node");
var strTemp = "";
strTemp += "";
// strTemp += this.DrawNode(p_node.id);
strTemp += this.DrawLink(inId);
strTemp += this.DrawShowStr(inId);
strTemp += "";
thisdiv.innerHTML = strTemp;
}
// 重画孩子节点
this.reDrawChildNode = function (inId) {
var node = this.nodeList[inId];
if (node.disabled) {
return;
}
// 画孩子
var thisc_div = document
.getElementById(this.name + "_" + inId + "_div");
var strTemp = "";
if (thisc_div != null) {
if (node.childList.length > 0) {
for (var i = 0; i < node.childList.length; i++) {
if (!node.childList[i].isDelete) {
strTemp += this.DrawNode(node.childList[i]);
}
}
}
thisc_div.innerHTML = strTemp;
}
}
// 重画孩子节点
this.reDrawOneChildNode = function (inPId, inId) {
if (inPId < 0) {
return;
}
var p_node = this.nodeList[inPId];
var node = this.nodeList[inId];
if (p_node.disabled || node.disabled) {
return;
}
// 画孩子
var thisc_div = document.getElementById(this.name + "_" + inPId
+ "_div");
var strTemp = "";
if (thisc_div != null) {
if (node.prevId != null && node.prevId >= 0 && this.showLine) {
// 修改兄弟节点图标
this.reDrawAllNode(node.prevId);
}
strTemp += this.DrawNode(inId);
thisc_div.innerHTML = (thisc_div.innerHTML + strTemp);
}
}
// 显示新添加的节点(大批量的)
this.DrawAddNode = function () {
if (this.isShow && this.isDisabled()) {
return false;
}
// 得到父节点对象
if (this.addList.length > 0) {
var first_node = this.nodeList[this.addList[0]];
var p_node = this.nodeList[first_node.pid];
this.openParent(p_node.id);
// 得到父节点的元素
this.reDrawSelfNode(p_node.id);
// 展现上一节点
if (first_node.prevId != null) {
// 修改兄弟节点图标
this.reDrawAllNode(first_node.prevId);
}
// 展现本身
var t_htmlStr = "";
for (var i = 0; i < this.addList.length; i++) {
t_htmlStr += this.DrawNode(this.addList[i], true);
}
// 画孩子
var thisc_div = document.getElementById(this.name + "_" + p_node.id
+ "_div");
thisc_div.innerHTML = (thisc_div.innerHTML + t_htmlStr);
if (this.isBinaryStar) {
this.optionFrame(true);
}
}
}
// 画节点
this.DrawNode = function (id, showType) {
var strTemp = "";
var node = this.nodeList[id];
// 判断该节点是否添加过
if (showType != null && showType) {
if (node.isshow != null) {
return "";
} else {
node.isshow = true;
}
}
// alert(node);
var display = "none";
if (node.isOpen) {
display = "block";
}
// Draw this node
var nodeH = "";
nodeH = "";
nodeH += this.DrawLink(id);
nodeH += this.DrawShowStr(id);
nodeH += "
";
// 本身节点
strTemp += nodeH;
// Draw children
strTemp += "";
if (node.childList.length > 0) {
for (var i = 0; i < node.childList.length; i++) {
if (!node.childList[i].isDelete) {
strTemp += this.DrawNode(node.childList[i], showType);
}
}
}
strTemp += "
";
return strTemp;
}
// 画线
this.DrawLink = function (id) {
var strTemp = "";
var node = this.nodeList[id];
var oi = "Lplus.png";
var of = "close.png";
var mclick = "";
if (!this.showAddImg) {
this.showLine = false;
}
// 递归画上一层的图片
if (node.pid >= 0) {
strTemp += this.DrawPLink(node.pid);
}
// 设置有孩子节点的图片设置;
if (node.childList.length > 0
|| (this.showType && node.isDoOpen == false && node.openjs != "")) {
if (node.isOpen) {
of = "open.png";
oi = "minus.png";
if (node.openImg != null && node.openImg != "") {
of = node.openImg;
}
} else {
of = "close.png";
oi = "plus.png";
if (node.closeImg != null && node.closeImg != "") {
of = node.closeImg;
}
}
if (node.pid < 0) {// root
if (this.rootList[this.rootList.length - 1] != id) {
oi = ("T" + oi);
} else {
oi = ("L" + oi);
}
} else {
if (this.nodeList[node.pid].childList[this.nodeList[node.pid].childList.length - 1] != id) {
oi = ("T" + oi);
} else {
oi = ("L" + oi);
}
}
} else {
// 设置无孩子节点的图片
if (node.pid >= 0) {
if (this.showLine) {
if (this.nodeList[node.pid].childList[this.nodeList[node.pid].childList.length - 1] != id) {
oi = "T.png";
} else {
oi = "L.png";
}
} else {
oi = "empty.png";
}
} else {
if (this.showLine) {
if (this.rootList[this.rootList.length - 1] == id) {
oi = "L.png";
} else if (this.rootList[0] == id) {
oi = "P.png";
} else {
oi = "T.png";
}
} else {
oi = "empty.png";
}
}
of = "jsdoc.png";
if (node.nodeImg != null && node.nodeImg != "") {
of = node.nodeImg;
}
}
// 画+-图片
if (this.showAddImg) {
strTemp += "
";
}
// 画节点图片
if (this.showNodeImg) {
strTemp += "
";
}
// 画checkbox
strTemp += "";
// alert(strTemp);
return strTemp;
}
// 画父节点的线
this.DrawPLink = function (id) {
var strTemp = "";
var node = this.nodeList[id];
var img_id = this.name + "_" + id + "_p";
// Draw pid
if (node.pid >= 0) {
strTemp += this.DrawPLink(node.pid);
}
if (!this.showLine) {
strTemp += "
";
} else {
if (node.pid < 0) {
if (this.rootList[this.rootList.length - 1] != id) {
strTemp += "
";
} else {
strTemp += "
";
}
} else {
if (this.nodeList[node.pid].childList[this.nodeList[node.pid].childList.length - 1] != id) {
strTemp += "
";
} else {
strTemp += "
";
}
}
}
return strTemp;
}
// 输出文字
this.DrawShowStr = function (id) {
var node = this.nodeList[id];
var tclass = "tree_a";
var disab = "";
if (this.disabled) {
disab = " disabled=\'disabled\'";
} else {
if (node.isError) {
tclass = "tree_error";
} else if (node.id == this.clickID) {
tclass = "tree_node_onfocus";
}
}
var strTemp = " " + node.showStr + "";
//alert(strTemp);
return strTemp;
}
/** ***树的绘制方法结束**** */
/** ***设置树节点状态方法开始**** */
// 设置当前激活的节点
this.changeClickID = function (id) {
if (!(this.clickID < 0 || this.clickID == id)) {
var c_node = this.nodeList[this.clickID];
if (!c_node.isError) {
var str = document.getElementById(this.name + "_"
+ this.clickID);
if (str != null) {
str.className = "tree_node_onblur";
}
}
}
if (id >= 0 && id < this.nodeList.length) {
var this_node = this.nodeList[id];
if (!this_node.isError) {
var str = document.getElementById(this.name + "_" + id);
if (str != null) {
str.className = "tree_node_onfocus";
}
}
}
this.clickID = id;
}
// 节点收起时,判断是否存在激活状态的孩子节点
this.getChgFlg = function (id) {
var node = this.nodeList[id];
for (var i = 0; i < node.childList.length; i++) {
var cnode_id = node.childList[i];
if (this.getChgFlg(cnode_id)) {
return true;
} else if (this.clickID == cnode_id) {
return true;
}
}
return false;
}
// 点击CheckBox的操作
this.doCheckBox = function (inId, flg, isDoJSFun) {
if (this.isShow && this.isDisabled()) {
return;
}
if (inId == null || (inId < 0 && inId >= this.nodeList.length)) {
alert("请输入正确的节点索引!");
}
var node = this.nodeList[inId];
if (node.disabled) {
return;
}
if (this.showCheck && !node.showCheck) {
alert("该节点不拥有CheckBox控件,无法操作!");
return;
}
var thiscb = document.getElementById(this.name + "_che_" + inId);
if (flg != null) {
node.isChecked = flg;
thiscb.checked = flg;
thiscb.indeterminate = false;
node.halfChecked = false
} else {
if (node.halfChecked) {
thiscb.indeterminate = false;
node.halfChecked = false;
flg = true;
thiscb.checked = true;
}
node.isChecked = thiscb.checked;
flg = thiscb.checked;
}
var tempFlg = -1;
if (node.isChecked) {
tempFlg = 1;
} else if (node.halfChecked) {
tempFlg = 0;
}
this.doSetChecked(inId, node.isChecked);
// 处理父亲节点的选中
this.doParentChecked(inId, tempFlg);
// 执行选中后的操作
if (isDoJSFun && node.checkJSFun != "") {
try {
eval(node.checkJSFun);
} catch (e) {
this.doError(node.id, e, "点击节点CheckBox的方法", node.checkJSFun);
return;
}
}
}
// 得到选择中的节点列表。
this.getCheckedNodes = function (isAll) {
var checkedNodes = new Array();
var listStr = "";
for (var i = 0; i < this.nodeList.length; i++) {
var node = this.nodeList[i];
if (node.showCheck
&& (node.isChecked || (isAll && node.halfChecked))
&& !node.isDelete) {
listStr += (node.id + ",");
checkedNodes.length++;
checkedNodes[checkedNodes.length - 1] = node;
}
}
document.getElementById(this.name + "_checkedNodes").value = listStr;
return checkedNodes;
}
// 得到不确定选项的状态
this.getHalfCheckedNodes = function () {
var checkedNodes = new Array();
var listStr = "";
for (var i = 0; i < this.nodeList.length; i++) {
var node = this.nodeList[i];
if (node.showCheck && node.halfChecked && !node.isDelete) {
listStr += (node.id + ",");
checkedNodes.length++;
checkedNodes[checkedNodes.length - 1] = node;
}
}
document.getElementById(this.name + "_halfCheckedNodes").value = listStr;
return checkedNodes;
}
// 设置父节点的选中状态
this.doParentChecked = function (id, flg) {
var node = this.nodeList[id];
if (!node.showCheck || node.pid < 0) {
return;
}
var ch_thiscb = document.getElementById(this.name + "_che_" + node.pid);
if (this.checkType == 0) {
if (flg > 0) {
// 选中
// 只要一个兄弟节点没选中,父亲节点变为半选
if (!this.getAllChildNodeChecked(node.pid, true)
|| !this.getAllChildNodeHalfChecked(node.pid)) {
ch_thiscb.checked = false;
this.nodeList[node.pid].isChecked = false;
ch_thiscb.indeterminate = true;
this.nodeList[node.pid].halfChecked = true;
} else {
ch_thiscb.checked = true;
this.nodeList[node.pid].isChecked = true;
ch_thiscb.indeterminate = false;
this.nodeList[node.pid].halfChecked = false;
}
this.doParentChecked(node.pid, flg);
} else if (flg < 0) {
// 不选中
ch_thiscb.checked = false;
this.nodeList[node.pid].isChecked = false;
ch_thiscb.indeterminate = false;
// 所有兄弟节点有一个不选中,父节点半选
this.nodeList[node.pid].halfChecked = false;
if (!this.getAllChildNodeChecked(node.pid, false)
|| !this.getAllChildNodeHalfChecked(node.pid)) {
ch_thiscb.indeterminate = true;
this.nodeList[node.pid].halfChecked = true;
}
this.doParentChecked(node.pid, flg);
} else {
// 半选
ch_thiscb.checked = false;
this.nodeList[node.pid].isChecked = false;
ch_thiscb.indeterminate = true;
this.nodeList[node.pid].halfChecked = true;
this.doParentChecked(node.pid, flg);
}
} else if (this.checkType == 1) {
if (flg > 0) {
// 选中
if (!ch_thiscb.checked) {
ch_thiscb.checked = false;
this.nodeList[node.pid].isChecked = false;
ch_thiscb.indeterminate = true;
this.nodeList[node.pid].halfChecked = true;
this.doParentChecked(node.pid, flg);
}
} else if (flg < 0) {
// 不选中
if (!ch_thiscb.checked) {
ch_thiscb.checked = false;
this.nodeList[node.pid].isChecked = false;
ch_thiscb.indeterminate = false;
// 所有兄弟节点有一个不选中,父节点半选
this.nodeList[node.pid].halfChecked = false;
if (!this.getAllChildNodeChecked(node.pid, false)
|| !this.getAllChildNodeHalfChecked(node.pid)) {
ch_thiscb.indeterminate = true;
this.nodeList[node.pid].halfChecked = true;
}
this.doParentChecked(node.pid, flg);
}
}
}
}
this.doSetChecked = function (id, flg) {
var node = this.nodeList[id];
node.halfChecked = false;
// 处理孩子节点的选中
for (var i = 0; i < node.childList.length; i++) {
var ch_node = this.nodeList[node.childList[i]];
if (!ch_node.isDelete) {
if (this.checkType == 0) {
var ch_thiscb = document.getElementById(this.name + "_che_"
+ node.childList[i]);
ch_thiscb.indeterminate = false;
ch_thiscb.checked = flg;
ch_node.isChecked = flg;
ch_node.halfChecked = false;
this.doSetChecked(node.childList[i], flg);
} else if (this.checkType == 1) {
var p_thiscb = document.getElementById(this.name + "_che_"
+ node.id);
if (!p_thiscb.checked) {
if (!this.getAllChildNodeChecked(node.id, false)
|| !this.getAllChildNodeHalfChecked(node.id)) {
p_thiscb.indeterminate = true;
this.nodeList[node.id].halfChecked = true;
}
}
}
}
}
}
// 判断孩子是否都选中了
this.getAllChildNodeChecked = function (id, type) {
var node = this.nodeList[id];
for (var i = 0; i < node.childList.length; i++) {
var ch_node = this.nodeList[node.childList[i]];
if (!ch_node.isDelete) {
if (type == null || type) {
if (!ch_node.isChecked) {
return false;
}
} else if (!type) {
if (ch_node.isChecked) {
return false;
}
}
}
}
return true;
}
// 判断孩子是否有半选中
this.getAllChildNodeHalfChecked = function (id) {
var node = this.nodeList[id];
for (var i = 0; i < node.childList.length; i++) {
var ch_node = this.nodeList[node.childList[i]];
if (!ch_node.isDelete) {
if (ch_node.halfChecked) {
return false;
}
}
}
return true;
}
/** ***设置树节点状态方法结束**** */
/** ***树的附加动作开始**** */
// 执行点击节点的JS方法。
this.doJSFun = function (id) {
window.event.cancelBubble = true;
if (window.event.button != 2) {
this.doActivedById(id);
}
}
this.doActivedById = function (id) {
this.setNodeActiveById(id);
if (this.isShow && this.isDisabled()) {
return;
}
var node = this.nodeList[id];
if (node.disabled) {
return;
}
if (!this.isFinish && this.showType) {
alert("您的节点事件出现异常,或是重复提交!");
return;
}
this.changeClickID(id);
this.setTreeNodeID(id);
if (node.jsfun != "") {
try {
eval(node.jsfun);
} catch (e) {
this.doError(id, e, "点击节点的方法", node.jsfun);
return;
}
}
return node;
}
this.doActivedByName = function (inName) {
if (this.isShow && this.isDisabled()) {
return null;
}
if (inName == null || inName == "") {
alert("请输入正确的节点名!");
return;
}
var node = this.getNodeByName(inName);
if (node != null) {
this.doActivedById(node.id);
}
return node;
}
// 初始化树
this.initTree = function () {
var strTemp = "";
if (document.getElementById(this.name + "_thisTreeNodeID") == null) {
strTemp += "";
strTemp += "";
strTemp += "";
strTemp += "";
}
return strTemp;
};
// 创建或删除内部桢(用于BinaryStar的即点即查树)
this.optionFrame = function (optionType) {
if (this.isShow && this.isDisabled()) {
return false;
}
var frame = document.getElementById("BSTree_frame_tab");
var tree = document.getElementById(this.name + "_main");
if (tree == null) {
return false;
}
if (optionType) {
if (frame == null) {
// 创建
var tree_tab = document.createElement("table");
tree_tab.id = "BSTree_frame_tab";
tree_tab.style.cssText = "width:1px;height:1px;";
var row = tree_tab.insertRow(0);
var sell = row.insertCell(0);
sell.style.cssText = "width:1px;height:1px";
sell.innerHTML = "";
tree.appendChild(tree_tab);
}
} else {
if (frame != null) {
// 删除
tree.removeChild(frame);
}
}
return true;
};
// 设置选中的操作
this.doTreeNodeRef = function () {
if (this.isShow && this.isDisabled()) {
return;
}
var node = this.nodeList[this.clickID];
// 刷新
//node.childList = new Array();
eval(node.openjs);
};
/** ***树的附加动作结束**** */
/** ***用户使用JS函数开始**** */
// 设置指定节点的选中状态
this.setNodeActiveById = function (inId) {
if (this.isShow && this.isDisabled()) {
return null;
}
if (inId == null) {
alert("请输入一个数字!");
return;
}
if (inId >= 0 && inId < this.nodeList.length) {
var node = this.nodeList[inId];
if (node.disabled) {
return;
}
this.openParent(node.pid);
this.changeClickID(inId);
this.setTreeNodeID(inId);
return this.nodeList[inId];
}
return null;
};
this.setNodeActiveByName = function (inName) {
if (this.isShow && this.isDisabled()) {
return null;
}
if (inName == null || inName == "") {
alert("请输入正确的节点名!");
return;
}
var node = this.getNodeByName(inName);
if (node != null && !node.disabled) {
this.openParent(node.id);
this.changeClickID(node.id);
this.setTreeNodeID(node.id);
}
return node;
};
// 打开/关闭指定节点
this.expandById = function (inId) {
if (inId == null) {
alert("请输入一个数字!");
return;
}
if (inId >= 0 && inId < this.nodeList.length) {
this.openParent(this.nodeList[inId].pid);
this.doOpen(inId);
return this.nodeList[inId];
}
return null;
};
this.expandByName = function (inName) {
if (inName == null || inName == "") {
alert("请输入正确的节点名!");
return;
}
var node = this.getNodeByName(inName);
if (node != null) {
this.expandById(node.id);
}
return node;
};
// 打开指定节点
this.openById = function (inId) {
if (inId == null) {
alert("请输入一个数字!");
return;
}
if (inId >= 0 && inId < this.nodeList.length) {
if (!this.nodeList[inId].openFlag()) {
this.openParent(this.nodeList[inId].pid);
this.doOpen(inId);
}
return this.nodeList[inId];
}
return null;
};
this.openByName = function (inName) {
if (inName == null || inName == "") {
alert("请输入正确的节点名!");
return;
}
var node = this.getNodeByName(inName);
if (node != null) {
this.openById(node.id);
}
return node;
};
// 关闭指定节点
this.closeById = function (inId) {
if (inId == null) {
alert("请输入一个数字!");
return;
}
if (inId >= 0 && inId < this.nodeList.length) {
if (this.nodeList[inId].openFlag()) {
this.doOpen(inId);
}
return this.nodeList[inId];
}
return null;
};
this.closeByName = function (inName) {
if (inName == null || inName == "") {
alert("请输入正确的节点名!");
return;
}
var node = this.getNodeByName(inName);
if (node != null) {
this.closeById(node.id);
}
return node;
};
// 设置重复点击判断(用户即点即查)
this.setFinish = function (flg, batchFlg) {
if (flg == null || flg == "false" || !flg) {
this.isFinish = false;
// 是否批量
if (batchFlg != null && (batchFlg == "true" || batchFlg)) {
this.batchFlg = true;
}
if (this.showType) {
this.thisOppNode = this.getSelectNode();
if (this.thisOppNode == null) {
this.thisOppNode = this.getNodeById(0);
}
}
} else {
this.isFinish = true;
if (this.showType && this.thisOppNode != null && this.thisOppNode.childList.length <= 0) {
this.thisOppNode.updateNode(this.thisOppNode);
}
// 展现添加的节点
if (this.batchFlg) {
this.DrawAddNode();
}
if (this.thisOppNode != null) {
this.setScroll(this.thisOppNode.id);
}
this.batchFlg = false;
this.thisOppNode = null;
this.addList.length = 0;
}
};
this.getFinish = function () {
return this.isFinish;
};
// 根据节点显示的内容模糊查询
this.searcNodesByText = function (inText) {
if (inText == null || inText == "") {
alert("请输入要匹配的字符串!");
return;
}
var resNodes = new Array();
for (var i = 0; i < this.nodeList.length; i++) {
if ($.trim(this.nodeList[i].showStr).indexOf(inText) >= 0) {
resNodes.length++;
resNodes[resNodes.length - 1] = this.nodeList[i];
}
}
if (resNodes.length <= 0) {
alert("没有找到匹配的节点!");
}
return resNodes;
};
// 根据节点关键字模糊查询
this.searcNodesByName = function (inName) {
if (inName == null || inName == "") {
alert("请输入要匹配的字符串!");
return;
}
var resNodes = new Array();
for (var i = 0; i < this.nodeList.length; i++) {
if ($.trim(this.nodeList[i].name).indexOf(inName) >= 0) {
resNodes.length++;
resNodes[resNodes.length - 1] = this.nodeList[i];
}
}
if (resNodes.length <= 0) {
alert("没有找到匹配的节点!");
}
return resNodes;
};
// 根据节点关键字检索节点
this.getNodeByName = function (inName) {
for (var i = 0; i < this.nodeList.length; i++) {
if (this.nodeList[i].getName() == inName
&& !this.nodeList[i].isDelete) {
return this.nodeList[i];
}
}
return null;
};
// 根据节点索引检索节点
this.getNodeById = function (inId) {
if (inId >= 0 && inId < this.nodeList.length) {
return this.nodeList[inId];
}
return null;
};
// 设置当前选中树节点
this.setTreeNodeID = function (in_id) {
if (this.disabled) {
return;
}
document.getElementById(this.name + "_thisTreeNodeID").value = in_id;
document.getElementById("thisTreeName").value = this.name;
};
this.getSelectNode = function () {
if (this.getTreeNodeID() >= 0
&& this.getTreeNodeID() < this.nodeList.length) {
return this.nodeList[this.getTreeNodeID()];
} else {
// alert("没有选中的节点!");
return null;
}
};
this.getTreeNodeID = function () {
return document.getElementById(this.name + "_thisTreeNodeID").value;
};
// 得到当前选中的树节点ID
this.getTreeNodePid = function () {
var reStr = this.nodeList[this.getTreeNodeID()].pid;
return reStr;
}
// 得到当前选中的树节点的附属参数
this.getTreeNodePara = function () {
var reStr = this.nodeList[this.getTreeNodeID()].paras;
return reStr;
}
// 得到当前选中的树节点的名称
this.getTreeNodeName = function () {
var reStr = this.nodeList[this.getTreeNodeID()].name;
return reStr;
}
// 得到当前选中的树节点的显示内容
this.getTreeNodeShowStr = function () {
var reStr = this.nodeList[this.getTreeNodeID()].showStr;
return reStr;
}
// 得到当前选中的树节点的JS动作名
this.getTreeNodeJsFun = function () {
var reStr = this.nodeList[this.getTreeNodeID()].jsfun;
return reStr;
}
// 根据附属参数名得到当前选中的树节点的对应附属参数值
this.getTreeOneParaByName = function (in_paraName) {
var reStr = this.getTreeNodePara();
if (reStr != null && reStr != "") {
var temp1 = reStr;
var a = temp1.split("&");
for (var i = 0; i < a.length; i++) {
var t = a[i].split("=");
if (t[0] == in_paraName) {
return t[1];
}
}
}
}
/** ***用户使用JS函数结束**** */
}
function BSNode(id, pid, deepID, treeName, name, showStr, jsfun, openjs, paras,
isOpen, isDoOpen) {
this.id = id;// 节点索引。
this.pid = pid;// 父节点索引,为-1表示是根。
this.deepID = deepID;// 节点深度。
this.showStr = showStr || "BSNode_" + this.id;// 节点显示的文字内容
this.jsfun = jsfun || ""// 该节点点击的JS操作
this.closejs = ""// 收缩该节点的方法
this.openjs = openjs || ""// 即点即查,该节点点击展开的JS操作。
this.treeName = treeName || "BSTreeView";// 树对象实例名。
this.name = name ? name : "BSNode";// 节点名。
this.paras = paras || "";// 节点其他参数。
this.childList = new Array();
this.isOpen = isOpen || false;
this.isDoOpen = isDoOpen || false;
this.openImg = "open.png";
this.closeImg = "close.png";
this.nodeImg = "jsdoc.png";
this.body = null;
this.isDelete = false;
this.title = "";// 节点的title
this.showCheck = false;
this.isChecked = false;
this.checkJSFun = "";// 点击checkbox的附加方法
this.halfChecked = false;
this.isError = false;
this.disabled = false;// 是否可用。true:不可用;false:可用;缺省为可用。
this.prevId = -1;
this.nextId = -1;
/** ***get/set方法开始**** */
this.getId = function () {
return this.id;
};
this.setId = function (inId) {
this.id = inId;
};
this.getName = function () {
return this.name;
};
this.setName = function (inName) {
this.name = inName;
};
this.setBody = function (inBody) {
this.body = inBody;
};
this.getBody = function () {
return this.body;
};
// 更新节点显示的文字
this.setShowStr = function (inStr) {
var tempTree = eval(this.treeName);
if (tempTree.isDisabled()) {
return false;
}
this.showStr = inStr;
if ($("#" + this.treeName + "_" + this.id).length > 0) {
$("#" + this.treeName + "_" + this.id).children().remove();
$("#" + this.treeName + "_" + this.id).html(this.showStr);
}
};
this.getShowStr = function () {
return this.showStr;
};
this.setTitle = function (inTitle) {
var tempTree = eval(this.treeName);
if (tempTree.isDisabled()) {
return false;
}
this.title = inTitle;
var str = document.getElementById(this.treeName + "_" + this.id);
if (str != null) {
str.title = inTitle;
}
};
this.getTitle = function () {
return this.title;
};
this.openFlag = function () {
return this.isOpen;
};
this.getDeep = function () {
return this.deepID;
};
/** ***get/set方法结束**** */
/** ***节点操作方法开始**** */
this.addChildItem = function (id) {
var tempTree = eval(this.treeName);
if (tempTree.isDisabled()) {
return false;
}
this.childList.length++;
this.childList[this.childList.length - 1] = id;
};
// 更新一个节点
this.updateNode = function (inNode) {
if (this.disabled) {
return null;
}
var tempTree = eval(this.treeName);
return tempTree.updateNode(this.id, inNode);
};
// 添加子节点
this.addNode = function (name, showStr, jsfun, openjs, paras, isOpen,
isDoOpen, openImg, closeImg, nodeImg) {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
return tempTree.addNode(this.id, (this.deepID + 1), name, showStr,
jsfun, openjs, paras, isOpen, isDoOpen, openImg, closeImg,
nodeImg);
};
this.addOneNode = function (inId) {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
return tempTree.addOneNode(this.id, tempTree.getNodeById(inId));
};
this.deleteOneChildNode = function () {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
var p = -1;
if (this.pid < 0) {
// 单个根节点(暂不提供)
} else {
var p_node = tempTree.nodeList[this.pid];
for (var i = 0; i < p_node.childList.length; i++) {
// 得到孩子位置
if (p_node.childList[i] == this.id) {
p = i;
}
if (p >= 0 && i <= p_node.childList.length - 2) {
p_node.childList[i] = p_node.childList[i + 1];
}
}
if (p >= 0) {
p_node.childList.length--;
}
}
}
// 删除本节点
this.remove = function () {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
tempTree.removeNode(this.id);
}
// 激活该节点
this.setNodeActive = function () {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
tempTree.setNodeActiveById(this.id);
}
// 激活该节点并执行操作
this.doActived = function () {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
tempTree.doActivedById(this.id);
}
// 打开/关闭本节点
this.expand = function () {
var tempTree = eval(this.treeName);
tempTree.expandById(this.id);
}
// 打开本节点
this.open = function () {
if (!this.isOpen) {
var tempTree = eval(this.treeName);
tempTree.openById(this.id);
}
}
// 关闭本节点
this.close = function () {
if (this.isOpen) {
var tempTree = eval(this.treeName);
tempTree.closeById(this.id);
}
}
// 删除本节点的所有孩子节点
this.removeAllChildren = function () {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
tempTree.removeAllChildren(this.id);
this.setNodeActive();
}
/** ***节点操作方法开始**** */
/** ***亲属节点开始**** */
// 得到上一个兄弟
this.prev = function () {
var tempTree = eval(this.treeName);
if (this.prevId != null || this.prevId >= 0) {
return tempTree.nodeList[this.prevId];
}
return null;
}
// 得到下一个兄弟
this.next = function () {
var tempTree = eval(this.treeName);
if (this.nextId != null && this.nextId >= 0) {
return tempTree.nodeList[this.nextId];
}
return null;
}
// 得到第一个兄弟
this.first = function () {
var tempTree = eval(this.treeName);
var p_node = tempTree.nodeList[this.pid];
return tempTree.nodeList[p_node.childList[0]];
}
// 得到最后一个兄弟
this.last = function () {
var tempTree = eval(this.treeName);
var p_node = tempTree.nodeList[this.pid];
return tempTree.nodeList[p_node.childList[p_node.childList.length - 1]];
}
// 得到父亲
this.parent = function () {
var tempTree = eval(this.treeName);
if (this.pid >= 0) {
return tempTree.nodeList[this.pid];
}
return null;
}
// 得到孩子节点集合
this.children = function () {
var tempTree = eval(this.treeName);
var tempList = new Array(this.childList.length);
for (var i = 0; i < this.childList.length; i++) {
tempList[i] = tempTree.nodeList[this.childList[i]];
}
return tempList;
}
/** ***亲属节点结束**** */
/** ***用户使用JS函数开始**** */
// 根据附属参数名得到本节点的对应附属参数值
this.getTreeOneParaByName = function (paraName) {
if (this.paras != null && this.paras != "") {
var temp1 = this.paras;
var a = temp1.split("&");
for (var i = 0; i < a.length; i++) {
var t = a[i].split("=");
if (t[0] == paraName) {
return t[1];
}
}
}
}
// 根据节点显示的内容模糊查询子节点
this.searcNodesByText = function (inText) {
if (inText == null || inText == "") {
alert("请输入要匹配的字符串!");
return;
}
var tempTree = eval(this.treeName);
var resNodes = new Array();
this.searchChildrenNodeByText(resNodes, inText);
if (resNodes.length <= 0) {
alert("没有找到匹配的节点!");
}
return resNodes;
}
// 根据节点的关键字模糊查询
this.searcNodesByName = function (inName) {
if (inName == null || inName == "") {
alert("请输入要匹配的字符串!");
return;
}
var tempTree = eval(this.treeName);
var resNodes = new Array();
this.searchChildrenNodeByName(resNodes, inName);
if (resNodes.length <= 0) {
alert("没有找到匹配的节点!");
}
return resNodes;
}
/** ***用户使用JS函数结束**** */
// 查找匹配的孩子节点(私有)
this.searchChildrenNodeByName = function (resNodes, inName) {
var tempTree = eval(this.treeName);
for (var i = 0; i < this.childList.length; i++) {
var thisNode = tempTree.nodeList[this.childList[i]];
if ($.trim(thisNode.name).indexOf(inName) >= 0) {
resNodes.length++;
resNodes[resNodes.length - 1] = thisNode;
}
// 查找孩子的孩子
if (thisNode.childList.length > 0) {
thisNode.searchChildrenNodeByName(resNodes, inName);
}
}
}
// 查找匹配的孩子节点(私有)
this.searchChildrenNodeByText = function (resNodes, inText) {
var tempTree = eval(this.treeName);
for (var i = 0; i < this.childList.length; i++) {
var thisNode = tempTree.nodeList[this.childList[i]];
if ($.trim(thisNode.showStr).indexOf(inText) >= 0) {
resNodes.length++;
resNodes[resNodes.length - 1] = thisNode;
}
// 查找孩子的孩子
if (thisNode.childList.length > 0) {
thisNode.searchChildrenNodeByText(resNodes, inText);
}
}
}
// checbox的操作
this.doCheckBox = function (flg) {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
tempTree.doCheckBox(this.id, flg);
}
// 设置是否有CheckBox
this.showCheckBox = function (flg) {
var tempTree = eval(this.treeName);
if (tempTree.isShow && this.disabled) {
return null;
}
tempTree.showNodeCheckBox(this.id, flg);
}
// 得到该节点是否可用
this.isDisabled = function () {
return this.disabled;
}
// 设置该节点孩子节点是否可用
this.setDisabled = function (inFlg) {
var tempTree = eval(this.treeName);
tempTree.setNodeDisabled(this.id, inFlg);
}
}