|  | @@ -686,29 +686,57 @@ class CalcProgram {
 | 
	
		
			
				|  |  |      saveNode(treeNode, saveParents = true) {
 | 
	
		
			
				|  |  |          if (!treeNode.changed) return;
 | 
	
		
			
				|  |  |          let me = this;
 | 
	
		
			
				|  |  | -        let newDataArr = [], nodesArr = [];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        me.project.beginUpdate('');
 | 
	
		
			
				|  |  | +        let nodesArr = [];
 | 
	
		
			
				|  |  |          let curNode = treeNode;
 | 
	
		
			
				|  |  |          while (curNode) {
 | 
	
		
			
				|  |  | -            if (curNode.changed){
 | 
	
		
			
				|  |  | +            if (curNode.changed){nodesArr.push(curNode)};
 | 
	
		
			
				|  |  | +            if (saveParents) curNode = curNode.parent
 | 
	
		
			
				|  |  | +            else break;
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        me.saveNodes(nodesArr);
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 待保存的树结点列表入库存储
 | 
	
		
			
				|  |  | +    saveNodes(treeNodes){
 | 
	
		
			
				|  |  | +        if (treeNodes.length < 1) return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        let me = this;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        me.project.beginUpdate('');
 | 
	
		
			
				|  |  | +        for (let node of treeNodes){
 | 
	
		
			
				|  |  | +            if (node.changed){
 | 
	
		
			
				|  |  |                  let data = {
 | 
	
		
			
				|  |  | -                    ID: curNode.data.ID,
 | 
	
		
			
				|  |  | +                    ID: node.data.ID,
 | 
	
		
			
				|  |  |                      projectID: me.project.ID(),
 | 
	
		
			
				|  |  | -                    quantity: curNode.data.quantity,
 | 
	
		
			
				|  |  | -                    fees: curNode.data.fees
 | 
	
		
			
				|  |  | +                    quantity: node.data.quantity,
 | 
	
		
			
				|  |  | +                    fees: node.data.fees
 | 
	
		
			
				|  |  |                  };
 | 
	
		
			
				|  |  | -                let newDta = {'updateType': 'ut_update', 'updateData': data};
 | 
	
		
			
				|  |  | -                newDataArr.push(newDta);
 | 
	
		
			
				|  |  | -                nodesArr.push(curNode);
 | 
	
		
			
				|  |  | -                me.project.push(curNode.sourceType, newDataArr);
 | 
	
		
			
				|  |  | -            };
 | 
	
		
			
				|  |  | -            if (saveParents) curNode = curNode.parent
 | 
	
		
			
				|  |  | -            else break;
 | 
	
		
			
				|  |  | +                let newData = {'updateType': 'ut_update', 'updateData': data};
 | 
	
		
			
				|  |  | +                me.project.push(node.sourceType, [newData]);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |          me.project.endUpdate();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        for (let node of nodesArr){delete node.changed;};
 | 
	
		
			
				|  |  | -        projectObj.mainController.refreshTreeNode(nodesArr);
 | 
	
		
			
				|  |  | +        for (let node of treeNodes){delete node.changed};
 | 
	
		
			
				|  |  | +        projectObj.mainController.refreshTreeNode(treeNodes);
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    calcAllBills(){
 | 
	
		
			
				|  |  | +        let me = this;
 | 
	
		
			
				|  |  | +        let needSaveNodes = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        function calcNodes(nodes) {
 | 
	
		
			
				|  |  | +            for (let node of nodes) {
 | 
	
		
			
				|  |  | +                if (node.sourceType !== me.project.Bills.getSourceType()) return;
 | 
	
		
			
				|  |  | +                if (node.source.children.length > 0) {
 | 
	
		
			
				|  |  | +                    calcNodes(node.children);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                me.calculate(node, false);
 | 
	
		
			
				|  |  | +                if (node.changed) needSaveNodes.push(node);
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        calcNodes(me.project.mainTree.roots);
 | 
	
		
			
				|  |  | +        me.saveNodes(needSaveNodes);
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  }
 |