瀏覽代碼

Merge branch '1.0.0_online' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost into 1.0.0_online

zhongzewei 6 年之前
父節點
當前提交
a839a7bbc5

+ 1 - 1
modules/pm/models/project_property_template.js

@@ -16,7 +16,7 @@ const displaySetting = {
     autoHeight:true,
     billsAutoHeight:true,
     rationAutoHeight:false,
-    disPlayMainMaterial:true
+    disPlayMainMaterial:false
 };
 
 const tenderSetting = {

+ 2 - 2
public/web/sheet/sheet_common.js

@@ -146,8 +146,8 @@ var sheetCommonObj = {
         for (var row = 0; row < data.length; row++) {
             //var cell = sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport);
             this.showRowData(sheet,setting,row,data,distTypeTree);
-            if(setting.style){
-                sheet.setStyle(row, -1, setting.style);
+            if(setting.getStyle && setting.getStyle(data[row])){
+                sheet.setStyle(row, -1, setting.getStyle(data[row]));
             }
         }
         this.lockCells(sheet,setting);

+ 14 - 5
web/building_saas/main/js/models/bills.js

@@ -466,7 +466,7 @@ var Bills = {
             let items = projectObj.project.mainTree.items;//所有节点;
             let techNode = null;
             for(let item of items){
-                if(isFlag(item.data)&&item.data.flagsIndex.fixed.flag==fixedFlag.CONSTRUCTION_TECH){
+                if(this.flagEquals(item,fixedFlag.CONSTRUCTION_TECH)){
                     techNode = item;
                     break;
                 }
@@ -500,7 +500,7 @@ var Bills = {
         };
         bills.prototype.isFBFX = function (node) {//判读是否属于分部分项部分
            let rootNode = this.getRootNode(node);
-            if(isFlag(rootNode.data)&&rootNode.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING){
+            if(this.flagEquals(rootNode,fixedFlag.SUB_ENGINERRING)){
                 return true;
             }else {
                 return false;
@@ -512,9 +512,10 @@ var Bills = {
             }
             return false;
         };
-        bills.prototype.nodeFlagCheck = function (node,fixedFlag) {//判断节点类型
+        bills.prototype.nodeFlagCheck = function (node,fixedFlag) {//按flag判断节点是否属于该类型(包括子节点)
+            let me = this;
             let flagCheck = function (checkNode) {
-                if(isFlag(checkNode.data)&&checkNode.data.flagsIndex.fixed.flag==fixedFlag){
+                if(me.flagEquals(checkNode,fixedFlag)){
                     return true;
                 }else {
                     if(checkNode.parent){
@@ -527,6 +528,12 @@ var Bills = {
             return flagCheck(node);
         };
 
+        bills.prototype.flagEquals = function (node,fixedFlag) {
+            if(isFlag(node.data)&&node.data.flagsIndex.fixed.flag==fixedFlag){
+                return true;
+            }
+            return false
+        };
         bills.prototype.getNodeByFlag = function(node,flag){//取节点类型,返回本身或父项节点
             if(node){
                 if(isFlag(node.data)&&node.data.flagsIndex.fixed.flag==flag){
@@ -538,7 +545,9 @@ var Bills = {
                 return null;
             }
         };
-
+        bills.prototype.isTopThreeNode = function (node) {//是否为前三项,即大项1、2、3项
+            return this.flagEquals(node,fixedFlag.SUB_ENGINERRING)||this.flagEquals(node,fixedFlag.MEASURE)||this.flagEquals(node,fixedFlag.OTHER)//是大项1、2、3项的编号设置为只读
+        };
         bills.prototype.isEngineerEst = function (node) {//判断是否是“专业工程暂估价”节点或者子项
            return this.nodeFlagCheck(node,fixedFlag.ENGINEERING_ESITIMATE);
             //return node && isFlag(node.data)&&node.data.flagsIndex.fixed.flag==fixedFlag.ENGINEERING_ESITIMATE;

+ 26 - 15
web/building_saas/main/js/views/fee_rate_view.js

@@ -338,7 +338,26 @@ var feeRateObject={
             };
         };
         FeeRateEditCellType.prototype.processMouseDown = function (hitinfo) {
-            var me=feeRateObject;
+            let me=feeRateObject;
+            if(me.editingCell && hitinfo.row==me.editingCell.row){
+                var offset=hitinfo.cellRect.x+hitinfo.cellRect.width-6;
+                var imageMagin=3;
+                var imageHeight = hitinfo.cellRect.height-2*imageMagin;
+                var imageWidth = hitinfo.cellRect.width*2/7;
+                if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
+                    if(!projectReadOnly && me.ifFeeRateEdit(hitinfo.row)){
+                        $('#calcBaseFeeRateConf').attr('toggle', 'feeRate');
+                        changeCalcBaseFeeRate('feeRate');
+                        $('#tabFeeRate').tab('show');
+                        me.showSelectModal(hitinfo);
+                    }
+                }else {//鼠标点击其它地方,消失
+                    hideButton(hitinfo);
+                }
+            }
+        };
+        FeeRateEditCellType.prototype.processMouseEnter = function (hitinfo){
+            let me=feeRateObject;
             me.pmLeave = false;
             if(me.editingCell==null){
                 var showSelectBtn = true;
@@ -349,26 +368,18 @@ var feeRateObject={
                     me.editingCell={
                         row:hitinfo.row,
                         col:hitinfo.col
-                    }
+                    };
                     hitinfo.sheet.invalidateLayout();
                     hitinfo.sheet.repaint();
                 }
-            }else if(hitinfo.row==me.editingCell.row){
-                var offset=hitinfo.cellRect.x+hitinfo.cellRect.width-6;
-                var imageMagin=3;
-                var imageHeight = hitinfo.cellRect.height-2*imageMagin;
-                var imageWidth = hitinfo.cellRect.width*2/7;
-                if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
-                    if(!projectReadOnly && me.ifFeeRateEdit(hitinfo.row)){
-                        $('#calcBaseFeeRateConf').attr('toggle', 'feeRate');
-                        changeCalcBaseFeeRate('feeRate');
-                        $('#tabFeeRate').tab('show');
-                        me.showSelectModal(hitinfo);
-                    }
-                }
             }
+
         };
         FeeRateEditCellType.prototype.processMouseLeave = function (hitinfo) {
+            hideButton(hitinfo);
+        };
+
+        function hideButton(hitinfo) {
             if(!feeRateObject.pmLeave){
                 feeRateObject.editingCell=null;
                 hitinfo.sheet.invalidateLayout();

+ 6 - 1
web/building_saas/main/js/views/glj_col.js

@@ -20,7 +20,12 @@ let gljCol = {
         view: {
             lockColumns: [ 5, 7, 9, 10, 11]//这里以后改成dataCode好一点
         },
-        style:{foreColor:"#4D7BFF"},
+        getStyle:function (data) {
+            if(data.type == gljType.MAIN_MATERIAL){//是主材的话字体蓝色显示
+                return {foreColor:"#4D7BFF"};
+            }
+            return null;
+        },
         navigationRightCol:['name','specs','unit'],//选中这几列时,按enter键跳到右边一列
         // 工料机类型是混凝土、砂浆、配合比、机械台班时,价格不可编辑。
         editedTyep:[GLJTypeConst.MAIN_MATERIAL,GLJTypeConst.EQUIPMENT]//主材设备

+ 10 - 13
web/building_saas/main/js/views/glj_view.js

@@ -123,7 +123,7 @@ var gljOprObj = {
         //这主要记录是否点击了sheet以外的地方,如果点击了sheet里的单元格,则将cancelUpdate设置为true不触发提交更新操作
         me.cancelUpdate = true;//取消延时任务由这里进行判断处理
         console.log("change to true");
-        me.sheetInitSelection(selected,me.setting.style);
+        me.sheetInitSelection(selected);
         if(me.rationGljEditObj){
             if(ifNeedUpdate(selected)){
                 me.updateGljFromCache();
@@ -138,7 +138,6 @@ var gljOprObj = {
             return true;
         }
     },
-
     updateGljFromCache:function () {
         let me = this;
         if(me.rationGljEditObj){
@@ -146,7 +145,6 @@ var gljOprObj = {
         }
         me.rationGljEditObj = null;
     },
-
     bindGLJEnterKey:function (spread,sheet) {
         let me = this;
         subSpread.commandManager().register('myEnter', enterKeyAction);
@@ -165,13 +163,16 @@ var gljOprObj = {
 
         }
     },
-    sheetInitSelection: function (selected,style) {
+    sheetInitSelection: function (selected) {
         let me = gljOprObj;
+        let style = {};
         if(selected.row < me.sheetData.length){
+            if(me.setting.getStyle) style = me.setting.getStyle(me.sheetData[selected.row]);
             me.sheet.setStyle(selected.row, -1, me.getSelStyle(true,style));
         }
         me.sheet.repaint();
         if(me.preGljSelection && me.preGljSelection.row !== selected.row){
+            if(me.setting.getStyle && me.preGljSelection.row < me.sheetData.length) style = me.setting.getStyle(me.sheetData[me.preGljSelection.row]);
             me.sheet.setStyle(me.preGljSelection.row, -1, me.getSelStyle(false,style));
         }
         me.preGljSelection = selected;
@@ -215,14 +216,12 @@ var gljOprObj = {
         sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.startEditChecking);
         // sheet.bind(GC.Spread.Sheets.Events.CellClick, me.onCellClick);
     },
-
     onClipboardPasting: function (sender, args) {
         var me = gljOprObj;
         if(args.sheetName!="quantity_detail"&&(args.cellRange.rowCount!=1||args.cellRange.colCount!=1)){//工程量明细做特殊处理
             args.cancel = true;
         }
     },
-
     onClipboardPasted: function (e, info) {
         var me = gljOprObj;
         console.log('past');
@@ -426,8 +425,7 @@ var gljOprObj = {
         }else {
             return false
         }
-    }
-    ,
+    },
     hasComposition:function (ration_glj,isRationType) {//判断是否有组成物,有则返回true   现在主材类型的工料机也有可能有组成物。
         let type = isRationType==true? ration_glj.subType:ration_glj.type;
         if(notEditType.indexOf(type)!=-1||type==gljType.MAIN_MATERIAL){
@@ -493,8 +491,6 @@ var gljOprObj = {
     },
     showDataIfRationSelect: function (node,selectedNodeId) {
         var isShow = false;
-        //恢复底色
-        this.sheet.setStyle(this.sheet.getActiveRowIndex(), -1, this.getSelStyle(false,this.setting.style));
         if(projectReadOnly && this.setting.view.lockColumns){
             this.setting.view.lockColumns = null;
         }
@@ -505,6 +501,8 @@ var gljOprObj = {
             if (this.selectedNodeId && this.selectedNodeId == node.getID()) {
                 return;
             } else {
+                //恢复底色
+                this.sheet.setStyle(this.sheet.getActiveRowIndex(), -1, this.getSelStyle(false,this.setting.style));
                 this.selectedNodeId = node.getID();
             }
             if (node.sourceType == "ration") {
@@ -565,7 +563,7 @@ var gljOprObj = {
         sheetCommonObj.showData(this.sheet, this.setting, this.sheetData);
         //初始选择
         this.preGljSelection = null;
-        this.sheetInitSelection({row: this.sheet.getActiveRowIndex(), col: 0},this.setting.style);
+        this.sheetInitSelection({row: this.sheet.getActiveRowIndex(), col: 0});
         this.sheet.getRange(-1, 0, -1, this.setting.header.length).locked(true);//锁住定额工料机的所有列
         this.detailSheet.getRange(-1, 0, -1, this.detailSetting.header.length).locked(true);//锁住工程量明细的所有列
     },
@@ -602,7 +600,7 @@ var gljOprObj = {
         }
         //初始选择
         this.preGljSelection = null;
-        this.sheetInitSelection({row: this.sheet.getActiveRowIndex(), col: this.sheet.getActiveColumnIndex()},this.setting.style);
+        this.sheetInitSelection({row: this.sheet.getActiveRowIndex(), col: this.sheet.getActiveColumnIndex()});
 
     },
     getUnitPriceCodeMap : function () {//取单价文件中,编码前缀一样的映射表
@@ -626,7 +624,6 @@ var gljOprObj = {
         }
         return codeMap;
     },
-
     initRationTree: function (init,codeMap) {
         this.sheet.suspendPaint();
         this.sheet.suspendEvent();

+ 14 - 1
web/building_saas/main/js/views/main_tree_col.js

@@ -203,7 +203,20 @@ let MainTreeCol = {
             return MainTreeCol.readOnly.non_ration(node)&&!MainTreeCol.readOnly.glj(node);
         },
         forCode:function (node) {
-            return MainTreeCol.readOnly.glj(node)|| (node.sourceType === projectObj.project.Ration.getSourceType()&&node.data.type===rationType.gljRation);
+            let Bills = projectObj.project.Bills;
+            if(MainTreeCol.readOnly.glj(node)|| (node.sourceType === projectObj.project.Ration.getSourceType()&&node.data.type===rationType.gljRation)){//是主材或者设备、或者是工料机类型的定额
+                return true;
+            }
+            if(Bills.isTopThreeNode(node)){//是大项1、2、3项的编号设置为只读
+                return true;
+            }
+            return false;
+        },
+        forName:function (node) {
+            if(projectObj.project.Bills.isTopThreeNode(node)){//是大项1、2、3项的编号设置为只读
+                return true;
+            }
+            return false;
         },
         forUnit:function (node) {
             if(MainTreeCol.readOnly.bills(node)&&(node.data.type==billType.DXFY||node.data.type==billType.FB)){//在大项费用、分部行,计量单位只读。

+ 33 - 26
web/building_saas/main/js/views/quantity_edit_view.js

@@ -90,18 +90,7 @@ let quantityEditObj = {
         };
         QuantityEditCellType.prototype.processMouseDown = function (hitinfo) {
             var me=quantityEditObj;
-            me.pmLeave = false;
-            if(me.editingCell==null){
-                var showSelectBtn = true;
-                if(showSelectBtn){
-                    me.editingCell={
-                        row:hitinfo.row,
-                        col:hitinfo.col
-                    }
-                    hitinfo.sheet.invalidateLayout();
-                    hitinfo.sheet.repaint();
-                }
-            }else if(hitinfo.row==me.editingCell.row){
+           if(me.editingCell && hitinfo.row==me.editingCell.row){
                 var offset=hitinfo.cellRect.x+hitinfo.cellRect.width-6;
                 var imageMagin=3;
                 var imageHeight = hitinfo.cellRect.height-2*imageMagin;
@@ -110,11 +99,24 @@ let quantityEditObj = {
                     if(!projectReadOnly){
                         me.showSelectModal(hitinfo);
                     }
+                }else {//点击其它地方,按钮消失
+                    hideButton(hitinfo)
                 }
             }
         };
         QuantityEditCellType.prototype.processMouseEnter = function (hitinfo) {
-            let text = hitinfo.sheet.getText(hitinfo.row, hitinfo.col);
+            var me=quantityEditObj;
+            me.pmLeave = false;
+            if(me.editingCell==null){
+                me.editingCell={
+                    row:hitinfo.row,
+                    col:hitinfo.col
+                }
+                hitinfo.sheet.invalidateLayout();
+                hitinfo.sheet.repaint();
+            }
+                //取消悬浮提示
+            /*  let text = hitinfo.sheet.getText(hitinfo.row, hitinfo.col);
             let tag = hitinfo.sheet.getTag(hitinfo.row, hitinfo.col);
             let dataField = "quantity";
 
@@ -149,23 +151,27 @@ let quantityEditObj = {
                     $(this._toolTipElement).show("fast");
                     TREE_SHEET_HELPER.tipDiv = 'show';//做个标记
                 }
-            }
+            }*/
         };
         QuantityEditCellType.prototype.processMouseLeave = function (hitinfo) {
-            if(!quantityEditObj.pmLeave){
+            hideButton(hitinfo);
+            //延时检查:当tips正在show的时候,就调用了hide方法,会导致tips一直存在,所以设置一个超时处理
+
+            /*TREE_SHEET_HELPER.tipDiv = 'hide';  取消悬浮提示
+            if (TREE_SHEET_HELPER._toolTipElement) {
+                $(TREE_SHEET_HELPER._toolTipElement).hide();
+                TREE_SHEET_HELPER._toolTipElement = null;
+            };
+            TREE_SHEET_HELPER.tipDivCheck();*/
+        };
+        function hideButton(hitinfo) {
+            if(!quantityEditObj.pmLeave){//鼠标进入显示三个点按钮
                 quantityEditObj.editingCell=null;
                 hitinfo.sheet.invalidateLayout();
                 hitinfo.sheet.repaint();
                 quantityEditObj.pmLeave = true;
             }
-            let me = this;
-            TREE_SHEET_HELPER.tipDiv = 'hide';
-            if (me._toolTipElement) {
-                $(me._toolTipElement).hide();
-                me._toolTipElement = null;
-            };
-            TREE_SHEET_HELPER.tipDivCheck();//延时检查:当tips正在show的时候,就调用了hide方法,会导致tips一直存在,所以设置一个超时处理
-        };
+        }
         return new QuantityEditCellType();
     },
     showSelectModal:function (hitinfo) {
@@ -174,11 +180,12 @@ let quantityEditObj = {
         if(project.mainTree.selected.sourceType == ModuleNames.bills && project.isBillsLocked() && project.withinBillsLocked(project.mainTree.selected)){
             return;
         }
-        this.initModalContent();
+        this.initModalContent(hitinfo);
         $("#quantityEXPEdit").modal({show:true});
     },
-    initModalContent:function () {
-        let selected = projectObj.project.mainTree.selected;
+    initModalContent:function (hitinfo) {
+        //现在改成有可能点击时,还没选中节点,所以要靠row来判断
+        let selected = projectObj.project.mainTree.items[hitinfo.row];
         if(selected.sourceType == ModuleNames.ration){//暂时只有定额才有基数选择,所以其它的先隐藏表格
             $("#quantityEditSpread").show();//quantityEditSpread
         }else {