浏览代码

费率新功能

zhangweicheng 7 年之前
父节点
当前提交
b9576d2552

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

@@ -254,7 +254,9 @@ const fixedFlag = {
     //施工机械
     //施工机械
     CONSTRUCTION_MACHINE:25,
     CONSTRUCTION_MACHINE:25,
     //暂列金额
     //暂列金额
-    PROVISIONAL:26
+    PROVISIONAL:26,
+    //安全生产费
+    SAFE_COST:27
 };
 };
 
 
 const gljKeyArray =['code','name','specs','unit','type'];
 const gljKeyArray =['code','name','specs','unit','type'];

+ 95 - 1
web/building_saas/main/js/views/fee_rate_view.js

@@ -544,6 +544,7 @@ var feeRateObject={
         }
         }
     },
     },
     updateBySelect:function (rate,selectMap,mapID) {
     updateBySelect:function (rate,selectMap,mapID) {
+        console.log(rate);
         let selected = this.mainFeeRateSheet.getSelections()[0];
         let selected = this.mainFeeRateSheet.getSelections()[0];
         projectObj.project.FeeRate.backupDatas();
         projectObj.project.FeeRate.backupDatas();
         let item = this.mainFeeRateData[selected.row];
         let item = this.mainFeeRateData[selected.row];
@@ -559,12 +560,105 @@ var feeRateObject={
                 }
                 }
             }
             }
         }
         }
-        if($('#cascadeSet').prop('checked')){
+        /*if($('#cascadeSet').prop('checked')){
             this.cascadeSetRates(item,selected.row,mapID,selectMap);
             this.cascadeSetRates(item,selected.row,mapID,selectMap);
         }else {
         }else {
             projectObj.project.FeeRate.batchUpdateFeeRate([{rateIndex:selected.row,rate:item}],feeRateObject.activateFeeRate);
             projectObj.project.FeeRate.batchUpdateFeeRate([{rateIndex:selected.row,rate:item}],feeRateObject.activateFeeRate);
+        }*/
+    },
+    setRateFromSub:function (subRate,value) {
+         let me = feeRateObject,feeRate =  projectObj.project.FeeRate;
+         let rates = feeRate.getActivateFeeRate().rates;
+         let updateDatas = [];
+         //对于有子节点的记录和可输入的记录,只支持一个参数(因为还要内插法取费率值),如果要支持两个以上的参数,valueMap要再改下~~~~
+         for(let r of rates){
+             if(gljUtil.isDef(r.subFeeRate)){
+                 let valueArray=[];//用来存参数的值
+                 let temP =null;//这个用来存储需要内插法记算的时候
+                 let match = false;
+                 let temR = _.cloneDeep(r);//临时存储
+                 for(let p of temR.subFeeRate.recodes){
+                     if(p.name == subRate.name){
+                         temP = p;
+                         match = true;
+                     }
+                     let setValue = false;
+                     for(let o of p.optionList){
+                         if(match == true) {//匹配上了,改对应的selected 为 true
+                             if(o.name == value){
+                                 o.selected = true;
+                                 valueArray.push(value);
+                                 setValue = true;
+                             }else {
+                                 o.selected = false;
+                             }
+                         }else {//没有匹配上的,直接取值就可以
+                             if(o.selected == true)  valueArray.push(o.name);
+                         }
+                     }
+                     if(match==true && setValue ==false) valueArray.push(value);//如果匹配上了,但是setValue为false,说明没有满足和选项,要用内插法或超出倍数算值
+                 }
+                 if(match == true){//说明要改rate的值,先从valueMap中去查
+                     let doc = {"subFeeRate":temR.subFeeRate};
+                     let valueKey = valueArray.join('-');
+                     let valueMaps = r.subFeeRate.valueMaps;
+                     let rate = _.find(valueMaps,{"ID":valueKey});
+                     if(isDef(rate)) {//找到了,直接改费率值
+                         doc.rate = rate.value;
+                     }else {//没找到,用内插法或步长算值
+                         let ltRate = null;//
+                         let gtRate = null;
+                         let lastRate = null;
+                         temP.value = scMathUtil.roundForObj(value,getDecimal("feeRate")) ;
+                         for(let v of valueMaps){
+                            if(parseFloat(v.value)<parseFloat(value)){
+                                ltRate = v;
+                            }else if(parseFloat(v.value)>parseFloat(value)){
+                                gtRate = v;
+                            }
+                            lastRate = v;
+                         }
+                         if(gljUtil.isDef(ltRate)&&gljUtil.isDef(gtRate)){//已经找到前后的值了
+                             let step = scMathUtil.roundForObj(gtRate.value - ltRate.value,getDecimal("process"))
+                             let total =  parseInt(gtRate.ID) - parseInt(ltRate.ID)
+                             doc.rate =getRateByStep(ltRate.value,total,parseFloat(value) - parseInt(ltRate.ID),step);
+                         }else if(gljUtil.isDef(ltRate)&&gtRate == null){//说明是超出了选项的最大值
+                             let share = parseFloat(value) - parseInt(ltRate.ID);//超出了多少
+                             doc.rate = getRateByStep(ltRate.value,temP.step,share,temP.amount)
+                         }
+                     }
+                     if(isDef(doc.rate)){
+                         updateDatas.push({rateID:r.ID,doc:doc});
+                         me.sumParentRate(r.ID,doc.rate,updateDatas);
+                     }
+                 }
+             }
+         }
+         console.log(updateDatas);
+        if(updateDatas.length > 0){
+            $.bootstrapLoading.start();
+            feeRate.updateFeeRatesByIDs(updateDatas,function () {
+                let feerateInfo = [];
+                for(let u of updateDatas){
+                    feerateInfo.push({rateID:u.rateID,value:u.doc["rate"]});
+                }
+                subRateObject.showSubRateData();
+                me.showMainFeeRateData();
+                feerateInfo.length > 0 ?feeRate.onFeeRatesChange(feerateInfo):'';
+                $.bootstrapLoading.end();
+            })
         }
         }
+        function getRateByStep(ltValue,total,share,step) {
+            let p = scMathUtil.roundForObj(share/total,getDecimal("process"));
+            let a = scMathUtil.roundForObj(step * p,getDecimal("process")) ;
+            return scMathUtil.roundForObj(ltValue + a,getDecimal("feeRate"))
+        }
+
+
+
     },
     },
+
+
     cascadeSetRates:function(selectedItem,sourceRow,mapID,selectMap){
     cascadeSetRates:function(selectedItem,sourceRow,mapID,selectMap){
         let items=[];
         let items=[];
         items.push({rateIndex:sourceRow,rate:selectedItem});
         items.push({rateIndex:sourceRow,rate:selectedItem});

+ 2 - 2
web/building_saas/main/js/views/quantity_edit_view.js

@@ -102,10 +102,10 @@ let quantityEditObj = {
 
 
         QuantityEditCellType.prototype.processMouseDown = function (hitinfo) {
         QuantityEditCellType.prototype.processMouseDown = function (hitinfo) {
             let me=quantityEditObj;
             let me=quantityEditObj;
-            if(isDoubleClick(this) == true && !projectReadOnly){//如果是双击,直接显示
+           /* if(isDoubleClick(this) == true && !projectReadOnly){//如果是双击,直接显示 2019-1-17 需求更改,取消双击弹出
                 me.showSelectModal(hitinfo);
                 me.showSelectModal(hitinfo);
                 return ;
                 return ;
-            }
+            }*/
            if(me.editingCell && hitinfo.row==me.editingCell.row){
            if(me.editingCell && hitinfo.row==me.editingCell.row){
                if(me.editingCell.isBtn == false){//是第一次点击,刷新显示按钮
                if(me.editingCell.isBtn == false){//是第一次点击,刷新显示按钮
                    me.editingCell.isBtn = true;
                    me.editingCell.isBtn = true;

+ 31 - 52
web/building_saas/main/js/views/sub_fee_rate_views.js

@@ -21,36 +21,14 @@ var subRateObject={
             forOption:function (item,val) {
             forOption:function (item,val) {
                 if(item.isSub == true) return item.value;//可编辑子节点
                 if(item.isSub == true) return item.value;//可编辑子节点
                 let o = _.find(item.optionList,{'selected':true});
                 let o = _.find(item.optionList,{'selected':true});
-                return o?o.name:'';
+                if(gljUtil.isDef(o)){
+                    return o.name;
+                }else {
+                    if(item.editable==true) return item.value;
+                }
             }
             }
         }
         }
     },
     },
-    columns: [
-        {
-            id: 'name',
-            caption: '参数名称',
-            dataField: 'name',
-            width: 250,
-            allowEditing: false
-        },
-        {
-            id: 'typeName',
-            caption: '参数值',
-            dataField: 'typeName',
-            width: 200,
-            minWidth: 50,
-            allowEditing: true,
-            presenter:'<div><select class="form-control form-control-sm" id="{{=it.ID}}" onchange="subRateObject.subRateChange(this)" style="width: 100%">  </select></div>'
-        },
-        {
-            id: 'ID',
-            caption: 'ID',
-            dataField: 'ID',
-            width: 80,
-            visible: false,
-            allowEditing: false
-        }
-    ],
     options :{
     options :{
         allowSorting: false,
         allowSorting: false,
         showRowHeader: true,
         showRowHeader: true,
@@ -61,27 +39,6 @@ var subRateObject={
         editUnit: 'cell',
         editUnit: 'cell',
         selectionUnit:(this.canEdit == true) ? "cell" : "row"
         selectionUnit:(this.canEdit == true) ? "cell" : "row"
     },
     },
-    createSpreadView:function () {
-        if (this.views) {
-            this.views.destroy();
-            this.views = null;
-        }
-        this.views = new GC.Spread.Views.DataView($('#subRate')[0],
-            this.datas, this.columns, new GC.Spread.Views.Plugins.GridLayout(this.options));
-
-        this.views["rowDbClick"].addHandler(function () {
-            console.log('hh')
-        });
-        this.views.invalidate();
-        document.querySelector('#subRate').focus();
-        this.addComboboxOption(this.datas);
-
-    },
-    reFreshRateViews:function(sender,args) {
-        subRateObject.datas = projectObj.project.FeeRate.getSubViewData(args.item);
-        subRateObject.valueMap=projectObj.project.FeeRate.getValueMap(args.item);
-        subRateObject.createSpreadView();
-    },
     initSubRateSpread:function (item) {
     initSubRateSpread:function (item) {
         if(this.subRateSpread == null){
         if(this.subRateSpread == null){
             this.subRateSpread = SheetDataHelper.createNewSpread($("#subRate")[0]);
             this.subRateSpread = SheetDataHelper.createNewSpread($("#subRate")[0]);
@@ -93,7 +50,6 @@ var subRateObject={
             //this.subRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onSheetValueChange);
             //this.subRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onSheetValueChange);
             this.subRateSheet.name('subRateSheet');
             this.subRateSheet.name('subRateSheet');
         }
         }
-        subRateObject.datas = projectObj.project.FeeRate.getAllSubRates();
         //subRateObject.valueMap=projectObj.project.FeeRate.getValueMap(item);
         //subRateObject.valueMap=projectObj.project.FeeRate.getValueMap(item);
         subRateObject.showSubRateData();
         subRateObject.showSubRateData();
         disableRightMenu("subRate",this.subRateSpread);
         disableRightMenu("subRate",this.subRateSpread);
@@ -105,6 +61,8 @@ var subRateObject={
         }
         }
     },
     },
     showSubRateData:function () {
     showSubRateData:function () {
+        let preSelections = this.subRateSheet.getSelections();
+        this.datas = projectObj.project.FeeRate.getAllSubRates();
         this.subRateSheet.setRowCount(0);
         this.subRateSheet.setRowCount(0);
         sheetCommonObj.showData(this.subRateSheet, this.subRateSetting, this.datas);
         sheetCommonObj.showData(this.subRateSheet, this.subRateSetting, this.datas);
         this.subRateSheet.setRowCount(this.datas.length);
         this.subRateSheet.setRowCount(this.datas.length);
@@ -118,6 +76,9 @@ var subRateObject={
         }
         }
         this.subRateSheet.resumeEvent();
         this.subRateSheet.resumeEvent();
         this.subRateSheet.resumePaint();
         this.subRateSheet.resumePaint();
+        if(preSelections){//定位光标到之前的位置
+            this.subRateSheet.setSelection(preSelections[0].row,preSelections[0].col,preSelections[0].rowCount,preSelections[0].colCount);
+        }
     },
     },
     onSubRateSelectChanged:function (e,info) {
     onSubRateSelectChanged:function (e,info) {
         info.sheet.repaint();
         info.sheet.repaint();
@@ -176,9 +137,27 @@ var subRateObject={
         }
         }
     },
     },
     onSubRateValueChange:function (e,info) {
     onSubRateValueChange:function (e,info) {
-        console.info(info);
         let me = subRateObject, selectValueList=[],selectMap={};
         let me = subRateObject, selectValueList=[],selectMap={};
-        if(me.datas&&me.datas.length>0){
+        let value = info.newValue;
+        let subRate = me.datas[info.row];
+        if(subRate.isSub == true){//是树节点的子节点,计算父节点的值
+
+        }
+        if(subRate.editable == true || subRate.isSub == true){//是可编辑的,要检查数据类型
+            let checkResult = scMathUtil.isNumOrFormula(value);
+            if(checkResult!=null && !isNaN(checkResult)){
+                value = scMathUtil.roundForObj(checkResult,getDecimal("feeRate"));
+            }else {
+                alert('当前输入的数据类型不正确,请重新输入。');
+                me.showSubRateData();
+                return;
+            }
+        }
+
+        feeRateObject.setRateFromSub(subRate,value)
+
+
+      /*  if(me.datas&&me.datas.length>0){
             _.forEach(me.datas,function (d,key) {
             _.forEach(me.datas,function (d,key) {
                 if(info.row == key){
                 if(info.row == key){
                     selectMap[key]=info.newValue;
                     selectMap[key]=info.newValue;
@@ -191,7 +170,7 @@ var subRateObject={
             let mapID =selectValueList.join('-');
             let mapID =selectValueList.join('-');
             let rate = me.valueMap[mapID];
             let rate = me.valueMap[mapID];
             feeRateObject.updateBySelect(rate,selectMap,mapID);
             feeRateObject.updateBySelect(rate,selectMap,mapID);
-        }
+        }*/
     },
     },
 
 
     destorySpreadView:function () {
     destorySpreadView:function () {

+ 6 - 2
web/building_saas/main/js/views/zmhs_view.js

@@ -11,7 +11,7 @@ let zmhs_obj = {
         header: [
         header: [
             {headerName: "调整", headerWidth: 35, dataCode: "isAdjust", dataType: "String", cellType: "checkBox"},
             {headerName: "调整", headerWidth: 35, dataCode: "isAdjust", dataType: "String", cellType: "checkBox"},
             {headerName: "条件", headerWidth: 180, dataCode: "name", dataType: "String", cellType: "button",getText:'forName'},
             {headerName: "条件", headerWidth: 180, dataCode: "name", dataType: "String", cellType: "button",getText:'forName'},
-            {headerName: "内容", headerWidth: 70, dataCode: "content", dataType: "String", hAlign: "left",getText:'forContent'}
+            {headerName: "内容", headerWidth: 70, dataCode: "content", dataType: "String", hAlign: "left",getText:'forContent',cellType:'tipsCell'}
         ],
         ],
         view: {
         view: {
             lockColumns:[0,1,2],
             lockColumns:[0,1,2],
@@ -36,7 +36,7 @@ let zmhs_obj = {
         },
         },
         emptyRowHeader: true,
         emptyRowHeader: true,
         autoFit:true,
         autoFit:true,
-        fitRow:['name','content']
+        fitRow:['name']
     },
     },
     cusSpread:null,
     cusSpread:null,
     cusSheet:null,
     cusSheet:null,
@@ -112,6 +112,7 @@ let zmhs_obj = {
         }
         }
     },
     },
     showCoeData:function (node) {
     showCoeData:function (node) {
+        let preSelections = this.coeSheet.getSelections();
         let selected = node?node:projectObj.project.mainTree.selected;
         let selected = node?node:projectObj.project.mainTree.selected;
         let ration_coe = projectObj.project.ration_coe;
         let ration_coe = projectObj.project.ration_coe;
         let coeList = [];
         let coeList = [];
@@ -141,6 +142,9 @@ let zmhs_obj = {
         if(projectReadOnly){
         if(projectReadOnly){
             disableSpread(zmhs_obj.coeSpread);
             disableSpread(zmhs_obj.coeSpread);
         }
         }
+        if(preSelections){//定位光标到之前的位置
+            this.coeSheet.setSelection(preSelections[0].row,preSelections[0].col,preSelections[0].rowCount,preSelections[0].colCount);
+        }
     },
     },
     showCusData:function (node) {
     showCusData:function (node) {
         let selected = node?node:projectObj.project.mainTree.selected;
         let selected = node?node:projectObj.project.mainTree.selected;