|  | @@ -118,23 +118,35 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |              const sel = selection ? selection[0] : sheet.getSelections()[0];
 | 
	
		
			
				|  |  |              const row = sel ? sel.row : -1;
 | 
	
		
			
				|  |  |              const tree = sheet.zh_tree;
 | 
	
		
			
				|  |  | -            if (!tree) { return; }
 | 
	
		
			
				|  |  | -            const node = sheet.zh_tree.nodes[row];
 | 
	
		
			
				|  |  | -            const preNode = tree.getPreSiblingNode(node);
 | 
	
		
			
				|  |  | +            if (!tree) return;
 | 
	
		
			
				|  |  | +            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 preNode = tree.getPreSiblingNode(first);
 | 
	
		
			
				|  |  |              const valid = !sheet.zh_setting.readOnly;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            setObjEnable($('#insert'), valid && node && node.level > 1);
 | 
	
		
			
				|  |  | -            setObjEnable($('#delete'), valid && node && node.level > 1);
 | 
	
		
			
				|  |  | -            setObjEnable($('#up-move'), valid && node && node.level > 1 && preNode);
 | 
	
		
			
				|  |  | -            setObjEnable($('#down-move'), valid && node && node.level > 1 && !tree.isLastSibling(node));
 | 
	
		
			
				|  |  | +            setObjEnable($('#insert'), valid && first && first.level > 1);
 | 
	
		
			
				|  |  | +            setObjEnable($('#delete'), valid && first && sameParent && first.level > 1);
 | 
	
		
			
				|  |  | +            setObjEnable($('#up-move'), valid && first && sameParent && first.level > 1 && preNode);
 | 
	
		
			
				|  |  | +            setObjEnable($('#down-move'), valid && first && sameParent && first.level > 1 && !tree.isLastSibling(last));
 | 
	
		
			
				|  |  |              if (checkTzMeasureType()) {
 | 
	
		
			
				|  |  | -                const posRange = node ? pos.getLedgerPos(node.id) : [];
 | 
	
		
			
				|  |  | -                setObjEnable($('#up-level'), valid && node && tree.getParent(node) && node.level > 2 && (!posRange || posRange.length === 0));
 | 
	
		
			
				|  |  | +                const posRange = last ? pos.getLedgerPos(last.id) : [];
 | 
	
		
			
				|  |  | +                setObjEnable($('#up-level'), valid && first && sameParent && tree.getParent(first) && first.level > 2 && (!posRange || posRange.length === 0));
 | 
	
		
			
				|  |  |                  const preNodePosRange = preNode ? pos.getLedgerPos(preNode.id) : [];
 | 
	
		
			
				|  |  | -                setObjEnable($('#down-level'), valid && node && node.level > 1 && preNode && (!preNodePosRange || preNodePosRange.length === 0));
 | 
	
		
			
				|  |  | +                setObjEnable($('#down-level'), valid && first && sameParent && first.level > 1 && preNode && (!preNodePosRange || preNodePosRange.length === 0));
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  | -                setObjEnable($('#up-level'), valid && node && node.level > 2 && tree.getParent(node));
 | 
	
		
			
				|  |  | -                setObjEnable($('#down-level'), valid && node && node.level > 1 && preNode);
 | 
	
		
			
				|  |  | +                setObjEnable($('#up-level'), valid && first && sameParent && first.level > 2 && tree.getParent(first));
 | 
	
		
			
				|  |  | +                setObjEnable($('#down-level'), valid && first && sameParent && first.level > 1 && preNode);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              setObjEnable($('#cut'), valid);
 | 
	
		
			
				|  |  |              setObjEnable($('#paste'), valid);
 | 
	
	
		
			
				|  | @@ -212,12 +224,6 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                  self.refreshTree(sheet, refreshNode);
 | 
	
		
			
				|  |  |                  self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  | -            // SpreadJsObj.massOperationSheet(sheet, function () {
 | 
	
		
			
				|  |  | -            //     tree.baseOperation('/tender/' + getTenderId() + '/ledger/base-operation', node, 'add', function (result) {
 | 
	
		
			
				|  |  | -            //         self.refreshTree(sheet, result);
 | 
	
		
			
				|  |  | -            //         self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  | -            //     });
 | 
	
		
			
				|  |  | -            // });
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          /**
 | 
	
		
			
				|  |  |           * 删除选中节点
 | 
	
	
		
			
				|  | @@ -266,22 +272,6 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                      self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            /*const self = this;
 | 
	
		
			
				|  |  | -            const sheet = spread.getActiveSheet();
 | 
	
		
			
				|  |  | -            const sel = sheet.getSelections()[0];
 | 
	
		
			
				|  |  | -            const row = sel.row;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            const tree = sheet.zh_tree;
 | 
	
		
			
				|  |  | -            if (!tree) { return; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            const node = tree.nodes[row];
 | 
	
		
			
				|  |  | -            if (!node) { return; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            tree.baseOperation('/tender/' + getTenderId() + '/ledger/base-operation', node, 'up-move', function (result) {
 | 
	
		
			
				|  |  | -                self.refreshTree(sheet, result);
 | 
	
		
			
				|  |  | -                sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
 | 
	
		
			
				|  |  | -                self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  | -            });*/
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          /**
 | 
	
		
			
				|  |  |           * 下移选中节点
 | 
	
	
		
			
				|  | @@ -306,22 +296,6 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                      self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            /*const self = this;
 | 
	
		
			
				|  |  | -            const sheet = spread.getActiveSheet();
 | 
	
		
			
				|  |  | -            const sel = sheet.getSelections()[0];
 | 
	
		
			
				|  |  | -            const row = sel.row;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            const tree = sheet.zh_tree;
 | 
	
		
			
				|  |  | -            if (!tree) { return; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            const node = tree.nodes[row];
 | 
	
		
			
				|  |  | -            if (!node) { return; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            tree.baseOperation('/tender/' + getTenderId() + '/ledger/base-operation', node, 'down-move', function (result) {
 | 
	
		
			
				|  |  | -                self.refreshTree(sheet, result);
 | 
	
		
			
				|  |  | -                sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
 | 
	
		
			
				|  |  | -                self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  | -            });*/
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          /**
 | 
	
		
			
				|  |  |           * 升级选中节点
 | 
	
	
		
			
				|  | @@ -344,20 +318,6 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                      self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -/*            const self = this;
 | 
	
		
			
				|  |  | -            const sheet = spread.getActiveSheet();
 | 
	
		
			
				|  |  | -            const row = sheet.getSelections()[0].row;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            const tree = sheet.zh_tree;
 | 
	
		
			
				|  |  | -            if (!tree) { return; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            const node = tree.nodes[row];
 | 
	
		
			
				|  |  | -            if (!node) { return; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            tree.baseOperation('/tender/' + getTenderId() + '/ledger/base-operation', node, 'up-level', function (result) {
 | 
	
		
			
				|  |  | -                self.refreshTree(sheet, result);
 | 
	
		
			
				|  |  | -                self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  | -            });*/
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          /**
 | 
	
		
			
				|  |  |           * 降级选中节点
 | 
	
	
		
			
				|  | @@ -380,20 +340,6 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                      self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -/*            const self = this;
 | 
	
		
			
				|  |  | -            const sheet = spread.getActiveSheet();
 | 
	
		
			
				|  |  | -            const row = sheet.getSelections()[0].row;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            const tree = sheet.zh_tree;
 | 
	
		
			
				|  |  | -            if (!tree) { return; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            const node = tree.nodes[row];
 | 
	
		
			
				|  |  | -            if (!node) { return; }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            tree.baseOperation('/tender/' + getTenderId() + '/ledger/base-operation', node, 'down-level', function (result) {
 | 
	
		
			
				|  |  | -                self.refreshTree(sheet, result);
 | 
	
		
			
				|  |  | -                self.refreshOperationValid(sheet);
 | 
	
		
			
				|  |  | -            });*/
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          /**
 | 
	
		
			
				|  |  |           * 编辑单元格响应事件
 | 
	
	
		
			
				|  | @@ -449,9 +395,6 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                      const refreshNode = ledgerTree.loadPostData(result);
 | 
	
		
			
				|  |  |                      treeOperationObj.refreshTree(info.sheet, refreshNode);
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  | -                /*info.sheet.zh_tree.update('/tender/' + getTenderId() + '/ledger/update', data, function (result) {
 | 
	
		
			
				|  |  | -                    treeOperationObj.refreshTree(info.sheet, result);
 | 
	
		
			
				|  |  | -                });*/
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          /**
 | 
	
	
		
			
				|  | @@ -517,14 +460,6 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                      }, function () {
 | 
	
		
			
				|  |  |                          SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount);
 | 
	
		
			
				|  |  |                      });
 | 
	
		
			
				|  |  | -                    /*info.sheet.zh_tree.update('/tender/' + getTenderId() + '/ledger/update', datas, function (result) {
 | 
	
		
			
				|  |  | -                        if (result.update) {
 | 
	
		
			
				|  |  | -                            result.update = result.update.concat(filterNodes);
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        treeOperationObj.refreshTree(info.sheet, result);
 | 
	
		
			
				|  |  | -                    }, function () {
 | 
	
		
			
				|  |  | -                        SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount);
 | 
	
		
			
				|  |  | -                    });*/
 | 
	
		
			
				|  |  |                  } else {
 | 
	
		
			
				|  |  |                      SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount);
 | 
	
		
			
				|  |  |                  }
 | 
	
	
		
			
				|  | @@ -580,8 +515,9 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  if (datas.length > 0) {
 | 
	
		
			
				|  |  | -                    sheet.zh_tree.update('/tender/' + getTenderId() + '/ledger/update', datas, function (result) {
 | 
	
		
			
				|  |  | -                        treeOperationObj.refreshTree(sheet, result);
 | 
	
		
			
				|  |  | +                    postData(window.location.pathname + '/update', {postType: 'update', postData: datas}, function (result) {
 | 
	
		
			
				|  |  | +                        const refreshNode = tree.loadPostData(result);
 | 
	
		
			
				|  |  | +                        treeOperationObj.refreshTree(sheet, refreshNode);
 | 
	
		
			
				|  |  |                      });
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -665,10 +601,6 @@ $(document).ready(function() {
 | 
	
		
			
				|  |  |                      callback();
 | 
	
		
			
				|  |  |                      treeOperationObj.refreshTree(sheet, refreshNode);
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  | -                /*sheet.zh_tree.update('/tender/' + getTenderId() + '/ledger/update', datas, function (result) {
 | 
	
		
			
				|  |  | -                    callback();
 | 
	
		
			
				|  |  | -                    treeOperationObj.refreshTree(sheet, result);
 | 
	
		
			
				|  |  | -                });*/
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |      };
 |