瀏覽代碼

代码调整。

Chenshilong 7 年之前
父節點
當前提交
662d223f8f

+ 1 - 1
config/gulpConfig.js

@@ -40,7 +40,7 @@ module.exports = {
         '!lib/JSExpressionEval_src/JsHashMap.js',
         'lib/jquery-contextmenu/*.js',
         'lib/lodash/lodash.js',
-        'test/tmp_data/test_ration_calc/ration_calc_base.js',
+        // 'test/tmp_data/test_ration_calc/ration_calc_base.js',
         'web/building_saas/main/js/models/main_consts.js',
         'web/building_saas/glj/js/project_glj.js',
         'web/building_saas/glj/js/composition.js',

+ 3 - 90
test/tmp_data/test_ration_calc/ration_calc_base.js

@@ -3,97 +3,10 @@
  */
 "use strict";
 
-const baseCalc = 0, adjustCalc = 1, budgetCalc = 2, diffCalc = 3,  offerCalc = 4;
-
-const gljType = {
-    // 人工
-    LABOUR: 1,
-    // ==============材料类型=================
-    // 普通材料
-    GENERAL_MATERIAL: 201,
-    // 混凝土
-    CONCRETE: 202,
-    // 砂浆
-    MORTAR: 203,
-    // 配合比
-    MIX_RATIO: 204,
-    // 商品混凝土
-    COMMERCIAL_CONCRETE: 205,
-    // 商品砂浆
-    COMMERCIAL_MORTAR: 206,
-    // ==============材料类型=================
-    // ==============机械类型=================
-    // 普通机械
-    GENERAL_MACHINE: 301,
-    // 机械组成物
-    MACHINE_COMPOSITION: 302,
-    // 机上人工
-    MACHINE_LABOUR: 303,
-    // ==============机械类型=================
-    // 主材
-    MAIN_MATERIAL: 4,
-    // 设备
-    EQUIPMENT: 5
-};
-
-let rationCalcBase = [
-    {
-        'dispName': '定额基价人工费',
-        'calcFun': 'base',
-        'calcType': baseCalc,
-        'gljTypes': [gljType.LABOUR]
-    },
-    {
-        'dispName': '定额基价材料费',
-        'calcFun': 'base',
-        'calcType': baseCalc,
-        'gljTypes': [gljType.GENERAL_MATERIAL, gljType.CONCRETE, gljType.MORTAR, gljType.MIX_RATIO, gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR]
-    },
-    {
-        'dispName': '定额基价机械费',
-        'calcFun': 'base',
-        'calcType': baseCalc,
-        'gljTypes': [gljType.GENERAL_MACHINE]
-    },
-    {
-        'dispName': '定额基价机上人工费',
-        'calcFun': 'base',
-        'calcType': baseCalc,
-        'gljTypes': [gljType.MACHINE_LABOUR]
-    },
-    {
-        'dispName': '人工费价差',
-        'calcFun': 'diff',
-        'calcType': diffCalc,
-        'gljTypes': [gljType.LABOUR]
-    },
-    {
-        'dispName': '材料费价差',
-        'calcFun': 'diff',
-        'calcType': diffCalc,
-        'gljTypes': [gljType.GENERAL_MATERIAL, gljType.CONCRETE, gljType.MORTAR, gljType.MIX_RATIO, gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR]
-    },
-    {
-        'dispName': '机械费价差',
-        'calcFun': 'diff',
-        'calcType': diffCalc,
-        'gljTypes': [gljType.GENERAL_MACHINE]
-    },
-    {
-        'dispName': '主材费',
-        'calcFun': 'budget',
-        'calcType': budgetCalc,
-        'gljTypes': [gljType.MAIN_MATERIAL]
-    },
-    {
-        'dispName': '设备费',
-        'calcFun': 'budget',
-        'calcType': budgetCalc,
-        'gljTypes': [gljType.EQUIPMENT]
-    }
-];
+// 这里的代码分别移到main_costs.js中和calc_program.js中,目的是相关内容集中放置,减少重复声明,减少单元引用。
 
 // 该方法暂时不用,已使用中文预编译的方式代替,但可靠性有待验证,若有问题再用回来。
+/*
 function getRationCalcBase(dispName){
     for (let base of rationCalcBase) {
        if (base.dispName == dispName) {
@@ -101,4 +14,4 @@ function getRationCalcBase(dispName){
        };
     }
     return null;
-};
+};*/

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

@@ -620,7 +620,7 @@
 
 
         <!-- inject:js -->
-        <script type="text/javascript" src="/test/tmp_data/test_ration_calc/ration_calc_base.js"></script>
+        <!--<script type="text/javascript" src="/test/tmp_data/test_ration_calc/ration_calc_base.js"></script>-->
         <script type="text/javascript" src="/web/building_saas/main/js/models/main_consts.js"></script>
         <script type="text/javascript" src="/web/building_saas/glj/js/project_glj.js"></script>
         <script type="text/javascript" src="/web/building_saas/glj/js/composition.js"></script>

+ 1 - 1
web/building_saas/main/js/calc/bills_calc.js

@@ -2,7 +2,7 @@
  * Created by Mai on 2017/7/5.
  */
 
-const rationContent = 0, rationPrice = 1, rationPriceConverse = 2, billsPrice = 3;
+// const rationContent = 0, rationPrice = 1, rationPriceConverse = 2, billsPrice = 3;
 
 // sumTotalFeeFlag: sum(child.totalFee), totalFeeFlag: bills.quantity × bills.unitFee
 const sumTotalFeeFlag = 0, totalFeeFlag = 1;

+ 61 - 5
web/building_saas/main/js/models/calc_program.js

@@ -100,6 +100,56 @@ let defaultBillTemplate = {
     ]
 };
 
+const baseCalcType = {baseCalc: 0, adjustCalc: 1, budgetCalc: 2, diffCalc: 3,  offerCalc: 4};
+
+let rationCalcBase = [
+    {
+        'dispName': '定额基价人工费',
+        'calcType': baseCalcType.baseCalc,
+        'gljTypes': [gljType.LABOUR]
+    },
+    {
+        'dispName': '定额基价材料费',
+        'calcType': baseCalcType.baseCalc,
+        'gljTypes': [gljType.GENERAL_MATERIAL, gljType.CONCRETE, gljType.MORTAR, gljType.MIX_RATIO, gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR]
+    },
+    {
+        'dispName': '定额基价机械费',
+        'calcType': baseCalcType.baseCalc,
+        'gljTypes': [gljType.GENERAL_MACHINE]
+    },
+    {
+        'dispName': '定额基价机上人工费',
+        'calcType': baseCalcType.baseCalc,
+        'gljTypes': [gljType.MACHINE_LABOUR]
+    },
+    {
+        'dispName': '人工费价差',
+        'calcType': baseCalcType.diffCalc,
+        'gljTypes': [gljType.LABOUR]
+    },
+    {
+        'dispName': '材料费价差',
+        'calcType': baseCalcType.diffCalc,
+        'gljTypes': [gljType.GENERAL_MATERIAL, gljType.CONCRETE, gljType.MORTAR, gljType.MIX_RATIO, gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR]
+    },
+    {
+        'dispName': '机械费价差',
+        'calcType': baseCalcType.diffCalc,
+        'gljTypes': [gljType.GENERAL_MACHINE]
+    },
+    {
+        'dispName': '主材费',
+        'calcType': baseCalcType.budgetCalc,
+        'gljTypes': [gljType.MAIN_MATERIAL]
+    },
+    {
+        'dispName': '设备费',
+        'calcType': baseCalcType.budgetCalc,
+        'gljTypes': [gljType.EQUIPMENT]
+    }
+];
+
 let analyzer = {
     calcTemplate: null,
     success: true,
@@ -316,7 +366,7 @@ let executeObj = {
                     ( me.treeNode.data.subType === gljType.GENERAL_MACHINE && base.dispName === '定额基价机械费') ||
                     ( me.treeNode.data.subType === gljType.MAIN_MATERIAL && base.dispName === '主材费') ||
                     ( me.treeNode.data.subType === gljType.EQUIPMENT && base.dispName === '设备费')
-                ) result = me.treeNode.data.marketUnitFee;
+                ) result = me.treeNode.data.marketUnitFee ? me.treeNode.data.marketUnitFee : 0;
 
                 return result;
             };
@@ -541,6 +591,13 @@ class CalcProgram {
         };
     };
 
+    isLeafBill(treeNode){
+        let me = this;
+        return treeNode.sourceType === me.project.Bills.getSourceType() &&
+               treeNode.source.children &&
+               treeNode.source.children.length === 0;
+    };
+
     // 仅内部调用。注意:外部不能直接使用,因为这里传入的树节点必须有一定的初始化。
     InnerCalc(treeNode){
         let me = this;
@@ -676,7 +733,7 @@ class CalcProgram {
                 };
             }
         };
-    }
+    };
 
     // 计算本节点(默认同时递归计算所有父节点,可选)
     calculate(treeNode, calcParents = true){
@@ -684,13 +741,12 @@ class CalcProgram {
 
         let isRation = treeNode.sourceType === me.project.Ration.getSourceType();
         let isBill = treeNode.sourceType === me.project.Bills.getSourceType();
-        let isLeafBill = isBill && treeNode.source.children && treeNode.source.children.length === 0;   // 是清单且其下没有子清单
-        let isBillPriceCalc = me.project.projSetting.billsCalcMode === billsPrice;
+        let isBillPriceCalc = me.project.projSetting.billsCalcMode === leafBillGetFeeType.billsPrice;
 
         if (isRation){
             treeNode.calcType = treeNodeCalcType.ctRationCalcProgram;
         }
-        else if (isLeafBill) {
+        else if (me.isLeafBill(treeNode)) {
             if (treeNode.children && treeNode.children.length > 0){
                 me.calcLeafBillChildren(treeNode);
 

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

@@ -17,6 +17,37 @@ const ModuleNames = {
     calc_program: 'calc_program'
 };
 
+const gljType = {
+    // 人工
+    LABOUR: 1,
+    // ==============材料类型=================
+    // 普通材料
+    GENERAL_MATERIAL: 201,
+    // 混凝土
+    CONCRETE: 202,
+    // 砂浆
+    MORTAR: 203,
+    // 配合比
+    MIX_RATIO: 204,
+    // 商品混凝土
+    COMMERCIAL_CONCRETE: 205,
+    // 商品砂浆
+    COMMERCIAL_MORTAR: 206,
+    // ==============材料类型=================
+    // ==============机械类型=================
+    // 普通机械
+    GENERAL_MACHINE: 301,
+    // 机械组成物
+    MACHINE_COMPOSITION: 302,
+    // 机上人工
+    MACHINE_LABOUR: 303,
+    // ==============机械类型=================
+    // 主材
+    MAIN_MATERIAL: 4,
+    // 设备
+    EQUIPMENT: 5
+};
+
 const feeRate_consts={
     decimal:3
 };
@@ -84,4 +115,12 @@ const rationType = {
     ration: 1,
     volumePrice: 2,
     gljRation: 3
-};
+};
+
+const leafBillGetFeeType = {
+    rationContent: 0,
+    rationPrice: 1,
+    rationPriceConverse: 2,
+    billsPrice: 3
+};
+

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

@@ -37,7 +37,7 @@ let MainTreeCol = {
         calcProgramName: function (node) {
             if (
                 node.sourceType === projectObj.project.Ration.getSourceType() ||
-                (node.sourceType === projectObj.project.Bills.getSourceType() && node.source.children && node.source.children.length === 0 && projectObj.project.projSetting.billsCalcMode === billsPrice)
+                (projectObj.project.calcProgram.isLeafBill(node) && projectObj.project.projSetting.billsCalcMode === leafBillGetFeeType.billsPrice)
             ) return false
             else return true;
         },
@@ -100,7 +100,7 @@ let MainTreeCol = {
         calcProgramName: function (node) {
             if (
                 node.sourceType === projectObj.project.Ration.getSourceType() ||
-                (node.sourceType === projectObj.project.Bills.getSourceType() && node.source.children && node.source.children.length === 0 && projectObj.project.projSetting.billsCalcMode === billsPrice)
+                (projectObj.project.calcProgram.isLeafBill(node) && projectObj.project.projSetting.billsCalcMode === leafBillGetFeeType.billsPrice)
             ) {
                 var names = new GC.Spread.Sheets.CellTypes.ComboBox();
                 names.items(projectObj.project.calcProgram.compiledTemplateNames);