Преглед изворни кода

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

TonyKang пре 4 година
родитељ
комит
2bfa115662

+ 9 - 5
modules/pm/facade/pm_facade.js

@@ -1835,7 +1835,7 @@ async function doDownLoadAndImport(privateDownloadUrl,info) {
                 }
             } catch (error) {
                 console.log(error.message);
-                doc.errorMsg = "导入失败,请检查文件!";
+                doc.errorMsg = error.message || "导入失败,请检查文件!";
                 doc.status = "error";
             } finally {
                 await importLogsModel.update({ key: info.key }, doc);
@@ -2330,8 +2330,9 @@ async function handleMainProjectDatas(mainData,updateData,userID) {
                 tasks.push({updateOne:{filter : updateData.update.query, update : {NextSiblingID:mainProjectID}}});
             }
             //查看是否重名;
-            let temp = await projectModel.findOne({userID:userID,ParentID:p.ParentID,name:p.name});
-            if(temp) p.name = p.name + '(' + moment(Date.now()).tz("Asia/Shanghai").format('MM-DD HH:mm:ss') + '导入)';
+            let temp = await projectModel.findOne({userID:userID,ParentID:p.ParentID,name:p.name, $or: notDeleted});
+            if(temp) throw new Error(`已存在建设项目“${p.name}”`);
+            // p.name = p.name + '(' + moment(Date.now()).tz("Asia/Shanghai").format('MM-DD HH:mm:ss') + '导入)';
         }else {
             p.ParentID = projectIDMap[p.ParentID];
             p.NextSiblingID = projectIDMap[p.NextSiblingID];
@@ -2617,10 +2618,13 @@ async function getBasicInfo(compilationID, fileKind = null) {
     const billValuation = compilation.bill_valuation.find(function (data) {
         return data.enable;
     });
-    if (!billValuation) {
+    const rationValuation = compilation.ration_valuation.find(function (data) {
+        return data.enable;
+    });
+    if (!billValuation && !rationValuation) {
         return null;
     }
-    const engineerings = await engineeringModel.find({valuationID: billValuation.id}).lean();
+    const engineerings = await engineeringModel.find({valuationID: {$in: [billValuation.id, rationValuation.id] }, 'info_lib.0': {$exists: true}}).lean();
     const engineering = engineerings.find(function (data) {
         return data.info_lib && data.info_lib.length > 0;
     });

+ 0 - 5
public/calculate_util.js

@@ -113,11 +113,6 @@
             : beyondFee && fee > beyondFee
                 ? beyondFee
                 : fee;
-        return deficiencyFee
-            ? fee > 0 && fee < deficiencyFee
-                ? deficiencyFee
-                : fee
-            : fee;
     }
 
     /**

+ 17 - 3
web/building_saas/main/js/controllers/block_controller.js

@@ -570,7 +570,13 @@ let BlockController = {
         }
 
         function createRationData(rationData) {
-            let tem_ration = _.cloneDeep(rationData);
+            let tem_ration = {};
+            for(let key in rationData){
+                if(key.indexOf('function(') !== -1){//有时候会出现field里包含一串 function(e){if(e.length>0)... 这些东西,本地测试又不出现,这里先忽略掉
+                    continue;
+                }
+                tem_ration[key] = rationData[key];
+            }
             //删除旧数据
             delete tem_ration._id;
             delete tem_ration.fees;
@@ -599,8 +605,13 @@ let BlockController = {
         }
 
         function createBillsData(billsData) { //ID、重新生成code
-            let temData = _.cloneDeep(billsData);
-            console.log(temData.children);
+            let temData = {};
+            for(let key in billsData){
+                if(key.indexOf('function(') !== -1){//有时候会出现field里包含一串 function(e){if(e.length>0)... 这些东西,本地测试又不出现,这里先忽略掉
+                    continue;
+                }
+                temData[key] = billsData[key];
+            }
             //删除旧数据
             if(temData.children && temData.children.length>0){//如果是有子项,说明是计算得到的,要删除重新计算,没有子项,但是fees有值,说明是自已输入的,值要一起粘贴
                 delete  temData.fees;
@@ -614,6 +625,9 @@ let BlockController = {
             delete  temData.quantityCoe;
             delete  temData.rationQuantityCoe;
 
+
+
+
             temData.projectID = projectObj.project.ID();
             let newID = uuid.v1(); //新的清单ID
             billsIDMap[temData.ID] = newID;

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

@@ -1195,7 +1195,8 @@ let cbParser = {
   },
   //获取表达式中的中文式
   getCN: function (expr) {
-    let cnRex = /\d*[\u4e00-\u9fa5]{1,}\({0,}[\u4e00-\u9fa5]{0,}\*?\d*%*、?[\u4e00-\u9fa5]{0,}\){0,}[\u4e00-\u9fa5]{0,}/g;
+    //let cnRex = /\d*[\u4e00-\u9fa5]{1,}\({0,}[\u4e00-\u9fa5]{0,}\*?\d*%*、?[\u4e00-\u9fa5]{0,}\){0,}[\u4e00-\u9fa5]{0,}/g;
+    let cnRex = /\d*[\u4e00-\u9fa5]{1,}\({0,}[\u4e00-\u9fa5]{0,}\*?\d*%*、?[\u4e00-\u9fa5]{0,}\){0,}[\u4e00-\u9fa5]{0,}\(?[\u4e00-\u9fa5]{0,}\)?/g;
     return _.filter(expr.match(cnRex), function (data) {
       return data
     });

Разлика између датотеке није приказан због своје велике величине
+ 39 - 39
web/building_saas/main/js/models/feeRateConsts.js


+ 2 - 2
web/building_saas/main/js/models/project_glj.js

@@ -1575,7 +1575,7 @@ ProjectGLJ.prototype.getMainAndEquGLJNodeByID = function (id) {//通过ID取显
 };
 
 //根据工料机,取得所有受影响的定额节点
-ProjectGLJ.prototype.getImpactRationNodes = function (gljs) {
+ProjectGLJ.prototype.getImpactRationNodes = function (gljs, skipEmptyQuantity) {
     let nodes = [];
     let rationMap = {};
     let idArray = _.map(gljs,'id');
@@ -1583,7 +1583,7 @@ ProjectGLJ.prototype.getImpactRationNodes = function (gljs) {
     //先根据项目工料机ID,找到受影响定额的ID
     let ration_glj_list = projectObj.project.ration_glj.datas; //取定额工料机数据
     for (let rg of ration_glj_list) {
-        if (_.indexOf(idArray,rg.projectGLJID)!=-1) {
+        if (_.indexOf(idArray,rg.projectGLJID)!=-1 && (!skipEmptyQuantity || (skipEmptyQuantity && +rg.quantity))) {
             rationMap[rg.rationID] = true;  //取所有定额ID,用MAP方式去重
         }
     }

+ 8 - 0
web/building_saas/main/js/views/calc_base_view.js

@@ -161,6 +161,14 @@ let calcBaseView = {
     toViewData: function (obj) {
         let rst = [];
         for(let figure in obj){
+            if (typeof invisibleBases !== 'undefined' && invisibleBases.includes(figure)) {
+                continue;
+            }
+            const engName = projectObj.project.property.engineeringName;
+            const figureItem = obj[figure];
+            if (figureItem.engineeringList && figureItem.engineeringList.length && !figureItem.engineeringList.some(name => new RegExp(name).test(engName))) {
+                continue;
+            }
             let figureObj = Object.create(null);
             figureObj.base = figure;
             figureObj.price = projectObj.project.calcBase.getBase(figure);

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

@@ -211,7 +211,7 @@ let locateObject={
         if(this.gljDatas && this.gljDatas.length > 0){
             let glj = this.gljDatas[oldSel.row];
             if(!glj) return datas;
-            let  nodes = projectObj.project.projectGLJ.getImpactRationNodes([glj.reference]);
+            let  nodes = projectObj.project.projectGLJ.getImpactRationNodes([glj.reference], true);
             for(let n of nodes){
                 datas.push(this.getShowRationDatas(n.data));
             }
@@ -299,7 +299,7 @@ let locateObject={
     },
     findGLJs:function(keyword){
         let datas = [];
-        let gljList = projectObj.project.projectGLJ.datas.gljList;
+        let gljList = projectObj.project.projectGLJ.datas.gljList.filter(glj => glj.quantity);
         gljList =  sortProjectGLJ(gljList);
         for(let glj of gljList){
             // if(glj.quantity == 0 || glj.quantity == '0') continue;  2019-07-01 需求改成消耗量为0也显示

+ 22 - 0
web/building_saas/pm/html/project-management-share.html

@@ -83,4 +83,26 @@
             </div>
         </div>
     </div>
+</div>
+<div class="modal fade" id="share-rename-dialog" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">已存在此建设项目,请重命名</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                    <div class="form-group">
+                        <input type="text" class="form-control" placeholder="输入名称" id="share-rename-input">
+                        <span class="form-text text-danger" id="share-rename-info" style="display: none;">已存在 “建筑工程1”</span>
+                    </div>
+            </div>
+            <div class="modal-footer">
+                <a href="javascript:void(0);" class="btn btn-primary" id="share-rename-confirm">确定</a>
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
 </div>

+ 9 - 0
web/building_saas/pm/html/project-management.html

@@ -766,6 +766,15 @@
                         </div>
                     </div>
                 </div>
+                <div id="import-rename" style="display: none;">
+                    <p style="color: #dc3545;">项目已存在,请重命名</p>
+                    <div class="form-group row">
+                        <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">建设项目</label>
+                        <div class="col">
+                            <input type="text" class="form-control form-control-sm" placeholder="输入建设项目名称" id="import-rename-input" autocomplete="off">
+                        </div>
+                    </div>
+                </div>
             </div>
             <div class="modal-footer">
                 <a id="interface-import-confirm" href="javascript:void(0);" class="btn btn-primary">确定导入</a>

+ 31 - 6
web/building_saas/pm/js/pm_share.js

@@ -951,17 +951,19 @@ const pmShare = (function () {
             alert(err);
         }
     }
+    let projectQueryResult = [];
     //拷贝分享的建设项目
     //@param {Object}selected 
-    async function copyContructionProject(selected){
+    async function copyContructionProject(selected, rename){
       try {
-        let newName = getCopyName(selected);
+        let newName = rename ? rename : getCopyName(selected);
         //获取单项工程的单位工程
         let projectQuery = {$or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], userID: userID,projType: "Project"};
-        const rstData = await ajaxPost('/pm/api/getProjectsByQuery', {user_id: userID, query: projectQuery, options: '-_id -property'}, false, 10000);
-        for(let project of rstData){
+        projectQueryResult = await ajaxPost('/pm/api/getProjectsByQuery', {user_id: userID, query: projectQuery, options: '-_id -property'}, false, 10000);
+        for(let project of projectQueryResult){
             if(project.name === newName){
-                alert("已存在此建设项目");
+                $("#share-rename-dialog").modal('show');
+                $("#share-rename-input").val(newName);
                 return;
             }
         }
@@ -986,7 +988,7 @@ const pmShare = (function () {
             node = node.parent;
             userInfo = node.data.userInfo;
         }
-        return `${orgName} (${userInfo.name}分享拷贝)`;
+        return `${orgName}`;
     }
     //清除了该节点后,可能还有该节点的数据在树上(树允许有重复数据),需要更新分享信息
     function updateAfterCancel(userID, projectID) {
@@ -1112,6 +1114,29 @@ const pmShare = (function () {
                 $.bootstrapLoading.end();
             });
         });
+
+        // 拷贝重命名
+        $('#share-rename-dialog').on('show.bs.modal', () => {
+            $('#share-rename-info').hide();
+            setTimeout(() => {
+                $('#share-rename-input').focus();
+            }, 200)
+        });
+        $('#share-rename-confirm').click(function () {
+            const newName = $('#share-rename-input').val().trim();
+            if (!newName) {
+                return;
+            }
+            for(let project of projectQueryResult){
+                if(project.name === newName){
+                    $('#share-rename-info').text(`已存在 “${newName}”`);
+                    $('#share-rename-info').show();
+                    return;
+                }
+            }
+            $("#share-rename-dialog").modal('hide');
+            copyContructionProject(tree.selected, newName);
+        });
     }
 
     return {

+ 8 - 0
web/building_saas/standard_interface/config.js

@@ -87,6 +87,14 @@ const INTERFACE_CONFIG = (() => {
         [CONTROL]: '.czglzbkzj',
       }
     },
+    '安徽@安庆': {
+      scriptName: 'anhui_maanshan.js',
+      fileSuffix: {
+        [BID_INVITATION]: '.AHAQGLZB',
+        [BID_SUBMISSION]: '.AHAQGLTB',
+        [CONTROL]: '.AHAQGLKZJ',
+      },
+    },
     '广东@中山': {
       scriptName: 'guangdong_zhongshan.js',
       fileSuffix: {

+ 18 - 1
web/building_saas/standard_interface/export/anhui_maanshan.js

@@ -70,7 +70,7 @@ INTERFACE_EXPORT = (() => {
         { name: 'Jsdw', value: getValueByKey(information, 'constructingUnits') }, // 建设单位
         { name: 'Czzt', value: czzt[exportKind] }, // 操作状态:招标、投标、招标控制,即导出接口时,所选的文件类型
         { name: 'Jsfs', value: taxModeMap[getValueByKey(information, 'taxMode')] || '1', type: TYPE.INT }, // 计税方式,默认1。1=一般计税 2=简易计税
-        { name: 'Version', value: ['淮北', '铜陵', '亳州', '六安', '张掖'].includes(subArea) ? '1.1' : '1.0' },
+        { name: 'Version', value: ['淮北', '铜陵', '亳州', '六安', '张掖', '安庆'].includes(subArea) ? '1.1' : '1.0' },
       ];
       Element.call(this, 'JingJiBiao', attrs);
     }
@@ -120,6 +120,12 @@ INTERFACE_EXPORT = (() => {
           { name: 'ZbrDbSfzh', value: getValueByKey(information, 'tenderAuthorizerIDNo') }, // 招标人法定代表人或其授权人身份证号
           { name: 'ZxrDbSfzh', value: getValueByKey(information, 'consultantAuthorizerTaxpayerIdentificationNo') }, // 造价咨询人法定代表或其授权人纳税识别号
         ],
+        '安庆': [
+          { name: 'ZbrNssbh', value: '' }, // 招标人纳税识别号
+          { name: 'ZxrNssbh', value: '' }, // 造价咨询人纳税识别号
+          { name: 'ZbrDbSfzh', value: '' }, // 招标人法定代表人或其授权人身份证号
+          { name: 'ZxrDbSfzh', value: '' }, // 造价咨询人法定代表或其授权人纳税识别号
+        ],
       };
       if (extraMap[subArea]) {
         attrs.push(...extraMap[subArea]);
@@ -172,6 +178,12 @@ INTERFACE_EXPORT = (() => {
           { name: 'ZbrDbSfzh', value: getValueByKey(information, 'tenderAuthorizerIDNo') }, // 招标人法定代表人或其授权人身份证号
           { name: 'ZxrDbSfzh', value: getValueByKey(information, 'consultantAuthorizerTaxpayerIdentificationNo') }, // 造价咨询人法定代表或其授权人纳税识别号
         ],
+        '安庆': [
+          { name: 'ZbrNssbh', value: '' }, // 招标人纳税识别号
+          { name: 'ZxrNssbh', value: '' }, // 造价咨询人纳税识别号
+          { name: 'ZbrDbSfzh', value: '' }, // 招标人法定代表人或其授权人身份证号
+          { name: 'ZxrDbSfzh', value: '' }, // 造价咨询人法定代表或其授权人纳税识别号
+        ],
       };
       if (extraMap[subArea]) {
         attrs.push(...extraMap[subArea]);
@@ -216,6 +228,11 @@ INTERFACE_EXPORT = (() => {
           { name: 'TbrNssbh', value: getValueByKey(information, 'bidderTaxpayerIdentificationNo') }, // 投标人纳税识别号
           { name: 'TbrDbSfzh', value: getValueByKey(information, 'bidderAuthorizerTaxpayerIdentificationNo') }, // 投标人法定代表或其授权人身份证号
         ],
+        '安庆': [
+          { name: 'ZbrNssbh', value: '' }, // 招标人纳税识别号
+          { name: 'TbrNssbh', value: '' }, // 投标人纳税识别号
+          { name: 'TbrDbSfzh', value: '' }, // 投标人法定代表或其授权人身份证号
+        ],
       };
       if (extraMap[subArea]) {
         attrs.push(...extraMap[subArea]);

+ 5 - 2
web/building_saas/standard_interface/export/guangdong_zhongshan.js

@@ -185,7 +185,7 @@ INTERFACE_EXPORT = (() => {
         case fixedFlag.DAYWORK_LABOR:
           pass = data.name == "计日工合计";
           break;
-        case fixedFlag.LABOUR_SERVICE:
+/*         case fixedFlag.LABOUR_SERVICE:
           pass = data.name == "劳务";
           break;
         case fixedFlag.MATERIAL:
@@ -193,7 +193,7 @@ INTERFACE_EXPORT = (() => {
           break;
         case fixedFlag.CONSTRUCTION_MACHINE:
           pass = data.name == "机械";
-          break;
+          break; */
         case fixedFlag.PROVISIONAL:
           pass = data.name == "暂列金额(不含计日工总额)";
           break;
@@ -836,6 +836,9 @@ INTERFACE_EXPORT = (() => {
       let temMechs = [];
       if (isBidSubmission || isControl) { //导出到招标文件中,不输出这一部分。
         for (let g of pgljData.gljList) {
+          if (!g.quantity) {
+            continue;
+          }
           let type = g.type + "";
           gljKeyMap[gljUtil.getIndex(g)] = g;
           type = type.charAt(0);

+ 4 - 2
web/building_saas/standard_interface/import/base.js

@@ -500,6 +500,7 @@ const INTERFACE_EXPORT_BASE = (() => {
     const projectCount = 1 + importData.tenders.length;
     // const feeName = compilationData.name === '安徽养护(2018)' ? '安徽养护' : '公路工程';
     // 一些接口需要根据导入文件,匹配工程专业库
+    debugger;
     const rationValuationData = rationValuation && JSON.parse(rationValuation)[0]; // 只有工程量清单才能导入接口
     if (!rationValuationData) {
       throw '无法获取工程量清单计价数据';
@@ -519,11 +520,12 @@ const INTERFACE_EXPORT_BASE = (() => {
     console.log(templateData);
     // 处理建设项目数据
     // 确定建设项目的名称(不允许重复)
-    const sameDepthProjs = getProjs(projTreeObj.tree.selected);
+    /* const sameDepthProjs = getProjs(projTreeObj.tree.selected);
     const matchedProject = sameDepthProjs.find(node => node.data.name === importData.name);
     if (matchedProject) {
+      alert('test');
       importData.name += `(${moment(Date.now()).format('YYYY-MM-DD HH:mm:ss')})`;
-    }
+    } */
     importData.compilation = compilationData._id;
     importData.userID = userID;
     importData.ID = templateData.projectBeginID;

+ 26 - 4
web/building_saas/standard_interface/import/view.js

@@ -32,9 +32,15 @@ const IMPORT_VIEW = (() => {
   }
 
   // 导入相关事件监听器
+  let importData = null;
+  let areaKey = '';
   function importListener() {
     // 文件选择变更
     $('#interface-import-file').change(function () {
+      importData = null;
+      areaKey = '';
+      $('#import-rename-input').val('');
+      $('#import-rename').hide();
       const file = $(this)[0].files[0];
       $('#interface-import-label').text(file && file.name || '请选择导入文件');
     });
@@ -55,10 +61,24 @@ const IMPORT_VIEW = (() => {
         if (!parentArea || !subArea) {
           throw '请选择有效地区。';
         }
-        const areaKey = `${parentArea}@${subArea}`;
-        await STD_INTERFACE.loadScriptByArea(areaKey, STD_INTERFACE.ScriptType.IMPORT);
-        const onlyImportMatchBills = areaKey === '广东@中山';
-        const importData = await INTERFACE_EXPORT_BASE.extractImportData(INTERFACE_IMPORT.entry, file, areaKey, false, onlyImportMatchBills);
+        const curAreaKey = `${parentArea}@${subArea}`;
+        if (!(importData && areaKey && areaKey === curAreaKey)) {
+          areaKey = curAreaKey;
+          await STD_INTERFACE.loadScriptByArea(areaKey, STD_INTERFACE.ScriptType.IMPORT);
+          const onlyImportMatchBills = areaKey === '广东@中山';
+          importData = await INTERFACE_EXPORT_BASE.extractImportData(INTERFACE_IMPORT.entry, file, areaKey, false, onlyImportMatchBills);
+        }
+        const constructionName = $('#import-rename').is(':visible') ? $('#import-rename-input').val() : importData.name;
+        // 确定建设项目的名称(不允许重复)
+        const sameDepthProjs = getProjs(projTreeObj.tree.selected);
+        const matchedProject = sameDepthProjs.find(node => node.data.name === constructionName);
+        if (matchedProject || !constructionName) {
+          $('#import-rename-input').val(constructionName);
+          $('#import-rename').show();
+          $('#import-rename-input').focus();
+          return;
+        }
+        importData.name = constructionName;
         $('#interface-import-modal').modal('hide');
         $.bootstrapLoading.progressStart('导入文件', true);
         $("#progress_modal_body").text('正在导入接口文件,请稍候……');
@@ -93,6 +113,8 @@ const IMPORT_VIEW = (() => {
 
 $(document).ready(() => {
   $('#interface-import-modal').on('show.bs.modal', () => {
+    $('#import-rename-input').val('');
+    $('#import-rename').hide();
     $('#interface-import-file').val('');
     $('#interface-import-label').text('请选择导入文件');
     IMPORT_VIEW.initFileAccept($('#interface-import-file'));

+ 0 - 75
web/over_write/js/gansu_2017

@@ -1,75 +0,0 @@
-/**
- * Created by CSL on 2021/04/25.  甘肃养护计算程序、基数 等覆盖。
- */
-
-let isGS2017 = true;
-function overwriteRationCalcBases() {
-  if (typeof rationCalcBases == 'undefined') return;
-  for (let key in rationCalcBases) delete rationCalcBases[key];
-
-  rationCalcBases['人工费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptMarketPrice, isTender);
-  };
-  rationCalcBases['材料费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptMarketPrice, isTender);
-  };
-  rationCalcBases['施工机械使用费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptMarketPrice, isTender);
-  };
-  rationCalcBases['施工机械人工费'] = function (node, isTender) {
-    return calcTools.machineDetailFee(node, node.data.gljList, [], gljType.MACHINE_LABOUR, isTender);
-  };
-  rationCalcBases['设备购置费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice, isTender);
-  };
-
-  rationCalcBases['定额人工费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
-  };
-  rationCalcBases['定额材料费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender);
-  };
-  rationCalcBases['定额施工机械使用费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptBasePrice, isTender);
-  };
-  rationCalcBases['定额商品砼费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptBasePrice, isTender);
-  };
-  rationCalcBases['定额设备费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptBasePrice, isTender);
-  };
-  rationCalcBases['定额外购砼构件费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptBasePrice, isTender);
-  };
-  rationCalcBases['定额绿化苗木费'] = function (node, isTender) {
-    return calcTools.rationBaseFee(node, [gljType.GREEN_SEEDLING], priceTypes.ptBasePrice, isTender);
-  };
-};
-
-(function overwriteFeeTypes() {
-  if (typeof cpFeeTypes == 'undefined') return;
-  cpFeeTypes = [
-    { type: 'marketLabour', name: '人工费' },
-    { type: 'marketMaterial', name: '材料费' },
-    { type: 'marketMachine', name: '施工机械使用费' },
-    { type: 'marketMachineLabour', name: '施工机械人工费' },
-    { type: 'marketEquipment', name: '设备购置费' },
-    { type: 'marketDirect', name: '直接费' },
-
-    { type: 'labour', name: '定额人工费' },
-    { type: 'material', name: '定额材料费' },
-    { type: 'machine', name: '定额施工机械使用费' },
-    { type: 'equipment', name: '定额设备费' },
-    { type: 'direct', name: '定额直接费' },
-
-    { type: 'measure', name: '措施费' },
-    { type: 'measure1', name: '措施费I' },
-    { type: 'measure2', name: '措施费II' },
-    { type: 'manage', name: '企业管理费' },
-    { type: 'force', name: '规费' },
-    { type: 'profit', name: '利润' },
-    { type: 'tax', name: '税金' },
-    { type: 'common', name: '建安费' },
-    { type: 'rationCommon', name: '定额建安费' }
-  ];
-})();

+ 466 - 0
web/over_write/js/gansu_2021.js

@@ -0,0 +1,466 @@
+if (typeof feeRateObject !== 'undefined') {
+    feeRateObject.feeRateSpecialHandle = function (subRate, value) {
+        let result = {};
+        if (subRate.name == "综合里程(km)" && value && value < 3) {//综合里程3km以内按3km算
+            result.valueKey = "3";
+            result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
+        }
+        if (subRate.name == "工地转移(km)" && value && value < 50) {//工地转移50km以内按50km算
+            result.valueKey = "50";
+            result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
+        }
+        if (subRate.name == "施工进出场(km)" && value && value < 5) {//施工进出场5km以内按5km算
+            result.valueKey = "5";
+            result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
+        }
+        return result;
+    }
+}
+
+// 清单基数
+const littleFixNames = ['小修', '养护检查预算', '日常养护预算'];
+const progression = ['养护单位(业主)管理费', '养护单位(业主)管理费(未单独设置)', '养护工程监理费', '养护工程监理费(路线工程)', '养护工程监理费(桥梁及隧道工程)', '设计文件审查费', '养护工程设计费(路线工程)', '养护工程设计费(独立桥梁、隧道工程)', '施工场地建设费'];
+const deficiency = { '养护工程监理费': 10000, '设计文件审查费': 10000 };
+if (typeof baseFigureMap !== 'undefined') {
+    const { fixedFlag } = commonConstants;
+    const budgetMap = {
+        // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
+        '建筑安装工程费': {
+            base: 'JZAZGCF',
+            fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+            filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+            pick: false,
+        },
+        // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
+        '建筑安装工程费(不含设备费)': {
+            base: 'JZAZGCFBHSB',
+            fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+            filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+            pick: false
+        },
+        // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
+        '定额建筑安装工程费': {
+            base: 'DEJZAZGCF',
+            fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+            filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+            pick: false
+        },
+        '设备费': {
+            base: 'SBF',
+            fixedFlag: fixedFlag.EQUIPMENT_ACQUISITION_FEE,
+            filter: [fixedFlag.EQUIPMENT_ACQUISITION_FEE],
+            pick: false
+        },
+        '定额设备费': {
+            base: 'DESBF',
+            fixedFlag: fixedFlag.EQUIPMENT_ACQUISITION_FEE,
+            filter: [fixedFlag.EQUIPMENT_ACQUISITION_FEE],
+            pick: false
+        },
+        // 显示:除清单固定类别是“养护工程费”的以外部分可显示
+        '养护工程费': {
+            base: 'YHGCF',
+            fixedFlag: fixedFlag.MAINTENANCE_FEE,
+            filter: [fixedFlag.MAINTENANCE_FEE],
+            pick: false
+        },
+        // 显示:除清单固定类别是“养护工程费”的以外部分可显示。
+        '定额养护工程费': {
+            base: 'DEYHGCF',
+            fixedFlag: fixedFlag.MAINTENANCE_FEE,
+            filter: [fixedFlag.MAINTENANCE_FEE],
+            pick: false
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护单位(业主)管理费': {
+            isProgressive: true,
+            base: 'YHDWYZGLF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护单位(业主)管理费(未单独设置)': {
+            isProgressive: true,
+            base: 'YHDWYZGLFWDDSZ',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。 仅小修保养类别可以显示
+        '养护工程监理费': {
+            isProgressive: true,
+            base: 'YHGCJLF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+            engineeringList: littleFixNames,
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护工程监理费(路线工程)': {
+            isProgressive: true,
+            base: 'YHGCJLFLXGC',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+            engineeringList: ['大修', '中修'],
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护工程监理费(桥梁及隧道工程)': {
+            isProgressive: true,
+            base: 'YHGCJLFQLJSDGC',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+            engineeringList: ['大修', '中修'],
+        },
+        // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
+        '设计文件审查费': {
+            isProgressive: true,
+            base: 'SJWJSCF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+            engineeringList: ['大修', '中修']
+        },
+        '养护项目信息化费': {
+            base: 'YHXMXXHF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
+        '养护工程设计费(路线工程)': {
+            isProgressive: true,
+            base: 'YHGCSJFLXGC',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+            engineeringList: ['大修', '中修']
+        },
+        // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
+        '养护工程设计费(独立桥梁、隧道工程)': {
+            isProgressive: true,
+            base: 'YHGCSJFQLSDGC',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+            engineeringList: ['大修', '中修']
+        },
+        '施工场地建设费': {
+            isProgressive: true,
+            base: 'SGCDJSF',
+            fixedFlag: null,
+            filter: [fixedFlag.CONSTRUCTION_PLANT_COST],
+            pick: true,
+        },
+        // 显示:除清单固定类别是“一二三四部分合计”的以外部分可显示。
+        '一二三四部分合计': {
+            base: 'YESSBFHJ',
+            fixedFlag: fixedFlag.ONE_TO_FOUR_TOTAL,
+            filter: [fixedFlag.ONE_TO_FOUR_TOTAL],
+            pick: false,
+        },
+        // 显示:仅“价差预备费”可显示
+        '价差预备费': {
+            base: 'JCYBF',
+            fixedFlag: null,
+            filter: [fixedFlag.SPREAD_BUDGET_FEE],
+            pick: true,
+        },
+    };
+    const boqMap = {
+        //仅允许用于固定类别是“第100章至700章清单”以外的清单
+        '专项暂定合计': {
+            base: 'ZXZDHJ',
+            fixedFlag: null,
+            filter: [fixedFlag.ONE_SEVEN_BILLS],
+            pick: false
+        },
+        /*
+        *  清单固定行[第100章至700章清单]下的[第100章清单]需要允许清单可使用基数{100章以外合计}
+        *  因此{100章以外合计}不设置关联的清单固定行
+        * */
+        //仅允许用于固定类别为“100章清单”引用
+        '100章以外清单合计': {
+            base: 'YBZYHQDHJ',
+            fixedFlag: null,
+            filter: [fixedFlag.ONE_HUNDRED_BILLS],
+            pick: true
+        }
+    };
+    baseFigureMap.budget = budgetMap;
+    baseFigureMap.boq = boqMap;
+}
+
+// 是否是小修
+const isLittleFix = (engName) => {
+    return littleFixNames.some(name => new RegExp(name).test(engName));
+}
+
+if (typeof baseFigureTemplate !== 'undefined') {
+    const { fixedFlag } = commonConstants;
+    baseFigureTemplate.budget = {
+        // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的建安费。
+        JZAZGCF(tender) {
+            return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
+        },
+        // 建筑安装工程费(不含设备费)算法:取清单固定类别是“建筑安装工程费”的金额 - {设备费}。
+        JZAZGCFBHSB(tender) {
+            const engName = projectObj.project.property.engineeringName;
+            if (isLittleFix(engName)) {
+                // 小修的没有设备购置固定行
+                const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
+                const fixedNode = projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
+                const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, 'common');
+                return (baseFee - equipmentFee).toDecimal(decimalObj.bills.totalPrice);
+            } else {
+                return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.EQUIPMENT_ACQUISITION_FEE], tender, 'common');
+            }
+        },
+        // 定额建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)。
+        DEJZAZGCF(tender) {
+            const engName = projectObj.project.property.engineeringName;
+            const feeField = 'rationCommon';
+            if (isLittleFix(engName)) {
+                // 小修的没有设备购置固定行
+                const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, feeField);
+                const fixedNode = projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
+                const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, 'equipment');
+                return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
+            } else {
+                const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
+                //建安费扣除定额设备购置费
+                const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, deductFlags, tender, feeField, false);
+                //定额设备购置费
+                const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, 'equipment');
+                const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, 'tax');
+                return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
+            }
+        },
+        // 设备费 算法:取清单固定类别是“设备购置”的建安费
+        SBF(tender) {
+            return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, 'common');
+        },
+        // 设备费 算法:取清单固定类别是“设备购置”的定额建安费
+        DESBF(tender) {
+            return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, 'rationCommon');
+        },
+        // 养护工程费 算法:取清单固定类别是“养护工程费”的金额。
+        YHGCF(tender) {
+            return cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, 'common');
+        },
+        // 定额养护工程费 算法:取清单固定类别是“养护工程费”的定额建安费(其中定额设备费按40%计算)。
+        DEYHGCF(tender) {
+            const engName = projectObj.project.property.engineeringName;
+            const feeField = 'rationCommon';
+            if (isLittleFix(engName)) {
+                // 小修的没有设备购置固定行
+                const baseFee = cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, feeField);
+                const fixedNode = projectObj.project.mainTree.items.find(node => node.getFlag() === fixedFlag.MAINTENANCE_FEE);
+                const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, 'equipment');
+                return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
+            } else {
+                const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
+                //建安费扣除定额设备购置费
+                const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.MAINTENANCE_FEE, deductFlags, tender, feeField, false);
+                //定额设备购置费
+                const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, 'equipment');
+                const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, 'tax');
+                return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
+            }
+        },
+        // 养护单位(业主)管理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。。
+        YHDWYZGLF(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护单位(业主)管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护单位(业主)管理费(未单独设置) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
+        YHDWYZGLFWDDSZ(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护单位(业主)管理费(未单独设置)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护工程监理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCJLF(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程监理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护工程监理费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCJLFLXGC(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程监理费(路线工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护工程监理费(桥梁及隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCJLFQLJSDGC(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程监理费(桥梁及隧道工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 设计文件审查费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
+        SJWJSCF(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护项目信息化费 (大中修):取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)*0.32%计算。不足10000取10000
+        // 养护项目信息化费 (小修):算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)*0.2%计算。信息化管理费不足5000元时按5000元计取。
+        YHXMXXHF(tender) {
+            const engName = projectObj.project.property.engineeringName;
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (isLittleFix(engName)) {
+                const fee = (baseFee * 0.002).toDecimal(decimalObj.bills.totalPrice);
+                return fee > 0 && fee < 5000 ? 5000 : fee;
+            } else {
+                const fee = (baseFee * 0.0032).toDecimal(decimalObj.bills.totalPrice);
+                return fee > 0 && fee < 10000 ? 10000 : fee;
+            }
+        },
+        // 养护工程设计费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCSJFLXGC(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费(路线工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护工程设计费(独立桥梁、隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCSJFQLSDGC(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费(独立桥梁、隧道工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 施工场地建设费 算法:以{定额养护工程费}为基数,采用累进办法计算
+        SGCDJSF(tender) {
+            const baseFee = this['DEYHGCF'](tender);
+            // 小修保养类别,施工场地建设费的计算基数定额建筑安装工程费超过30000000元时,不进行累进计算,直接按500000元计取。
+            const engName = projectObj.project.property.engineeringName;
+            if (isLittleFix(engName) && baseFee > 30000000) {
+                return 500000;
+            }
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '施工场地建设费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 一二三四部分合计 算法:取清单固定类别是“一二三四部分合计”的金额
+        YESSBFHJ(tender) {
+            return cbTools.getBaseFee(fixedFlag.ONE_TO_FOUR_TOTAL, tender, 'common');
+        },
+        /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
+            价差预备费 P * [(1+i)^(n-1) -1]
+            P——建筑安装工程费总额(元);
+            i——年工程造价增涨率(%);
+            n——设计文件编制年至养护项目开工年+养护项目建设期限(年)。
+        */
+        JCYBF(tender) {
+            //建筑安装工程费作为基数
+            const installFee = this['JZAZGCF'](tender);
+            //年造价增涨
+            const costGrowthRate = calcBase.project.property.costGrowthRate
+                ? calcBase.project.property.costGrowthRate
+                : 0;
+            //增涨计费年限
+            const growthPeriod = projectObj.project.property.growthPeriod
+                ? calcBase.project.property.growthPeriod
+                : 0;
+            //= P * [(1+i)^(n-1) -1]
+            return (installFee * (Math.pow(1 + costGrowthRate, growthPeriod - 1) - 1)).toDecimal(decimalObj.bills.totalPrice);
+        }
+
+    };
+
+    baseFigureTemplate.boq = {
+        //{专项暂定合计}
+        // 第100章至700章清单行的暂估合价
+        'ZXZDHJ': function (tender) {
+            return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'estimate');
+        },
+        //{100章以外清单合计}
+        // 取清单固定清单[第100章至700章清单]的金额,但扣除清单100章下的金额。
+        // 如果是固定清单[第100章至700章清单]下100章以外清单引用此基数,要排除自身(目前只允许100章的清单使用,所以暂时不需要此判断)
+        'YBZYHQDHJ': function (tender) {
+            let oneToSeven = cbTools.findNodeByFlag(fixedFlag.ONE_SEVEN_BILLS);
+            if (!oneToSeven) {
+                return 0;
+            }
+            //100-700章固定节点的所有子节点
+            let allChildren = [];
+            function getChildren(nodes) {
+                allChildren = allChildren.concat(nodes);
+                for (let node of nodes) {
+                    if (node.children.length > 0) {
+                        getChildren(node.children);
+                    }
+                }
+            }
+            getChildren(oneToSeven.children);
+            //扣除的节点:100章的节点[100-200)
+            let deductNodes = allChildren.filter(cbTools.withingOneHundred);
+            //计算金额
+            let fullFeeField = tender ? 'common.tenderTotalFee' : 'common.totalFee';
+            return projectObj.project.calcProgram.getTotalFee([oneToSeven], deductNodes, fullFeeField).toDecimal(decimalObj.bills.totalPrice);
+        }
+    };
+}
+
+if (typeof module !== 'undefined') {
+    // 甘肃养护,项目属性-小数位数,费率小数位数默认为2。
+    const defaultDecimal = {
+        bills: {unitPrice: 2, totalPrice: 0},
+        ration: {quantity: 3, unitPrice: 2, totalPrice: 0},
+        glj: {quantity: 3, unitPriceHasMix: 2, unitPrice: 2},
+        feeRate: 4,
+        quantity_detail: 4,
+        material:5,//三材系数
+        process: 6,
+        marketPriceProcess: 2,
+        temProcess:6
+    };
+
+  module.exports = {
+      progression,
+      deficiency,
+      defaultDecimal
+  };
+}
+// 不显示但可的基数
+const invisibleBases = ['设备费', '定额设备费'];
+
+if (typeof projectObj !== 'undefined') {
+    projectObj.isInsertEquipmentVisable = function (selected) {
+        if(projectObj.project.property.valuationType !=='ration' ){//属于预算项目的情况下,在固定清单可见
+            const engName = projectObj.project.property.engineeringName;
+            //属于的固定清单
+            const belongFlag = cbTools.getBelongFlag(selected);
+            if (isLittleFix(engName)) {
+                if (belongFlag && belongFlag === fixedFlag.MAINTENANCE_FEE) {
+                    return true;
+                }
+            } else {
+                if (belongFlag && belongFlag === fixedFlag.EQUIPMENT_ACQUISITION_FEE) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        return true
+    }
+}

Разлика између датотеке није приказан због своје велике величине
+ 1 - 1
web/users/html/login-sms.html


Разлика између датотеке није приказан због своје велике величине
+ 1 - 1
web/users/html/login-ver.html


+ 1 - 1
web/users/html/login.html

@@ -60,7 +60,7 @@
                 </div>
             </div>
         </form>
-        <div class="text-white fixed-bottom"><p class="text-center mb-1">Copyright © 2018 <a href="https://smartcost.com.cn" target="_blank" class="text-white">珠海纵横创新软件有限公司</a>.All Rights Reserved.<a class="text-white ml-2" href="http://www.miitbeian.gov.cn" target="_blank">粤ICP备14032472号</a>
+        <div class="text-white fixed-bottom"><p class="text-center mb-1">Copyright © 2018 <a href="https://smartcost.com.cn" target="_blank" class="text-white">珠海纵横创新软件有限公司</a>.All Rights Reserved.<a class="text-white ml-2" href="https://beian.miit.gov.cn" target="_blank">粤ICP备14032472号</a>
           <% if (title == "纵横公路云造价") { %>
             <%include ../../common/html/dataStatistics_sc.html %>
           <% } else { %>