فهرست منبع

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

zhangweicheng 6 سال پیش
والد
کامیت
a9cd19cfc4

+ 3 - 3
modules/main/facade/project_facade.js

@@ -300,7 +300,7 @@ async function getBudgetSummayDatas(projectIDs){
         names.push(mp.name);
         prjTypeNames.push(mp.prjTypeName);
         compilationScopes.push(mp.compilationScope);
-        if(projects.length == 0) decimal = await decimal_facade.getProjectDecimal(mp.ParentID);//如果只有一个项目,则没走合并的那一步,decimal会为空,从面报错
+        if(projects.length == 1) decimal = await decimal_facade.getProjectDecimal(projectIDs[0]);//如果只有一个项目,则没走合并的那一步,decimal会为空,从面报错
         for(let i = 1;i<projects.length;i++){
             names.push(projects[i].name);
             prjTypeNames.push(projects[i].prjTypeName);
@@ -371,7 +371,7 @@ function getReportData(nameList,items,prjTypeNames,compilationScopes,decimal) {
                 total = scMathUtil.roundForObj(p+total,decimal.process);
             }
             tem.billsPrices.push(p);
-            if(bills.quantityMap[n]){
+            if(bills.quantityMap[n] && parseFloat(bills.quantityMap[n]) !== 0){
                 tem.billsAmounts.push(bills.quantityMap[n]);
                 tem['技术经济指标'].push(scMathUtil.roundForObj(p/bills.quantityMap[n],2));
             }else {
@@ -380,7 +380,7 @@ function getReportData(nameList,items,prjTypeNames,compilationScopes,decimal) {
             }
         }
         tem.billsTtlPrice = scMathUtil.roundForObj(total,decimal.bills.totalPrice);
-        tem['技术经济综合指标'] = tem.billsTtlAmt?scMathUtil.roundForObj(tem.billsTtlPrice/tem.billsTtlAmt,2):0;
+        tem['技术经济综合指标'] = (tem.billsTtlAmt && parseFloat(tem.billsTtlAmt) !== 0)?scMathUtil.roundForObj(tem.billsTtlPrice/tem.billsTtlAmt,2):0;
         if(bills.flag == fixedFlag.TOTAL_COST) totalItem = tem;
         return tem
     }

+ 3 - 2
modules/pm/controllers/pm_controller.js

@@ -451,10 +451,11 @@ module.exports = {
     },
 
     recGC: function(request, response){
-        let userID = request.session.sessionUser.id;
+        let userID = request.session.sessionUser.id,
+            compilationId = request.session.sessionCompilation._id;
         let data = JSON.parse(request.body.data);
         let nodes = data.nodes;
-        ProjectsData.recGC(userID, nodes, function (err, msg, data) {
+        ProjectsData.recGC(userID, compilationId, nodes, function (err, msg, data) {
             callback(request, response, err, msg, data);
         });
    },

+ 4 - 4
modules/pm/models/project_model.js

@@ -467,8 +467,8 @@ ProjectsDAO.prototype.getGCFiles = async function (fileType, userID) {
     return rst;
 };
 
-ProjectsDAO.prototype.getFirstNodeID = async function (userID, pid) {
-    let nodes = await Projects.find({userID: userID, ParentID: pid, deleteInfo: null});
+ProjectsDAO.prototype.getFirstNodeID = async function (userID, compilationId, pid) {
+    let nodes = await Projects.find({userID: userID, compilation: compilationId, ParentID: pid, deleteInfo: null});
     if (nodes.length === 0) {
         return -1;
     }
@@ -499,7 +499,7 @@ ProjectsDAO.prototype.getFirstNodeID = async function (userID, pid) {
     }
 };
 
-ProjectsDAO.prototype.recGC = async function (userID, datas, callback) {
+ProjectsDAO.prototype.recGC = async function (userID, compilationId, datas, callback) {
     let functions = [];
     let updateDatas = [];
     for (let i = 0, len = datas.length; i < len; i++) {
@@ -521,7 +521,7 @@ ProjectsDAO.prototype.recGC = async function (userID, datas, callback) {
                         datas[i].updateData.ParentID = -1;
                     }
                 }
-                let firstNodeID = await this.getFirstNodeID(userID, projPid);
+                let firstNodeID = await this.getFirstNodeID(userID, compilationId, projPid);
                 datas[i].updateData.NextSiblingID = firstNodeID;
             }
             updateDatas.push(datas[i])

+ 42 - 11
modules/reports/controllers/rpt_controller.js

@@ -335,6 +335,13 @@ function getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, cus
     rptTplFacade.getRptTemplates(rpt_ids).then(function(rptTpls) {
         let rptDataUtil = new rptDataExtractor();
         let filters = [];
+        if (rptTpls.length > 1) {
+            rptTpls.sort(function (item1, item2){
+                let i1 = (item1._doc)?item1._doc:item1, i2 = (item2._doc)?item2._doc:item2;
+                let ID1 = rpt_ids.indexOf(i1[JV.PROP_ID]), ID2 = rpt_ids.indexOf(i2[JV.PROP_ID]);
+                return ID1 - ID2;
+            });
+        }
         for (let rptTpl of rptTpls) {
             rptDataUtil.initialize((rptTpl._doc)?rptTpl._doc:rptTpl);
             let filter = rptDataUtil.getDataRequestFilter();
@@ -420,6 +427,7 @@ function getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, cus
 function getBillsSummaryReportPages(user_id, prjIds, rpt_id, pageSize, orientation, customizeCfg, option, outputType, cb) {
     let rptTpl = null;
     rptTplDataFacade.getBudgetSummayDatas(prjIds).then(function(summaryRawDataRst) {
+        // console.log(summaryRawDataRst);
         rptTplFacade.getRptTemplate(rpt_id).then(function(rptTpl) {
             let rptDataUtil = new rptDataExtractor();
             rptDataUtil.initialize((rptTpl._doc)?rptTpl._doc:rptTpl);
@@ -627,24 +635,40 @@ module.exports = {
         })
     },
     getMultiReportsEx: function (req, res) {
-        //原则说明:把所有报表模板集中获取,统一filter,只读一次数据!(有空再整)
+        //原则说明:把所有报表模板集中获取,统一filter,只读一次数据!
         let params = JSON.parse(req.body.params),
             prj_id = params.prj_id,
-            rpt_ids = params.rpt_ids.split(','),
+            rpt_ids = params.rpt_ids,
+            //--以下是汇总类数据----------
+            rpt_bill_tpl_ids = params.rpt_bill_tpl_ids,
+            rpt_glj_tpl_ids = params.rpt_glj_tpl_ids,
+            prjIds = params.prjIds,
+            //------------
             pageSize = params.pageSize,
             orientation = params.orientation,
             customizeCfg = params.custCfg,
             option = params.option;
         let user_id = req.session.sessionUser.id;
         let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_NORMAL, function (err, rptPageRstArray) {
-            if(err){
-                callback(req, res, '数据有误', null);
-            }
-            else{
-                callback(req, res, err, rptPageRstArray);
-            }
-        });
+        if (rpt_ids && rpt_ids.length > 0) {
+            getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_PDF, function (err, rptPageRstArray) {
+                if (err) {
+                    callback(req, res, '数据有误', null);
+                } else {
+                    if ((rpt_bill_tpl_ids && rpt_bill_tpl_ids.length > 0) || (rpt_glj_tpl_ids && rpt_glj_tpl_ids.length > 0)) {
+                        getSummaryComboPages(user_id, prjIds, rpt_bill_tpl_ids, rpt_glj_tpl_ids, pageSize, orientation, customizeCfg, option, JV.OUTPUT_TYPE_NORMAL, function (err, rptSumPageRstArray) {
+                            callback(req, res, err, rptSumPageRstArray.concat(rptPageRstArray));
+                        });
+                    } else {
+                        callback(req, res, err, rptPageRstArray);
+                    }
+                }
+            });
+        } else if ((rpt_bill_tpl_ids && rpt_bill_tpl_ids.length > 0) || (rpt_glj_tpl_ids && rpt_glj_tpl_ids.length > 0)) {
+            getSummaryComboPages(user_id, prjIds, rpt_bill_tpl_ids, rpt_glj_tpl_ids, pageSize, orientation, customizeCfg, option, JV.OUTPUT_TYPE_NORMAL, function (err, rptSumPageRstArray) {
+                callback(req, res, err, rptSumPageRstArray);
+            });
+        }
     },
 
     getBillSummaryReportPages: function (req, res) {
@@ -762,6 +786,7 @@ module.exports = {
         if (rpt_ids && rpt_ids.length > 0) {
             getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_NORMAL, function (err, rptPageRstArray) {
                 if(err){
+                    console.log('导出Excel错误(生成数据过程错误), userId: ' + user_id + ', prjId' + prj_id);
                     callback(req, res, '数据有误', null);
                 } else {
                     if ((rpt_bill_tpl_ids && rpt_bill_tpl_ids.length > 0) || (rpt_glj_tpl_ids && rpt_glj_tpl_ids.length > 0)) {
@@ -872,7 +897,7 @@ module.exports = {
             });
         };
         if (rpt_ids && rpt_ids.length > 0) {
-            getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_PDF, function (err, rptPageRstArray) {
+            getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_NORMAL, function (err, rptPageRstArray) {
                 if (err) {
                     console.log('导出Excel错误(生成数据过程错误), userId: ' + user_id + ', prjId' + prj_id);
                     callback(req, res, '数据生成错误', null);
@@ -1050,6 +1075,7 @@ module.exports = {
             option = params.option;
         let user_id = req.session.sessionUser.id;
         let dftOption = option||JV.PAGING_OPTION_NORMAL;
+        console.log('start!');
         let pri_Add_Parallel_Functions = function (parallelFunctions, rptPageRstArray, paraRptNames, err) {
             for (let idx = 0; idx < rptPageRstArray.length; idx++) {
                 parallelFunctions.push((function (pageRst, rpt_name) {
@@ -1074,19 +1100,23 @@ module.exports = {
             });
         };
         if (rpt_ids && rpt_ids.length > 0) {
+            console.log(0);
             getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_PDF, function (err, rptPageRstArray) {
                 if (err) {
                     console.log('导出Excel错误(生成数据过程错误), userId: ' + user_id + ', prjId' + prj_id);
                     callback(req, res, '数据生成错误', null);
                 } else {
                     if ((rpt_bill_tpl_ids && rpt_bill_tpl_ids.length > 0) || (rpt_glj_tpl_ids && rpt_glj_tpl_ids.length > 0)) {
+                        console.log(1);
                         getSummaryComboPages(user_id, prjIds, rpt_bill_tpl_ids, rpt_glj_tpl_ids, pageSize, orientation, customizeCfg, option, JV.OUTPUT_TYPE_NORMAL, function (err, rptSumPageRstArray) {
                             let parallelFunctions = [];
+                            console.log(2);
                             pri_Add_Parallel_Functions(parallelFunctions, rptPageRstArray, rpt_names, err);
                             pri_Add_Parallel_Functions(parallelFunctions, rptSumPageRstArray, sum_rpt_names, err);
                             pri_Run_Parallel_Functions(parallelFunctions);
                         });
                     } else {
+                        console.log(3);
                         let parallelFunctions = [];
                         pri_Add_Parallel_Functions(parallelFunctions, rptPageRstArray, rpt_names, err);
                         pri_Run_Parallel_Functions(parallelFunctions);
@@ -1094,6 +1124,7 @@ module.exports = {
                 }
             });
         } else if ((rpt_bill_tpl_ids && rpt_bill_tpl_ids.length > 0) || (rpt_glj_tpl_ids && rpt_glj_tpl_ids.length > 0)) {
+            console.log(10);
             getSummaryComboPages(user_id, prjIds, rpt_bill_tpl_ids, rpt_glj_tpl_ids, pageSize, orientation, customizeCfg, option, JV.OUTPUT_TYPE_NORMAL, function (err, rptSumPageRstArray) {
                 let parallelFunctions = [];
                 pri_Add_Parallel_Functions(parallelFunctions, rptSumPageRstArray, sum_rpt_names, err);

+ 1 - 1
modules/reports/routes/report_router.js

@@ -26,7 +26,7 @@ module.exports =function (app) {
     //now is the real:
     rptRouter.post('/getReport', reportController.getReportAllPages);
     rptRouter.post('/getReportSvg', reportController.getReportAllPagesSvg);
-    rptRouter.post('/getMultiReports', reportController.getMultiReports);
+    rptRouter.post('/getMultiReports', reportController.getMultiReportsEx);
     rptRouter.post('/createExcelFiles', reportController.createExcelFilesEx);
     rptRouter.post('/createExcelFilesInOneBook', reportController.createExcelFilesInOneBookEx);
     rptRouter.post('/createPdfFiles', reportController.createPdfFilesEx);

+ 2 - 1
modules/reports/util/rpt_excel_util.js

@@ -444,7 +444,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
     };
     let private_getSharedStrIdx = function(val) {
         let strVal = val;
-        if (val === null) {
+        if (val === null || val === undefined || (typeof val === 'number' && isNaN(val))) {
             strVal = "";
         }
         let rst = sharedStrList.indexOf(strVal);
@@ -749,6 +749,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
                     let valIdx = private_getSharedStrIdx(theShtData.cells[cIdx][JV.PROP_VALUE]);
                     cellObj.v = valIdx;
                 }
+
                 rowIdx2 = theYPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_BOTTOM]);
                 colIdx2 = xPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_RIGHT]);
                 if ((rowIdx2 - rowIdx1 > 1) || (colIdx2 - colIdx1 > 1)) {

+ 9 - 7
test/unit/reports/test_multi_rpts.js

@@ -31,19 +31,21 @@ let demoRptIds = [];
 // demoRptIds.push(38); //5.2.2表
 // demoRptIds.push(6); //封面
 // demoRptIds.push(22); //03
+// demoRptIds.push(23); //04 综合费率表
+// demoRptIds.push(24); //05 预算
+// demoRptIds.push(25); //06
 // demoRptIds.push(26); //07
-// demoRptIds.push(28); //09
 // demoRptIds.push(27); //08
-// demoRptIds.push(24); //05
+// demoRptIds.push(28); //09
 // demoRptIds.push(20); //01
-// demoRptIds.push(23); //04 综合费率表
 // demoRptIds.push(56); //24
 // demoRptIds.push(36); //5.1
 // demoRptIds.push(49); //5.5
 // demoRptIds.push(66); //5.4
-demoRptIds.push(57); //01
-demoRptIds.push(58); //03
-demoRptIds.push(59); //04
+// demoRptIds.push(57); //01
+// demoRptIds.push(58); //03
+// demoRptIds.push(59); //04
+demoRptIds.push(65); //05 工程量清单
 
 let pagesize = "A4";
 
@@ -59,7 +61,7 @@ let demoPrjId = - 1;
 // demoPrjId = 455; //PROD:
 // demoPrjId = 618; //PROD:
 // demoPrjId = 815; //PROD:
-demoPrjId = 1510; //UAT:
+demoPrjId = 552; //UAT:
 //*/
 let userId_Dft = userId_Leng;
 // let userId_Dft = "5a025c4c15074d134c2b9689";

+ 8 - 8
test/unit/reports/test_rpt_test_template.js

@@ -47,8 +47,8 @@ let demoPrjId = - 1;
 // let demoRptId = 68; //01-2
 // let demoRptId = 71; //21-2
 // let demoRptId = 74; //22
-// let demoRptId = 83; //02 预算
-let demoRptId = 84; //02 清单
+let demoRptId = 83; //02 预算
+// let demoRptId = 84; //02 清单
 
 let pagesize = "A4";
 //288: 11-2表(新)
@@ -71,9 +71,9 @@ let userId_Leng = "5c3ffa9aa0a92732f41216e0"; //小冷User Id (养护的)
 // demoPrjId = 618; //PROD:
 // demoPrjId = 2580; //PROD:
 // demoPrjId = 815; //PROD:
-// demoPrjId = 499; //UAT:
+demoPrjId = 3261; //UAT:
 // demoPrjId = 738; //UAT:
-demoPrjId = 670; //UAT: 清单项目
+// demoPrjId = 670; //UAT: 清单项目
 //*/
 let userId_Dft = userId_Leng;
 // userId_Dft = '5c641205950967000d20d35b'; //临时用
@@ -116,7 +116,7 @@ test('测试 - 测试模板啦: ', function (t) {
                     console.log('取完项目数据时间:' + (dt));
                     fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/YangHuCost/tmp/rptTplRawDataObject_测试模板.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
-                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/YangHuCost/tmp/rptTplRawDataAfterCacl_测试模板.jsp");
+                    fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/YangHuCost/tmp/rptTplRawDataAfterCacl_测试模板.jsp");
                     // fsUtil.writeObjToFile(tplData, "D:/GitHome/YangHuCost/tmp/rptTplAssembledData_测试模板.jsp");
                     //it's time to build the report!!!
                     let printCom = JpcEx.createNew();
@@ -136,9 +136,9 @@ test('测试 - 测试模板啦: ', function (t) {
                     if (pageRst) {
                         // fsUtil.writeObjToFile(pageRst, "D:/GitHome/YangHuCost/tmp/testBuiltPageResult_测试模板" + dt.getTime() + ".jsp");
                         // fsUtil.writeObjToFile(pageRst, "D:/GitHome/YangHuCost/tmp/testBuiltPageResult_测试模板.jsp");
-                        // rpt_xl_util.exportExcel(pageRst, pagesize, "local_test_rpt_excel", true, null, null, function(uuidName){
-                        //     console.log("excel uuid: " + uuidName);
-                        // });
+                        rpt_xl_util.exportExcel(pageRst, pagesize, "local_test_rpt_excel", true, null, null, function(uuidName){
+                            console.log("excel uuid: " + uuidName);
+                        });
                         // rpt_pdf_util.export_pdf_file(pageRst, pagesize, 'local_test_rpt_pdf', function(uuidName){
                         //     console.log("pdf uuid: " + uuidName);
                         // });

+ 5 - 4
test/unit/reports/test_summary_multi_prjs.js

@@ -14,14 +14,15 @@ let dbm = require("../../../config/db/db_manager");
 let rpt_cfg = require('./rpt_cfg');
 dbm.connect(process.env.NODE_ENV);
 
-let demoPrjs = [1510, 1511]; //
+let demoPrjs = [2552]; //
 // let demoRptId = 68; //01-2
 let demoRptId = 72; //01-1
 // let demoRptId = 73; //02-2
 let pagesize = "A4";
-let userId_Leng = "5c3ffa9aa0a92732f41216e0"; //小冷User Id (养护的)
+// let userId_Leng = "5c3ffa9aa0a92732f41216e0"; //小冷User Id (养护的)
 // let userId_me = "5b6a60b1c4ba33000dd417c0"; //我的
-let userId_Dft = userId_Leng;
+// let userId_Dft = userId_Leng;
+let userId_Dft = "5c49353e9bda24000b44414e"; //曾沛文的ID
 
 //统一引用models
 fileUtils.getGlobbedFiles('../../../modules/all_models/*.js').forEach(function(modelPath) {
@@ -52,7 +53,7 @@ test('测试 - 测试清单汇总: ', function (t) {
         rptTplFacade.getRptTemplate(demoRptId).then(function(rptTpl) {
             try {
                 let dt = new Date();
-                fsUtil.writeObjToFile(summaryRst, "D:/GitHome/YangHuCost/tmp/多清单汇总表(01_2)原始数据.jsp");
+                // fsUtil.writeObjToFile(summaryRst, "D:/GitHome/YangHuCost/tmp/多清单汇总表(01_2)原始数据.jsp");
                 let rptDataUtil = new rptDataExtractor();
                 rptDataUtil.initialize(rptTpl._doc);
                 let tplData = rptDataUtil.assembleData(summaryRst);

+ 4 - 1
web/building_saas/pm/js/pm_tree.js

@@ -272,7 +272,10 @@ const pmTree = {
                     }
                     that.maxNodeId(node.id());
                     if(parent.childIndex(node) === -1){
-                        if(pre && parent.childIndex(pre) !== -1){
+                        if (!pre) {
+                            parent.children.unshift(node);
+                        }
+                        else if(pre && parent.childIndex(pre) !== -1){
                             parent.children.splice(parent.childIndex(pre) + 1, 0, node);
                         }
                         else if(next && parent.childIndex(next) !== -1){

+ 237 - 278
web/building_saas/report/js/rpt_main.js

@@ -8,6 +8,8 @@ const NEXT_PAGE_OFFSET = 160;
 const FIRST_PAGE_OFFSET = 50;
 const LAST_PAGE_OFFSET = 60;
 
+const WAIT_TIME_EXPORT = 12000;
+
 let fontSuffixMapObj = {"表标题": "title", "列标题": "column", "正文内容": "content", "合计": "summary", "表眉/表脚": "header_footer"};
 
 let rptTplObj = {
@@ -17,6 +19,7 @@ let rptTplObj = {
         if (!me.hasInitialized) {
             zTreeOprObj.getCustomerCfg();
             zTreeOprObj.getReportTemplateTree();
+            zTreeOprObj.selectedPrjIDs = [];
             me.hasInitialized = true;
             let canvas = document.getElementById("rptCanvas");
             canvas.onclick = canvasOprObj.canvasOnClick;
@@ -35,6 +38,7 @@ let zTreeOprObj = {
     defReportPageCfg: null,
     currentPage: 1,
     maxPages: 0,
+    selectedPrjIDs: [],
     countChkedRptTpl: function () {
         let me = zTreeOprObj;
         if (me.treeObj) {
@@ -229,7 +233,7 @@ let zTreeOprObj = {
                 params.rpt_tpl_id = treeNode.refId;
                 params.prj_id = projectObj.project.projectInfo.ID;
                 params.custCfg = me.reportPageCfg;
-                me.requestReport(params);
+                me.requestNormalReport(params);
             }
             me.countChkedRptTpl();
         }
@@ -253,13 +257,70 @@ let zTreeOprObj = {
     },
     changeCfg: function() {
         let me = zTreeOprObj;
-        let params = {};
-        params.pageSize = rptControlObj.getCurrentPageSize();
-        params.orientation = rptControlObj.getCurrentOrientation();
-        params.rpt_tpl_id = me.currentNode.refId;
-        params.prj_id = projectObj.project.projectInfo.ID;
-        params.custCfg = me.reportPageCfg;
-        me.requestReport(params);
+
+        if (me.currentNode) {
+            if (me.currentNode.hasOwnProperty('flags') && me.currentNode.flags.hasOwnProperty('reportType') && me.currentNode['flags']['reportType'] !== 'NA') {
+                let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
+                if (me.currentNode['flags']['reportType'] === 'billSummary') {
+                    refBillSumPrjsIds.push(me.currentNode.refId);
+                } else if (me.currentNode['flags']['reportType'] === 'gljSummary') {
+                    refGljSumPrjsIds.push(me.currentNode.refId);
+                }
+                if (zTreeOprObj.selectedPrjIDs.length > 0) {
+                    let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
+                    params.pageSize = rptControlObj.getCurrentPageSize();
+                    params.orientation = rptControlObj.getCurrentOrientation();
+                    params.rpt_ids = refRptTplIds;
+                    params.rpt_bill_tpl_ids = refBillSumPrjsIds;
+                    params.rpt_glj_tpl_ids = refGljSumPrjsIds;
+                    params.custCfg = me.reportPageCfg;
+                    CommonAjax.postEx("report_api/getMultiReports", params, 10000, true,
+                        function(result){
+                            hintBox.unWaitBox();
+                            let pageRst = result[0];
+                            let canvas = document.getElementById("rptCanvas");
+                            if (pageRst && pageRst.items && pageRst.items.length > 0) {
+                                me.resetAfter(pageRst);
+                                me.currentRptPageRst = pageRst;
+                                me.maxPages = pageRst.items.length;
+                                me.currentPage = 1;
+                                me.displayPageValue();
+                                let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
+                                canvas.width = size[0] + 20;
+                                if (size[1] > size[0]) {
+                                    canvas.height = size[1] + 100;
+                                } else {
+                                    canvas.height = size[1] + 50;
+                                }
+                                me.showPage(1, canvas);
+                            } else {
+                                //返回了无数据表
+                                JpcCanvasOutput.cleanCanvas(canvas);
+                                JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
+                            }
+                        }, function(err){
+                            hintBox.unWaitBox();
+                        }, function(ex){
+                            hintBox.unWaitBox();
+                        }
+                    );
+                } else {
+                    if (me.currentNode['flags']['reportType'] === 'billSummary') {
+                        me.requestPrjFolderForBillsSummary();
+                    } else if (me.currentNode['flags']['reportType'] === 'gljSummary') {
+                        me.requestPrjFolderForGljSummary();
+                    }
+                }
+            } else {
+                let params = {};
+                params.pageSize = rptControlObj.getCurrentPageSize();
+                params.orientation = rptControlObj.getCurrentOrientation();
+                params.rpt_tpl_id = me.currentNode.refId;
+                params.prj_id = projectObj.project.projectInfo.ID;
+                params.custCfg = me.reportPageCfg;
+                me.requestNormalReport(params);
+            }
+        }
     },
     resetAfter: function (pageRst) {
         let size = pageRst[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
@@ -271,7 +332,7 @@ let zTreeOprObj = {
             document.getElementById("hrefRptOrientation").innerHTML = "横向";
         }
     },
-    requestReport: function (params) {
+    requestNormalReport: function (params) {
         let me = zTreeOprObj;
         hintBox.waitBox();
         CommonAjax.postEx("report_api/getReport", params, 60000, true,
@@ -367,8 +428,10 @@ let zTreeOprObj = {
             params.rpt_tpl_id = me.currentNode.refId;
             params.custCfg = me.reportPageCfg;
             params.prjIds = [];
+            me.selectedPrjIDs = [];
             for (let node of nodes) {
                 params.prjIds.push(node.ID);
+                me.selectedPrjIDs.push(node.ID);
             }
             CommonAjax.postEx("report_api/getBillsSummaryReport", params, 26000, true,
                 function(result){
@@ -412,8 +475,10 @@ let zTreeOprObj = {
             params.rpt_tpl_id = me.currentNode.refId;
             params.custCfg = me.reportPageCfg;
             params.prjIds = [];
+            zTreeOprObj.selectedPrjIDs = [];
             for (let node of nodes) {
                 params.prjIds.push(node.ID);
+                zTreeOprObj.selectedPrjIDs.push(node.ID);
             }
             CommonAjax.postEx("report_api/getGljSummaryReport", params, 26000, true,
                 function(result){
@@ -448,41 +513,15 @@ let zTreeOprObj = {
         }
     },
     requestSumAndNormalRptForPDF: function () {
-        let me = rptControlObj;
         let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
         let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
-        for (let node of zTreeOprObj.checkedRptTplNodes) {
-            if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
-                if (node['flags']['reportType'] === 'billSummary') {
-                    refBillSumPrjsIds.push(node.refId);
-                    bill_rpt_names.push(node.name);
-                } else if (node['flags']['reportType'] === 'gljSummary') {
-                    refGljSumPrjsIds.push(node.refId);
-                    glj_rpt_names.push(node.name);
-                }
-            } else {
-                refRptTplIds.push(node.refId);
-                rpt_names.push(node.name);
-            }
-        }
-        let nodes = zTreeOprObj.prjFolderTreeObj.getCheckedNodes(true);
-        let params = {};
-        params.prj_id = projectObj.project.projectInfo.ID;
-        params.rpt_ids = refRptTplIds;
-        params.rpt_bill_tpl_ids = refBillSumPrjsIds;
-        params.rpt_glj_tpl_ids = refGljSumPrjsIds;
-        params.prjIds = [];
-        for (let node of nodes) {
-            params.prjIds.push(node.ID);
-        }
+        rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
+        let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
         params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
         params.rpt_names = rpt_names;
         params.isOneSheet = true;
-        params.pageSize = me.getCurrentPageSize();
-        params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-        params.custCfg = zTreeOprObj.reportPageCfg;
-        params.option = "normal";
-        CommonAjax.postEx("report_api/createPdfFiles", params, 120000, true, function(result){
+
+        CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
                 if (result) {
                     let uuIdUrls = [];
                     for (let uuIdObj of result) {
@@ -497,41 +536,15 @@ let zTreeOprObj = {
         );
     },
     requestSumAndNormalRptForMultiExcel: function () {
-        let me = rptControlObj;
         let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
         let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
-        for (let node of zTreeOprObj.checkedRptTplNodes) {
-            if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
-                if (node['flags']['reportType'] === 'billSummary') {
-                    refBillSumPrjsIds.push(node.refId);
-                    bill_rpt_names.push(node.name);
-                } else if (node['flags']['reportType'] === 'gljSummary') {
-                    refGljSumPrjsIds.push(node.refId);
-                    glj_rpt_names.push(node.name);
-                }
-            } else {
-                refRptTplIds.push(node.refId);
-                rpt_names.push(node.name);
-            }
-        }
-        let nodes = zTreeOprObj.prjFolderTreeObj.getCheckedNodes(true);
-        let params = {};
-        params.prj_id = projectObj.project.projectInfo.ID;
-        params.rpt_ids = refRptTplIds;
-        params.rpt_bill_tpl_ids = refBillSumPrjsIds;
-        params.rpt_glj_tpl_ids = refGljSumPrjsIds;
-        params.prjIds = [];
-        for (let node of nodes) {
-            params.prjIds.push(node.ID);
-        }
+        rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
+        let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
         params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
         params.rpt_names = rpt_names;
         params.isOneSheet = true;
-        params.pageSize = me.getCurrentPageSize();
-        params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-        params.custCfg = zTreeOprObj.reportPageCfg;
-        params.option = "normal";
-        CommonAjax.postEx("report_api/createExcelFiles", params, 120000, true, function(result){
+
+        CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
                 if (result) {
                     let uuIdUrls = [];
                     for (let uuIdObj of result) {
@@ -546,36 +559,13 @@ let zTreeOprObj = {
         );
     },
     requestSumAndNormalRptForAllInOneExcel: function () {
-        let me = rptControlObj;
         let orgRptName = projectObj.project.projectInfo.name;
         let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
-        for (let node of zTreeOprObj.checkedRptTplNodes) {
-            if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
-                if (node['flags']['reportType'] === 'billSummary') {
-                    refBillSumPrjsIds.push(node.refId);
-                } else if (node['flags']['reportType'] === 'gljSummary') {
-                    refGljSumPrjsIds.push(node.refId);
-                }
-            } else {
-                refRptTplIds.push(node.refId);
-            }
-        }
-        let nodes = zTreeOprObj.prjFolderTreeObj.getCheckedNodes(true);
-        let params = {};
-        params.prj_id = projectObj.project.projectInfo.ID;
-        params.rpt_ids = refRptTplIds;
-        params.rpt_bill_tpl_ids = refBillSumPrjsIds;
-        params.rpt_glj_tpl_ids = refGljSumPrjsIds;
-        params.prjIds = [];
-        for (let node of nodes) {
-            params.prjIds.push(node.ID);
-        }
+        rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, null, null, null);
+        let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
         params.rptName = orgRptName;
-        params.pageSize = me.getCurrentPageSize();
-        params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-        params.custCfg = zTreeOprObj.reportPageCfg;
-        params.option = "normal";
-        CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, 120000, true, function(result){
+
+        CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
                 if (result) {
                     let uuIdUrls = [];
                     let uuIdUrl =  "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
@@ -682,68 +672,55 @@ let rptControlObj = {
             //other types if needed.
         }
     },
-    getAllInOneBook_bk: function () {
-        if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let me = rptControlObj;
-            let orgRptName = projectObj.project.projectInfo.name;
-            let refRptTplIds = [];
-            for (let node of zTreeOprObj.checkedRptTplNodes) {
+    getTplIdsCommon: function (refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names) {
+        for (let node of zTreeOprObj.checkedRptTplNodes) {
+            if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
+                if (node['flags']['reportType'] === 'billSummary') {
+                    refBillSumPrjsIds.push(node.refId);
+                    if (bill_rpt_names) bill_rpt_names.push(node.name);
+                } else if (node['flags']['reportType'] === 'gljSummary') {
+                    refGljSumPrjsIds.push(node.refId);
+                    if (glj_rpt_names) glj_rpt_names.push(node.name);
+                }
+            } else {
                 refRptTplIds.push(node.refId);
+                if (rpt_names) rpt_names.push(node.name);
             }
-            let params = {};
-            params.prj_id = projectObj.project.projectInfo.ID;
-            params.rpt_ids = refRptTplIds;
-            params.rptName = orgRptName;
-            params.pageSize = me.getCurrentPageSize();
-            params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-            params.custCfg = zTreeOprObj.reportPageCfg;
-            params.option = "normal";
-            CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, 120000, true, function(result){
-                    if (result) {
-                        let uuIdUrls = [];
-                        let uuIdUrl =  "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
-                        uuIdUrls.push(uuIdUrl);
-                        downloadReport(uuIdUrls);
-                    } else {
-                        //
-                    }
-                }, null, null
-            );
         }
     },
+    creatCommonExportParam: function (refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds) {
+        let nodes = (zTreeOprObj.prjFolderTreeObj === null)?[]:zTreeOprObj.prjFolderTreeObj.getCheckedNodes(true);
+        let rst = {};
+        rst.prj_id = projectObj.project.projectInfo.ID;
+        rst.rpt_ids = refRptTplIds;
+        rst.rpt_bill_tpl_ids = refBillSumPrjsIds;
+        rst.rpt_glj_tpl_ids = refGljSumPrjsIds;
+        rst.prjIds = [];
+        zTreeOprObj.selectedPrjIDs = [];
+        for (let node of nodes) {
+            rst.prjIds.push(node.ID);
+            zTreeOprObj.selectedPrjIDs.push(node.ID);
+        }
+        // rst.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
+        // rst.rpt_names = rpt_names;
+        // rst.isOneSheet = true;
+        rst.pageSize = rptControlObj.getCurrentPageSize();
+        rst.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:rptControlObj.getCurrentOrientation());
+        rst.custCfg = zTreeOprObj.reportPageCfg;
+        rst.option = "normal";
+        return rst;
+    },
     getAllInOneBook: function () {
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
             let me = rptControlObj;
             let orgRptName = projectObj.project.projectInfo.name;
             let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
-            for (let node of zTreeOprObj.checkedRptTplNodes) {
-                if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
-                    if (node['flags']['reportType'] === 'billSummary') {
-                        refBillSumPrjsIds.push(node.refId);
-                    } else if (node['flags']['reportType'] === 'gljSummary') {
-                        refGljSumPrjsIds.push(node.refId);
-                    }
-                } else {
-                    refRptTplIds.push(node.refId);
-                }
-            }
-            if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
-                $("#divReqBillSummary")[0].style.display = "none";
-                $("#divReqGljSummary")[0].style.display = "none";
-                $("#divReqCommonSummaryExcel")[0].style.display = "";
-                $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
-                $("#divReqCommonSummaryPDF")[0].style.display = "none";
-                zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
-            } else if (refRptTplIds.length > 0) {
-                let params = {};
-                params.prj_id = projectObj.project.projectInfo.ID;
-                params.rpt_ids = refRptTplIds;
+            rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
+            if (zTreeOprObj.selectedPrjIDs.length > 0 && (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0)) {
+                let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
                 params.rptName = orgRptName;
-                params.pageSize = me.getCurrentPageSize();
-                params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-                params.custCfg = zTreeOprObj.reportPageCfg;
-                params.option = "normal";
-                CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, 120000, true, function(result){
+
+                CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
                         if (result) {
                             let uuIdUrls = [];
                             let uuIdUrl =  "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
@@ -754,76 +731,52 @@ let rptControlObj = {
                         }
                     }, null, null
                 );
+            } else {
+                if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
+                    $("#divReqBillSummary")[0].style.display = "none";
+                    $("#divReqGljSummary")[0].style.display = "none";
+                    $("#divReqCommonSummaryExcel")[0].style.display = "";
+                    $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
+                    $("#divReqCommonSummaryPDF")[0].style.display = "none";
+                    zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
+                } else if (refRptTplIds.length > 0) {
+                    let params = {};
+                    params.prj_id = projectObj.project.projectInfo.ID;
+                    params.rpt_ids = refRptTplIds;
+                    params.rptName = orgRptName;
+                    params.pageSize = me.getCurrentPageSize();
+                    params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
+                    params.custCfg = zTreeOprObj.reportPageCfg;
+                    params.option = "normal";
+                    CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
+                            if (result) {
+                                let uuIdUrls = [];
+                                let uuIdUrl =  "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
+                                uuIdUrls.push(uuIdUrl);
+                                downloadReport(uuIdUrls);
+                            } else {
+                                //
+                            }
+                        }, null, null
+                    );
+                }
             }
         }
     },
-    getAllIndividualExcelBook_bk: function () {
-        let me = rptControlObj;
-        if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let rpt_ids = [], rpt_names = [];
-            for (let tplNode of zTreeOprObj.checkedRptTplNodes) {
-                rpt_ids.push(tplNode.refId);
-                rpt_names.push(tplNode.name)
-            }
-            let params = {};
-            params.prj_id = projectObj.project.projectInfo.ID;
-            params.rpt_ids = rpt_ids;
-            params.rpt_names = rpt_names;
-            params.pageSize = me.getCurrentPageSize();
-            params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-            params.isOneSheet = true;
-            params.custCfg = zTreeOprObj.reportPageCfg;
-            params.option = "normal";
-            CommonAjax.postEx("report_api/createExcelFiles", params, 120000, true, function(result){
-                    if (result) {
-                        let uuIdUrls = [];
-                        for (let uuIdObj of result) {
-                            let uuIdUrl =  "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
-                            uuIdUrls.push(uuIdUrl);
-                        }
-                        downloadReport(uuIdUrls);
-                    } else {
-                        //
-                    }
-                }, null, null
-            );
-        }
-    },
     getAllIndividualExcelBook: function () {
         let me = rptControlObj;
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [], rpt_names = [];
-            for (let node of zTreeOprObj.checkedRptTplNodes) {
-                if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
-                    if (node['flags']['reportType'] === 'billSummary') {
-                        refBillSumPrjsIds.push(node.refId);
-                    } else if (node['flags']['reportType'] === 'gljSummary') {
-                        refGljSumPrjsIds.push(node.refId);
-                    }
-                } else {
-                    refRptTplIds.push(node.refId);
-                    rpt_names.push(node.name);
-                }
-            }
-
-            if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
-                $("#divReqBillSummary")[0].style.display = "none";
-                $("#divReqGljSummary")[0].style.display = "none";
-                $("#divReqCommonSummaryExcel")[0].style.display = "none";
-                $("#divReqCommonSummaryMultiExcel")[0].style.display = "";
-                $("#divReqCommonSummaryPDF")[0].style.display = "none";
-                zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
-            } else if (refRptTplIds.length > 0) {
-                let params = {};
+            let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
+            let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
+            rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
+            if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
+                let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
                 params.prj_id = projectObj.project.projectInfo.ID;
-                params.rpt_ids = refRptTplIds;
+                params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
                 params.rpt_names = rpt_names;
-                params.pageSize = me.getCurrentPageSize();
-                params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
                 params.isOneSheet = true;
-                params.custCfg = zTreeOprObj.reportPageCfg;
-                params.option = "normal";
-                CommonAjax.postEx("report_api/createExcelFiles", params, 120000, true, function(result){
+                params.rptName = projectObj.project.projectInfo.name;
+                CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
                         if (result) {
                             let uuIdUrls = [];
                             for (let uuIdObj of result) {
@@ -836,6 +789,38 @@ let rptControlObj = {
                         }
                     }, null, null
                 );
+            } else {
+                if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
+                    $("#divReqBillSummary")[0].style.display = "none";
+                    $("#divReqGljSummary")[0].style.display = "none";
+                    $("#divReqCommonSummaryExcel")[0].style.display = "none";
+                    $("#divReqCommonSummaryMultiExcel")[0].style.display = "";
+                    $("#divReqCommonSummaryPDF")[0].style.display = "none";
+                    zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
+                } else if (refRptTplIds.length > 0) {
+                    let params = {};
+                    params.prj_id = projectObj.project.projectInfo.ID;
+                    params.rpt_ids = refRptTplIds;
+                    params.rpt_names = rpt_names;
+                    params.pageSize = me.getCurrentPageSize();
+                    params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
+                    params.isOneSheet = true;
+                    params.custCfg = zTreeOprObj.reportPageCfg;
+                    params.option = "normal";
+                    CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
+                            if (result) {
+                                let uuIdUrls = [];
+                                for (let uuIdObj of result) {
+                                    let uuIdUrl =  "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
+                                    uuIdUrls.push(uuIdUrl);
+                                }
+                                downloadReport(uuIdUrls);
+                            } else {
+                                //
+                            }
+                        }, null, null
+                    );
+                }
             }
         }
     },
@@ -857,71 +842,23 @@ let rptControlObj = {
             me.getAllIndividualExcelBook();
         }
     },
-    getPDF_bk: function() {
-        let me = rptControlObj;
-        if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let rpt_ids = [], rpt_names = [];
-            for (let tplNode of zTreeOprObj.checkedRptTplNodes) {
-                rpt_ids.push(tplNode.refId);
-                rpt_names.push(tplNode.name)
-            }
-            let params = {};
-            params.prj_id = projectObj.project.projectInfo.ID;
-            params.rpt_ids = rpt_ids;
-            params.rpt_names = rpt_names;
-            params.pageSize = me.getCurrentPageSize();
-            params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-            params.custCfg = zTreeOprObj.reportPageCfg;
-            params.option = "normal";
-            CommonAjax.postEx("report_api/createPdfFiles", params, 120000, true, function(result){
-                    if (result) {
-                        let uuIdUrls = [];
-                        for (let uuIdObj of result) {
-                            let uuIdUrl =  "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
-                            uuIdUrls.push(uuIdUrl);
-                        }
-                        downloadReport(uuIdUrls);
-                    } else {
-                        //
-                    }
-                }, null, null
-            );
-        }
-    },
     getPDF: function () {
         let me = rptControlObj;
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [], rpt_names = [];
-            for (let node of zTreeOprObj.checkedRptTplNodes) {
-                if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
-                    if (node['flags']['reportType'] === 'billSummary') {
-                        refBillSumPrjsIds.push(node.refId);
-                    } else if (node['flags']['reportType'] === 'gljSummary') {
-                        refGljSumPrjsIds.push(node.refId);
-                    }
-                } else {
-                    refRptTplIds.push(node.refId);
-                    rpt_names.push(node.name);
-                }
-            }
-
-            if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
-                $("#divReqBillSummary")[0].style.display = "none";
-                $("#divReqGljSummary")[0].style.display = "none";
-                $("#divReqCommonSummaryExcel")[0].style.display = "none";
-                $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
-                $("#divReqCommonSummaryPDF")[0].style.display = "";
-                zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
-            } else if (refRptTplIds.length > 0) {
-                let params = {};
+            let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
+            let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
+            rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
+            if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
+                let params = rptControlObj.creatCommonExportParam();
                 params.prj_id = projectObj.project.projectInfo.ID;
+                params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
                 params.rpt_ids = refRptTplIds;
+                params.rpt_bill_tpl_ids = refBillSumPrjsIds;
+                params.rpt_glj_tpl_ids = refGljSumPrjsIds;
                 params.rpt_names = rpt_names;
-                params.pageSize = me.getCurrentPageSize();
-                params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-                params.custCfg = zTreeOprObj.reportPageCfg;
-                params.option = "normal";
-                CommonAjax.postEx("report_api/createPdfFiles", params, 120000, true, function(result){
+                params.isOneSheet = true;
+                params.rptName = projectObj.project.projectInfo.name;
+                CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
                         if (result) {
                             let uuIdUrls = [];
                             for (let uuIdObj of result) {
@@ -934,6 +871,37 @@ let rptControlObj = {
                         }
                     }, null, null
                 );
+            } else {
+                if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
+                    $("#divReqBillSummary")[0].style.display = "none";
+                    $("#divReqGljSummary")[0].style.display = "none";
+                    $("#divReqCommonSummaryExcel")[0].style.display = "none";
+                    $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
+                    $("#divReqCommonSummaryPDF")[0].style.display = "";
+                    zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
+                } else if (refRptTplIds.length > 0) {
+                    let params = {};
+                    params.prj_id = projectObj.project.projectInfo.ID;
+                    params.rpt_ids = refRptTplIds;
+                    params.rpt_names = rpt_names;
+                    params.pageSize = me.getCurrentPageSize();
+                    params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
+                    params.custCfg = zTreeOprObj.reportPageCfg;
+                    params.option = "normal";
+                    CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
+                            if (result) {
+                                let uuIdUrls = [];
+                                for (let uuIdObj of result) {
+                                    let uuIdUrl =  "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
+                                    uuIdUrls.push(uuIdUrl);
+                                }
+                                downloadReport(uuIdUrls);
+                            } else {
+                                //
+                            }
+                        }, null, null
+                    );
+                }
             }
         }
     },
@@ -1032,16 +1000,7 @@ let rptControlObj = {
         );
     },
     confirmCfgChange: function() {
-        let treeNode = zTreeOprObj.currentNode;
-        if (treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
-            let params = {};
-            params.pageSize = rptControlObj.getCurrentPageSize();
-            params.rpt_tpl_id = treeNode.refId;
-            params.prj_id = projectObj.project.projectInfo.ID;
-            params.custCfg = zTreeOprObj.reportPageCfg;
-            zTreeOprObj.requestReport(params);
-        }
-
+        zTreeOprObj.changeCfg();
     }
 };
 

+ 6 - 10
web/building_saas/report/js/rpt_print.js

@@ -5,16 +5,12 @@
 let rptPrintHelper = {
     preview: function () {
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let rptIds = [];
-            let params = {};
-            params.pageSize = rptControlObj.getCurrentPageSize();
-            params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:rptControlObj.getCurrentOrientation());
-            params.custCfg = zTreeOprObj.reportPageCfg;
-            params.prj_id = projectObj.project.projectInfo.ID;
-            for (let tplNode of zTreeOprObj.checkedRptTplNodes) {
-                rptIds.push(tplNode.refId);
-            }
-            params.rpt_ids = rptIds.join(",");
+            let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
+            rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, null, null, null);
+            let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
+            params.rpt_ids = refRptTplIds;
+            params.rpt_bill_tpl_ids = refBillSumPrjsIds;
+            params.rpt_glj_tpl_ids = refGljSumPrjsIds;
             CommonAjax.postEx("report_api/getMultiReports", params, 10000, true,
                 function(result){
                     //sessionStorage.currentPageData = JSON.stringify(zTreeOprObj.currentRptPageRst);