Bladeren bron

统一选择按钮

zhangweicheng 6 jaren geleden
bovenliggende
commit
1dcb773a38

+ 19 - 3
public/web/sheet/sheet_common.js

@@ -17,7 +17,6 @@ var sheetCommonObj = {
         spreadBook.options.showDragFillSmartTag = false;
         return spreadBook;
     },
-
     initSheet: function(sheet, setting, rowCount) {
         var me = this;
         var spreadNS = GC.Spread.Sheets;
@@ -193,6 +192,9 @@ var sheetCommonObj = {
             if(setting.header[col].cellType === "replaceButton"){
                 this.setReplaceButton(row,col,sheet,setting.header[col]);
             }
+            if(setting.header[col].cellType === "cusButton"){
+                this.setCusButton(row,col,sheet,setting);
+            }
 
             if(setting.header[col].cellType === "tipsCell"){
                 this.setTipsCell(row,col,sheet,setting.header[col]);
@@ -545,6 +547,18 @@ var sheetCommonObj = {
         };
         return new selectButton();
     },
+    setCusButton:function (row,col,sheet,setting) {
+        let functionName = setting.header[col].callback;
+        let readOnly = setting.disable[setting.header[col].disable];
+        if(typeof(readOnly) == 'function' ){
+            readOnly = readOnly(row,col);
+        }
+        if(functionName){
+            sheet.setCellType(row, col,this.getCusButtonCellType(setting.callback[functionName],readOnly));
+        }
+        //sheet.setCellType(row, col,this.getSelectButton(header.headerWidth),GC.Spread.Sheets.SheetArea.viewport);
+    },
+
     getCusButtonCellType:function (callback,readOnly=false) {
         var ns = GC.Spread.Sheets;
         function CusButtonCellType() {
@@ -559,8 +573,10 @@ var sheetCommonObj = {
                     var imageWidth = 25;
                     var imageX = x + w - imageWidth- imageMagin, imageY = y + h / 2 - imageHeight / 2;
                     ctx.save();
-                    ctx.fillStyle = style.backColor;
-                    ctx.fillRect(x,y,w,h);
+                    if(style.backColor){
+                        ctx.fillStyle = style.backColor;
+                        ctx.fillRect(x,y,w,h);
+                    }
                     ctx.drawImage(image, imageX, imageY,imageWidth,imageHeight);
                     ctx.beginPath();
                     ctx.arc(imageX+imageWidth/2,imageY+imageHeight/2,1,0,360,false);

+ 12 - 65
web/building_saas/main/js/views/calc_base_view.js

@@ -140,8 +140,7 @@ let calcBaseView = {
     ifEdit: function (type, row) {
         if (type == 'ration'){
             return true;
-        }
-        else{
+        } else{
             let selected = projectObj.project.mainTree.items[row];
             return selected && MainTreeCol.readOnly.forCalcBase(selected)?false:true;
         }
@@ -344,70 +343,18 @@ let calcBaseView = {
             }
         });
     },
-
-    getCalcBaseCellType:function (type) {
-        var ns = GC.Spread.Sheets;
-        function CalcBaseCellType() {
-            var init=false;
+    onCalcBaseButtonClick:function (hitinfo) {
+        let me = calcBaseView;
+        let node = projectObj.project.mainTree.items[hitinfo.row] ? projectObj.project.mainTree.items[hitinfo.row] : null;
+        if(hitinfo.sheet.getParent() === projectObj.mainSpread){
+            projectObj.mainController.setTreeSelected(node);
         }
-        CalcBaseCellType.prototype = new ns.CellTypes.Text();
-        CalcBaseCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
-            if(!projectReadOnly && calcBaseView.ifEdit(type, options.row)){
-                if(options.sheet.getActiveRowIndex()==options.row&&options.sheet.getActiveColumnIndex()==options.col){
-                    var image = document.getElementById('f_btn'),imageMagin = 3;
-                    var imageHeight = 15;
-                    var imageWidth = 25;
-                    var imageX = x + w - imageWidth- imageMagin, imageY = y + h / 2 - imageHeight / 2;
-                    ctx.save();
-                    ctx.fillStyle = style.backColor;
-                    ctx.fillRect(x,y,w,h);
-                    ctx.drawImage(image, imageX, imageY,imageWidth,imageHeight);
-                    ctx.beginPath();
-                    ctx.arc(imageX+imageWidth/2,imageY+imageHeight/2,1,0,360,false);
-                    ctx.arc(imageX+imageWidth/2-4,imageY+imageHeight/2,1,0,360,false);
-                    ctx.arc(imageX+imageWidth/2+4,imageY+imageHeight/2,1,0,360,false);
-                    ctx.fillStyle="black";//填充颜色,默认是黑色
-                    ctx.fill();//画实心圆
-                    ctx.closePath();
-                    ctx.restore();
-                    w = w - imageWidth - imageMagin;
-                }
-            }
-            GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
-        };
-        CalcBaseCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
-            return {
-                x: x,
-                y: y,
-                row: context.row,
-                col: context.col,
-                cellStyle: cellStyle,
-                cellRect: cellRect,
-                sheetArea: context.sheetArea
-            };
-        };
-        CalcBaseCellType.prototype.processMouseDown = function (hitinfo) {
-            let me = calcBaseView;
-            if(hitinfo.sheet.getActiveRowIndex()==hitinfo.row&&hitinfo.sheet.getActiveColumnIndex()==hitinfo.col){
-                var offset=hitinfo.cellRect.x+hitinfo.cellRect.width-6;
-                var imageWidth = 25;
-                if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
-                    if(!projectReadOnly && me.ifEdit(type, hitinfo.row)){
-                        let node = projectObj.project.mainTree.items[hitinfo.row] ? projectObj.project.mainTree.items[hitinfo.row] : null;
-                        if(hitinfo.sheet.getParent() === projectObj.mainSpread){
-                            projectObj.mainController.setTreeSelected(node);
-                        }
-                        hitinfo.sheet.setActiveCell(hitinfo.row, hitinfo.col);
-                        calcBaseView.confirmBtn.attr('toggle', 'calcBase');
-                        changeCalcBaseFeeRate('calcBase');
-                        $('#tabCalcBase').tab('show');
-                        calcBaseView.initCalctor(type);
-                    }
-                }
-            }
-        };
-        return new CalcBaseCellType();
-    },
+        hitinfo.sheet.setActiveCell(hitinfo.row, hitinfo.col);
+        calcBaseView.confirmBtn.attr('toggle', 'calcBase');
+        changeCalcBaseFeeRate('calcBase');
+        $('#tabCalcBase').tab('show');
+        calcBaseView.initCalctor('ration');
+    }
 };
 
 $(document).ready(function () {

+ 15 - 2
web/building_saas/main/js/views/calc_program_manage.js

@@ -25,7 +25,7 @@ let calcProgramManage = {
             // {headerName:"ID",headerWidth:80,dataCode:"ID", hAlign: "center"},
             {headerName:"费用代号",headerWidth:CP_Col_Width.code, dataCode:"code", dataType: "String"},
             {headerName:"费用名称",headerWidth:CP_Col_Width.name, dataCode:"name", dataType: "String"},
-            {headerName:"计算基数",headerWidth:CP_Col_Width.dispExprUser, dataCode:"dispExprUser", dataType: "String"},
+            {headerName:"计算基数",headerWidth:CP_Col_Width.dispExprUser, dataCode:"dispExprUser", dataType: "String",cellType:'cusButton',callback:'calcBase',disable:'calcBase'},
             {headerName:"费率",headerWidth:CP_Col_Width.feeRate, dataCode:"feeRate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},
             {headerName:"费用类别",headerWidth:CP_Col_Width.displayFieldName, dataCode:"displayFieldName", dataType: "String", hAlign: "center"},
             {headerName:"基数说明",headerWidth:CP_Col_Width.statement, dataCode:"statement", dataType: "String"},
@@ -36,6 +36,17 @@ let calcProgramManage = {
             lockColumns:[2,5],
             colHeaderHeight: CP_Col_Width.colHeader,
             rowHeaderWidth: CP_Col_Width.rowHeader
+        },
+        //callback 和disable都是和 cusButton配套使用的
+        callback:{
+            calcBase:function (hitinfo) {
+                calcBaseView.onCalcBaseButtonClick(hitinfo);
+            }
+        },
+        disable:{
+            calcBase:function (row,col) {
+                return projectReadOnly || !calcBaseView.ifEdit('ration', row)
+            }
         }
     },
 
@@ -67,11 +78,13 @@ let calcProgramManage = {
         me.detailSheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
         me.detailSheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onDetailEnterCell);
         me.detailSheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
+        me.detailSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function (e,info) {
+            info.sheet.repaint();
+        });
         sheetCommonObj.showData(me.mainSheet, me.mainSetting, me.datas);
 
         me.detailSheet.name('calc_detail');
         feeRateObject.setFeeRateCellCol(me.detailSheet, _.findIndex(me.detailSetting.header,{'dataCode':'feeRate'}));
-        me.detailSheet.getRange(-1, _.findIndex(me.detailSetting.header, {'dataCode': 'dispExprUser'}), -1, 1).cellType(calcBaseView.getCalcBaseCellType('ration'));
         sheetCommonObj.showData(me.detailSheet, me.detailSetting, me.datas[0].calcItems);
         me.getfeeRateColor(me.datas[0].calcItems);
         customRowHeader(me.detailSheet, me.datas[0].calcItems.length);

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

@@ -360,8 +360,9 @@ let MainTreeCol = {
         evaluationProject:function (node) {
             if(node.sourceType == ModuleNames.ration) return new GC.Spread.Sheets.CellTypes.CheckBox();
         },
-        commonTotalFee: function () {
-            return projectObj.getCommonTotalFeeCellType();
+        commonTotalFee: function (node) {
+            let readOnly = projectReadOnly || !calcBaseView.ifEdit('bills', projectObj.project.mainTree.items.indexOf(node));
+            return sheetCommonObj.getCusButtonCellType(projectObj.onCommonTotalFeeButtonClick,readOnly) //projectObj.getCommonTotalFeeCellType();
         },
         specialProvisional: function (node) {
             if(!MainTreeCol.readOnly.specialProvisional(node)){

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

@@ -1923,72 +1923,19 @@ var projectObj = {
         }
         return this.itemCol?!this.itemCol.visible:true;
     },
-    //综合合价cellType
-    getCommonTotalFeeCellType:function () {
-        let type = 'bills';
-        var ns = GC.Spread.Sheets;
-        function CommonTotalFeeCellType() {
-            var init=false;
-        }
-        CommonTotalFeeCellType.prototype = new ns.CellTypes.Text();
-        CommonTotalFeeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
-            if(!projectReadOnly && calcBaseView.ifEdit(type, options.row)){
-                if(options.sheet.getActiveRowIndex()==options.row&&options.sheet.getActiveColumnIndex()==options.col){
-                    var image = document.getElementById('f_btn'),imageMagin = 3;
-                    var imageHeight = 15;
-                    var imageWidth = 25;
-                    var imageX = x + w - imageWidth- imageMagin, imageY = y + h / 2 - imageHeight / 2;
-                    ctx.save();
-                    ctx.fillStyle = style.backColor;
-                    ctx.fillRect(x,y,w,h);
-                    ctx.drawImage(image, imageX, imageY,imageWidth,imageHeight);
-                    ctx.beginPath();
-                    ctx.arc(imageX+imageWidth/2,imageY+imageHeight/2,1,0,360,false);
-                    ctx.arc(imageX+imageWidth/2-4,imageY+imageHeight/2,1,0,360,false);
-                    ctx.arc(imageX+imageWidth/2+4,imageY+imageHeight/2,1,0,360,false);
-                    ctx.fillStyle="black";//填充颜色,默认是黑色
-                    ctx.fill();//画实心圆
-                    ctx.closePath();
-                    ctx.restore();
-                    w = w - imageWidth - imageMagin;
-                }
-            }
-             GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
-        };
-        CommonTotalFeeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
-            return {
-                x: x,
-                y: y,
-                row: context.row,
-                col: context.col,
-                cellStyle: cellStyle,
-                cellRect: cellRect,
-                sheetArea: context.sheetArea
-            };
-        };
-        CommonTotalFeeCellType.prototype.processMouseDown = function (hitinfo) {
-            let me = calcBaseView;
-            if(hitinfo.sheet.getActiveRowIndex()==hitinfo.row&&hitinfo.sheet.getActiveColumnIndex()==hitinfo.col){
-                var offset=hitinfo.cellRect.x+hitinfo.cellRect.width-6;
-                var imageWidth = 25;
-                if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
-                    if(!projectReadOnly && me.ifEdit(type, hitinfo.row)){
-                        let node = projectObj.project.mainTree.items[hitinfo.row] ? projectObj.project.mainTree.items[hitinfo.row] : null;
-                        if(hitinfo.sheet.getParent() === projectObj.mainSpread){
-                            projectObj.mainController.setTreeSelected(node);
-                        }
-                        hitinfo.sheet.setActiveCell(hitinfo.row, hitinfo.col);
-                        calcBaseView.confirmBtn.attr('toggle', 'commonTotalFee');
-                        //changeCalcBaseFeeRate('commonTotalFee');//公路上不需要费率选项页
-                        changeCalcBaseFeeRate('calcBase');
-                        $('#tabCalcBase').tab('show');
-                        calcBaseView.initCalctor(type);
-                        //feeRateObject.showSelectModal(hitinfo);
-                    }
-                }
-            }
-        };
-        return new CommonTotalFeeCellType();
+    onCommonTotalFeeButtonClick:function(hitinfo){
+        let me = calcBaseView;
+        let node = projectObj.project.mainTree.items[hitinfo.row] ? projectObj.project.mainTree.items[hitinfo.row] : null;
+        if(hitinfo.sheet.getParent() === projectObj.mainSpread){
+            projectObj.mainController.setTreeSelected(node);
+        }
+        hitinfo.sheet.setActiveCell(hitinfo.row, hitinfo.col);
+        calcBaseView.confirmBtn.attr('toggle', 'commonTotalFee');
+        //changeCalcBaseFeeRate('commonTotalFee');//公路上不需要费率选项页
+        changeCalcBaseFeeRate('calcBase');
+        $('#tabCalcBase').tab('show');
+        calcBaseView.initCalctor('bills');
+            //feeRateObject.showSelectModal(hitinfo);
     },
     selectColAndFocus :function (newNode,field = 'code') {//选中单元格并设置焦点
         if(newNode){