|  | @@ -31,6 +31,12 @@ var projectObj = {
 | 
	
		
			
				|  |  |                  pageCCOprObj.clearData();
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // for test interface.  CSLAAAAA
 | 
	
		
			
				|  |  | +/*        node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
 | 
	
		
			
				|  |  | +        node.data.isSubcontract = true;
 | 
	
		
			
				|  |  | +        let bname = '分包人工工日';
 | 
	
		
			
				|  |  | +        alert(bname + ': ' + rationCalcBases[bname](node));*/
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      refreshBaseActn: function (tree) {
 | 
	
		
			
				|  |  |          let setButtonValid = function (valid, btn) {
 | 
	
	
		
			
				|  | @@ -41,66 +47,89 @@ var projectObj = {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |          let selected = tree.selected, that = projectObj;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          let canUpLevel = function (node) {
 | 
	
		
			
				|  |  | -            if (selected && selected.depth() > 0 && selected.canUpLevel()) {
 | 
	
		
			
				|  |  | -                if (selected.sourceType === that.project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  | -                    return (!selected.nextSibling) || (selected.children.length === 0) || (selected.source.children.length > 0);
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | +            if(!node){
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(node.depth()<=1){//焦点行是树结构的第一/二层节点,灰显。
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(node.sourceType !== that.project.Bills.getSourceType()){//焦点行是定额/量价/工料机,灰显。
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            }else {
 | 
	
		
			
				|  |  | +                if(node.data.type == billType.FX){//是分项,灰显。
 | 
	
		
			
				|  |  |                      return false;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -                return false;
 | 
	
		
			
				|  |  | +                if(node.data.type == billType.FB&&node.nextSibling&&node.children.length>0){//焦点行是分部有后兄弟,有子项.
 | 
	
		
			
				|  |  | +                     if(node.children[0].data.type==billType.FX){ //焦点行子项是分项
 | 
	
		
			
				|  |  | +                         return false;
 | 
	
		
			
				|  |  | +                     }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if(node.data.type == billType.BILL &&node.nextSibling){//焦点行是清单有后兄弟
 | 
	
		
			
				|  |  | +                    if(node.data.calcBase&&node.data.calcBase!=""){//有基数计算
 | 
	
		
			
				|  |  | +                        return false;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    if(node.children.length>0&&node.children[0].sourceType !== that.project.Bills.getSourceType()){//有子项,并且子项不是清单
 | 
	
		
			
				|  |  | +                        return false;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |          let canDownLevel = function (node) {
 | 
	
		
			
				|  |  | -            if (selected && selected.depth() > 0 && selected.canDownLevel()) {
 | 
	
		
			
				|  |  | -                if (selected.sourceType === that.project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  | -                    return (selected.preSibling.children.length === 0) || (selected.preSibling.source.children.length > 0);
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                    return false;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | +            if(!node){
 | 
	
		
			
				|  |  |                  return false;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        let canDelete = function (node,m_selection) {
 | 
	
		
			
				|  |  | -            if (node) {
 | 
	
		
			
				|  |  | -                if (node.sourceType === that.project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  | -                    if(node.data.type == billType.DXFY&&node.data.isAdd!=1){
 | 
	
		
			
				|  |  | +            if(node.depth()==0){//焦点行是树结构的第一层节点,灰显。
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(node.sourceType !== that.project.Bills.getSourceType()) {//焦点行是定额/量价/工料机,灰显。
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            }else {
 | 
	
		
			
				|  |  | +                if(node.data.type == billType.FX){//是分项,灰显。
 | 
	
		
			
				|  |  | +                    return false;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if(!node.preSibling){//无前兄弟,灰显
 | 
	
		
			
				|  |  | +                    return false;
 | 
	
		
			
				|  |  | +                }else if(node.preSibling.data.calcBase&&node.preSibling.data.calcBase!=""){//前兄弟有基数计算
 | 
	
		
			
				|  |  | +                    return false
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if(node.preSibling.children.length>0){//前兄弟有子项,子项是分项,灰显。
 | 
	
		
			
				|  |  | +                    if(node.data.type==billType.FB&&node.preSibling.children[0].data.type==billType.FX){//焦点行是分部前兄弟有子项,子项是分项,灰显。
 | 
	
		
			
				|  |  |                          return false;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | +                    if(node.data.type==billType.BILL&&node.preSibling.children[0].sourceType !== that.project.Bills.getSourceType()){//焦点行是清单,子项不是清单
 | 
	
		
			
				|  |  | +                        return false
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                if(m_selection!=true&&node.sourceType === that.project.ration_glj.getSourceType()){//多选的时候不做这一项判断
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        let canUpMove = function (node) {
 | 
	
		
			
				|  |  | +            if(node&&node.preSibling){//有前兄弟
 | 
	
		
			
				|  |  | +                if(node.sourceType==that.project.Bills.getSourceType()&&node.data.type == billType.DXFY&&node.data.isAdd!==1){
 | 
	
		
			
				|  |  |                      return false;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                return true;
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -                return false;
 | 
	
		
			
				|  |  | +                return true
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            return false
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  | -        let canDelete_m = function (selection) {
 | 
	
		
			
				|  |  | -            for(let i =0;i<selection.rowCount;i++){
 | 
	
		
			
				|  |  | -                if(i==0&&tree.items[selection.row].sourceType === that.project.ration_glj.getSourceType()){
 | 
	
		
			
				|  |  | -                    return false
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                if(canDelete(tree.items[selection.row+i],true)==false){
 | 
	
		
			
				|  |  | -                    return false
 | 
	
		
			
				|  |  | +        let canDownMove = function (node) {
 | 
	
		
			
				|  |  | +            if(node&&node.nextSibling){
 | 
	
		
			
				|  |  | +                if(node.sourceType==that.project.Bills.getSourceType()&&node.data.type == billType.DXFY&&node.data.isAdd!==1){
 | 
	
		
			
				|  |  | +                    return false;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | +                return true;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            return true
 | 
	
		
			
				|  |  | +            return false
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        let selections = projectObj.mainSpread.getActiveSheet().getSelections();
 | 
	
		
			
				|  |  | -        if(selections[0].rowCount==1){//选中单行
 | 
	
		
			
				|  |  | -            setButtonValid(canDelete(selected), $('#delete'));
 | 
	
		
			
				|  |  | -        }else {
 | 
	
		
			
				|  |  | -            setButtonValid(canDelete_m(selections[0]), $('#delete'));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        setButtonValid(ifCanDelete(), $('#delete'));
 | 
	
		
			
				|  |  |          setButtonValid(canUpLevel(selected), $('#upLevel'));
 | 
	
		
			
				|  |  |          setButtonValid(canDownLevel(selected), $('#downLevel'));
 | 
	
		
			
				|  |  | -        setButtonValid(selected && (selected.depth() > 0) && selected.canUpMove(), $('#upMove'));
 | 
	
		
			
				|  |  | -        setButtonValid(selected && (selected.depth() > 0) && selected.canDownMove(), $('#downMove'));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        setButtonValid(canUpMove(selected) , $('#upMove'));
 | 
	
		
			
				|  |  | +        setButtonValid(canDownMove(selected), $('#downMove'));
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      checkCommonField: function (editingText, colSetting) {
 | 
	
		
			
				|  |  |          let value;
 | 
	
	
		
			
				|  | @@ -157,55 +186,11 @@ var projectObj = {
 | 
	
		
			
				|  |  |              return this.checkCommonField(editingText, colSetting);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    /*updateAndReCalculate: function (node, fieldName, value) {
 | 
	
		
			
				|  |  | -        let project = projectObj.project, calc = new BillsCalcHelper(project), nodes = [];
 | 
	
		
			
				|  |  | -        let getNodes = function (node) {
 | 
	
		
			
				|  |  | -            let cur = node, nodes = [];
 | 
	
		
			
				|  |  | -            while (cur) {
 | 
	
		
			
				|  |  | -                nodes.push(cur);
 | 
	
		
			
				|  |  | -                cur = cur.parent;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            return nodes;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (value) {
 | 
	
		
			
				|  |  | -            value = value.toDecimal(projectObj.project.Decimal.common.quantity);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (node.sourceType === projectObj.project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  | -            calcFees.setFee(node.data, fieldName, value);
 | 
	
		
			
				|  |  | -            calc.calcNode(node, true);
 | 
	
		
			
				|  |  | -            nodes = getNodes(node);
 | 
	
		
			
				|  |  | -            project.Bills.updateNodes(nodes, true);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else if (node.sourceType === projectObj.project.VolumePrice.getSourceType()) {
 | 
	
		
			
				|  |  | -            project.beginUpdate('VolumePrice_QuantityChange');
 | 
	
		
			
				|  |  | -            project.VolumePrice.updateField(node.source, fieldName, value, false);
 | 
	
		
			
				|  |  | -            calc.calcNode(node.parent, true);
 | 
	
		
			
				|  |  | -            nodes = getNodes(node.parent);
 | 
	
		
			
				|  |  | -            project.Bills.updateNodes(nodes, false);
 | 
	
		
			
				|  |  | -            project.endUpdate();
 | 
	
		
			
				|  |  | -            nodes.push(node);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else if (node.sourceType === projectObj.project.Ration.getSourceType()) {
 | 
	
		
			
				|  |  | -            project.beginUpdate('Ration_QuantityChange');
 | 
	
		
			
				|  |  | -            calcFees.setFee(node.data, fieldName, value);
 | 
	
		
			
				|  |  | -            node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
 | 
	
		
			
				|  |  | -            // calcProgram.calculate的传参必须是cacheNode类型,故无法将计算放在Ration模块中。
 | 
	
		
			
				|  |  | -            project.calcProgram.calculate(node);
 | 
	
		
			
				|  |  | -            project.Ration.updateRation(node.source, false);    // 加入待存储队列
 | 
	
		
			
				|  |  | -            calc.calcNode(node.parent, true);       //
 | 
	
		
			
				|  |  | -            nodes = getNodes(node.parent);
 | 
	
		
			
				|  |  | -            project.Bills.updateNodes(nodes, false);
 | 
	
		
			
				|  |  | -            project.endUpdate();
 | 
	
		
			
				|  |  | -            nodes.push(node);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        this.mainController.refreshTreeNode(nodes, false);
 | 
	
		
			
				|  |  | -        calc = null;
 | 
	
		
			
				|  |  | -    },*/
 | 
	
		
			
				|  |  |      updateBillsCode: function (node, value) {
 | 
	
		
			
				|  |  |          let project = projectObj.project;
 | 
	
		
			
				|  |  |          let stdMatchCode, formatCode, matchs;
 | 
	
		
			
				|  |  |          let searchStdBillsAndUpdate = function (stdCode, formatCode) {
 | 
	
		
			
				|  |  | -            let orgCode = node.data.code.substr(0, 9);
 | 
	
		
			
				|  |  | +            let orgCode = node.data.code?node.data.code.substr(0, 9):"";
 | 
	
		
			
				|  |  |              if (stdCode === orgCode || projectInfoObj.projectInfo.engineeringInfo.bill_lib.length === 0) {
 | 
	
		
			
				|  |  |                  project.Bills.updateField(node.source, 'code', formatCode, true);
 | 
	
		
			
				|  |  |                  projectObj.mainController.refreshTreeNode([node], false);
 | 
	
	
		
			
				|  | @@ -232,23 +217,27 @@ var projectObj = {
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (value&&value.length === 9 && /^[\d]+$/.test(value)) {
 | 
	
		
			
				|  |  | -            stdMatchCode = value;
 | 
	
		
			
				|  |  | -            formatCode = project.Bills.newFormatCode(stdMatchCode);
 | 
	
		
			
				|  |  | -            searchStdBillsAndUpdate(stdMatchCode, formatCode);
 | 
	
		
			
				|  |  | -        } else if (value&&value.length === 12 && /^[\d]+$/.test(value)) {
 | 
	
		
			
				|  |  | -            stdMatchCode = value.substr(0, 9);
 | 
	
		
			
				|  |  | -            matchs = project.Bills.sameStdCode(stdMatchCode, node.data.code);
 | 
	
		
			
				|  |  | -            if (matchs.indexOf(value) === -1) {
 | 
	
		
			
				|  |  | -                searchStdBillsAndUpdate(stdMatchCode, value);
 | 
	
		
			
				|  |  | -            } else if (confirm('已存在该编码的清单,是否继续?')) {
 | 
	
		
			
				|  |  | -                formatCode = project.Bills.newFormatCode(stdMatchCode, node.data.code);
 | 
	
		
			
				|  |  | +        if(node.data.type==billType.FX||node.data.type==billType.BILL){
 | 
	
		
			
				|  |  | +            if (value&&value.length === 9 && /^[\d]+$/.test(value)) {
 | 
	
		
			
				|  |  | +                stdMatchCode = value;
 | 
	
		
			
				|  |  | +                formatCode = project.Bills.newFormatCode(stdMatchCode);
 | 
	
		
			
				|  |  |                  searchStdBillsAndUpdate(stdMatchCode, formatCode);
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            } else if (value&&value.length === 12 && /^[\d]+$/.test(value)) {
 | 
	
		
			
				|  |  | +                stdMatchCode = value.substr(0, 9);
 | 
	
		
			
				|  |  | +                matchs = project.Bills.sameStdCode(stdMatchCode, node.data.code);
 | 
	
		
			
				|  |  | +                if (matchs.indexOf(value) === -1) {
 | 
	
		
			
				|  |  | +                    searchStdBillsAndUpdate(stdMatchCode, value);
 | 
	
		
			
				|  |  | +                } else if (confirm('已存在该编码的清单,是否继续?')) {
 | 
	
		
			
				|  |  | +                    formatCode = project.Bills.newFormatCode(stdMatchCode, node.data.code);
 | 
	
		
			
				|  |  | +                    searchStdBillsAndUpdate(stdMatchCode, formatCode);
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            project.Bills.updateField(node.source, 'code', value, true);
 | 
	
		
			
				|  |  | -            this.mainController.refreshTreeNode([node], false);
 | 
	
		
			
				|  |  | -        } 
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        project.Bills.updateField(node.source, 'code', value, true);
 | 
	
		
			
				|  |  | +        this.mainController.refreshTreeNode([node], false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      updateRationCode: function (node, value) {
 | 
	
		
			
				|  |  |          if (projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0) {
 | 
	
	
		
			
				|  | @@ -280,30 +269,31 @@ var projectObj = {
 | 
	
		
			
				|  |  |              };*/
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    updateCellValue: function (node, value, colSetting) {
 | 
	
		
			
				|  |  | -        console.log(`node`);
 | 
	
		
			
				|  |  | -        console.log(node);
 | 
	
		
			
				|  |  | +    updateCellValue: function (node, value, colSetting,editingText) {
 | 
	
		
			
				|  |  |          let project = projectObj.project, fieldName = colSetting.data.field;
 | 
	
		
			
				|  |  |          if(node.sourceType==project.ration_glj.getSourceType()){
 | 
	
		
			
				|  |  |              project.ration_glj.updateFromMainSpread(value,node,fieldName);
 | 
	
		
			
				|  |  | -        }else if(treeNodeTools.isGljRation(node)){
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else if(calcTools.isGljRation(node)){
 | 
	
		
			
				|  |  |              gljOprObj.updateRationTypeGLJ(value,node,fieldName);
 | 
	
		
			
				|  |  | -        } else if (value !== calcFees.getFee(node.data, fieldName)||fieldName == 'quantity') {//工程量需要进行转换,所以做特殊处理
 | 
	
		
			
				|  |  | -            if (fieldName === 'code' && !treeNodeTools.isVolumePrice(node)) {
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else if (value !== calcFees.getFee(node.data, fieldName)||fieldName == 'quantity') {//工程量需要进行转换,所以做特殊处理
 | 
	
		
			
				|  |  | +            if (fieldName === 'code' && !calcTools.isVolumePrice(node)) {
 | 
	
		
			
				|  |  |                  projectObj.updateCode(node, value);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              else if(fieldName ==='feeRate'){
 | 
	
		
			
				|  |  |                  project.FeeRate.updateFeeRateFromBills(value,node,fieldName);
 | 
	
		
			
				|  |  | -            }else if(fieldName ==='contain'){//编辑含量
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            else if(fieldName ==='contain'){//编辑含量
 | 
	
		
			
				|  |  |                  project.Ration.updateContain(value,node);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              else if (fieldName === 'quantity' || fieldName === 'marketUnitFee' || fieldName === 'programID' ||
 | 
	
		
			
				|  |  | -                fieldName === 'subType' || fieldName === 'calcBase' || fieldName === 'feesIndex.common.unitFee'){
 | 
	
		
			
				|  |  | +                fieldName === 'subType' || fieldName === 'calcBase' || fieldName === 'isSubcontract'){
 | 
	
		
			
				|  |  |                  if (fieldName === 'quantity') {
 | 
	
		
			
				|  |  | -                    project.quantity_detail.editMainTreeNodeQuantity(value,node,fieldName);
 | 
	
		
			
				|  |  | +                    project.quantity_detail.editMainTreeNodeQuantity(value,node,fieldName,editingText);
 | 
	
		
			
				|  |  |                      return;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                else if (fieldName === 'marketUnitFee' || fieldName === 'feesIndex.common.unitFee') {
 | 
	
		
			
				|  |  | +                else if (fieldName === 'marketUnitFee') {
 | 
	
		
			
				|  |  |                      if (value) {value = parseFloat(value).toDecimal(decimalObj.decimal("unitPrice", node))};
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  else if (fieldName === 'calcBase') {
 | 
	
	
		
			
				|  | @@ -320,17 +310,16 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                      // if (value) {value = parseFloat(value).toDecimal(decimalObj.decimal("totalPrice", node))};
 | 
	
		
			
				|  |  |                  };
 | 
	
		
			
				|  |  | -                node.changed = true;
 | 
	
		
			
				|  |  | -                if (fieldName == 'feesIndex.common.unitFee'){
 | 
	
		
			
				|  |  | -                    treeNodeTools.initFeeField(node, 'common');
 | 
	
		
			
				|  |  | -                    node.data.feesIndex.common.unitFee = value;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                else if(fieldName !== 'calcBase'){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if(fieldName !== 'calcBase'){
 | 
	
		
			
				|  |  |                      node.data[fieldName] = value;
 | 
	
		
			
				|  |  | +                    node.changed = true;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  project.calcProgram.calcAndSave(node);
 | 
	
		
			
				|  |  |                  gljOprObj.showRationGLJSheetData();
 | 
	
		
			
				|  |  | -            } else if (node.sourceType === project.Bills.getSourceType()&&fieldName === 'unit'){//修改清单单位的时候清单工程量要重新4舍5入
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            else if (node.sourceType === project.Bills.getSourceType()&&fieldName === 'unit'){//修改清单单位的时候清单工程量要重新4舍5入
 | 
	
		
			
				|  |  |                  node.data[fieldName] = value;
 | 
	
		
			
				|  |  |                  node.changed = true;
 | 
	
		
			
				|  |  |                  if(node.data.quantity){
 | 
	
	
		
			
				|  | @@ -351,9 +340,11 @@ var projectObj = {
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  projectObj.mainController.refreshTreeNode([node]);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -        } else if(value==null && fieldName ==='feeRate'){
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else if(value==null && fieldName ==='feeRate'){
 | 
	
		
			
				|  |  |              project.FeeRate.cleanFeeRateID(node);
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else {
 | 
	
		
			
				|  |  |              projectObj.mainController.refreshTreeNode([node], false);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      },
 | 
	
	
		
			
				|  | @@ -383,7 +374,7 @@ var projectObj = {
 | 
	
		
			
				|  |  |          let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
 | 
	
		
			
				|  |  |          // 检查输入类型等
 | 
	
		
			
				|  |  |          let value = projectObj.checkSpreadEditingText(info.editingText, colSetting);
 | 
	
		
			
				|  |  | -        projectObj.updateCellValue(node, value, colSetting);
 | 
	
		
			
				|  |  | +        projectObj.updateCellValue(node, value, colSetting,info.editingText);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 自动行高
 | 
	
		
			
				|  |  |          const autoHeight = project.property.displaySetting.autoHeight;
 | 
	
	
		
			
				|  | @@ -426,7 +417,7 @@ var projectObj = {
 | 
	
		
			
				|  |  |                  that.project.property = projectInfoObj.projectInfo.property;
 | 
	
		
			
				|  |  |                  //that.project.calcProgram.compileAllTemps();
 | 
	
		
			
				|  |  |                  that.project.calcBase.init(that.project);
 | 
	
		
			
				|  |  | -                that.project.calcFields = JSON.parse(JSON.stringify(cpFeeTypes));
 | 
	
		
			
				|  |  | +                // that.project.calcFields = JSON.parse(JSON.stringify(cpFeeTypes));
 | 
	
		
			
				|  |  |                  // that.project.initCalcFields();
 | 
	
		
			
				|  |  |                  let str = JSON.stringify(that.project.projSetting.main_tree_col);
 | 
	
		
			
				|  |  |                  that.project.projSetting.mainGridSetting = JSON.parse(str);
 | 
	
	
		
			
				|  | @@ -475,13 +466,15 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      if(col.data.field ==='quantity'){
 | 
	
		
			
				|  |  |                          col.showHint = true;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    // for test digit. CSLAAAAA
 | 
	
		
			
				|  |  | -                    if (col.data.field.hasSubStr("totalFee"))
 | 
	
		
			
				|  |  | -                       col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.totalPrice, false)
 | 
	
		
			
				|  |  | -                    else if (col.data.field.hasSubStr("unitFee"))
 | 
	
		
			
				|  |  | -                        col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.unitPrice, false)
 | 
	
		
			
				|  |  | -                    else if (col.data.field == "quantity")
 | 
	
		
			
				|  |  | -                        col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.quantity, false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // 综合单价、综合合价,小数部分应补0对齐。  CSLAAAAA
 | 
	
		
			
				|  |  | +                    // if (col.data.field.hasSubStr("common")){
 | 
	
		
			
				|  |  | +                        if (col.data.field.hasSubStr(".totalFee"))
 | 
	
		
			
				|  |  | +                            col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.totalPrice, true)
 | 
	
		
			
				|  |  | +                        else if (col.data.field.hasSubStr(".unitFee"))
 | 
	
		
			
				|  |  | +                            col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.unitPrice, true)
 | 
	
		
			
				|  |  | +                    // }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), that.project.projSetting.mainGridSetting);
 | 
	
	
		
			
				|  | @@ -496,10 +489,16 @@ var projectObj = {
 | 
	
		
			
				|  |  |                  that.mainSpread.bind(GC.Spread.Sheets.Events.EditEnded, that.mainSpreadEditEnded);
 | 
	
		
			
				|  |  |                  that.mainSpread.bind(GC.Spread.Sheets.Events.RangeChanged, that.mainSpreadRangeChanged);
 | 
	
		
			
				|  |  |                  that.mainSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, that.amountAreaNumber);
 | 
	
		
			
				|  |  | +                that.mainSpread.bind(GC.Spread.Sheets.Events.ButtonClicked, that.onButtonClick);
 | 
	
		
			
				|  |  |                  that.loadMainSpreadContextMenu();
 | 
	
		
			
				|  |  |                  that.loadFocusLocation();
 | 
	
		
			
				|  |  |                  let endTime = +new Date();
 | 
	
		
			
				|  |  | +                socketObject.connect();//连接socket服务器
 | 
	
		
			
				|  |  |                  console.log("加载完成-----"+endTime);
 | 
	
		
			
				|  |  | +                console.log(`时间——${endTime - startTime}`);
 | 
	
		
			
				|  |  | +                that.project.projectMarkChecking();//是否需要重新进行造价计算
 | 
	
		
			
				|  |  | +                console.log(projectInfoObj.projectInfo);
 | 
	
		
			
				|  |  | +                //project.calcProgram.calcAllNodesAndSave()
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              else {
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -535,7 +534,7 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      icon: 'fa-sign-in',
 | 
	
		
			
				|  |  |                      disabled: function () {
 | 
	
		
			
				|  |  |                          let selected = project.mainTree.selected;
 | 
	
		
			
				|  |  | -                        if(selected.sourceType==project.Bills.getSourceType()){
 | 
	
		
			
				|  |  | +                        if(selected&&selected.sourceType==project.Bills.getSourceType()){
 | 
	
		
			
				|  |  |                              if(selected.data.type==billType.FB){
 | 
	
		
			
				|  |  |                                  return false;
 | 
	
		
			
				|  |  |                              }
 | 
	
	
		
			
				|  | @@ -553,7 +552,11 @@ var projectObj = {
 | 
	
		
			
				|  |  |                          ProjectController.addFB(project, controller);
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  |                      visible: function(key, opt){
 | 
	
		
			
				|  |  | -                        return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
 | 
	
		
			
				|  |  | +                        if(project.mainTree.selected){
 | 
	
		
			
				|  |  | +                            return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
 | 
	
		
			
				|  |  | +                        }else {
 | 
	
		
			
				|  |  | +                            return false;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  },
 | 
	
		
			
				|  |  |                  "insertFX": {
 | 
	
	
		
			
				|  | @@ -561,7 +564,7 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      icon: 'fa-sign-in',
 | 
	
		
			
				|  |  |                      disabled: function () {
 | 
	
		
			
				|  |  |                          let selected = project.mainTree.selected;
 | 
	
		
			
				|  |  | -                        if(selected.sourceType==project.Bills.getSourceType()){
 | 
	
		
			
				|  |  | +                        if(selected&&selected.sourceType==project.Bills.getSourceType()){
 | 
	
		
			
				|  |  |                              if(selected.data.type==billType.FX){//焦点行是分项,有效显示
 | 
	
		
			
				|  |  |                                  return false
 | 
	
		
			
				|  |  |                              }
 | 
	
	
		
			
				|  | @@ -586,7 +589,11 @@ var projectObj = {
 | 
	
		
			
				|  |  |                          ProjectController.addFX(project, controller);
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  |                      visible: function(key, opt){
 | 
	
		
			
				|  |  | -                        return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
 | 
	
		
			
				|  |  | +                        if(project.mainTree.selected){
 | 
	
		
			
				|  |  | +                            return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
 | 
	
		
			
				|  |  | +                        }else {
 | 
	
		
			
				|  |  | +                            return false;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  },
 | 
	
		
			
				|  |  |                  "insertBills": {
 | 
	
	
		
			
				|  | @@ -605,7 +612,11 @@ var projectObj = {
 | 
	
		
			
				|  |  |                          ProjectController.addBills(project, controller);
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  |                       visible: function(key, opt){
 | 
	
		
			
				|  |  | -                         return  project.Bills.isFBFX(project.mainTree.selected)==true?false:true;//不属于分部分项的话隐藏
 | 
	
		
			
				|  |  | +                         if(project.mainTree.selected){
 | 
	
		
			
				|  |  | +                             return  project.Bills.isFBFX(project.mainTree.selected)==true?false:true;
 | 
	
		
			
				|  |  | +                         }else {
 | 
	
		
			
				|  |  | +                             return false;
 | 
	
		
			
				|  |  | +                         }
 | 
	
		
			
				|  |  |                       }
 | 
	
		
			
				|  |  |                  },
 | 
	
		
			
				|  |  |                  "insertRation": {
 | 
	
	
		
			
				|  | @@ -620,11 +631,14 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  |                      visible: function(key, opt){
 | 
	
		
			
				|  |  |                          var selected = project.mainTree.selected;
 | 
	
		
			
				|  |  | -                        if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
 | 
	
		
			
				|  |  | -                            return false
 | 
	
		
			
				|  |  | -                        }else {
 | 
	
		
			
				|  |  | -                            return true
 | 
	
		
			
				|  |  | +                        if(selected){
 | 
	
		
			
				|  |  | +                            if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
 | 
	
		
			
				|  |  | +                                return false
 | 
	
		
			
				|  |  | +                            }else {
 | 
	
		
			
				|  |  | +                                return true
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | +                       return false;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  },
 | 
	
		
			
				|  |  |                  "insertLJ": {
 | 
	
	
		
			
				|  | @@ -639,11 +653,14 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  |                      visible: function(key, opt){
 | 
	
		
			
				|  |  |                          var selected = project.mainTree.selected;
 | 
	
		
			
				|  |  | -                        if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
 | 
	
		
			
				|  |  | -                            return false
 | 
	
		
			
				|  |  | -                        }else {
 | 
	
		
			
				|  |  | -                            return true
 | 
	
		
			
				|  |  | +                        if(selected){
 | 
	
		
			
				|  |  | +                            if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
 | 
	
		
			
				|  |  | +                                return false
 | 
	
		
			
				|  |  | +                            }else {
 | 
	
		
			
				|  |  | +                                return true
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | +                       return false;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  },
 | 
	
		
			
				|  |  |                  "insertGLJ": {
 | 
	
	
		
			
				|  | @@ -667,11 +684,27 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  |                      visible: function(key, opt){
 | 
	
		
			
				|  |  |                          var selected = project.mainTree.selected;
 | 
	
		
			
				|  |  | -                        if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
 | 
	
		
			
				|  |  | -                            return false
 | 
	
		
			
				|  |  | -                        }else {
 | 
	
		
			
				|  |  | -                            return true
 | 
	
		
			
				|  |  | +                        if(selected){
 | 
	
		
			
				|  |  | +                            if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
 | 
	
		
			
				|  |  | +                                return false;
 | 
	
		
			
				|  |  | +                            }else {
 | 
	
		
			
				|  |  | +                                return true;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | +                        return false;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                },
 | 
	
		
			
				|  |  | +                "ZLFB": {
 | 
	
		
			
				|  |  | +                    name: "整理分部",
 | 
	
		
			
				|  |  | +                    icon: 'fa-sign-in',
 | 
	
		
			
				|  |  | +                    disabled: function () {
 | 
	
		
			
				|  |  | +                       return false;
 | 
	
		
			
				|  |  | +                    },
 | 
	
		
			
				|  |  | +                    callback: function (key, opt) {
 | 
	
		
			
				|  |  | +                        zlfb_object.getSectionInfo();
 | 
	
		
			
				|  |  | +                    },
 | 
	
		
			
				|  |  | +                    visible: function(key, opt){
 | 
	
		
			
				|  |  | +                        return true;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  },
 | 
	
		
			
				|  |  |                  "spr1": '--------',
 | 
	
	
		
			
				|  | @@ -679,8 +712,7 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      name: '删除',
 | 
	
		
			
				|  |  |                      icon: 'fa-remove',
 | 
	
		
			
				|  |  |                      disabled: function () {
 | 
	
		
			
				|  |  | -                        var selected = project.mainTree.selected;
 | 
	
		
			
				|  |  | -                        return !selected;
 | 
	
		
			
				|  |  | +                        return !ifCanDelete();
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  |                      callback: function () {
 | 
	
		
			
				|  |  |                          $("#delete_row").modal({show:true});//弹出删除提示框;
 | 
	
	
		
			
				|  | @@ -691,9 +723,7 @@ var projectObj = {
 | 
	
		
			
				|  |  |                      name: '造价计算',
 | 
	
		
			
				|  |  |                      callback: function () {
 | 
	
		
			
				|  |  |                          $.bootstrapLoading.start();
 | 
	
		
			
				|  |  | -                        let changedNodes = project.calcProgram.calcAllNodes();
 | 
	
		
			
				|  |  | -                        project.calcProgram.saveNodes(changedNodes);
 | 
	
		
			
				|  |  | -                        $.bootstrapLoading.end();
 | 
	
		
			
				|  |  | +                        project.calcProgram.calcAllNodesAndSave();
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -810,7 +840,132 @@ var projectObj = {
 | 
	
		
			
				|  |  |                  isTotalShowing = true;
 | 
	
		
			
				|  |  |              }, 200);
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  | + },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    onButtonClick: function (e, info) {
 | 
	
		
			
				|  |  | +        let node = projectObj.project.mainTree.items[info.row];
 | 
	
		
			
				|  |  | +        if (node.data.isSubcontract) node.data.isSubcontract = false
 | 
	
		
			
				|  |  | +        else node.data.isSubcontract = true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        node.changed = true;
 | 
	
		
			
				|  |  | +        projectObj.project.calcProgram.calcAndSave(node);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //根据节点获取行style(颜色、字体加粗)
 | 
	
		
			
				|  |  | +    getNodeColorStyle: function (node, colSetting) {
 | 
	
		
			
				|  |  | +        let colorSetting = optionsOprObj.getOption(optionsOprObj.optionsTypes.COLOROPTS);
 | 
	
		
			
				|  |  | +        let mapping = {DEFAULT: 'DEFAULT', DXFY: 'DXFY', FB: 'FB', UNLEAFBILL: 'UNLEAFBILL',
 | 
	
		
			
				|  |  | +            FX: 'FX', UNCBBILL: 'UNCBBILL', CBBILL: 'CBBILL', ZCSB: 'ZCSB'};
 | 
	
		
			
				|  |  | +        let styleMap = null;
 | 
	
		
			
				|  |  | +        //中文字段名,由于同一节点中,中文字体大小和数字字体大小不同
 | 
	
		
			
				|  |  | +        let stringFields = [
 | 
	
		
			
				|  |  | +            'code',
 | 
	
		
			
				|  |  | +            'subType',
 | 
	
		
			
				|  |  | +            'name',
 | 
	
		
			
				|  |  | +            'unit',
 | 
	
		
			
				|  |  | +            'itemCharacterText',
 | 
	
		
			
				|  |  | +            'jobContentText',
 | 
	
		
			
				|  |  | +            'adjustState',
 | 
	
		
			
				|  |  | +            'calcBase',
 | 
	
		
			
				|  |  | +            'programID',
 | 
	
		
			
				|  |  | +            'ruleText'
 | 
	
		
			
				|  |  | +        ];
 | 
	
		
			
				|  |  | +        if(!isDef(node)){
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //清单大类
 | 
	
		
			
				|  |  | +        if(node.sourceType === this.project.Bills.getSourceType()){
 | 
	
		
			
				|  |  | +            //大项费用
 | 
	
		
			
				|  |  | +            //大项费用
 | 
	
		
			
				|  |  | +            if(node.data.type === billType.DXFY){
 | 
	
		
			
				|  |  | +                styleMap = mapping.DXFY;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //分部
 | 
	
		
			
				|  |  | +            if(node.data.type === billType.FB){
 | 
	
		
			
				|  |  | +                styleMap = mapping.FB;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //分项
 | 
	
		
			
				|  |  | +            else if(node.data.type === billType.FX){
 | 
	
		
			
				|  |  | +                styleMap = mapping.FX;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //清单
 | 
	
		
			
				|  |  | +            else if(node.data.type === billType.BILL){
 | 
	
		
			
				|  |  | +                //非叶子节点的清单
 | 
	
		
			
				|  |  | +                if(node.source.children.length > 0){
 | 
	
		
			
				|  |  | +                    styleMap = mapping.UNLEAFBILL;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                //未使用基数计算的叶子节点的清单
 | 
	
		
			
				|  |  | +                else if(node.source.children.length === 0 && (!isDef(node.data.calcBase) || node.data.calcBase === '')){
 | 
	
		
			
				|  |  | +                    styleMap = mapping.UNCBBILL;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                //使用基数计算的叶子节点的清单
 | 
	
		
			
				|  |  | +                else if(node.source.children.length === 0 && isDef(node.data.calcBase && node.data.calcBaseValue !== '')){
 | 
	
		
			
				|  |  | +                    styleMap = mapping.CBBILL;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //定额下的主材、设备
 | 
	
		
			
				|  |  | +        else if(node.sourceType === this.project.ration_glj.getSourceType()){
 | 
	
		
			
				|  |  | +            styleMap = mapping.ZCSB;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else {
 | 
	
		
			
				|  |  | +            styleMap = mapping.DEFAULT;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        let styleSetting = colorSetting[styleMap];
 | 
	
		
			
				|  |  | +        let defaultSetting = colorSetting[mapping.DEFAULT];
 | 
	
		
			
				|  |  | +        if(!isDef(styleSetting)){
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        let style = new GC.Spread.Sheets.Style();
 | 
	
		
			
				|  |  | +        //设置style属性
 | 
	
		
			
				|  |  | +        for(let attr in styleSetting){
 | 
	
		
			
				|  |  | +            if(attr !== 'stringFont' && attr !== 'numFont'){
 | 
	
		
			
				|  |  | +                style[attr] = styleSetting[attr] === 'default' || !isDef(styleSetting[attr]) ? defaultSetting[attr] : styleSetting[attr];
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //暂时不开放字体设置,开放的话只能每个单元格进入此方法
 | 
	
		
			
				|  |  | +           /* else {
 | 
	
		
			
				|  |  | +                if(stringFields.indexOf(colSetting.data.field) > 0){
 | 
	
		
			
				|  |  | +                    style.font = styleSetting.stringFont === 'default' || !isDef(styleSetting.stringFont) ? defaultSetting.stringFont : styleSetting.stringFont;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                else {
 | 
	
		
			
				|  |  | +                    style.font = styleSetting.numFont === 'default' || !isDef(styleSetting.numFont) ? defaultSetting.numFont : styleSetting.numFont;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }*/
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        style.borderLeft = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
 | 
	
		
			
				|  |  | +        style.borderTop = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
 | 
	
		
			
				|  |  | +        style.borderRight = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
 | 
	
		
			
				|  |  | +        style.borderBottom = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
 | 
	
		
			
				|  |  | +        return style;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //大项费用则字体加粗,String 15px, Number 13px
 | 
	
		
			
				|  |  | +    getBoldFontStyle: function (node, colSetting) {
 | 
	
		
			
				|  |  | +        if(node.sourceType !== this.project.Bills.getSourceType() || node.data.type !== billType.DXFY){
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        let style = new GC.Spread.Sheets.Style();
 | 
	
		
			
				|  |  | +        //备注暂无字段
 | 
	
		
			
				|  |  | +        let stringFields = [
 | 
	
		
			
				|  |  | +            'code',
 | 
	
		
			
				|  |  | +            'subType',
 | 
	
		
			
				|  |  | +            'name',
 | 
	
		
			
				|  |  | +            'unit',
 | 
	
		
			
				|  |  | +            'itemCharacterText',
 | 
	
		
			
				|  |  | +            'jobContentText',
 | 
	
		
			
				|  |  | +            'adjustState',
 | 
	
		
			
				|  |  | +            'calcBase',
 | 
	
		
			
				|  |  | +            'programID',
 | 
	
		
			
				|  |  | +            'ruleText'
 | 
	
		
			
				|  |  | +        ];
 | 
	
		
			
				|  |  | +        if(stringFields.indexOf(colSetting.data.field) > 0){
 | 
	
		
			
				|  |  | +            style.font = 'bold 15px Arial';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else {
 | 
	
		
			
				|  |  | +            style.font = 'bold 13px Arial';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return style;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  // 点击合计框中的复制
 | 
	
		
			
				|  |  |  $("body").on("click", "#total-tips a", function() {
 | 
	
	
		
			
				|  | @@ -850,7 +1005,8 @@ $('#upLevel').click(function () {
 | 
	
		
			
				|  |  |      if (selected && selected.sourceType === project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  |          project.Bills.upLevelBills(selected.source);
 | 
	
		
			
				|  |  |          controller.upLevel();
 | 
	
		
			
				|  |  | -        projectObj.converseCalculateBills(orgParent);
 | 
	
		
			
				|  |  | +        controller.refreshTreeNode([orgParent]);
 | 
	
		
			
				|  |  | +        projectObj.project.calcProgram.calcBillsAndSave([selected,orgParent]);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  |  $('#downLevel').click(function () {
 | 
	
	
		
			
				|  | @@ -858,7 +1014,8 @@ $('#downLevel').click(function () {
 | 
	
		
			
				|  |  |      var selected = controller.tree.selected;
 | 
	
		
			
				|  |  |      if (selected && selected.sourceType === project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  |          project.Bills.downLevelBills(selected.source);
 | 
	
		
			
				|  |  | -        controller.downLevel();       
 | 
	
		
			
				|  |  | +        controller.downLevel();
 | 
	
		
			
				|  |  | +        controller.refreshTreeNode([selected.parent]);
 | 
	
		
			
				|  |  |          projectObj.converseCalculateBills(selected.parent);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  });
 | 
	
	
		
			
				|  | @@ -931,8 +1088,8 @@ $('#property_ok').click(function () {
 | 
	
		
			
				|  |  |              bills: bills
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        reCalcBills= false,
 | 
	
		
			
				|  |  | -        reCalcRations= false;
 | 
	
		
			
				|  |  | +        reCalcBills = false,
 | 
	
		
			
				|  |  | +        reCalcRations = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      let b = parseInt($("input[name='calcFlag']:checked").val());
 | 
	
		
			
				|  |  |      if (b !== project.property.billsCalcMode) {
 | 
	
	
		
			
				|  | @@ -945,7 +1102,7 @@ $('#property_ok').click(function () {
 | 
	
		
			
				|  |  |      if (zg !== project.property.zanguCalcMode) {
 | 
	
		
			
				|  |  |          properties['property.zanguCalcMode'] = zg;
 | 
	
		
			
				|  |  |          project.property.zanguCalcMode = zg;
 | 
	
		
			
				|  |  | -        reCalcBills = true;
 | 
	
		
			
				|  |  | +        reCalcRations = true;
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      //基本信息
 | 
	
	
		
			
				|  | @@ -995,30 +1152,15 @@ $('#property_ok').click(function () {
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |      // 重新计算树节点
 | 
	
		
			
				|  |  |      let changedNodes = [];
 | 
	
		
			
				|  |  | -    if (reCalcRations)    // 定额动,全部计算。
 | 
	
		
			
				|  |  | +    if (reCalcRations)    // 定额动,全部计算。算完先不存储,和后面的数据一起提交,一次通讯。
 | 
	
		
			
				|  |  |          changedNodes = project.calcProgram.calcAllNodes(calcAllType.catAll)
 | 
	
		
			
				|  |  |      else if (reCalcBills)  // 清单动,可以只计算清单。
 | 
	
		
			
				|  |  |          changedNodes = project.calcProgram.calcAllNodes(calcAllType.catBills);
 | 
	
		
			
				|  |  |      if (changedNodes.length > 0) {
 | 
	
		
			
				|  |  |          for (let node of changedNodes){
 | 
	
		
			
				|  |  | -            let data = {
 | 
	
		
			
				|  |  | -                // projectID: projectID,
 | 
	
		
			
				|  |  | -                ID: node.data.ID,
 | 
	
		
			
				|  |  | -                quantity: node.data.quantity,
 | 
	
		
			
				|  |  | -                calcBase: node.data.calcBase,
 | 
	
		
			
				|  |  | -                calcBaseValue: node.data.calcBaseValue,
 | 
	
		
			
				|  |  | -                marketUnitFee: node.data.marketUnitFee,
 | 
	
		
			
				|  |  | -                marketTotalFee: node.data.marketTotalFee,
 | 
	
		
			
				|  |  | -                fees: node.data.fees,
 | 
	
		
			
				|  |  | -                feeRate: node.data.feeRate,
 | 
	
		
			
				|  |  | -                feeRateID: node.data.feeRateID
 | 
	
		
			
				|  |  | -            };
 | 
	
		
			
				|  |  | -            if (node.sourceType == 'ration'){
 | 
	
		
			
				|  |  | -                rations.push(data);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            else if (node.sourceType == 'bills'){
 | 
	
		
			
				|  |  | -                bills.push(data);
 | 
	
		
			
				|  |  | -            };
 | 
	
		
			
				|  |  | +            let data = calcTools.cutNodeForSave(node);
 | 
	
		
			
				|  |  | +            if (node.sourceType == 'ration') rations.push(data)
 | 
	
		
			
				|  |  | +            else if (node.sourceType == 'bills') bills.push(data);
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1122,4 +1264,45 @@ function isSingleSelect() {//是否选中造价书中的单行
 | 
	
		
			
				|  |  |          return true;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +function ifCanDelete() {
 | 
	
		
			
				|  |  | +    let selections = projectObj.mainSpread.getActiveSheet().getSelections();
 | 
	
		
			
				|  |  | +    let tree = projectObj.project.mainTree;
 | 
	
		
			
				|  |  | +    let selected = projectObj.project.mainTree.selected;
 | 
	
		
			
				|  |  | +    if(selections[0].rowCount==1){//选中单行
 | 
	
		
			
				|  |  | +        return canDelete(selected);
 | 
	
		
			
				|  |  | +    }else {
 | 
	
		
			
				|  |  | +       return canDelete_m(selections[0]);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function canDelete(node,m_selection) {
 | 
	
		
			
				|  |  | +        if (node) {
 | 
	
		
			
				|  |  | +            if (node.sourceType === projectObj.project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  | +                if(node.data.type == billType.DXFY&&node.data.isAdd!=1){
 | 
	
		
			
				|  |  | +                    return false;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(m_selection!=true&&node.sourceType === projectObj.project.ration_glj.getSourceType()){//多选的时候不做这一项判断
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function canDelete_m(selection) {
 | 
	
		
			
				|  |  | +        for(let i =0;i<selection.rowCount;i++){
 | 
	
		
			
				|  |  | +            if(tree.items[selection.row+i]==undefined||tree.items[selection.row+i]==null){
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(i==0&&tree.items[selection.row].sourceType === projectObj.project.ration_glj.getSourceType()){
 | 
	
		
			
				|  |  | +                return false
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(canDelete(tree.items[selection.row+i],true)==false){
 | 
	
		
			
				|  |  | +                return false
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return true
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  |  }
 |