瀏覽代碼

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhangweicheng 7 年之前
父節點
當前提交
c4f6c86b34

+ 0 - 2
modules/main/models/bills.js

@@ -172,8 +172,6 @@ class billsModel extends baseModel {
         ration_ids = ration_ids.concat(getIDs(rations));
         //deep delete datas
         let deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: userID};
-        console.log(`bill_ids`);
-        console.log(bill_ids);
         if(bill_ids.length > 0){
             //删除bills
             await me.model.updateMany({ID: {$in: bill_ids}, deleteInfo: null}, {$set: {deleteInfo: deleteInfo}});

+ 0 - 49
modules/reports/util/pdf_base_files/rpt_pdf_consts.js

@@ -1,49 +0,0 @@
-/**
- * Created by zhang on 2017/8/14.
- */
-module.exports={
-    JV:{
-        NODE_MAIN_INFO: "主信息",
-        NODE_PAGE_INFO: "打印页面_信息",
-        NODE_MARGINS: "页边距",
-
-        NODE_FONT_COLLECTION: "font_collection",
-        NODE_STYLE_COLLECTION: "style_collection",
-        NODE_CONTROL_COLLECTION: "control_collection",
-
-        BAND_PROP_MERGE_BAND: "MergeBand",
-
-        PROP_NAME: "Name",
-        PROP_VALUE: "Value",
-        PROP_FONT: "font",
-        PROP_CONTROL: "control",
-        PROP_STYLE: "style",
-        PROP_AREA: "area",
-        PROP_ID: "ID",
-        PROP_LEFT: "Left",
-        PROP_RIGHT: "Right",
-        PROP_TOP: "Top",
-        PROP_BOTTOM: "Bottom",
-
-        IDX_LEFT: 0,
-        IDX_TOP: 1,
-        IDX_RIGHT: 2,
-        IDX_BOTTOM: 3,
-
-        CONTROL_PROPS: ["Shrink", "ShowZero", "Horizon", "Vertical", "Wrap"],
-        BORDER_STYLE_PROPS: ["LineWeight", "DashStyle", "Color"],
-        PROP_LINE_WEIGHT: "LineWeight",
-        PROP_DASH_STYLE: "DashStyle",
-        PROP_COLOR: "Color",
-        FONT_PROPS: ["Name", "FontHeight", "FontColor", "FontBold", "FontItalic", "FontUnderline", "FontStrikeOut", "FontAngle"],
-
-        OUTPUT_OFFSET: [2,1,2,3],
-        OFFSET_IDX_LEFT: 0,
-        OFFSET_IDX_RIGHT: 1,
-        OFFSET_IDX_TOP: 2,
-        OFFSET_IDX_BOTTOM: 3,
-
-        VERTICAL_ANGLE: "90",
-        ANTI_VERTICAL_ANGLE: "-90"
-    }
-}

+ 5 - 2
modules/reports/util/rpt_pdf_util.js

@@ -5,14 +5,17 @@
  * Created by zhang on 2017/8/14.
  */
 
-const prf_cons = require('./pdf_base_files/rpt_pdf_consts');
 let pdf = require('pdfkit');
 let fs = require('fs');
 let jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
 let DPI = jpcCmnHelper.getScreenDPI()[0];
-//let JV = prf_cons.JV;
 let JV = require('../rpt_component/jpc_value_define');
 
+// hwxsb.ttf: 华文中宋
+// Smart.ttf: 宋体(常规)
+// Smart-italic.ttf: 宋体(斜体)
+//目前不支持下划线
+
 module.exports ={
     export_pdf_file:export_pdf_file
 }

+ 54 - 0
public/web/sheet/sheet_common.js

@@ -537,6 +537,60 @@ var sheetCommonObj = {
                 }
             }
         }
+    },
+    //注册自定义回车键事件
+    bindEnterKey: function (workBook, operation) {
+        workBook.commandManager().register('myEnter', operation);
+        workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.enter, false, false, false, false);
+        workBook.commandManager().setShortcutKey('myEnter', GC.Spread.Commands.Key.enter, false, false, false, false);
+    },
+    //解决esc后触发了编辑结束的保存事件,显示与实际数据不同问题
+    bindEscKey: function (workBook, sheets) {
+        function isDef(v){
+            return typeof v !== 'undefined' && v !== null;
+        }
+        workBook.commandManager().register('myEsc', function () {
+            let activeSheet = workBook.getActiveSheet();
+            let hasTheSheet = false;
+            for(let sheetObj of sheets){
+                let sheet = sheetObj.sheet;
+                if(sheet === activeSheet){
+                    hasTheSheet = true;
+                    let editStarting = sheetObj.editStarting;
+                    let editEnded = sheetObj.editEnded;
+                    if(editStarting){
+                        sheet.unbind(GC.Spread.Sheets.Events.EditStarting);
+                    }
+                    if(editEnded){
+                        sheet.unbind(GC.Spread.Sheets.Events.EditEnded);
+                    }
+                    let row = sheet.getActiveRowIndex();
+                    let col = sheet.getActiveColumnIndex();
+                    let orgV = sheet.getValue(row, col);
+                    if(!isDef(orgV)){
+                        orgV = '';
+                    }
+                    if(sheet.isEditing()){
+                        sheet.endEdit();
+                        sheet.setValue(row, col, orgV);
+                    }
+                    if(editStarting){
+                        sheet.bind(GC.Spread.Sheets.Events.EditStarting, editStarting);
+                    }
+                    if(editEnded){
+                        sheet.bind(GC.Spread.Sheets.Events.EditEnded, editEnded);
+                    }
+                }
+            }
+            //容错处理,以防没把所有工作簿的表格信息传入参数
+            if(!hasTheSheet){
+                if(activeSheet.isEditing()){
+                    activeSheet.endEdit();
+                }
+            }
+        });
+        workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.esc, false, false, false, false);
+        workBook.commandManager().setShortcutKey('myEsc', GC.Spread.Commands.Key.esc, false, false, false, false);
     }
 
 }

+ 8 - 1
web/building_saas/complementary_ration_lib/html/dinge.html

@@ -553,9 +553,16 @@
 
         rationCoeOprObj.buildSheet(rdSpread.getSheet(2));
 
+        rationInstObj.buildSheet(rdSpread.getSheet(3));
         rationInstObj.getInstallation(parseInt(getQueryString("repository")), function () {
-            rationInstObj.buildSheet(rdSpread.getSheet(3));
+            //rationInstObj.buildSheet(rdSpread.getSheet(3));
         });
+        let rdSpreadEscSheets = [];
+        rdSpreadEscSheets.push({sheet: rdSpread.getSheet(0), editStarting: rationGLJOprObj.onEditStarting, editEnded: rationGLJOprObj.onCellEditEnd});
+        rdSpreadEscSheets.push({sheet: rdSpread.getSheet(1), editStarting: rationAssistOprObj.onEditStarting, editEnded: rationAssistOprObj.onEditEnded});
+        rdSpreadEscSheets.push({sheet: rdSpread.getSheet(2), editStarting: rationCoeOprObj.onEditStarting, editEnded: rationCoeOprObj.onEditEnded});
+        rdSpreadEscSheets.push({sheet: rdSpread.getSheet(3), editStarting: rationInstObj.onEditStarting, editEnded: rationInstObj.onEditEnded});
+        sheetCommonObj.bindEscKey(rdSpread, rdSpreadEscSheets);
         pageOprObj.initPage();
 
         $("#linkGLJ").click(function(){

+ 1 - 0
web/building_saas/complementary_ration_lib/js/ration.js

@@ -41,6 +41,7 @@ let rationOprObj = {
         let rationRepId = getQueryString("repository");
         let me = rationOprObj;
         me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
+        sheetCommonObj.bindEscKey(me.workBook, [{sheet: me.workBook.getSheet(0), editStarting: me.onCellEditStart, editEnded: me.onCellEditEnd}]);
         me.getRationsCodes(rationRepId);
         me.onContextmenuOpr();
         me.rationDelOpr();

+ 1 - 0
web/building_saas/complementary_ration_lib/js/section_tree.js

@@ -143,6 +143,7 @@ let sectionTreeObj = {
     buildSheet: function () {
         if(!this.isDef(this.workBook)){
             this.workBook = new GC.Spread.Sheets.Workbook($('#sectionSpread')[0], {sheetCount: 1});
+            sheetCommonObj.bindEscKey(this.workBook, [{sheet: this.workBook.getSheet(0), editStarting: this.onEditStarting, editEnded: this.onEditEnded}]);
             this.sheet = this.workBook.getSheet(0);
             this.bindEvents(this.sheet);
             this.setOptions(this.workBook, this.setting.options);

+ 7 - 5
web/building_saas/main/js/models/calc_program.js

@@ -112,6 +112,9 @@ let calcTools = {
             treeNode.source.children &&
             treeNode.source.children.length === 0;
     },
+    isbigBill: function(treeNode){
+        return this.isBill(treeNode) && treeNode.data.type == 1;
+    },
     isNullBill: function (treeNode) {
         return this.isLeafBill(treeNode) && (treeNode.children.length === 0) && (!treeNode.data.calcBase);
     },
@@ -733,7 +736,7 @@ let calcTools = {
     uiGLJPrice: function (price, glj){
         if (price){
             let projGLJ = glj ? calcTools.getProjectGLJ(glj) : null;
-            let d = (projGLJ&&projGLJ.ratio_data.length > 0) ? decimalObj.glj.unitPriceHasMix : decimalObj.glj.unitPrice;
+            let d = (projGLJ && projGLJ.ratio_data.length > 0) ? decimalObj.glj.unitPriceHasMix : decimalObj.glj.unitPrice;
             return parseFloat(price).toDecimal(d);
         }
         else return 0;
@@ -1801,10 +1804,9 @@ class CalcProgram {
             for (let node of treeNodes){delete node.changed};
             projectObj.mainController.refreshTreeNode(treeNodes);
 
-            // 批量树结点计算后,计算程序早已物是人非,所以这里要重新计算一下。
-            if (activeSubSheetIs(subSheetIndex.ssiCalcProgram)) {
-                calcProgramObj.refreshCurNodeCalcItems(me.project.mainTree.selected);
-            };
+            // 批量树结点计算后,计算程序早已物是人非,所以这里要重新计算一下。警告:第二个参数千万不能改成3,否则死循环!
+            if (activeSubSheetIsCalcProgram())
+                calcProgramObj.refreshCalcProgram(projectObj.project.mainTree.selected, 2);
             $.bootstrapLoading.end();
         });
     };

+ 12 - 15
web/building_saas/main/js/models/fee_rate.js

@@ -172,7 +172,7 @@ var FeeRate = {
             var node = project.mainTree.selected;
             if(node){
                 if (node.sourceType==='ration' && calcProgramObj.sheet) {
-                    calcProgramObj.showData(node);
+                    calcProgramObj.refreshCalcProgram(node, 3);
                 }
             }
         };
@@ -184,17 +184,6 @@ var FeeRate = {
             }
         };
         FeeRate.prototype.onFeeRateChange=function (rateID,value) {
-           /* var node = project.mainTree.selected;
-             this.refreshCalProgramByRateID(rateID,value);
-             this.refreshBillsByRateID(rateID,value);
-             if(node){
-             if (node.sourceType==='ration' && calcProgramObj.sheet) {
-             calcProgramObj.showData(node);
-             }
-             }
-             project.calcProgram.calcAllNodesAndSave(calcAllType.catAll);
-             project.markUpdateProject({projectID:project.ID(),feeRateID:this.getActivateFeeRateFileID()},"feeRate");
-             socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());*/
            this.onFeeRatesChange([{rateID:rateID,value:value}]);
         };
 
@@ -206,7 +195,7 @@ var FeeRate = {
             }
             if(node){
                 if (node.sourceType==='ration' && calcProgramObj.sheet) {
-                    calcProgramObj.showData(node);
+                    calcProgramObj.refreshCalcProgram(node, 3);
                 }
             }
             project.calcProgram.calcAllNodesAndSave(calcAllType.catAll);
@@ -221,7 +210,7 @@ var FeeRate = {
             var node = project.mainTree.selected;
             if(node){
                 if (node.sourceType==='ration' && calcProgramObj.sheet) {
-                    calcProgramObj.showData(node);
+                    calcProgramObj.refreshCalcProgram(node, 3);
                 }
             }
             project.calcProgram.calcAllNodesAndSave(calcAllType.catAll);
@@ -419,12 +408,20 @@ var FeeRate = {
                     $.bootstrapLoading.end();
                 }
             }
-            if(editInfo.calcItem.feeRateID && value!= null){
+/*            if(editInfo.calcItem.feeRateID && value!= null){
                 var rate = this.getFeeRateByID(editInfo.calcItem.feeRateID);
                 if(rate!=undefined){
                     this.updateFeeRateByCalc(rate,value);
                     return;
                 }
+            }*/
+            if(editInfo.calcItem.feeRateID){
+                var rate = this.getFeeRateByID(editInfo.calcItem.feeRateID);
+                if(rate!=undefined){
+                    if (value == null) value = 0;
+                    this.updateFeeRateByCalc(rate,value);
+                    return;
+                }
             }
             editInfo.calcItem.feeRate=value;
             editInfo.calcItem.feeRateID=null;

+ 2 - 3
web/building_saas/main/js/models/ration_glj.js

@@ -166,9 +166,8 @@ var ration_glj = {
                 if(isDef(node)){
                     project.calcProgram.calcAndSave(node);
                 }
-                if (activeSubSheetIs(subSheetIndex.ssiCalcProgram)) {
-                    calcProgramObj.showData(node, false);
-                }
+                if (activeSubSheetIsCalcProgram())
+                    calcProgramObj.refreshCalcProgram(node, 1);
             });
         };
         ration_glj.prototype.getGljByRationID = function(rationID){

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

@@ -178,6 +178,8 @@ let calcProgramManage = {
                     $.bootstrapLoading.end();
                 }
             });
+            if (activeSubSheetIsCalcProgram())
+                calcProgramObj.refreshCalcProgram(projectObj.project.mainTree.selected, 1);
         }
         else{
             let data = {

+ 17 - 13
web/building_saas/main/js/views/calc_program_view.js

@@ -39,22 +39,26 @@ let calcProgramObj = {
         sheetCommonObj.initSheet(me.sheet, me.setting, 1);
     },
 
-    showData: function (treeNode, needCalc = true) {
+    // 刷新显示当前选中树结点的计算程序。
+    // treeNode:末指定时默认是造价书当前选中树结点
+    // refreshKind: 1 仅刷新 2 计算并刷新但无需保存 3 计算保存并刷新
+    refreshCalcProgram: function (treeNode, refreshKind = 1) {
         var me = this;
         me.treeNode = treeNode;
-        if (needCalc){
-            projectObj.project.calcProgram.calcAndSave(treeNode);
-        };
-        me.datas = treeNode.data.calcTemplate ? treeNode.data.calcTemplate.calcItems : [];
-        sheetCommonObj.initSheet(me.sheet, me.setting, me.datas.length);
-        sheetCommonObj.showData(me.sheet, me.setting, me.datas);
-    },
 
-    refreshCurNodeCalcItems: function (treeNode) {
-        var me = this;
-        me.treeNode = treeNode;
-        projectObj.project.calcProgram.innerCalc(treeNode, []);
-        delete treeNode.changed;
+        switch (refreshKind) {
+            case 1:
+                // doNothing
+                break;
+            case 2:
+                projectObj.project.calcProgram.innerCalc(treeNode, []);
+                delete treeNode.changed;
+                break;
+            case 3:
+                projectObj.project.calcProgram.calcAndSave(treeNode);
+                break;
+        }
+
         me.datas = treeNode.data.calcTemplate ? treeNode.data.calcTemplate.calcItems : [];
         sheetCommonObj.initSheet(me.sheet, me.setting, me.datas.length);
         sheetCommonObj.showData(me.sheet, me.setting, me.datas);

+ 6 - 5
web/building_saas/main/js/views/installation_fee_view.js

@@ -589,16 +589,17 @@ let installationFeeObj={
         me.modifyFeeRuleSheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onModifyFeeRuleEditStarting);
         this.modifyFeeRuleSheet.name('modifyFeeRuleSheet');
     },
+    rationInstSheeteditChecking: function (sender, args) {
+        if(args.row>=installationFeeObj.rationInstallData.length){
+            args.cancel = true;
+        }
+    },
     initRationInstallSheet:function (sheet) {
         let me = this;
         this.rationInstallSheet = sheet;
         this.initSheet( this.rationInstallSheet,this.rationInstallSetting);
         sheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onRationSheetSelectionChange);
-        sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) {
-           if(args.row>=me.rationInstallData.length){
-               args.cancel = true;
-           }
-        });
+        sheet.bind(GC.Spread.Sheets.Events.EditStarting, this.rationInstSheeteditChecking);
         this.rationInstallSheet.name("rationInstallSheet");
     },
     onRationSheetSelectionChange: function (sender, args) {

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

@@ -90,7 +90,7 @@ let MainTreeCol = {
             return node.data.subType != 201 && node.data.subType != 4 && node.data.subType != 5
         },
         commonUnitFee: function (node) {
-            return !(calcTools.isLeafBill(node) && !calcTools.isCalcBaseBill(node) && !calcTools.isInheritFrom(node, [fixedFlag.SUB_ENGINERRING, fixedFlag.MEASURE]));
+            return !(calcTools.isLeafBill(node) && !calcTools.isbigBill(node) && !calcTools.isCalcBaseBill(node) && !calcTools.isInheritFrom(node, [fixedFlag.SUB_ENGINERRING, fixedFlag.MEASURE]));
         },
         //根据节点、父节点类型判断是否可用计算基数
         calcBaseType: function (node) {

+ 19 - 22
web/building_saas/main/js/views/project_view.js

@@ -36,14 +36,18 @@ var projectObj = {
             subViewObj.loadComments(node);
         }
         gljOprObj.showDataIfRationSelect(node);
-        if (activeSubSheetIs(subSheetIndex.ssiCalcProgram)) {
-            calcProgramObj.showData(node);
-        }
+        if (activeSubSheetIsCalcProgram())
+            calcProgramObj.refreshCalcProgram(node, 3);
+
         //zhong 2017-9-1 特征及内容
         if(pageCCOprObj.active){
             pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];//mainSpread焦点单元格
             pageCCOprObj.setCacheAndShow(node);
         }
+
+        let acSheet = subSpread.getActiveSheet();
+
+        console.log(acSheet.name());
         // for test interface.  CSLAAAAA
         // projectObj.testDisplay('前四项累计值排除当前选中项' + projectObj.project.calcProgram.getBeforeTaxTotalFee([node]));
 
@@ -395,10 +399,6 @@ var projectObj = {
             project.Ration.updateRationCodes([{'node':node,value:value}]);
           //  this.updateRationCode(node, value);  // 新套定额适合实时计算
             // 这里因异步问题暂时缺少工料机价格。该过程移到:ration_glj.js的refreshAfterSave方法中。
-            /*project.calcProgram.calcAndSave(node);
-            if (activeSubSheetIs(subSheetIndex.ssiCalcProgram)) {
-                calcProgramObj.showData(node, false);
-            };*/
         }
     },
     updateNodeField : function (node,value,filedID,callback) {
@@ -425,11 +425,14 @@ var projectObj = {
         let project = projectObj.project, fieldName = colSetting.data.field;
         if(node.sourceType==project.ration_glj.getSourceType()){
             project.ration_glj.updateFromMainSpread(value,node,fieldName);
-        }else if(fieldName === 'remark'){
+        }
+        else if(fieldName === 'remark'){
             projectObj.updateNodeField(node,value,'remark');
-        }  else if(calcTools.isGljRation(node)){
+        }
+        else if(calcTools.isGljRation(node)){
             gljOprObj.updateRationTypeGLJ(value,node,fieldName,editingText);
-        } else if (value !== calcFees.getFee(node.data, fieldName)||fieldName == 'quantity') {//工程量需要进行转换,所以做特殊处理
+        }
+        else if (value !== calcFees.getFee(node.data, fieldName)||fieldName == 'quantity') {//工程量需要进行转换,所以做特殊处理
             if (fieldName === 'code' && value != '' && !calcTools.isVolumePrice(node)) {
                 projectObj.updateCode(node, value);
             }
@@ -561,9 +564,9 @@ var projectObj = {
         projectObj.mainSpread.repaint();
     },
     mainSpreadEditEnded: function (sender, info) {
+        console.log('enterEDEnd');
         let project = projectObj.project;
         let node = project.mainTree.items[info.row];
-        console.log( project.withinBillsLocked(node));
         project.withinBillsLocked(node);
         let colSetting = projectObj.mainController.setting.cols[info.col];
         let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
@@ -705,8 +708,9 @@ var projectObj = {
                 that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.beforeTreeSelectedChange, that.beforeMainTreeSelectedChange);
                 that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, that.treeSelectedChanged);
                 if(!projectReadOnly){
-                    that.bindEnterKey(that.mainSpread, 'mainEnterKey', that.mainSpreadEnterKey);
+                    sheetCommonObj.bindEnterKey(that.mainSpread, that.mainSpreadEnterKey);
                 }
+                sheetCommonObj.bindEscKey(that.mainSpread, [{sheet: that.mainSpread.getSheet(0), editStarting: that.mainSpreadEditStarting, editEnded: that.mainSpreadEditEnded}]);
                 setTimeout(function () {
                     that.mainSpread.getActiveSheet().startEdit();//这两句需要挺多时间,而又需要在editend 事件前触发,而这些又不影响计算,所以这里用异步的方法
                     that.mainSpread.getActiveSheet().endEdit();
@@ -860,14 +864,6 @@ var projectObj = {
         me.mainSpreadEnterCell({type: 'EnterCell'}, {sheet: sheet, sheetName: sheet.name(), cancel: false, row: newRow, col: newCol});
 
     },
-    //注册自定义回车键事件
-    bindEnterKey: function (workBook, registerName, operation) {
-        let me = this;
-        let sheet = workBook.getActiveSheet();
-        workBook.commandManager().register(registerName, operation);
-        workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.enter, false, false, false, false);
-        workBook.commandManager().setShortcutKey(registerName, GC.Spread.Commands.Key.enter, false, false, false, false);
-    },
     loadMainSpreadContextMenu: function () {
         var project = this.project, spread = this.mainSpread, controller = this.mainController;
         $.contextMenu({
@@ -2229,12 +2225,10 @@ $('#customFile').change(function () {
     if(file.files.length > 0){
         $('.custom-file-label').text(`${file.files[0].name}`);
         $('#uploadAlert').hide();
-        console.log(file.files);
         //读取各个表及表名
         $.bootstrapLoading.start();
         let fileReader = new FileReader();
         fileReader.onload = function(ev) {
-            console.log('enter');
             try {
                 let data = ev.target.result;
                 // 以二进制流方式读取得到整份excel表格对象
@@ -2287,6 +2281,7 @@ $('#uploadConfirm').click(function () {
         //要去匹配的清单库(第一个)
         let matchBillLibId = projectInfoObj.projectInfo.engineeringInfo.bill_lib.length > 0 ? projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id : null;
         formData.append('billsLibId', matchBillLibId);
+        let uploadS = +new Date();
         $.ajax({
             url: '/bills/upload',
             type: 'POST',
@@ -2303,6 +2298,8 @@ $('#uploadConfirm').click(function () {
                     if (message !== '') {
                         alert(message);
                     }
+                    let uploadE = +new Date();
+                    console.log(`导入时间:${uploadE-uploadS}`);
                     // 成功则关闭窗体
                     $('#import').modal("hide");
                     //更新前端

+ 4 - 0
web/building_saas/main/js/views/std_bills_lib.js

@@ -147,6 +147,10 @@ var billsLibObj = {
                     if(canAdd === false && $.bootstrapLoading.isLoading()){
                         $.bootstrapLoading.end();
                     }
+                }, function () {
+                    if($.bootstrapLoading.isLoading()){
+                        $.bootstrapLoading.end();
+                    }
                 });
             }
         } else {

+ 17 - 1
web/building_saas/main/js/views/sub_view.js

@@ -11,7 +11,9 @@ let subSpread = null;
 let subObj = {
     initSubSpread:function () {
         contentOprObj.buildSheet($("#jobSpread")[0]);
+        sheetCommonObj.bindEscKey(contentOprObj.workBook, [{sheet: contentOprObj.workBook.getSheet(0), editStarting: contentOprObj.onEditStart, editEnded: contentOprObj.onEditEnded}]);
         characterOprObj.buildSheet($("#itemSpread")[0]);
+        sheetCommonObj.bindEscKey(characterOprObj.workBook, [{sheet: characterOprObj.workBook.getSheet(0), editStarting: characterOprObj.onEditStart, editEnded: characterOprObj.onEditEnded}]);
         $("#tzjnrCon").hide();
         $("#subSpread").show();
         subSpread = sheetCommonObj.createSpread($("#subSpread")[0], 4);
@@ -40,6 +42,13 @@ let subObj = {
         installationFeeObj.initRationInstallSheet(subSpread.getSheet(3));
         SheetDataHelper.protectdSheet(subSpread.getSheet(3));
 
+        //绑定esc
+        let subEscSheets = [];
+        subEscSheets.push({sheet: subSpread.getSheet(0), editStarting: gljOprObj.editChecking, editEnded: gljOprObj.onEditEnded});//定额工料机
+        subEscSheets.push({sheet: subSpread.getSheet(1), editStarting: gljOprObj.editChecking, editEnded: gljOprObj.onEditEnded});//工程量明细
+        subEscSheets.push({sheet: subSpread.getSheet(3), editStarting: installationFeeObj.rationInstSheeteditChecking, editEnded: null});//定额安装增加费
+        sheetCommonObj.bindEscKey(subSpread, subEscSheets);
+
         if(projectReadOnly){
             disableSpread(subSpread);
             disableSpread(contentOprObj.workBook);
@@ -94,7 +103,7 @@ $("#linkJSCX").click(function(){        // 计算程序
     if (!projectObj.mainController.tree.selected)
         projectObj.mainController.tree.selected = projectObj.mainController.tree.firstNode();
     let sel = projectObj.mainController.tree.selected;
-    calcProgramObj.showData(sel);
+    calcProgramObj.refreshCalcProgram(sel, 3);
     gljOprObj.activeTab='#linkJSCX';
 });
 
@@ -244,6 +253,9 @@ $("#add-content").change(function() {
             serialTypeEle.val('');
             serialTypeEle.attr('disabled', 'disabled');
             break;
+        case '':
+            characterFormatEle.attr('disabled', 'disabled');
+            break;
         case '1':
         case '2':
         case '3':
@@ -366,6 +378,10 @@ function activeSubSheetIs(idx){
     return rst;
 }
 
+function activeSubSheetIsCalcProgram(){
+    return subSpread.getActiveSheetIndex() == subSheetIndex.ssiCalcProgram;
+}
+
 //弹出清单规则或定额库后导致subSpread和特征及内容spread显示出问题
 function refreshSubSpread(){
     if(pageCCOprObj.active){

+ 3 - 2
web/building_saas/report/html/rpt_content_format.html

@@ -2,7 +2,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">格式</h5><h6 id="update_msg_response"></h6>
+                <h5 class="modal-title">格式</h5><h5 class="modal-title" id="update_msg_response"></h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
@@ -117,7 +117,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-link float-left" data-dismiss="modal" onclick="rptControlObj.saveCustCfg()">存为默认值</button>
+                <button type="button" class="btn btn-link float-left" onclick="rptControlObj.restoreCustCFG()">恢复默认值</button>
+                <button type="button" class="btn btn-link float-left" onclick="rptControlObj.saveCustCfg()">存为默认值</button>
                 <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                 <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</button>
             </div>

+ 1 - 1
web/building_saas/report/html/rpt_export_excel.html

@@ -38,8 +38,8 @@
                 </div>
             </div>
             <div class="modal-footer">
+                <a onclick="rptControlObj.getExcel()" class="btn btn-primary" data-dismiss="modal">确定导出</a>
                 <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <a onclick="rptControlObj.getExcel()" class="btn btn-primary">确定导出</a>
             </div>
         </div>
     </div>

+ 2 - 1
web/building_saas/report/html/rpt_main.html

@@ -29,7 +29,8 @@
                     <div class="panel">
                         <div class="panel-body">
                             <div class="btn-group" role="group" aria-label="Button group with nested dropdown" id="export_div">
-                                <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="modal" data-target="#export_excel"><i class="fa fa-file-excel-o"></i> Excel <span class="badge badge-secondary">0</span></button>
+                                <button type="button" class="btn btn-outline-primary btn-sm" id="show_excel_output_cfg" data-toggle="modal" data-target="#export_excel" style="display:none"></button>
+                                <button type="button" class="btn btn-outline-primary btn-sm" onclick="rptControlObj.checkAndGetExcel()"><i class="fa fa-file-excel-o"></i> Excel <span class="badge badge-secondary">0</span></button>
                                 <button type="button" class="btn btn-outline-primary btn-sm" onclick="rptControlObj.getPDF()"><i class="fa fa-file-pdf-o"></i> PDF <span class="badge badge-secondary">0</span></button>
                             </div>
                         </div>

+ 63 - 16
web/building_saas/report/js/rpt_main.js

@@ -130,6 +130,35 @@ let zTreeOprObj = {
         document.getElementById("rpt_narrow").checked = cfg.isNarrow;
         document.getElementById("rpt_fill_zero").checked = cfg.fillZero;
     },
+    extractRptCfg: function (cfg) {
+        cfg.margins.Left = $("#elementMargin_Left").get(0).value;
+        cfg.margins.Right = $("#elementMargin_Right").get(0).value;
+        cfg.margins.Top = $("#elementMargin_Top").get(0).value;
+        cfg.margins.Bottom = $("#elementMargin_Bottom").get(0).value;
+
+        for (let font of cfg.fonts) {
+            let fontPropSuffix = "title";
+            if (font.CfgDispName === "表标题") {
+                fontPropSuffix = "title";
+            } else if (font.CfgDispName === "列标题") {
+                fontPropSuffix = "column";
+            } else if (font.CfgDispName === "正文内容") {
+                fontPropSuffix = "content";
+            } else if (font.CfgDispName === "合计") {
+                fontPropSuffix = "summary";
+            } else if (font.CfgDispName === "表眉/表脚") {
+                fontPropSuffix = "header_footer";
+            }
+            font.Name = document.getElementById("fontName_" + fontPropSuffix).value;
+            font.FontHeight = document.getElementById("fontHeight_" + fontPropSuffix).value;
+            font.FontBold = (document.getElementById("font_bold_" + fontPropSuffix).className === "btn btn-sm btn-outline-secondary active")?"T":"F";
+            font.FontItalic = (document.getElementById("font_italic_" + fontPropSuffix).className === "btn btn-sm btn-outline-secondary active")?"T":"F";
+            font.FontUnderline = (document.getElementById("font_underline_" + fontPropSuffix).className === "btn btn-sm btn-outline-secondary active")?"T":"F";
+        }
+        cfg.showVerticalLine = document.getElementById("rpt_vertical_line").checked;
+        cfg.isNarrow = document.getElementById("rpt_narrow").checked;
+        cfg.fillZero = document.getElementById("rpt_fill_zero").checked;
+    },
     refreshNodes: function() {
         let me = this;
         let private_setupIsParent = function(node){
@@ -320,16 +349,38 @@ let rptControlObj = {
         }
     },
     getAllInOneBook: function () {
-        let me = rptControlObj;
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let orgRptName = zTreeOprObj.checkedRptTplNodes[0].name;
+            let orgRptName = projectInfoObj.projectInfo.name;
             let refRptTplIds = [];
             for (let node of zTreeOprObj.checkedRptTplNodes) {
                 refRptTplIds.push(node.refId);
             }
-            let url =  "/report_api/getExcelInOneBook/" + projectInfoObj.projectInfo.ID + "/" + refRptTplIds.join(",") + "/" +
-                me.getCurrentPageSize() + "/" + orgRptName + "/" + 'normal';
-            window.location = url;
+            window.location = "/report_api/getExcelInOneBook/" + projectInfoObj.projectInfo.ID + "/" + refRptTplIds.join(",") + "/" +
+                rptControlObj.getCurrentPageSize() + "/" + orgRptName + "/" + 'normal';
+        }
+    },
+    getAllIndividualExcelBook: function () {
+        let me = rptControlObj;
+        if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
+            let urls = [];
+            let orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
+            for (let tplNode of zTreeOprObj.checkedRptTplNodes) {
+                let orgRptName = tplNode.name;
+                let url =  "/report_api/getExcel/" + projectInfoObj.projectInfo.ID + "/" + tplNode.refId + "/" +
+                    me.getCurrentPageSize() + "/" + orientation + "/" + orgRptName + "/" + true + "/" + 'normal';
+                urls.push(url);
+            }
+            downloadReport(urls);
+        }
+    },
+    checkAndGetExcel: function () {
+        if (zTreeOprObj.treeObj) {
+            let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
+            if (chkNodes.length > 0) {
+                $("#show_excel_output_cfg").trigger("click");
+            } else {
+                rptControlObj.getAllIndividualExcelBook();
+            }
         }
     },
     getExcel: function () {
@@ -337,17 +388,7 @@ let rptControlObj = {
         if ($("#excelExportType_AllInOneBook").get(0).checked) {
             me.getAllInOneBook();
         } else if ($("#excelExportType_IndividualBook").get(0).checked) {
-            if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-                let urls = [];
-                let orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-                for (let tplNode of zTreeOprObj.checkedRptTplNodes) {
-                    let orgRptName = tplNode.name;
-                    let url =  "/report_api/getExcel/" + projectInfoObj.projectInfo.ID + "/" + tplNode.refId + "/" +
-                        me.getCurrentPageSize() + "/" + orientation + "/" + orgRptName + "/" + true + "/" + 'normal';
-                    urls.push(url);
-                }
-                downloadReport(urls);
-            }
+            me.getAllIndividualExcelBook();
         }
     },
     getPDF: function() {
@@ -433,6 +474,12 @@ let rptControlObj = {
             }
         }
     },
+    restoreCustCFG: function () {
+        let me = this;
+        zTreeOprObj.renderRptCfg(zTreeOprObj.defReportPageCfg);
+        zTreeOprObj.extractRptCfg(zTreeOprObj.reportPageCfg);
+        me.saveCustCfg();
+    },
     saveCustCfg: function() {
         let params = {};
         params.custCfg = zTreeOprObj.reportPageCfg;