浏览代码

流水横向合并的一个排序问题 + 01-2表UI交互(ing...)

TonyKang 6 年之前
父节点
当前提交
cc43e216af

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

@@ -892,8 +892,10 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 }
             }
             if (removeCellIds.length > 0) {
-                //这次真的要排序了
-                removeCellIds.sort(); //默认方式即可
+                //排序,保证一定的顺序,不能用默认的方式(默认方式是针对字符串的简单排序)
+                removeCellIds.sort(function (idx1, idx2) {
+                    return idx1 - idx2;
+                });
                 for (let idx = removeCellIds.length - 1; idx >= 0; idx--) {
                     rstPageCells.splice(removeCellIds[idx], 1);
                 }

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

@@ -36,7 +36,7 @@ let demoPrjId = - 1;
 // let demoRptId = 20; //01
 // let demoRptId = 23; //04 综合费率表
 
-let demoRptId = 56; //24
+// let demoRptId = 56; //24
 // let demoRptId = 36; //5.1
 // let demoRptId = 49; //5.5
 // let demoRptId = 66; //5.4
@@ -44,6 +44,7 @@ let demoRptId = 56; //24
 // let demoRptId = 31; //21-1
 // let demoRptId = 37; //5.2.1 计日工劳务
 // let demoRptId = 68; //01-2
+let demoRptId = 71; //21-2
 
 let pagesize = "A4";
 //288: 11-2表(新)
@@ -61,7 +62,7 @@ let userId_Leng = "5c3ffa9aa0a92732f41216e0"; //小冷User Id (养护的)
 // demoPrjId = 776; //PROD:
 // demoPrjId = 671; //PROD:
 // demoPrjId = 473; //UAT
-demoPrjId = 1424; //PROD:
+demoPrjId = 1520; //PROD:
 // demoPrjId = 756; //PROD:
 // demoPrjId = 815; //PROD:
 // demoPrjId = 4107; //UAT:
@@ -94,13 +95,13 @@ test('测试 - 测试模板啦: ', function (t) {
         // filter.push('ration_coe'); //临时用2
         // filter.push('projectGLJ'); //临时用3
         // filter.push('calc_program'); //临时用4
-        console.log(filter);
+        // console.log(filter);
         //正常应该根据报表模板定义的数据类型来请求数据
         rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
             if (!err) {
                 try {
                     let dt = new Date();
-                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/YangHuCost/tmp/rptTplRawDataObject_测试模板.jsp");
+                    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(tplData, "D:/GitHome/YangHuCost/tmp/rptTplAssembledData_测试模板.jsp");
@@ -121,9 +122,9 @@ test('测试 - 测试模板啦: ', function (t) {
                     }
                     if (pageRst) {
                         // fsUtil.writeObjToFile(pageRst, "D:/GitHome/YangHuCost/tmp/testBuiltPageResult_测试模板" + dt.getTime() + ".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);
                         // });

+ 3 - 0
web/building_saas/report/html/rpt_main.html

@@ -29,6 +29,7 @@
                             <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" 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" 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" id="show_project_folder" data-toggle="modal" data-target="#cpoj" style="display:none"></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>
@@ -103,6 +104,8 @@
 <%include ./rpt_content_format.html %>
 <!--弹出导出Excel-->
 <%include ./rpt_export_excel.html %>
+<!--弹出-->
+<%include ./rpt_select_projects.html %>
 <script>
     const SCREEN_DPI = [];
     function getScreenDPI() {

+ 21 - 0
web/building_saas/report/html/rpt_select_projects.html

@@ -0,0 +1,21 @@
+<div class="modal fade" id="cpoj" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">选择项目</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div class="modal-auto-height">
+                    <ul id="prjFolderTree" class="ztree"></ul>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <a href="" class="btn btn-primary">确定</a>
+            </div>
+        </div>
+    </div>
+</div>

+ 26 - 0
web/building_saas/report/js/rpt_cfg_const.js

@@ -29,3 +29,29 @@ let rpt_tpl_setting = {
         onClick: zTreeOprObj.onClick
     }
 };
+
+let rpt_prj_folder_setting = {
+    view: {
+        selectedMulti: false
+    },
+    check: {
+        enable: true
+    },
+    data: {
+        keep: {
+            parent:true,
+            leaf:true
+        },
+        key: {
+            children: "items"
+        },
+        simpleData: {
+            enable: true,
+            rootPId: -1
+        }
+    },
+    callback: {
+        // onCheck: zTreeOprObj.onCheck,
+        // onClick: zTreeOprObj.onClick
+    }
+};

+ 62 - 9
web/building_saas/report/js/rpt_main.js

@@ -27,6 +27,7 @@ let rptTplObj = {
 
 let zTreeOprObj = {
     treeObj: null,
+    prjFolderTreeObj: null,
     currentNode: null,
     checkedRptTplNodes: null,
     currentRptPageRst: null,
@@ -214,15 +215,21 @@ let zTreeOprObj = {
     onClick: function(event,treeId,treeNode) {
         let me = zTreeOprObj;
         if (treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
-            let params = {};
-            let pageSize = rptControlObj.getCurrentPageSize();
-            params.pageSize = pageSize;
-            params.rpt_tpl_id = treeNode.refId;
-            params.prj_id = projectObj.project.projectInfo.ID;
-            params.custCfg = me.reportPageCfg;
-            me.currentNode = treeNode;
-            me.requestReport(params);
-            me.countChkedRptTpl();
+            if (treeNode.hasOwnProperty('flags') && treeNode.flags.hasOwnProperty('reportType')
+                && treeNode['flags']['reportType'] === 'billSummary') {
+                me.requestPrjFolder();
+                me.countChkedRptTpl();
+            } else {
+                let params = {};
+                let pageSize = rptControlObj.getCurrentPageSize();
+                params.pageSize = pageSize;
+                params.rpt_tpl_id = treeNode.refId;
+                params.prj_id = projectObj.project.projectInfo.ID;
+                params.custCfg = me.reportPageCfg;
+                me.currentNode = treeNode;
+                me.requestReport(params);
+                me.countChkedRptTpl();
+            }
         }
     },
     changePageSize: function(dom) {
@@ -296,6 +303,52 @@ let zTreeOprObj = {
             }
         );
     },
+    requestPrjFolder: function () {
+        //$("#show_project_folder").trigger("click");
+        let me = zTreeOprObj, params = {};
+        hintBox.waitBox();
+        $.ajax({
+            type:"POST",
+            url: '/pm/api/getProjects',
+            data: {'data': JSON.stringify({"user_id": userID, "compilation": projectObj.project.projectInfo.compilation})},
+            dataType: 'json',
+            cache: false,
+            timeout: 15000,
+            success: function(result){
+                hintBox.unWaitBox();
+                if (result.error === 0) {
+                    //console.log(result.data);
+                    let currPrjParentID = projectObj.project.projectInfo.ParentID;
+                    let selectedProjects = [];
+                    for (let prj of result.data) {
+                        if (currPrjParentID === prj.ParentID) {
+                            selectedProjects.push({name: prj.name, ID: prj.ID});
+                        }
+                    }
+                    $("#show_project_folder").trigger("click");
+                    me.prjFolderTreeObj = $.fn.zTree.init($("#prjFolderTree"), rpt_prj_folder_setting, selectedProjects);
+                    me.prjFolderTreeObj.expandAll(true);
+                } else {
+                    alert('error: ' + result.message);
+                }
+            },
+            error: function(jqXHR, textStatus, errorThrown){
+                hintBox.unWaitBox();
+                alert('error ' + textStatus + " " + errorThrown);
+            }
+        });
+        // CommonAjax.postEx("/pm/api/getProjects", params, 15000, true,
+        //     function(result){
+        //         hintBox.unWaitBox();
+        //         $("#show_project_folder").trigger("click");
+        //         console.log(result);
+        //     }, function(err){
+        //         hintBox.unWaitBox();
+        //     }, function(ex){
+        //         hintBox.unWaitBox();
+        //     }
+        // );
+    },
     showPage: function (pageNum, canvas) {
         let me = zTreeOprObj;
         if (pageNum >= 1 && pageNum <= me.maxPages) {