瀏覽代碼

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/YangHuCost

TonyKang 4 年之前
父節點
當前提交
327c9b5058

File diff suppressed because it is too large
+ 7043 - 5
lib/bootstrap/bootstrap.min.js


+ 1 - 1
lib/bootstrap/css/bootstrap-submenu.css

@@ -2,7 +2,7 @@
   margin-left: 1px;
 }
 
-.dropdown-submenu .dropleft .dropdown-menu {
+.dropdown-submenu.dropleft .dropdown-menu {
   margin-right: 1px;
 }
 

File diff suppressed because it is too large
+ 5 - 5
lib/bootstrap/css/bootstrap.min.css


+ 5 - 4
modules/main/facade/ration_facade.js

@@ -206,7 +206,7 @@ async function getNewMaterialRationDatas(data,compilation,withCoe = false){
     let stdRation = await searchDao.getRationItem(data.userID, compilation._id, data.rationRepIds,data.code);
     if(!stdRation) throw  "找不到指定的定额!";//new Error("找不到指定的定额!");
 
-    let newRation = await createNewMaterialRation(stdRation,data.quantityDecimal,data.projectID);
+    let newRation = await createNewMaterialRation(stdRation,data.quantityDecimal,data.projectID,data.programArray);
     let [ration_gljs,projectGLJList] = await addRationGLJ(stdRation,newRation,compilation,true,data.connect_key);
     let result = [newRation,ration_gljs,projectGLJList]
     if(withCoe == true){
@@ -217,7 +217,7 @@ async function getNewMaterialRationDatas(data,compilation,withCoe = false){
 }
 
 
-async function createNewMaterialRation(std,quantityDecimal,projectID){
+async function createNewMaterialRation(std,quantityDecimal,projectID,programArray){
     let newData = {};
     newData.ID = uuidV1();
     newData.projectID = projectID;
@@ -230,11 +230,12 @@ async function createNewMaterialRation(std,quantityDecimal,projectID){
     newData.quantity=scMathUtil.roundForObj(1 / FilterNumberFromUnit(std.unit),quantityDecimal);
     newData.from = std.type === 'complementary' ? 'cpt' : 'std';
     newData.rationAssList =await  createRationAss(std,true);
-    if(std.feeType == undefined || std.feeType == null || std.feeType ==''){//定额取费专业为空的情况下,取项目属性中的定额取费专业ID
+    newData.programID = getProgramID(programArray,std.feeType);
+  /*   if(std.feeType == undefined || std.feeType == null || std.feeType ==''){//定额取费专业为空的情况下,取项目属性中的定额取费专业ID
       newData.programID = await getProgramForProject(projectID);
     }else {
       newData.programID = std.feeType;
-    }
+    } */
     return newData;
 }
 

+ 1 - 1
web/building_saas/complementary_glj_lib/js/init.js

@@ -12,7 +12,7 @@ const GLJ_INIT = (() => {
     // 设置分享按钮
     const shareHtml = `
     <span id="share-tip" class="ml-2" data-toggle="tooltip" data-placement="bottom" data-original-title="">
-        <a id="init-share" href="javascript:;" class="btn btn-xs btn-primary ${isReadOnly ? 'disabled' : ''}"><i class="fa fa-share-alt"></i> 分享</a>
+        <a id="init-share" style="width: 63px;" href="javascript:;" class="btn btn-xs btn-primary ${isReadOnly ? 'disabled' : ''}"><i class="fa fa-share-alt"></i> 分享</a>
     </span>`;
     const html = `
         <div style="display: flex; align-items: center">

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

@@ -96,13 +96,13 @@
             <div class="row" id="dataRow">
                 <div class="main-side p-0" id="leftContent" style="width: 25%; height: 100%; overflow: hidden">
                     <div style="width: 99%; float: left">
-                        <div class="tab-bar">
-                            <a href="javascript:void(0);" id="tree_Insert" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="插入"><i class="fa fa-plus" aria-hidden="true"></i></a>
-                            <a href="javascript:void(0);" id="tree_remove" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
-                            <a href="javascript:void(0);" id="tree_upLevel" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
-                            <a href="javascript:void(0);" id="tree_downLevel" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
-                            <a href="javascript:void(0);" id="tree_downMove" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
-                            <a href="javascript:void(0);" id="tree_upMove" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
+                        <div class="toolsbar">
+                            <a href="javascript:void(0);" id="tree_Insert" class="btn btn-light btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="插入"><i class="fa fa-plus" aria-hidden="true"></i></a>
+                            <a href="javascript:void(0);" id="tree_remove" class="btn btn-light btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
+                            <a href="javascript:void(0);" id="tree_upLevel" class="btn btn-light btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
+                            <a href="javascript:void(0);" id="tree_downLevel" class="btn btn-light btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
+                            <a href="javascript:void(0);" id="tree_downMove" class="btn btn-light btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
+                            <a href="javascript:void(0);" id="tree_upMove" class="btn btn-light btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
                         </div>
                         <div class="tab-content" id="sectionSpread" style="overflow: hidden">
                         </div>

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

@@ -20,7 +20,7 @@ const initialization = (() => {
         // 设置分享按钮
         const shareHtml = `
         <span id="share-tip" class="ml-2" data-toggle="tooltip" data-placement="bottom" data-original-title="">
-            <a id="init-share" href="javascript:;" class="btn btn-xs btn-primary"><i class="fa fa-share-alt"></i> 分享</a>
+            <a id="init-share" style="width: 63px;" href="javascript:;" class="btn btn-xs btn-primary"><i class="fa fa-share-alt"></i> 分享</a>
         </span>`;
         const html = `
             <div style="display: flex; align-items: center">

+ 4 - 0
web/building_saas/css/custom.css

@@ -612,4 +612,8 @@ input.text-right {
 .limit-price-input {
   display: inline-block;
   width: 80px;
+}
+
+.modal-footer {
+  padding: .75rem !important;
 }

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

@@ -990,7 +990,7 @@
                     </div>
                 </div>
                 <div class="modal-footer">
-                    <a href="javascript:void(0);" class="btn btn-primary" id="property_default" data-dismiss="modal" style="margin-right: 485px">恢复默认系统设置</a>
+                    <a href="javascript:void(0);" class="btn btn-primary" id="property_default" data-dismiss="modal" style="margin-right: 475px">恢复默认系统设置</a>
                     <a href="javascript:void(0);" class="btn btn-primary" id="property_ok" data-dismiss="modal">确定</a>
                     <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                 </div>

+ 39 - 72
web/building_saas/main/js/models/calc_program.js

@@ -467,26 +467,14 @@ let calcTools = {
     return result;
   },
   // masterTypeFilter 过滤机械机型:[]全部, [1,2]特大机械  [3,4]中小机械。  detailType 如机上人工费、机械折旧费等
-  machineDetailFee: function (
-    treeNode,
-    gljArr,
-    masterTypeFilter,
-    detailType,
-    isTender
-  ) {
+  machineDetailFee: function (treeNode, gljArr, masterTypeFilter, detailType, isTender) {
     if (!gljArr) return 0;
     let result = 0;
-    let nodeQ = isTender
-      ? calcTools.uiNodeTenderQty(treeNode)
-      : calcTools.uiNodeQty(treeNode);
+    let nodeQ = isTender ? calcTools.uiNodeTenderQty(treeNode) : calcTools.uiNodeQty(treeNode);
     for (let glj of gljArr) {
       if (baseMachineMasterTypes.includes(glj.type)) {
         // 机型不符
-        if (
-          masterTypeFilter.length > 0 &&
-          glj.model &&
-          !masterTypeFilter.includes(glj.model)
-        )
+        if (masterTypeFilter.length > 0 && glj.model && !masterTypeFilter.includes(glj.model))
           continue;
 
         let gljQ = isTender ? glj.tenderQuantity : glj.quantity;
@@ -497,13 +485,7 @@ let calcTools = {
         for (let md of mds) {
           if (md.type == detailType) {
             let q = md["consumption"] ? md["consumption"] : 0;
-            let p = isTender
-              ? md["tenderPrice"]
-                ? md["tenderPrice"]
-                : 0
-              : md["marketPrice"]
-              ? md["marketPrice"]
-              : 0;
+            let p = isTender ? md["tenderPrice"] ? md["tenderPrice"] : 0 : md["marketPrice"] ? md["marketPrice"] : 0;
             mdSum = mdSum + (q * p).toDecimal(decimalObj.glj.unitPriceHasMix);
             mdSum = mdSum.toDecimal(decimalObj.glj.unitPriceHasMix);
           }
@@ -809,6 +791,14 @@ let calcTools = {
       return rst;
     }
 
+    function isNeedRationPrice() {
+      return baseName.includes("定额") || baseName.includes("指标")
+    }
+
+    function isMachineLabour() {
+       return baseName.includes("机上人工") || baseName.includes("机械人工")
+    }
+
     if (
       baseName.includes("甲供") ||
       baseName.includes("甲定") ||
@@ -823,7 +813,7 @@ let calcTools = {
           result = (mprice - aprice).toDecimal(decimalObj.ration.unitPrice);
         }
       }
-    } else if (baseName.includes("机上人工")) {
+    } else if (isMachineLabour()) {
       if (treeNode.data.subType === gljType.GENERAL_MACHINE) {
         let glj = {
           code: treeNode.data.code,
@@ -831,50 +821,29 @@ let calcTools = {
           specs: treeNode.data.specs,
           unit: treeNode.data.unit,
           quantity: 1,
+          tenderQuantity: 1,
           type: treeNode.data.subType, // 注意:这里要取subType
         };
-        result = me.machineDetailFee(
-          treeNode,
-          [glj],
-          [],
-          gljType.MACHINE_LABOUR,
-          isTender
-        );
+        result = me.machineDetailFee(treeNode, [glj], [], gljType.MACHINE_LABOUR, isTender);
       }
     } else {
       if (isRCJZC(treeNode, baseName)) {
+        let mPrice = treeNode.data.marketUnitFee ? parseFloat(treeNode.data.marketUnitFee) : 0;
+        let coe = (isTender && calcTools.isTenderProjectGLJ(treeNode.data)) ? this.tenderCoe_GLJPrice() : 1;
+
         if (calcTools.isVolumePrice(treeNode)) {
-          if (isTender) {
-            let coe = this.tenderCoe_GLJPrice();
-            if (treeNode.data.marketUnitFee)
-              result = (
-                parseFloat(treeNode.data.marketUnitFee) * coe
-              ).toDecimal(decimalObj.ration.unitPrice);
-            else result = 0;
-          } else
-            result = treeNode.data.marketUnitFee
-              ? parseFloat(treeNode.data.marketUnitFee).toDecimal(
-                  decimalObj.ration.unitPrice
-                )
-              : 0;
-        } else if (calcTools.isGljRation(treeNode)) {
-          // result = treeNode.data.basePrice ? parseFloat(treeNode.data.basePrice).toDecimal(decimalObj.ration.unitPrice) : 0;
-          // 这里要取基价或市场价,但不能直接取basePrice,受限于项目属性的三个选项。
-          if (baseName.includes("定额"))
-            result = gljOprObj.getBasePrice(treeNode);
-          else
-            result = treeNode.data.marketUnitFee
-              ? parseFloat(treeNode.data.marketUnitFee).toDecimal(
-                  decimalObj.ration.unitPrice
-                )
-              : gljOprObj.getBasePrice(treeNode);
+          result = (mPrice * coe).toDecimal(decimalObj.ration.unitPrice);
+        }
+        else if (calcTools.isGljRation(treeNode)) {
+            // 这里要取基价或市场价,但不能直接取basePrice,受限于项目属性的三个选项。
+            let bPrice = gljOprObj.getBasePrice(treeNode);
+            if (mPrice == 0) mPrice = bPrice;
+            result = isNeedRationPrice() ? bPrice : (mPrice * coe).toDecimal(decimalObj.ration.unitPrice);
         }
       }
     }
 
-    let nodeQ = isTender
-      ? calcTools.uiNodeTenderQty(treeNode)
-      : calcTools.uiNodeQty(treeNode);
+    let nodeQ = isTender ? calcTools.uiNodeTenderQty(treeNode) : calcTools.uiNodeQty(treeNode);
     result = (result * nodeQ).toDecimal(decimalObj.ration.totalPrice);
     return result;
   },
@@ -1823,9 +1792,15 @@ let analyzer = {
     });
     for (var i = 0; i < atIDArr.length; i++) {
       let patt = new RegExp(atIDArr[i]);
-      let val =
-        projectObj.project.calcProgram.compiledTemplates[template.ID]
-          .compiledCalcItems[IDArr[i]].name;
+      let val = '';
+      try {
+        // 重庆养护2018的计算程序模板中ID=17重复,导到后面的模板覆盖前面的。此时后面的模板还没有健康的编译出来,这里调用会报错。
+          // 又不能直接改,受影响的旧项目有很多(3287个),这里加个保护。
+          val = projectObj.project.calcProgram.compiledTemplates[template.ID].compiledCalcItems[IDArr[i]].name;
+      }
+      catch (err) {
+          console.log(IDArr);
+      }
       rst = rst.replace(patt, val);
     }
     rst = rst.replace(/\[/g, "");
@@ -1941,17 +1916,7 @@ let executeObj = {
       return calcTools.marketPriceToBase(me.treeNode, baseName, isTender);
     else {
       if (!rationCalcBases[baseName]) {
-        hintBox.infoBox(
-          "系统提示",
-          "定额基数“" +
-            baseName +
-            "”未定义,计算错误。 (模板 " +
-            me.template.ID +
-            ",规则 " +
-            me.tempCalcItem.ID +
-            ")",
-          1
-        );
+        hintBox.infoBox("系统提示", "定额基数“" + baseName + "”未定义,计算错误。 (模板 " + me.template.ID + ",规则 " + me.tempCalcItem.ID + ")", 1);
         return 0;
       } else return rationCalcBases[baseName](me.treeNode, isTender);
     }
@@ -2113,7 +2078,9 @@ class CalcProgram {
         item.dispExprUser = analyzer.getDispExprUser(item.dispExpr, lc);
         if (item.expression == "HJ") item.compiledExpr = "$CE.HJ()";
         else item.compiledExpr = analyzer.getCompiledExpr(item.expression, lc);
-        item.statement = analyzer.getStatement(item.expression, template);
+        if ((item.statement == undefined) || (item.statement == '')) {
+            item.statement = analyzer.getStatement(item.expression, template);
+        }
 
         if (item.feeRateID) {
           let orgFeeRate = item.feeRate;

+ 57 - 34
web/building_saas/main/js/views/divide_view.js

@@ -183,12 +183,15 @@ let divideObj = {
     if(!$('#divede_calc_nav').hasClass('active')) return;
     this.divideSubSpread.setActiveSheetIndex(1);
     let selected = divideObj.getSelectedItem();
-    if(selected.itemType == "分摊项"){
-      selected = this.calcBills(selected);
-    }else{
-      projectObj.project.calcProgram.innerCalcRation({data:selected, sourceType:"ration", calcType: 1, updateData:[]});
+    if(selected){
+      if( selected.itemType == "分摊项"){
+        selected = this.calcBills(selected);
+      }else{
+        projectObj.project.calcProgram.innerCalcRation({data:selected, sourceType:"ration", calcType: 1, updateData:[]});
+      }
     }
-    let datas = selected.calcTemplate ? selected.calcTemplate.calcItems : [];
+   
+    let datas = selected && selected.calcTemplate ? selected.calcTemplate.calcItems : [];
     sheetCommonObj.initSheet(this.calcProgramSheet, calcProgramObj.setting, datas.length);
     sheetCommonObj.showData(this.calcProgramSheet, calcProgramObj.setting, datas);
     customRowHeader(this.calcProgramSheet, datas.length);
@@ -231,11 +234,14 @@ let divideObj = {
       if(init == true){//如果是初始化打开页面,要读取已经保存的分摊比例
          //使用已保存的分摊信息
          let item = divideObj.getSelectedItem();
-         let IDMap = {};
-         if(item.bills) IDMap = _.indexBy(item.bills,"ID");
-         if(IDMap[e.ID]){
-          e.divideRate = scMathUtil.roundForObj(parseFloat(IDMap[e.ID].divideRate) * 100,3);
-         } 
+         if(item){
+          let IDMap = {};
+          if(item.bills) IDMap = _.indexBy(item.bills,"ID");
+          if(IDMap[e.ID]){
+           e.divideRate = scMathUtil.roundForObj(parseFloat(IDMap[e.ID].divideRate) * 100,3);
+          } 
+         }
+         
       }else if(divideType == 0){//按清单金额比例
         if(e.totalFee != "" && total!=0) {
           totalFee = scMathUtil.roundForObj(e.totalFee,getDecimal("bills.totalPrice"));
@@ -311,7 +317,7 @@ let divideObj = {
       let datas = [];
       let item = divideObj.getSelectedItem();
       let IDMap = {};
-      if(item.bills) IDMap = _.indexBy(item.bills,"ID");
+      if(item && item.bills) IDMap = _.indexBy(item.bills,"ID");
       for(let n of projectObj.project.mainTree.roots){
         getDatas(n)
       }
@@ -606,8 +612,8 @@ let divideObj = {
 
     function getBillsDatas(){
       let datas = [];
-      let item = divideObj.getSelectedItem();
-      if(item.bills){
+      let item = divideObj.getDivideItem();
+      if(item && item.bills){
         for(let b of item.bills){
           if(b.divideRate > 0) datas.push(b);
         }
@@ -624,6 +630,18 @@ let divideObj = {
     }
     return data;
   },
+  getDivideItem:function(){
+   const selected = this.getSelectedItem();
+   if(selected){
+    if(selected.itemType ==="分摊项") return selected;
+    if(selected.ParentID){
+     return _.find(this.divideDatas,{ID:selected.ParentID})
+    }
+   } 
+   return null
+  },
+
+
   addNewItems:async function(itemType,type){
     let newItem = {
       ID:uuid.v1(),
@@ -772,6 +790,7 @@ let divideObj = {
     let newRation = null;
     try {
       $.bootstrapLoading.start();
+      data.programArray= calcTools.getProgramArray();
       let result = await ajaxPost("/ration/updateDivideRation",data)
       if(data.type=="add"){
         data.divideDatas.push({type:"add",doc:result.ration});
@@ -1102,20 +1121,23 @@ let divideObj = {
   },
   initNavItem(){
     let selected = this.getSelectedItem();
-    if(selected.itemType == "分摊项"){
-      $("#divide_itemTextDiv").hide();
-      $(`#divide_subSpread`).css('width', "100%");
-    }else{
-      $("#divide_itemTextDiv").show();
-      if(this.showDivideGljSubTab == true){
-        $("#divide_gljSubDiv").show();
-        $("#divide_rgResize").show();
-      } else {
-          $("#divide_gljSubDiv").hide();
-          $("#divide_rgResize").hide();
+    if(selected){
+      if( selected.itemType == "分摊项"){
+        $("#divide_itemTextDiv").hide();
+        $(`#divide_subSpread`).css('width', "100%");
+      }else{
+        $("#divide_itemTextDiv").show();
+        if(this.showDivideGljSubTab == true){
+          $("#divide_gljSubDiv").show();
+          $("#divide_rgResize").show();
+        } else {
+            $("#divide_gljSubDiv").hide();
+            $("#divide_rgResize").hide();
+        }
+        this.initItemWidth();
       }
-      this.initItemWidth();
-    }  
+    }
+      
     this.divideSubSpread.refresh();
   },
   initItemWidth:function (){
@@ -1586,16 +1608,17 @@ $('#divide_zmhs_toogle').bind('click',function (){
 
 $('#exec_divide_btn').bind('click',function (){
    if(projectReadOnly) return;
-   let selected = divideObj.getSelectedItem();
-   if(selected.itemType !="分摊项") return;
-   $("#exec_divide_label").html(`${selected.name}<br>分摊到:`)
+   let divideItem = divideObj.getDivideItem();
+   
+   if(!divideItem || divideItem.itemType !="分摊项") return;
+   $("#exec_divide_label").html(`${divideItem.name}<br>分摊到:`)
    $("#exec_divide_div").modal('show');
 });
 
 $('#cancel_divide_btn').bind('click',function (){
   if(projectReadOnly) return;
-  let selected = divideObj.getSelectedItem();
-  if(selected.itemType !="分摊项") return;
+  let selected = divideObj.getDivideItem();
+  if(!selected || selected.itemType !="分摊项") return;
   divideObj.cancelDivide(selected.ID);
 });
 
@@ -1612,8 +1635,8 @@ $('#divideBottom ul li a').on('shown.bs.tab',function () {
 $('#exec_divide_div').on('shown.bs.modal',function () {
   divideObj.initExecSpread();
   divideObj.showExecDatas(true);
-  let selected = divideObj.getSelectedItem();
-  let divideType = selected.divideType?selected.divideType:0;
+  let divideItem = divideObj.getDivideItem();
+  let divideType = divideItem.divideType?divideItem.divideType:0;
   for(let radio of $(".divide_type")){
     $(radio).prop('checked', divideType == $(radio).val());
   }
@@ -1622,7 +1645,7 @@ $('#exec_divide_div').on('shown.bs.modal',function () {
 
 $("#divide_confirm").bind('click',async function (){
   let divideType = parseInt($("input[name='divide_type']:checked").val());
-  let item = divideObj.getSelectedItem();
+  let item = divideObj.getDivideItem();
   divideObj.calcExecBillsData();
   await divideObj.calcDivideNodes(item,divideObj.execBillsDatas,async function(){
     let updateData = {ID:item.ID,type:'update',doc:{bills:divideObj.execBillsDatas,divideType:divideType}}

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

@@ -250,7 +250,7 @@ var rationLibObj = {
             }
         }
         if (sectionID) {
-            const [, owner] = $('#stdRationLibSelect').val().split('*');
+            const [, owner] = $(`#${from}stdRationLibSelect`).val().split('*');
             CommonAjax.post('/complementaryRation/api/getRationGljItemsBySection', {user_Id: userID, sectionId: sectionID, type: me.curLibType, owner}, function (datas) {
                 let chapterSheet = me[from+'rationChapterSpread'].getActiveSheet();
                 let sectionName = chapterSheet.getText(chapterSheet.getActiveRowIndex(), chapterSheet.getActiveColumnIndex());

+ 8 - 0
web/building_saas/standard_interface/config.js

@@ -102,6 +102,14 @@ const INTERFACE_CONFIG = (() => {
         [BID_SUBMISSION]: '.xjgltbx',
         [CONTROL]: '.xjglkzjx',
       },
+    },
+    '甘肃@张掖': {
+      scriptName: 'anhui_maanshan.js',
+      fileSuffix: {
+        [BID_INVITATION]: '.ZYEGLZB',
+        [BID_SUBMISSION]: '.ZYEGLTB',
+        [CONTROL]: '.ZYEGLKZJ',
+      },
     }
   };
 })()

+ 18 - 1
web/building_saas/standard_interface/export/anhui_maanshan.js

@@ -70,7 +70,7 @@ INTERFACE_EXPORT = (() => {
         { name: 'Jsdw', value: getValueByKey(information, 'constructingUnits') }, // 建设单位
         { name: 'Czzt', value: czzt[exportKind] }, // 操作状态:招标、投标、招标控制,即导出接口时,所选的文件类型
         { name: 'Jsfs', value: taxModeMap[getValueByKey(information, 'taxMode')] || '1', type: TYPE.INT }, // 计税方式,默认1。1=一般计税 2=简易计税
-        { name: 'Version', value: ['淮北', '铜陵', '亳州', '六安'].includes(subArea) ? '1.1' : '1.0' },
+        { name: 'Version', value: ['淮北', '铜陵', '亳州', '六安', '张掖'].includes(subArea) ? '1.1' : '1.0' },
       ];
       Element.call(this, 'JingJiBiao', attrs);
     }
@@ -114,6 +114,12 @@ INTERFACE_EXPORT = (() => {
           { name: 'ZbrDbSfzh', value: getValueByKey(information, 'tenderAuthorizerIDNo') }, // 招标人法定代表人或其授权人身份证号
           { name: 'ZxrDbSfzh', value: getValueByKey(information, 'consultantAuthorizerTaxpayerIdentificationNo') }, // 造价咨询人法定代表或其授权人纳税识别号
         ],
+        '张掖': [
+          { name: 'ZbrNssbh', value: getValueByKey(information, 'tendereeTaxpayerIdentificationNo') }, // 招标人纳税识别号
+          { name: 'ZxrNssbh', value: getValueByKey(information, 'costConsultantTaxpayerIdentificationNo') }, // 造价咨询人纳税识别号
+          { name: 'ZbrDbSfzh', value: getValueByKey(information, 'tenderAuthorizerIDNo') }, // 招标人法定代表人或其授权人身份证号
+          { name: 'ZxrDbSfzh', value: getValueByKey(information, 'consultantAuthorizerTaxpayerIdentificationNo') }, // 造价咨询人法定代表或其授权人纳税识别号
+        ],
       };
       if (extraMap[subArea]) {
         attrs.push(...extraMap[subArea]);
@@ -160,6 +166,12 @@ INTERFACE_EXPORT = (() => {
           { name: 'ZbrDbSfzh', value: getValueByKey(information, 'tenderAuthorizerIDNo') }, // 招标人法定代表人或其授权人身份证号
           { name: 'ZxrDbSfzh', value: getValueByKey(information, 'consultantAuthorizerTaxpayerIdentificationNo') }, // 造价咨询人法定代表或其授权人纳税识别号
         ],
+        '张掖': [
+          { name: 'ZbrNssbh', value: getValueByKey(information, 'tendereeTaxpayerIdentificationNo') }, // 招标人纳税识别号
+          { name: 'ZxrNssbh', value: getValueByKey(information, 'costConsultantTaxpayerIdentificationNo') }, // 造价咨询人纳税识别号
+          { name: 'ZbrDbSfzh', value: getValueByKey(information, 'tenderAuthorizerIDNo') }, // 招标人法定代表人或其授权人身份证号
+          { name: 'ZxrDbSfzh', value: getValueByKey(information, 'consultantAuthorizerTaxpayerIdentificationNo') }, // 造价咨询人法定代表或其授权人纳税识别号
+        ],
       };
       if (extraMap[subArea]) {
         attrs.push(...extraMap[subArea]);
@@ -199,6 +211,11 @@ INTERFACE_EXPORT = (() => {
           { name: 'TbrNssbh', value: getValueByKey(information, 'bidderTaxpayerIdentificationNo') }, // 投标人纳税识别号
           { name: 'TbrDbSfzh', value: getValueByKey(information, 'bidderAuthorizerTaxpayerIdentificationNo') }, // 投标人法定代表或其授权人身份证号
         ],
+        '张掖': [
+          { name: 'ZbrNssbh', value: getValueByKey(information, 'tendereeTaxpayerIdentificationNo') }, // 招标人纳税识别号
+          { name: 'TbrNssbh', value: getValueByKey(information, 'bidderTaxpayerIdentificationNo') }, // 投标人纳税识别号
+          { name: 'TbrDbSfzh', value: getValueByKey(information, 'bidderAuthorizerTaxpayerIdentificationNo') }, // 投标人法定代表或其授权人身份证号
+        ],
       };
       if (extraMap[subArea]) {
         attrs.push(...extraMap[subArea]);

+ 6 - 3
web/over_write/js/guangxi_2021.js

@@ -390,10 +390,12 @@ function overwriteRationCalcBases() {
     rationCalcBases['施工机械使用费'] = function (node, isTender) {
         return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptMarketPrice, isTender);
     };
+    rationCalcBases['施工机械人工费'] = function (node, isTender) {
+        return calcTools.machineDetailFee(node, node.data.gljList, [], gljType.MACHINE_LABOUR, isTender);
+    };
     rationCalcBases['设备购置费'] = function (node, isTender) {
         return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice, isTender);
     };
-
     rationCalcBases['定额人工费'] = function (node, isTender) {
         return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
     };
@@ -419,10 +421,10 @@ function overwriteRationCalcBases() {
 
 if (typeof projectObj !== 'undefined') {
     projectObj.isInsertEquipmentVisable = function (selected) {
-        return true;   //广西不管是预算或者工程量清单,都是显示   
+        return true;   //广西不管是预算或者工程量清单,都是显示
     }
   }
-  
+
 
 if (typeof feeRateObject !== 'undefined') {
     feeRateObject.feeRateSpecialHandle = function (subRate, value) {
@@ -451,6 +453,7 @@ if (typeof feeRateObject !== 'undefined') {
         { type: 'marketLabour', name: '人工费' },
         { type: 'marketMaterial', name: '材料费' },
         { type: 'marketMachine', name: '施工机械使用费' },
+        { type: 'marketMachineLabour', name: '施工机械人工费' },
         { type: 'marketEquipment', name: '设备购置费' },
 
         { type: 'labour', name: '定额人工费' },

+ 7 - 1
web/over_write/js/guangxiyusuan_2021.js

@@ -217,6 +217,9 @@ function overwriteRationCalcBases() {
     rationCalcBases['施工机械使用费'] = function (node, isTender) {
         return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptMarketPrice, isTender);
     };
+    rationCalcBases['施工机械人工费'] = function (node, isTender) {
+        return calcTools.machineDetailFee(node, node.data.gljList, [], gljType.MACHINE_LABOUR, isTender);
+    };
     rationCalcBases['设备购置费'] = function (node, isTender) {
         return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice, isTender);
     };
@@ -236,7 +239,7 @@ function overwriteRationCalcBases() {
 
 if (typeof projectObj !== 'undefined') {
     projectObj.isInsertEquipmentVisable = function (selected) {
-        return true;   //广西不管是预算或者工程量清单,都是显示   
+        return true;   //广西不管是预算或者工程量清单,都是显示
     }
   }
 
@@ -258,15 +261,18 @@ if (typeof feeRateObject !== 'undefined') {
 (function overwriteFeeTypes() {
     if (typeof cpFeeTypes == 'undefined') return;
     cpFeeTypes = [
+        { type: 'marketDirect', name: '直接费' },
         { type: 'marketLabour', name: '人工费' },
         { type: 'marketMaterial', name: '材料费' },
         { type: 'marketMachine', name: '施工机械使用费' },
+        { type: 'marketMachineLabour', name: '施工机械人工费' },
         { type: 'marketEquipment', name: '设备购置费' },
         { type: 'labour', name: '指标人工费' },
         { type: 'material', name: '指标材料费' },
         { type: 'machine', name: '指标施工机械使用费' },
         { type: 'equipment', name: '指标设备购置费' },
         { type: 'direct', name: '指标直接费' },
+        { type: 'measure', name: '措施费' },
         { type: 'manage', name: '企业管理费' },
         { type: 'force', name: '规费' },
         { type: 'profit', name: '利润' },

+ 4 - 4
web/users/html/login-ver.html

@@ -25,12 +25,12 @@
             <div class="">
             <div class="row  modal-auto-height">
                 <% for (const ver of versionData) { %>
-                        <div class="col-sm-6">
+                        <div class="col-sm-4 mb-4">
                             <div class="card card-block">
                                 <div class="card-body">
-                                    <h3 class="card-title"><%= ver.name %></h3>
-                                    <!--<p class="card-text"><%= ver.description ? ver.description : '介绍内容' %></p>-->
-                                    <a class="btn btn-primary" href="/boot/<%= ver._id.toString() %>">开始使用</a>
+                                    <h4 class="card-title d-flex justify-content-between"><%= ver.name %>
+                                        <a class="btn btn-sm btn-primary" href="/boot/<%= ver._id.toString() %>">开始使用</a></h4>
+                                    <p class="small mb-0 text-muted"><%= ver.description ? ver.description : '介绍内容' %></p>
                                 </div>
                             </div>
                         </div>

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

@@ -60,17 +60,17 @@
                 </div>
             </div>
         </form>
-        <div class="text-white fixed-bottom"><p class="text-center mb-1">Copyright © 2018 <a href="https://smartcost.com.cn" target="_blank" class="text-white">珠海纵横创新软件有限公司</a>.All Rights Reserved.<a class="text-white ml-2" href="http://www.miitbeian.gov.cn" target="_blank">粤ICP备14032472号</a>  
+        <div class="text-white fixed-bottom"><p class="text-center mb-1">Copyright © 2018 <a href="https://smartcost.com.cn" target="_blank" class="text-white">珠海纵横创新软件有限公司</a>.All Rights Reserved.<a class="text-white ml-2" href="http://www.miitbeian.gov.cn" target="_blank">粤ICP备14032472号</a>
           <% if (title == "纵横公路云造价") { %>
             <%include ../../common/html/dataStatistics_sc.html %>
           <% } else { %>
             <%include ../../common/html/dataStatistics.html %>
-          <% } %>      
+          <% } %>
         <small class="position-absolute mr-3 login-img-cr">Photo by <a class="text-white" href="https://www.pexels.com/@no-name-14543?utm_content=attributionCopyText&utm_medium=referral&utm_source=pexels" target="_blank">NO NAME</a> from <a class="text-white" href="https://www.pexels.com/photo/nature-sky-sunset-the-mountains-66997/?utm_content=attributionCopyText&utm_medium=referral&utm_source=pexels" target="_blank">Pexels</a></small></p></div>
     </div>
     <!--弹出信息-->
-    <div class="modal fade" id="ver" data-backdrop="static" style="top: 25%;">
-        <div class="modal-dialog modal-lg" role="document">
+    <div class="modal fade" id="ver" data-backdrop="static" style="">
+        <div class="modal-dialog modal-xl" role="document">
             <div class="modal-content compilation-content">
                 <div class="modal-header">
                     <h5 class="modal-title">选择编制办法</h5>

+ 5 - 4
web/users/js/login.js

@@ -534,12 +534,13 @@ function cleanError() {
 function setVersion(versionData) {
     let html = '';
     for (let version of versionData) {
-        //let description = version.description ? version.description : '介绍内容';
-        let tmpHtml = '<div class="col-sm-4 mb-3">' +
+        let description = version.description ? version.description : '';
+        let tmpHtml = '<div class="col-sm-4 mb-4">' +
             '<div class="card card-block">' +
             '<div class="card-body">' +
-            '<h3 class="card-title">'+ version.name +'</h3>' +
-            '<a class="btn btn-primary" href="/boot/'+ version._id.toString() +'">开始使用</a>' +
+            '<h4 class="card-title d-flex justify-content-between">'+ version.name +
+            '<a class="btn btn-sm btn-primary" href="/boot/'+ version._id.toString() +'">开始使用</a></h4>' +
+            '<p class="small mb-0 text-muted">' + description + '</p>' +
             '</div>' +
             '</div>' +
             '</div>';