- var textField_khz=new Ext.form.TextField({
- fieldLabel: '窗口测试',
- emptyText:'点击弹出',
- readOnly :true,
- //allowBlank:false,
- name: 'o_khzdh',
- id: 'o_khzdh_text',
- allowBlank:false,
- anchor:'90%'
- });
- textField_khz.on("focus",function(){
- parent.creatCarWithOrgTreePanel({
- //rootOrg:1,
- treedepth:3,
- callbackFunction:callbackNodeFunction,
- selectType:'111',
- viewUserGroup:true,
- viewCarGroup:true,
- oneCheckModel:false
- });
- });
- function callbackNodeFunction(nodeArr){
- //alert(nodeArr.length);
- Ext.getCmp("o_khzdh_text").setValue(nodeArr[0].text)
- }
- /**
- * config:参数配置
- * rootOrg:int
- * 根节点开始机构代号 比如 1,根节点从1开始,如果为空的化从session中得到。
- * treedepth:int
- * 机构树的深度 为1的化就显示当前机构,不显示下一级机构,为0的化显示所有的机构
- * oneCheckModel:Boolean
- * 单选模式:true的时候只选一个,默认多选模式。
- * viewUserGroup:Boolean
- * 显示用户客户组,默认不显示。
- * viewCarGroup:Boolean
- * 显示车队用户组,默认不显示。
- * selectType:模式:‘机构客户车队’,‘000’
- * 选择的时候只选择客户组或者之选择车队或者机构。
- * 如:只选机构‘100’,只选客户‘010’ ,只选车队‘001’,全选‘111’ 客户和车队‘011’,默认‘111’,
- * 但是这里和机构树不同的是,部队机构类型做出判断,点击机构的时候选中机构和机构下面的客户组或者车队,不选择机构下面的机构
- * callbackFunction 回调函数 用于向外传递值
- */
- var carWithOrgTreePanel;
- function creatCarWithOrgTreePanel(config){
- if(!config.rootOrg)config.rootOrg=0;
- if(!config.treedepth)config.treedepth=0;
- if(!config.oneCheckModel)config.oneCheckModel=false;
- if(!config.viewUserGroup)config.viewUserGroup=false;
- if(!config.viewCarGroup)config.viewCarGroup=false;
- if(!config.selectType)config.selectType='111';
- var Tree = Ext.tree;
- var orghasloadNodeHashTable=new Hashtable();
- var userhasloadNodeHashTable=new Hashtable();
- var carhasloadNodeHashTable=new Hashtable();
- var tree = new Tree.TreePanel({
- autoScroll:true,
- region: 'center',
- height:'100%',
- animate:false,
- border :false
- });
- var root;
- //如果输入了机构代号,那么直接指定根节点
- if(config.rootOrg!=0){
- publicInterfaceManage.getOrgMsgNOde(config.rootOrg,function(value){
- if(value!=null){
- root = new Tree.TreeNode({
- id:value.n_jgdh,
- expanded:true,
- checked:false,
- attributes:[isDept=true,isKHZ=false,isCD=false],
- text: value.c_jgmc,
- icon:"../../../theme/default/images/tree/icondept.gif"
- });
- //当选择了显示机构的时候或者树的深度选了1的时候,这里显示本机构和本机构下一级机构
- if(config.treedepth!=1){
- publicInterfaceManage.getJgxxList(value.n_jgdh,function(va){
- for(var i=0;i<va.length;i=i+1){
- apendOrgNodeWithCheckBox(root,va[i]);
- }
- });
- }
- //hashtable中添加root节点
- if(!orghasloadNodeHashTable.contains(root.id)){
- orghasloadNodeHashTable.add(root.id,root);
- }
- initAllKhz(root.id);
- tree.setRootNode(root);
- _init();
- }
- });
- }
- else{
- //将当前的机构设置为树的根节点
- publicInterfaceManage.getTreeRootNode(function(value){
- if(value!=null){
- root = new Tree.TreeNode({
- id:value.n_jgdh,
- expanded:true,
- checked:false,
- attributes:[isDept=true,isKHZ=false,isCD=false],
- text: value.c_jgmc,
- icon:"../../../theme/default/images/tree/icondept.gif"
- });
- //当选择了显示机构的时候或者树的深度选了1的时候,这里显示本机构和本机构下一级机构
- if(config.treedepth!=1){
- publicInterfaceManage.getJgxxList(value.n_jgdh,function(va2){
- for(var i=0;i<va2.length;i=i+1){
- apendOrgNodeWithCheckBox(root,va2[i]);
- }
- });
- }
- //hashtable中添加root节点
- if(!orghasloadNodeHashTable.contains(root.id)){
- orghasloadNodeHashTable.add(root.id,root);
- }
- initAllKhz(root.id);
- tree.setRootNode(root);
- _init();
- }
- });
- }
- function _init(){
- tree.on("dblclick",apendNodeAfterClick);
- tree.on('checkchange', function(node, checked) {
- checkChangeAction(node, checked);
- });
- carWithOrgTreePanel=new Ext.Window({
- title: '单位选择',
- layout: 'border',
- closable:true,
- width:300,
- height:400,
- border:false,
- plain:true,
- closeAction:'close',
- items: [ tree ]
- });
- carWithOrgTreePanel.show();
- }
- //___________________________________一些函数
- //添加一个带复选框的机构节点
- function apendOrgNodeWithCheckBox(node,Val_Org){
- if(!orghasloadNodeHashTable.contains(Val_Org.n_jgdh)){
- var newnode = new Tree.TreeNode({
- id:Val_Org.n_jgdh,
- expanded:true,
- checked:false,
- attributes:[isDept=true,isKHZ=false,isCD=false],
- text:Val_Org.c_jgmc,
- icon:"../../../theme/default/images/tree/icondept.gif"
- });
- node.appendChild(newnode);
- orghasloadNodeHashTable.add(newnode.id,newnode);
- }
- }
- //添加一个带复选框的客户节点
- function apendUserNodeWithCheckBox(node,Val_khz){
- if(!userhasloadNodeHashTable.contains(Val_khz.n_khzdh)){
- var newnode=new Tree.TreeNode({
- id:Val_khz.n_khzdh,
- expanded:true,
- checked:false,
- attributes:[isDept=false,isKHZ=true,isCD=false],
- text:Val_khz.c_khzxm,
- icon:"../../../theme/default/images/tree/kehu.gif"
- });
- node.appendChild(newnode);
- userhasloadNodeHashTable.add(newnode.id,newnode);
- }
- }
- //添加一个带复选框的车队节点
- function apendCarNodeWithCheckBox(node,Val_khz){
- if(!carhasloadNodeHashTable.contains(Val_khz.n_khzdh)){
- var newnode=new Tree.TreeNode({
- id:Val_khz.n_khzdh,
- expanded:true,
- checked:false,
- attributes:[isDept=false,isKHZ=false,isCD=true],
- text:Val_khz.c_khzxm,
- icon:"../../../theme/default/images/tree/chedui.gif"
- });
- node.appendChild(newnode);
- carhasloadNodeHashTable.add(newnode.id,newnode);
- }
- }
- //树节点点击拓展事件
- function apendNodeAfterClick(node){
- node.getUI().checkbox.checked=false;
- if(node.attributes.attributes[0]) initAllKhz(node.id);
- }
- function checkChangeAction(node, checked){
- //当节点处于被选中状态的时候
- if(node.getUI().checkbox.checked==true){
- //单选模式的时候
- if(config.oneCheckModel){
- clearChildNodeChecked(root);
- root.getUI().checkbox.checked=false;
- //当只选择机构且节点类型为机构的时候
- if(config.selectType.substring(0,1)==1&&node.attributes.attributes[0]){
- node.getUI().checkbox.checked=true;
- return;
- }
- //当只选择机构且节点类型为客户的时候
- if(config.selectType.substring(1,2)==1&&node.attributes.attributes[1]){
- node.getUI().checkbox.checked=true;
- return;
- }
- //当只选择机构且节点类型为车队的时候
- if(config.selectType.substring(2,3)==1&&node.attributes.attributes[2]){
- node.getUI().checkbox.checked=true;
- return;
- }
- }
- //当为多选模式的时候
- else{
- //当节点类型为机构的时候
- if(node.attributes.attributes[0]){
- node.getUI().checkbox.checked=true;
- //选中子节点
- makeChildNodesChecked(node);
- makeChildNodesOrgUnchecked(node);
- }
- //当节点类型为客户的时候
- if(node.attributes.attributes[1]){
- //当客户为可选类型的时候,选中此节点,否则不予选中
- if(config.selectType.substring(1,2)==1) node.getUI().checkbox.checked=true;
- else node.getUI().checkbox.checked=false;
- }
- //当节点类型为车队的时候
- if(node.attributes.attributes[2]){
- //当车队为可选类型的时候,选中此节点,否则不予选中
- if(config.selectType.substring(2,3)==1) node.getUI().checkbox.checked=true;
- else node.getUI().checkbox.checked=false;
- }
- //选中子节点
- makeChildNodesChecked(node);
- makeChildNodesOrgUnchecked(node);
- //当一个节点下面所有的字节点(不包含机构节点)都被选中的时候,自动选中根节点
- getChildNumWithoutOrg(getParentOrgNode(node));
- }
- }
- //当节点被取消选中的时候
- else{
- node.getUI().checkbox.checked=false;
- clearChildNodeChecked(node);
- //当这个节点不是机构的时候,也取消机构节点的勾选状态
- if(!node.attributes.attributes[0]){
- var parentOrgNode=getParentOrgNode(node);
- parentOrgNode.getUI().checkbox.checked=false;
- }
- getChildNumWithoutOrg(getParentOrgNode(node));
- }
- }
- //得到一个节点下面所有字节点(不包含子节点为机构的节点的字节点)的个数,传入参数为该节点的上级机构节点
- function getChildNumWithoutOrg(orgNode){
- var nowNum=0;
- var allNum=0;
- for(var x in userhasloadNodeHashTable._hash){
- //得到子节点的上级机构节点
- var _parentorgnode=getParentOrgNode(userhasloadNodeHashTable._hash[x]);
- //当当前遍历的子节点的机构节点为传入的机构节点的话
- if(_parentorgnode==orgNode){
- allNum++;
- if(userhasloadNodeHashTable._hash[x].getUI().checkbox.checked==true)nowNum++;
- }
- }
- for(var x in carhasloadNodeHashTable._hash){
- //得到子节点的上级机构节点
- var _parentorgnode=getParentOrgNode(carhasloadNodeHashTable._hash[x]);
- //当当前遍历的子节点的机构节点为传入的机构节点的话
- if(_parentorgnode==orgNode){
- allNum++;
- if(carhasloadNodeHashTable._hash[x].getUI().checkbox.checked==true)nowNum++;
- }
- }
- if(nowNum==allNum) orgNode.getUI().checkbox.checked=true;
- }
- //清空一个节点下面的所有复选框
- function clearChildNodeChecked(node){
- if(node.childNodes.length!=0){
- for(var i=0;i<node.childNodes.length;i++){
- node.childNodes[i].getUI().checkbox.checked=false;
- clearChildNodeChecked(node.childNodes[i]);
- }
- }
- }
- //取消节点下面的字节点为机构的节点的字节点的选中状态
- function makeChildNodesOrgUnchecked(node){
- for(var i=0;i<node.childNodes.length;i++){
- if(node.childNodes[i].attributes.attributes[0]){
- clearChildNodeChecked(node.childNodes[i]);
- }
- }
- }
- //根据条件选中所有子节点
- function makeChildNodesChecked(node){
- for(var i=0;i<node.childNodes.length;i++){
- //当子节点为机构的时候直接不选中
- if(node.childNodes[i].attributes.attributes[0]){
- node.childNodes[i].getUI().checkbox.checked=false;
- }
- //当子节点为客户并且可以选择客户的时候,客户也被选中
- if(config.selectType.substring(1,2)==1&&node.childNodes[i].attributes.attributes[1]){
- node.childNodes[i].getUI().checkbox.checked=true;
- }
- //当子节点为车队并且可以选择车队的时候,车队也被选中
- if(config.selectType.substring(2,3)==1&&node.childNodes[i].attributes.attributes[2]){
- node.childNodes[i].getUI().checkbox.checked=true;
- }
- makeChildNodesChecked(node.childNodes[i]);
- }
- }
- //得到所有被选中的节点
- function ObjForReturnInButton(){
- var returnArr=new Array();
- for(var x in orghasloadNodeHashTable._hash)
- {
- if(orghasloadNodeHashTable._hash[x].getUI().checkbox.checked==true)
- returnArr.push(orghasloadNodeHashTable._hash[x]);
- }
- for(var x in userhasloadNodeHashTable._hash)
- {
- if(userhasloadNodeHashTable._hash[x].getUI().checkbox.checked==true)
- returnArr.push(userhasloadNodeHashTable._hash[x]);
- }
- for(var x in carhasloadNodeHashTable._hash)
- {
- if(carhasloadNodeHashTable._hash[x].getUI().checkbox.checked==true)
- returnArr.push(carhasloadNodeHashTable._hash[x]);
- }
- return returnArr;
- }
- //得到上级节点为机构的节点id
- var _parentOrgNode;
- function getParentOrgNode(node){
- if(node==root) return root;
- //当上级节点就为机构的时候
- if(!node.parentNode.attributes.attributes[0]) {
- getParentOrgNode(node.parentNode);
- }
- else {
- _parentOrgNode=node.parentNode;
- }
- return _parentOrgNode;
- }
- //在初始化根节点下面的所有的车队和客户,但是部队根节点下面的机构进行拓展
- function getOrgAllNode(jgdh){
- publicInterfaceManage.getAllGroupByOrgCode(jgdh,function(value){
- //上级客户组的遍历,首先得到上级客户组代号最小的,这里0为机构下面直属客户组,然后逐渐增大。
- var groupCodeArray=new Array();
- for(var i=0;i<value.length;i++){
- var boo=true;
- for(j=0;j<groupCodeArray.length;j++){
- if(groupCodeArray[i]==value[i])boo=false;
- }
- if(boo)groupCodeArray.push(value[i]);
- }
- groupCodeArray.sort();//默认升序排列
- var maxSuperiorsCustomerGroupCode=0;
- for(var i=0;i<value.length;i++){
- for(var j=0;j<groupCodeArray;j++){
- if(value[i].n_sjkhzdh==groupCodeArray[j]){
- if(groupCodeArray[j]==0){
- var orgNode=orghasloadNodeHashTable.items(jgdh);
- //当需要显示客户,并且客户组类型为客户的时候
- if(config.viewUserGroup==true&&value[i].n_khzlx==1){
- apendUserNodeWithCheckBox(orgNode,value[i]);
- }
- //当需要显示车队,并且客户组类型为车队的时候
- if(config.viewCarGroup==true&&value[i].n_khzlx==2){
- apendCarNodeWithCheckBox(orgNode,value[i]);
- }
- }
- else{
- if(config.viewUserGroup==true&&value[i].n_khzlx==1){
- var khzNode=userhasloadNodeHashTable.items(value[i].n_sjkhzdh);
- apendUserNodeWithCheckBox(khzNode,value[i]);
- }
- //当需要显示车队,并且客户组类型为车队的时候
- if(config.viewCarGroup==true&&value[i].n_khzlx==2){
- var khzNode=userhasloadNodeHashTable.items(value[i].n_sjkhzdh);
- apendCarNodeWithCheckBox(khzNode,value[i]);
- }
- }
- }
- }
- }
- });
- }
- //根据机构代号初始化机构下面的所有客户组
- function initAllKhz(n_jgdh){
- publicInterfaceManage.getAllGroupByOrgCode(n_jgdh,function(calBackValue){
- /**
- * key为上级节点代号,
- * value=obejct
- * value.isDept=boolean,value.isKHZ=boolean
- * value.valArr=array();
- */
- var superiorsHashtable=new Hashtable();
- for(i=0;i<calBackValue.length;i++){
- if(superiorsHashtable.contains(calBackValue[i].n_sjkhzdh)){
- superiorsHashtable.items(calBackValue[i].n_sjkhzdh).valArr.push(calBackValue[i]);
- }
- var key=calBackValue[i].n_sjkhzdh;
- var value=new Object();
- if(calBackValue[i].n_sjkhzdh==0){
- value.isDept=true;
- value.isKHZ=false;
- }
- else{
- value.isDept=false;
- value.isKHZ=true;
- }
- var arr=new Array();
- arr.push(calBackValue[i]);
- value.valArr=arr;
- superiorsHashtable.add(key,value);
- }
- //将得到的Hashtable添加到树中。
- var sortedHashtable=sortHashTable(superiorsHashtable);
- for(var i=0;i<sortedHashtable.length;i++){
- var superiorsIsOrg=superiorsHashtable.items(sortedHashtable[i]);
- if(sortedHashtable[i]==0){
- for(var j=0;j<superiorsIsOrg.valArr.length;j++){
- var orgNode=orghasloadNodeHashTable.items(n_jgdh);
- //当需要显示客户,并且客户组类型为客户的时候
- if(config.viewUserGroup==true&&superiorsIsOrg.valArr[j].n_khzlx==1){
- apendUserNodeWithCheckBox(orgNode,superiorsIsOrg.valArr[j]);
- }
- //当需要显示车队,并且客户组类型为车队的时候
- if(config.viewCarGroup==true&&superiorsIsOrg.valArr[j].n_khzlx==2){
- apendCarNodeWithCheckBox(orgNode,superiorsIsOrg.valArr[j]);
- }
- }
- }
- else{
- for(var j=0;j<superiorsIsOrg.valArr.length;j++){
- //当上级节点不为空的时候
- var cuParentNode=new Array();
- cuParentNode=getParentNode(sortedHashtable[i]);
- if(cuParentNode){
- //当需要显示客户,并且客户组类型为客户的时候
- if(config.viewUserGroup==true&&superiorsIsOrg.valArr[j].n_khzlx==1){
- apendUserNodeWithCheckBox(cuParentNode,superiorsIsOrg.valArr[j]);
- }
- //当需要显示车队,并且客户组类型为车队的时候
- if(config.viewCarGroup==true&&superiorsIsOrg.valArr[j].n_khzlx==2){
- apendCarNodeWithCheckBox(cuParentNode,superiorsIsOrg.valArr[j]);
- }
- }
- }
- }
- }
- })
- }
- //对hashtable中的key值进行排序
- function sortHashTable(hashtable){
- var sortedArr=new Array();
- for(var key in hashtable._hash){
- sortedArr.push(key);
- }
- return sortedArr.sort();
- }
- //根据节点Id得到上一级的节点
- function getParentNode(key){
- var returnObj;
- if(userhasloadNodeHashTable.items(key)) {
- returnObj=userhasloadNodeHashTable.items(key);
- }
- if(carhasloadNodeHashTable.items(key)){
- returnObj=carhasloadNodeHashTable.items(key);
- }
- return returnObj;
- }
- }
使用方法: