|  | @@ -611,6 +611,59 @@ $(document).ready(() => {
 | 
	
		
			
				|  |  |                  return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
 | 
	
		
			
				|  |  |              },
 | 
	
		
			
				|  |  |              items: {
 | 
	
		
			
				|  |  | +                'create': {
 | 
	
		
			
				|  |  | +                    name: '新增',
 | 
	
		
			
				|  |  | +                    icon: 'fa-sign-in',
 | 
	
		
			
				|  |  | +                    callback: function (key, opt) {
 | 
	
		
			
				|  |  | +                        billsTreeSpreadObj.baseOpr(billsSheet, 'add');
 | 
	
		
			
				|  |  | +                    },
 | 
	
		
			
				|  |  | +                    disabled: function (key, opt) {
 | 
	
		
			
				|  |  | +                        const sheet = billsSheet;
 | 
	
		
			
				|  |  | +                        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];
 | 
	
		
			
				|  |  | +                        const valid = !sheet.zh_setting.readOnly;
 | 
	
		
			
				|  |  | +                        return !(valid && first && first.level > 1);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                },
 | 
	
		
			
				|  |  | +                'delete': {
 | 
	
		
			
				|  |  | +                    name: '删除',
 | 
	
		
			
				|  |  | +                    icon: 'fa-remove',
 | 
	
		
			
				|  |  | +                    callback: function (key, opt) {
 | 
	
		
			
				|  |  | +                        billsTreeSpreadObj.baseOpr(billsSheet, 'delete');
 | 
	
		
			
				|  |  | +                    },
 | 
	
		
			
				|  |  | +                    disabled: function (key, opt) {
 | 
	
		
			
				|  |  | +                        const sheet = billsSheet;
 | 
	
		
			
				|  |  | +                        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, nodeUsed = first.used;
 | 
	
		
			
				|  |  | +                        if (sel.rowCount > 1 && first) {
 | 
	
		
			
				|  |  | +                            for (let r = 1; r < sel.rowCount; r++) {
 | 
	
		
			
				|  |  | +                                const rNode = tree.nodes[sel.row + r];
 | 
	
		
			
				|  |  | +                                if (!rNode) {
 | 
	
		
			
				|  |  | +                                    sameParent = false;
 | 
	
		
			
				|  |  | +                                    break;
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                                nodeUsed = nodeUsed || rNode.used;
 | 
	
		
			
				|  |  | +                                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 && sameParent && !(first.level === 1 && first.node_type) && !nodeUsed);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                },
 | 
	
		
			
				|  |  |                  'batchInsertBillsPos': {
 | 
	
		
			
				|  |  |                      name: '批量插入节点-部位',
 | 
	
		
			
				|  |  |                      icon: 'fa-sign-in',
 |