|  | @@ -42,7 +42,7 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |              {headerName: "项目编码", headerWidth: 90, dataCode: "code", dataType: "String", hAlign: "center"},
 | 
	
		
			
				|  |  |              {headerName: "项目名称", headerWidth: 100, dataCode: "name", dataType: "String"},
 | 
	
		
			
				|  |  |              {headerName: "单位", headerWidth: 40, dataCode: "unit", dataType: "String", hAlign: "center"},
 | 
	
		
			
				|  |  | -            {headerName: "综合单价", headerWidth: 70, dataCode: "", dataType: "Number"},
 | 
	
		
			
				|  |  | +            {headerName: "综合单价", headerWidth: 70, dataCode: "unitFee", dataType: "Number"},
 | 
	
		
			
				|  |  |              {headerName: "项目特征", headerWidth: 160, dataCode: "itemCharacterText", dataType: "String"}
 | 
	
		
			
				|  |  |          ],
 | 
	
		
			
				|  |  |          view: {
 | 
	
	
		
			
				|  | @@ -57,8 +57,8 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |              {headerName: "名称", headerWidth: 100, dataCode: "name", dataType: "String"},
 | 
	
		
			
				|  |  |              {headerName: "单位", headerWidth: 40, dataCode: "unit", dataType: "String", hAlign: "center"},
 | 
	
		
			
				|  |  |              {headerName: "含量", headerWidth: 40, dataCode: "contain", dataType: "Number"},
 | 
	
		
			
				|  |  | -            {headerName: "取费专业", headerWidth: 70, dataCode: "", dataType: "String", hAlign: "center"},
 | 
	
		
			
				|  |  | -            {headerName: "综合单价", headerWidth: 70, dataCode: "", dataType: "Number"},
 | 
	
		
			
				|  |  | +            {headerName: "取费专业", headerWidth: 70, dataCode: "programName", dataType: "String", hAlign: "center"},
 | 
	
		
			
				|  |  | +            {headerName: "综合单价", headerWidth: 70, dataCode: "unitFee", dataType: "Number"},
 | 
	
		
			
				|  |  |              {headerName: "子目换算状态", headerWidth: 90, dataCode: "adjustState", dataType: "String"}
 | 
	
		
			
				|  |  |          ],
 | 
	
		
			
				|  |  |          view: {
 | 
	
	
		
			
				|  | @@ -132,14 +132,12 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |      loadDetailDatas: function (node){
 | 
	
		
			
				|  |  |          let me = this;
 | 
	
		
			
				|  |  |          if (node.data.type == 2){
 | 
	
		
			
				|  |  | -            let bill = node.data.datas[0];
 | 
	
		
			
				|  |  | +            let bill = node.data;
 | 
	
		
			
				|  |  |              let rations = bill.children;
 | 
	
		
			
				|  |  |              sheetCommonObj.showData(me.billSheet, me.billSetting, [bill]);
 | 
	
		
			
				|  |  | -            me.changeBillText(bill);
 | 
	
		
			
				|  |  |              let rCount = (rations.length > 0) ? rations.length : 1;
 | 
	
		
			
				|  |  |              me.rationSheet.setRowCount(rCount, GC.Spread.Sheets.SheetArea.viewport);
 | 
	
		
			
				|  |  |              sheetCommonObj.showData(me.rationSheet, me.rationSetting, rations);
 | 
	
		
			
				|  |  | -            me.changeRationText(rations);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          else{
 | 
	
		
			
				|  |  |              sheetCommonObj.cleanSheet(me.billSheet, me.billSetting, 1);
 | 
	
	
		
			
				|  | @@ -367,13 +365,30 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          let newNode = tree.insert(pID, nID);
 | 
	
		
			
				|  |  |          newNode.data.type = nodeType;
 | 
	
		
			
				|  |  | -        newNode.data.name = nodeName;
 | 
	
		
			
				|  |  | +        newNode.data.fileName = 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.datas = source.datas;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            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;
 | 
	
	
		
			
				|  | @@ -385,14 +400,15 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |          let idx = tree.items.indexOf(newNode);
 | 
	
		
			
				|  |  |          sheet.addRows(idx, 1);
 | 
	
		
			
				|  |  |          sheet.getRange(idx, 0, 1, 1).locked(true);
 | 
	
		
			
				|  |  | -        sheet.setValue(idx, 0, newNode.data.name);
 | 
	
		
			
				|  |  | +        sheet.setValue(idx, 0, newNode.data.fileName);
 | 
	
		
			
				|  |  |          sheet.setSelection(idx, 0, 1, 1);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          sheet.resumeEvent();
 | 
	
		
			
				|  |  |          sheet.resumePaint();
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      reName: function (node, newName){
 | 
	
		
			
				|  |  | -        node.data.name = newName;
 | 
	
		
			
				|  |  | +        if (newName == '') return;
 | 
	
		
			
				|  |  | +        node.data.fileName = newName;
 | 
	
		
			
				|  |  |          let idx = blockLibObj.mainTree.items.indexOf(node);
 | 
	
		
			
				|  |  |          blockLibObj.mainSheet.setValue(idx, 0, newName);
 | 
	
		
			
				|  |  |      },
 | 
	
	
		
			
				|  | @@ -419,28 +435,6 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |          if (this.rationSpread)
 | 
	
		
			
				|  |  |              this.rationSpread.refresh();
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    changeRationText: function (rationDatas) {
 | 
	
		
			
				|  |  | -        let sheet = this.rationSheet;
 | 
	
		
			
				|  |  | -        sheet.suspendPaint();
 | 
	
		
			
				|  |  | -        sheet.suspendEvent();
 | 
	
		
			
				|  |  | -        for (let i = 0; i < rationDatas.length; i++) {
 | 
	
		
			
				|  |  | -            let pID = rationDatas[i].programID;
 | 
	
		
			
				|  |  | -            if (pID) sheet.setValue(i, 4, projectObj.project.calcProgram.compiledTemplateMaps[pID]);
 | 
	
		
			
				|  |  | -            if (rationDatas[i].feesIndex && rationDatas[i].feesIndex.common)
 | 
	
		
			
				|  |  | -                sheet.setValue(i, 5, rationDatas[i].feesIndex.common.unitFee);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        sheet.resumeEvent();
 | 
	
		
			
				|  |  | -        sheet.resumePaint();
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    changeBillText: function (billData){
 | 
	
		
			
				|  |  | -        let sheet = this.billSheet;
 | 
	
		
			
				|  |  | -        sheet.suspendPaint();
 | 
	
		
			
				|  |  | -        sheet.suspendEvent();
 | 
	
		
			
				|  |  | -        if (billData.feesIndex && billData.feesIndex.common)
 | 
	
		
			
				|  |  | -            sheet.setValue(0, 3, billData.feesIndex.common.unitFee);
 | 
	
		
			
				|  |  | -        sheet.resumeEvent();
 | 
	
		
			
				|  |  | -        sheet.resumePaint();
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  |      loadTreeContextMenu: function (){
 | 
	
		
			
				|  |  |          let me = this;
 | 
	
		
			
				|  |  |          $.contextMenu({
 | 
	
	
		
			
				|  | @@ -530,16 +524,21 @@ var blockLibObj = {
 | 
	
		
			
				|  |  |          let projectNode = projectObj.project.mainTree.selected;
 | 
	
		
			
				|  |  |          if (!calcTools.isLeafBill(projectNode)) return;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        // 这里再次封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。
 | 
	
		
			
				|  |  | +        // 这里结构作出调整:忽略叶子清单层,直接从定额开始(跟粘贴块有区别),始终强制在叶子清单下插入定额。
 | 
	
		
			
				|  |  | +        // 该操作前提:当前块文件的全部数据已从后台取到前台。
 | 
	
		
			
				|  |  |          let block = me.mainTree.selected.data;
 | 
	
		
			
				|  |  | -        // 这里再次封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。前提:当前块文件的全部数据已从后台取到前台。
 | 
	
		
			
				|  |  |          let vBlock_WC = {
 | 
	
		
			
				|  |  |              compilationID: block.compilationID,
 | 
	
		
			
				|  |  |              copyTime: block.copyTime,
 | 
	
		
			
				|  |  | -            firstNodeType: 1,   // 强制改成1。这里跟粘贴块有区别,忽略叶子清单层,直接从定额开始,即始终强制在叶子清单下插入定额。
 | 
	
		
			
				|  |  | +            firstNodeType: 1,           // 强制改成1 (因为是从清单下的定额开始。清单自身的还是保留,暂不使用使用)。
 | 
	
		
			
				|  |  |              isFBFX: block.isFBFX,
 | 
	
		
			
				|  |  | -            datas: block.datas[0].children    // rations
 | 
	
		
			
				|  |  | +            datas: block.children       // rations
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |          BlockController.confirmPaste(vBlock_WC, projectNode, 'sub');
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    oneToMoreCloneXX: function () {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -562,12 +561,12 @@ $(document).ready(function(){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      $('#btn_block_reName').on('click', function (){
 | 
	
		
			
				|  |  |          let select = blockLibObj.mainTree.selected;
 | 
	
		
			
				|  |  | -        $('#input_block_reName').val(select.data.name);
 | 
	
		
			
				|  |  | +        $('#input_block_reName').val(select.data.fileName);
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      $('#btn_block_reName_OK').on('click', function (){
 | 
	
		
			
				|  |  |          let select = blockLibObj.mainTree.selected;
 | 
	
		
			
				|  |  | -        let oldName = select.data.name;
 | 
	
		
			
				|  |  | +        let oldName = select.data.fileName;
 | 
	
		
			
				|  |  |          let newName = $('#input_block_reName').val();
 | 
	
		
			
				|  |  |          if (oldName != newName) blockLibObj.reName(select, newName);
 | 
	
		
			
				|  |  |      });
 |