| 
					
				 | 
			
			
				@@ -1329,6 +1329,85 @@ $(document).ready(function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         billsContextMenuOptions.items.sprBase = '----'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!readOnly) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        billsContextMenuOptions.items.batchInsert = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            name: '批量插入', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            type: 'batchInsert', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            value: '2', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            icon: 'fa-sign-in', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            batchInsert: function (obj, root) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (_.toNumber(obj.value) > _.toNumber(obj.max)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.value = obj.max; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    toastr.warning('批量插入不可多于' + obj.max); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if(_.toNumber(obj.value) < _.toNumber(obj.min)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.value = obj.min; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    toastr.warning('批量插入不可少于' + obj.min); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    treeOperationObj.addNode(ledgerSpread.getActiveSheet(), parseInt(obj.value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    root.$menu.trigger('contextmenu:hide'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            disabled: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const sheet = ledgerSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const selection = sheet.getSelections(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const sel = selection ? selection[0] : sheet.getSelections()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const row = sel ? sel.row : -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const tree = sheet.zh_tree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!tree) return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const first = sheet.zh_tree.nodes[row]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let last = first, sameParent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (sel.rowCount > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let r = 1; r < sel.rowCount; r++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const rNode = tree.nodes[sel.row + r]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (rNode.level > first.level) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if ((rNode.level < first.level) || (rNode.level === first.level && rNode.pid !== first.pid)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            sameParent = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        last = rNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const valid = !sheet.zh_setting.readOnly; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return !(valid && first && first.level > 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            visible: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return !readOnly; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        billsContextMenuOptions.items.batchInsertBillsPos = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            name: '批量插入清单-计量单元', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            icon: 'fa-sign-in', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            disabled: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!checkTzMeasureType()) return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const sheet = ledgerSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const selection = sheet.getSelections(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const row = selection[0].row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                const select = ledgerTree.nodes[row]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (select) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (select.code && select.code !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return !ledgerTree.isLeafXmj(select); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const parent = ledgerTree.getParent(select); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return !(parent && ledgerTree.isLeafXmj(parent)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            callback: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!batchInsertObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    batchInsertObj = new BatchInsertBillsPosObj($('#batch')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    batchInsertObj.initView(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $('#batch').modal('show'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            visible: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return !readOnly; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        billsContextMenuOptions.items.sprBatch = '----'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     billsContextMenuOptions.items.copyBlock = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         name: '复制整块', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         icon: 'fa-files-o', 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1476,85 +1555,6 @@ $(document).ready(function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         billsContextMenuOptions.items.sprSort = '----'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!readOnly) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        billsContextMenuOptions.items.batchInsert = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            name: '批量插入', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            type: 'batchInsert', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            value: '2', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            icon: 'fa-sign-in', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            batchInsert: function (obj, root) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (_.toNumber(obj.value) > _.toNumber(obj.max)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.value = obj.max; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    toastr.warning('批量插入不可多于' + obj.max); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else if(_.toNumber(obj.value) < _.toNumber(obj.min)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.value = obj.min; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    toastr.warning('批量插入不可少于' + obj.min); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    treeOperationObj.addNode(ledgerSpread.getActiveSheet(), parseInt(obj.value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    root.$menu.trigger('contextmenu:hide'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            disabled: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const sheet = ledgerSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const selection = sheet.getSelections(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const sel = selection ? selection[0] : sheet.getSelections()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const row = sel ? sel.row : -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const tree = sheet.zh_tree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!tree) return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const first = sheet.zh_tree.nodes[row]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let last = first, sameParent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (sel.rowCount > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (let r = 1; r < sel.rowCount; r++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const rNode = tree.nodes[sel.row + r]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (rNode.level > first.level) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if ((rNode.level < first.level) || (rNode.level === first.level && rNode.pid !== first.pid)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            sameParent = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        last = rNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const valid = !sheet.zh_setting.readOnly; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return !(valid && first && first.level > 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            visible: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return !readOnly; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        billsContextMenuOptions.items.batchInsertBillsPos = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            name: '批量插入清单-计量单元', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            icon: 'fa-sign-in', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            disabled: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!checkTzMeasureType()) return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const sheet = ledgerSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const selection = sheet.getSelections(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const row = selection[0].row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                const select = ledgerTree.nodes[row]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (select) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (select.code && select.code !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return !ledgerTree.isLeafXmj(select); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        const parent = ledgerTree.getParent(select); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return !(parent && ledgerTree.isLeafXmj(parent)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            callback: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!batchInsertObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    batchInsertObj = new BatchInsertBillsPosObj($('#batch')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    batchInsertObj.initView(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                $('#batch').modal('show'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            visible: function (key, opt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return !readOnly; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        billsContextMenuOptions.items.sprBatch = '----'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!readOnly) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const tenderSelect = TenderSelect({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             type: 'ledger', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             afterLoad: function (result) { 
			 |