Parcourir la source

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

Conflicts:
	web/building_saas/glj/html/project_glj.html
zhangweicheng il y a 7 ans
Parent
commit
479cb379e6

+ 2 - 1
lib/spreadjs/sheets/css/gc.spread.sheets.sc.css

@@ -153,7 +153,8 @@
 /*选择框*/
 .gc-selection {
     background-color: rgba(20, 20, 20, 0.2);
-    border-color: #ababab;
+    /*border-color: #ababab;*/
+    border-color: #675f5e;
     color: rgba(240,240,240,0.7);
 }
 .gc-drag-indicator {

+ 1 - 1
modules/complementary_glj_lib/models/gljModel.js

@@ -15,7 +15,7 @@ class GljDao {
             if(data.length) {
                 callback(0,data);
             }
-            else  if(err) callback("获取工料机类型错误!",false);
+            else  if(err) callback("获取人材机类型错误!",false);
         })
     }
 

+ 21 - 4
modules/reports/util/rpt_construct_data_util.js

@@ -416,12 +416,12 @@ function filterData(sourceData, handleCfg, prjData) {
         }
         return rst;
     };
-    let compareObj = {};
-    for (let item of tempRstArr) {
+    let private_filter_compare = function (item, filterCfg) {
+        let compareObj = {};
         let compRst = true;
         let curComparePrjData = null;
         let startIdx = 0;
-        for (let cfg of handleCfg[JV.PROP_FILTER_KEYS]) {
+        for (let cfg of filterCfg[JV.PROP_FILTER_KEYS]) {
             if (cfg[JV.PROP_FILTER_COMPARE_VAL]) {
                 //比较key值
                 let keys = cfg.key.split(".");
@@ -472,10 +472,27 @@ function filterData(sourceData, handleCfg, prjData) {
             }
             startIdx++;
         }
-        if (compRst) {
+        return compRst;
+    };
+    for (let item of tempRstArr) {
+        if (private_filter_compare(item, handleCfg)) {
             rstArr.push(item);
         }
     }
+    if (handleCfg[JV.PROP_OTHER_SUB_FILTER] && handleCfg[JV.PROP_OTHER_SUB_FILTER].length > 0) {
+        let newRstArr = [];
+        for (let dtlItem of rstArr) {
+            let cmpRst = false;
+            for (let dtlCfg of handleCfg[JV.PROP_OTHER_SUB_FILTER]) {
+                cmpRst = private_filter_compare(dtlItem, dtlCfg);
+                if (cmpRst) {
+                    newRstArr.push(dtlItem);
+                    break;
+                }
+            }
+        }
+        rstArr = newRstArr;
+    }
     delete sourceData.data;
     sourceData.data = rstArr;
     // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/filteredRst.js");

+ 1 - 0
public/web/rpt_value_define.js

@@ -52,6 +52,7 @@ const JV = {
     PROP_PARENT_SORT_KEYS: "父排序键值集",
     PROP_CHILD_SORT_KEYS: "子排序键值集",
     PROP_OTHER_SUB_SORT: "其他子排序",
+    PROP_OTHER_SUB_FILTER: "其他子过滤",
     PROP_HANDLE_TYPE: "预处理类型",
     PROP_FILTER_KEYS: "过滤键值集",
     PROP_FILTER_TOP_BILLS_NODES: "清单顶节点集",

+ 4 - 83
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>人材机库编辑-Smartcost</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">
@@ -22,46 +22,8 @@
 <body>
     <div class="header">
         <%include ../../../common/html/header.html %>
-    <!--    <nav class="navbar navbar-expand-lg justify-content-between navbar-light p-0">
-            <ul class="nav navbar-nav px-1">
-                <li class="nav-item">
-                    <a class="nav-link" href="#" aria-expanded="false"><i class="fa fa-sliders"></i> 选项</a>
-                </li>
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-wrench"></i> 工具</a>
-                    <div class="dropdown-menu">
-                        <a class="dropdown-item" href="#">定额库编辑器</a>
-                        <a class="dropdown-item" href="/complementaryGlj">工料机库编辑器</a>
-                    </div>
-                </li>
-                <li class="nav-item dropdown">
-                    <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-question-circle-o"></i> 帮助</a>
-                    <div class="dropdown-menu">
-                        <a class="dropdown-item" href="#">帮助</a>
-                        <a class="dropdown-item" href="#">升级说明</a>
-                        <a class="dropdown-item" href="#">重庆市2008定额说明</a>
-                        <a class="dropdown-item" href="#">纵横官网</a>
-                        <a class="dropdown-item" href="#">动画教程</a>
-                        <a class="dropdown-item" href="#">联系客服</a>
-                        <a class="dropdown-item" href="#">关于</a>
-                    </div>
-                </li>
-                <li class="nav-item">
-                    <a href="javacript:void(0);" data-toggle="modal" data-target="#history" class="nav-link"><i class="fa fa-history"></i> 历史记录</a>
-                </li>
-            </ul>
-            <form class="form-inline">
-                <input class="form-control form-control-sm mr-1" type="text" placeholder="告诉我你想做什么">
-            </form>
-        </nav>-->
     </div>
     <div class="main">
-     <!--   <div class="main-nav">
-            <ul class="nav flex-column">
-              <li><a href="#">定额库编辑器</a></li>
-              <li><a href="/complementaryGlj" class="active">工料机库编辑器</a></li>
-            </ul>
-        </div>-->
         <div class="content" style="margin-left: 0px;">
             <div class="container-fluid">
                 <div class="row">
@@ -83,47 +45,6 @@
       </div>
       <!--弹出组成物-->
     <button id="componentBtn" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#component" style="display: none"></button>
-      <!--<div class="modal fade" id="component" data-backdrop="static">
-          <div class="modal-dialog modal-lg" role="document" id="modalCon">
-              <div class="modal-content" >
-                  <div class="modal-header">
-                    <h5 class="modal-title">选择组成物</h5>
-                      <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                        <span aria-hidden="true">&times;</span>
-                      </button>
-                  </div>
-                  <div class="modal-body">
-                    <div class="row">
-                      <div class="col-4">
-                        <div  class="modal-auto-height" id="componentTreeDiv" style="overflow: hidden">
-                            &lt;!&ndash;<div class="print-list">&ndash;&gt;
-                                <div style="width: 100%; height: 100%; overflow: auto">
-                                    <ul id="componentTree" class="ztree"></ul>
-                                </div>
-                            &lt;!&ndash;</div>&ndash;&gt;
-                        </div>
-                      </div>
-                      <div class="col-8">
-                          <div class="row">
-                              <div class="col-12" id="gljRadios">
-                                  <input type="radio" class="glj-radio" name="glj" value="allGljs">所有工料机&nbsp;&nbsp;
-                                  <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准工料机&nbsp;&nbsp;
-                                  <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充工料机&nbsp;&nbsp;
-                                 &lt;!&ndash; <div class="form-group"><input id="searchGlj" type="text" class="form-control-sm" placeholder="查询工料机"></div>&ndash;&gt;
-                              </div>
-                              <div class="modal-auto-height col-12" style="overflow: hidden" id="componentSheet">
-                              </div>
-                          </div>
-                      </div>
-                    </div>
-                  </div>
-                  <div class="modal-footer">
-                      <button type="button" id="componentsCacnel" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                      <a href="javascript:void(0);" id="componentsConf" class="btn btn-primary">确定</a>
-                  </div>
-              </div>
-          </div>
-      </div>-->
     <div class="modal fade" id="component" data-backdrop="static">
         <div class="modal-dialog modal-lg" role="document" id="modalCon">
             <div class="modal-content" >
@@ -148,9 +69,9 @@
                                 <div class="col-12" id="gljRadios">
                                     <div class="row">
                                         <div class="col-7" style="margin-top: 5px;">
-                                            <input type="radio" class="glj-radio" name="glj" value="allGljs">所有工料机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准工料机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充工料机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="allGljs">所有人材机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准人材机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充人材机&nbsp;&nbsp;
                                         </div>
                                         <div class="input-group col-5" style="margin-bottom: 5px;">
                                             <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

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

@@ -36,7 +36,7 @@
                       <a class="nav-link px-3" id="dinge" href="dinge.html">定额</a>
                   </li>
                   <li class="nav-item">
-                      <a class="nav-link px-3" id="gongliao" href="gongliao.html">工料机</a>
+                      <a class="nav-link px-3" id="gongliao" href="gongliao.html">人材机</a>
                   </li>
                   <li class="nav-item">
                       <a class="nav-link px-3" id="fuzhu" href="fuzhu.html">附注条件</a>
@@ -72,7 +72,7 @@
                           </div>
                       </div>
                     </div>
-                    <div class="bottom-content" id="instFeeRuleSpread">
+                    <div class="bottom-content" id="instFeeRuleSpread" style="height: 370px;">
                         <!--<table class="table table-sm table-bordered">
                           <thead><tr><th></th><th>编码</th><th>费用规则</th><th>基数</th><th>费率(%)</th><th>其中人工(%)</th><th>其中材料(%)</th><th>其中机械(%)</th></tr></thead>
                           <tbody>

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

@@ -35,10 +35,10 @@
                 <a class="nav-link active px-3" id ="dinge" >定额</a>
             </li>
             <li class="nav-item">
-                <a class="nav-link px-3" id="gongliao" href="#">工料机</a>
+                <a class="nav-link px-3" id="gongliao" href="#">人材机</a>
             </li>
             <li class="nav-item">
-                <a class="nav-link px-3" id="fuzhu" href="#">附注条件</a>
+                <a class="nav-link px-3" id="fuzhu" href="#">子目换算</a>
             </li>
             <li class="nav-item">
                 <a class="nav-link px-3" id="anzhuang" href="#">安装增加费</a>
@@ -92,13 +92,13 @@
                                 <!-- 标签 -->
                                 <ul class="nav nav-tabs" role="tablist">
                                     <li class="nav-item">
-                                        <a class="nav-link active" id="linkGLJ" data-toggle="tab" href="#rDetail" role="tab">工料机</a>
+                                        <a class="nav-link active" id="linkGLJ" data-toggle="tab" href="#rDetail" role="tab">人材机</a>
                                     </li>
                                     <li class="nav-item">
                                         <a class="nav-link" id="linkFZDE" data-toggle="tab" href="#rDetail" role="tab">辅助定额调整</a>
                                     </li>
                                     <li class="nav-item">
-                                        <a class="nav-link" id="linkFZTJ" data-toggle="tab" href="#rDetail" role="tab">附注条件调整</a>
+                                        <a class="nav-link" id="linkFZTJ" data-toggle="tab" href="#rDetail" role="tab">子目换算调整</a>
                                     </li>
                                     <li class="nav-item">
                                         <a class="nav-link px-3" id="linkAZZJ" data-toggle="tab" href="#rDetail" role="tab">安装增加费</a>

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

@@ -35,7 +35,7 @@
                       <a class="nav-link px-3" id="drirect-dinge" href="javascript:void(0);">定额</a>
                   </li>
                   <li class="nav-item">
-                      <a class="nav-link px-3" id="gongliao" href="javascript:void(0);">工料机</a>
+                      <a class="nav-link px-3" id="gongliao" href="javascript:void(0);">人材机</a>
                   </li>
                   <li class="nav-item">
                       <a class="nav-link active px-3">附注条件</a>

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

@@ -38,7 +38,7 @@
                       <a class="nav-link px-3" id="drirect-dinge" href="/complementaryRation/ration">定额</a>
                   </li>
                   <li class="nav-item">
-                      <a class="nav-link active px-3">工料机</a>
+                      <a class="nav-link active px-3">人材机</a>
                   </li>
                   <li class="nav-item">
                       <a class="nav-link px-3" id="fuzhu" href="javascript:void(0);">附注条件</a>
@@ -69,7 +69,7 @@
         <div class="modal-dialog" role="document">
             <div class="modal-content">
                 <div class="modal-header">
-                  <h5 class="modal-title">添加工料机</h5>
+                  <h5 class="modal-title">添加人材机</h5>
                   <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">×</span>
                   </button>
@@ -115,7 +115,7 @@
         <div class="modal-dialog" role="document">
             <div class="modal-content">
                 <div class="modal-header">
-                  <h5 class="modal-title">编辑工料机</h5>
+                  <h5 class="modal-title">编辑人材机</h5>
                   <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">×</span>
                   </button>

+ 1 - 1
web/building_saas/complementary_ration_lib/js/coe.js

@@ -151,7 +151,7 @@ let gljAdjOprObj = {
     setting: {
         header: [
             {headerName:"调整类型", headerWidth:100, dataCode:"coeType", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
-            {headerName:"工料机编码", headerWidth:100, dataCode:"gljCode", dataType: "String", formatter: '@', hAlign: "center", vAlign: "center", readOnly: false},
+            {headerName:"人材机编码", headerWidth:100, dataCode:"gljCode", dataType: "String", formatter: '@', hAlign: "center", vAlign: "center", readOnly: false},
             {headerName:"名称", headerWidth:100, dataCode:"gljName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: true},
             {headerName:"操作符", headerWidth:60, dataCode:"operator", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
             {headerName:"数量", headerWidth:80, dataCode:"amount", dataType: "String", hAlign: "center", vAlign: "center" , readOnly: false},

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

@@ -257,6 +257,8 @@ let feeRuleObj = {
     buildSheet: function () {
         if(!this.isDef(this.workBook)){
             this.workBook = sheetCommonObj.buildSheet($('#instFeeRuleSpread')[0], this.setting, 10);
+            console.log(`this.workBook`);
+            console.log(this.workBook);
             this.sheet = this.workBook.getActiveSheet();
             this.setOptions(this.workBook, this.setting.options);
             this.bindEvents(this.sheet);

+ 4 - 4
web/building_saas/complementary_ration_lib/js/repository_glj.js

@@ -248,15 +248,15 @@ repositoryGljObj = {
                 let focusToCol;
                 function getFocusToCol (me){
                     if(!me.addGljObj[me.setting.header[0].dataCode]){
-                        $('#alertGljTxt').text('编号不能为空,是否取消增加工料机?');
+                        $('#alertGljTxt').text('编号不能为空,是否取消增加人材机?');
                         return 0;
                     }
                     else if(!me.addGljObj[me.setting.header[1].dataCode]){
-                        $('#alertGljTxt').text('名称不能为空,是否取消增加工料机?');
+                        $('#alertGljTxt').text('名称不能为空,是否取消增加人材机?');
                         return 1;
                     }
                     else if(!me.addGljObj[me.setting.header[5].dataCode]){
-                        $('#alertGljTxt').text('类型不能为空,是否取消增加工料机?');
+                        $('#alertGljTxt').text('类型不能为空,是否取消增加人材机?');
                         return 5;
                     }
                     else {
@@ -455,7 +455,7 @@ repositoryGljObj = {
                 if(refGljCodes.length > 0){
                     let alertText;
                     if(refGljCodes.length > 3){
-                        alertText = "编号: " + refGljCodes[0]+" 、" + refGljCodes[1] + " 、" + refGljCodes[2] + "...等工料机已有定额引用,删除失败!";
+                        alertText = "编号: " + refGljCodes[0]+" 、" + refGljCodes[1] + " 、" + refGljCodes[2] + "...等人材机已有定额引用,删除失败!";
                     }
                     else {
                         let alertCode = " ";

+ 3 - 3
web/building_saas/glj/html/project_glj.html

@@ -14,14 +14,14 @@
     <div class="row">
         <div class="gl-side col-lg-1 filterType" id='filterType'>
             <ul class="list-unstyled mt-2 mb-2">
-                <li><a href="javascript:void(0)" id="ALL">所有工料机</a></li>
+                <li><a href="javascript:void(0)" id="ALL">所有人材机</a></li>
                 <li class="mb-2 li_sub"><a href="javascript:void(0)" id="LABOUR">人工</a></li>
                 <li class="mb-2 li_sub"><a href="javascript:void(0)" id="GENERAL_MATERIAL">材料</a></li>
                 <li class="mb-2 li_sub"><a href="javascript:void(0)" id="GENERAL_MACHINE">机械</a></li>
                 <li class="mb-2 li_sub"><a href="javascript:void(0)" id="MAIN_MATERIAL">主材</a></li>
                 <li class="mb-2 li_sub"><a href="javascript:void(0)" id="EQUIPMENT">设备</a></li>
-                <li class="mb-2"><a href="javascript:void(0)" id="FBFX">分部分项工料机</a></li>
-                <li class="mb-2"><a href="javascript:void(0)" id="TECH">措施分项工料机</a></li>
+                <li class="mb-2"><a href="javascript:void(0)" id="FBFX">分部分项人材机</a></li>
+                <li class="mb-2"><a href="javascript:void(0)" id="TECH">措施分项人材机</a></li>
                 <li class="mb-2"><a href="javascript:void(0)" id="JGCL">甲供材料</a></li>
                 <li class="mb-2"><a href="javascript:void(0)" id="ZGCL">暂估材料</a></li>
                 <li class="mb-2"><a href="javascript:void(0)" id="SCHZ">三材汇总</a></li>

+ 1 - 1
web/building_saas/glj/js/project_glj_spread.js

@@ -154,7 +154,7 @@ ProjectGLJSpread.prototype.init = function () {
         // 如果类型为混凝土、砂浆、配合比、机械,则提示
         if (field === 'unit_price.market_price' && canNotChangeTypeId.indexOf(type) >= 0) {
             if(ratioData&&ratioData.length>0){
-                alert('当前工料机的市场单价由组成物计算得出,不可直接修改');
+                alert('当前人材机的市场单价由组成物计算得出,不可直接修改');
             }
         }
     });

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

@@ -44,7 +44,7 @@
         <div class="main-nav">
             <ul class="nav nav-tabs flex-column" role="tablist">
                 <li class="nav-item"><a class="active" data-toggle="tab" href="#zaojiashu" id="tab_zaojiashu" role="tab">造价书</a></li>
-                <li class="nav-item"><a data-toggle="tab" href="#project_glj" id="tab_project_glj" data-name="tab_project_glj" role="tab">工料机</a></li>
+                <li class="nav-item"><a data-toggle="tab" href="#project_glj" id="tab_project_glj" data-name="tab_project_glj" role="tab">人材机</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#fee_rates" id="tab_fee_rate" role="tab" >费率</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#calc_program_manage" id="tab_calc_program_manage" role="tab">计算程序</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#reports" role="tab" id="tab_report" onclick="rptTplObj.iniPage();">报表</a></li>
@@ -56,9 +56,9 @@
               <!--造价书-->
               <div class="toolsbar px-1 d-flex justify-content-between">
                   <div class="tools-btn btn-group align-top">
-                    <a href="javascript:void(0)" class="btn btn-sm" title="复制" ><i class="fa fa-files-o" aria-hidden="true"></i></a>
+                    <!--<a href="javascript:void(0)" class="btn btn-sm" title="复制" ><i class="fa fa-files-o" aria-hidden="true"></i></a>
                     <a href="javascript:void(0)" class="btn btn-sm" title="剪切"><i class="fa fa-scissors" aria-hidden="true"></i></a>
-                    <a href="javascript:void(0)" class="btn btn-sm" title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0)" class="btn btn-sm" title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>-->
                  <!--   <a href="javascript:void(0)" class="btn btn-sm" id="insert" title="插入"><i class="fa fa-sign-in" aria-hidden="true"></i></a>-->
                     <a href="javascript:void(0)" class="btn btn-sm" id="delete" title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
                     <a href="javascript:void(0)" class="btn btn-sm" id="upLevel" title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
@@ -109,10 +109,10 @@
                           <div class="bottom-content">
                               <ul class="nav nav-tabs" role="tablist">
                                   <li class="nav-item">
-                                      <a class="nav-link active" id="linkGLJ" data-toggle="tab" href="#subSpread" role="tab">工料机</a>
+                                      <a class="nav-link active" id="linkGLJ" data-toggle="tab" href="#subSpread" role="tab">人材机</a>
                                   </li>
                                   <li class="nav-item">
-                                      <a class="nav-link" id="linkFZTJ" data-toggle="tab" href="#subSpread" role="tab">附注条件</a>
+                                      <a class="nav-link" id="linkFZTJ" data-toggle="tab" href="#subSpread" role="tab">子目换算</a>
                                   </li>
                                   <li class="nav-item">
                                       <a class="nav-link" id="linkFZDE" data-toggle="tab" href="#subSpread" role="tab">辅助定额</a>
@@ -423,7 +423,7 @@
                                             <div class="form-check">
                                                 <label class="form-check-label">
                                                     <input class="form-check-input" type="checkbox" id="calc_add">
-                                                    新增工料机计取价差
+                                                    新增人材机计取价差
                                                 </label>
                                             </div>
                                             <div class="form-check">
@@ -480,7 +480,7 @@
                                                     </div>
                                                 </div>
                                             </div>
-                                            <h5 class="mt-3">工料机</h5>
+                                            <h5 class="mt-3">人材机</h5>
                                             <div class="row m-0">
                                                 <div class="col-sm-3">
                                                     <div class="input-group input-group-sm mb-2">
@@ -643,7 +643,7 @@
         <div class="modal-dialog modal-lg" role="document" id="modalCon">
             <div class="modal-content" style="width: 1020px; left:50%; transform: translate(-50%,0%);">
                 <div class="modal-header">
-                    <h5 class="modal-title">请选择工料机</h5>
+                    <h5 class="modal-title">请选择人材机</h5>
                     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                         <span aria-hidden="true">&times;</span>
                     </button>
@@ -664,9 +664,9 @@
                                 <div class="col-12" id="gljRadios">
                                     <div class="row">
                                         <div class="col-7" style="margin-top: 5px;">
-                                            <input type="radio" class="glj-radio" name="glj" value="allGljs" checked>所有工料机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="stdGLJ">标准工料机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGLJs">补充工料机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="allGljs" checked>所有人材机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="stdGLJ">标准人材机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGLJs">补充人材机&nbsp;&nbsp;
                                         </div>
                                         <div class="input-group col-5" style="margin-bottom: 5px;">
                                             <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

+ 86 - 84
web/building_saas/main/js/models/calc_program.js

@@ -102,8 +102,13 @@ let calcTools = {
     isBill: function(treeNode){
         return treeNode.sourceType === ModuleNames.bills;
     },
+    isParentBill: function (treeNode) {
+        return this.isBill(treeNode) &&
+            treeNode.source.children &&
+            treeNode.source.children.length > 0;
+    },
     isLeafBill: function(treeNode){
-        return treeNode.sourceType === ModuleNames.bills &&
+        return this.isBill(treeNode) &&
             treeNode.source.children &&
             treeNode.source.children.length === 0;
     },
@@ -126,6 +131,21 @@ let calcTools = {
     isGljRation: function (treeNode) {
         return this.isRationCategory(treeNode) && treeNode.data.type === rationType.gljRation;
     },
+    getGLJList: function (treeNode) {
+        delete treeNode.data.gljList;
+        if (this.isRationCategory(treeNode)) {
+            if (treeNode.data.type != rationType.volumePrice) {
+                treeNode.data.gljList = projectObj.project.ration_glj.getGljArrByRation(treeNode.data);
+            };
+        }
+        else if (this.isBill(treeNode)){
+            let nodeQ = this.uiNodeQty(treeNode);
+            let q = nodeQ ? nodeQ : 1;
+            let rNodes = projectObj.project.Ration.getRationNodes(treeNode);
+            let rations = rNodes.map(function (node) {return node.data});
+            treeNode.data.gljList = projectObj.project.ration_glj.getGatherGljArrByRations(rations, q);
+        };
+    },
 
     initFees: function (treeNode){
         if (!treeNode.data.fees) {
@@ -261,12 +281,15 @@ let calcTools = {
         }
         return result;
     },
-    // 父清单暂估费是汇总子清单的暂估费,走计算程序逻辑,不在这里。
+    // 总造价清单、叶子清单、定额的暂估费。父清单是汇总子清单的暂估费,走计算程序逻辑,不在这里。
     estimateFee: function (treeNode, isBase = false){
         let me = this, sumU = 0, sumT = 0;
         let nodeQ = me.uiNodeQty(treeNode);
+        let isGather = (projectObj.project.property.zanguCalcMode == zanguCalcType.gatherMaterial);
+
         // 先汇总数量,再乘市场价
-        function estimateTotalFee(){
+        function eTFee(){
+            if (!treeNode.data.gljList) return 0;
             let GLJObjs = [];
             for (let glj of treeNode.data.gljList) {
                 if (!allMaterialTypes.includes(glj.type)) continue;
@@ -307,8 +330,20 @@ let calcTools = {
             };
             return rst;
         };
+        // 汇总子结点的暂估合价
+        function eTFeeByChildren(){
+            let rst = 0;
+            for (let node of treeNode.children){
+                if (node.data.feesIndex && node.data.feesIndex['estimate']) {
+                    rst = (rst + parseFloatPlus(node.data.feesIndex['estimate'].totalFee)).toDecimal(decimalObj.process);
+                };
+            };
+            rst = (rst).toDecimal(decimalObj.bills.totalPrice);
+            return rst;
+        };
         // 先数量乘市场价,再汇总
-        function estimateUnitFee(){
+        function eUFee(){
+            if (!treeNode.data.gljList) return 0;
             let rst = 0;
             for (let glj of treeNode.data.gljList) {
                 if (!allMaterialTypes.includes(glj.type)) continue;
@@ -351,29 +386,27 @@ let calcTools = {
             sumU = (sumU).toDecimal(decimalObj.bills.unitPrice);
             sumT = (sumT).toDecimal(decimalObj.bills.totalPrice);
         }
-        // 叶子清单、定额的暂估费
-        else{
-            if (!treeNode.data.gljList) return;
-            let isGather = (projectObj.project.property.zanguCalcMode == zanguCalcType.gatherMaterial);
-
-            if (calcTools.isRationCategory(treeNode)){
-                sumU = estimateUnitFee();
-                if (isBase) return sumU;
+        else if (me.isParentBill(treeNode)){  // 父清单不要汇总单价。
+            sumT = eTFeeByChildren();
+            sumU = undefined;
+        }
+        else if (me.isLeafBill(treeNode)){
+            if (isGather)
+                sumT = eTFee()
+            else
+                sumT = eTFeeByChildren();
 
-                if (isGather)
-                    sumT = estimateTotalFee()
-                else
-                    sumT = (nodeQ * sumU).toDecimal(decimalObj.ration.totalPrice);
-            }
-            else if (calcTools.isBill(treeNode)){
-                if (isGather)
-                    sumT = estimateTotalFee()
-                else
-                    sumT = 0;
+            let q = nodeQ ? nodeQ : 1;
+            sumU = (sumT / q).toDecimal(decimalObj.bills.totalPrice);
+        }
+        else if (me.isRationCategory(treeNode)){
+            sumU = eUFee();
+            if (isBase) return sumU;
 
-                let q = nodeQ ? nodeQ : 1;
-                sumU = (sumT / q).toDecimal(decimalObj.bills.totalPrice);
-            };
+            if (isGather)
+                sumT = eTFee()
+            else
+                sumT = (nodeQ * sumU).toDecimal(decimalObj.ration.totalPrice);
         };
 
         me.checkFeeField(treeNode, {'fieldName': 'estimate', 'unitFee': sumU, 'totalFee': sumT});
@@ -1367,10 +1400,16 @@ class CalcProgram {
         if (treeNode.calcType == treeNodeCalcType.ctGatherBillsFees || treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){
             treeNode.data.programID = null;
             calcTools.initFees(treeNode);
-            let nodes = (treeNode.calcType == treeNodeCalcType.ctGatherBillsFees) ? treeNode.children : me.project.Ration.getRationNodes(treeNode);
+
+            let nodes = [];
+            if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){
+                calcTools.getGLJList(treeNode);
+                nodes = me.project.Ration.getRationNodes(treeNode);
+            }
+            else nodes = treeNode.children;
+
             let rst = [];
             for (let ft of cpFeeTypes) {
-                let isEstimate = ft.type == 'estimate';
                 let ftObj = {};
                 ftObj.fieldName = ft.type;
                 ftObj.name = ft.name;
@@ -1379,11 +1418,8 @@ class CalcProgram {
 
                 if (treeNode.calcType == treeNodeCalcType.ctGatherBillsFees){
                     for (let node of nodes) {
-                        if (node.data.feesIndex && node.data.feesIndex[ft.type]) {
-                            // 父清单不要汇总综合单价。
-                            // buf = (buf + parseFloatPlus(node.data.feesIndex[ft.type].unitFee)).toDecimal(decimalObj.process);
+                        if (node.data.feesIndex && node.data.feesIndex[ft.type]) { // 父清单不要汇总综合单价。
                             btf = (btf + parseFloatPlus(node.data.feesIndex[ft.type].totalFee)).toDecimal(decimalObj.process);
-                            // btuf = (btuf + parseFloatPlus(node.data.feesIndex[ft.type].tenderUnitFee)).toDecimal(decimalObj.process);
                             bttf = (bttf + parseFloatPlus(node.data.feesIndex[ft.type].tenderTotalFee)).toDecimal(decimalObj.process);
                         };
                     };
@@ -1391,7 +1427,6 @@ class CalcProgram {
                 else if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){     // 这里的算法要配合冷姐姐的神图才能看懂^_^
                     let sum_rtf = 0, sum_rttf = 0;
                     for (let node of nodes) {
-                        let rq = calcTools.uiNodeQty(node) ? calcTools.uiNodeQty(node) : 0;
                         let ruf = 0, rtuf = 0, rtf = 0, rttf = 0;
                         if (node.data.feesIndex && node.data.feesIndex[ft.type]) {
                             ruf = parseFloatPlus(node.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice);
@@ -1406,39 +1441,27 @@ class CalcProgram {
                         sum_rtf = (sum_rtf + rtf).toDecimal(decimalObj.process);
                         sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);
                     };
-                    if (isEstimate){
+
+                    if (me.project.property.billsCalcMode == leafBillGetFeeType.rationPriceConverse ||
+                        me.project.property.billsCalcMode == leafBillGetFeeType.rationPrice) {
+                        buf = (sum_rtf / bq).toDecimal(decimalObj.process);
+                        btuf = (sum_rttf / bq).toDecimal(decimalObj.process);
+                    };
+                    if (isBaseFeeType(ft.type) ||
+                        (me.project.property.billsCalcMode === leafBillGetFeeType.rationPrice && ft.type == "common")){
                         btf = sum_rtf;
                         bttf = sum_rttf;
-                    }else{
-                        if (me.project.property.billsCalcMode == leafBillGetFeeType.rationPriceConverse ||
-                            me.project.property.billsCalcMode == leafBillGetFeeType.rationPrice) {
-                            buf = (sum_rtf / bq).toDecimal(decimalObj.process);
-                            btuf = (sum_rttf / bq).toDecimal(decimalObj.process);
-                        };
-                        if (isBaseFeeType(ft.type) ||
-                            (me.project.property.billsCalcMode === leafBillGetFeeType.rationPrice && ft.type == "common")){
-                            btf = sum_rtf;
-                            bttf = sum_rttf;
-                        }
-                        else{
-                            btf = (buf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process);
-                            bttf = (btuf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process);
-                        };
+                    }
+                    else{
+                        btf = (buf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process);
+                        bttf = (btuf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process);
                     };
                 };
 
                 ftObj.totalFee = btf.toDecimal(decimalObj.bills.totalPrice);
                 ftObj.tenderTotalFee = bttf.toDecimal(decimalObj.bills.totalPrice);
-                if (isEstimate){
-                    if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){
-                        ftObj.unitFee = (ftObj.totalFee / bq).toDecimal(decimalObj.bills.unitPrice);
-                        ftObj.tenderUnitFee = (ftObj.tenderTotalFee / bq).toDecimal(decimalObj.bills.unitPrice);
-                    }
-                }
-                else{
-                    ftObj.unitFee = buf.toDecimal(decimalObj.bills.unitPrice);
-                    ftObj.tenderUnitFee = btuf.toDecimal(decimalObj.bills.unitPrice);
-                }
+                ftObj.unitFee = buf.toDecimal(decimalObj.bills.unitPrice);
+                ftObj.tenderUnitFee = btuf.toDecimal(decimalObj.bills.unitPrice);
 
                 calcTools.checkFeeField(treeNode, ftObj);
 
@@ -1509,10 +1532,11 @@ class CalcProgram {
         // 定额或叶子清单自己的计算程序计算
         else{
             let fnArr = [];
+            calcTools.getGLJList(treeNode);
+
             if (treeNode.calcType == treeNodeCalcType.ctRationCalcProgram) {
                 // 量价、工料机类型的定额要求市场合价
                 if (treeNode.data.type == rationType.volumePrice || treeNode.data.type == rationType.gljRation){
-                    delete treeNode.data.gljList;
                     let muf = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0;
                     let q = calcTools.uiNodeQty(treeNode) ? calcTools.uiNodeQty(treeNode) : 0;
                     let mtf = (muf * q).toDecimal(decimalObj.ration.totalPrice);
@@ -1521,33 +1545,9 @@ class CalcProgram {
                         treeNode.changed = true;
                     } ;
                 };
-
-                // 工料机类型的定额、定额要算暂估费
-                if (treeNode.data.type != rationType.volumePrice){
-                     treeNode.data.gljList = me.project.ration_glj.getGljArrByRation(treeNode.data);
-                    // 计算程序里没有暂估费的计算规则,会漏掉,所以这里要专门算。
-                    calcTools.estimateFee(treeNode);
-                    fnArr.push('estimate');
-                };
-
-                if (treeNode.data.programID == undefined){
-                    treeNode.data.programID = projectInfoObj.projectInfo.property.engineering;
-                };
-            }
-            else if (treeNode.calcType == treeNodeCalcType.ctBillCalcProgram) {
-                let rations = me.project.Ration.getBillsSortRation(treeNode.source.getID());
-                let q = calcTools.uiNodeQty(treeNode) ? calcTools.uiNodeQty(treeNode) : 1;
-                treeNode.data.gljList = me.project.ration_glj.getGatherGljArrByRations(rations, q);
-
-                if (treeNode.data.programID == undefined){
-                    treeNode.data.programID = projectInfoObj.projectInfo.property.engineering;
-                }
-
-                // 叶子清单自己的计算程序计算,其暂估费也要汇总算。
-                calcTools.estimateFee(treeNode);
-                fnArr.push('estimate');
             };
 
+            if (treeNode.data.programID == undefined) treeNode.data.programID = projectInfoObj.projectInfo.property.engineering;
             let template = me.compiledTemplates[treeNode.data.programID];
             treeNode.data.calcTemplate = template;
 
@@ -1579,6 +1579,8 @@ class CalcProgram {
             };
         };
 
+        if (!calcTools.isTotalCostBill(treeNode))  // 已在上面的分支中计算过
+            calcTools.estimateFee(treeNode);
         if (treeNode.changed && !changedArr.includes(treeNode)) changedArr.push(treeNode);
     };
 

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

@@ -299,7 +299,7 @@ const cpFeeTypes = [
     {type: 'machineDiff', name: '机械价差'},
     {type: 'adjustLabour', name: '调整人工费'},
     {type: 'adjustMachineLabour', name: '调整机上人工费'},
-    {type: 'estimate', name: '暂估费'},
+    // {type: 'estimate', name: '暂估费'},
     {type: 'common', name: '工程造价'},
     {type: 'fee1', name: '费用1'}//,
     // {type: 'fee2', name: '费用2'},

+ 1 - 1
web/building_saas/main/js/models/project_glj.js

@@ -38,7 +38,7 @@ ProjectGLJ.prototype.loadData = function (callback = null) {
         success: function (response) {
             self.isLoading = false;
             if (response.err === 1) {
-                let msg = response.msg !== undefined && response.msg !== '' ? response.msg : '读取工料机数据失败!';
+                let msg = response.msg !== undefined && response.msg !== '' ? response.msg : '读取人材机数据失败!';
                 alert(msg);
                 return false;
             }

+ 1 - 1
web/building_saas/main/js/views/calc_program_manage.js

@@ -51,7 +51,7 @@ let calcProgramManage = {
         me.mainSpread = sheetCommonObj.buildSheet($('#mainSpread')[0], me.mainSetting, me.datas.length);
         me.detailSpread = sheetCommonObj.buildSheet($('#detailSpread')[0], me.detailSetting, me.datas[0].calcItems.length);
         let arr = projectObj.project.calcProgram.compiledFeeTypeNames.slice();
-        arr.splice(arr.findIndex(function (e){return e == '暂估费'}), 1);
+        // arr.splice(arr.findIndex(function (e){return e == '暂估费'}), 1);
         let fieldName = new GC.Spread.Sheets.CellTypes.ComboBox();
         fieldName.items(arr);
         me.detailSpread.getSheet(0).getRange(-1, 4, -1, 1).cellType(fieldName);

+ 6 - 6
web/building_saas/main/js/views/glj_view_contextMenu.js

@@ -12,7 +12,7 @@ var gljContextMenu = {
             build: this.onbuild,
             items: {
                 "delete_glj": {
-                    name: '删除工料机',
+                    name: '删除人材机',
                     icon: 'fa-remove',
                     disabled: function () {
                         var sheetData = gljOprObj.sheetData;
@@ -36,7 +36,7 @@ var gljContextMenu = {
                     }
                 },
                 "add_glj": {
-                    name: '添加工料机',
+                    name: '添加人材机',
                     icon: 'fa-sign-in',
                     disabled: function () {
                         var selected = projectObj.project.mainTree.selected;
@@ -63,7 +63,7 @@ var gljContextMenu = {
                     }
                 },
                 "replace_glj": {
-                    name: '替换工料机',
+                    name: '替换人材机',
                     icon: 'fa-sign-in',
                     disabled: function () {
                         var sheetData = gljOprObj.sheetData;
@@ -85,7 +85,7 @@ var gljContextMenu = {
                     }
                 },
                 "m_replace_glj": {
-                    name: '批量替换工料机',
+                    name: '批量替换人材机',
                     icon: 'fa-sign-in',
                     disabled: function () {
                         var sheetData = gljOprObj.sheetData;
@@ -108,7 +108,7 @@ var gljContextMenu = {
                     }
                 },
                 "add_to_lib": {
-                    name: '保存到我的工料机库',
+                    name: '保存到我的人材机库',
                     icon: 'fa-sign-in',
                     disabled: function () {
                         var sheetData = gljOprObj.sheetData;
@@ -354,7 +354,7 @@ function getGLJData(actionType) {
 function showGLJClassTree(record) {
     CommonAjax.post('/rationGlj/getGLJClass',record, function (data) {
         if(data.exist==true){
-            alert("当前工料机已存在。");
+            alert("当前人材机已存在。");
         }else {
             gljOprObj.selectedGLJClass = record;
             $("#glj_class_div").modal({show:true});

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

@@ -520,7 +520,7 @@ var projectObj = {
         let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
         if(fieldName == 'marketUnitFee'){
             if(gljOprObj.hasComposition(node.data,true)){
-                alert("当前工料机的市场价由组成物计算得出,不可直接修改。");
+                alert("当前人材机的市场价由组成物计算得出,不可直接修改。");
                 return;
             }
         }
@@ -863,7 +863,7 @@ var projectObj = {
                     }
                 },
                 "insertGLJ": {
-                    name: "插入工料机",
+                    name: "插入人材机",
                     icon: 'fa-sign-in',
                     disabled: function () {
                         var selected = project.mainTree.selected;
@@ -1262,7 +1262,6 @@ var projectObj = {
             for(let node of nodes){
                 if(node && node.serialNo()!= -1){
                     sheet.getRange(node.serialNo(), -1, 1, -1).backColor(me.getNodeColorStyle(sheet, node).backColor);
-                    //sheet.setStyle(node.serialNo(), -1, me.getNodeColorStyle(sheet, node));
                 }
             }
         });

+ 1 - 1
web/common/html/header.html

@@ -13,7 +13,7 @@
                 <!--<a class="dropdown-item" href="/complementaryRation/main">定额库编辑器</a>-->
                 <a class="dropdown-item" href="javascript:void(0);" aria-expanded="false" data-toggle="modal" data-target="#opts-set"><i class="fa fa-sliders"></i> 选项</a>
                 <a class="dropdown-item" href="javascript:void(0);" data-toggle="modal" data-target="#comple-ration">定额库编辑器</a>
-                <a class="dropdown-item" href="/complementaryGlj">工料机库编辑器</a>
+                <a class="dropdown-item" href="/complementaryGlj">人材机库编辑器</a>
             </div>
         </li>
         <li class="nav-item dropdown">