Prechádzať zdrojové kódy

Merge branch 'master' into 定额优化

zhangweicheng 5 rokov pred
rodič
commit
35a44411f7

+ 24 - 5
modules/reports/util/rpt_construct_data_util.js

@@ -144,8 +144,10 @@ class Rpt_Data_Extractor {
                             rst.push(key);
                             if (key === projectConst.RATION_GLJ && (rst.indexOf(projectConst.PROJECTGLJ) < 0)) {
                                 rst.push(projectConst.PROJECTGLJ);
+                                if (rst.indexOf(projectConst.LABOUR_COE < 0)) rst.push(projectConst.LABOUR_COE);
                             }
                             if (key === projectConst.PROJECTGLJ) {
+                                if (rst.indexOf(projectConst.LABOUR_COE < 0)) rst.push(projectConst.LABOUR_COE);
                                 if (rst.indexOf(projectConst.RATION_GLJ) < 0) rst.push(projectConst.RATION_GLJ);
                                 if (field[JV.PROP_FIELD_EXP_MAP].indexOf("'quantity'") > 0 ||
                                     field[JV.PROP_FIELD_EXP_MAP].indexOf("'subdivisionQuantity'") > 0 ||
@@ -263,6 +265,7 @@ class Rpt_Data_Extractor {
                     }
                 }
             }
+            let labourCoeDatas =  getModuleDataByKey(rawDataObj.prjData, "labour_coe");
             let rationGLJDatas = getModuleDataByKey(rawDataObj.prjData, "ration_glj");
             let rationDatas = getModuleDataByKey(rawDataObj.prjData, "ration");
             let billsDatas = getModuleDataByKey(rawDataObj.prjData, "bills");
@@ -271,11 +274,26 @@ class Rpt_Data_Extractor {
             if (projectGLJDatas && rationGLJDatas && rationDatas && billsDatas) {
                 gljUtil.calcProjectGLJQuantity(projectGLJDatas.data, rationGLJDatas.data, rationDatas.data, billsDatas.data, decimal, true);
             }
-            if (projectGLJDatas && rationGLJDatas) {
+            if (projectGLJDatas && rationGLJDatas && labourCoeDatas) {
                 //考虑调价情况
+                const newAdjPriceArr = [];
+                // console.log('1');
+                // console.log(projectGLJDatas.data.gljList);
                 for (const glj of projectGLJDatas.data.gljList) {
-                    glj.unit_price.market_price_tender = gljUtil.getMarketPrice(glj, projectGLJDatas.data, calcOptions, rawDataObj.prj.property.decimal, false, gljUtil.getTenderPriceCoe(glj, rawDataObj.prj.property));
+                    newAdjPriceArr.push(gljUtil.getGLJPrice(glj, projectGLJDatas.data, calcOptions, labourCoeDatas, rawDataObj.prj.property.decimal, false, gljUtil.getTenderPriceCoe(glj, rawDataObj.prj.property), true));
+                    // glj.unit_price.market_price_tender = gljUtil.getMarketPrice(glj, projectGLJDatas.data, calcOptions, rawDataObj.prj.property.decimal, false, gljUtil.getTenderPriceCoe(glj, rawDataObj.prj.property));
                 }
+                // console.log('2');
+                for (let gljIdx = 0; gljIdx < newAdjPriceArr.length; gljIdx++) {
+                    let newGlj = newAdjPriceArr[gljIdx];
+                    let gljItem = projectGLJDatas.data.gljList[gljIdx];
+                    gljItem.unit_price.market_price_tender = newGlj.marketPrice;
+                    gljItem.unit_price.org_basePrice =  gljItem.unit_price.base_price;
+                    gljItem.unit_price.base_price = newGlj.basePrice;
+                    // rationItem.marketUnitFee = newGlj.marketPrice;//更新树节点市场单价列的值
+                    //
+                }
+                // console.log('3');
             }
         }
         //还有汇总的...
@@ -1143,9 +1161,10 @@ function sortData(sourceData, sortCfg, prjData) {
             break;
         case "self_define":
             if (sortCfg[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]) {
-                let selfDefFunc = null;
-                eval('selfDefFunc = ' + sortCfg[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]);
-                tempRstArr.sort(selfDefFunc);
+                let selfDefFuncA = null;
+                eval('selfDefFuncA = ' + sortCfg[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]);
+                // 备注: 因为eval方法的特殊性,不要定义相同变量(这里是‘selfDefFunc’),否则会得到个null
+                tempRstArr.sort(selfDefFuncA);
             }
             replaceActDataArr(sourceData, tempRstArr);
             break;

+ 2 - 2
modules/std_billsGuidance_lib/controllers/libController.js

@@ -18,8 +18,8 @@ class BillsGuideLibController extends BaseController{
     //获取清单指引库和该库引用的清单
     async getLibWithBills(req, res){
         try{
-            let data = JSON.parse(req.body.data);
-            let rst = await billsGuidanceFacade.getLibWithBills(data.libID);
+            const { libID, isGuidanceLib } = JSON.parse(req.body.data);
+            const rst = await billsGuidanceFacade.getLibWithBills(libID, isGuidanceLib);
             callback(req, res, 0, '', rst);
         }
         catch(err){

+ 14 - 10
modules/std_billsGuidance_lib/facade/facades.js

@@ -31,17 +31,21 @@ async function getBillsGuideLibs(findData) {
 }
 
 
-async function getLibWithBills(libID){
-    let guidanceLib = await getBillsGuideLibs({ID: libID});
-    if(guidanceLib.length === 0){
-        throw '不存在此指引库!';
-    }
-    let billsLib = await stdBillsLibModel.findOne({billsLibId: guidanceLib[0].billsLibId});
-    if(!billsLib){
-        throw '引用的清单规则库不存在!';
+async function getLibWithBills(libID, isGuidanceLib){
+    let billsLibId = libID;
+    if (isGuidanceLib) {
+        const guidanceLib = await getBillsGuideLibs({ID: libID});
+        if(guidanceLib.length === 0){
+            throw '不存在此指引库!';
+        }
+        const billsLib = await stdBillsLibModel.findOne({billsLibId: guidanceLib[0].billsLibId});
+        if(!billsLib){
+            throw '引用的清单规则库不存在!';
+        }
+        billsLibId = billsLib.billsLibId;
     }
-    let bills = await stdBillsModel.find({billsLibId: billsLib.billsLibId}, '-_id').lean();
-    return {guidanceLib: guidanceLib[0], bills};
+    const bills = await stdBillsModel.find({ billsLibId }, '-_id').lean();
+    return { bills };
 }
 
 function getAttrs(field, datas){

+ 1 - 1
modules/users/models/user_model.js

@@ -454,7 +454,7 @@ class UserModel extends BaseModel {
 
         let keyword = request.query.keyword;
         if (keyword !== '' && keyword !== undefined) {
-            condition.$or = [{real_name : {$regex: keyword}},{email : {$regex: keyword}},{mobile : {$regex: keyword}},{company : {$regex: keyword}}];
+            condition.$or = [{real_name : {$regex: keyword}},{email : {$regex: keyword}},{mobile : {$regex: keyword}},{qq : {$regex: keyword}},{company : {$regex: keyword}}];
         }
 
         return condition;

+ 1 - 1
public/web/gljUtil.js

@@ -294,7 +294,7 @@ let gljUtil = {
         if(glj.is_evaluate==1){//先按是否暂估判断
             return calcOptions.calc_est;
         }
-        if(glj.type==gljType.MAIN_MATERIAL||glj.type==gljType.EQUIPMENT){//再判断是否是主材和设备
+        if(glj.type == this.gljType.MAIN_MATERIAL || glj.type == this.gljType.EQUIPMENT){//再判断是否是主材和设备
             return calcOptions.calc_main;
         }
         if(glj.unit_price.is_add==1){//再判断是否新增

+ 9 - 6
public/web/tree_sheet/tree_sheet_helper.js

@@ -222,7 +222,7 @@ var TREE_SHEET_HELPER = {
         }
        sheet.invalidateLayout();
     },
-    showTreeData: function (setting, sheet, tree) {
+    getTipCellType: function (setting) {
         let TipCellType = function () {};
         TipCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
         TipCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
@@ -245,7 +245,7 @@ var TREE_SHEET_HELPER = {
                 zoom = hitinfo.sheet.zoom();
             let textLength = this.getAutoFitWidth(value, text, acStyle, zoom, {sheet: hitinfo.sheet, row: hitinfo.row, col: hitinfo.col, sheetArea: GC.Spread.Sheets.SheetArea.viewport});
             let cellWidth = hitinfo.sheet.getCell(-1, hitinfo.col).width();
-            let dataField = setting.cols[hitinfo.col].data.field;
+            let dataField = setting.cols && setting.cols[hitinfo.col].data.field || setting.header[hitinfo.col].dataCode;
 
             if((tag==undefined||tag=='')&&hitinfo.sheet.getCell(hitinfo.row,hitinfo.col).wordWrap()==true){//显示其它列的标记为空并且设置了自动换行
                 return;
@@ -279,7 +279,9 @@ var TREE_SHEET_HELPER = {
         TipCellType.prototype.processMouseLeave = function (hitinfo) {
             TREE_SHEET_HELPER.hideTipsDiv();
         }
-
+        return new TipCellType();
+    },
+    showTreeData: function (setting, sheet, tree) {
         TREE_SHEET_HELPER.protectdSheet(sheet);
         TREE_SHEET_HELPER.massOperationSheet(sheet, function () {
             sheet.rowOutlines.direction(GC.Spread.Sheets.Outlines.OutlineDirection.backward);
@@ -292,7 +294,7 @@ var TREE_SHEET_HELPER = {
             setting.cols.forEach(function (colSetting, iCol) {
                 sheet.setStyle(-1, iCol, TREE_SHEET_HELPER.getSheetCellStyle(colSetting));
                 if (colSetting.showHint) {
-                    sheet.getRange(-1, iCol, -1, 1).cellType(new TipCellType());
+                    sheet.getRange(-1, iCol, -1, 1).cellType(TREE_SHEET_HELPER.getTipCellType(setting));
                 }
                 if(colSetting.formatter){
                     sheet.setFormatter(-1, iCol, colSetting.formatter, GC.Spread.Sheets.SheetArea.viewport);
@@ -608,7 +610,7 @@ var TREE_SHEET_HELPER = {
 
     },
     showTipsDiv:function (text,setting,hitinfo) {
-        if (setting.pos && text && text !== '') {
+        if (text && text !== '') {
             if(text) text = replaceAll(/[\n]/,'<br>',text);
             if(!this._fixedTipElement){
                 let div = $('#fixedTip')[0];
@@ -649,7 +651,7 @@ var TREE_SHEET_HELPER = {
                         $(this._toolTipElement).width(divWidth);
                     }
                     let top = setting.pos.y  + hitinfo.y - divHeight / 2 < 0 ? 0 : setting.pos.y  + hitinfo.y - divHeight / 2;
-                    $(this._toolTipElement).css("top", top).css("left", setting.pos.x - divWidth);
+                    $(this._toolTipElement).css("top", top).css("left", setting.pos.x - divWidth).css;
                 } else {
                     //计算显示的初始位置
                /*   显示在单元格上方,三角形指向下的版本
@@ -661,6 +663,7 @@ var TREE_SHEET_HELPER = {
                     let left =  setting.pos.x + hitinfo.cellRect.x;
                     $(this._toolTipElement).css("top", top).css("left", left).css("max-width","500px");
                 }
+                $(this._toolTipElement).css('z-index', 9999);
                 $(this._toolTipElement).show("fast");
                 TREE_SHEET_HELPER.tipDiv = 'show';//做个标记
             }

+ 2 - 2
web/building_saas/main/html/main.html

@@ -1402,7 +1402,7 @@
                         <span aria-hidden="true">&times;</span>
                     </button>
                 </div>
-                <div class="modal-body">
+                <div class="modal-body pb-0">
                     <div class="tab-content">
                         <div class="tab-pane active" id="m-js" role="tabpanel">
                             <div class="form-group" id="expArea">
@@ -1450,7 +1450,7 @@
                                         </li>
                                     </ul>
                                 </div>
-                                <div class=" modal-auto-height col-9" style="overflow: hidden; padding: 0; margin: 0;" id="billsBaseSpread">
+                                <div class=" modal-auto-height col-9" style="overflow: hidden; padding: 0; margin: 0; height: 360px;" id="billsBaseSpread">
                                 </div>
                             </div>
                         </div>

+ 0 - 1
web/building_saas/main/js/models/calc_base.js

@@ -771,7 +771,6 @@ let baseFigureTemplate = {
         return rst;
     },
     'JGZCF': function (tender) {//甲供主材费
-        debugger;
         let rst = 0;
         let projGljs = calcBase.project.projectGLJ.datas.gljList;
         for(let glj of projGljs){

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

@@ -197,7 +197,7 @@ const OVER_HEIGHT = (() => {
     // 是否是超高子目
     function isOverHeight(node) {
         return node
-            && node.sourceType === projectObj.project.Ration.getSourceType()
+            && node.sourceType === ModuleNames.ration
             && node.data.type === rationType.overHeight;
     }
     // 获取超高降效列号

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

@@ -58,7 +58,7 @@ let calcBaseView = {
                 allowResizeColumns: true
             };
             sheet.setColumnCount(headers.length);
-            sheet.setRowHeight(0, 40, GC.Spread.Sheets.SheetArea.colHeader);
+            sheet.setRowHeight(0, 20, GC.Spread.Sheets.SheetArea.colHeader);
             sheet.setColumnWidth(0, 20, GC.Spread.Sheets.SheetArea.rowHeader);
             for(let i = 0, len = headers.length; i < len; i++){
                 sheet.setValue(0, i, headers[i].name, GC.Spread.Sheets.SheetArea.colHeader);

+ 5 - 2
web/building_saas/main/js/views/fee_rate_view.js

@@ -12,7 +12,7 @@ var feeRateObject={
         header: [
             {headerName: "专业名称", headerWidth: 250, dataCode: "name", dataType: "String"},
             {headerName: "值%", headerWidth: 80, dataCode: "rate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},
-            {headerName: "备注", headerWidth: 150, dataCode: "memo", dataType: "String"}
+            {headerName: "备注", headerWidth: 150, dataCode: "memo", dataType: "String", showHint: true}
         ],
         view: {
             lockColumns: [0]
@@ -33,7 +33,7 @@ var feeRateObject={
         header: [
             {headerName: "专业名称", headerWidth: 200, dataCode: "name", dataType: "String"},
             {headerName: "值%", headerWidth: 120, dataCode: "rate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},
-            {headerName: "备注", dataCode: "memo", dataType: "String"}
+            {headerName: "备注", dataCode: "memo", dataType: "String", showHint: true}
         ],
         view: {
             comboBox: [],
@@ -158,6 +158,9 @@ var feeRateObject={
             if (setting.header[col].formatter) {
                 sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport);
             }
+            if (setting.header[col].showHint) {
+                sheet.getRange(-1, col, -1, 1).cellType(TREE_SHEET_HELPER.getTipCellType(setting));
+            }
             for (let row = 0; row < data.length; row++) {
                 let val = data[row][setting.header[col].dataCode];
                 if(val&&setting.header[col].dataType === "Number"){

+ 5 - 0
web/building_saas/main/js/views/item_increase_fee_view.js

@@ -167,6 +167,11 @@ let itemIncreaseFeeObj = {
         }
         return datas;
     },
+    isItemIncrease: function (node) {
+        return node
+        && node.sourceType === ModuleNames.ration
+        && node.data.type === rationType.itemIncrease;
+    },
     onItemValueChange:function (sender,args) {
         let me = itemIncreaseFeeObj;
         let dataCode = me.itemSetting.header[args.col].dataCode;

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

@@ -421,8 +421,8 @@ let MainTreeCol = {
         mainNodeCheckBox:function (node,setting,field) {//分部分项、措施项目下的清单、定额
             let Bills = projectObj.project.Bills;
             if((Bills.isFBFX(node)||Bills.isMeasure(node)) && node.sourceType != ModuleNames.ration_glj){
-                //有基数计算时面积增加费不可勾选
-                if(field == 'areaIncreaseFee' && node.data.calcBase && node.data.calcBase!="") return;
+                //有基数计算时或超高子目,面积增加费不可勾选
+                if(field == 'areaIncreaseFee' && node.data.calcBase && node.data.calcBase!="" || itemIncreaseFeeObj.isItemIncrease(node)) return;
                 return sheetCommonObj.getCheckBox(false);
             }
 

+ 3 - 8
web/building_saas/main/js/views/project_info.js

@@ -53,14 +53,9 @@ var projectInfoObj = {
     },
     showProjectInfo: function (data) {
         if (data) {
-            if (!data.engineeringInfo.billsGuidance_lib || data.engineeringInfo.billsGuidance_lib.length === 0) {
-                $('#stdBillsGuidanceTab').addClass('disabled');
-            } else {
-                // 清单子界面的模块:清单指引、清单精灵
-                for (let billsGuidanceLib of data.engineeringInfo.billsGuidance_lib) {
-                    BillsSub.switchModule(billsGuidanceLib.type);
-                }
-
+            // 清单子界面的模块:清单指引、清单精灵
+            for (let billsGuidanceLib of data.engineeringInfo.billsGuidance_lib) {
+                BillsSub.switchModule(billsGuidanceLib.type);
             }
             //init decimal
             setDecimal(decimalObj, data.property.decimal);

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

@@ -3464,8 +3464,8 @@ function changeCalcBaseFeeRate(toggle) {
         $('#calcBaseFeeRate').find('.modal-body').find('button:first').hide();
         $('#calcBaseFeeRate').find('.modal-body').find('ul:first').show();
         $('#calcBaseExp').remove();
-        let $input = $('<input>').attr('id', 'calcBaseExp').addClass('form-control');
-        $('#expArea').prepend($input);
+        let $textarea = $('<textarea>').attr('id', 'calcBaseExp').prop('rows', 2).addClass('form-control').css('resize', 'none');
+        $('#expArea').prepend($textarea);
     }
     else if(toggle === 'feeRate'){
         $('#mixedHeader').hide();
@@ -3480,7 +3480,7 @@ function changeCalcBaseFeeRate(toggle) {
         $('#calcBaseFeeRate').find('.modal-body').find('button:first').show();
         $('#calcBaseFeeRate').find('.modal-body').find('ul:first').show();
         $('#calcBaseExp').remove();
-        let $textarea = $('<textarea>').attr('id', 'calcBaseExp').prop('rows', 3).addClass('form-control').css('resize', 'none');
+        let $textarea = $('<textarea>').attr('id', 'calcBaseExp').prop('rows', 2).addClass('form-control').css('resize', 'none');
         $('#expArea').prepend($textarea);
     }
 }

+ 3 - 5
web/building_saas/main/js/views/std_billsGuidance_lib.js

@@ -12,7 +12,6 @@
 let doAfterLoadGuidance = null;
 
 const billsGuidance = (function () {
-    let currentLib = null;
     const libSel = $('#stdBillsGuidanceLibSelect');
     //工作内容
     let stdBillsJobData = [];
@@ -387,8 +386,7 @@ const billsGuidance = (function () {
     function libInitSel(libID){
         //获取清单
         $.bootstrapLoading.start();
-        CommonAjax.post('/billsGuidance/api/getLibWithBills', {libID: libID}, function(rstData){
-            currentLib = rstData.guidanceLib;
+        CommonAjax.post('/billsGuidance/api/getLibWithBills', {libID: libID, isGuidanceLib: false}, function(rstData){
             initViews();
             let callback = function () {
                 initTree(bills, bills.workBook.getActiveSheet(), bills.treeSetting, rstData.bills);
@@ -398,7 +396,7 @@ const billsGuidance = (function () {
                 $.bootstrapLoading.end();
             };
             //获取清单库中的工作内容和项目特征
-            initJobAndCharacter(rstData.guidanceLib.billsLibId, callback);
+            initJobAndCharacter(+libID, callback);
         }, function () {
             $.bootstrapLoading.end();
         });
@@ -460,7 +458,7 @@ const billsGuidance = (function () {
         //打开清单指引库
         $('#stdBillsGuidanceTab').click(function () {
             if(libSel.children().length === 0 && !$(this).hasClass('disabled')){
-                initLibs(projectObj.project.projectInfo.engineeringInfo.billsGuidance_lib);
+                initLibs(projectObj.project.projectInfo.engineeringInfo.bill_lib);
             }
         });
         //更改清单指引库

+ 2 - 1
web/building_saas/main/js/views/std_ration_lib.js

@@ -201,12 +201,13 @@ var rationLibObj = {
          */
         //@param {String}sectionName(章节名称) {Array}datas(定额数据)
         function simplifyName(sectionName, datas){
+            debugger;
             if (!sectionName || !datas || datas.length === 0) {
                 return;
             }
             //提取需要匹配的章节名称
             // 去掉后缀
-            const suffixReg = /[((]编码[::]\d+[))]/;
+            const suffixReg = /[((]编码[::]\w+[))]/;
             const tempName = sectionName.split(suffixReg)[0];
             // 获取第一个空格后的内容
             const sReg = /\s(.+)/;

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

@@ -460,6 +460,7 @@ $(function () {
         me.updateTenderData(datas,function () {
             me.refreshTenderTreeByDatas(datas);
         });
+        $('#calcTender').trigger('click');
     });
 
     $('#calcPriceOption').change(function(){