瀏覽代碼

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

Chenshilong 7 年之前
父節點
當前提交
75d99914b5

+ 3 - 0
config/gulpConfig.js

@@ -87,7 +87,10 @@ module.exports = {
         'web/building_saas/main/js/views/project_info.js',
         'web/building_saas/main/js/views/project_view.js',
         'web/building_saas/main/js/views/options_view.js',
+        'web/building_saas/main/js/views/project_property_bills_quantity_decimal.js',
         'web/building_saas/main/js/views/project_property_decimal_view.js',
+        'web/building_saas/main/js/views/project_property_basicInfo.js',
+        'web/building_saas/main/js/views/project_property_projFeature.js',
         'web/building_saas/main/js/main_ajax.js',
         'web/building_saas/main/js/main.js',
         'web/building_saas/main/js/controllers/project_controller.js',

+ 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;
                     }
                     //控制阀值,超过阀值则强制退出,防止死循环

+ 15 - 6
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>');
             }
@@ -335,7 +341,7 @@ function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage
 function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj){
     let rst = [], xPos = [], yPos = [], yMultiPos = [], headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
     let cacheBorderCell = {};
-    let currentPageMergePos = null;
+    let currentPageMergePos = null; //在 JV.PAGING_OPTION_INFINITY 场合应用
     let private_pre_analyze_pos = function(){
         let cell, pos;
         let self_analyze_sheet_pos = function (theShtData, theXPos, theYPos) {
@@ -481,7 +487,10 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj){
         return rst;
     };
     let private_chkAndGetMergeLine = function(cell, sheetBorder, borderStr, needFurtherChk) {
-        let rst = 0, mergeBorder = pageData[JV.BAND_PROP_MERGE_BAND];
+        let rst = 0,
+            mergeBorder = (sheetData[JV.PROP_PAGE_MERGE_BORDER])?sheetData[JV.PROP_PAGE_MERGE_BORDER]:pageData[JV.BAND_PROP_MERGE_BAND],
+            mergeBand = pageData[JV.BAND_PROP_MERGE_BAND]
+        ;
         if (sheetBorder[borderStr] && sheetBorder[borderStr][JV.PROP_LINE_WEIGHT] !== undefined) {
             rst = sheetBorder[borderStr][JV.PROP_LINE_WEIGHT];
         }
@@ -494,7 +503,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj){
                     for (let i = 0; i < topSide.length; i++) {
                         if (cell[JV.PROP_AREA][JV.PROP_TOP] >= topSide[i]) {
                             if (cell[JV.PROP_AREA][JV.PROP_BOTTOM] <= bottomSide[i]) {
-                                let destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBorder[JV.PROP_STYLE][JV.PROP_ID]];
+                                let destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBand[JV.PROP_STYLE][JV.PROP_ID]];
                                 rst = destStyle[borderStr][JV.PROP_LINE_WEIGHT];
                                 break;
                             }
@@ -503,13 +512,13 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj){
                         }
                     }
                 } else {
-                    let destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBorder[JV.PROP_STYLE][JV.PROP_ID]];
+                    let destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBand[JV.PROP_STYLE][JV.PROP_ID]];
                     rst = destStyle[borderStr][JV.PROP_LINE_WEIGHT];
                 }
             }
         } else {
             if (cell[JV.PROP_AREA][borderStr] === mergeBorder[borderStr]) {
-                let destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBorder[JV.PROP_STYLE][JV.PROP_ID]];
+                let destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBand[JV.PROP_STYLE][JV.PROP_ID]];
                 if (needFurtherChk) {
                     if (cell[JV.PROP_AREA][JV.PROP_TOP] >= mergeBorder[JV.PROP_TOP] &&
                         cell[JV.PROP_AREA][JV.PROP_BOTTOM] <= mergeBorder[JV.PROP_BOTTOM]) {

二進制
web/building_saas/img/FirstPageSimple.cur


二進制
web/building_saas/img/LastPageSimple.cur


二進制
web/building_saas/img/NextPageSimple.cur


二進制
web/building_saas/img/PreviousPageSimple.cur


+ 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>

+ 32 - 12
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;
@@ -85,16 +87,16 @@ let zTreeOprObj = {
                         } else {
                             canvas.height = size[1] + 50;
                         }
-                        me.showPage(0, canvas);
+                        me.showPage(1, canvas);
                     }
                 }, null, null
             );
         }
     },
-    showPage: function (pageStep, canvas) {
+    showPage: function (pageNum, canvas) {
         let me = zTreeOprObj;
-        if (me.currentPage + pageStep >= 1 && me.currentPage + pageStep <= me.maxPages) {
-            me.currentPage = me.currentPage + pageStep;
+        if (pageNum >= 1 && pageNum <= me.maxPages) {
+            me.currentPage = pageNum;
             JpcCanvasOutput.cleanCanvas(canvas);
             JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
             JpcCanvasOutput.drawToCanvas(me.currentRptPageRst, canvas, me.currentPage);
@@ -104,12 +106,14 @@ let zTreeOprObj = {
 
 let canvasOprObj = {
     canvasOnMouseMove: function (event) {
-        let x = event.offsetX - JpcCanvasOutput.offsetX,
-            canvas = event.originalTarget
-        ;
-        if (x < 200) {
+        let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
+        if (x < 80) {
+            canvas.style.cursor = "url(/web/building_saas/img/FirstPageSimple.cur), auto";
+        } else if (x < 200) {
             // canvas.style.cursor = "e-resize";
             canvas.style.cursor = "url(/web/building_saas/img/PreviousPageSimple.cur), auto";
+        } else if ((canvas.width - x) < 80) {
+            canvas.style.cursor = "url(/web/building_saas/img/LastPageSimple.cur), auto";
         } else if ((canvas.width - x) < 200) {
             // canvas.style.cursor = "w-resize";
             canvas.style.cursor = "url(/web/building_saas/img/NextPageSimple.cur), auto";
@@ -121,10 +125,14 @@ let canvasOprObj = {
         let x = event.offsetX - JpcCanvasOutput.offsetX,
             //y = event.offsetY - JpcCanvasOutput.offsetY,
             canvas = event.originalTarget;
-        if (x < 300) {
-            zTreeOprObj.showPage(-1, canvas);
-        } else if ((canvas.width - x) < 300) {
+        if (x < 80) {
             zTreeOprObj.showPage(1, canvas);
+        } else if (x < 200) {
+            zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
+        } else if ((canvas.width - x) < 80) {
+            zTreeOprObj.showPage(zTreeOprObj.maxPages, canvas);
+        } else if ((canvas.width - x) < 200) {
+            zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
         }
     }
 };
@@ -140,7 +148,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方法跳转,否则下载不成功
+        }
     }
 };