zhangweicheng 7 years ago
parent
commit
f0dcc26e7b

+ 4 - 4
modules/ration_glj/facade/ration_glj_facade.js

@@ -92,10 +92,10 @@ function combineQuantity(results,rations) {
         }
         resultList.push(tmp);
       /*  if(resultMap.hasOwnProperty(data.projectGLJID)){
-            resultMap[data.projectGLJID] += data.quantity;
-        }else {
-            resultMap[data.projectGLJID] = data.quantity;
-        }*/
+         resultMap[data.projectGLJID] += data.quantity;
+         }else {
+         resultMap[data.projectGLJID] = data.quantity;
+         }*/
     });
 
  /*   var resultList =[];

+ 3 - 0
public/web/sheet/sheet_common.js

@@ -126,6 +126,9 @@ var sheetCommonObj = {
                 //var cell = sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport);
                 var val = data[row][setting.header[col].dataCode];
                 if(val&&setting.header[col].dataType === "Number"){
+                    if(setting.header[col].hasOwnProperty('tofix')){
+                        val =scMathUtil.roundToString(val,setting.header[col].tofix);
+                    }
                     if(setting.header[col].hasOwnProperty('decimalField')){
                         var decimal = getDecimal(setting.header[col].decimalField);
                         val =scMathUtil.roundToString(val,decimal);

+ 7 - 6
web/building_saas/main/js/models/fee_rate.js

@@ -123,12 +123,13 @@ var FeeRate = {
                 rateIndex:params.sourceIndex,
                 rate:params.dataItem
             }
-            doc.rate.rate =doc.rate.rate.toDecimal(feeRate_consts.decimal);
+            doc.rate.rate =doc.rate.rate.toDecimal(getDecimal("feeRate"));
             this.updateFeeRate(query,doc);
             if(this.ifRateChange(params)){
                 //this.synchronizeFeeRate();
                 this.onFeeRateChange(params.dataItem.ID,params.dataItem.rate);
             }
+            $.bootstrapLoading.end();
         };
 
         FeeRate.prototype.batchUpdateFeeRate = function (items,feerate) {
@@ -211,7 +212,7 @@ var FeeRate = {
                     if(n.data.hasOwnProperty("feeRateID")&&n.data.feeRateID){
                         var rate = me.getFeeRateByID(n.data.feeRateID);
                         if(rate){
-                            n.data.feeRate=number_util.roundToString(rate.rate,feeRate_consts.decimal);
+                            n.data.feeRate=number_util.roundToString(rate.rate,getDecimal("feeRate"));
                             return true;
                         }else {
                             n.data.feeRate=null;
@@ -256,7 +257,7 @@ var FeeRate = {
         FeeRate.prototype.refreshBillsByRateID=function(rateID,value){
             var nodes = _.filter(projectObj.project.mainTree.items,function (n) {
                 if(n.sourceType==ModuleNames.bills&&n.data.feeRateID==rateID){
-                    n.data.feeRate=number_util.roundToString(value,feeRate_consts.decimal);
+                    n.data.feeRate=number_util.roundToString(value,getDecimal("feeRate"));
                     return true;
                 }else {
                     return false;
@@ -338,7 +339,7 @@ var FeeRate = {
         FeeRate.prototype.updateFeeRateFromBills=function(value,node){
             var me =this;
             if(node.sourceType === project.Bills.getSourceType()){
-                var value= number_util.checkNumberValue(value,feeRate_consts.decimal);
+                var value= number_util.checkNumberValue(value,getDecimal("feeRate"));
                 if(value){
                     var bill = node.data;
                     var rate =me.getFeeRateByID(bill.feeRateID);
@@ -359,7 +360,7 @@ var FeeRate = {
         };
 
         FeeRate.prototype.updateFeeRateFromCalc=function (value,editInfo) {
-            var value= number_util.checkNumberValue(value,feeRate_consts.decimal);
+            var value= number_util.checkNumberValue(value,getDecimal("feeRate"));
             if(value){
                 if(editInfo.calcItem.feeRateID){
                     var rate = projectObj.project.FeeRate.getFeeRateByID(editInfo.calcItem.feeRateID);
@@ -470,7 +471,7 @@ var FeeRate = {
             if(node.data.feeRateID){
                 var feeRate = this.getFeeRateByID(node.data.feeRateID);
                 if(feeRate){
-                    node.data.feeRate=number_util.roundToString(feeRate.rate,feeRate_consts.decimal);// parseFloat(feeRate.rate).toFixed(feeRate_consts.decimal);
+                    node.data.feeRate=number_util.roundToString(feeRate.rate,getDecimal("feeRate"));// parseFloat(feeRate.rate).toFixed(feeRate_consts.decimal);
                 }
             }
         };

+ 0 - 3
web/building_saas/main/js/models/main_consts.js

@@ -48,9 +48,6 @@ const gljType = {
     EQUIPMENT: 5
 };
 
-const feeRate_consts={
-    decimal:3
-};
 
 const CP_Col_Width = {          // 多处计算程序界面的列宽统一设置
     rowHeader: 30,

+ 1 - 1
web/building_saas/main/js/views/calc_program_manage.js

@@ -26,7 +26,7 @@ let rationPM = {
             {headerName:"费用代号",headerWidth:CP_Col_Width.code, dataCode:"code", dataType: "String"},
             {headerName:"费用名称",headerWidth:CP_Col_Width.name, dataCode:"name", dataType: "String"},
             {headerName:"计算基数",headerWidth:CP_Col_Width.dispExprUser, dataCode:"dispExprUser", dataType: "String"},
-            {headerName:"费率",headerWidth:CP_Col_Width.feeRate, dataCode:"feeRate", dataType: "Number",hAlign: "right",tofix: feeRate_consts.decimal},
+            {headerName:"费率",headerWidth:CP_Col_Width.feeRate, dataCode:"feeRate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},
             {headerName:"费用类别",headerWidth:CP_Col_Width.displayFieldName, dataCode:"displayFieldName", dataType: "String", hAlign: "center"},
             {headerName:"基数说明",headerWidth:CP_Col_Width.statement, dataCode:"statement", dataType: "String"},
             {headerName:"备注",headerWidth:CP_Col_Width.memo, dataCode:"memo", dataType: "String"}

+ 9 - 7
web/building_saas/main/js/views/fee_rate_view.js

@@ -19,7 +19,7 @@ var feeRateObject={
     sheetSetting: {
         header: [
             {headerName: "专业名称", headerWidth: 200, dataCode: "name", dataType: "String"},
-            {headerName: "值%", headerWidth: 150, dataCode: "rate", dataType: "Number",hAlign: "right",tofix:feeRate_consts.decimal},
+            {headerName: "值%", headerWidth: 150, dataCode: "rate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},
             {headerName: "备注", dataCode: "memo", dataType: "String"}
         ],
         view: {
@@ -39,7 +39,6 @@ var feeRateObject={
             id: 'rate',
             caption: '值%',
             dataField: 'rate',
-            format: '0.000',
             width: 120,
             minWidth: 50,
             allowEditing: true
@@ -113,7 +112,6 @@ var feeRateObject={
             if(!$('#cascadeSet').prop('checked')||params.hasOwnProperty('viewIndex')){
                 projectObj.project.FeeRate.updateFeeRateByEdit(params,feeRateObject.activateFeeRate);
             }
-
         }
     },
     createSheet:function(){
@@ -151,10 +149,12 @@ var feeRateObject={
             for (var row = 0; row < data.length; row++) {
                 var val = data[row][setting.header[col].dataCode];
                 if(val&&setting.header[col].dataType === "Number"){
-                    if(setting.header[col].hasOwnProperty('tofix')){
-                        val =parseFloat(val).toFixed(setting.header[col].tofix);
+                    if(setting.header[col].hasOwnProperty('decimalField')){
+                        var decimal = getDecimal(setting.header[col].decimalField);
+                        val =scMathUtil.roundToString(val,decimal);
+                        sheet.setFormatter(-1, col,getFormatter(decimal), GC.Spread.Sheets.SheetArea.viewport);
                     }else {
-                        val =parseFloat(val).toFixed(2);
+                        val =scMathUtil.roundToString(val,2);
                     }
                 }
                 sheet.setValue(row, col, val, ch);
@@ -358,6 +358,8 @@ var feeRateObject={
         }
         this.activateFeeRate = projectObj.project.FeeRate.getActivateFeeRate();
         this.datas = this.activateFeeRate.rates;
+        var rateColSetting = _.find(this.columns,{"id":"rate"});
+        rateColSetting?rateColSetting.format=getFormatter(getDecimal("feeRate")):"";
         this.mainViews = new GC.Spread.Views.DataView($('#divFee')[0],
             this.dataSource, this.columns, new GC.Spread.Views.Plugins.GridLayout(this.options));
         this.mainViews["rowClick"].addHandler(subRateObject.reFreshRateViews);
@@ -648,7 +650,7 @@ var feeRateObject={
        var selected = projectObj.project.mainTree.selected;
         projectObj.project.FeeRate.submitFeeRateFromBill(rate,selected.data,function (data) {
             selected.data.feeRateID=rate.ID.toString();
-            selected.data.feeRate=parseFloat(rate.rate).toFixed(feeRate_consts.decimal);
+            selected.data.feeRate=scMathUtil.roundToString(rate.rate,getDecimal("feeRate"));
             projectObj.mainController.refreshTreeNode([selected]);
             $("#fee_rate_tree").modal('hide');
         });

+ 46 - 11
web/building_saas/main/js/views/glj_view.js

@@ -18,10 +18,6 @@ var gljOprObj = {
     selectedGLJClass:null,
     parentNodeIds:{},
     activeTab:'#linkGLJ',
-    decimalSetting:{
-        marketPrice:2,
-        customQuantity:3
-    },
     setting: {
         header: [
             {headerName: "编码", headerWidth: 100, dataCode: "code", dataType: "String", formatter: "@"},
@@ -32,6 +28,7 @@ var gljOprObj = {
             {headerName: "定额消耗量", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},    // dataType: "Number", formatter: "0.00"
             {headerName: "自定义消耗量", headerWidth: 80, dataCode: "customQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},
             {headerName: "消耗量", headerWidth: 80, dataCode: "quantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},
+            {headerName: "总消耗量", headerWidth: 80, dataCode: "totalQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},
             {headerName: "基价单价", headerWidth: 80, dataCode: "basePrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
             {headerName: "调整基价", headerWidth: 80, dataCode: "adjustPrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
             {headerName: "市场单价", headerWidth: 80, dataCode: "marketPrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
@@ -68,7 +65,7 @@ var gljOprObj = {
         header:[
             {headerName: "名称", headerWidth: 100, dataCode: "name", dataType: "String"},
             {headerName: "计算式", headerWidth: 120, dataCode: "regex", dataType: "String"},
-            {headerName: "结果(C)", headerWidth: 120, dataCode: "result", dataType: "Number",formatter:"0.0000",tofix:4},
+            {headerName: "结果(C)", headerWidth: 120, dataCode: "result", dataType: "Number",decimalField:"quantity_detail"},
             {headerName: "累加", headerWidth: 120, dataCode: "isSummation", dataType: "String",cellType:"checkBox"}
         ],
         view:{
@@ -541,6 +538,8 @@ var gljOprObj = {
      //   $('#dropdown').hide();
     },
     showRationGLJData:function (node) {
+        console.log("showRationGLJData");
+        console.log(+new Date());
         var gljList = [];
         var ration_glj = projectObj.project.ration_glj;
         node=node?node:projectObj.project.mainTree.selected;
@@ -551,12 +550,24 @@ var gljOprObj = {
         }
     },
     showRationGLJSheetData:function (init) {
-        this.sheet.getRange(0,-1,this.sheet.getRowCount(),-1).visible(true);
+        this.sheet.setRowCount(0);
+        console.log("showRationGLJSheetData---init")
+        console.log(+new Date())
+        //this.sheet.getRange(0,-1,this.sheet.getRowCount(),-1).visible(true); //这个方法导致加载缓慢
         this.sheetData=_.sortBy(this.sheetData,'type');
-        this.addMixRatioToShow();
+        console.log("addMixRatioToShow");
+        console.log(+new Date())
+        this.sumQuantity();//计算总消耗量
+        this.addMixRatioToShow();//显示组成物信息
+        console.log("start initRationTree");
+        console.log(+new Date());
         this.initRationTree(init);
-        sheetCommonObj.showData(this.sheet,this.setting,this.sheetData);
+        console.log("end initRationTree");
+        console.log(+new Date());
 
+        sheetCommonObj.showData(this.sheet,this.setting,this.sheetData);
+        console.log("end show");
+        console.log(+new Date())
     },
     initRationTree:function (init) {
         this.sheet.getRange(-1, 0, -1, 1).cellType(this.getTreeNodeCellType(this.sheetData));
@@ -569,7 +580,11 @@ var gljOprObj = {
                 }else {
                     collapsed = this.sheetData[i].collapsed==undefined?true:this.sheetData[i].collapsed;
                 }
-                this.sheet.getRange(i+1, -1, this.sheetData[i].subList.length, -1).visible(!collapsed);// this.sheet.getRange(i+1, -1, this.sheetData[i].subList.length, -1).locked(true);
+                if(collapsed==true){
+                    this.sheet.getRange(i+1, -1, this.sheetData[i].subList.length, -1).visible(false);
+                }
+                //this.sheet.getRange(i+1, -1, this.sheetData[i].subList.length, -1).visible(!collapsed);// this.sheet.getRange(i+1, -1, this.sheetData[i].subList.length, -1).locked(true);
+                //这个方法导致加载缓慢 试着在加载数据时隐藏行,看可不可行
             }
         }
     },
@@ -584,6 +599,25 @@ var gljOprObj = {
         this.sheetData=this.combineWithProjectGlj(gljList);
         this.showRationGLJSheetData(true);
     },
+    sumQuantity:function (node) {
+      if(this.sheetData.length>0){
+          node=node?node:projectObj.project.mainTree.selected;
+          let ration = node.data;
+          let quantity = ration.quantity;
+          quantity = (quantity==0||quantity==undefined||quantity==null||quantity=="")?1:quantity;
+          for(let glj of this.sheetData){
+              if(glj.isMixRatio==true){//如果是用于显示的组成物,则不用计算,跳过
+                  continue;
+              }
+              glj.totalQuantity = scMathUtil.roundToString(quantity*glj.quantity,getDecimal("glj.quantity"));
+              if(glj.hasOwnProperty('subList')){//需要计算glj下挂的组成物的总消耗量
+                  for(let subG of glj.subList){
+                      subG.totalQuantity = scMathUtil.roundToString(subG.rationItemQuantity*glj.totalQuantity,getDecimal("glj.quantity"));
+                  }
+              }
+          }
+      }
+    },
     addMixRatioToShow:function () {
         var newList=[];
         _.remove(this.sheetData,{'isMixRatio':true});
@@ -722,7 +756,8 @@ var gljOprObj = {
             if(args.editingText==null){
                 newval="";
             }else {
-                newval = number_util.checkNumberValue(args.editingText,this.decimalSetting[updateField]);
+                var decimal = updateField=='customQuantity'?getDecimal("glj.quantity"):getDecimal("glj.unitPrice");
+                newval = number_util.checkNumberValue(args.editingText,decimal);
                 if(newval==null){
                     me.sheet.getCell(args.row, args.col).value(recode[updateField]);
                     return;
@@ -1246,7 +1281,7 @@ $(function(){
 function getDecimal(fieldID,node) {
     if(node){
         return decimalObj.decimal(fieldID,node);
-    }else if(fieldID.indexOf(".")){
+    }else if(fieldID.indexOf(".")!=-1){
         var keyArray = fieldID.split(".");
         return decimalObj[keyArray[0]][keyArray[1]];
     }else {

+ 1 - 0
web/building_saas/main/js/views/project_view.js

@@ -293,6 +293,7 @@ var projectObj = {
                 node.data[fieldName] = value;
                 project.calcProgram.calculate(node);
                 project.calcProgram.saveNode(node);
+                gljOprObj.showRationGLJSheetData();
             }
             else {
                 if (node.sourceType === project.Bills.getSourceType()) {