Browse Source

bug+接口

zhangweicheng 5 years ago
parent
commit
e2830ba408

File diff suppressed because it is too large
+ 1133 - 998
modules/ration_glj/facade/ration_glj_facade.js


File diff suppressed because it is too large
+ 687 - 643
web/building_saas/main/js/models/fee_rate.js


File diff suppressed because it is too large
+ 1485 - 993
web/building_saas/main/js/views/config_material_view.js


+ 86 - 6
web/building_saas/standard_interface/export/guangdong_zhongshan.js

@@ -1,7 +1,44 @@
 // INTERFACE_EXPORT =,必须这么写,这样才能在导出时动态加载脚本后,覆盖前端代码
 INTERFACE_EXPORT = (() => {
   'use strict';
-
+  const feeRateMap = {
+    '冬季施工增加费': 'DJSGZJFFL',
+    '雨季施工增加费': 'YUJSGZJFFL',
+    '夜间施工增加费': 'YEJSGZJFFL',
+    '高原地区施工增加费': 'GYDQSGZJFFL',
+    '风沙地区施工增加费': 'FSDQSGZJFFL',
+    '沿海地区施工增加费': 'YHDQSGZJFFL',
+    '行车干扰施工增加费': 'XCGRGCSGZJFFL',
+    '工地转移费': 'GDZYFFL',
+    '施工辅助费': 'SGFZFFL',
+    '基本费用': 'JBFYFL',
+    '主副食运费补贴': 'ZFSYFBTFL',
+    '职工探亲费': 'ZGTQLFFL',
+    '职工取暖费': 'ZGQNBTFL',
+    '财务费用': 'CWFYFL',
+    '养老保险费': 'YANGLBXFFL',
+    '失业保险费': 'SYBXFFL',
+    '医疗保险费': 'YILBXFFL',
+    '工伤保险费': 'GSBXFL',
+    '住房公积金': 'ZFGJJFL',
+    '土方': 'TF',
+    '石方': 'SF',
+    '运输': 'YS',
+    '路面': 'LM',
+    '路面(不计雨)': 'LM',
+    '隧道': 'SD',
+    '构造物I': 'GZW1',
+    '构造物I(不计冬)': 'GZW1',
+    '构造物I(不计雨)': 'GZW1',
+    '构造物II': 'GZW2',
+    '构造物III(桥梁)': 'GZW3',
+    '构造物III(除桥以外)': 'GZW3',
+    '构造物III(除桥以外不计雨夜)': 'GZW3',
+    '技术复杂大桥': 'JSFZDQ',
+    '钢材及钢结构(桥梁)': 'GJG',
+    '钢材及钢结构(除桥以外)': 'GJG',
+    '钢材及钢结构(除桥以外不计夜)': 'GJG'
+  }
   /**
    * 
    * @param {String} areaKey - 地区标识,如:'安徽@马鞍山',有些地区的接口只是取值上有不同,共有一个接口脚本, 需要通过地区标识确定一些特殊处理
@@ -11,8 +48,6 @@ INTERFACE_EXPORT = (() => {
    * @return {Promise<Array>} - 返回的数据结构必须按照规定:[{ data, exportKind, fileName }],参考web\building_saas\standard_interface\index.js中的注释说明
    */
   async function entry(areaKey, exportKind, projectData, tenderDetailMap) {
-    console.log(areaKey)
-    //<CprjInfo CprjName="中山接口报错" CprjType="QDYS">
     const {
       UTIL,
       Element,
@@ -158,17 +193,62 @@ INTERFACE_EXPORT = (() => {
         Element.call(this, 'RateParam', attrs);
       }
 
+      let RateValues = {
+        name: 'RateValues',
+        attrs: [],
+        children: []
+      }
+
+      function RateValue(CostTypeNo, RateTypeNo) {
+        //<RateParam RateTypeNo="DJSGZJFFL" RateParamNo="0" Ratio="100"/>
+        const attrs = [{
+          name: 'CostTypeNo',
+          value: CostTypeNo
+        }, {
+          name: 'RateTypeNo',
+          value: RateTypeNo
+        }, {
+          name: 'RateValue',
+          value: '0'
+        }];
+        Element.call(this, 'RateValue', attrs);
+      }
 
 
+      let prefix = "";
+      for (let r of feeRateInfo.rates) {
+        if (!r.ParentID && feeRateMap[r.name]) prefix = feeRateMap[r.name];
+        if (feeRateMap[r.name] && r.ParentID) {
+          RateValues.children.push(new RateValue(prefix, feeRateMap[r.name]));
+        }
+      }
+
+      this.children.push(RateValues);
+
     }
 
+    function Pract(fileName) {
+      //<RateParam RateTypeNo="DJSGZJFFL" RateParamNo="0" Ratio="100"/>
+      const attrs = [{
+        name: 'PractNo',
+        value: 1
+      }, {
+        name: 'Name',
+        value: fileName
+      }];
+      Element.call(this, 'Pract', attrs);
+
+
+
+    }
 
     let data = new CprjInfo(projectData.name);
     data.children.push(new SystemInfo());
     data.children.push(new CostBasis());
-    let feeRataDatas = tenderDetailMap[projectObj.project.ID()].FeeRate.datas;
+    let tenderProject = tenderDetailMap[projectObj.project.ID()];
+    let feeRataDatas = tenderProject.FeeRate.datas;
     data.children.push(new Rate(feeRataDatas));
-
+    let property = tenderProject
 
 
 
@@ -180,6 +260,6 @@ INTERFACE_EXPORT = (() => {
 
   }
   return {
-    entry,
+    entry
   };
 })();

+ 134 - 64
web/over_write/js/quanguo_2018.js

@@ -1,79 +1,149 @@
 const progression = [];
 const deficiency = {};
 if (typeof module !== 'undefined' && !module.nodeType) {
-    module.exports = {
-        progression,
-        deficiency
-    };
+  module.exports = {
+    progression,
+    deficiency
+  };
 }
 
 
 let isQG2018 = true;
+
 function overwriteRationCalcBases() {
-    if (typeof rationCalcBases == 'undefined') return;
-    for (let key in rationCalcBases) delete rationCalcBases[key];
+  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.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);
-    };
+  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: '直接费' },
+  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: 'labour', name: '定额人工费' },
-        { type: 'material', name: '定额材料费' },
-        { type: 'machine', name: '定额施工机械使用费' },
-        { type: 'equipment', name: '定额设备费' },
-        { type: 'direct', name: '定额直接费' },
+    {
+      type: 'measure',
+      name: '措施费'
+    },
+    {
+      type: 'manage',
+      name: '企业管理费'
+    },
+    {
+      type: 'force',
+      name: '规费'
+    },
+    {
+      type: 'profit',
+      name: '利润'
+    },
+    {
+      type: 'tax',
+      name: '税金'
+    },
+    {
+      type: 'common',
+      name: '建安费'
+    },
+    {
+      type: 'rationCommon',
+      name: '定额建安费'
+    }
+  ];
+})();
 
-        { type: 'measure', name: '措施费' },
-        { type: 'manage', name: '企业管理费' },
-        { type: 'force', name: '规费' },
-        { type: 'profit', name: '利润' },
-        { type: 'tax', name: '税金' },
-        { type: 'common', name: '建安费' },
-        { type: 'rationCommon', name: '定额建安费' }
-    ];
-})();
+//全国工地转移、综合里程费率值修改特殊处理
+if (typeof feeRateObject !== 'undefined') {
+  feeRateObject.feeRateSpecialHandle = function (subRate, value) {
+    let result = {};
+    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 < 3) { //综合里程3km以内按3km算
+      result.valueKey = "3";
+      result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
+    }
+    return result;
+  }
+}

+ 283 - 225
web/over_write/js/shandong_2016.js

@@ -1,248 +1,306 @@
 let isSD2016 = true;
+
 function overwriteRationCalcBases() {
-    if (typeof rationCalcBases == 'undefined') return;
-    for (let key in rationCalcBases) delete rationCalcBases[key];
+  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.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptMarketPrice, isTender);
-    };
-    rationCalcBases['外购砼构件费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptMarketPrice, isTender);
-    };
+  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.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptMarketPrice, isTender);
+  };
+  rationCalcBases['外购砼构件费'] = function (node, isTender) {
+    return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptMarketPrice, isTender);
+  };
 };
 
 (function overwriteFeeTypes() {
-    if (typeof cpFeeTypes == 'undefined') return;
-    cpFeeTypes = [
-        { type: 'marketDirect', name: '直接费' },
-        { type: 'marketDirectWork', name: '直接工程费' },
-        { type: 'marketLabour', name: '人工费' },
-        { type: 'marketMaterial', name: '材料费' },
-        { type: 'marketMachine', name: '施工机械使用费' },
-        { type: 'otherFee', name: '其它工程费' },
-        { type: 'otherFee1', name: '其它工程费I' },
-        { type: 'otherFee2', name: '其它工程费II' },
-        { type: 'indirectFee', name: '间接费' },
-        { type: 'manage', name: '企业管理费' },
-        { type: 'force', name: '规费' },
-        { type: 'profit', name: '利润' },
-        { type: 'tax', name: '税金' },
-        { type: 'common', name: '建安费' }
-    ];
+  if (typeof cpFeeTypes == 'undefined') return;
+  cpFeeTypes = [{
+      type: 'marketDirect',
+      name: '直接费'
+    },
+    {
+      type: 'marketDirectWork',
+      name: '直接工程费'
+    }, {
+      type: 'marketLabour',
+      name: '人工费'
+    },
+    {
+      type: 'marketMaterial',
+      name: '材料费'
+    },
+    {
+      type: 'marketMachine',
+      name: '施工机械使用费'
+    },
+    {
+      type: 'otherFee',
+      name: '其它工程费'
+    },
+    {
+      type: 'otherFee1',
+      name: '其它工程费I'
+    },
+    {
+      type: 'otherFee2',
+      name: '其它工程费II'
+    },
+    {
+      type: 'indirectFee',
+      name: '间接费'
+    },
+    {
+      type: 'manage',
+      name: '企业管理费'
+    },
+    {
+      type: 'force',
+      name: '规费'
+    },
+    {
+      type: 'profit',
+      name: '利润'
+    },
+    {
+      type: 'tax',
+      name: '税金'
+    },
+    {
+      type: 'common',
+      name: '建安费'
+    }
+  ]
 })();
 
 // 清单基数
 const progression = ['养护工程管理费', '养护工程设计费'];
 const deficiency = {};
 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: null,
-            filter: [fixedFlag.SAFE_COST],
-            pick: true
-        },
-        // 显示:除清单固定类别是“建筑安装工程费”、“土地使用及拆迁补偿费”的以外部分可显示。
-        '土地使用及拆迁补偿费': {
-            base: 'TDSYJCQBCF',
-            fixedFlag: fixedFlag.LAND_USED_DEMOLITION,
-            filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE, fixedFlag.LAND_USED_DEMOLITION],
-            pick: false,
-        },
-        // 显示:除清单固定类别是“建筑安装工程费”、“土地使用及拆迁补偿费”、“工程建设其他费用”的以外部分可显示。
-        '工程建设其他费用': {
-            base: 'GCJSQTFY',
-            fixedFlag: fixedFlag.MAINTENANCE_EXPENSES,
-            filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE, fixedFlag.LAND_USED_DEMOLITION, fixedFlag.MAINTENANCE_EXPENSES],
-            pick: false,
-        },
-        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
-        '养护工程管理费': {
-            isProgressive: true,
-            base: 'YHGCGLF',
-            fixedFlag: null,
-            filter: [fixedFlag.MAINTENANCE_EXPENSES],
-            pick: true,
-        },
-        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
-        '养护工程设计费': {
-            isProgressive: true,
-            base: 'YHGCSJF',
-            fixedFlag: null,
-            filter: [fixedFlag.MAINTENANCE_EXPENSES],
-            pick: true,
-        },
-        // 显示:仅“价差预备费”可显示
-        '价差预备费': {
-            base: 'JCYBF',
-            fixedFlag: null,
-            filter: [fixedFlag.SPREAD_BUDGET_FEE],
-            pick: true,
-        },
-    };
-    const boqMap = {
-        //仅允许用于固定类别是“第100章至700章清单”以外的清单
-        '各章清单合计': {
-            base: 'GZQDHJ',
-            fixedFlag: fixedFlag.ONE_SEVEN_BILLS,
-            filter: [fixedFlag.ONE_SEVEN_BILLS],
-            pick: false
-        },
-        //仅允许用于固定类别是“第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 {
+    fixedFlag
+  } = commonConstants;
+  const budgetMap = {
+    // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
+    '建筑安装工程费': {
+      base: 'JZAZGCF',
+      fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+      pick: false,
+    },
+    // 显示:仅清单固定类别是“安全生产费”的可显示。
+    '建筑安装工程费(不含设备费)': {
+      base: 'JZAZGCFBHSB',
+      fixedFlag: null,
+      filter: [fixedFlag.SAFE_COST],
+      pick: true
+    },
+    // 显示:除清单固定类别是“建筑安装工程费”、“土地使用及拆迁补偿费”的以外部分可显示。
+    '土地使用及拆迁补偿费': {
+      base: 'TDSYJCQBCF',
+      fixedFlag: fixedFlag.LAND_USED_DEMOLITION,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE, fixedFlag.LAND_USED_DEMOLITION],
+      pick: false,
+    },
+    // 显示:除清单固定类别是“建筑安装工程费”、“土地使用及拆迁补偿费”、“工程建设其他费用”的以外部分可显示。
+    '工程建设其他费用': {
+      base: 'GCJSQTFY',
+      fixedFlag: fixedFlag.MAINTENANCE_EXPENSES,
+      filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE, fixedFlag.LAND_USED_DEMOLITION, fixedFlag.MAINTENANCE_EXPENSES],
+      pick: false,
+    },
+    // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+    '养护工程管理费': {
+      isProgressive: true,
+      base: 'YHGCGLF',
+      fixedFlag: null,
+      filter: [fixedFlag.MAINTENANCE_EXPENSES],
+      pick: true,
+    },
+    // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+    '养护工程设计费': {
+      isProgressive: true,
+      base: 'YHGCSJF',
+      fixedFlag: null,
+      filter: [fixedFlag.MAINTENANCE_EXPENSES],
+      pick: true,
+    },
+    // 显示:仅“价差预备费”可显示
+    '价差预备费': {
+      base: 'JCYBF',
+      fixedFlag: null,
+      filter: [fixedFlag.SPREAD_BUDGET_FEE],
+      pick: true,
+    },
+  };
+  const boqMap = {
+    //仅允许用于固定类别是“第100章至700章清单”以外的清单
+    '各章清单合计': {
+      base: 'GZQDHJ',
+      fixedFlag: fixedFlag.ONE_SEVEN_BILLS,
+      filter: [fixedFlag.ONE_SEVEN_BILLS],
+      pick: false
+    },
+    //仅允许用于固定类别是“第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;
 }
 
 if (typeof baseFigureTemplate !== 'undefined') {
-    const { fixedFlag } = commonConstants;
-    baseFigureTemplate.budget = {
-        // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
-        JZAZGCF(tender) {
-            return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
-        },
-        // 土地使用及拆迁补偿费 算法:取清单固定类别是“土地使用及拆迁补偿费”的金额。
-        TDSYJCQBCF(tender) {
-            return cbTools.getBaseFee(fixedFlag.LAND_USED_DEMOLITION, tender, 'common');
-        },
-        // 工程建设其他费用 算法:取清单固定类别是“养护工程其他费用”的金额。
-        GCJSQTFY(tender) {
-            return cbTools.getBaseFee(fixedFlag.MAINTENANCE_EXPENSES, tender, 'common');
-        },
-        // 养护工程管理费 算法:以{建筑安装工程费}为基数,采用累进办法计算
-        YHGCGLF(tender) {
-            const baseFee = this['JZAZGCF'](tender);
-            if (!tender) {
-                calcBase.baseProgressiveFee = baseFee;
-            }
-            return calculateUtil.getProgressiveFee(baseFee, '养护工程管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
-        },
+  const {
+    fixedFlag
+  } = commonConstants;
+  baseFigureTemplate.budget = {
+    // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
+    JZAZGCF(tender) {
+      return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
+    },
+    // 土地使用及拆迁补偿费 算法:取清单固定类别是“土地使用及拆迁补偿费”的金额。
+    TDSYJCQBCF(tender) {
+      return cbTools.getBaseFee(fixedFlag.LAND_USED_DEMOLITION, tender, 'common');
+    },
+    // 工程建设其他费用 算法:取清单固定类别是“养护工程其他费用”的金额。
+    GCJSQTFY(tender) {
+      return cbTools.getBaseFee(fixedFlag.MAINTENANCE_EXPENSES, tender, 'common');
+    },
+    // 养护工程管理费 算法:以{建筑安装工程费}为基数,采用累进办法计算
+    YHGCGLF(tender) {
+      const baseFee = this['JZAZGCF'](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(baseFee, '养护工程管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+    },
 
-        // 养护工程设计费 算法:以{建筑安装工程费}为基数,采用累进办法计算。
-        YHGCSJF(tender) {
-            const baseFee = this['JZAZGCF'](tender);
-            if (!tender) {
-                calcBase.baseProgressiveFee = baseFee;
-            }
-            return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
-        },
-        /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
-            价差预备费 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);
-        }
+    // 养护工程设计费 算法:以{建筑安装工程费}为基数,采用累进办法计算。
+    YHGCSJF(tender) {
+      const baseFee = this['JZAZGCF'](tender);
+      if (!tender) {
+        calcBase.baseProgressiveFee = baseFee;
+      }
+      return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+    },
+    /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
+        价差预备费 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章清单”的金额
+    'GZQDHJ': function (tender) {
+      return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'common');
+    },
+    //{专项暂定合计}
+    // 汇总专项暂定列有值的清单的金额
+    'ZXZDHJ': function (tender) {
+      let rst = 0,
+        feeField = 'common',
+        subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+      let billsData = calcBase.project.Bills.datas,
+        filterData = billsData.filter(function (data) {
+          return data.specialProvisional;
+        });
+      for (let data of filterData) {
+        if (cbTools.isUnDef(data.feesIndex) || _.isEmpty(data.feesIndex) ||
+          cbTools.isUnDef(data.feesIndex[feeField]) || cbTools.isUnDef(data.feesIndex[feeField][subFeeField])) {
+          continue;
+        }
+        rst += data.feesIndex[feeField][subFeeField];
+      }
+      return rst.toDecimal(decimalObj.bills.totalPrice);
+    },
+    //{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 = [];
 
-    baseFigureTemplate.boq = {
-        //{各章清单合计}
-        // 取清单固定类别是“第100章至700章清单”的金额
-        'GZQDHJ': function (tender) {
-            return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'common');
-        },
-        //{专项暂定合计}
-        // 汇总专项暂定列有值的清单的金额
-        'ZXZDHJ': function (tender) {
-            let rst = 0,
-                feeField = 'common',
-                subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
-            let billsData = calcBase.project.Bills.datas,
-                filterData = billsData.filter(function (data) {
-                    return data.specialProvisional;
-                });
-            for (let data of filterData) {
-                if (cbTools.isUnDef(data.feesIndex) || _.isEmpty(data.feesIndex) ||
-                    cbTools.isUnDef(data.feesIndex[feeField]) || cbTools.isUnDef(data.feesIndex[feeField][subFeeField])) {
-                    continue;
-                }
-                rst += data.feesIndex[feeField][subFeeField];
-            }
-            return rst.toDecimal(decimalObj.bills.totalPrice);
-        },
-        //{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);
+      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 feeRateObject !== 'undefined') {
+  feeRateObject.feeRateSpecialHandle = function (subRate, value) {
+    let result = {};
+    if (subRate.name == "工地转移(km)" && value && value < 50) { //工地转移50km以内按50km算
+      result.valueKey = "50";
+      result.value = scMathUtil.roundForObj(value, getDecimal("feeRate")); //设置显示的节点值
+    }
+    return result;
+  }
 }
 
 if (typeof module !== 'undefined' && !module.nodeType) {
-    module.exports = {
-        progression,
-        deficiency,
-        getDefalutAssistProductionFeeRate: function () {
-            return 5
-        }
-    };
+  module.exports = {
+    progression,
+    deficiency,
+    getDefalutAssistProductionFeeRate: function () {
+      return 5
+    }
+  };
 }