瀏覽代碼

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

chenshilong 7 年之前
父節點
當前提交
9f78e1b7ed

+ 11 - 5
modules/main/facade/quantity_detail_facade.js

@@ -91,10 +91,14 @@ async function updateRegex(datas) {
     if(datas.doc.regex==null){
     if(datas.doc.regex==null){
         result=0;
         result=0;
         datas.doc.referenceIndexs=[];
         datas.doc.referenceIndexs=[];
-    }else {
-        regex = datas.doc.regex.toUpperCase();
-        let referenceIndexs = datas.doc.referenceIndexs;
-        result = getEvalResult(referenceIndexs,detailList,regex,decimal);
+    }else{
+        if(datas.doc.hasOwnProperty('result')){//如果前端已经计算好了
+            result = datas.doc.result;
+        }else {
+            regex = datas.doc.regex.toUpperCase();
+            let referenceIndexs = datas.doc.referenceIndexs;
+            result = getEvalResult(referenceIndexs,detailList,regex,decimal);
+        }
     }
     }
     detailList[datas.query.index].result =result;
     detailList[datas.query.index].result =result;
     detailList[datas.query.index].regex=datas.doc.regex;
     detailList[datas.query.index].regex=datas.doc.regex;
@@ -248,7 +252,9 @@ async function insertRecodeWithReg (doc) {
         let regex = doc.regex.toUpperCase();
         let regex = doc.regex.toUpperCase();
         let referenceIndexs = doc.referenceIndexs;
         let referenceIndexs = doc.referenceIndexs;
         let detailList = await getDatailList(doc,returnObjec);
         let detailList = await getDatailList(doc,returnObjec);
-        doc.result =getEvalResult(referenceIndexs,detailList,regex,decimal);
+        if(!doc.hasOwnProperty('result')){//前端已结计算完了,后端就不用再计算了
+            doc.result =getEvalResult(referenceIndexs,detailList,regex,decimal);
+        }
         let refreshQuantity =false;
         let refreshQuantity =false;
         if(doc.refreshQuantity==true){
         if(doc.refreshQuantity==true){
             refreshQuantity = true;
             refreshQuantity = true;

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

@@ -172,8 +172,6 @@ class billsModel extends baseModel {
         ration_ids = ration_ids.concat(getIDs(rations));
         ration_ids = ration_ids.concat(getIDs(rations));
         //deep delete datas
         //deep delete datas
         let deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: userID};
         let deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: userID};
-        console.log(`bill_ids`);
-        console.log(bill_ids);
         if(bill_ids.length > 0){
         if(bill_ids.length > 0){
             //删除bills
             //删除bills
             await me.model.updateMany({ID: {$in: bill_ids}, deleteInfo: null}, {$set: {deleteInfo: deleteInfo}});
             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.
  * Created by zhang on 2017/8/14.
  */
  */
 
 
-const prf_cons = require('./pdf_base_files/rpt_pdf_consts');
 let pdf = require('pdfkit');
 let pdf = require('pdfkit');
 let fs = require('fs');
 let fs = require('fs');
 let jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
 let jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
 let DPI = jpcCmnHelper.getScreenDPI()[0];
 let DPI = jpcCmnHelper.getScreenDPI()[0];
-//let JV = prf_cons.JV;
 let JV = require('../rpt_component/jpc_value_define');
 let JV = require('../rpt_component/jpc_value_define');
 
 
+// hwxsb.ttf: 华文中宋
+// Smart.ttf: 宋体(常规)
+// Smart-italic.ttf: 宋体(斜体)
+//目前不支持下划线
+
 module.exports ={
 module.exports ={
     export_pdf_file:export_pdf_file
     export_pdf_file:export_pdf_file
 }
 }

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

@@ -537,6 +537,38 @@ 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, editStarting = null, editEnded = null) {
+        let sheet = workBook.getActiveSheet();
+        workBook.commandManager().register('myEsc', function () {
+            sheet.unbind(GC.Spread.Sheets.Events.EditStarting);
+            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);
+            }
+        });
+        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);
     }
     }
 
 
 }
 }

+ 3 - 3
web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html

@@ -69,9 +69,9 @@
                                 <div class="col-12" id="gljRadios">
                                 <div class="col-12" id="gljRadios">
                                     <div class="row">
                                     <div class="row">
                                         <div class="col-7" style="margin-top: 5px;">
                                         <div class="col-7" style="margin-top: 5px;">
-                                            <input type="radio" class="glj-radio" name="glj" value="allGljs">所有人材机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准人材机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充人材机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="allGljs">所有&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充&nbsp;&nbsp;
                                         </div>
                                         </div>
                                         <div class="input-group col-5" style="margin-bottom: 5px;">
                                         <div class="input-group col-5" style="margin-bottom: 5px;">
                                             <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">
                                             <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

+ 3 - 3
web/building_saas/complementary_ration_lib/html/dinge.html

@@ -482,9 +482,9 @@
                         <div class="col-12" id="gljRadios">
                         <div class="col-12" id="gljRadios">
                             <div class="row">
                             <div class="row">
                                 <div class="col-7" style="margin-top: 5px;">
                                 <div class="col-7" style="margin-top: 5px;">
-                                    <input type="radio" class="glj-radio" name="glj" value="allGljs">所有人材机&nbsp;&nbsp;
-                                    <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准人材机&nbsp;&nbsp;
-                                    <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充人材机&nbsp;&nbsp;
+                                    <input type="radio" class="glj-radio" name="glj" value="allGljs">所有&nbsp;&nbsp;
+                                    <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准&nbsp;&nbsp;
+                                    <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充&nbsp;&nbsp;
                                 </div>
                                 </div>
                                 <div class="input-group col-5" style="margin-bottom: 5px;">
                                 <div class="input-group col-5" style="margin-bottom: 5px;">
                                     <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">
                                     <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

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

@@ -812,9 +812,9 @@
                                 <div class="col-12" id="gljRadios">
                                 <div class="col-12" id="gljRadios">
                                     <div class="row">
                                     <div class="row">
                                         <div class="col-7" style="margin-top: 5px;">
                                         <div class="col-7" style="margin-top: 5px;">
-                                            <input type="radio" class="glj-radio" name="glj" value="allGljs" checked>所有人材机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="stdGLJ">标准人材机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGLJs">补充人材机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="allGljs" checked>所有&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="stdGLJ">标准&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGLJs">补充&nbsp;&nbsp;
                                         </div>
                                         </div>
                                         <div class="input-group col-5" style="margin-bottom: 5px;">
                                         <div class="input-group col-5" style="margin-bottom: 5px;">
                                             <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">
                                             <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

+ 31 - 16
web/building_saas/main/js/models/calc_base.js

@@ -239,19 +239,15 @@ let cbTools = {
             //根据基数和行引用获取清单ID
             //根据基数和行引用获取清单ID
             for(let i = 0, len = bases.length; i < len; i++){
             for(let i = 0, len = bases.length; i < len; i++){
                 //基数是跟清单直接关联的
                 //基数是跟清单直接关联的
-                /*if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])){
-                    //税前工程造价算法用了分部分项、项目措施、其他项目、规费里的底层价格,相当于引用了4条固定清单,特殊处理
+                if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])){
+                    //税前工程造价算法用了分部分项、项目措施(已排除)、其他项目、规费里的底层价格,相当于引用了4条固定清单,特殊处理
                     if(bases[i]['value'] === '税前工程造价'){
                     if(bases[i]['value'] === '税前工程造价'){
                         let subEngineering = cbTools.findBill(calcBase.fixedFlag.SUB_ENGINERRING),
                         let subEngineering = cbTools.findBill(calcBase.fixedFlag.SUB_ENGINERRING),
-                            measure = cbTools.findBill(calcBase.fixedFlag.MEASURE),
                             other = cbTools.findBill(calcBase.fixedFlag.OTHER),
                             other = cbTools.findBill(calcBase.fixedFlag.OTHER),
                             charge = cbTools.findBill(calcBase.fixedFlag.CHARGE);
                             charge = cbTools.findBill(calcBase.fixedFlag.CHARGE);
                         if(subEngineering){
                         if(subEngineering){
                             block.push(subEngineering.ID);
                             block.push(subEngineering.ID);
                         }
                         }
-                        if(measure){
-                            block.push(measure.ID);
-                        }
                         if(other){
                         if(other){
                             block.push(other.ID);
                             block.push(other.ID);
                         }
                         }
@@ -262,11 +258,11 @@ let cbTools = {
                     else if(cbTools.isDef(calcBase.baseFigures[bases[i]['value']]['fixedBill'])){
                     else if(cbTools.isDef(calcBase.baseFigures[bases[i]['value']]['fixedBill'])){
                         block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
                         block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
                     }
                     }
-                }*/
-                if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])
+                }
+               /* if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])
                     && cbTools.isDef(calcBase.baseFigures[bases[i]['value']]['fixedBill'])){
                     && cbTools.isDef(calcBase.baseFigures[bases[i]['value']]['fixedBill'])){
                     block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
                     block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
-                }
+                }*/
                 else if(bases[i]['type'] === 'id'){
                 else if(bases[i]['type'] === 'id'){
                     let node = cbTools.getNodeByID(bases[i]['value']);
                     let node = cbTools.getNodeByID(bases[i]['value']);
                     if(cbTools.isDef(node)){
                     if(cbTools.isDef(node)){
@@ -1164,15 +1160,32 @@ let cbAnalyzer = {
         let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getUID(cbParser.getFIDArr(exp)));
         let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getUID(cbParser.getFIDArr(exp)));
         for(let i = 0, len = figureF.length; i < len; i++){
         for(let i = 0, len = figureF.length; i < len; i++){
             let figure = figureF[i];
             let figure = figureF[i];
-            let bill = null;
+            let billsIDs = [];
             if(figure.type === 'base' && cbTools.isDef(baseFigures[figure.value])){
             if(figure.type === 'base' && cbTools.isDef(baseFigures[figure.value])){
-                bill = cbTools.isDef(baseFigures[figure.value]['fixedBill']) ? baseFigures[figure.value]['fixedBill']['bill'] : null;
+                if(figure.value === '税前工程造价'){
+                    //税前工程造价算法在措施项目已排除自身,税前工程造价与措施项目无会造成循环的引用关系
+                    let subEngineering = cbTools.findBill(calcBase.fixedFlag.SUB_ENGINERRING),
+                        other = cbTools.findBill(calcBase.fixedFlag.OTHER),
+                        charge = cbTools.findBill(calcBase.fixedFlag.CHARGE);
+                    if(subEngineering){
+                        billsIDs.push(subEngineering.ID);
+                    }
+                    if(other){
+                        billsIDs.push(other.ID);
+                    }
+                    if(charge){
+                        billsIDs.push(charge.ID);
+                    }
+                }
+                else {
+                    billsIDs = cbTools.isDef(baseFigures[figure.value]['fixedBill']) ? [baseFigures[figure.value]['fixedBill']['bill']['ID']] : [];
+                }
             }
             }
             else if(figure.type === 'id'){
             else if(figure.type === 'id'){
                 let node = cbTools.getNodeByID(figure.value);
                 let node = cbTools.getNodeByID(figure.value);
-                bill = cbTools.isDef(node) ? node.data : null;
+                billsIDs = cbTools.isDef(node) ? [node.data.ID] : [];
             }
             }
-            if(cbTools.isDef(bill) && checkStack(getRefStack([bill.ID]), sIDs)){
+            if(cbTools.isDef(billsIDs) && billsIDs.length > 0 && isCycle(billsIDs)){
                 console.log('循环计算');
                 console.log('循环计算');
                 calcBase.errMsg = '表达式出现循环计算';
                 calcBase.errMsg = '表达式出现循环计算';
                 return true;
                 return true;
@@ -1188,16 +1201,18 @@ let cbAnalyzer = {
             }
             }
             return false;
             return false;
         }
         }
-        function getRefStack(billIDs){
+        function isCycle(billIDs){
             stack = Array.from(new Set(stack.concat(billIDs)));
             stack = Array.from(new Set(stack.concat(billIDs)));
             for(let i = 0, len = billIDs.length; i < len; i++){
             for(let i = 0, len = billIDs.length; i < len; i++){
                 let block = cbTools.getStackBlock(billIDs[i]);
                 let block = cbTools.getStackBlock(billIDs[i]);
                 if(block.length > 0){
                 if(block.length > 0){
                     stack = Array.from(new Set(stack.concat(block)));
                     stack = Array.from(new Set(stack.concat(block)));
-                    getRefStack(block);
+                    if(checkStack(stack, sIDs)){
+                        return true;
+                    }
+                    return isCycle(block);
                 }
                 }
             }
             }
-            return stack;
         }
         }
     },
     },
     //四则运算合法性,控制不允许重复出现运算符,这里再判断一次,控制行引用只能F
     //四则运算合法性,控制不允许重复出现运算符,这里再判断一次,控制行引用只能F

+ 87 - 3
web/building_saas/main/js/models/quantity_detail.js

@@ -25,6 +25,14 @@ var quantity_detail = {
             this.datas = datas;
             this.datas = datas;
         };
         };
 
 
+        quantity_detail.prototype.getListByID = function (ID,field) {
+             let condition={};
+            condition[field] = ID;
+             let details = _.filter(this.datas, condition);
+            details = _.sortBy(details, 'seq');
+            return details;
+        };
+
         // 提交数据后返回数据处理
         // 提交数据后返回数据处理
         quantity_detail.prototype.doAfterUpdate = function(err, data){
         quantity_detail.prototype.doAfterUpdate = function(err, data){
             if(!err){
             if(!err){
@@ -130,8 +138,8 @@ var quantity_detail = {
             doc.projectID = selected.data.projectID;
             doc.projectID = selected.data.projectID;
             doc[dataCode]=args.editingText;
             doc[dataCode]=args.editingText;
             doc.seq=args.row;
             doc.seq=args.row;
-            if(dataCode=='regex'){
-                if(!this.regexChecking(args.editingText)||!this.referenceChecking(args.editingText,args.row,doc)){
+            if(dataCode=='regex'){//  if(this.checkAndCalcResult(args.editingText,args.row,doc) === false){
+                if(this.checkAndCalcResult(args.editingText,args.row,doc) === false){
                     gljOprObj.showQuantityDetailData();
                     gljOprObj.showQuantityDetailData();
                     return;
                     return;
                 }
                 }
@@ -283,6 +291,82 @@ var quantity_detail = {
             let regExp = new RegExp(FindText, "g");
             let regExp = new RegExp(FindText, "g");
             return str.replace(regExp, RepText);
             return str.replace(regExp, RepText);
         };
         };
+
+        quantity_detail.prototype.calcResult = function (doc) {//return false 代表输入有误
+            let field = doc.billID?"billID":"rationID";// doc.rationID
+            let detailList = this.getListByID(doc[field],field);
+            let result = this.getEvalResult(doc.referenceIndexs,detailList,doc.regex);
+            if(result === null){
+                return false;
+            }else {
+                doc.result = result;
+                return true;
+            }
+        };
+        quantity_detail.prototype.getEvalResult = function(referenceIndexs,detailList,regex) {
+            try {
+                let decimal = getDecimal("quantity_detail");
+                for(let i of referenceIndexs){
+                    regex = this.replaceReference(i,detailList,regex)
+                }
+                console.log('replace all C reference -----'+regex);
+                regex = this.replaceSqr(regex);
+                console.log('replace all sqar reference -----'+regex);
+                return scMathUtil.roundTo(eval(regex), -decimal);
+            }catch (error){
+                alert('输入的表达式有误,请重新输入!');
+                return null;
+            }
+        };
+        quantity_detail.prototype.replaceReference = function(index,detailList,str) {
+            str=str.toUpperCase();
+            let rstr= detailList[index-1].regex==null?'0':'('+detailList[index-1].regex+')';
+            str=this.replaceAll('C'+index,rstr,str);
+            if(detailList[index-1].referenceIndexs.length>0){
+                for (let i of detailList[index-1].referenceIndexs){
+                    str =this.replaceReference(i,detailList,str);
+                }
+            }
+            return str;
+        };
+
+        quantity_detail.prototype.replaceSqr=function(text) {
+            var squarRegex = /\([^\^]+\)\^\d+/g;
+            var sqararr = text.match(squarRegex);
+
+            var squarRegex2 = /C[0-9]+\^\d+|[0-9]+([.]{1}[0-9]+){0,1}\^\d+/g; //匹配没有括号的
+            var sqararr2=text.match(squarRegex2);
+            if(sqararr){
+                text=this.converSqrByArr(sqararr,text);
+            }
+            if(sqararr2){
+                text=this.converSqrByArr(sqararr2,text);
+            }
+            return text;
+        };
+
+        quantity_detail.prototype.converSqrByArr  = function(sqararr,text) {
+            var temp = text;
+            sqararr.forEach(function (item) {
+                var arr = item.split('\^');
+                var y = parseInt(arr[1]);
+                var x_arr = [];
+                for (var i = 0; i < y; i++) {
+                    x_arr.push(arr[0]);
+                }
+                var temStr = x_arr.join('*');
+                temp = temp.replace(item, temStr);
+            });
+            return temp;
+        };
+
+        quantity_detail.prototype.checkAndCalcResult = function (regex,row,doc) {//return false 表示没有通过检查
+            if(!this.regexChecking(regex)||!this.referenceChecking(regex,row,doc)||!this.calcResult(doc)){
+                return false;
+            }
+            return true;
+        };
+
         quantity_detail.prototype.updateQuantityDetail=function (args,dataCode,recode,selected,batchCallback) {
         quantity_detail.prototype.updateQuantityDetail=function (args,dataCode,recode,selected,batchCallback) {
             var doc ={},me = this;
             var doc ={},me = this;
             var query={
             var query={
@@ -292,7 +376,7 @@ var quantity_detail = {
             var selected = selected?selected:projectObj.project.mainTree.selected;
             var selected = selected?selected:projectObj.project.mainTree.selected;
             doc[dataCode]=args.editingText;
             doc[dataCode]=args.editingText;
             if (dataCode == 'regex') {
             if (dataCode == 'regex') {
-                if(!this.regexChecking(args.editingText)||!this.referenceChecking(args.editingText,args.row,doc)){
+                if(this.checkAndCalcResult(args.editingText,args.row,doc) === false){
                     gljOprObj.showQuantityDetailData();
                     gljOprObj.showQuantityDetailData();
                     return;
                     return;
                 }
                 }

+ 2 - 7
web/building_saas/main/js/views/glj_view.js

@@ -705,15 +705,10 @@ var gljOprObj = {
         return temRationGLJs;
         return temRationGLJs;
     },
     },
     showQuantityDetailData: function (node) {
     showQuantityDetailData: function (node) {
-        var details = [];
         node = node ? node : projectObj.project.mainTree.selected;
         node = node ? node : projectObj.project.mainTree.selected;
         var quantity_detail = projectObj.project.quantity_detail;
         var quantity_detail = projectObj.project.quantity_detail;
-        if (node.sourceType == ModuleNames.ration) {
-            details = _.filter(quantity_detail.datas, {'rationID': node.data.ID});
-        } else if (node.sourceType == ModuleNames.bills) {
-            details = _.filter(quantity_detail.datas, {'billID': node.data.ID});
-        }
-        details = _.sortBy(details, 'seq');
+        let field = node.sourceType == ModuleNames.ration?'rationID':'billID';
+        let details = quantity_detail.getListByID(node.data.ID,field);
         sheetCommonObj.showData(this.detailSheet, this.detailSetting, details);
         sheetCommonObj.showData(this.detailSheet, this.detailSetting, details);
         this.detailData = details;
         this.detailData = details;
         if (MainTreeCol.readOnly.forQuantifyDetail(node)) {
         if (MainTreeCol.readOnly.forQuantifyDetail(node)) {

+ 6 - 41
web/building_saas/main/js/views/project_view.js

@@ -557,9 +557,9 @@ var projectObj = {
         projectObj.mainSpread.repaint();
         projectObj.mainSpread.repaint();
     },
     },
     mainSpreadEditEnded: function (sender, info) {
     mainSpreadEditEnded: function (sender, info) {
+        console.log('enterEDEnd');
         let project = projectObj.project;
         let project = projectObj.project;
         let node = project.mainTree.items[info.row];
         let node = project.mainTree.items[info.row];
-        console.log( project.withinBillsLocked(node));
         project.withinBillsLocked(node);
         project.withinBillsLocked(node);
         let colSetting = projectObj.mainController.setting.cols[info.col];
         let colSetting = projectObj.mainController.setting.cols[info.col];
         let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
         let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
@@ -701,8 +701,9 @@ var projectObj = {
                 that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.beforeTreeSelectedChange, that.beforeMainTreeSelectedChange);
                 that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.beforeTreeSelectedChange, that.beforeMainTreeSelectedChange);
                 that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, that.treeSelectedChanged);
                 that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, that.treeSelectedChanged);
                 if(!projectReadOnly){
                 if(!projectReadOnly){
-                    that.bindEnterKey(that.mainSpread, 'mainEnterKey', that.mainSpreadEnterKey);
+                    sheetCommonObj.bindEnterKey(that.mainSpread, that.mainSpreadEnterKey);
                 }
                 }
+                sheetCommonObj.bindEscKey(that.mainSpread, that.mainSpreadEditStarting, that.mainSpreadEditEnded);
                 setTimeout(function () {
                 setTimeout(function () {
                     that.mainSpread.getActiveSheet().startEdit();//这两句需要挺多时间,而又需要在editend 事件前触发,而这些又不影响计算,所以这里用异步的方法
                     that.mainSpread.getActiveSheet().startEdit();//这两句需要挺多时间,而又需要在editend 事件前触发,而这些又不影响计算,所以这里用异步的方法
                     that.mainSpread.getActiveSheet().endEdit();
                     that.mainSpread.getActiveSheet().endEdit();
@@ -740,7 +741,6 @@ var projectObj = {
                 if(projectReadOnly){
                 if(projectReadOnly){
                     disableSpread(that.mainSpread);
                     disableSpread(that.mainSpread);
                 }
                 }
-                console.log(decimalObj.decimal());
                 $.bootstrapLoading.end();
                 $.bootstrapLoading.end();
             }
             }
             else {
             else {
@@ -848,8 +848,6 @@ var projectObj = {
                     newCol = quantityCol;
                     newCol = quantityCol;
                 }
                 }
             }
             }
-
-
         }
         }
         //设置焦点
         //设置焦点
         sheet.setActiveCell(newRow, newCol);
         sheet.setActiveCell(newRow, newCol);
@@ -859,40 +857,6 @@ var projectObj = {
         me.mainSpreadEnterCell({type: 'EnterCell'}, {sheet: sheet, sheetName: sheet.name(), cancel: false, row: newRow, col: newCol});
         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().register(registerName, function(){
-            operation();
-           /!* let orgRow = sheet.getActiveRowIndex();
-            let orgCol = sheet.getActiveColumnIndex();
-            if(sheet.isEditing()){
-                sheet.endEdit();
-            }
-            let code = sheet.getValue(orgRow, 0);
-            let newRow, newCol;
-            if(!me.currentCache[orgRow] && code !== undefined && code !== null && orgCol !== me.setting.header.length - 1){
-                newRow = orgRow;
-                newCol = orgCol + 1;
-                sheet.setActiveCell(newRow, newCol);
-            }
-            else{
-                newRow = orgRow + 1;
-                newCol = me.currentCache[orgRow + 1] ? orgCol : 0;
-                sheet.setActiveCell(newRow, newCol);
-            }*!/
-            //触发事件
-            /!*me.onLeaveCell({type: 'LeaveCell'}, {sheet: sheet, sheetName: sheet.name(), cancel: false, row: orgRow, col: orgCol});
-            me.onEnterCell({type: 'EnterCell'}, {sheet: sheet, sheetName: sheet.name(), cancel: false, row: newRow, col: newCol});
-            let newSels = [{row: newRow, rowCount: 1, col: newCol, colCount: 1}];
-            let oldSels = [{row: orgRow, rowCount: 1, col: orgRow, colCount: 1}];
-            me.onSelectionChanged({type: 'SelectionChanged'}, {sheet: sheet, sheetName: sheet.name(), newSelections: newSels, oldSelections: oldSels});*!/
-        });*/
-        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 () {
     loadMainSpreadContextMenu: function () {
         var project = this.project, spread = this.mainSpread, controller = this.mainController;
         var project = this.project, spread = this.mainSpread, controller = this.mainController;
         $.contextMenu({
         $.contextMenu({
@@ -2254,12 +2218,10 @@ $('#customFile').change(function () {
     if(file.files.length > 0){
     if(file.files.length > 0){
         $('.custom-file-label').text(`${file.files[0].name}`);
         $('.custom-file-label').text(`${file.files[0].name}`);
         $('#uploadAlert').hide();
         $('#uploadAlert').hide();
-        console.log(file.files);
         //读取各个表及表名
         //读取各个表及表名
         $.bootstrapLoading.start();
         $.bootstrapLoading.start();
         let fileReader = new FileReader();
         let fileReader = new FileReader();
         fileReader.onload = function(ev) {
         fileReader.onload = function(ev) {
-            console.log('enter');
             try {
             try {
                 let data = ev.target.result;
                 let data = ev.target.result;
                 // 以二进制流方式读取得到整份excel表格对象
                 // 以二进制流方式读取得到整份excel表格对象
@@ -2312,6 +2274,7 @@ $('#uploadConfirm').click(function () {
         //要去匹配的清单库(第一个)
         //要去匹配的清单库(第一个)
         let matchBillLibId = projectInfoObj.projectInfo.engineeringInfo.bill_lib.length > 0 ? projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id : null;
         let matchBillLibId = projectInfoObj.projectInfo.engineeringInfo.bill_lib.length > 0 ? projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id : null;
         formData.append('billsLibId', matchBillLibId);
         formData.append('billsLibId', matchBillLibId);
+        let uploadS = +new Date();
         $.ajax({
         $.ajax({
             url: '/bills/upload',
             url: '/bills/upload',
             type: 'POST',
             type: 'POST',
@@ -2328,6 +2291,8 @@ $('#uploadConfirm').click(function () {
                     if (message !== '') {
                     if (message !== '') {
                         alert(message);
                         alert(message);
                     }
                     }
+                    let uploadE = +new Date();
+                    console.log(`导入时间:${uploadE-uploadS}`);
                     // 成功则关闭窗体
                     // 成功则关闭窗体
                     $('#import').modal("hide");
                     $('#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()){
                     if(canAdd === false && $.bootstrapLoading.isLoading()){
                         $.bootstrapLoading.end();
                         $.bootstrapLoading.end();
                     }
                     }
+                }, function () {
+                    if($.bootstrapLoading.isLoading()){
+                        $.bootstrapLoading.end();
+                    }
                 });
                 });
             }
             }
         } else {
         } else {

+ 3 - 0
web/building_saas/main/js/views/sub_view.js

@@ -244,6 +244,9 @@ $("#add-content").change(function() {
             serialTypeEle.val('');
             serialTypeEle.val('');
             serialTypeEle.attr('disabled', 'disabled');
             serialTypeEle.attr('disabled', 'disabled');
             break;
             break;
+        case '':
+            characterFormatEle.attr('disabled', 'disabled');
+            break;
         case '1':
         case '1':
         case '2':
         case '2':
         case '3':
         case '3':

+ 38 - 3
web/building_saas/pm/js/pm_newMain.js

@@ -276,6 +276,38 @@ const projTreeObj = {
                         $('#allowCopyHint').hide();
                         $('#allowCopyHint').hide();
                     }
                     }
                 },
                 },
+                "spr3": '--------',
+                "manageFiles": {
+                    name: "管理相关文件",
+                    icon: 'fa-list',
+                    disabled: function () {
+                        let selectedItem = projTreeObj.tree.selected;
+                        return !(selectedItem && selectedItem.data.projType !== projectType.folder);
+                    },
+                    callback: function (key, opt) {
+                        setDataToSideBar();
+                        $(".slide-sidebar").animate({width:"440"}).addClass("open");
+                        setTimeout(function () {
+                            $("body").bind('click', function (event) {
+                                var e = event || window.event; //浏览器兼容性
+                                if (!$(event.target).is('a')) {
+                                    var elem = event.target || e.srcElement;
+                                    while (elem) { //循环判断至跟节点,防止点击的是div子元素
+                                        if (elem.className == "open-sidebar" || elem.className == 'slide-sidebar open') {
+                                            return false;
+                                        }
+                                        if($(elem).attr('id') && $(elem).attr('id') === 'del-wj'){
+                                            return false;
+                                        }
+                                        elem = elem.parentNode;
+                                    }
+                                    $(".slide-sidebar").animate({width: "0"}).removeClass("open")// 关闭处理
+                                    $('body').unbind('click');
+                                }
+                            });
+                        }, 500);
+                    }
+                }
             }
             }
         });
         });
     },
     },
@@ -711,7 +743,7 @@ const projTreeObj = {
             }
             }
             if(hitinfo.sheet.name() != "copyToSheet"){//如果是复制到sheet,不用执行
             if(hitinfo.sheet.name() != "copyToSheet"){//如果是复制到sheet,不用执行
                 //建设项目,侧滑汇总
                 //建设项目,侧滑汇总
-                if(node.data.projType === projectType.project && withingClickArea() && !$('.slide-sidebar').hasClass('open')){
+                /*if(node.data.projType === projectType.project && withingClickArea() && !$('.slide-sidebar').hasClass('open')){
                     setDataToSideBar();
                     setDataToSideBar();
                     $(".slide-sidebar").animate({width:"440"}).addClass("open");
                     $(".slide-sidebar").animate({width:"440"}).addClass("open");
                     setTimeout(function () {
                     setTimeout(function () {
@@ -733,9 +765,9 @@ const projTreeObj = {
                             }
                             }
                         });
                         });
                     }, 500);
                     }, 500);
-                }
+                }*/
                 //单项文件,进入造价书界面
                 //单项文件,进入造价书界面
-                else if(node.data.projType === projectType.tender && withingClickArea()){
+                 if(node.data.projType === projectType.tender && withingClickArea()){
                     let timeoutTime = 200;
                     let timeoutTime = 200;
                     if($('.slide-sidebar').hasClass('open')){
                     if($('.slide-sidebar').hasClass('open')){
                         timeoutTime = 500;
                         timeoutTime = 500;
@@ -2694,6 +2726,9 @@ function setDataToSideBar() {
     // 获取当前点击的数据
     // 获取当前点击的数据
     let that = projTreeObj;
     let that = projTreeObj;
     let selectedItem = that.tree.selected;
     let selectedItem = that.tree.selected;
+    while ([projectType.tender, projectType.engineering].includes(selectedItem.data.projType) && selectedItem.parent){
+        selectedItem = selectedItem.parent;
+    }
     let name = selectedItem.data.name;
     let name = selectedItem.data.name;
     let target = selectedItem.data.projType === projectType.project ? '#summary-project' : '#summary-engineering';
     let target = selectedItem.data.projType === projectType.project ? '#summary-project' : '#summary-engineering';
     $(".side-content .p-3").hide();
     $(".side-content .p-3").hide();

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

@@ -2,7 +2,7 @@
     <div class="modal-dialog" role="document">
     <div class="modal-dialog" role="document">
         <div class="modal-content">
         <div class="modal-content">
             <div class="modal-header">
             <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">
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                     <span aria-hidden="true">&times;</span>
                 </button>
                 </button>
@@ -117,7 +117,8 @@
                 </div>
                 </div>
             </div>
             </div>
             <div class="modal-footer">
             <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-secondary" data-dismiss="modal">取消</button>
                 <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</button>
                 <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</button>
             </div>
             </div>

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

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

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

@@ -29,7 +29,8 @@
                     <div class="panel">
                     <div class="panel">
                         <div class="panel-body">
                         <div class="panel-body">
                             <div class="btn-group" role="group" aria-label="Button group with nested dropdown" id="export_div">
                             <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>
                                 <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>
                         </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_narrow").checked = cfg.isNarrow;
         document.getElementById("rpt_fill_zero").checked = cfg.fillZero;
         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() {
     refreshNodes: function() {
         let me = this;
         let me = this;
         let private_setupIsParent = function(node){
         let private_setupIsParent = function(node){
@@ -320,16 +349,38 @@ let rptControlObj = {
         }
         }
     },
     },
     getAllInOneBook: function () {
     getAllInOneBook: function () {
-        let me = rptControlObj;
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let orgRptName = zTreeOprObj.checkedRptTplNodes[0].name;
+            let orgRptName = projectInfoObj.projectInfo.name;
             let refRptTplIds = [];
             let refRptTplIds = [];
             for (let node of zTreeOprObj.checkedRptTplNodes) {
             for (let node of zTreeOprObj.checkedRptTplNodes) {
                 refRptTplIds.push(node.refId);
                 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 () {
     getExcel: function () {
@@ -337,17 +388,7 @@ let rptControlObj = {
         if ($("#excelExportType_AllInOneBook").get(0).checked) {
         if ($("#excelExportType_AllInOneBook").get(0).checked) {
             me.getAllInOneBook();
             me.getAllInOneBook();
         } else if ($("#excelExportType_IndividualBook").get(0).checked) {
         } 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() {
     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() {
     saveCustCfg: function() {
         let params = {};
         let params = {};
         params.custCfg = zTreeOprObj.reportPageCfg;
         params.custCfg = zTreeOprObj.reportPageCfg;