Ver código fonte

rpt tpl builder - formula tuning

TonyKang 8 anos atrás
pai
commit
7dcc5c5847

+ 13 - 0
modules/reports/controllers/rpt_tpl_controller.js

@@ -9,6 +9,7 @@ let RptTplModel = require('../models/rpt_template');
 let TreeNodeModel = require('../models/tpl_tree_node');
 let rptTplDef = require("../../../public/rpt_tpl_def").getUtil();
 let stringUtil = require("../../../public/stringUtil");
+let JV = require('../rpt_component/jpc_value_define');
 
 //let test_glj_type_util = require("../../../public/cache/std_glj_type_util");
 
@@ -145,5 +146,17 @@ module.exports = {
                 callback(req, res, 'The report template was not found!', null);
             }
         })
+    },
+    updateRptTpl: function (req, res) {
+        let params = JSON.parse(req.body.params),
+            rptTpl = JSON.parse(params.rptTpl);
+        let filter = {"ID": parseInt(rptTpl[JV.PROP_ID])};
+        RptTplModel.update(filter, rptTpl, function (err, rst) {
+            if (err) {
+                callback(req, res, true, 'The report template was updated failed!', false);
+            } else {
+                callback(req, res, false, 'The report template was updated successfully!', true);
+            }
+        });
     }
 }

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

@@ -9,9 +9,9 @@ rptTplRouter.post('/updateRptTplNodes', reportTplController.updateTreeNodes);
 rptTplRouter.post('/deleteRptTplNodes', reportTplController.deleteRptTplNodes);
 rptTplRouter.post('/createDftRptTpl', reportTplController.createDftRptTpl);
 rptTplRouter.post('/getRefRptTpl', reportTplController.getRefRptTpl);
+rptTplRouter.post('/updateRptTpl', reportTplController.updateRptTpl);
 
 rptTplRouter.post('/getUserRptCfg', reportCfgController.getReportUserCfg);
 rptTplRouter.post('/getMappingFields', reportCfgController.getAllMappingFields);
-//
 
 module.exports = rptTplRouter;

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

@@ -8,7 +8,7 @@ let JpcParam = require('./jpc_param');
 let JpcFunc = require('./jpc_function');
 let JpcData = require('./jpc_data');
 let JpcCommonHelper = require('./helper/jpc_helper_common');
-let JE = require('./jpc_rte'); //Important: for self-define function execution purpose
+let $JE = require('./jpc_rte'); //Important: for self-define function execution purpose
 
 let JpcExSrv = function(){};
 JpcExSrv.prototype.createNew = function(){
@@ -144,6 +144,7 @@ JpcExSrv.prototype.createNew = function(){
             if (me.formulas[i][JV.PROP_RUN_TYPE] === runType) {
                 let expression = me.formulas[i][JV.PROP_EXPRESSION];
                 if (expression) {
+                    let $ME = me.formulas[i];
                     eval(expression);
                 }
             }

+ 12 - 1
operation.js

@@ -10,7 +10,8 @@ let path = require('path');
 let session = require('express-session');
 let DBStore = require('connect-mongo')(session);
 
-let URL = require('url')
+let URL = require('url');
+let fs = require('fs');
 
 let app = express();
 let _rootDir = __dirname;
@@ -141,6 +142,16 @@ app.use(function(err, req, res, next) {
     console.error(err.stack);
     res.status(500).send('500 Error');
 });
+
+//设置Date Format函数
+fs.readFile(__dirname + '/public/web/date_util.js', 'utf8', 'r', function (err, data) {
+    eval(data);
+    // let dt = new Date();
+    // console.log(dt.Format('yyyy-M-dd'));
+    // console.log(dt.Format('yyyy 年 M 月 dd 日'));
+    // console.log(dt.Format('yyyy 年 M 月 20 日'));
+});
+
 app.listen(6080, function(){
     console.log("server started!");
 });

+ 9 - 1
test/demo/stringTest.js

@@ -18,7 +18,7 @@ test('string test1', function(t){
     t.end();
 })
 
-test('string test1', function(t){
+test('string test2', function(t){
     var str="hello(world)";
     var nstr = str.replace(/\([^\)]*\)/g,"");
 
@@ -26,6 +26,14 @@ test('string test1', function(t){
     t.end();
 })
 
+test('string test3', function(t){
+    var str="共 (%S) 页";
+    var nstr = str.replace("(%S)",10);
+
+    t.equal(nstr , "共 10 页");
+    t.end();
+})
+
 test('test extract', function(t){
     let private_extract_code = function(str, idx){
         let rst = '', lBracket = 0, rBracket = 0, firstIdx = idx, lastIdx = 0;

+ 19 - 0
test/public/testLoadDateFormat.js

@@ -0,0 +1,19 @@
+/**
+ * Created by Tony on 2017/7/13.
+ */
+let test = require('tape');
+let fs = require("fs");
+
+test('std glj types test1', function(t){
+    //console.log(__dirname.slice(0, __dirname.length - 12) + '/public/web/date_util.js');
+    fs.readFile(__dirname.slice(0, __dirname.length - 12) + '/public/web/date_util.js', 'utf8', 'r', function (err, data) {
+        eval(data);
+        let dt = new Date();
+        //dt.setMonth(dt.getMonth() + 3);
+        t.equal(dt.Format('yyyy-M-dd'), "2017-7-13");
+        t.equal(dt.Format('yyyy年M月dd日'), "2017年7月13日");
+        t.equal(dt.Format('yyyy年M月20日'), "2017年7月20日");
+        t.end();
+    });
+});
+

+ 16 - 1
web/maintain/report/js/rpt_tpl_field_map.js

@@ -91,7 +91,22 @@ let fieldMapTreeOprObj = {
         //
     },
     extractFieldMaps: function (rptTpl) {
-        //
+        let me = this;
+        for (let rootNode of me.treeObj.getNodes()) {
+            rptTpl[JV.NODE_FIELD_MAP][rootNode.Name] = [];
+            for (let mappingFieldNode of rootNode.items) {
+                rptTpl[JV.NODE_FIELD_MAP][rootNode.Name].push(me.createMapFieldByNode(mappingFieldNode));
+            }
+        }
+    },
+    createMapFieldByNode: function (node) {
+        let rst = {};
+        rst[JV.PROP_ID] = node[JV.PROP_ID];
+        rst[JV.PROP_NAME] = node[JV.PROP_NAME];
+        rst[JV.PROP_DATA_TYPE] = node[JV.PROP_DATA_TYPE];
+        rst.mapExpression = node.mapExpression;
+        rst[JV.PROP_ID] = node[JV.PROP_ID];
+        return rst;
     }
 };
 

+ 22 - 0
web/maintain/report/js/rpt_tpl_helper.js

@@ -66,7 +66,26 @@ let tplHelper = {
             //5. 计算式
         }
     },
+
+    saveRptTpl: function () {
+        let me = this, params = null;
+        if (me.reCombineRptTpl()) {
+            let rptTpl = zTreeOprObj.currentNode.rptTpl;
+            params = {};
+            params.rptTpl = JSON.stringify(rptTpl);
+            CommonAjax.postEx("report_tpl_api/updateRptTpl", params, 20000, true, function(result){
+                    if (result) {
+                        alert('update succeeded!')
+                    } else {
+                        alert('update failed!')
+                    }
+                }, null, null
+            );
+        }
+    },
+
     reCombineRptTpl: function () {
+        let rst = true;
         if (zTreeOprObj.currentNode && zTreeOprObj.currentNode.nodeType == RT.NodeType.TEMPLATE && zTreeOprObj.currentNode.rptTpl != null) {
             let rptTpl = zTreeOprObj.currentNode.rptTpl;
             //1. 模板信息
@@ -79,7 +98,10 @@ let tplHelper = {
             tabFieldCfgTreeOprObj.extractTabFields(rptTpl);
             //5. 计算式
             calculationTreeOprObj.extractCalculation(rptTpl);
+        } else {
+            rst = false;
         }
+        return rst;
     }
 
 }

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

@@ -267,7 +267,7 @@
                                     <div class="main-data-h" style="position:relative">
                                         <div class="sub-button p-2">
                                             <button class="btn btn-primary" onclick="preview_util.preview($('#tplCanvas')[0], zTreeOprObj.getRefTpl()) ">预览</button>
-                                            <button class="btn btn-primary" onclick="tplHelper.reCombineRptTpl()">保存</button>
+                                            <button class="btn btn-primary" onclick="tplHelper.saveRptTpl()">保存</button>
                                             <button class="btn btn-secondary">保存并发布</button>
                                             <button class="btn btn-danger">删除模板</button>
                                         </div>