|  | @@ -4,14 +4,15 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  let mbzm_obj={
 | 
	
		
			
				|  |  |      spread:null,
 | 
	
		
			
				|  |  | +    nodeChanged:false,
 | 
	
		
			
				|  |  |      datas:[],
 | 
	
		
			
				|  |  |      setting:{
 | 
	
		
			
				|  |  |          header: [
 | 
	
		
			
				|  |  |              {headerName: "编码", headerWidth: 130, dataCode: "code", dataType: "String", formatter: "@"},
 | 
	
		
			
				|  |  |              {headerName: "模板类别", headerWidth: 260, dataCode: "name", dataType: "String", hAlign: "left"},
 | 
	
		
			
				|  |  | -            {headerName: "系数", headerWidth: 65, dataCode: "coe", dataType: "Number"},
 | 
	
		
			
				|  |  | +            {headerName: "系数", headerWidth: 65, dataCode: "coe", dataType: "Number",validator:"number"},
 | 
	
		
			
				|  |  |              {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center"},
 | 
	
		
			
				|  |  | -            {headerName: "工程量", headerWidth: 65, dataCode: "quantity", dataType: "Number",decimalField: "ration.quantity"},
 | 
	
		
			
				|  |  | +            {headerName: "工程量", headerWidth: 65, dataCode: "quantity", dataType: "Number",validator:"number"},
 | 
	
		
			
				|  |  |              {headerName: "关联类别", headerWidth: 100, dataCode: "type", dataType: "String"},
 | 
	
		
			
				|  |  |              {headerName: "清单位置", headerWidth: 200, dataCode: "position", hAlign: "left", dataType: "String",cellType:'selectButton',getText:'forPosition'},
 | 
	
		
			
				|  |  |          ],
 | 
	
	
		
			
				|  | @@ -21,16 +22,33 @@ let mbzm_obj={
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          getText:{
 | 
	
		
			
				|  |  |              forPosition:function (item) {
 | 
	
		
			
				|  |  | +                let createL =  $('#createLocation').val();
 | 
	
		
			
				|  |  | +                if(createL == 1) return  mbzm_obj.getDisplayText(item.billID,item.billsLocation);
 | 
	
		
			
				|  |  | +                if(createL == 2) return  mbzm_obj.getDisplayText(item.fxID,"");
 | 
	
		
			
				|  |  |                  return ""
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    getDisplayText:function (billID,position) {
 | 
	
		
			
				|  |  | +        if(billID && billID!=''){
 | 
	
		
			
				|  |  | +            let node = projectObj.project.mainTree.getNodeByID(billID);
 | 
	
		
			
				|  |  | +            if(node){
 | 
	
		
			
				|  |  | +                let code = node.data.code?node.data.code:"";
 | 
	
		
			
				|  |  | +                let name = node.data.name?node.data.name:"";
 | 
	
		
			
				|  |  | +                return code +" "+name;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return  position;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      //当点击应用的时候才保存数据
 | 
	
		
			
				|  |  |      initSpread:function () {
 | 
	
		
			
				|  |  |          this.spread = SheetDataHelper.createNewSpread($("#mbzmSpread")[0]);
 | 
	
		
			
				|  |  |          sheetCommonObj.spreadDefaultStyle(this.spread);
 | 
	
		
			
				|  |  |          this.sheet = this.spread.getSheet(0);
 | 
	
		
			
				|  |  |          sheetCommonObj.initSheet(this.sheet, this.setting);
 | 
	
		
			
				|  |  | +        this.sheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);
 | 
	
		
			
				|  |  | +        this.spread.bind(GC.Spread.Sheets.Events.ButtonClicked, installationFeeObj.onPositionButtonClick);//共用一个位置选择器
 | 
	
		
			
				|  |  | +        this.sheet.name('ration_template');
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      refresh:function () {
 | 
	
		
			
				|  |  |          let total = $('#mbzmSpread').parent().height();
 | 
	
	
		
			
				|  | @@ -38,32 +56,63 @@ let mbzm_obj={
 | 
	
		
			
				|  |  |          $('#mbzmSpread').css('height',total- b_height);
 | 
	
		
			
				|  |  |          this.spread?this.spread.refresh():this.initSpread();
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    refreshSheetData:function () {
 | 
	
		
			
				|  |  | +        sheetCommonObj.showData(this.sheet, this.setting,this.datas);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      showMBZMData:function(node){
 | 
	
		
			
				|  |  |          let selected = node?node:projectObj.project.mainTree.selected;
 | 
	
		
			
				|  |  | -        let datas = [];
 | 
	
		
			
				|  |  | -        $("#createLocation").val(1);//初始化
 | 
	
		
			
				|  |  | -        if(selected&&selected.sourceType == "ration"){
 | 
	
		
			
				|  |  | -            let ration = selected.data;
 | 
	
		
			
				|  |  | -            let  template = projectObj.project.ration_template.getTemplateByRationID(ration.ID);
 | 
	
		
			
				|  |  | -            if(template) {
 | 
	
		
			
				|  |  | -                $("#createLocation").val(template.createLocation);
 | 
	
		
			
				|  |  | -                let pcol = _.findIndex(this.setting.header,{dataCode:"position"});
 | 
	
		
			
				|  |  | -                this.setting.header[pcol].visible = template.createLocation == 3?false:true;
 | 
	
		
			
				|  |  | -                datas = _.cloneDeep(template.templateList);
 | 
	
		
			
				|  |  | +        if(this.nodeChanged == true){//选中的行改变了才做初始化,刷新当前缓存, 在project_view 中treeSelectedChanged方法里设置
 | 
	
		
			
				|  |  | +            let datas = [];
 | 
	
		
			
				|  |  | +            $("#createLocation").val(1);//初始化
 | 
	
		
			
				|  |  | +            if(selected&&selected.sourceType == "ration"){
 | 
	
		
			
				|  |  | +                let ration = selected.data;
 | 
	
		
			
				|  |  | +                let  template = projectObj.project.ration_template.getTemplateByRationID(ration.ID);
 | 
	
		
			
				|  |  | +                if(template) {
 | 
	
		
			
				|  |  | +                    $("#createLocation").val(template.createLocation);
 | 
	
		
			
				|  |  | +                    let pcol = _.findIndex(this.setting.header,{dataCode:"position"});
 | 
	
		
			
				|  |  | +                    this.setting.header[pcol].visible = template.createLocation == 3?false:true;
 | 
	
		
			
				|  |  | +                    datas = _.cloneDeep(template.templateList);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            this.datas = datas;
 | 
	
		
			
				|  |  | +            this.nodeChanged = false;//这里要恢复成false 应为调用gljObj.refresh() 方法也会进到这里来,这时节点应是没有改变的
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        this.datas = datas;
 | 
	
		
			
				|  |  |          sheetCommonObj.showData(this.sheet, this.setting,this.datas);
 | 
	
		
			
				|  |  |          this.sheet.setRowCount(this.datas.length);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    onSheetValueChange:function (e,info) {
 | 
	
		
			
				|  |  | +        let me = mbzm_obj;
 | 
	
		
			
				|  |  | +        let selected = projectObj.project.mainTree.selected;
 | 
	
		
			
				|  |  | +        let row = info.row, col = info.col;
 | 
	
		
			
				|  |  | +        let dataCode = me.setting.header[col].dataCode;
 | 
	
		
			
				|  |  | +        let recode = me.datas[row], value = info.newValue;
 | 
	
		
			
				|  |  | +        if (info.newValue === undefined) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (value && !sheetCommonObj.checkData(col, me.setting, value)) {
 | 
	
		
			
				|  |  | +            alert('输入的数据类型不对,请重新输入!');
 | 
	
		
			
				|  |  | +            me.refreshSheetData();
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dataCode === 'coe') {//默认为0,可输入数值,输入数值后,后面的工程量=混凝土子目工程量*系数。
 | 
	
		
			
				|  |  | +            let rationQuantity = selected.data.quantity;
 | 
	
		
			
				|  |  | +            rationQuantity = rationQuantity?scMathUtil.roundForObj(rationQuantity, getDecimal('ration.quantity')):0;
 | 
	
		
			
				|  |  | +            value = scMathUtil.roundForObj(value, getDecimal('process'));
 | 
	
		
			
				|  |  | +            recode["quantity"] = scMathUtil.roundForObj(rationQuantity * value, getDecimal('ration.quantity'))+"";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dataCode === 'quantity') {//定额默认显示为0,可输入数值,输入数值后,则清空前面的系数列
 | 
	
		
			
				|  |  | +            value = scMathUtil.roundForObj(value, getDecimal('ration.quantity'))+"";
 | 
	
		
			
				|  |  | +            recode["coe"] = "0";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        recode[dataCode] = value;
 | 
	
		
			
				|  |  | +        me.refreshSheetData();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  $('#createLocation').change(function(){
 | 
	
		
			
				|  |  |      let me = mbzm_obj;
 | 
	
		
			
				|  |  |      let pcol = _.findIndex(me.setting.header,{dataCode:"position"});
 | 
	
		
			
				|  |  | -    me.setting.header[pcol].visible = template.createLocation == 3?false:true;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    $(this).val();
 | 
	
		
			
				|  |  | +    me.setting.header[pcol].visible =  $(this).val() == 3?false:true;
 | 
	
		
			
				|  |  | +    me.refreshSheetData();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    mbzm_obj.showMBZMData();
 | 
	
		
			
				|  |  |  });
 |