浏览代码

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

vian 5 年之前
父节点
当前提交
bc4f903406

+ 1 - 0
config/gulpConfig.js

@@ -83,6 +83,7 @@ module.exports = {
         'lib/pinyinjs/pinyin_dict_firstletter.js',
         'lib/pinyinjs/pinyinUtil.js',
         'web/building_saas/main/js/models/main_consts.js',
+        'web/building_saas/main/js/models/feeRateConsts.js',
         'public/web/common_util.js',
         'web/building_saas/glj/js/project_glj.js',
         'web/building_saas/glj/js/composition.js',

+ 2 - 2
modules/all_models/compilation.js

@@ -62,11 +62,11 @@ let modelSchema = {
         type: Number,
         default: 0
     },
-
     // cld 办事处id
     categoryID: {
         type: Number,
         default: 12 // 总部id
-    }
+    },
+    defaultLocation:String//默认工程所在地
 };
 mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));

+ 2 - 0
modules/all_models/projects.js

@@ -3,6 +3,7 @@
  */
 /*项目*/
 const mongoose = require('mongoose');
+const { stringAt } = require('pdfkit/js/data');
 const Schema = mongoose.Schema;
 const deleteSchema = require('../all_schemas/delete_schema');
 
@@ -31,6 +32,7 @@ const ProjectSchema = new Schema({
         type: Schema.Types.Mixed,
         default: {}
     },
+    "location":String,//工程所在地
     "summaryFees":{
         totalFee: String,
         estimateFee: String,

+ 1 - 0
modules/main/routes/main_route.js

@@ -45,6 +45,7 @@ module.exports =function (app) {
                         userName: req.session.sessionUser.username,
                         projectData: projectData,
                         compilationName: req.session.sessionCompilation.name,
+                        defaultLocation:req.session.sessionCompilation.defaultLocation,
                         versionName: req.session.compilationVersion,
                         projectReadOnly: projectReadOnly,
                         projectCooperate: projectCooperate,

+ 36 - 11
public/web/sheet/sheet_common.js

@@ -211,7 +211,7 @@ var sheetCommonObj = {
             }
 
             if (setting.header[col].cellType === "tipsCell") {
-                this.setTipsCell(row, col, sheet, setting.header[col]);
+                this.setTipsCell(row, col, sheet);
             }
             if (setting.owner === 'gljTree') {
                 if (setting.header[col].cellType === "checkBox") {
@@ -223,6 +223,7 @@ var sheetCommonObj = {
                     val = distTypeVal;
                 }
             }
+            if(setting.setCellType) setting.setCellType(sheet,data[row],row,col)
             if (setting.header[col].getText) {
                 val = setting.getText[setting.header[col].getText](data[row], val)
             }
@@ -682,7 +683,7 @@ var sheetCommonObj = {
         sheet.setCellType(row, col, cellType, GC.Spread.Sheets.SheetArea.viewport);
     },
 
-    setTipsCell(row, col, sheet, header) {
+    setTipsCell(row, col, sheet,tips) {
         let TipCellType = function () { };
         TipCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
         TipCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
@@ -699,16 +700,20 @@ var sheetCommonObj = {
         };
         TipCellType.prototype.processMouseEnter = function (hitinfo) {
             let text = hitinfo.sheet.getText(hitinfo.row, hitinfo.col);
-            let value = hitinfo.sheet.getValue(hitinfo.row, hitinfo.col);
-            let tag = hitinfo.sheet.getTag(hitinfo.row, hitinfo.col);
-            let acStyle = hitinfo.sheet.getActualStyle(hitinfo.row, hitinfo.col),
-                zoom = hitinfo.sheet.zoom();
-            let textLength = this.getAutoFitWidth(value, text, acStyle, zoom, { sheet: hitinfo.sheet, row: hitinfo.row, col: hitinfo.col, sheetArea: GC.Spread.Sheets.SheetArea.viewport });
-            let cellWidth = hitinfo.sheet.getCell(-1, hitinfo.col).width();
+            console.log(tips);
             let setting = {};
-            if (textLength <= cellWidth) {
-                return;
+            if(!tips){
+                let value = hitinfo.sheet.getValue(hitinfo.row, hitinfo.col);
+                let tag = hitinfo.sheet.getTag(hitinfo.row, hitinfo.col);
+                let acStyle = hitinfo.sheet.getActualStyle(hitinfo.row, hitinfo.col),
+                    zoom = hitinfo.sheet.zoom();
+                let textLength = this.getAutoFitWidth(value, text, acStyle, zoom, { sheet: hitinfo.sheet, row: hitinfo.row, col: hitinfo.col, sheetArea: GC.Spread.Sheets.SheetArea.viewport });
+                let cellWidth = hitinfo.sheet.getCell(-1, hitinfo.col).width();
+                if (textLength <= cellWidth) {
+                    return;
+                }
             }
+            text = tips;
             if (sheet && sheet.getParent().qo) {
                 setting.pos = SheetDataHelper.getObjPos(sheet.getParent().qo);
             }
@@ -856,7 +861,7 @@ var sheetCommonObj = {
         }
         return new getTipsCombo();
     }, */
-    getTreeNodeCellType: function (datas, row, parentMap,treeCol, paintFunc) {// 2018-09-26  不用spreadjs默认的树结构,自定义控件
+    getTreeNodeCellType: function (datas, row, parentMap,treeCol, paintFunc,tips) {// 2018-09-26  不用spreadjs默认的树结构,自定义控件
         var ns = GC.Spread.Sheets;
         let rectW = 10;
         let rectH = 10;
@@ -921,6 +926,26 @@ var sheetCommonObj = {
                 sheetArea: context.sheetArea
             };
         }
+        if(tips){
+            TreeNodeCellType.prototype.processMouseEnter = function (hitinfo) {
+                let text = hitinfo.sheet.getText(hitinfo.row, hitinfo.col);
+                let setting = {};
+                text = tips;
+                if (hitinfo.sheet && hitinfo.sheet.getParent().qo) {
+                    setting.pos = SheetDataHelper.getObjPos(hitinfo.sheet.getParent().qo);
+                }
+    
+                TREE_SHEET_HELPER.showTipsDiv(text, setting, hitinfo);
+            };
+            TreeNodeCellType.prototype.processMouseLeave = function (hitinfo) {
+                TREE_SHEET_HELPER.tipDiv = 'hide';
+                if (TREE_SHEET_HELPER._toolTipElement) {
+                    $(TREE_SHEET_HELPER._toolTipElement).hide();
+                    TREE_SHEET_HELPER._toolTipElement = null;
+                };
+                TREE_SHEET_HELPER.tipDivCheck();//延时检查:当tips正在show的时候,就调用了hide方法,会导致tips一直存在,所以设置一个超时处理
+            };
+        }
         TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {
             ////方框外1像素内都有效
             if (!_.isEmpty(this.rectInfo) && Math.floor(hitinfo.x) <= this.rectInfo.x + this.rectInfo.rectW + 2 && Math.floor(hitinfo.x) >= this.rectInfo.x - 2) {

+ 13 - 3
web/building_saas/fee_rates/fee_rate.html

@@ -11,9 +11,19 @@
     <div class="toolsbar_feeRate px-1">
         <div class="row" style="margin-left: 0px">
             <div class="col-lg-8 p-0">
-                <div class="form-inline py-1">
-                    <label class="mx-2" >基于&nbsp;&nbsp;<span id="feeRateLibName">重庆渝建发[2016]35号</span></label>
-                    <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#set-lv" id="setNewFeeRate"><i class="fa fa-cog"></i> 重选标准</a>
+                <div class="form-inline py-1 row">
+                    <div class="col-2 form-inline">   
+                        <label >工程所在地:</label> &nbsp;&nbsp;
+                        <select class="form-control form-control-sm" id="location"></select> 
+                    </div>
+                 
+                    <div class="col-4 form-inline">
+                        <label >费率标准:</label> &nbsp;&nbsp;
+                        <select class="form-control form-control-sm" id="feeRateStandard"><option value="广东">广东</option></select>   
+                    </div>  
+
+                       <!-- <label class="mx-2" >基于&nbsp;&nbsp;<span id="feeRateLibName">重庆渝建发[2016]35号</span></label>                 
+                 <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#set-lv" id="setNewFeeRate"><i class="fa fa-cog"></i> 重选标准</a> -->
                 </div>
             </div>
             <!--<div class="col-lg-4 p-0">

+ 3 - 0
web/building_saas/main/html/main.html

@@ -39,6 +39,7 @@
         let lockBills = '<%- projectData.property.lockBills %>';
         let userAccount = '<%- userAccount %>';
         let userID = '<%- userID %>';
+        let defaultLocation = '<%- defaultLocation %>';
         const USER_NAME = '<%- userName %>';
         let projectReadOnly = JSON.parse('<%- projectReadOnly %>');
         let projectCooperate = JSON.parse('<%- projectCooperate %>');
@@ -48,6 +49,7 @@
         const markReadProjectIDs = JSON.parse('<%- markReadProjectIDs %>');
         const VERSION = '<%- version %>';
         const CUR_BOQ_TYPE = '<%- boqType %>';
+        console.log(defaultLocation);
     </script>
 </head>
 
@@ -2041,6 +2043,7 @@
     <script src="/lib/pinyinjs/pinyin_dict_firstletter.js"></script>
     <script src="/lib/pinyinjs/pinyinUtil.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/models/main_consts.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/feeRateConsts.js"></script>
     <script type="text/javascript" src="/public/web/common_util.js"></script>
     <script type="text/javascript" src="/web/building_saas/glj/js/project_glj.js"></script>
     <script type="text/javascript" src="/web/building_saas/glj/js/composition.js"></script>

+ 5 - 1
web/building_saas/main/js/controllers/block_controller.js

@@ -255,7 +255,7 @@ let BlockController = {
      * @param selected
      * @param position next/pre/sub
      */
-    confirmPaste:function (blockData,selected,position) {
+    confirmPaste:function (blockData,selected,position,callback) {
         let me = this;
         let project = projectObj.project;
         let Bills = project.Bills;
@@ -329,6 +329,10 @@ let BlockController = {
              //主材设备工料机插入主树
              project.ration_glj.addToMainTree(result.ration_gljs);
              //更新计算程序模板,并进行重新计算
+             if(callback){
+                 callback(bottomNodes);
+                 return;
+             }
              project.calcProgram.calcNodesAndSave(bottomNodes, function () {
                  installationFeeObj.calcInstallationFee();
              });

文件差异内容过多而无法显示
+ 97 - 0
web/building_saas/main/js/models/feeRateConsts.js


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

@@ -325,4 +325,9 @@ const materialComboMap = [
     {text:materialType[materialTypeMap.MC],value:materialTypeMap.MC},
     {text:materialType[materialTypeMap.SN],value:materialTypeMap.SN},
     {text:materialType[materialTypeMap.SZ],value:materialTypeMap.SZ}
-];
+];
+
+const locationList = ['北京','天津','河北','山西','内蒙古','辽宁',
+'吉林','黑龙江','上海','江苏','浙江','安徽','福建','江西','山东','河南',
+'湖北','湖南','四川','贵州','云南','西藏','陕西','甘肃','青海','宁夏','新疆',
+'广东','广西','海南','重庆']

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

@@ -797,7 +797,6 @@ var Ration = {
             node.updateData.quantityEXP="QDL*"+contain;
             node.updateData.quantity=scMathUtil.roundForObj(billQuantity*contain,getDecimal("quantity",node));
             if(!gljUtil.isKGtoT(billNode.data.unit,node.data.unit)){
-              console.log('hehe')
               let times = parseInt(node.data.unit);
               if (!isNaN(times)) {
                   node.updateData.quantityEXP+='*'+times;

+ 29 - 24
web/building_saas/main/js/views/block_lib.js

@@ -588,30 +588,35 @@ var blockLibObj = {
         $("#div_cloneOptions").modal({show: true});
     },
     oneToOneClone: function (projectNode, block, options) {
-        let canClone = true;
-        if (options.checkCode)
-            canClone = canClone && (projectNode.data.code.substr(0, 9) == block.data.code.substr(0, 9));
-        if (options.checkName)
-            canClone = canClone && (projectNode.data.name == block.data.name);
-        if (options.checkUnit)
-            canClone = canClone && (projectNode.data.unit == block.data.unit);
-        if (!canClone) return;
-        
-        if (options.overwriteRations)
-            projectObj.project.Bills.deleteChildren(projectNode);
-        /*  这里封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。
-            但这里结构要作出调整:忽略叶子清单层,直接从定额开始(跟粘贴块有区别),始终强制在叶子清单下插入定额。
-            该操作前提:当前块文件的全部数据已从后台取到前台。  */
-        let vBlock_WC = {
-            compilationID: block.data.compilationID,
-            copyTime: block.data.copyTime,
-            firstNodeType: 1,           // 强制改成1 (因为是从清单下的定额开始。清单自身的还是保留,暂不使用使用)。
-            isFBFX: block.data.isFBFX,
-            zeroQuantity: options.zeroQuantity,
-            datas: block.data.children       // rations
-        };
-        vBlock_WC = JSON.parse(JSON.stringify(vBlock_WC));
-        BlockController.confirmPaste(vBlock_WC, projectNode, 'sub');
+        return new Promise(function (resolve, reject) {
+            let canClone = true;
+            if (options.checkCode)
+                canClone = canClone && (projectNode.data.code.substr(0, 9) == block.data.code.substr(0, 9));
+            if (options.checkName)
+                canClone = canClone && (projectNode.data.name == block.data.name);
+            if (options.checkUnit)
+                canClone = canClone && (projectNode.data.unit == block.data.unit);
+            if (!canClone) return resolve([]);
+            
+            if (options.overwriteRations)
+                projectObj.project.Bills.deleteChildren(projectNode);
+            /*  这里封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。
+                但这里结构要作出调整:忽略叶子清单层,直接从定额开始(跟粘贴块有区别),始终强制在叶子清单下插入定额。
+                该操作前提:当前块文件的全部数据已从后台取到前台。  */
+            let vBlock_WC = {
+                compilationID: block.data.compilationID,
+                copyTime: block.data.copyTime,
+                firstNodeType: 1,           // 强制改成1 (因为是从清单下的定额开始。清单自身的还是保留,暂不使用使用)。
+                isFBFX: block.data.isFBFX,
+                zeroQuantity: options.zeroQuantity,
+                datas: block.data.children       // rations
+            };
+            vBlock_WC = JSON.parse(JSON.stringify(vBlock_WC));
+            BlockController.confirmPaste(vBlock_WC, projectNode, 'sub',function(buttomNodes){
+                resolve(buttomNodes)
+            });
+        })
+       
     },
     checkShow: async function () {   // 这里需要处理异步:模板库装载完再弹出位置选择窗。
         if (!$("#kmbk").is(":visible")){  // 如果还没显示

+ 82 - 5
web/building_saas/main/js/views/fee_rate_view.js

@@ -8,6 +8,7 @@ var feeRateObject={
     mainFeeRateSpread:null,
     mainFeeRateSheet:null,
     mainFeeRateData:null,
+    feeRateSTDList:[],
     mainFeeRateSetting:{
         header: [
             {headerName: "专业名称", headerWidth: 250, dataCode: "name", dataType: "String"},
@@ -754,10 +755,61 @@ var feeRateObject={
     loadPageContent:function(){
         var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
         var usageProjects = feeRateFile.usageProjects;
+        feeRateObject.setLocAndFeeRateSTD();
         $('#feeRateFileName').text(feeRateFile.name);
         $('#feeRateLibName').text(feeRateFile.libName);
         $('#projectCount').text(usageProjects.length);
     },
+    setLocAndFeeRateSTD:function(){
+        if(feeRateObject.feeRateSTDLoaded)  return;
+        let location = this.getLocation();
+        $('#location').val(location);
+        //养护的工程所在地下拉框不可选
+        if(!commonUtil.isGLYun()) $('#location').attr("disabled","disabled");
+        feeRateObject.setFeeRateSTD(location);
+        feeRateObject.feeRateSTDLoaded = true;
+    },
+    getLocation:function(){
+        let location = projectObj.project.projectInfo.location;
+        if(!location) location = defaultLocation;
+        return location;
+    },
+    setFeeRateSTD(location){
+        let feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
+        $('#feeRateStandard').empty();
+        setOption(feeRateFile.libID,feeRateFile.libName)
+        feeRateObject.getFeeRateStandards(function (data) {
+            _.forEach(data,function (s) {
+                if(s.ID != feeRateFile.libID){  
+                    if(s.libName.startsWith("部颁")){
+                        setOption(s.ID,s.libName) 
+                    }else {
+                        if(location){
+                            if(s.libName.startsWith(location)) setOption(s.ID,s.libName) 
+                        }else{
+                            setOption(s.ID,s.libName) 
+                        } 
+                    }
+                }
+            })
+            $('#feeRateStandard').val(feeRateFile.libID);
+        });
+
+        function setOption(ID,name){
+            var option =  $("<option>").val(ID).text(name);
+            $('#feeRateStandard').append(option);
+        }
+    },
+
+    loadLocationList:function(){
+        let htmlS = "<option></option>";
+        for(let l of locationList){
+            htmlS += `<option value='${l}'>${l} </option>`
+        }
+
+        $('#location').html(htmlS)
+    },
+
     loadFeeRateSelection:function() {
         if(!this.selectionLoad){
             var selectedID=0;
@@ -772,16 +824,22 @@ var feeRateObject={
         }
     },
     getFeeRateStandards:function (callback) {
-        CommonAjax.post('/feeRates/getFeeRateStandards', {"projectID": projectObj.project.ID()}, function (data) {
-            if (data) {
-                callback(data);
-            }
-        });
+        if(feeRateObject.feeRateSTDList.length == 0){//没有的话发送请求,存在的话直接返回
+            CommonAjax.post('/feeRates/getFeeRateStandards', {"projectID": projectObj.project.ID()}, function (data) {
+                if (data) {
+                    feeRateObject.feeRateSTDList = data;
+                    callback(data);
+                }
+            });
+        }else{
+            callback(feeRateObject.feeRateSTDList);
+        }
     },
     changeFeeRateStandard:function(newVal){
         $.bootstrapLoading.start();
         var callback=function () {
             feeRateObject.reFreshRateViews();
+            feeRateObject.setFeeRateSTD($("#location").val());
             $.bootstrapLoading.end();
         };
         projectObj.project.FeeRate.changeFeeRateStandard(newVal,callback);
@@ -1015,6 +1073,8 @@ function getPopoverContent() {
     return "费率的变化,将自动影响以下单位工程造价:<br>"+ popover_content;
 }
 
+
+
 $(function(){
     $('#pop-lv').tooltip({
             placement:"bottom",
@@ -1024,6 +1084,8 @@ $(function(){
         }
     );
 
+    feeRateObject.loadLocationList();
+
     $('#tab_fee_rate').on('shown.bs.tab', function (e) {
         sessionStorage.setItem('mainTab', '#tab_fee_rate');
         let me = feeRateObject;
@@ -1034,6 +1096,21 @@ $(function(){
         me.loadPageContent();
     });
 
+    //切换选择工程所在地
+    $('#location').change(async function () {
+        //console.log(this.value);
+        let updateData = {type:ModuleNames.project,data:{'ID' : projectObj.project.ID(),location:this.value}};//,'property.locateSetting':outstd
+        $.bootstrapLoading.start();
+        await projectObj.project.syncUpdateNodesAndRefresh([updateData]);
+        feeRateObject.setFeeRateSTD(this.value);
+        $.bootstrapLoading.end();
+    });
+
+    //切换费率标准
+    $('#feeRateStandard').change(async function () {
+        feeRateObject.changeFeeRateStandard(this.value);
+    });
+
     $('#setNewFeeRate').bind('click', function () {
         var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
         var usageProjects = feeRateFile.usageProjects;

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

@@ -59,7 +59,7 @@ let locateObject={
         settingList :[
             {background:"E2F2C5",describe:""},
             {background:"F9E2CF",describe:""},
-            {background:"F2EFD9",describe:"hehe"},
+            {background:"F2EFD9",describe:""},
             {background:"F5D1DA",describe:""},
             {background:"E3E3E3",describe:""},
             {background:"B6F3F2",describe:""},

+ 13 - 5
web/building_saas/main/js/views/project_view.js

@@ -3292,7 +3292,7 @@ $(function () {
         $("#div_createBlocks").modal("hide");
     });
 
-    $("#btn_block_clone_ok").click(function () {
+    $("#btn_block_clone_ok").click(async function () {
         let projectNode = projectObj.project.mainTree.selected;
         let block = blockLibObj.mainTree.selected;
         let options = {};
@@ -3301,16 +3301,18 @@ $(function () {
         if ($('#clone_option_unit').prop("checked")) options.checkUnit = true;
         if ($('#clone_option_zeroQuantity').prop("checked")) options.zeroQuantity = true;
         if ($('#clone_option_cover').prop("checked")) options.overwriteRations = true;
-
+        let calcNodes = []
         switch (blockLibObj.cloneType) {
             case 1:
-                blockLibObj.oneToOneClone(projectNode, block, options);
+                let nodes = await blockLibObj.oneToOneClone(projectNode, block, options);
+                calcNodes = calcNodes.concat(nodes);
                 break;
             case 2:
                 let bills = calcTools.getLeafBills(projectNode);
                 for (let bill of bills){
                     calcTools.forceSelect(bill);
-                    blockLibObj.oneToOneClone(bill, block, options);
+                    let nodes = await blockLibObj.oneToOneClone(bill, block, options);
+                    calcNodes = calcNodes.concat(nodes);
                 };
                 break;
             case 3:
@@ -3319,11 +3321,17 @@ $(function () {
                 for (let mtmBill of mtmBills){
                     for (let mtmBlock of mtmBlocks){
                         calcTools.forceSelect(mtmBill);
-                        blockLibObj.oneToOneClone(mtmBill, mtmBlock, options);
+                        let nodes = await blockLibObj.oneToOneClone(mtmBill, mtmBlock, options);
+                        calcNodes = calcNodes.concat(nodes);
                     };
                 };
                 break;
         }
+        if(calcNodes.length > 0){
+            projectObj.project.calcProgram.calcNodesAndSave(calcNodes, function () {
+                installationFeeObj.calcInstallationFee();
+            });
+        }
     });
 
 

+ 22 - 4
web/building_saas/main/js/views/sub_fee_rate_views.js

@@ -75,7 +75,7 @@ var subRateObject={
         this.subRateSheet.suspendPaint();
         this.subRateSheet.suspendEvent();
         for(let row =0; row < this.datas.length;row++){
-            this.setComboOptionCell(row,1,this.datas[row],this.subRateSheet);
+            this.setComboOptionCell(row,1,this.datas[row],this.subRateSheet,this.datas[row].name);
             this.setTreeNodeCellType(this.datas,row,parentMap,visibleMap,this.subRateSheet);
         }
         this.subRateSheet.resumeEvent();
@@ -87,9 +87,20 @@ var subRateObject={
     onSubRateSelectChanged:function (e,info) {
         info.sheet.repaint();
     },
+    getAreaTips:function(name){
+        let field = name === "冬季施工"?"temperatureArea":"rainfallArea";
+        let location = feeRateObject.getLocation();
+        let area = feeRateAreaMap[location];
+        return area[field]||null;
+    },
     setTreeNodeCellType:function (datas,row,parentMap,visibleMap,sheet) {
         delete parentMap.undefined;//去掉无用节点
-        let treeNode = sheetCommonObj.getTreeNodeCellType(datas,row,parentMap);
+        let treeNode = null;
+        if(datas[row].name == "冬季施工" || datas[row].name == "雨季施工"){
+            treeNode = sheetCommonObj.getTreeNodeCellType(datas,row,parentMap,null,null,this.getAreaTips(datas[row].name));
+        }else{
+            treeNode = sheetCommonObj.getTreeNodeCellType(datas,row,parentMap);
+        }
         treeNode.treeNodeType = false;
         if((datas[row].subList && datas[row].subList.length >0)||datas[row].isSub == true ){
             treeNode.treeNodeType = true;
@@ -98,13 +109,20 @@ var subRateObject={
         sheet.setCellType(row, 0, treeNode, GC.Spread.Sheets.SheetArea.viewport);
         if(visibleMap[datas[row].ParentID]) sheet.getRange(row , -1, 1, -1).visible(!visibleMap[datas[row].ParentID]);//显示或隐藏
     },
-    setComboOptionCell:function(row,col,subRate,sheet){
+    setComboOptionCell:function(row,col,subRate,sheet,name){
         let options=[];
         if(subRate.isSub == true) return;//是树节点的子节点;
         for(let op of subRate.optionList){
            options.push(op.name);
         }
-        let dynamicCombo = sheetCommonObj.getDynamicCombo();//new GC.Spread.Sheets.CellTypes.ComboBox();
+        let dynamicCombo =null;
+        if(name == "冬季施工" || name == "雨季施工"){
+            let tips = this.getAreaTips(name)
+            dynamicCombo = sheetCommonObj.getTipsCombo(true, tips, {})
+        }else{
+            dynamicCombo = sheetCommonObj.getDynamicCombo();//new GC.Spread.Sheets.CellTypes.ComboBox();
+        }
+         
         dynamicCombo.items(options);
         if(subRate.editable == true) dynamicCombo.editable(true);
         sheet.setCellType(row, col, dynamicCombo, GC.Spread.Sheets.SheetArea.viewport);