| 
					
				 | 
			
			
				@@ -580,6 +580,127 @@ var projectObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onClipboardPasting: function (sender, info){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        info.cancel = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rIdx = info.sheet.getActiveRowIndex(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let node = projectObj.project.mainTree.items[rIdx]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!node.parent){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            hintBox.infoBox('系统提示','大项费用不允许粘贴!', 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let colName = projectObj.project.projSetting.main_tree_col.cols[info.cellRange.col].data.field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (colName == 'code'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function getNodeType(node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let t = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (calcTools.isRationItem(node)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    t = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (calcTools.isBill(node)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (calcTools.isBill_FB(node)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        t = 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else if (calcTools.isBill_FX(node) || calcTools.isBill_BX(node)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        t = 3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else if (calcTools.isBill_BILL(node)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        t = 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return t; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function getPasteTextArr(info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let copyText = info.pasteData.text.trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!copyText) return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let rows = copyText.split('\r\n'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let rstArr = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let row of rows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    row = row.trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    row = row.split('\t'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rstArr.push(row); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return rstArr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function getPasteNodes(count, nodeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let nodesArr = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let curNode = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let i = rIdx; i < rIdx + count; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    curNode = projectObj.project.mainTree.items[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (curNode && calcTools.isSameTypeNode(curNode, node)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        nodesArr.push(curNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        curNode = projectObj.project.mainTree.items[i - 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (nodesArr.length < count){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (projectObj.project.mainTree.selected != curNode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        projectObj.project.mainTree.selected = curNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let add = count - nodesArr.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let i = 0; i < add; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        switch (nodeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                curNode = projectObj.project.Ration.addNewRation(null,rationType.ration,null,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                curNode = ProjectController.addFB(projectObj.project, projectObj.mainController); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            case 3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                curNode = ProjectController.addFX(projectObj.project, projectObj.mainController); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            case 4: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                curNode = ProjectController.addBills(projectObj.project, projectObj.mainController); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (!curNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            hintBox.infoBox('系统提示','插入新结点出错,粘贴失败!', 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            return nodesArr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            nodesArr.push(curNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (projectObj.project.mainTree.selected != curNode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                projectObj.project.mainTree.selected = curNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return nodesArr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function doPaste(datas, nodes, nodeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (nodeType == 1){  // 批量粘贴定额有严重的异步问题,这里要和清单分开处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let updateRationCodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let i = 0; i < datas.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let ptNode = nodes[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let code = datas[i][0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        updateRationCodes.push({'node':ptNode, value:code}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    projectObj.project.Ration.updateRationCodes(updateRationCodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let i = 0; i < datas.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let ptNode = nodes[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let code = datas[i][0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (!(ptNode.data && ptNode.data.code && ptNode.data.code.sameText(code))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            projectObj.updateCode(ptNode, code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                projectObj.mainController.refreshTreeNode(nodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let tagType = getNodeType(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!tagType){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                hintBox.infoBox('系统提示', '该树结点类型不支持从项目编码列粘贴!', 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let datas = getPasteTextArr(info); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!datas) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let pasteNodes = getPasteNodes(datas.length, tagType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            doPaste(datas, pasteNodes, tagType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     mainSpreadEditEnded: function (sender, info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         console.log('enterEDEnd'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let project = projectObj.project; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -745,6 +866,8 @@ var projectObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 that.mainSpread.bind(GC.Spread.Sheets.Events.ButtonClicked, that.onButtonClick); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 that.mainSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, that.onCellDoubleClick); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 that.mainSpread.bind(GC.Spread.Sheets.Events.ColumnWidthChanged, that.onColumnWidthChanged); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                that.mainSpread.bind(GC.Spread.Sheets.Events.ClipboardPasting, that.onClipboardPasting); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //let loadOtherStartTime = +new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(!projectReadOnly){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     that.loadMainSpreadContextMenu(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -765,8 +888,6 @@ var projectObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(projectReadOnly){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     disableSpread(that.mainSpread); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let themeName = that.mainSpread.getSheet(0).currentTheme().name(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                console.log(GC.Spread.Sheets.Themes[themeName]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 $.bootstrapLoading.end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1268,6 +1389,7 @@ var projectObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const sheet = this.mainSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sheet.setSelection(row, col, 1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.mainController.setTreeSelected(this.mainController.tree.items[row]);//触发树节点选中事件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sheet.showRow(row, GC.Spread.Sheets.VerticalPosition.center); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 选中区域合计数字 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     amountAreaNumber: function(e, info) { 
			 |