|  | @@ -87,6 +87,22 @@ let zTreeOprObj = {
 | 
	
		
			
				|  |  |          params.doc = rawNode;
 | 
	
		
			
				|  |  |          CommonAjax.postEx("report_tpl_api/updateTreeRootNode", params, 5000, isAsync, callback, failCallback, null);
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    partialUpdateTreeNode: function (rawNode, pathArray, nodeArray, isAsync, callback, failCallback) {
 | 
	
		
			
				|  |  | +        // 这个是局部刷新,原理是根据topNodeId找到后台的topNode,根据路径(有多个路径,可以实现多个子节点同时刷新)来替换(nodeArray里的)后台数据库的相关节点
 | 
	
		
			
				|  |  | +        // 这里需要一个调整,就是新增目录及模板需要加给后缀(new(Date)).getTime() ,以保证不重叠(真重叠了算倒霉)
 | 
	
		
			
				|  |  | +        // path描述:{ operation_type: '', // 操作类型:‘update’ ‘add’、‘delete’
 | 
	
		
			
				|  |  | +        //            node_path: [],      // 节点路径:如:['02.广东', '03.增城北绕线项目定制报表'],表示Top节点的items下的那个‘02.广东’子节点(要full scan)的items下的 ‘03.增城北绕线项目定制报表’子节点
 | 
	
		
			
				|  |  | +        //          }
 | 
	
		
			
				|  |  | +        // nodeArray: 与pathArray一一对应
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +        let params = {};
 | 
	
		
			
				|  |  | +        params.compilationId = rawNode.compilationId;
 | 
	
		
			
				|  |  | +        params.engineerId = rawNode.engineerId;
 | 
	
		
			
				|  |  | +        params.userId = rawNode.userId;
 | 
	
		
			
				|  |  | +        params.pathArray = pathArray;
 | 
	
		
			
				|  |  | +        params.nodeArray = nodeArray;
 | 
	
		
			
				|  |  | +        CommonAjax.postEx("report_tpl_api/partialUpdateTreeNode", params, 5000, isAsync, callback, failCallback, null);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      updateTopNodeName: function (topNode, isAsync, callback, failCallback) {
 | 
	
		
			
				|  |  |          let params = {};
 | 
	
		
			
				|  |  |          params.compilationId = topNode.compilationId;
 | 
	
	
		
			
				|  | @@ -128,6 +144,21 @@ let zTreeOprObj = {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return rst;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    getNodePath: function(node, includeCurrentNode) {
 | 
	
		
			
				|  |  | +        const rst = [];
 | 
	
		
			
				|  |  | +        if (includeCurrentNode) {
 | 
	
		
			
				|  |  | +            rst.push(node.name);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        let parentNode = node.getParentNode();
 | 
	
		
			
				|  |  | +        while (parentNode && parentNode.level > 0) { //顶节点是dummy的
 | 
	
		
			
				|  |  | +            rst.unshift(parentNode.name);
 | 
	
		
			
				|  |  | +            parentNode = parentNode.getParentNode();
 | 
	
		
			
				|  |  | +            if (parentNode === null || parentNode === undefined || parentNode.level === 0) {
 | 
	
		
			
				|  |  | +                rst.splice(0,1); // 删除头节点(后台不需要)
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return rst;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      buildSubRootNodeDoc: function(subNode) {
 | 
	
		
			
				|  |  |          let me = this, rst = null;
 | 
	
		
			
				|  |  |          if (subNode) {
 | 
	
	
		
			
				|  | @@ -181,40 +212,40 @@ let zTreeOprObj = {
 | 
	
		
			
				|  |  |          let me = zTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
 | 
	
		
			
				|  |  |          if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0 || treeNode.nodeType === RT.NodeType.TEMPLATE) return;
 | 
	
		
			
				|  |  |          if (treeNode.level === 0) {
 | 
	
		
			
				|  |  | -            let addStr = "<span class='button star' id='addBtn_" + treeNode.tId + "' title='新增编办类型' onfocus='this.blur();'></span>";
 | 
	
		
			
				|  |  | -            sObj.after(addStr);
 | 
	
		
			
				|  |  | -            let btn = $("#addBtn_"+treeNode.tId);
 | 
	
		
			
				|  |  | -            if (btn) btn.bind("click", function(){
 | 
	
		
			
				|  |  | -                let rawNode = me.createIniComilationNode();
 | 
	
		
			
				|  |  | -                if (!me.chkIfDupCompilationNode(rawNode, treeNode)) {
 | 
	
		
			
				|  |  | -                    rawNode.userId = treeNode.userId;
 | 
	
		
			
				|  |  | -                    me.addNewNodeEx(rawNode, function(rst){
 | 
	
		
			
				|  |  | -                        if (rst) {
 | 
	
		
			
				|  |  | -                            let newNodes = [], isSilent = false;
 | 
	
		
			
				|  |  | -                            rawNode.isParent = true;
 | 
	
		
			
				|  |  | -                            newNodes.push(rawNode);
 | 
	
		
			
				|  |  | -                            if (treeNode.items && treeNode.items.length > 0) {
 | 
	
		
			
				|  |  | -                                let insertIdx = -1;
 | 
	
		
			
				|  |  | -                                for (let i = 0; i < treeNode.items.length; i++) {
 | 
	
		
			
				|  |  | -                                    if (treeNode.items[i].compilationId === rawNode.compilationId) {
 | 
	
		
			
				|  |  | -                                        if (treeNode.items[i].engineerId > rawNode.engineerId) {
 | 
	
		
			
				|  |  | -                                            insertIdx = i;
 | 
	
		
			
				|  |  | -                                            break;
 | 
	
		
			
				|  |  | -                                        }
 | 
	
		
			
				|  |  | -                                    }
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                                me.treeObj.addNodes(treeNode, insertIdx, newNodes, isSilent);
 | 
	
		
			
				|  |  | -                            } else {
 | 
	
		
			
				|  |  | -                                me.treeObj.addNodes(treeNode, 0, newNodes, isSilent);
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        } else {
 | 
	
		
			
				|  |  | -                            alert("后台创建失败,请确认是否有重复类型跟节点!")
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }, null);
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                    alert("有重复编办!");
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            });
 | 
	
		
			
				|  |  | +            // let addStr = "<span class='button star' id='addBtn_" + treeNode.tId + "' title='新增编办类型' onfocus='this.blur();'></span>";
 | 
	
		
			
				|  |  | +            // sObj.after(addStr);
 | 
	
		
			
				|  |  | +            // let btn = $("#addBtn_"+treeNode.tId);
 | 
	
		
			
				|  |  | +            // if (btn) btn.bind("click", function(){
 | 
	
		
			
				|  |  | +            //     let rawNode = me.createIniComilationNode();
 | 
	
		
			
				|  |  | +            //     if (!me.chkIfDupCompilationNode(rawNode, treeNode)) {
 | 
	
		
			
				|  |  | +            //         rawNode.userId = treeNode.userId;
 | 
	
		
			
				|  |  | +            //         me.addNewNodeEx(rawNode, function(rst){
 | 
	
		
			
				|  |  | +            //             if (rst) {
 | 
	
		
			
				|  |  | +            //                 let newNodes = [], isSilent = false;
 | 
	
		
			
				|  |  | +            //                 rawNode.isParent = true;
 | 
	
		
			
				|  |  | +            //                 newNodes.push(rawNode);
 | 
	
		
			
				|  |  | +            //                 if (treeNode.items && treeNode.items.length > 0) {
 | 
	
		
			
				|  |  | +            //                     let insertIdx = -1;
 | 
	
		
			
				|  |  | +            //                     for (let i = 0; i < treeNode.items.length; i++) {
 | 
	
		
			
				|  |  | +            //                         if (treeNode.items[i].compilationId === rawNode.compilationId) {
 | 
	
		
			
				|  |  | +            //                             if (treeNode.items[i].engineerId > rawNode.engineerId) {
 | 
	
		
			
				|  |  | +            //                                 insertIdx = i;
 | 
	
		
			
				|  |  | +            //                                 break;
 | 
	
		
			
				|  |  | +            //                             }
 | 
	
		
			
				|  |  | +            //                         }
 | 
	
		
			
				|  |  | +            //                     }
 | 
	
		
			
				|  |  | +            //                     me.treeObj.addNodes(treeNode, insertIdx, newNodes, isSilent);
 | 
	
		
			
				|  |  | +            //                 } else {
 | 
	
		
			
				|  |  | +            //                     me.treeObj.addNodes(treeNode, 0, newNodes, isSilent);
 | 
	
		
			
				|  |  | +            //                 }
 | 
	
		
			
				|  |  | +            //             } else {
 | 
	
		
			
				|  |  | +            //                 alert("后台创建失败,请确认是否有重复类型跟节点!")
 | 
	
		
			
				|  |  | +            //             }
 | 
	
		
			
				|  |  | +            //         }, null);
 | 
	
		
			
				|  |  | +            //     } else {
 | 
	
		
			
				|  |  | +            //         alert("有重复编办!");
 | 
	
		
			
				|  |  | +            //     }
 | 
	
		
			
				|  |  | +            // });
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |              let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子目录' onfocus='this.blur();'></span>";
 | 
	
		
			
				|  |  |              sObj.after(addStr);
 | 
	
	
		
			
				|  | @@ -223,7 +254,7 @@ let zTreeOprObj = {
 | 
	
		
			
				|  |  |                  me.getNewNodeID(1, function (newNodeID) {
 | 
	
		
			
				|  |  |                      let rawNode = me.createIniNode();
 | 
	
		
			
				|  |  |                      rawNode.nodeType = RT.NodeType.NODE;
 | 
	
		
			
				|  |  | -                    rawNode.name = "新增子节点";
 | 
	
		
			
				|  |  | +                    rawNode.name = "新增子节点" + (new Date()).getTime();
 | 
	
		
			
				|  |  |                      rawNode.ID = newNodeID;
 | 
	
		
			
				|  |  |                      let newNodes = [], isSilent = false;
 | 
	
		
			
				|  |  |                      newNodes.push(rawNode);
 | 
	
	
		
			
				|  | @@ -242,12 +273,28 @@ let zTreeOprObj = {
 | 
	
		
			
				|  |  |                          me.treeObj.addNodes(treeNode, insertIdx, newNodes, isSilent);
 | 
	
		
			
				|  |  |                          let tn = me.getParentNodeByNodeLevel(treeNode, NODE_LEVEL_COMPILATION_NEW);
 | 
	
		
			
				|  |  |                          let newTopNode = me.buildRootNodeDoc(tn);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        //*
 | 
	
		
			
				|  |  | +                        let pathArr = [];
 | 
	
		
			
				|  |  | +                        let nodeArr = [];
 | 
	
		
			
				|  |  | +                        let path = {operation_type: 'add', node_path: []};
 | 
	
		
			
				|  |  | +                        path.node_path = me.getNodePath(treeNode, true);
 | 
	
		
			
				|  |  | +                        pathArr.push(path);
 | 
	
		
			
				|  |  | +                        nodeArr.push(rawNode);
 | 
	
		
			
				|  |  | +                        me.partialUpdateTreeNode(newTopNode, pathArr, nodeArr, true, function(rst){
 | 
	
		
			
				|  |  | +                            if (!(rst)) {
 | 
	
		
			
				|  |  | +                                alert("新增节点失败!");
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            me.refreshNodes();
 | 
	
		
			
				|  |  | +                        }, null);
 | 
	
		
			
				|  |  | +                        /*/
 | 
	
		
			
				|  |  |                          me.updateTreeRootNode(newTopNode, true, function(rst){
 | 
	
		
			
				|  |  |                              if (!(rst)) {
 | 
	
		
			
				|  |  |                                  alert("新增节点失败!");
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                              me.refreshNodes();
 | 
	
		
			
				|  |  |                          }, null);
 | 
	
		
			
				|  |  | +                        //*/
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |              });
 | 
	
	
		
			
				|  | @@ -260,7 +307,7 @@ let zTreeOprObj = {
 | 
	
		
			
				|  |  |                      me.getNewNodeID(1, function (newNodeID) {
 | 
	
		
			
				|  |  |                          let rawNode = me.createIniNode();
 | 
	
		
			
				|  |  |                          rawNode.nodeType = RT.NodeType.TEMPLATE;
 | 
	
		
			
				|  |  | -                        rawNode.name = "新增报表模板";
 | 
	
		
			
				|  |  | +                        rawNode.name = "新增报表模板" + (new Date()).getTime();
 | 
	
		
			
				|  |  |                          rawNode.ID = newNodeID;
 | 
	
		
			
				|  |  |                          rawNode.released = false;
 | 
	
		
			
				|  |  |                          let newNodes = [], isSilent = false;
 | 
	
	
		
			
				|  | @@ -268,12 +315,27 @@ let zTreeOprObj = {
 | 
	
		
			
				|  |  |                          me.treeObj.addNodes(treeNode, -1, newNodes, isSilent);
 | 
	
		
			
				|  |  |                          let tn = me.getParentNodeByNodeLevel(treeNode, NODE_LEVEL_COMPILATION_NEW);
 | 
	
		
			
				|  |  |                          let topNode = me.buildRootNodeDoc(tn);
 | 
	
		
			
				|  |  | +                        //*
 | 
	
		
			
				|  |  | +                        let pathArr = [];
 | 
	
		
			
				|  |  | +                        let nodeArr = [];
 | 
	
		
			
				|  |  | +                        let path = {operation_type: 'add', node_path: []};
 | 
	
		
			
				|  |  | +                        path.node_path = me.getNodePath(treeNode, true);
 | 
	
		
			
				|  |  | +                        pathArr.push(path);
 | 
	
		
			
				|  |  | +                        nodeArr.push(rawNode);
 | 
	
		
			
				|  |  | +                        me.partialUpdateTreeNode(topNode, pathArr, nodeArr, true, function(rst){
 | 
	
		
			
				|  |  | +                            if (!(rst)) {
 | 
	
		
			
				|  |  | +                                alert("新增节点失败!");
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            me.refreshNodes();
 | 
	
		
			
				|  |  | +                        }, null);
 | 
	
		
			
				|  |  | +                        /*/
 | 
	
		
			
				|  |  |                          me.updateTreeRootNode(topNode, true, function(rst){
 | 
	
		
			
				|  |  |                              if (!(rst)) {
 | 
	
		
			
				|  |  |                                  alert("新增空白模板失败!");
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                              me.refreshNodes();
 | 
	
		
			
				|  |  |                          }, null);
 | 
	
		
			
				|  |  | +                        //*/
 | 
	
		
			
				|  |  |                      });
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              });
 |