浏览代码

report template

TonyKang 8 年之前
父节点
当前提交
cf6fe451ba

+ 17 - 4
modules/reports/controllers/rpt_tpl_controller.js

@@ -105,10 +105,11 @@ module.exports = {
         let filter = {"ID": rptDftTplId};
         RptTplModel.findOne(filter, '-_id').exec().then(function(dftTplRst) {
             if (dftTplRst) {
-                dftTplRst["ID"] = treeNodeId;
-                dftTplRst["GROUP_KEY"] = "";
-                dftTplRst["ID_KEY"] = "";
-                let rptTpl = new RptTplModel(dftTplRst);
+                let _doc = dftTplRst["_doc"];
+                _doc["ID"] = treeNodeId;
+                _doc["GROUP_KEY"] = "";
+                _doc["ID_KEY"] = "";
+                let rptTpl = new RptTplModel(_doc);
                 rptTpl.save(function (err, actTplRst) {
                     if (err) {
                         callback(req,res, "报表模板创建错误", "", null);
@@ -127,5 +128,17 @@ module.exports = {
                 callback(req, res, 'Create report template failed!', null);
             }
         })
+    },
+    getRefRptTpl: function (req, res) {
+        let params = JSON.parse(req.body.params),
+            rptTplId = params.rptTplId;
+        let filter = {"ID": rptTplId};
+        RptTplModel.findOne(filter, '-_id').exec().then(function(rstTpl) {
+            if (rstTpl) {
+                callback(req,res, false, "", rstTpl);
+            } else {
+                callback(req, res, 'The report template was not found!', null);
+            }
+        })
     }
 }

+ 1 - 0
modules/reports/routes/rpt_tpl_router.js

@@ -7,5 +7,6 @@ rptTplRouter.post('/getRptTplTree', reportTplController.getRptTplTree);
 rptTplRouter.post('/updateRptTplNodes', reportTplController.updateTreeNodes);
 rptTplRouter.post('/deleteRptTplNodes', reportTplController.deleteRptTplNodes);
 rptTplRouter.post('/createDftRptTpl', reportTplController.createDftRptTpl);
+rptTplRouter.post('/getRefRptTpl', reportTplController.getRefRptTpl);
 
 module.exports = rptTplRouter;

+ 1 - 1
public/web/common_ajax.js

@@ -81,7 +81,7 @@ var CommonAjax = {
                 }
             },
             error: function(jqXHR, textStatus, errorThrown){
-                alert('url: ' + url +' error ' + textStatus + " " + errorThrown);
+                alert('url: ' + url +', error: ' + textStatus + ", " + errorThrown);
                 if (exceptionCallback) {
                     exceptionCallback();
                 }

+ 38 - 0
web/maintain/report/js/cfg_const.js

@@ -36,3 +36,41 @@ let setting = {
         onRename: zTreeOprObj.onRename
     }
 };
+
+let common_rpt_type_ids = {
+    flow: 4,
+    bill: 6,
+    cross: 5
+};
+
+let bandSetting = {
+    view: {
+        showIcon: true,
+        expandSpeed: "",
+        selectedMulti: false
+    },
+    // edit: {
+    //     enable: true,
+    //     editNameSelectAll: true,
+    //     showRemoveBtn: true,
+    //     showRenameBtn: true,
+    //     removeTitle: "删除节点",
+    //     renameTitle: "更改名称"
+    // },
+    data: {
+        keep: {
+            parent:true,
+            leaf:true
+        },
+        key: {
+            children: 'band_s',
+            name: "Name"
+        },
+        simpleData: {
+            enable: true,
+            idKey: "ID",
+            pIdKey: "ParentID",
+            rootPId: -1
+        }
+    }
+};

+ 86 - 2
web/maintain/report/js/rpt_tpl_main.js

@@ -9,6 +9,7 @@ let rptTplObj = {
 
 let zTreeOprObj = {
     treeObj: null,
+    bandTreeObj: null,
     currentNode: null,
     getReportTemplateTree: function(grpType) {
         let me = zTreeOprObj, params = {};
@@ -279,12 +280,95 @@ let zTreeOprObj = {
             }
             $("#rpt_tpl_display_label")[0].innerText = showText;
             if (treeNode.refId < 0) {
-                $('#rptTypeSelectionModal').modal('show');
                 //创建新报表模板
+                $('#rptTypeSelectionModal').modal('show');
+            } else {
+                //显示报表模板
+                me.getRefTpl();
             }
         }
     },
     createNewTpl: function () {
-        alert('创建中。。。')
+        let me = zTreeOprObj, params = {};
+        if (me.currentNode && me.currentNode.nodeType == RT.NodeType.TEMPLATE) {
+            params.treeNodeId = me.currentNode.ID;
+            let rptTypeId = common_rpt_type_ids.flow;
+            if ($("#crossTypeOpt")[0].checked) rptTypeId = common_rpt_type_ids.cross;
+            if ($("#billTypeOpt")[0].checked) rptTypeId = common_rpt_type_ids.bill;
+            params.rptDftTplId = rptTypeId
+            CommonAjax.postEx("report_tpl_api/createDftRptTpl", params, 20000, true, function(result){
+                    me.currentNode.rptTpl = result;
+                }, null, null
+            );
+        }
+    },
+    getRefTpl: function() {
+        let me = zTreeOprObj, params = {};
+        if (me.currentNode && me.currentNode.nodeType == RT.NodeType.TEMPLATE && me.currentNode.refId > 0) {
+            if (!(me.currentNode.rptTpl)) {
+                params.rptTplId = me.currentNode.refId;
+                CommonAjax.postEx("report_tpl_api/getRefRptTpl", params, 20000, true, function(result){
+                        me.currentNode.rptTpl = result;
+                        me.refreshTplView(me.currentNode.rptTpl);
+                    }, null, null
+                );
+            } else {
+                me.refreshTplView(me.currentNode.rptTpl);
+            }
+        }
+    },
+    refreshTplView: function (rptTpl) {
+        let me = zTreeOprObj;
+        if (rptTpl) {
+            //1. 模板信息
+            $("#rptTplName")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME];
+            $("#rptTplPageSize")[0].selectedIndex = JV.PAGES_SIZE_STR.indexOf(rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE]);
+            if (rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] === JV.ORIENTATION_PORTRAIT ||
+                rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] === JV.ORIENTATION_PORTRAIT_CHN) {
+                $("#rptTplPageOrientation")[0].selectedIndex = 1;
+            } else {
+                $("#rptTplPageOrientation")[0].selectedIndex = 0;
+            }
+            $("#rptTplMarginLeft")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT];
+            $("#rptTplMarginRight")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT];
+            $("#rptTplMarginTop")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP];
+            $("#rptTplMarginBottom")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM];
+            //2. 模板布局
+            let bandList = rptTpl[JV.NODE_BAND_COLLECTION];
+            me.buildTreeData(bandList);
+            me.bandTreeObj = $.fn.zTree.init($("#band_tree_reversed"), bandSetting, bandList);
+            me.bandTreeObj.expandAll(true);
+            //3. 指标映射
+            //4. 指标摆放
+            //5. 计算式
+        }
+    },
+    buildTreeData: function(bandList){
+        let rst = [], startIdx = 1;
+        //zTreeHelper.createTree(result, setting, "rptTplTree", me);
+        let private_setBandId = function (parentBand) {
+            if (parentBand.band_s) {
+                for (let band of parentBand.band_s) {
+                    band.ID = startIdx;
+                    band.ParentID = parentBand.ID;
+                    startIdx++;
+                    private_setBandId(band);
+                }
+            }
+        }
+        for (let band of bandList) {
+            band.ID = startIdx;
+            band.ParentID = -1;
+            startIdx++;
+            private_setBandId(band);
+        }
+
+        return rst;
+    },
+    previewRptTpl: function (rptTpl) {
+        let me = zTreeOprObj;
+        if (rptTpl) {
+            //
+        }
     }
 }

+ 13 - 13
web/maintain/report/rpt_tpl_main.html

@@ -84,25 +84,25 @@
                                                     <div class="p-3">
                                                         <div class="form-group">
                                                             <label>报表名称</label>
-                                                            <input class="form-control" placeholder="输入报表名称">
+                                                            <input class="form-control" id="rptTplName" placeholder="输入报表名称">
                                                         </div>
                                                         <div class="form-group">
                                                             <label>页面</label>
                                                             <div class="row">
                                                                 <div class="input-group col-6">
                                                                     <div class="input-group-addon">纸张</div>
-                                                                    <select class="form-control input-sm"><option>A3</option><option>A4</option></select>
+                                                                    <select class="form-control input-sm" id="rptTplPageSize"><option>A3</option><option>A4</option></select>
                                                                 </div>
                                                                 <div class="input-group col-6">
                                                                     <div class="input-group-addon">方向</div>
-                                                                    <select class="form-control input-sm"><option>横向</option><option>竖向</option></select>
+                                                                    <select class="form-control input-sm" id="rptTplPageOrientation"><option>横向</option><option>竖向</option></select>
                                                                 </div>
                                                             </div>
                                                         </div>
                                                         <div class="form-group row">
                                                             <div class="input-group col-6">
                                                                 <div class="input-group-addon">单位</div>
-                                                                <select class="form-control input-sm"><option>CM</option></select>
+                                                                <select class="form-control input-sm" id="rptTplUnit"><option>厘米</option></select>
                                                             </div>
                                                         </div>
                                                         <div class="form-group">
@@ -110,15 +110,15 @@
                                                             <div class="row">
                                                                 <div class="input-group col-6">
                                                                     <div class="input-group-addon">分栏</div>
-                                                                    <select class="form-control input-sm"><option>1</option><option>2</option></select>
+                                                                    <select class="form-control input-sm" id="rptTplMultiCols"><option>1</option><option>2</option></select>
                                                                 </div>
-                                                                <div class="input-group col-6">
+                                                                <div class="input-group col-6" style="display: none">
                                                                     <div class="input-group-addon">缩放</div>
-                                                                    <input class="form-control input-sm" type="number" step="1">
+                                                                    <input class="form-control input-sm" type="number" value="1" step="0.25">
                                                                 </div>
                                                             </div>
                                                         </div>
-                                                        <div class="form-group row">
+                                                        <div class="form-group row" style="display: none">
                                                             <div class="input-group col-6">
                                                                 <div class="input-group-addon">空行提上</div>
                                                                 <select class="form-control input-sm"><option>提上</option></select>
@@ -133,22 +133,22 @@
                                                             <div class="row">
                                                                 <div class="input-group col-6">
                                                                     <div class="input-group-addon">左</div>
-                                                                    <input class="form-control input-sm" type="number" step="1">
+                                                                    <input class="form-control input-sm" id="rptTplMarginLeft" type="number" value="0.8" step="0.1">
                                                                 </div>
                                                                 <div class="input-group col-6">
                                                                     <div class="input-group-addon">右</div>
-                                                                    <input class="form-control input-sm" type="number" step="1">
+                                                                    <input class="form-control input-sm" id="rptTplMarginRight" type="number" value="0.8" step="0.1">
                                                                 </div>
                                                             </div>
                                                         </div>
                                                         <div class="form-group row">
                                                             <div class="input-group col-6">
                                                                 <div class="input-group-addon">上</div>
-                                                                <input class="form-control input-sm" type="number" step="1">
+                                                                <input class="form-control input-sm" id="rptTplMarginTop" type="number" value="0.8" step="0.1">
                                                             </div>
                                                             <div class="input-group col-6">
                                                                 <div class="input-group-addon">下</div>
-                                                                <input class="form-control input-sm" type="number" step="1">
+                                                                <input class="form-control input-sm" id="rptTplMarginBottom" type="number" value="0.8" step="0.1">
                                                             </div>
                                                         </div>
                                                     </div>
@@ -159,7 +159,7 @@
                                                 <div class="main-data">
                                                     <div class="p-3">
                                                         <div class="ztree-warp">
-                                                            ztree 保留空间
+                                                            <ul id="band_tree_reversed" class="ztree"></ul>
                                                         </div>
                                                         <div class="form-group">
                                                             <label>Band名称</label>