Преглед на файлове

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

zhangweicheng преди 6 години
родител
ревизия
4731fd8705
променени са 24 файла, в които са добавени 270 реда и са изтрити 55 реда
  1. 5 5
      modules/main/controllers/bills_controller.js
  2. 1 1
      web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html
  3. 1 1
      web/building_saas/complementary_ration_lib/html/anzhuang.html
  4. 3 3
      web/building_saas/complementary_ration_lib/html/dinge.html
  5. 1 1
      web/building_saas/complementary_ration_lib/html/fuzhu.html
  6. 1 1
      web/building_saas/complementary_ration_lib/html/gongliao.html
  7. 1 1
      web/building_saas/complementary_ration_lib/html/main.html
  8. 2 0
      web/building_saas/complementary_ration_lib/js/global.js
  9. 1 1
      web/building_saas/main/html/main.html
  10. 7 0
      web/building_saas/main/js/models/bills.js
  11. 83 0
      web/building_saas/main/js/models/calc_base.js
  12. 5 0
      web/building_saas/main/js/models/ration.js
  13. 23 7
      web/building_saas/main/js/views/character_content_view.js
  14. 3 6
      web/building_saas/main/js/views/project_view.js
  15. 41 5
      web/building_saas/main/js/views/std_billsGuidance_lib.js
  16. 2 1
      web/building_saas/main/js/views/std_ration_lib.js
  17. 23 6
      web/building_saas/main/js/views/sub_view.js
  18. 1 1
      web/building_saas/pm/html/project-management.html
  19. 61 10
      web/building_saas/pm/js/pm_newMain.js
  20. 1 1
      web/users/html/login-infoinput.html
  21. 1 1
      web/users/html/login.html
  22. 1 1
      web/users/html/user-info.html
  23. 1 1
      web/users/html/user-safe.html
  24. 1 1
      web/users/html/user-set.html

+ 5 - 5
modules/main/controllers/bills_controller.js

@@ -89,16 +89,16 @@ module.exports = {
                 delete updateData[index];
             }
         }
-        // 更新项目属性
+       /* // 更新项目属性
         const propertyUpdateData = {
             property: 'addRule',
             data: settingData
-        };
-        const projectResult = await ProjectsData.updateProjectProperty(findSet.projectID, propertyUpdateData);
+        };*/
+        //const projectResult = await ProjectsData.updateProjectProperty(findSet.projectID, propertyUpdateData);
 
         const result = await billsData.updateBill(findSet, updateData);
-        const message = !result || !projectResult ? '修改失败' : '修改成功';
-        const err = !result || !projectResult ? 1 : 0;
+        const message = !result ? '修改失败' : '修改成功';
+        const err = !result ? 1 : 0;
         callback(request, response, err, message, null);
     },
     singleDelete:async function(req, res){

+ 1 - 1
web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>人材机库编辑-Smartcost</title>
+    <title>人材机库编辑-纵横云计价</title>
     <!--inject:css-->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css" type="text/css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css" type="text/css">

+ 1 - 1
web/building_saas/complementary_ration_lib/html/anzhuang.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>定额库编辑器-Smartcost</title>
+    <title>定额库编辑器-纵横云计价</title>
     <!--inject:css-->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">

+ 3 - 3
web/building_saas/complementary_ration_lib/html/dinge.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>定额库编辑器-Smartcost</title>
+    <title>定额库编辑器-纵横云计价</title>
     <!--inject:css-->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css" type="text/css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css" type="text/css">
@@ -119,7 +119,7 @@
                             <div class="main-data">
                                 <div class="main-content m-2">
                                     <h5>说明</h5>
-                                    <textarea id="explanationShow" class="form-control" disabled="disabled" rows="35" style="background: white;"></textarea>
+                                    <textarea id="explanationShow" class="form-control" disabled="disabled" style="background: white;"></textarea>
                                 </div>
                             </div>
                         </div>
@@ -128,7 +128,7 @@
                             <div class="main-data">
                                 <div class="main-content m-2">
                                     <h5>计算规则</h5>
-                                    <textarea id="ruleTextShow" class="form-control" disabled="disabled"  rows="35" style="background: white;"></textarea>
+                                    <textarea id="ruleTextShow" class="form-control" disabled="disabled" style="background: white;"></textarea>
                                 </div>
                             </div>
                         </div>

+ 1 - 1
web/building_saas/complementary_ration_lib/html/fuzhu.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>定额库编辑器-Smartcost</title>
+    <title>定额库编辑器-纵横云计价</title>
     <!--inject:css-->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">

+ 1 - 1
web/building_saas/complementary_ration_lib/html/gongliao.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>定额库编辑器-Smartcost</title>
+    <title>定额库编辑器-纵横云计价</title>
     <!--inject:css-->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">

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

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>定额库编辑器-Smartcost</title>
+    <title>定额库编辑器-纵横云计价</title>
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
    <!-- <link rel="stylesheet" href="css/bootstrap/themes.css">-->
     <link rel="stylesheet" href="/web/building_saas/css/main.css">

+ 2 - 0
web/building_saas/complementary_ration_lib/js/global.js

@@ -13,6 +13,8 @@ function autoFlashHeight(){
     $(".main-data-top-fluid").height($(window).height()-headerHeight-bottomContentHeight-2);
     $(".main-data").height($(window).height()-headerHeight);
     $(".main-side .tab-content").height($(window).height()-headerHeight-38);
+    $("#explanationShow").height($(window).height()-headerHeight-toolsBar-100);
+    $("#ruleTextShow").height($(window).height()-headerHeight-toolsBar-100);
 };
 $(window).resize(autoFlashHeight);
 /*全局自适应高度结束*/

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

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title><%= projectData.name !== undefined ? projectData.name : '造价书' %>-纵横云价</title>
+    <title><%= projectData.name !== undefined ? projectData.name : '造价书' %>-纵横云价</title>
     <!-- inject:css -->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">

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

@@ -779,6 +779,13 @@ var Bills = {
                     }
                     gljOprObj.refreshView();
                 });
+                //添加内容为定额子目时,根据特征及内容添加规则刷新清单
+                if(updateData['ration']){
+                    let addRuleSetting = getAddRuleSetting();
+                    if(addRuleSetting && addRuleSetting.addContent === '5'){
+                        addRuleUseToBills(getAddRuleSetting(), projectObj.project.mainTree.items);
+                    }
+                }
             }, function () {
                 $.bootstrapLoading.end();
             });

+ 83 - 0
web/building_saas/main/js/models/calc_base.js

@@ -136,8 +136,13 @@ let cbTools = {
         mapObj['OTHERS'] = Object.create(null);
         mapObj['ENGINEERINGCOST'] = Object.create(null);
         let filter = ['CSXMF', 'ZZCSXMF', 'ZZCSXMDEJJZJGCF', 'ZZCSXMDEJJRGF', 'ZZCSXMDEJJCLF', 'ZZCSXMDEJJJXF', 'QTXMF', 'GF', 'SJ', 'SQGCZJ', 'AQWMSGZXF'];
+        let needFixedBillsClass = ['FBFX', 'CXSM', 'QTXM', 'GF', 'SJ'];
         //安全文明施工专项费用只有税金和工程造价能用
         for(let figure in baseFigures){
+            //过滤相关清单固定行不存在的
+            if(needFixedBillsClass.includes(baseFigures[figure]['class']) && !baseFigures[figure]['fixedBill']){
+                continue;
+            }
             if(filter.indexOf(baseFigures[figure]['base']) === -1){
                 mapObj['CONSTRUCTION_ORGANIZATION'][figure] = baseFigures[figure];
             }
@@ -344,6 +349,9 @@ let cbTools = {
 
 let baseFigureTemplate = {
     'FBFXGCF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -351,6 +359,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
     },
     'FBFXDEJJRGF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -358,6 +369,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.labour) && cbTools.isDef(bill.feesIndex.labour[totalFeeType]) ? bill.feesIndex.labour[totalFeeType] : 0;
     },
     'FBFXDEJJCLF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -365,6 +379,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.material) && cbTools.isDef(bill.feesIndex.material[totalFeeType]) ? bill.feesIndex.material[totalFeeType] : 0;
     },
     'FBFXDEJJJXF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -372,6 +389,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.machine) && cbTools.isDef(bill.feesIndex.machine[totalFeeType]) ? bill.feesIndex.machine[totalFeeType] : 0;
     },
     'FBFXTZRGF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -379,6 +399,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.adjustLabour) && cbTools.isDef(bill.feesIndex.adjustLabour[totalFeeType]) ? bill.feesIndex.adjustLabour[totalFeeType] : 0;
     },
     'FBFXTZJSRGF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -386,6 +409,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.adjustMachineLabour) && cbTools.isDef(bill.feesIndex.adjustMachineLabour[totalFeeType]) ? bill.feesIndex.adjustMachineLabour[totalFeeType] : 0;
     },
     'FBFXZCF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -393,6 +419,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.mainMaterial) && cbTools.isDef(bill.feesIndex.mainMaterial[totalFeeType]) ? bill.feesIndex.mainMaterial[totalFeeType] : 0;
     },
     'FBFXSBF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -420,6 +449,9 @@ let baseFigureTemplate = {
         return (this['FBFXDEJJRGF'](tender) + this['FBFXDEJJCLF'](tender) + this['FBFXDEJJJXF'](tender)).toDecimal(decimalObj.bills.totalPrice);
     },
     'CSXMF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.MEASURE])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.MEASURE]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -427,6 +459,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
     },
     'ZZCSXMF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -437,6 +472,9 @@ let baseFigureTemplate = {
         return (this['ZZCSXMDEJJRGF'](tender) + this['ZZCSXMDEJJCLF'](tender) + this['ZZCSXMDEJJJXF'](tender)).toDecimal(decimalObj.bills.totalPrice);
     },
     'ZZCSXMDEJJRGF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -444,6 +482,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.labour) && cbTools.isDef(bill.feesIndex.labour[totalFeeType]) ? bill.feesIndex.labour[totalFeeType] : 0;
     },
     'ZZCSXMDEJJCLF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -451,6 +492,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.material) && cbTools.isDef(bill.feesIndex.material[totalFeeType]) ? bill.feesIndex.material[totalFeeType] : 0;
     },
     'ZZCSXMDEJJJXF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -458,6 +502,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.machine) && cbTools.isDef(bill.feesIndex.machine[totalFeeType]) ? bill.feesIndex.machine[totalFeeType] : 0;
     },
     'JSCSXMF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -465,6 +512,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
     },
     'JSCSXMDEJJRGF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -472,6 +522,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.labour) && cbTools.isDef(bill.feesIndex.labour[totalFeeType]) ? bill.feesIndex.labour[totalFeeType] : 0;
     },
     'JSCSXMDEJJCLF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -479,6 +532,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.material) && cbTools.isDef(bill.feesIndex.material[totalFeeType]) ? bill.feesIndex.material[totalFeeType] : 0;
     },
     'JSCSXMDEJJJXF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -486,6 +542,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.machine) && cbTools.isDef(bill.feesIndex.machine[totalFeeType]) ? bill.feesIndex.machine[totalFeeType] : 0;
     },
     'JSCSXMTZRGF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -493,6 +552,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.adjustLabour) && cbTools.isDef(bill.feesIndex.adjustLabour[totalFeeType]) ? bill.feesIndex.adjustLabour[totalFeeType] : 0;
     },
     'JSCSXMTZJSRGF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -500,6 +562,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.adjustMachineLabour) && cbTools.isDef(bill.feesIndex.adjustMachineLabour[totalFeeType]) ? bill.feesIndex.adjustMachineLabour[totalFeeType] : 0;
     },
     'JSCSXMZCF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -507,6 +572,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.mainMaterial) && cbTools.isDef(bill.feesIndex.mainMaterial[totalFeeType]) ? bill.feesIndex.mainMaterial[totalFeeType] : 0;
     },
     'JSCSXMSBF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -533,6 +601,9 @@ let baseFigureTemplate = {
         return (this['JSCSXMDEJJRGF'](tender) + this['JSCSXMDEJJCLF'](tender) + this['JSCSXMDEJJJXF'](tender)).toDecimal(decimalObj.bills.totalPrice);
     },
     'QTXMF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.OTHER])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.OTHER]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -540,6 +611,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
     },
     'GF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CHARGE])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.CHARGE]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -547,6 +621,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
     },
     'SJ': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.TAX])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.TAX]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
@@ -554,6 +631,9 @@ let baseFigureTemplate = {
         return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
     },
     'AQWMSGZXF': function (tender) {
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SAFETY_CONSTRUCTION])){
+            return 0;
+        }
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SAFETY_CONSTRUCTION]['bill'];
         if(cbTools.isUnDef(bill) || cbTools.isUnDef(bill.ID)) return 0;
@@ -565,6 +645,9 @@ let baseFigureTemplate = {
         return buildingArea ? parseFloat(buildingArea) : 0;
     },
     'SQGCZJ': function (tender) {//税前工程造价
+        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SAFETY_CONSTRUCTION])){
+            return 0;
+        }
         let bill = calcBase.fixedBills[calcBase.fixedFlag.SAFETY_CONSTRUCTION]['bill'];
         if(cbTools.isUnDef(bill) || cbTools.isUnDef(bill.ID)) return 0;
         let node = cbTools.getNodeByID(bill.ID);

+ 5 - 0
web/building_saas/main/js/models/ration.js

@@ -338,6 +338,7 @@ var Ration = {
             } else {
                 data[field] = newValue;
             }
+            updateBillsOprRation();
             updateData.push({'updateType': 'ut_update', 'updateData': data});
             this.project.pushNow('updateBills', this.getSourceType(), updateData);
         };
@@ -432,6 +433,7 @@ var Ration = {
                 if(data.length<recodes.length&&recodes[data.length].value!=null){//说明有部分定额编号没找到记录
                     alert('当前库中找不到定额"' + recodes[data.length].value + '"');
                 }
+                updateBillsOprRation();
             })
         };
         ration.prototype.addMultiRation = function (items, callback) {
@@ -532,6 +534,7 @@ var Ration = {
                         }else {
                             project.calcProgram.calcNodesAndSave(newNodes);
                         }
+                        updateBillsOprRation();
                         if(callback){
                             callback();
                         }
@@ -609,6 +612,8 @@ var Ration = {
                                 installationFeeObj.calcInstallationFee();
                             }
                         });
+                        //如果添加规则中,添加内容为定额子目,则更新相关清单
+                        updateBillsOprRation();
                         if(callback){
                             callback();
                         }

+ 23 - 7
web/building_saas/main/js/views/character_content_view.js

@@ -1086,11 +1086,12 @@ let pageCCOprObj = {
      * @param {Object} setting - 设置
      * @return {void}
      */
-    setCharacterBySetting: function(node, setting, callback = null, oprObj = null) {
-        if(!node){
+    setCharacterBySetting: function(node, setting, callback = null, oprObj = null, usedToAll = null) {
+        if(!node || node.sourceType !== projectObj.project.Bills.getSourceType()){
             return;
         }
         let self = this;
+
         // 保存的条件数据
         const findSet = { ID: node.data.ID, projectID: node.data.projectID };
         const updateData = this.getCharacterUpdateData(setting, node);
@@ -1102,6 +1103,15 @@ let pageCCOprObj = {
         //saveObj.push({field: 'addRule', value: setting});
         saveObj.push({field: 'jobContent', value: node.data.jobContent});
         saveObj.push({field: 'itemCharacter', value: node.data.itemCharacter});
+        if(usedToAll){
+            //应用到所有清单、过滤,只更新会发生变化的清单
+            let orgName = isDef(node.data.name) ? node.data.name : '';
+            let orgItemCharacterText = isDef(node.data.itemCharacterText) ? node.data.itemCharacterText : '';
+            let orgJobContentText = isDef(node.data.jobContentText) ? node.data.jobContentText : '';
+            if(orgName == updateData.name && orgItemCharacterText == updateData.itemCharacterText && orgJobContentText == updateData.jobContentText){
+                return;
+            }
+        }
         // 更新到数据库
         pageCCOprObj.updateBill(findSet, saveObj, function(response) {
             self.refreshView(node, updateData);
@@ -1168,7 +1178,11 @@ let pageCCOprObj = {
                 continue;
             }
             const serialNo = this.formatSerialNumber(setting.serialType, count.toString());
-            setting.childDisplayFormat === "1" ? result.push(tmp.data.code + ':' + tmp.data.name) : result.push(serialNo + tmp.data.name);
+            if(setting.childDisplayFormat === '1'){
+            }
+            let code = isDef(tmp.data.code) ? tmp.data.code : '';
+            let name = isDef(tmp.data.name) ? tmp.data.name : '';
+            setting.childDisplayFormat === "1" ? result.push(code + ':' + name) : result.push(serialNo + name);
             count++;
         }
 
@@ -1278,11 +1292,13 @@ let pageCCOprObj = {
         if(!node.data.jobContent){
             node.data.jobContent = [];
         }
-        if (node.data.name === undefined || (node.data.itemCharacter.length <= 0 && node.data.jobContent.length <= 0)) {
-            return updateData;
+        if(setting.addContent !== '5'){
+            if (node.data.name === undefined || (node.data.itemCharacter.length <= 0 && node.data.jobContent.length <= 0)) {
+                return updateData;
+            }
         }
         // 获取原名称
-        const name = node.data.name.split("\n");
+        const name = isDef(node.data.name) ? node.data.name.split("\n") : '';
         this.nameCache = name[0] !== undefined ? name[0] : "";
         updateData.name = this.nameCache;
 
@@ -1354,7 +1370,7 @@ let pageCCOprObj = {
                 break;
             case "2":
                 // 添加到清单名称列
-                content = this.nameCache + "\n" + content;
+                content = content !== '' ? this.nameCache + "\n" + content : this.nameCache;
                 updateData.name = content;
                 break;
             case "3":

+ 3 - 6
web/building_saas/main/js/views/project_view.js

@@ -44,10 +44,6 @@ var projectObj = {
             pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];//mainSpread焦点单元格
             pageCCOprObj.setCacheAndShow(node);
         }
-
-        let acSheet = subSpread.getActiveSheet();
-
-        console.log(acSheet.name());
         // for test interface.  CSLAAAAA
         // projectObj.testDisplay('前四项累计值排除当前选中项' + projectObj.project.calcProgram.getBeforeTaxTotalFee([node]));
 
@@ -826,8 +822,8 @@ var projectObj = {
                 }
                 //如果其下没有定额/量价/人材机,则自动在其下插入一条定额空行,在其后自动插入一条分项空行,焦点跳动至定额空行的编码单元格。
                 else if(selected.children.length === 0){
-                    //在其后插入分项
-                    if(!(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected))){
+                    //分项没有后兄弟,且没有锁定清单时在其后插入分项
+                    if(!selected.nextSibling && !(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected))){
                         ProjectController.addFX(me.project, me.mainController);
                         //将焦点行设置成原本的行,以插入定额
                         me.mainController.setTreeSelected(me.project.mainTree.items[orgRow]);
@@ -2517,6 +2513,7 @@ $(function () {
 //项目只读,处理不可操作的工具栏
 function disableTools(){
     //造价书按钮
+    $('#insertRation').remove();
     $('#delete').remove();
     $('#upLevel').remove();
     $('#downLevel').remove();

+ 41 - 5
web/building_saas/main/js/views/std_billsGuidance_lib.js

@@ -102,11 +102,47 @@ const billsGuidance = (function () {
                 }
                 if(node.children.length === 0){
                     //插入清单
-                    let insert = billsLibObj.insertBills(stdBillsJobData, stdBillsFeatureData, node);
-                    if(insert){
-                        //插入选中的定额
-                        let addRationDatas = getInsertRationData(getCheckedRows());
-                        insertRations(addRationDatas);
+                    if (/\//.test(node.data.unit)) {
+                        let canAdd = true;
+                        $.bootstrapLoading.start();
+                        let existB = projectObj.project.Bills.sameStdCodeBillsData(node.data.code);
+                        if (existB) {
+                            let std = JSON.parse(JSON.stringify(node.data));
+                            std.unit = existB.unit;
+                            canAdd = ProjectController.addBills(projectObj.project, projectObj.mainController, std);
+                            if(canAdd !== null || canAdd !== false){
+                                //插入选中的定额
+                                let addRationDatas = getInsertRationData(getCheckedRows());
+                                insertRations(addRationDatas);
+                            }
+                            if(canAdd === false && $.bootstrapLoading.isLoading()){
+                                $.bootstrapLoading.end();
+                            }
+                        } else {
+                            ConfirmModal.stdBillsUnit.check(node.data, function (std) {
+                                canAdd = ProjectController.addBills(projectObj.project, projectObj.mainController, std);
+                                if(canAdd !== null || canAdd !== false){
+                                    //插入选中的定额
+                                    let addRationDatas = getInsertRationData(getCheckedRows());
+                                    insertRations(addRationDatas);
+                                }
+                                if(canAdd === false && $.bootstrapLoading.isLoading()){
+                                    $.bootstrapLoading.end();
+                                }
+                            }, function () {
+                                if($.bootstrapLoading.isLoading()){
+                                    $.bootstrapLoading.end();
+                                }
+                            });
+                        }
+                    }
+                    else {
+                        let insert = billsLibObj.insertBills(stdBillsJobData, stdBillsFeatureData, node);
+                        if(insert){
+                            //插入选中的定额
+                            let addRationDatas = getInsertRationData(getCheckedRows());
+                            insertRations(addRationDatas);
+                        }
                     }
                 }
                 else {

+ 2 - 1
web/building_saas/main/js/views/std_ration_lib.js

@@ -159,7 +159,8 @@ var rationLibObj = {
                         let select = $('#stdRationLibSelect'), rationSelect = rationSheet.getSelections();
                         let rationCode = rationSelect.length > 0 ? rationSheet.getText(rationSelect[0].row, 0) : '';
                         if (rationCode !== '') {
-                            rationModel.addNewRation({userID: userID, rationRepId: select.val(), code: rationCode},rationType.ration);
+                            rationModel.addNewRation({userID: userID, rationRepId: select.val(), code: rationCode},rationType.ration, function () {
+                            });
                         }
                     }
                 },

+ 23 - 6
web/building_saas/main/js/views/sub_view.js

@@ -174,6 +174,14 @@ function colSettingAddPosition(addPosition){
     }
 }
 
+//如果,添加内容为定额子目时进行定额的增删改,更新相关其清单
+function updateBillsOprRation() {
+    const setting = getAddRuleSetting();
+    if(setting && setting.addContent && setting.addContent === '5'){
+        $('#use-to-current').click();
+    }
+}
+
 // 应用到选中清单
 let isSaving = false;
 $("#use-to-current").click(function() {
@@ -205,6 +213,12 @@ $("#use-to-current").click(function() {
         self.removeAttr('disabled');
     }, 1000);
 });
+//todo: 优化成批量
+function addRuleUseToBills(setting, nodes) {
+    for(let node of nodes){
+        pageCCOprObj.setCharacterBySetting(node, setting, null, null, true);
+    }
+}
 // 应用到所有的清单
 $("#use-to-all").click(function() {
     if(projectReadOnly){
@@ -216,14 +230,17 @@ $("#use-to-all").click(function() {
     if (treeNode.items === undefined || treeNode.items.length <= 0) {
         return false;
     }
-    // 处理结果
-    for (const item of treeNode.items) {
-        if (item.data.jobContent === undefined || item.data.jobContent.length <= 0 ||
-            item.data.itemCharacter === undefined || item.data.itemCharacter.length <= 0 || item.data.code === undefined) {
-            continue;
+    // 处理
+    addRuleUseToBills(setting, treeNode.items);
+   /* for (const item of treeNode.items) {
+        if(setting.addContent !== '5'){
+            if (item.data.jobContent === undefined || item.data.jobContent.length <= 0 ||
+                item.data.itemCharacter === undefined || item.data.itemCharacter.length <= 0 || item.data.code === undefined) {
+                continue;
+            }
         }
         pageCCOprObj.setCharacterBySetting(item, setting);
-    }
+    }*/
 });
 
 function saveAddRule(){

+ 1 - 1
web/building_saas/pm/html/project-management.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>项目管理-纵横云价</title>
+    <title>项目管理-纵横云价</title>
     <!-- inject:css -->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">

+ 61 - 10
web/building_saas/pm/js/pm_newMain.js

@@ -2891,11 +2891,67 @@ function bindEvents_file_table(jqS, usedObj, targetBody, type){
         let orgDispName = $(jqS + ' div:eq(0)')[0].childNodes[0].textContent;
         let postFix = '';
         let orgName = orgDispName;
+        let hintText = $(jqS).find('span');
+        let fileDiv = $(jqS + ' div:eq(0)');
+        let renameDiv = $(jqS + ' div:eq(1)');
         $(jqS + ' input').val(orgName);
-        $(jqS + ' div:eq(0)').hide();
-        $(jqS + ' div:eq(1)').show();
+        fileDiv.hide();
+        renameDiv.show();
+        $(jqS).find('input:eq(0)').focus();
+        $(jqS).find('input:eq(0)').blur(function () {
+            fileDiv.show();
+            renameDiv.hide();
+            hintText.hide();
+        });
         //确认重命名
-        $(jqS + ' .btn-success').on('click', function () {
+        //回车键
+        $(jqS).find('input:eq(0)').keypress(function (e) {
+            if(e.keyCode === 13){
+                let attrId = $(jqS).attr('id');
+                let id = attrId.slice(5, attrId.length);
+                let newName = $(jqS + ' input').val().trim();
+                if(newName !== orgName){
+                    if(hasThisFileName(fileObjs, newName)){
+                        hintText.show();
+                        //$(jqS + ' input').val(orgName);
+                        return;
+                    }
+                    if(newName.trim().length === 0){
+                        alert('文件名不可为空!');
+                        $(jqS + ' input').val(orgName);
+                        return;
+                    }
+                    //ajax
+                    let updateObj = Object.create(null);
+                    updateObj.fileType = type;
+                    updateObj.updateType = 'update';
+                    updateObj.updateData = Object.create(null);
+                    if(type === fileType.unitPriceFile){
+                        updateObj.updateData.id = parseInt(id);
+                        //updateObj.updateData.id = id;
+                    }
+                    else if(type === fileType.feeRateFile){
+                        updateObj.updateData.ID = id;
+                    }
+                    updateObj.updateData.name = newName;
+                    a_updateFiles([updateObj], function () {
+                        let newDispName = newName + postFix;
+                        fileDiv[0].childNodes[0].textContent = newDispName;
+                        fileDiv.show();
+                        renameDiv.hide();
+                        //refresh tender
+                        refreshTenderFile(getTendersByFile(type, id, projTreeObj.tree.selected), type, newName);
+                    });
+                }
+                let newDispName = newName + postFix;
+                fileDiv[0].childNodes[0].textContent = newDispName;
+                fileDiv.show();
+                renameDiv.hide();
+                hintText.hide();
+            }
+        });
+
+        /*$(jqS + ' .btn-success').on('click', function () {
             let attrId = $(jqS).attr('id');
             let id = attrId.slice(5, attrId.length);
             let newName = $(jqS + ' input').val().trim();
@@ -2942,7 +2998,7 @@ function bindEvents_file_table(jqS, usedObj, targetBody, type){
             $(jqS + ' div:eq(0)').show();
             $(jqS + ' div:eq(1)').hide();
             $(jqS).find('span:eq(2)').hide();
-        });
+        });*/
     });
     //悬浮框显示使用该文件的单位工程
     $($(jqS)[0].nextSibling).popover({
@@ -2978,12 +3034,7 @@ function set_file_table(target, poj_tenders, fileList, type){
         let hoverHtml = '<p style="display: none; height: 14px;"><a class="btn btn-sm" href="javascript:void(0);" data-toggle="modal" data-target="#del-wj">删除</a><a class="btn btn-sm" href="javascript:void(0);">重命名</a></p></div>';
         let renHtml = '<div class="input-group" style="display: none;">'
             + '<input class="form-control form-control-sm" value="">'
-            + '<span class="input-group-btn">'
-            + '<button class="btn btn-success btn-sm" type="button"><i class="fa fa-check"></i></button>'
-            + '</span>'
-            + '<span class="input-group-btn">'
-            + '<button class="btn btn-secondary btn-sm" type="button"><i class="fa fa-remove"></i></button>'
-            + '</span>'
+
             + '</div>'
             + '<span class="form-text text-danger" style="display: none">本建设项目已存在该文件名,请重新输入!' +
             '</span></td>';

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

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>用户信息填写-Smartcost</title>
+    <title>用户信息填写-纵横云计价</title>
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">

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

@@ -4,7 +4,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>用户登录-纵横云价</title>
+    <title>用户登录-纵横云价</title>
     <!-- inject:css -->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">

+ 1 - 1
web/users/html/user-info.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>账号资料-Smartcost</title>
+    <title>账号资料-纵横云计价</title>
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">

+ 1 - 1
web/users/html/user-safe.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>账号安全-Smartcost</title>
+    <title>账号安全-纵横云计价</title>
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">

+ 1 - 1
web/users/html/user-set.html

@@ -5,7 +5,7 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>登录设置-Smartcost</title>
+    <title>登录设置-纵横云计价</title>
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">