Browse Source

UI excel output

TonyKang 7 years ago
parent
commit
c95eb336c1

+ 28 - 0
modules/reports/controllers/rpt_controller.js

@@ -115,6 +115,7 @@ module.exports = {
             prj_id = params.prj_id,
             user_id = params.user_id,
             pageSize = params.pageSize;
+        // req.session.sessionUser.ssoId
         getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, null, function (err, pageRst) {
             callback(req, res, err, pageRst);
         });
@@ -128,6 +129,33 @@ module.exports = {
             callback(req, res, err, pageRst);
         })
     },
+    getExcel: function(req, res) {
+        let prj_id = req.params.prj_id,
+            rpt_id = req.params.rpt_id,
+            pageSize = req.params.size,
+            rptName = req.params.rptName,
+            isOneSheet = req.params.isOneSheet,
+            option = req.params.option;
+        let user_id = req.session.sessionUser.ssoId;
+        let dftOption = option||JV.PAGING_OPTION_NORMAL;
+        getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, dftOption, function(err, pageRst){
+            try {
+                rpt_xl_util.exportExcel(pageRst, pageSize, rptName, isOneSheet, null, function(newName){
+                    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
+                    res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
+                    let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + newName + '.xlsx');
+                    filestream.on('data', function(chunk) {
+                        res.write(chunk);
+                    });
+                    filestream.on('end', function() {
+                        res.end();
+                    });
+                });
+            } catch (e) {
+                console.log(e);
+            }
+        })
+    },
     getTestExcel: function(req, res) {
         let rpt_id = req.params.id,
             pageSize = req.params.size,

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

@@ -25,7 +25,7 @@ module.exports =function (app) {
     rptRouter.get('/getTestPDF/:id/:size/:rptName', reportController.getTestPDF);
     //now is the real:
     rptRouter.post('/getReport', reportController.getReportAllPages);
-    // rptRouter.get('/getExcel/:id/:size/:rptName/:isOneSheet/:option', reportController.getExcel);
+    rptRouter.get('/getExcel/:prj_id/:rpt_id/:size/:rptName/:isOneSheet/:option', reportController.getExcel);
     // rptRouter.get('/getExcelInOneBook/:ids/:size/:rptName/:option', reportController.getExcelInOneBook);
     // rptRouter.get('/getPDF/:id/:size/:rptName', reportController.getPDF);
 

+ 2 - 1
modules/reports/rpt_component/jpc_flow_tab.js

@@ -370,7 +370,8 @@ JpcFlowTabSrv.prototype.createNew = function(){
                         }
                     }
                     //检测是否可退出
-                    if (currentRecAmt >= ttlSegRecAmt) {
+                    if ((currentRecAmt >= ttlSegRecAmt) && (pageIdx % me.multiCols === 0)) {
+                        //备注:这里必须得考虑多栏的情况,否则会造成pageStatus出界的问题
                         break;
                     }
                     //控制阀值,超过阀值则强制退出,防止死循环

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

@@ -273,7 +273,13 @@ function writeSharedString(sharedStrList){
         for (let i = 0; i < sharedStrList.length; i++) {
             //rst.push('<si><t>' + sharedStrList[i] + '</t></si>');
             if (typeof sharedStrList[i] === 'string') {
-                rst.push('<si><t>' + sharedStrList[i].replace('|','\r\n') + '</t></si>');
+                if (sharedStrList[i].indexOf('|') >= 0) {
+                    //rst.push('<si><t>' + sharedStrList[i].split('|').join('\r\n') + '</t></si>');
+                    rst.push('<si><t>' + sharedStrList[i].split('|').join('\n') + '</t></si>');
+                } else {
+                    rst.push('<si><t>' + sharedStrList[i] + '</t></si>');
+                }
+                // rst.push('<si><t>' + sharedStrList[i].replace('|','\r\n') + '</t></si>');
             } else {
                 rst.push('<si><t>' + sharedStrList[i] + '</t></si>');
             }

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

@@ -16,7 +16,7 @@
                 <div class="print-toolsbar">
                     <div class="panel">
                         <div class="panel-body">
-                            <button class="btn btn-secondary btn-sm" type="button">
+                            <button class="btn btn-secondary btn-sm" type="button" onclick="rptHeaderObj.getExcel();">
                                 <i class="fa fa-print"></i><br>
                                 打印 <span id="checkCount" class="badge badge-primary">5</span>
                             </button>

+ 15 - 1
web/building_saas/report/js/rpt_main.js

@@ -72,7 +72,9 @@ let zTreeOprObj = {
             params.pageSize = pageSize;
             params.rpt_tpl_id = treeNode.refId;
             params.prj_id = projectInfoObj.projectInfo.ID;
-            CommonAjax.postEx("report_api/getReport", params, 5000, true, function(result){
+            me.currentNode = treeNode;
+            CommonAjax.postEx("report_api/getReport", params, 5000, true,
+                function(result){
                     let pageRst = result;
                     if (pageRst) {
                         me.currentRptPageRst = pageRst;
@@ -140,7 +142,19 @@ let rptHeaderObj = {
         //
         return rst;
     },
+    getCurrentReportOption: function() {
+        //
+    },
     getExcel: function() {
+        let me = rptHeaderObj;
         //目前只支持当前打开报表
+        //zTreeOprObj.currentRptPageRst
+        if (zTreeOprObj.currentNode && zTreeOprObj.currentNode.refId) {
+            let orgRptName = zTreeOprObj.currentNode.name;
+            orgRptName = orgRptName.replace('【', '').replace('】','').replace('-','_');
+            let url =  "/report_api/getExcel/" + projectInfoObj.projectInfo.ID + "/" + zTreeOprObj.currentNode.refId + "/" +
+                me.getCurrentPageSize() + "/" + orgRptName + "/" + false + "/" + 'normal';
+            window.location = url;//这里不能使用get方法跳转,否则下载不成功
+        }
     }
 };