|  | @@ -364,49 +364,48 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |              nID = -1;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        let newNode = tree.insert(pID, nID);
 | 
	
		
			
				|  |  | -        newNode.data.type = nodeType;
 | 
	
		
			
				|  |  | -        newNode.data.nodeName = nodeName;
 | 
	
		
			
				|  |  | -        if (nodeType == 2){
 | 
	
		
			
				|  |  | -            let bill = source.datas[0];
 | 
	
		
			
				|  |  | -            newNode.data.compilationID = source.compilationID;
 | 
	
		
			
				|  |  | -            newNode.data.copyTime = source.copyTime;
 | 
	
		
			
				|  |  | -            newNode.data.firstNodeType = source.firstNodeType;
 | 
	
		
			
				|  |  | -            newNode.data.isFBFX = source.isFBFX;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            newNode.data.code = bill.code;
 | 
	
		
			
				|  |  | -            newNode.data.name = bill.name;
 | 
	
		
			
				|  |  | -            newNode.data.unit = bill.unit;
 | 
	
		
			
				|  |  | -            newNode.data.itemCharacterText = bill.itemCharacterText;
 | 
	
		
			
				|  |  | -            newNode.data.unitFee = (bill.feesIndex && bill.feesIndex.common) ? bill.feesIndex.common.unitFee : 0;
 | 
	
		
			
				|  |  | -            newNode.data.children = bill.children;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            for (let r of bill.children){
 | 
	
		
			
				|  |  | -                r.unitFee =  (r.feesIndex && r.feesIndex.common) ? r.feesIndex.common.unitFee : 0;
 | 
	
		
			
				|  |  | -                if (r.programID)
 | 
	
		
			
				|  |  | -                    r.programName = projectObj.project.calcProgram.compiledTemplateMaps[r.programID];
 | 
	
		
			
				|  |  | -                // delete r.ID;         // 这个不能删!
 | 
	
		
			
				|  |  | -                delete r.billsItemID;
 | 
	
		
			
				|  |  | -                delete r.fees;
 | 
	
		
			
				|  |  | -                delete r.feesIndex;
 | 
	
		
			
				|  |  | -            };
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        tree.selected = newNode;
 | 
	
		
			
				|  |  | +        let newN = tree.insert(pID, nID);
 | 
	
		
			
				|  |  | +        newN.data.type = nodeType;
 | 
	
		
			
				|  |  | +        newN.data.nodeName = nodeName;
 | 
	
		
			
				|  |  | +        if (nodeType == 2)
 | 
	
		
			
				|  |  | +            blockLibObj.assignData(newN, source);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        tree.selected = newN;
 | 
	
		
			
				|  |  |          let sheet = blockLibObj.mainSheet;
 | 
	
		
			
				|  |  |          sheet.suspendPaint();
 | 
	
		
			
				|  |  |          sheet.suspendEvent();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        let idx = tree.items.indexOf(newNode);
 | 
	
		
			
				|  |  | +        let idx = tree.items.indexOf(newN);
 | 
	
		
			
				|  |  |          sheet.addRows(idx, 1);
 | 
	
		
			
				|  |  |          sheet.getRange(idx, 0, 1, 1).locked(true);
 | 
	
		
			
				|  |  | -        sheet.setValue(idx, 0, newNode.data.nodeName);
 | 
	
		
			
				|  |  | +        sheet.setValue(idx, 0, newN.data.nodeName);
 | 
	
		
			
				|  |  |          sheet.setSelection(idx, 0, 1, 1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          sheet.resumeEvent();
 | 
	
		
			
				|  |  |          sheet.resumePaint();
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    assignData: function (block, source){
 | 
	
		
			
				|  |  | +        block.data.compilationID = source.compilationID;
 | 
	
		
			
				|  |  | +        block.data.copyTime = source.copyTime;
 | 
	
		
			
				|  |  | +        block.data.firstNodeType = source.firstNodeType;
 | 
	
		
			
				|  |  | +        block.data.isFBFX = source.isFBFX;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        let bill = source.datas[0];
 | 
	
		
			
				|  |  | +        block.data.code = bill.code;
 | 
	
		
			
				|  |  | +        block.data.name = bill.name;
 | 
	
		
			
				|  |  | +        block.data.unit = bill.unit;
 | 
	
		
			
				|  |  | +        block.data.itemCharacterText = bill.itemCharacterText;
 | 
	
		
			
				|  |  | +        block.data.unitFee = (bill.feesIndex && bill.feesIndex.common) ? bill.feesIndex.common.unitFee : 0;
 | 
	
		
			
				|  |  | +        block.data.children = bill.children;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        for (let r of bill.children){
 | 
	
		
			
				|  |  | +            r.unitFee =  (r.feesIndex && r.feesIndex.common) ? r.feesIndex.common.unitFee : 0;
 | 
	
		
			
				|  |  | +            if (r.programID)
 | 
	
		
			
				|  |  | +                r.programName = projectObj.project.calcProgram.compiledTemplateMaps[r.programID];
 | 
	
		
			
				|  |  | +            // delete r.ID;         // 这个不能删!
 | 
	
		
			
				|  |  | +            delete r.billsItemID;
 | 
	
		
			
				|  |  | +            delete r.fees;
 | 
	
		
			
				|  |  | +            delete r.feesIndex;
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      reName: function (node, newName){
 | 
	
		
			
				|  |  |          if (newName == '') return;
 | 
	
		
			
				|  |  |          node.data.nodeName = newName;
 | 
	
	
		
			
				|  | @@ -434,6 +433,18 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |      curIsCategory: function () {
 | 
	
		
			
				|  |  |          return this.mainTree.selected.data.type == 1;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    getSameNameNode: function(name){
 | 
	
		
			
				|  |  | +        let rst = null;
 | 
	
		
			
				|  |  | +        let nodes = blockLibObj.mainTree.items;
 | 
	
		
			
				|  |  | +        for (let i = 0; i < nodes.length; i++) {
 | 
	
		
			
				|  |  | +            let node = nodes[i];
 | 
	
		
			
				|  |  | +            if (node.data.nodeName == name){
 | 
	
		
			
				|  |  | +                rst = node;
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return rst;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      refreshSpread: function (){
 | 
	
		
			
				|  |  |          if (this.mainSpread)
 | 
	
		
			
				|  |  |              this.mainSpread.refresh();
 | 
	
	
		
			
				|  | @@ -548,8 +559,8 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |              canClone = canClone && (projectNode.data.unit == block.data.unit);
 | 
	
		
			
				|  |  |          if (!canClone) return;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        /*  这里再次封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。
 | 
	
		
			
				|  |  | -            这里结构作出调整:忽略叶子清单层,直接从定额开始(跟粘贴块有区别),始终强制在叶子清单下插入定额。
 | 
	
		
			
				|  |  | +        /*  这里封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。
 | 
	
		
			
				|  |  | +            但这里结构要作出调整:忽略叶子清单层,直接从定额开始(跟粘贴块有区别),始终强制在叶子清单下插入定额。
 | 
	
		
			
				|  |  |              该操作前提:当前块文件的全部数据已从后台取到前台。  */
 | 
	
		
			
				|  |  |          let vBlock_WC = {
 | 
	
		
			
				|  |  |              compilationID: block.data.compilationID,
 |