Browse Source

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

zhangweicheng 1 year ago
parent
commit
4a27bd6454

+ 1 - 0
modules/all_models/bills_template_items.js

@@ -37,6 +37,7 @@ let BillsTemplateSchema = {
     itemCharacterText: String,
     jobContentText: String,
     cantDelete: Boolean,
+    isBillBudget: Boolean, // 清单预算标记
     //费率ID
     feeRateID: Number,
     quantity: String,

+ 106 - 103
modules/common/const/bills_fixed.js

@@ -48,15 +48,15 @@ let fixedFlag = {
     //计日工 daywork labor
     DAYWORK_LABOR: 22,
     //劳务
-    LABOUR_SERVICE:23,
+    LABOUR_SERVICE: 23,
     //材料
-    MATERIAL:24,
+    MATERIAL: 24,
     //施工机械
-    CONSTRUCTION_MACHINE:25,
+    CONSTRUCTION_MACHINE: 25,
     //暂列金额
-    PROVISIONAL:26,
+    PROVISIONAL: 26,
     //安全生产费
-    SAFE_COST:27,
+    SAFE_COST: 27,
     //100章清单
     ONE_HUNDRED_BILLS: 28,
     // 一二三部分合计
@@ -99,105 +99,107 @@ let fixedFlag = {
 };
 
 
-if(process.env.NODE_ENV.indexOf('hw')!==-1){
+if (process.env.NODE_ENV.indexOf('hw') !== -1) {
     // 公路2.0的固定清单类别和建筑的要合并统一处理
     fixedFlag = {
         // 暂列金额
-        PROVISIONAL : 8,
+        PROVISIONAL: 8,
         // 材料
-        MATERIAL : 24,
+        MATERIAL: 24,
         // 建筑安装工程费
-        CONSTRUCTION_INSTALL_FEE : 39,
+        CONSTRUCTION_INSTALL_FEE: 39,
         // 土地使用及拆迁补偿费
-        LAND_USED_DEMOLITION : 40,
+        LAND_USED_DEMOLITION: 40,
         // 养护工程其他费用
-        MAINTENANCE_EXPENSES : 41,
+        MAINTENANCE_EXPENSES: 41,
         // 预备费
-        BUDGET_FEE : 42,
+        BUDGET_FEE: 42,
         // 基本预备费
-        BASE_BUDGET_FEE : 43,
+        BASE_BUDGET_FEE: 43,
         // 价差预备费
-        SPREAD_BUDGET_FEE : 44,
+        SPREAD_BUDGET_FEE: 44,
         // 一二三四部分合计
-        ONE_TO_FOUR_TOTAL : 45,
+        ONE_TO_FOUR_TOTAL: 45,
         // 贷款利息
-        LOAN_INTEREST : 46,
+        LOAN_INTEREST: 46,
         // 总造价
-        TOTAL_COST : 47,
+        TOTAL_COST: 47,
         // 设备购置费
-        EQUIPMENT_ACQUISITION_FEE : 48,
+        EQUIPMENT_ACQUISITION_FEE: 48,
         // 专项费用 Special cost
-        SPECIAL_COST : 49,
+        SPECIAL_COST: 49,
         // 施工场地建设费
-        CONSTRUCTION_PLANT_COST : 50,
+        CONSTRUCTION_PLANT_COST: 50,
         // 养护单位(业主)管理费
-        MAINTENANCE_MANAGENENT_FEE : 51,
+        MAINTENANCE_MANAGENENT_FEE: 51,
         // 信息化费 Informatization fee
-        INFORMATIZATION_FEE : 52,
+        INFORMATIZATION_FEE: 52,
         // 工程监理费 Engineering supervision fee
-        ENGINEERING_SUP_FEE : 53,
+        ENGINEERING_SUP_FEE: 53,
         // 设计文件审查费 Design Document Review Fee
-        DOCUMENT_REVIEW_FEE : 54,
+        DOCUMENT_REVIEW_FEE: 54,
         // 勘察设计费 Survey and design fees
-        SURVEY_DESIGN_FEE : 55,
+        SURVEY_DESIGN_FEE: 55,
         // 招标代理及标底编制费 Bidding Agent and Preparing Fee of Bid Base
-        AGENT_BASE_FEE : 56,
+        AGENT_BASE_FEE: 56,
         // 第100章至700章清单
-        ONE_SEVEN_BILLS : 57,
+        ONE_SEVEN_BILLS: 57,
         // 专项暂定合计
-        PROVISIONAL_TOTAL : 58,
+        PROVISIONAL_TOTAL: 58,
         // 清单合计扣除专项暂定合计
-        BILLS_TOTAL_WT_PROV : 59,
+        BILLS_TOTAL_WT_PROV: 59,
         // 计日工 daywork labor
-        DAYWORK_LABOR : 60,
+        DAYWORK_LABOR: 60,
         // 劳务
-        LABOUR_SERVICE : 61,
+        LABOUR_SERVICE: 61,
         // 施工机械
-        CONSTRUCTION_MACHINE : 62,
+        CONSTRUCTION_MACHINE: 62,
         // 安全生产费
-        SAFE_COST : 63,
+        SAFE_COST: 63,
         // 100章清单
-        ONE_HUNDRED_BILLS : 64,
+        ONE_HUNDRED_BILLS: 64,
         // 一二三部分合计
-        ONE_TO_THREE_TOTAL : 65,
+        ONE_TO_THREE_TOTAL: 65,
         // 前期工作费
-        PRELIMINARY_WORK : 66,
+        PRELIMINARY_WORK: 66,
         // 小修费
-        MINOR_REPAIR_FEE : 67,
+        MINOR_REPAIR_FEE: 67,
         // 预防养护费
-        PREVENTIVE_MAINTENANCE_FEE : 68,
+        PREVENTIVE_MAINTENANCE_FEE: 68,
         // 修复养护费
-        REPAIR_MAINTENANCE_FEE : 69,
+        REPAIR_MAINTENANCE_FEE: 69,
         // 日常养护费
-        DAILY_MAINTENANCE_FEE : 70,
+        DAILY_MAINTENANCE_FEE: 70,
         // 日常巡查费
-        DAILY_PATROL_FEE : 71,
+        DAILY_PATROL_FEE: 71,
         // 日常保养费
-        DAILY_UPKEEP_FEE : 72,
+        DAILY_UPKEEP_FEE: 72,
         // 信息化系统w维护费
-        INFORMATIZATION_MAINTENANCE_FEE : 73,
+        INFORMATIZATION_MAINTENANCE_FEE: 73,
         // 技术状况评定费
-        TECH_ASSESSMENT_FEE : 74,
+        TECH_ASSESSMENT_FEE: 74,
         // 系统维护费
-        SYSTEM_MAINTENANCE_FEE : 75,
+        SYSTEM_MAINTENANCE_FEE: 75,
         // 养护机械设备购置费
-        MAINTENANCE_MACHINE_ACQUISITION_FEE : 76,
+        MAINTENANCE_MACHINE_ACQUISITION_FEE: 76,
         // 养护工程费
-        MAINTENANCE_FEE : 77,
+        MAINTENANCE_FEE: 77,
         // 应急养护费
-        EMERGENCY_FEE : 78,
+        EMERGENCY_FEE: 78,
         // 施工环保费
-        CONSTRUCTION_ENVIROMENTAL_PROTECTION_FEE : 79,
+        CONSTRUCTION_ENVIROMENTAL_PROTECTION_FEE: 79,
         // 其他新增费用
-        OTHER_NEW_FEE : 80,
+        OTHER_NEW_FEE: 80,
         // 通则
-        GENERAL_RULE : 81,
+        GENERAL_RULE: 81,
         // 保险费
-        INSURANCE_FEE : 82,
+        INSURANCE_FEE: 82,
         // 环保、水保费
-        EP_WP_INSURANCE_FEE : 83,
-      };
-} 
+        EP_WP_INSURANCE_FEE: 83,
+        // 钢材水泥柴油等
+        STEEL_CEMENT_DIESEL: 184,
+    };
+}
 
 
 /*建筑安装工程费、土地使用及拆迁补偿费、养护工程其他费用、预备费、基本预备费、价差预备费、一二三四部分合计、贷款利息、总造价、
@@ -206,53 +208,54 @@ if(process.env.NODE_ENV.indexOf('hw')!==-1){
 
  第100章至700章清单、专项暂定合计、清单合计扣除专项暂定合计、计日工、劳务、材料、施工机械、暂列金额。*/
 const fixedFlagList = [
-    {name: "建筑安装工程费", value: fixedFlag.CONSTRUCTION_INSTALL_FEE},
-    {name: "土地使用及拆迁补偿费", value: fixedFlag.LAND_USED_DEMOLITION},
-    {name: "养护工程其他费用", value: fixedFlag.MAINTENANCE_EXPENSES},
-    {name: "预备费", value: fixedFlag.BUDGET_FEE},
-    {name: "基本预备费", value: fixedFlag.BASE_BUDGET_FEE},
-    {name: "价差预备费", value: fixedFlag.SPREAD_BUDGET_FEE},
-    {name: "一二三部分合计", value: fixedFlag.ONE_TO_THREE_TOTAL},
-    {name: "一二三四部分合计", value: fixedFlag.ONE_TO_FOUR_TOTAL},
-    {name: "贷款利息", value: fixedFlag.LOAN_INTEREST},
-    {name: "总造价", value: fixedFlag.TOTAL_COST},
-    {name: "设备购置费", value: fixedFlag.EQUIPMENT_ACQUISITION_FEE},
-    {name: "专项费用", value: fixedFlag.SPECIAL_COST},
-    {name: "施工场地建设费", value: fixedFlag.CONSTRUCTION_PLANT_COST},
-    {name: "养护单位(业主)管理费", value: fixedFlag.MAINTENANCE_MANAGENENT_FEE},
-    {name: "施工环保费", value: fixedFlag.CONSTRUCTION_ENVIROMENTAL_PROTECTION_FEE},
-    {name: "信息化费", value: fixedFlag.INFORMATIZATION_FEE},
-    {name: "工程监理费", value: fixedFlag.ENGINEERING_SUP_FEE},
-    {name: "设计文件审查费", value: fixedFlag.DOCUMENT_REVIEW_FEE},
-    {name: "勘察设计费", value: fixedFlag.SURVEY_DESIGN_FEE},
-    {name: "招标代理及标底编制费", value: fixedFlag.AGENT_BASE_FEE},
-    {name: "前期工作费", value: fixedFlag.PRELIMINARY_WORK},
-    {name: "日常养护费", value: fixedFlag.DAILY_MAINTENANCE_FEE},
-    {name: "日常巡查费", value: fixedFlag.DAILY_PATROL_FEE},
-    {name: "日常保养费", value: fixedFlag.DAILY_UPKEEP_FEE},
-    {name: "小修费", value: fixedFlag.MINOR_REPAIR_FEE},
-    {name: "信息化系统维护费", value: fixedFlag.INFORMATIZATION_MAINTENANCE_FEE},
-    {name: "技术状况评定费", value: fixedFlag.TECH_ASSESSMENT_FEE},
-    {name: "系统维护费", value: fixedFlag.SYSTEM_MAINTENANCE_FEE},
-    {name: "养护机械设备购置费", value: fixedFlag.MAINTENANCE_MACHINE_ACQUISITION_FEE},
-    {name: "养护工程费", value: fixedFlag.MAINTENANCE_FEE},
-    {name: "预防养护费", value: fixedFlag.PREVENTIVE_MAINTENANCE_FEE},
-    {name: "修复养护费", value: fixedFlag.REPAIR_MAINTENANCE_FEE},
-    {name: "应急养护费", value: fixedFlag.EMERGENCY_FEE},
-    {name: "第100章至700章清单", value: fixedFlag.ONE_SEVEN_BILLS},
-    {name: "专项暂定合计", value: fixedFlag.PROVISIONAL_TOTAL},
-    {name: "清单合计扣除专项暂定合计", value: fixedFlag.BILLS_TOTAL_WT_PROV},
-    {name: "计日工", value: fixedFlag.DAYWORK_LABOR},
-    {name: "劳务", value: fixedFlag.LABOUR_SERVICE},
-    {name: "材料", value: fixedFlag.MATERIAL},
-    {name: "施工机械", value: fixedFlag.CONSTRUCTION_MACHINE},
-    {name: "暂列金额", value: fixedFlag.PROVISIONAL},
-    {name:"安全生产费",value:fixedFlag.SAFE_COST},
-    {name:"第100章清单 总则",value:fixedFlag.ONE_HUNDRED_BILLS},
-    {name: '其他新增费用', value: fixedFlag.OTHER_NEW_FEE},
-    {name: '通则', value: fixedFlag.GENERAL_RULE},
-    {name: '保险费', value: fixedFlag.INSURANCE_FEE},
-    {name: '施工环保、水保费', value: fixedFlag.EP_WP_INSURANCE_FEE},
+    { name: "建筑安装工程费", value: fixedFlag.CONSTRUCTION_INSTALL_FEE },
+    { name: "土地使用及拆迁补偿费", value: fixedFlag.LAND_USED_DEMOLITION },
+    { name: "养护工程其他费用", value: fixedFlag.MAINTENANCE_EXPENSES },
+    { name: "预备费", value: fixedFlag.BUDGET_FEE },
+    { name: "基本预备费", value: fixedFlag.BASE_BUDGET_FEE },
+    { name: "价差预备费", value: fixedFlag.SPREAD_BUDGET_FEE },
+    { name: "一二三部分合计", value: fixedFlag.ONE_TO_THREE_TOTAL },
+    { name: "一二三四部分合计", value: fixedFlag.ONE_TO_FOUR_TOTAL },
+    { name: "贷款利息", value: fixedFlag.LOAN_INTEREST },
+    { name: "总造价", value: fixedFlag.TOTAL_COST },
+    { name: "设备购置费", value: fixedFlag.EQUIPMENT_ACQUISITION_FEE },
+    { name: "专项费用", value: fixedFlag.SPECIAL_COST },
+    { name: "施工场地建设费", value: fixedFlag.CONSTRUCTION_PLANT_COST },
+    { name: "养护单位(业主)管理费", value: fixedFlag.MAINTENANCE_MANAGENENT_FEE },
+    { name: "施工环保费", value: fixedFlag.CONSTRUCTION_ENVIROMENTAL_PROTECTION_FEE },
+    { name: "信息化费", value: fixedFlag.INFORMATIZATION_FEE },
+    { name: "工程监理费", value: fixedFlag.ENGINEERING_SUP_FEE },
+    { name: "设计文件审查费", value: fixedFlag.DOCUMENT_REVIEW_FEE },
+    { name: "勘察设计费", value: fixedFlag.SURVEY_DESIGN_FEE },
+    { name: "招标代理及标底编制费", value: fixedFlag.AGENT_BASE_FEE },
+    { name: "前期工作费", value: fixedFlag.PRELIMINARY_WORK },
+    { name: "日常养护费", value: fixedFlag.DAILY_MAINTENANCE_FEE },
+    { name: "日常巡查费", value: fixedFlag.DAILY_PATROL_FEE },
+    { name: "日常保养费", value: fixedFlag.DAILY_UPKEEP_FEE },
+    { name: "小修费", value: fixedFlag.MINOR_REPAIR_FEE },
+    { name: "信息化系统维护费", value: fixedFlag.INFORMATIZATION_MAINTENANCE_FEE },
+    { name: "技术状况评定费", value: fixedFlag.TECH_ASSESSMENT_FEE },
+    { name: "系统维护费", value: fixedFlag.SYSTEM_MAINTENANCE_FEE },
+    { name: "养护机械设备购置费", value: fixedFlag.MAINTENANCE_MACHINE_ACQUISITION_FEE },
+    { name: "养护工程费", value: fixedFlag.MAINTENANCE_FEE },
+    { name: "预防养护费", value: fixedFlag.PREVENTIVE_MAINTENANCE_FEE },
+    { name: "修复养护费", value: fixedFlag.REPAIR_MAINTENANCE_FEE },
+    { name: "应急养护费", value: fixedFlag.EMERGENCY_FEE },
+    { name: "第100章至700章清单", value: fixedFlag.ONE_SEVEN_BILLS },
+    { name: "专项暂定合计", value: fixedFlag.PROVISIONAL_TOTAL },
+    { name: "清单合计扣除专项暂定合计", value: fixedFlag.BILLS_TOTAL_WT_PROV },
+    { name: "计日工", value: fixedFlag.DAYWORK_LABOR },
+    { name: "劳务", value: fixedFlag.LABOUR_SERVICE },
+    { name: "材料", value: fixedFlag.MATERIAL },
+    { name: "施工机械", value: fixedFlag.CONSTRUCTION_MACHINE },
+    { name: "暂列金额", value: fixedFlag.PROVISIONAL },
+    { name: "安全生产费", value: fixedFlag.SAFE_COST },
+    { name: "第100章清单 总则", value: fixedFlag.ONE_HUNDRED_BILLS },
+    { name: '其他新增费用', value: fixedFlag.OTHER_NEW_FEE },
+    { name: '通则', value: fixedFlag.GENERAL_RULE },
+    { name: '保险费', value: fixedFlag.INSURANCE_FEE },
+    { name: '施工环保、水保费', value: fixedFlag.EP_WP_INSURANCE_FEE },
+    { name: '钢材水泥柴油等', value: fixedFlag.STEEL_CEMENT_DIESEL },
 ];
 
-export {fixedFlag as default, fixedFlagList as List};
+export { fixedFlag as default, fixedFlagList as List };

+ 32 - 30
public/web/tree_sheet/tree_sheet_helper.js

@@ -5,7 +5,7 @@
 var TREE_SHEET_HELPER = {
     getObjPos: function (obj) {
         let target = obj;
-        let pos = {x: obj.offsetLeft, y: obj.offsetTop};
+        let pos = { x: obj.offsetLeft, y: obj.offsetTop };
 
         target = obj.offsetParent;
         while (target) {
@@ -24,7 +24,7 @@ var TREE_SHEET_HELPER = {
         setting.pos = this.getObjPos(obj);
     },
     createNewSpread: function (obj) {
-        var spread = new GC.Spread.Sheets.Workbook(obj, {sheetCount: 1});
+        var spread = new GC.Spread.Sheets.Workbook(obj, { sheetCount: 1 });
         spread.options.tabStripVisible = false;
         spread.options.scrollbarMaxAlign = true;
         spread.options.cutCopyIndicatorVisible = false;
@@ -138,7 +138,9 @@ var TREE_SHEET_HELPER = {
                     cell.value(getFieldText2());
                 }
                 if (colSetting.data.cellType && Object.prototype.toString.apply(colSetting.data.cellType) !== "[object String]") {
-                    cell.cellType(colSetting.data.cellType);
+                    if (colSetting.needCellType === undefined || colSetting.needCellType(node)) {
+                        cell.cellType(colSetting.data.cellType);
+                    }
                 }
                 if (colSetting.readOnly) {
                     if (Object.prototype.toString.apply(colSetting.readOnly) === "[object Function]") {
@@ -156,11 +158,11 @@ var TREE_SHEET_HELPER = {
             }
         });
     },
-    refreshChildrenVisiable:function(sheet,tree,node,row,visiable){
+    refreshChildrenVisiable: function (sheet, tree, node, row, visiable) {
         let iCount = node.posterityCount(), i, child;
         for (i = 0; i < iCount; i++) {
-            child = tree.items[row + i +1];
-            sheet.setRowVisible(row + i + 1, visiable?visiable:child.visible, GC.Spread.Sheets.SheetArea.viewport);
+            child = tree.items[row + i + 1];
+            sheet.setRowVisible(row + i + 1, visiable ? visiable : child.visible, GC.Spread.Sheets.SheetArea.viewport);
         }
         sheet.invalidateLayout();
     },
@@ -311,16 +313,16 @@ var TREE_SHEET_HELPER = {
                 hitinfo.sheet.repaint();
             }
         };
-        TreeNodeCellType.prototype.processMouseEnter = function(hitinfo){
-            if(hitinfo.sheet.name() === 'stdBillsGuidance_bills'){
-                TREE_SHEET_HELPER.delayShowTips(hitinfo,setting);
+        TreeNodeCellType.prototype.processMouseEnter = function (hitinfo) {
+            if (hitinfo.sheet.name() === 'stdBillsGuidance_bills') {
+                TREE_SHEET_HELPER.delayShowTips(hitinfo, setting);
             }
         };
         TreeNodeCellType.prototype.processMouseLeave = function (hitinfo) {
             TREE_SHEET_HELPER.hideTipsDiv();
         };
 
-        let TipCellType = function () {};
+        let TipCellType = function () { };
         TipCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
         TipCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
             return {
@@ -380,10 +382,10 @@ var TREE_SHEET_HELPER = {
             TREE_SHEET_HELPER.refreshNodesVisible(tree.roots, sheet, true);
         });
     },
-    showTipsDiv:function (text,setting,hitinfo) {
+    showTipsDiv: function (text, setting, hitinfo) {
         if (text && text !== '') {
-            if(text) text = replaceAll(/[\n]/,'<br>',text);
-            if(!this._fixedTipElement){
+            if (text) text = replaceAll(/[\n]/, '<br>', text);
+            if (!this._fixedTipElement) {
                 let div = $('#fixedTip')[0];
                 if (!div) {
                     div = document.createElement("div");
@@ -413,20 +415,20 @@ var TREE_SHEET_HELPER = {
                 this._toolTipElement = div;
                 $(this._toolTipElement).width('');
                 //实时读取位置信息
-                if(hitinfo.sheet && hitinfo.sheet.getParent().qo){
+                if (hitinfo.sheet && hitinfo.sheet.getParent().qo) {
                     setting.pos = SheetDataHelper.getObjPos(hitinfo.sheet.getParent().qo);
                 }
                 $(this._toolTipElement).html(`<span>${text}</span><div class="triangle-border tb-border_up"></div><div class="triangle-border tb-background_up"></div>`);
                 //清单指引、清单库做特殊处理
-                if($(hitinfo.sheet.name === 'stdBillsGuidance_bills')){
+                if ($(hitinfo.sheet.name === 'stdBillsGuidance_bills')) {
                     $(this._toolTipElement).html(`<span>${text}</span>`);
                     let divWidth = $(this._fixedTipElement).width(),
                         divHeight = $(this._fixedTipElement).height();
-                    if(divWidth > 600){
+                    if (divWidth > 600) {
                         divWidth = 590;
                         $(this._toolTipElement).width(divWidth);
                     }
-                    let top = setting.pos.y  + hitinfo.y - divHeight / 2 < 0 ? 0 : setting.pos.y  + hitinfo.y - divHeight / 2;
+                    let top = setting.pos.y + hitinfo.y - divHeight / 2 < 0 ? 0 : setting.pos.y + hitinfo.y - divHeight / 2;
                     $(this._toolTipElement).css("top", top).css("left", hitinfo.x + 20);
                 } else {
                     //计算显示的初始位置
@@ -435,8 +437,8 @@ var TREE_SHEET_HELPER = {
                      let left =  setting.pos.x + hitinfo.cellRect.x;
                      $(this._toolTipElement).css("top", top).css("left", left);*/
                     //显示在下方,三角形指
-                    let top = setting.pos.y  + hitinfo.cellRect.y+26;
-                    let left =  setting.pos.x + hitinfo.cellRect.x;
+                    let top = setting.pos.y + hitinfo.cellRect.y + 26;
+                    let left = setting.pos.x + hitinfo.cellRect.x;
                     $(this._toolTipElement).css("top", top).css("left", left);
 
                 }
@@ -445,7 +447,7 @@ var TREE_SHEET_HELPER = {
             }
         }
     },
-    hideTipsDiv:function () {
+    hideTipsDiv: function () {
         TREE_SHEET_HELPER.tipTimeStamp = +new Date();//这个是为了造价书清单编号树节点的那个延时显示而打的时间戳,防止已经要隐藏的提示框,延时显示
         let me = TREE_SHEET_HELPER;
         TREE_SHEET_HELPER.tipDiv = 'hide';
@@ -455,31 +457,31 @@ var TREE_SHEET_HELPER = {
         }
         TREE_SHEET_HELPER.tipDivCheck();//延时检查:当tips正在show的时候,就调用了hide方法,会导致tips一直存在,所以设置一个超时处理
     },
-    tipDivCheck(){
+    tipDivCheck() {
         setTimeout(function () {
             let tips = $('#autoTip');
-            if(TREE_SHEET_HELPER.tipDiv == 'show'){
+            if (TREE_SHEET_HELPER.tipDiv == 'show') {
                 return;
-            } else if(TREE_SHEET_HELPER.tipDiv == 'hide'&&tips){
+            } else if (TREE_SHEET_HELPER.tipDiv == 'hide' && tips) {
                 tips.hide();
                 TREE_SHEET_HELPER._toolTipElement = null;
             }
-        },600)
+        }, 600)
     },
-    delayShowTips:function(hitinfo,setting,tips){//延时显示
+    delayShowTips: function (hitinfo, setting, tips) {//延时显示
         let delayTimes = 500; //延时时间
         let now_timeStamp = +new Date();
         TREE_SHEET_HELPER.tipTimeStamp = now_timeStamp;
         setTimeout(function () {
-            if(now_timeStamp - TREE_SHEET_HELPER.tipTimeStamp == 0){//鼠标停下的时候才显示
+            if (now_timeStamp - TREE_SHEET_HELPER.tipTimeStamp == 0) {//鼠标停下的时候才显示
                 let tag = hitinfo.sheet.getTag(hitinfo.row, hitinfo.col);
-                if(tips && tips !=""){ //有tips的话优先显示tips
+                if (tips && tips != "") { //有tips的话优先显示tips
                     tag = tips;
                 }
-                if(tag&&tag!=''){
-                    TREE_SHEET_HELPER.showTipsDiv(tag,setting,hitinfo);
+                if (tag && tag != '') {
+                    TREE_SHEET_HELPER.showTipsDiv(tag, setting, hitinfo);
                 }
             }
-        },delayTimes);
+        }, delayTimes);
     }
 };

+ 41 - 5
web/maintain/bill_template_lib/js/bills_template_edit.js

@@ -132,6 +132,30 @@ let TEMPLATE_BILLS_SETTING = {
         },
     },
     {
+        width: 65,
+        readOnly: locked,
+        head: {
+            titleNames: ["清单\n预算标记"],
+            spanCols: [1],
+            spanRows: [1],
+            vAlign: [1],
+            hAlign: [1],
+            font: ["Arial"],
+        },
+        data: {
+            field: "isBillBudget",
+            vAlign: 0,
+            hAlign: 1,
+            font: "Arail",
+        },
+        needCellType: (node) => {
+            return [1, 8].includes(node.data.type);
+        },
+        readOnly: (node) => {
+            return ![1, 8].includes(node.data.type);
+        }
+    },
+    {
         width: 200,
         readOnly: locked,
         head: {
@@ -382,6 +406,8 @@ $(document).ready(function () {
             col.data.cellType = getFixedFlagCellType();
         } else if (col.data.field === 'cantDelete' && TEMPLATE_BILLS_SETTING.cols.indexOf(col) !== TEMPLATE_BILLS_SETTING.treeCol) {
             col.data.cellType = new GC.Spread.Sheets.CellTypes.CheckBox();
+        } else if (col.data.field === 'isBillBudget' && TEMPLATE_BILLS_SETTING.cols.indexOf(col) !== TEMPLATE_BILLS_SETTING.treeCol) {
+            col.data.cellType = new GC.Spread.Sheets.CellTypes.CheckBox();
         }
     }
 
@@ -401,21 +427,31 @@ $(document).ready(function () {
         }
         const fieldName = controller.setting.cols[info.col].data.field;
         var node = controller.tree.items[info.row];
-        if (node && fieldName === 'cantDelete') {
+        if (node && ['cantDelete', 'isBillBudget'].includes(fieldName)) {
             const isChecked = Boolean(info.sheet.getValue(info.row, info.col));
             const data = { type: "update", data: { ID: node.getID() } };
             setFee(data.data, fieldName, isChecked);
-            console.log(isChecked);
             const updateData = [data];
+            const refreshNodes = [node];
+            if (fieldName === 'isBillBudget') {
+                const subNodes = node.getPosterity().filter(n => [1, 8].includes(n.data.type));
+                refreshNodes.push(...subNodes);
+                subNodes.forEach(subNode => {
+                    updateData.push({ type: "update", data: { ID: subNode.getID(), isBillBudget: isChecked } });
+                });
+            }
             CommonAjax.post(
                 updateUrl,
                 updateData,
                 function (data) {
-                    setFee(node.data, fieldName, isChecked);
-                    controller.refreshTreeNode([node], false);
+                    //setFee(node.data, fieldName, isChecked);
+                    refreshNodes.forEach(n => {
+                        setFee(n.data, fieldName, isChecked);
+                    });
+                    controller.refreshTreeNode(refreshNodes, false);
                 },
                 function () {
-                    controller.refreshTreeNode([node], false);
+                    controller.refreshTreeNode(refreshNodes, false);
                 }
             );
         }

+ 6 - 2
web/maintain/report/html/rpt_tpl_dtl_info.html

@@ -93,9 +93,13 @@
                         <option value ="construct">建设项目级别</option>
                         <option value ="Single">单项工程级别</option>
                         <option value ="custom">用户自选工程</option>
-                        <option value="complexUnit">跨项目自选工程(3个建设项目)</option>
-                        <option value="stageContrast">阶段对比</option>
+                        <option value="complexUnit">跨项目自选工程(3个建设项目单位工程)</option>
+                        <option value="stageContrast">前后阶段对比(当前项目对其他项目)</option>
                         <option value="unitPriceContrast">单价偏差对比</option>
+                        <option value="complexConstruct">跨项目汇总对比(3个建设项目)</option>
+                        <option value="stageBackContrast">审核项目对比(其他项目对当前项目)</option>
+                        <option value="stageUnitContrast">审核项目对比(一对一)</option>
+                        <option value="stageMultipleUnitContrast">审核项目对比(多对多)</option>
                     </select>
                 </div>
             </div>

+ 7 - 2
web/maintain/report/js/rpt_tpl_main.js

@@ -956,6 +956,10 @@ let zTreeOprObj = {
                             else if (sumLvType === 'complexUnit') $("#element_sumLv_flags")[0].selectedIndex = 4
                             else if (sumLvType === 'stageContrast') $("#element_sumLv_flags")[0].selectedIndex = 5
                             else if (sumLvType === 'unitPriceContrast') $("#element_sumLv_flags")[0].selectedIndex = 6
+                            else if (sumLvType === 'complexConstruct') $("#element_sumLv_flags")[0].selectedIndex = 7
+                            else if (sumLvType === 'stageBackContrast') $("#element_sumLv_flags")[0].selectedIndex = 8
+                            else if (sumLvType === 'stageUnitContrast') $("#element_sumLv_flags")[0].selectedIndex = 9
+                            else if (sumLvType === 'stageMultipleUnitContrast') $("#element_sumLv_flags")[0].selectedIndex = 10
                             else $("#element_sumLv_flags")[0].selectedIndex = 0;
                         } else {
                             $("#element_sumLv_flags")[0].selectedIndex = 0;
@@ -970,8 +974,9 @@ let zTreeOprObj = {
                         }
                         if (me.currentNode.flags.hasOwnProperty('existLevel')) {
                             let existLevel = me.currentNode.flags['existLevel'];
-                            if (existLevel) $("#element_existLevel_select")[0].selectedIndex = 1
-                            else $("#element_existLevel_select")[0].selectedIndex = 0;
+                            if (existLevel === 'true') { $("#element_existLevel_select")[0].selectedIndex = 1 }
+                            else if (existLevel === 'false') { $("#element_existLevel_select")[0].selectedIndex = 2 }
+                            else { $("#element_existLevel_select")[0].selectedIndex = 0; }
                         } else {
                             $("#element_existLevel_select")[0].selectedIndex = 0;
                         }