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

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhangweicheng пре 7 година
родитељ
комит
4e4fea9ad0

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

@@ -718,7 +718,7 @@
     <!--弹出 清单 计算基数-->
     <div class="modal fade" id="qd-jsjs" data-backdrop="static">
         <div class="modal-dialog" role="document">
-            <div class="modal-content">
+            <div class="modal-content" style="width:670px;">
                 <div class="modal-header">
                     <h5 class="modal-title">计算基础选择</h5>
                     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
@@ -737,8 +737,42 @@
                             <button class="btn btn-secondary btn-sm" id="rightOpr">)</button>
                         </p>
                     </div>
-                    <div class=" modal-auto-height" style="overflow: hidden" id="billsBaseSpread">
+                    <div class="row" id="cbRowDiv">
+                        <div class="col-3" id="cbClassList">
+                            <ul class="list-unstyled">
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_ALL" class="btn btn-outline-secondary btn-sm active" href="javascript:void(0)">所有</a>
+                                </li>
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_FBFX"  href="javascript:void(0);">分部分项</a>
+                                </li>
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_CSXM" href="javascript:void(0)">措施项目</a>
+                                </li>
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_QTXM" href="javascript:void(0)">其他项目</a>
+                                </li>
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_FBF" href="javascript:void(0)">分包费</a>
+                                </li>
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_RCJ" href="javascript:void(0)">人材机</a>
+                                </li>
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_GF" href="javascript:void(0)">规费</a>
+                                </li>
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_SJ" href="javascript:void(0)">税金</a>
+                                </li>
+                                <li class="py-1" style="margin-left: 50px;">
+                                    <a id="cb_SQGCZJ" href="javascript:void(0)">税前工程造价</a>
+                                </li>
+                            </ul>
+                        </div>
+                        <div class=" modal-auto-height col-9" style="overflow: hidden" id="billsBaseSpread">
+                        </div>
                     </div>
+
                 </div>
                 <div class="modal-footer">
                     <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>

+ 72 - 72
web/building_saas/main/js/models/calc_base.js

@@ -379,7 +379,7 @@ let baseFigureTemplate = {
         }
         return rst;
     },
-    'FBFXGCLQDJJZJGCF': function () {
+    'FBFXDEJJZJGCF': function () {
         return (this['FBFXDEJJRGF']() + this['FBFXDEJJCLF']() + this['FBFXDEJJJXF']()).toDecimal(decimalObj.bills.totalPrice);
     },
     'CSXMF': function () {
@@ -478,7 +478,7 @@ let baseFigureTemplate = {
         }
         return rst;
     },
-    'JSCSXMQDDEJJZJGCF': function () {
+    'JSCSXMDEJJZJGCF': function () {
         return (this['JSCSXMDEJJRGF']() + this['JSCSXMDEJJCLF']() + this['JSCSXMDEJJJXF']()).toDecimal(decimalObj.bills.totalPrice);
     },
     'QTXMF': function () {
@@ -902,79 +902,79 @@ let baseFigureTemplate = {
     }
 };
 
-//基数的值不是通过清单节点获得的,则该基数的fixedBill为空,如价差、甲供、分包
+//基数的值不是通过清单节点获得的,则该基数的fixedBill为空,如价差、甲供、分包; class:分类,用于基数选择界面分类显示
 let baseFigureMap = {
     //与清单直接关联=======
-    '分部分项工程费': {base: 'FBFXGCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项定额基价人工费': {base: 'FBFXDEJJRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项定额基价材料费': {base: 'FBFXDEJJCLF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项定额基价机械费': {base: 'FBFXDEJJJXF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项调整人工费': {base: 'FBFXTZRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项调整机上人工费': {base: 'FBFXTZJSRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项主材费': {base: 'FBFXZCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项设备费': {base: 'FBFXSBF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项未计价材料费': {base: 'FBFXWJJCLF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项人工工日': {base: 'FBFXRGGR', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '分部分项工程量清单中的基价直接工程费': {base: 'FBFXGCLQDJJZJGCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
-    '措施项目费': {base: 'CSXMF', fixedFlag: fixedFlag.MEASURE},
-    '组织措施项目费': {base: 'ZZCSXMF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
-    '组织措施项目定额基价直接工程费': {base: 'ZZCSXMDEJJZJGCF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
-    '组织措施项目定额基价人工费': {base: 'ZZCSXMDEJJRGF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
-    '组织措施项目定额基价材料费': {base: 'ZZCSXMDEJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
-    '组织措施项目定额基价机械费': {base: 'ZZCSXMDEJJJXF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
-    '技术措施项目费': {base: 'JSCSXMF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目定额基价人工费': {base: 'JSCSXMDEJJRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目定额基价材料费': {base: 'JSCSXMDEJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目定额基价机械费': {base: 'JSCSXMDEJJJXF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目调整人工费': {base: 'JSCSXMTZRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目调整机上人工费': {base: 'JSCSXMTZJSRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目主材费': {base: 'JSCSXMZCF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目设备费': {base: 'JSCSXMSBF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目未计价材料费': {base: 'JSCSXMWJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目人工工日': {base: 'JSCSXMRGGR', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '技术措施项目清单中的定额基价直接工程费': {base: 'JSCSXMQDDEJJZJGCF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
-    '其他项目费': {base: 'QTXMF',  fixedFlag: fixedFlag.OTHER},
-    '规费': {base: 'GF', fixedFlag: fixedFlag.CHARGE},
-    '税金': {base: 'SJ', fixedFlag: fixedFlag.TAX},
+    '分部分项工程费': {base: 'FBFXGCF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项定额基价人工费': {base: 'FBFXDEJJRGF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项定额基价材料费': {base: 'FBFXDEJJCLF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项定额基价机械费': {base: 'FBFXDEJJJXF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项调整人工费': {base: 'FBFXTZRGF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项调整机上人工费': {base: 'FBFXTZJSRGF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项主材费': {base: 'FBFXZCF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项设备费': {base: 'FBFXSBF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项未计价材料费': {base: 'FBFXWJJCLF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项人工工日': {base: 'FBFXRGGR', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '分部分项定额基价直接工程费': {base: 'FBFXDEJJZJGCF', fixedFlag: fixedFlag.SUB_ENGINERRING, class: 'FBFX'},
+    '措施项目费': {base: 'CSXMF', fixedFlag: fixedFlag.MEASURE, class: 'CSXM'},
+    '组织措施项目费': {base: 'ZZCSXMF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION, class: 'CSXM'},
+    '组织措施项目定额基价直接工程费': {base: 'ZZCSXMDEJJZJGCF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION, class: 'CSXM'},
+    '组织措施项目定额基价人工费': {base: 'ZZCSXMDEJJRGF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION, class: 'CSXM'},
+    '组织措施项目定额基价材料费': {base: 'ZZCSXMDEJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION, class: 'CSXM'},
+    '组织措施项目定额基价机械费': {base: 'ZZCSXMDEJJJXF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION, class: 'CSXM'},
+    '技术措施项目费': {base: 'JSCSXMF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目定额基价人工费': {base: 'JSCSXMDEJJRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目定额基价材料费': {base: 'JSCSXMDEJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目定额基价机械费': {base: 'JSCSXMDEJJJXF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目调整人工费': {base: 'JSCSXMTZRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目调整机上人工费': {base: 'JSCSXMTZJSRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目主材费': {base: 'JSCSXMZCF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目设备费': {base: 'JSCSXMSBF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目未计价材料费': {base: 'JSCSXMWJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目人工工日': {base: 'JSCSXMRGGR', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '技术措施项目定额基价直接工程费': {base: 'JSCSXMDEJJZJGCF', fixedFlag: fixedFlag.CONSTRUCTION_TECH, class: 'CSXM'},
+    '其他项目费': {base: 'QTXMF',  fixedFlag: fixedFlag.OTHER, class: 'QTXM'},
+    '规费': {base: 'GF', fixedFlag: fixedFlag.CHARGE, class: 'GF'},
+    '税金': {base: 'SJ', fixedFlag: fixedFlag.TAX, class: 'SJ'},
     //不于清单直接关联==========
-    '税前工程造价': {base: 'SQGCZJ'},//安全文明施工专项费用使用
-    '人材机价差': {base: 'RCJJC'},
-    '人工价差': {base: 'RGJC'},
-    '材料价差': {base: 'CLJC'},
-    '机械价差': {base: 'JXJC'},
-    '分部分项人材机价差': {base: 'FBFXRCJJC'},
-    '分部分项人工价差': {base: 'FBFXRGJC'},
-    '分部分项材料价差': {base: 'FBFXCLJC'},
-    '分部分项机械价差': {base: 'FBFXJXJC'},
-    '技术措施项目人材机价差': {base: 'JSCSXMRCJJC'},
-    '技术措施项目人工价差': {base: 'JSCSXMRGJC'},
-    '技术措施项目材料价差': {base: 'JSCSXMCLJC'},
-    '技术措施项目机械价差': {base: 'JSCSXMJXJC'},
-    '甲供定额基价人工费': {base: 'JGDEJJRGF'},
-    '甲供定额基价材料费': {base: 'JGDEJJCLF'},
-    '甲供定额基价机械费': {base: 'JGDEJJJXF'},
-    '甲供人工费': {base: 'JGRGF'},
-    '甲供材料费': {base: 'JGCLF'},
-    '甲供机械费': {base: 'JGJXF'},
-    '甲供主材费': {base: 'JGZCF'},
-    '甲供设备费': {base: 'JGSBF'},
-    '甲定定额基价人工费': {base: 'JDDEJJRGF'},
-    '甲定定额基价材料费': {base: 'JDDEJJCLF'},
-    '甲定定额基价机械费': {base: 'JDDEJJJXF'},
-    '甲定人工费': {base: 'JDRGF'},
-    '甲定材料费': {base: 'JDCLF'},
-    '甲定机械费': {base: 'JDJXF'},
-    '甲定主材费': {base: 'JDZCF'},
-    '甲定设备费': {base: 'JDSBF'},
-    '暂估材料费(从子目汇总)': {base: 'ZGCLFFZM'},
-    '暂估材料费(从工料机汇总表汇总)': {base: 'ZGCLFFGLJ'},
-    '分包费': {base: 'FBF'},
-    '分包定额基价人工费': {base: 'FBDEJJRGF'},
-    '分包定额基价材料费': {base: 'FBDEJJCLF'},
-    '分包定额基价机械费': {base: 'FBDEJJJXF'},
-    '分包主材费': {base: 'FBZCF'},
-    '分包设备费': {base: 'FBSBF'},
-    '分包人工工日': {base: 'FBRGGR'}
+    '税前工程造价': {base: 'SQGCZJ', class: 'SQGCZJ'},//安全文明施工专项费用使用
+    '人材机价差': {base: 'RCJJC', class: 'RCJ'},
+    '人工价差': {base: 'RGJC', class: 'RCJ'},
+    '材料价差': {base: 'CLJC', class: 'RCJ'},
+    '机械价差': {base: 'JXJC', class: 'RCJ'},
+    '分部分项人材机价差': {base: 'FBFXRCJJC', class: 'RCJ'},
+    '分部分项人工价差': {base: 'FBFXRGJC', class: 'RCJ'},
+    '分部分项材料价差': {base: 'FBFXCLJC', class: 'RCJ'},
+    '分部分项机械价差': {base: 'FBFXJXJC', class: 'RCJ'},
+    '技术措施项目人材机价差': {base: 'JSCSXMRCJJC', class: 'RCJ'},
+    '技术措施项目人工价差': {base: 'JSCSXMRGJC', class: 'RCJ'},
+    '技术措施项目材料价差': {base: 'JSCSXMCLJC', class: 'RCJ'},
+    '技术措施项目机械价差': {base: 'JSCSXMJXJC', class: 'RCJ'},
+    '甲供定额基价人工费': {base: 'JGDEJJRGF', class: 'RCJ'},
+    '甲供定额基价材料费': {base: 'JGDEJJCLF', class: 'RCJ'},
+    '甲供定额基价机械费': {base: 'JGDEJJJXF', class: 'RCJ'},
+    '甲供人工费': {base: 'JGRGF', class: 'RCJ'},
+    '甲供材料费': {base: 'JGCLF', class: 'RCJ'},
+    '甲供机械费': {base: 'JGJXF', class: 'RCJ'},
+    '甲供主材费': {base: 'JGZCF', class: 'RCJ'},
+    '甲供设备费': {base: 'JGSBF', class: 'RCJ'},
+    '甲定定额基价人工费': {base: 'JDDEJJRGF', class: 'RCJ'},
+    '甲定定额基价材料费': {base: 'JDDEJJCLF', class: 'RCJ'},
+    '甲定定额基价机械费': {base: 'JDDEJJJXF', class: 'RCJ'},
+    '甲定人工费': {base: 'JDRGF', class: 'RCJ'},
+    '甲定材料费': {base: 'JDCLF', class: 'RCJ'},
+    '甲定机械费': {base: 'JDJXF', class: 'RCJ'},
+    '甲定主材费': {base: 'JDZCF', class: 'RCJ'},
+    '甲定设备费': {base: 'JDSBF', class: 'RCJ'},
+    '暂估材料费(从子目汇总)': {base: 'ZGCLFFZM', class: 'RCJ'},
+    '暂估材料费(从工料机汇总表汇总)': {base: 'ZGCLFFGLJ', class: 'RCJ'},
+    '分包费': {base: 'FBF', class: 'FBF'},
+    '分包定额基价人工费': {base: 'FBDEJJRGF', class: 'FBF'},
+    '分包定额基价材料费': {base: 'FBDEJJCLF', class: 'FBF'},
+    '分包定额基价机械费': {base: 'FBDEJJJXF', class: 'FBF'},
+    '分包主材费': {base: 'FBZCF', class: 'FBF'},
+    '分包设备费': {base: 'FBSBF', class: 'FBF'},
+    '分包人工工日': {base: 'FBRGGR', class: 'FBF'}
 };
 
 //输入式分析器

+ 98 - 16
web/building_saas/main/js/models/calc_program.js

@@ -97,7 +97,6 @@ let defaultBillTemplate = {
         }
     ]
 };*/
-
 let calcTools = {
     getNodeByFlag: function (flag) {
         let bill = cbTools.findBill(flag);
@@ -210,8 +209,8 @@ let calcTools = {
                 if (priceType == priceTypes.ptDiffPrice){
                     let aprice = me.uiGLJPrice(glj["adjustPrice"]);
                     let mprice = me.uiGLJPrice(glj["marketPrice"]);
-                    temp = (me.uiGLJQty(glj["quantity"]) * mprice).toDecimal(decimalObj.ration.unitPrice) - (me.uiGLJQty(glj["quantity"]) * aprice).toDecimal(decimalObj.ration.unitPrice);
-                    temp = temp.toDecimal(decimalObj.ration.unitPrice);
+                    temp = (me.uiGLJQty(glj["quantity"]) * mprice).toDecimal(decimalObj.process) - (me.uiGLJQty(glj["quantity"]) * aprice).toDecimal(decimalObj.process);
+                    temp = temp.toDecimal(decimalObj.process);
                 }
                 else {
                     if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"]);}
@@ -249,10 +248,10 @@ let calcTools = {
         }
         return result;
     },
-    // 这里的小数取舍比较复杂,必须严格遵循需求,不能随意改动,否则计算结果会差1分钱。
+    // 父清单暂估费的汇总计算走计算程序逻辑,不在这里。这里的小数取舍比较复杂,必须严格遵循需求,不能随意改动,否则计算结果会有误差:如差1分钱。
     estimateFee: function (treeNode, isBase = false){
         let me = this, sumU = 0, sumT = 0;
-        // 父清单暂估费的汇总计算走计算程序逻辑,不在这里。
+        // 总造价暂估费
         if (me.isTotalCostBill(treeNode)){
             let nodes = projectObj.project.mainTree.roots;
             for (let node of nodes){
@@ -348,11 +347,11 @@ let calcTools = {
         if (treeNode.data.type != rationType.volumePrice && treeNode.data.type != rationType.gljRation) return;
         let result = 0, me = this;
         if (
-            (treeNode.data.subType === gljType.LABOUR && baseName === '定额基价人工费') ||
-            (baseMaterialTypes.includes(treeNode.data.subType) && baseName === '定额基价材料费') ||
-            (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '定额基价机械费') ||
-            (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === '主材费') ||
-            (treeNode.data.subType === gljType.EQUIPMENT && baseName === '设备费')) {
+            (treeNode.data.subType === gljType.LABOUR && baseName === calcBaseNames.DEJJRGF) ||
+            (baseMaterialTypes.includes(treeNode.data.subType) && baseName === calcBaseNames.DEJJCLF) ||
+            (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.DEJJJXF) ||
+            (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === calcBaseNames.ZCF) ||
+            (treeNode.data.subType === gljType.EQUIPMENT && baseName === calcBaseNames.SBF)) {
             if (treeNode.data.type == rationType.volumePrice)
                 result = treeNode.data.marketUnitFee ? parseFloat(treeNode.data.marketUnitFee).toDecimal(decimalObj.ration.unitPrice) : 0
             else if (treeNode.data.type == rationType.gljRation)
@@ -360,7 +359,7 @@ let calcTools = {
                 // 这里因为是算基数所以要取基价,但不能直接取basePrice,受限于项目属性的三个选项。
                 result = gljOprObj.getBasePrice(treeNode);
         }
-        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '定额基价机上人工费') {
+        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.DEJJJSRGF) {
             let glj = {
                 'code': treeNode.data.code,
                 'name': treeNode.data.name,
@@ -373,9 +372,9 @@ let calcTools = {
         }
         else if (
             (treeNode.data.type == rationType.gljRation) &&
-            ((treeNode.data.subType === gljType.LABOUR && baseName === '人工费价差') ||
-                (baseMaterialTypes.includes(treeNode.data.subType) && baseName === '材料费价差') ||
-                (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '机械费价差'))
+            ((treeNode.data.subType === gljType.LABOUR && baseName === calcBaseNames.RGFJC) ||
+                (baseMaterialTypes.includes(treeNode.data.subType) && baseName === calcBaseNames.CLFJC) ||
+                (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.JXFJC))
         ) {
             let aprice = me.uiGLJPrice(treeNode.data.adjustPrice);
             let mprice = me.uiGLJPrice(treeNode.data.marketUnitFee);
@@ -383,6 +382,59 @@ let calcTools = {
         }
         return result;
     },
+    supplyABFee: function (treeNode, baseName) {
+        if (!treeNode.data.gljList) return 0;
+        let projectGLJ = projectObj.project.projectGLJ;
+
+        let supplyT = [];
+        if (baseName.includes('甲供'))
+            supplyT = [supplyType.BFJG, supplyType.WQJG]
+        else if (baseName.includes('甲定'))
+            supplyT = [supplyType.JDYG];
+
+        let gljT = [], compositionArr = [];
+        if (baseName == calcBaseNames.JGDEJJRGF || baseName == calcBaseNames.JDDEJJRGF){
+            gljT = [gljType.LABOUR];
+        }
+        else if (baseName == calcBaseNames.JGDEJJCLF || baseName == calcBaseNames.JDDEJJCLF){
+            gljT = baseMaterialTypes;
+            compositionArr = compositionTypes;
+        }
+        else if (baseName == calcBaseNames.JGDEJJJXF || baseName == calcBaseNames.JDDEJJJXF){
+            gljT = baseMachineTypes;
+            compositionArr = [gljType.GENERAL_MACHINE];
+        }
+        else if (baseName == calcBaseNames.JGZCF || baseName == calcBaseNames.JDZCF){
+            gljT = [gljType.MAIN_MATERIAL];
+            compositionArr = [gljType.MAIN_MATERIAL];
+        }
+        else if (baseName == calcBaseNames.JGSBF || baseName == calcBaseNames.JDSBF){
+            gljT = [gljType.EQUIPMENT];
+        };
+
+        let pGLJs = projectGLJ.getGLJsBySupply(supplyT, gljT);
+        if (pGLJs.length == 0) return 0;
+
+        let pGLJIdx = {};
+        for (let pglj of pGLJs){pGLJIdx[pglj.GLJID] = pglj};
+
+        let sum = 0;
+        for (let glj of treeNode.data.gljList){
+            // 组成物
+            if (compositionArr.includes(glj.type)) {
+
+            }
+            else {
+                if (pGLJIdx[glj.GLJID]) {
+
+                }
+                sum = sum + glj.basePrice * glj.quantity;
+            };
+
+        };
+        sum = sum.toDecimal(decimalObj.ration.unitPrice);
+        return sum;
+    },
     getCalcType: function (treeNode) {
         if (this.isRationCategory(treeNode)){
             return treeNodeCalcType.ctRationCalcProgram;
@@ -467,6 +519,36 @@ let calcTools = {
     }
 };
 
+const calcBaseNames = {
+    DEJJRGF: '定额基价人工费',
+    DEJJCLF: '定额基价材料费',
+    DEJJJXF: '定额基价机械费',
+    DEJJJSRGF: '定额基价机上人工费',
+    RGFJC: '人工费价差',
+    CLFJC: '材料费价差',
+    JXFJC: '机械费价差',
+    ZCF: '主材费',
+    SBF: '设备费',
+    RGGR: '人工工日',
+    JGDEJJRGF: '甲供定额基价人工费',
+    JGDEJJCLF: '甲供定额基价材料费',
+    JGDEJJJXF: '甲供定额基价机械费',
+    JGZCF: '甲供主材费',
+    JGSBF: '甲供设备费',
+    JDDEJJRGF: '甲定定额基价人工费',
+    JDDEJJCLF: '甲定定额基价材料费',
+    JDDEJJJXF: '甲定定额基价机械费',
+    JDZCF: '甲定主材费',
+    JDSBF: '甲定设备费',
+    ZGCLF: '暂估材料费',
+    FBDEJJRGF: '分包定额基价人工费',
+    FBDEJJCLF: '分包定额基价材料费',
+    FBDEJJJXF: '分包定额基价机械费',
+    FBZCF: '分包主材费',
+    FBSBF: '分包设备费',
+    FBRGGR: '分包人工工日'
+};
+
 const rationCalcBases = {
     '定额基价人工费': function (node) {
         return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice);
@@ -1012,8 +1094,8 @@ class CalcProgram {
                             rttf = parseFloatPlus(node.data.feesIndex[ft.type].tenderTotalFee).toDecimal(decimalObj.bills.totalPrice);
                         };
                         if (me.project.property.billsCalcMode === leafBillGetFeeType.rationContent) {
-                            buf = (buf + (ruf * rq / bq).toDecimal(decimalObj.bills.unitPrice)).toDecimal(decimalObj.bills.unitPrice);
-                            btuf = (btuf + (rtuf * rq / bq).toDecimal(decimalObj.bills.unitPrice)).toDecimal(decimalObj.bills.unitPrice);
+                            buf = (buf + (ruf * rq / bq).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
+                            btuf = (btuf + (rtuf * rq / bq).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
                         };
                         sum_rtf = (sum_rtf + rtf).toDecimal(decimalObj.process);
                         sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);

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

@@ -55,6 +55,7 @@ const baseMaterialTypes = [
     gljType.COMMERCIAL_CONCRETE,
     gljType.COMMERCIAL_MORTAR
 ];
+// 计算基数 [定额基价机械费] 要用到的机械类型。
 const baseMachineTypes = [
     gljType.GENERAL_MACHINE,
     gljType.MACHINE_COMPOSITION,
@@ -76,7 +77,9 @@ const compositionTypes = [
     gljType.MAIN_MATERIAL,
     gljType.CONCRETE,
     gljType.MORTAR,
-    gljType.MIX_RATIO];
+    gljType.MIX_RATIO
+];
+
 const notEditType = [
     gljType.CONCRETE,
     gljType.MORTAR,

+ 7 - 0
web/building_saas/main/js/models/project_glj.js

@@ -68,6 +68,13 @@ ProjectGLJ.prototype.getDataByID = function (ID) {//根据项目工料机ID取
    return _.find(this.datas.gljList, {'id': ID});
 };
 
+// CSL, 2018-02-08 甲供、甲定。
+ProjectGLJ.prototype.getGLJsBySupply = function (supplyTypeArr, gljTypeArr) {
+    return _.filter(this.datas.gljList, function (glj) {
+        return supplyTypeArr.includes(glj.supply) && gljTypeArr.includes(glj.type);
+    });
+};
+
 /**
  * 修改工料机数据
  *

+ 45 - 4
web/building_saas/main/js/views/calc_base_view.js

@@ -9,6 +9,7 @@ let calcBaseView = {
     inputExpr: $('#calcBaseExp'),
     confirmBtn: $('#calcBaseConf'),
     type: {bills: 'bills', ration: 'ration'},
+    billsCBClass:{ALL: [], FBFX: [], CSXM: [], QTXM: [], FBF: [], RCJ: [], GF: [], SJ: [], SQGCZJ: []},
     curType: null,
     editingCell: null,
     workBook: null,
@@ -109,7 +110,11 @@ let calcBaseView = {
     onCellDoubleClick: function (sender, args) {
         let me = calcBaseView;
         if(args.col === 0){
-            let baseFigure = '{' + args.sheet.getValue(args.row, args.col) + '}';
+            let v = args.sheet.getValue(args.row, args.col);
+            if(!me.isDef(v)){
+                return;
+            }
+            let baseFigure = `{${v}}`;
             if(baseFigure.trim() !== ''){
                 //在光标后面插入
                 let insertStr = me.insertStr(baseFigure);
@@ -125,7 +130,19 @@ let calcBaseView = {
         var selected = projectObj.project.mainTree.selected;
         return MainTreeCol.readOnly.forCalcBase(selected)?false:true;
     },
-    //计算基数转换为显示数据Obj to Array
+    bindClassBtn: function () {
+        let me = this;
+        for(let clas in me.billsCBClass){
+            let jqS = `#cb_${clas}`;
+            $(jqS).click(function () {
+                sheetCommonObj.cleanData(me.workBook.getSheet(0), me.setting, -1);
+                me.showData(me.billsCBClass[clas]);
+                $('#cbClassList li .btn ').removeClass('btn btn-outline-secondary btn-sm active');
+                $(this).addClass('btn btn-outline-secondary btn-sm active');
+            });
+        }
+    },
+    //计算基数转换为显示数据Obj to Array, 给清单基数分类赋值
     toViewData: function (obj) {
         let rst = [];
         for(let figure in obj){
@@ -133,16 +150,24 @@ let calcBaseView = {
             figureObj.base = figure;
             figureObj.price = projectObj.project.calcBase.getBase(figure);
             rst.push(figureObj);
+            //set class datas
+            this.billsCBClass.ALL.push(figureObj);
+            this.billsCBClass[obj[figure]['class']].push(figureObj);
         }
-        return rst;
+        return this.billsCBClass.ALL;
     },
 
     initCalctor: function (type) {//type = bills、ration
         let me = calcBaseView;
         let showDatas;
-        $('#qd-jsjs').modal('show');
         me.curType = type;
         if(type === me.type.bills){//bills
+            //显示清单基数分类
+            $('#cbClassList').show();
+            $('#qd-jsjs .modal-content').css('width', '670px');
+            $('#cbRowDiv').addClass('row');
+            $('#billsBaseSpread').addClass('col-9');
+            //
             let node = projectObj.project.mainTree.selected;
             //输入框显示原本的
             if(me.isDef(node.data.calcBase)){
@@ -150,8 +175,16 @@ let calcBaseView = {
             }
             let baseObj = projectObj.project.calcBase.getBaseByClass(node);
             showDatas = me.toViewData(baseObj);
+            $('#cbClassList li .btn ').removeClass('btn btn-outline-secondary btn-sm active');
+            $('#cb_ALL').addClass('btn btn-outline-secondary btn-sm active');
         }
         else{//ration
+            //去除清单基数分类
+            $('#cbClassList').hide();
+            $('#qd-jsjs .modal-content').css('width', '');
+            $('#cbRowDiv').removeClass('row');
+            $('#billsBaseSpread').removeClass('col-9');
+
             let bnArr = Object.keys(rationCalcBases);
             let baseArr = [];
             for (let bn of bnArr){
@@ -161,6 +194,7 @@ let calcBaseView = {
         }
         me.buildSheet();
         me.showData(showDatas);
+        $('#qd-jsjs').modal('show');
 
     },
 
@@ -325,6 +359,10 @@ $(document).ready(function () {
         calcBaseView.inputExpr.val('');
         calcBaseView.workBook.destroy();
         calcBaseView.workBook = null;
+        //清空清单分类数据
+        for(let attr in calcBaseView.billsCBClass){
+            calcBaseView.billsCBClass[attr] = [];
+        }
     });
 
     //bind operator click function
@@ -335,4 +373,7 @@ $(document).ready(function () {
 
     //confirmBtn
     calcBaseView.calcBaseConf();
+
+    //class btn
+    calcBaseView.bindClassBtn();
 });

+ 2 - 0
web/building_saas/main/js/views/project_view.js

@@ -44,6 +44,8 @@ var projectObj = {
         c.dispExpr = '[定额基价人工费] + [定额基价材料费]  + F6 + [主材费]';
         let rst = analyzer.analyzeUserExpr(t, c);
         alert(`${rst}: ` + JSON.stringify(c));*/
+
+        // console.log(projectObj.project.projectGLJ.getGLJsBySupply([7]));
     },
     refreshBaseActn: function (tree) {
         let setButtonValid = function (valid, btn) {