Переглянути джерело

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/ConstructionCost

TonyKang 5 роки тому
батько
коміт
a7e1d8f3e9

+ 1 - 2
modules/main/facade/ration_facade.js

@@ -49,7 +49,6 @@ let chongqingOverWrite = require("../../../web/over_write/js/chongqing_2018.js")
 let _= require('lodash');
 const projectDao = require('../../pm/models/project_model').project;
 let projectModel = mongoose.model('projects');
-const fs = require('fs');
 
 async function addNewRation(data,compilation) {
     let query = data.itemQuery;
@@ -471,7 +470,7 @@ async function addRationGLJ(std,newRation,compilation) {
               newGLJ.from = 'std';
           }
           //多单价情况处理
-          if(ext && ext.priceField && std_glj && std_glj.priceProperty){
+          if(ext && ext.priceField && std_glj && std_glj.priceProperty && std_glj.priceProperty[ext.priceField] !== null && std_glj.priceProperty[ext.priceField] !== undefined){
               std_glj.basePrice =  std_glj.priceProperty[ext.priceField];
           }
           if(std_glj){

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

@@ -857,7 +857,7 @@ async function insertGLJAsRation(data,compilation) {
         }
         await ration.update(query, {$inc: {serialNo: gljList.length}}, {multi: true});
     }
-    let [unitFileId,ext] = await prepareExtData(data.doc.projectID,compilation);
+    let [unitFileId,ext] = await prepareExtData(data.projectID,compilation);
     for (let glj of gljList) {
         let p_glj = getGLJSearchInfo(glj);
         let projectGljModel = new GLJListModel();
@@ -905,7 +905,7 @@ async function getGLJDataByCodes(data,compilation) {
          let ext = projectDao.getExtendData(property,compilation);//多单价处理
          for(let s of stdList){
              let tem = JSON.parse(JSON.stringify(s));
-             if(ext && ext.priceField && tem && tem.priceProperty){
+             if(ext && ext.priceField && tem && tem.priceProperty && tem.priceProperty[ext.priceField] !== null && tem.priceProperty[ext.priceField] !== undefined){
                  tem.basePrice =  tem.priceProperty[ext.priceField];
              }
              gljDatas.push(tem);

+ 6 - 4
modules/users/facade/online_facade.js

@@ -12,7 +12,7 @@ let logs_model = mongoose.model("online_logs");
 
 async function getOnlineInfo(filter) {
     let datas = [];
-    let logs = await logs_model.find(filter);
+    let logs = await logs_model.find(filter, null, { sort: {_id: -1}});
     let less = 0;
     for(let l of logs){
         let d = getTimeString(l.online_times);
@@ -52,11 +52,13 @@ async function setOnlineTimes(userList,condition){
 
 
 function getTimeString(times) {
-    let s = "",perHour = 1000 * 60 * 60,perMin = 1000 * 60;
-    let hour = parseInt(times/perHour);
+    let s = "",perHour = 1000 * 60 * 60,perMin = 1000 * 60,perDay = 24*perHour;
+    let day = parseInt(times/perDay);
+    let hour = parseInt(parseInt(times % perDay) / perHour);
     let min = parseInt((times % perHour)/perMin);
     let less =  (times % perHour)%perMin;//不够一分钟的时间
+    if(day > 0) s = s+`${day}天`;
     if(hour > 0) s = s+`${hour}小时`;
     if(min > 0)  s= s+`${min}分钟`;
     return {s:s,less:less}
-}
+}

+ 5 - 0
public/common_util.js

@@ -38,6 +38,10 @@ function deleteEmptyObject(arr) {
     function isNumber(val) {
         return !isEmptyVal(val) && !isNaN(val);
     }
+    // 是否是有值得对象(至少要有一个可枚举属性)
+    function isNotEmptyObject(obj) {
+        return Object.prototype.toString.call(obj) === '[object Object]' && Object.keys(obj).length > 0;
+    }
     // 是否近似相等(null = undefined = '', 1 = '1'...)
     function similarEqual(a, b) {
         // null == '' 为false,所以不能用非严等
@@ -92,5 +96,6 @@ function deleteEmptyObject(arr) {
         similarEqual,
         getRequired,
         getSortedTreeData,
+        isNotEmptyObject
     };
 });

+ 6 - 4
public/web/gljUtil.js

@@ -87,14 +87,16 @@ let gljUtil = {
             }
         }
         //2019-11-07 定额类型工料机已经屏蔽,如果打开,记得加上调价后的消耗量
-        /*for(let ra of rations){//计算定额类型工料机的消耗量
+        for(let ra of rations){//计算定额类型工料机的消耗量
             if(ra.type == this.rationType.gljRation&&ra.projectGLJID===pglj.id){
                 let r_quantity = scMathUtil.roundForObj(ra.quantity,q_decimal);
                 r_quantity = r_quantity?r_quantity:0;
-                if(isTender == true){
-                    r_quantity = this.getRationTenderQuantity(ra,q_decimal,scMathUtil);
+                let tender_r_quantity = r_quantity;
+                if(!pglj.is_adjust_price){
+                  tender_r_quantity = this.getRationTenderQuantity(ra,q_decimal,scMathUtil);
                 }
                 quantity_sum = scMathUtil.roundForObj(quantity_sum+r_quantity,q_decimal);
+                tender_qantity_sum = scMathUtil.roundForObj(tender_qantity_sum+tender_r_quantity,q_decimal);
                 if(_.includes(billIDs,ra.billsItemID)){//计算分部分项
                     sum = scMathUtil.roundForObj(sum+r_quantity,q_decimal);
                 }
@@ -102,7 +104,7 @@ let gljUtil = {
                     tech_sum = scMathUtil.roundForObj(tech_sum+r_quantity,q_decimal);
                 }
             }
-        }*/
+        } 
         result.subdivisionQuantity = sum;
         result.techQuantity = tech_sum;
         result.quantity = quantity_sum;

+ 1 - 1
public/web/sheet/sheet_common.js

@@ -276,7 +276,7 @@ var sheetCommonObj = {
         //sheet.addRows(row, 1);
         sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
         if(sheet.getRowCount()<data.length){
-            data.length<30? sheet.setRowCount(30):sheet.setRowCount(data.length);
+          data.length<30? sheet.setRowCount(30):sheet.setRowCount(data.length);
         }else if(sheet.getRowCount()==0){
             sheet.setRowCount(30);
         }

+ 1 - 1
web/building_saas/main/js/models/fee_rate.js

@@ -149,7 +149,7 @@ var FeeRate = {
             CommonAjax.post('/feeRates/updateRates', data, function (result) {
                 _.forEach(items,function (t) {
                     feeRateObject.mainFeeRateSheet.setValue(t.rateIndex, 1, t.rate.rate);
-                    const foreColor = commonUtil.isDef(t.rate.originalRate) && t.rate.originalRate !== +t.rate.rate ? 'red' : 'black';
+                    const foreColor = feeRateObject.rateShouldMark(t.rate, t.rate.rate) ? 'red' : 'black';
                     feeRateObject.mainFeeRateSheet.getCell(t.rateIndex, 1).foreColor(foreColor);
                  });
                  me.onFeeRateFileChange();

+ 29 - 3
web/building_saas/main/js/views/fee_rate_view.js

@@ -178,7 +178,7 @@ var feeRateObject={
                     sheet.getCell(row, 0).cellType(treeType);
                     visibleMap[data[row].ID] = treeType.collapsed;
                     feeRateObject.setRowVisible(data,row,visibleMap,sheet);
-                } else if (col === 1 && commonUtil.isDef(data[row].originalRate) && data[row].originalRate !== +val) {
+                } else if (col === 1 && this.rateShouldMark(data[row], val)) {
                     sheet.getCell(row, col).foreColor('red');
                 }
             }
@@ -186,6 +186,32 @@ var feeRateObject={
         sheet.resumeEvent();
         sheet.resumePaint();
     },
+    rateShouldMark: function (rateItem, val) {
+        if (!rateItem) {
+            return false;
+        }
+        if (rateItem.rate === null) {
+            return false;
+        }
+        if (rateItem.sum) {
+            return false;
+        }
+        if (rateItem.subFeeRate && rateItem.subFeeRate.recodes && rateItem.subFeeRate.recodes.length) {
+            const selectedSubRateValues = [];
+            rateItem.subFeeRate.recodes.forEach(record => {
+                record.optionList.forEach(opt => {
+                    if (opt.selected) {
+                        selectedSubRateValues.push(opt.value);
+                    }
+                });
+            });
+            const selectedID = selectedSubRateValues.join('-');
+            const valInMap = rateItem.subFeeRate.valueMaps.find(item => item.ID === selectedID);
+            return !!(valInMap && valInMap.value !== +val);
+        } else {
+            return commonUtil.isDef(rateItem.originalRate) && rateItem.originalRate !== +val;
+        }
+    },
     setRowVisible:function (data,row,visibleMap,sheet) {
         sheet.getRange(row , -1, 1, -1).visible(getVisible(data[row].ParentID));//显示或隐藏
         function getVisible(ParentID) {
@@ -632,7 +658,7 @@ var feeRateObject={
             }
             temData[fieldID] = value ;
             updateDatas.push({rateID:recode.ID,doc:temData});
-            refreshA.push({col:c.col,row:c.row,fieldID:fieldID,value:value,originalRate:recode.originalRate,rateID:recode.ID});
+            refreshA.push({col:c.col,row:c.row,fieldID:fieldID,value:value,rateItem:recode,rateID:recode.ID});
         }
         if(updateDatas.length > 0){
             $.bootstrapLoading.start();
@@ -641,7 +667,7 @@ var feeRateObject={
                 for(let r of refreshA){
                     me.mainFeeRateSheet.setValue(r.row, r.col, r.value);
                     if(r.fieldID == 'rate'){
-                        const foreColor = commonUtil.isDef(r.originalRate) && r.originalRate !== +r.value ? 'red' : 'black';
+                        const foreColor = feeRateObject.rateShouldMark(r.rateItem, r.value) ? 'red' : 'black';
                         me.mainFeeRateSheet.getCell(r.row, r.col).foreColor(foreColor);
                         feerateInfo.push({rateID:r.rateID,value:r.value});
                     }

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

@@ -1093,7 +1093,7 @@ var gljOprObj = {
     updateRationTypeGLJ: function (value, node, fieldName,editingText) {
         let newval;
         let updatePrice = false;
-        if (fieldName == "marketUnitFee") {
+        if (fieldName == "marketUnitFee"|| fieldName == "feesIndex.common.unitFee") {
             updatePrice = true;
             if (value == null) {
                 newval = 0;

+ 14 - 3
web/building_saas/main/js/views/installation_fee_view.js

@@ -368,21 +368,30 @@ let installationFeeObj={
         }else {
             this.feeDetailData = []
         }
+        //这里由于combobax 自动行高有问题,还没找到好的解决方法,所以用先添加一行普通列用于自动行高的计算
+        //显示完了再把添加的多余列给删除了
+        let tcol = this.feeDetailSetting.header.length;
+        let theader = {headerName: "",headerWidth: 220, dataCode: "ruleName", hAlign: "left", dataType: "String",getText:'forRule'};
+        this.feeDetailSheet.addColumns(tcol,1);
+        this.feeDetailSheet.setColumnWidth(tcol, theader.headerWidth);
+        this.feeDetailSetting.header.push(theader);
+
         sheetCommonObj.showData(this.feeDetailSheet, this.feeDetailSetting, this.feeDetailData);
-        this.feeDetailSheet.setRowCount(this.feeDetailData.length);
         if(this.feeDetailData.length>0){
             this.feeDetailSheet.suspendPaint();
             this.feeDetailSheet.suspendEvent();
-            this.feeDetailSheet.getRange(0, -1, this.feeDetailData.length, -1, GC.Spread.Sheets.SheetArea.viewport).wordWrap(true);
+            this.feeDetailSheet.getRange(0, -1, this.feeDetailData.length, -1, GC.Spread.Sheets.SheetArea.viewport).wordWrap(true); 
             let feeItem = this.feeItemData[this.feeItemSheet.getSelections()[0].row];
             for(let i =0;i<this.feeDetailData.length;i++){
-                this.feeDetailSheet.autoFitRow(i);
                 this.setComboRuleCell(i,1,this.feeDetailData[i],this.feeDetailSheet);//设置费用规则下拉选项
                 this.lockDetailSheet(i,this.feeDetailData[i],feeItem);
+                this.feeDetailSheet.autoFitRow(i);
             }
             this.feeDetailSheet.resumeEvent();
             this.feeDetailSheet.resumePaint();
         }
+        this.feeDetailSheet.deleteColumns(tcol,1);
+        _.remove(this.feeDetailSetting.header,{dataCode:"ruleName"});
     },
     showMoreFeeRule:function () {
         this.moreFeeRuleData = this.getMoreFeeRuleData();
@@ -466,12 +475,14 @@ let installationFeeObj={
         let options=[{text:"无",value:""}];
         for(let ir of detail.impactRules){
             options.push({text:ir.rule,value:ir.ID});
+            options.push(ir.rule);
         }
         options.push({text:"更多",value:'more'});
         let dynamicCombo = sheetCommonObj.getDynamicCombo();//new GC.Spread.Sheets.CellTypes.ComboBox();
         dynamicCombo.items(options);
         dynamicCombo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value);
         sheet.setCellType(row, col, dynamicCombo, GC.Spread.Sheets.SheetArea.viewport);
+        sheet.getCell(row,col).wordWrap(true);
     },
     getFeeItemData:function (datas) {
         let feeItemShowArray = [];

+ 24 - 7
web/building_saas/main/js/views/project_glj_view.js

@@ -385,10 +385,12 @@ let projectGljObject={
           me.projectGljSheet.setStyle(newSel.row, -1, style);
           let orow = oldSel.row==''||oldSel.row==-1?0:oldSel.row;
           if(me.projectGljSheetData[orow]){
-            let tstyle = gljOprObj.getSelStyle(false,{},me.projectGljSheetData[orow].bgColour);
-            me.projectGljSheet.setStyle(orow, -1, tstyle);
-            me.projectGljRowChang();
+            style = gljOprObj.getSelStyle(false,{},me.projectGljSheetData[orow].bgColour);
+          }else{
+            style.backColor = "White";
           }
+          me.projectGljSheet.setStyle(orow, -1, style);
+          me.projectGljRowChang();
         }else{
           me.projectGljSheet.repaint();
         }
@@ -596,9 +598,8 @@ let projectGljObject={
             projectGljSheetData.push(this.getSheetDataByGLJ(glj));
         }
         this.projectGljSheetData = projectGljSheetData;
-        this.projectGljSheet.setRowCount(this.projectGljSheetData.length);
         sheetCommonObj.showData(this.projectGljSheet, this.projectGljSetting,this.projectGljSheetData);
-        //this.projectGljSheet.setRowCount(this.projectGljSheetData.length);
+        this.projectGljSheet.setRowCount(this.projectGljSheetData.length);
         sel.row = oldData?_.findIndex(this.projectGljSheetData,{'id':oldData.id}):'';
         this.projectGljSheet.setSelection(sel.row==-1?0:sel.row,sel.col,sel.rowCount,sel.colCount);
     },
@@ -641,6 +642,14 @@ let projectGljObject={
             $('#adjustType').hide();
             $('#config_material').hide();
             $('#project-glj-main').show();
+            if(me.displayType == filterType.JGCL || me.displayType == filterType.SCHZ){
+              $("#projectGljResize").hide();
+              $("#projectGljBottom").hide();
+            }else{
+              $("#projectGljResize").show();
+              $("#projectGljBottom").show();
+            }
+
         }
     },
     refreshViewsData:function(){
@@ -1244,10 +1253,18 @@ function loadProjectGljSize() {
     if($('#project-glj-main').is(':visible')){
         let me = projectGljObject;
         let pojGljResizeEles = getProjectResizeEles();
-        SlideResize.loadVerticalHeight(pojGljResizeEles.eleObj.module, pojGljResizeEles.eleObj, pojGljResizeEles.limit, function () {
+        if(!$("#projectGljBottom").is(':visible')){
+          let total = $(window).height()-$('.header').height()-$('#projectGljToolsBar').height()+3;
+          $("#projectGljTop").height(total);
+          $("#project_glj_sheet").height(total);
+          me.projectGljSpread?me.projectGljSpread.refresh():'';
+        }else{
+          SlideResize.loadVerticalHeight(pojGljResizeEles.eleObj.module, pojGljResizeEles.eleObj, pojGljResizeEles.limit, function () {
             me.projectGljSpread?me.projectGljSpread.refresh():'';
             me.mixRatioSpread?me.mixRatioSpread.refresh():'';
-        });
+          });
+        }
+       
     }else if($('#material_adjust').is(':visible')){
         $('#material_adjust_sheet').height($(window).height()-$('.header').height()-$('#projectGljToolsBar').height()+3);
         if(materialAdjustObj.spread)materialAdjustObj.spread.refresh();

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

@@ -1433,7 +1433,7 @@ var projectObj = {
                         getGLJData('insert');// ProjectController.addRation(project, controller, rationType.volumePrice);
                     },
                     visible: function(key, opt){//2018-11-08  新需求,这个按钮先隐藏,有需要再放开
-                        return false;
+                        return true;
                     }
                 },
                 "spr2": '--------',