Explorar o código

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

chenshilong %!s(int64=7) %!d(string=hai) anos
pai
achega
cd1e344880

+ 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'}
 };
 
 //输入式分析器

+ 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();
 });