Browse Source

code tuning to ECMA6

TonyKang 8 years ago
parent
commit
e8e9143e78
35 changed files with 793 additions and 761 deletions
  1. 25 25
      modules/reports/controllers/rpt_controller.js
  2. 14 5
      modules/reports/controllers/rpt_tpl_controller.js
  3. 7 7
      modules/reports/models/cfg_control.js
  4. 7 7
      modules/reports/models/cfg_font.js
  5. 7 7
      modules/reports/models/cfg_style.js
  6. 8 8
      modules/reports/models/rpt_template.js
  7. 7 7
      modules/reports/models/rpt_tpl_data.js
  8. 22 1
      modules/reports/models/tpl_tree_node.js
  9. 3 3
      modules/reports/routes/report_router.js
  10. 4 6
      modules/reports/routes/rpt_tpl_router.js
  11. 10 10
      modules/reports/rpt_component/Jpc_Band.js
  12. 23 23
      modules/reports/rpt_component/Jpc_Data.js
  13. 10 10
      modules/reports/rpt_component/Jpc_Field.js
  14. 6 6
      modules/reports/rpt_component/Jpc_Function.js
  15. 7 7
      modules/reports/rpt_component/Jpc_Param.js
  16. 6 6
      modules/reports/rpt_component/Jpc_RTE.js
  17. 8 8
      modules/reports/rpt_component/helper/Jpc_Helper_Area.js
  18. 11 11
      modules/reports/rpt_component/helper/Jpc_Helper_Band.js
  19. 25 25
      modules/reports/rpt_component/helper/Jpc_Helper_Common.js
  20. 17 17
      modules/reports/rpt_component/helper/Jpc_Helper_Discrete.js
  21. 9 9
      modules/reports/rpt_component/helper/Jpc_Helper_Field.js
  22. 5 5
      modules/reports/rpt_component/helper/Jpc_Helper_Text.js
  23. 7 7
      modules/reports/rpt_component/helper/jpc_helper_common_output.js
  24. 42 42
      modules/reports/rpt_component/helper/jpc_helper_cross_tab.js
  25. 16 16
      modules/reports/rpt_component/helper/jpc_helper_flow_tab.js
  26. 27 27
      modules/reports/rpt_component/jpc_bill_tab.js
  27. 158 158
      modules/reports/rpt_component/jpc_cross_tab.js
  28. 50 50
      modules/reports/rpt_component/jpc_ex.js
  29. 64 64
      modules/reports/rpt_component/jpc_flow_tab.js
  30. 1 1
      modules/reports/rpt_component/jpc_value_define.js
  31. 103 103
      modules/reports/util/rpt_excel_util.js
  32. 5 5
      modules/reports/util/rpt_util.js
  33. 14 14
      operation.js
  34. 2 1
      public/web/common_ajax.js
  35. 63 60
      web/maintain/report/js/rpt_tpl_main.js

+ 25 - 25
modules/reports/controllers/rpt_controller.js

@@ -2,18 +2,18 @@
  * Created by Tony on 2017/3/13.
  */
 
-var JV = require('../rpt_component/jpc_value_define');
-var Template = require('../models/rpt_template');
-var TemplateData = require('../models/rpt_tpl_data');
-var JpcEx = require('../rpt_component/jpc_ex');
-//var cache = require('../../../public/cache/cacheUtil');
-var rptUtil = require("../util/rpt_util");
-var rpt_xl_util = require('../util/rpt_excel_util');
-var fs = require('fs');
-var strUtil = require('../../../public/stringUtil');
+let JV = require('../rpt_component/jpc_value_define');
+let Template = require('../models/rpt_template');
+let TemplateData = require('../models/rpt_tpl_data');
+let JpcEx = require('../rpt_component/jpc_ex');
+//let cache = require('../../../public/cache/cacheUtil');
+let rptUtil = require("../util/rpt_util");
+let rpt_xl_util = require('../util/rpt_excel_util');
+let fs = require('fs');
+let strUtil = require('../../../public/stringUtil');
 
 //统一回调函数
-var callback = function(req, res, err, data){
+let callback = function(req, res, err, data){
     if(err){
         res.json({success: false, error: err});
     }
@@ -25,10 +25,10 @@ var callback = function(req, res, err, data){
 
 module.exports = {
     getReportAllPages: function(req, res){
-        var grp_id = req.body.grp_id;
-        var tpl_id = req.body.tpl_id;
-        var pageSize = req.body.pageSize;
-        var rptTpl = null;
+        let grp_id = req.body.grp_id;
+        let tpl_id = req.body.tpl_id;
+        let pageSize = req.body.pageSize;
+        let rptTpl = null;
         Template.getPromise(grp_id, tpl_id).then(function(rst) {
             rptTpl = rst;
             if (rptTpl) {
@@ -38,13 +38,13 @@ module.exports = {
             }
         }).then(function(tplData){
                 if (tplData) {
-                    var printCom = JpcEx.createNew();
+                    let printCom = JpcEx.createNew();
                     rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
-                    var defProperties = rptUtil.getReportDefaultCache();
+                    let defProperties = rptUtil.getReportDefaultCache();
                     printCom.initialize(rptTpl);
                     printCom.analyzeData(rptTpl, tplData, defProperties);
-                    var maxPages = printCom.totalPages;
-                    var pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
+                    let maxPages = printCom.totalPages;
+                    let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
                     if (pageRst) {
                         callback(req, res, null, pageRst);
                     } else {
@@ -57,8 +57,8 @@ module.exports = {
         );
     },
     getExcel: function(req, res) {
-        var grp_id = req.params.id, tpl_id = req.params.pm, pageSize = req.params.size, rptName = req.params.rptName;
-        var rptTpl = null;
+        let grp_id = req.params.id, tpl_id = req.params.pm, pageSize = req.params.size, rptName = req.params.rptName;
+        let rptTpl = null;
         Template.getPromise(grp_id, tpl_id).then(function(rst) {
             rptTpl = rst;
             if (rptTpl) {
@@ -68,18 +68,18 @@ module.exports = {
             }
         }).then(function(tplData){
                 if (tplData) {
-                    var printCom = JpcEx.createNew();
+                    let printCom = JpcEx.createNew();
                     rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
-                    var defProperties = rptUtil.getReportDefaultCache();
+                    let defProperties = rptUtil.getReportDefaultCache();
                     printCom.initialize(rptTpl);
                     printCom.analyzeData(rptTpl, tplData, defProperties);
-                    var maxPages = printCom.totalPages;
-                    var pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
+                    let maxPages = printCom.totalPages;
+                    let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
                     if (pageRst) {
                         rpt_xl_util.exportExcel(pageRst, rptName, null, function(newName){
                             res.setHeader('Content-Type', 'application/vnd.openxmlformats');
                             res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
-                            var filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + newName + '.xlsx');
+                            let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + newName + '.xlsx');
                             filestream.on('data', function(chunk) {
                                 res.write(chunk);
                             });

+ 14 - 5
modules/reports/controllers/rpt_tpl_controller.js

@@ -2,16 +2,16 @@
  * Created by Tony on 2017/6/1.
  */
 
-var TplNode = require('../models/tpl_tree_node');
+let TplNode = require('../models/tpl_tree_node');
 
 //统一回调函数
-var callback = function(req, res, err, message, data){
+let callback = function(req, res, err, message, data){
     res.json({error: err, message: message, data: data});
 }
 
 module.exports = {
     getRptTplTree: function(req, res) {
-        var params = JSON.parse(req.body.params),
+        let params = JSON.parse(req.body.params),
             grpType = params.grpType,
             userId = params.userId,
             tplType = params.tplType;
@@ -20,14 +20,23 @@ module.exports = {
         })
     },
     updateTreeNodes: function(req, res) {
-        var params = JSON.parse(req.body.params),
+        let params = JSON.parse(req.body.params),
             nodes = params.nodes;
         TplNode.updateTreeNodes(nodes, function(err,results){
             callback(req,res, err, "", results)
         });
     },
+    deleteTptTplNodes: function(req, res){
+        let params = JSON.parse(req.body.params),
+            nodeIds = params.nodeIds,
+            preNodeId = params.preNodeId,
+            preNodeNextId = params.preNodeNextId;
+        TplNode.removeNodes(nodeIds, preNodeId, preNodeNextId, function(err,results){
+            callback(req,res, err, "", results)
+        });
+    },
     createTplTreeNode: function(req, res){
-        var params = JSON.parse(req.body.params),
+        let params = JSON.parse(req.body.params),
             lastNodeId = params.lastNodeId,
             nodeData = params.rawNodeData;
         TplNode.createTplTreeNode(nodeData, lastNodeId, function(err, data){

+ 7 - 7
modules/reports/models/cfg_control.js

@@ -1,11 +1,11 @@
 /**
  * Created by Tony on 2016/12/23.
  */
-var mongoose = require('mongoose');
-var dbm = require("../../../config/db/db_manager");
-var smartcostdb = dbm.getCfgConnection("Reports");
-var Schema = mongoose.Schema;
-var CtrlSchema = new Schema({
+let mongoose = require('mongoose');
+let dbm = require("../../../config/db/db_manager");
+let smartcostdb = dbm.getCfgConnection("Reports");
+let Schema = mongoose.Schema;
+let CtrlSchema = new Schema({
     "ID" : String,
     "Shrink" : String,
     "ShowZero" : String,
@@ -14,9 +14,9 @@ var CtrlSchema = new Schema({
     "Wrap" : String
 });
 
-var Control = smartcostdb.model("com_ctrls", CtrlSchema, "com_ctrls");
+let Control = smartcostdb.model("com_ctrls", CtrlSchema, "com_ctrls");
 
-var CtrlDAO = function(){};
+let CtrlDAO = function(){};
 
 //根据id
 CtrlDAO.prototype.get = function(id, callback){

+ 7 - 7
modules/reports/models/cfg_font.js

@@ -1,11 +1,11 @@
 /**
  * Created by Tony on 2016/12/23.
  */
-var mongoose = require('mongoose');
-var dbm = require("../../../config/db/db_manager");
-var smartcostdb = dbm.getCfgConnection("Reports");
-var Schema = mongoose.Schema;
-var FontSchema = new Schema({
+let mongoose = require('mongoose');
+let dbm = require("../../../config/db/db_manager");
+let smartcostdb = dbm.getCfgConnection("Reports");
+let Schema = mongoose.Schema;
+let FontSchema = new Schema({
     "ID" : String,
     "Name" : String,
     "FontHeight" : String,
@@ -17,9 +17,9 @@ var FontSchema = new Schema({
     "FontAngle" : String
 });
 
-var Font = smartcostdb.model("com_fonts", FontSchema, "com_fonts");
+let Font = smartcostdb.model("com_fonts", FontSchema, "com_fonts");
 
-var FontDAO = function(){};
+let FontDAO = function(){};
 
 //根据id
 FontDAO.prototype.get = function(id, callback){

+ 7 - 7
modules/reports/models/cfg_style.js

@@ -1,18 +1,18 @@
 /**
  * Created by Tony on 2016/12/23.
  */
-var mongoose = require('mongoose');
-var dbm = require("../../../config/db/db_manager");
-var smartcostdb = dbm.getCfgConnection("Reports");
-var Schema = mongoose.Schema;
-var StyleSchema = new Schema({
+let mongoose = require('mongoose');
+let dbm = require("../../../config/db/db_manager");
+let smartcostdb = dbm.getCfgConnection("Reports");
+let Schema = mongoose.Schema;
+let StyleSchema = new Schema({
     "ID" : String,
     "border_style" : Array
 });
 
-var Style = smartcostdb.model("com_styles", StyleSchema, "com_styles");
+let Style = smartcostdb.model("com_styles", StyleSchema, "com_styles");
 
-var StyleDAO = function(){};
+let StyleDAO = function(){};
 
 //根据id
 StyleDAO.prototype.get = function(id, callback){

+ 8 - 8
modules/reports/models/rpt_template.js

@@ -1,11 +1,11 @@
 /**
  * Created by Tony on 2016/12/23.
  */
-var mongoose = require('mongoose');
-var dbm = require("../../../config/db/db_manager");
-var smartcostdb = dbm.getCfgConnection("Reports");
-var Schema = mongoose.Schema;
-var RptTemplateSchema = new Schema({
+let mongoose = require('mongoose');
+let dbm = require("../../../config/db/db_manager");
+let smartcostdb = dbm.getCfgConnection("Reports");
+let Schema = mongoose.Schema;
+let RptTemplateSchema = new Schema({
     "GROUP_KEY": String,
     "ID_KEY": String,
     "主信息": Schema.Types.Mixed,
@@ -18,9 +18,9 @@ var RptTemplateSchema = new Schema({
     "计算式_集合": Array
 });
 
-var Template = smartcostdb.model("rpt_templates", RptTemplateSchema, "rpt_templates");
+let Template = smartcostdb.model("rpt_templates", RptTemplateSchema, "rpt_templates");
 
-var RplTplDAO = function(){};
+let RplTplDAO = function(){};
 
 RplTplDAO.prototype.get = function(grpId, id, callback){
     Template.find({GROUP_KEY: grpId, ID_KEY: id}, '-_id', function(err, templates){
@@ -34,7 +34,7 @@ RplTplDAO.prototype.get = function(grpId, id, callback){
 };
 
 RplTplDAO.prototype.getPromise = function(grpId, id){
-    var rst = Template.findOne({GROUP_KEY: grpId, ID_KEY: id}, '-_id').exec() ;
+    let rst = Template.findOne({GROUP_KEY: grpId, ID_KEY: id}, '-_id').exec() ;
     return rst;
 }
 

+ 7 - 7
modules/reports/models/rpt_tpl_data.js

@@ -1,20 +1,20 @@
 /**
  * Created by Tony on 2016/12/28.
  */
-var mongoose = require('mongoose');
-var dbm = require("../../../config/db/db_manager");
-var smartcostdb = dbm.getCfgConnection("Reports");
-var Schema = mongoose.Schema;
-var RptTemplateDataSchema = new Schema({
+let mongoose = require('mongoose');
+let dbm = require("../../../config/db/db_manager");
+let smartcostdb = dbm.getCfgConnection("Reports");
+let Schema = mongoose.Schema;
+let RptTemplateDataSchema = new Schema({
     "Data_Key": String,
     "discrete_data": Array,
     "master_data": Array,
     "detail_data": Array
 });
 
-var TemplateData = smartcostdb.model("temp_tpl_data", RptTemplateDataSchema, "temp_tpl_data");
+let TemplateData = smartcostdb.model("temp_tpl_data", RptTemplateDataSchema, "temp_tpl_data");
 
-var RplTplDataDAO = function(){};
+let RplTplDataDAO = function(){};
 
 //根据id获取临时数据
 RplTplDataDAO.prototype.get = function(tpl_id, callback){

+ 22 - 1
modules/reports/models/tpl_tree_node.js

@@ -26,7 +26,7 @@ var counter = require('../../../public/counter/counter');
 var RplTplTreeDAO = function(){};
 
 RplTplTreeDAO.prototype.getTplTreeNodes = function(grpType, userId, tplType, callback) {
-    var filter = {"grpType": grpType};
+    var filter = {"grpType": grpType, "$or": [{"isDeleted": null}, {"isDeleted": false} ]};
     if (userId) {
         filter.userId = userId;
     }
@@ -54,6 +54,27 @@ RplTplTreeDAO.prototype.updateTreeNodes = function(nodes, callback) {
     });
 };
 
+RplTplTreeDAO.prototype.removeNodes = function(nodeIds, preNodeId, preNodeNextId, callback){
+    var functions = [];
+    if (preNodeId != -1) {
+        functions.push((function(nodeId, nextId) {
+            return function(cb) {
+                TreeNodeModel.update({ID: nodeId}, {"NextSiblingID": nextId}, cb);
+            };
+        })(preNodeId, preNodeNextId));
+    }
+    for (var i=0; i < nodeIds.length; i++) {
+        functions.push((function(nodeId) {
+            return function(cb) {
+                TreeNodeModel.update({ID: nodeId}, {"isDeleted": true}, cb);
+            };
+        })(nodeIds[i]));
+    }
+    async.parallel(functions, function(err, results) {
+        callback(err, results);
+    });
+}
+
 RplTplTreeDAO.prototype.createTplTreeNode = function(nodeData, lastNodeId, callback) {
     counter.counterDAO.getIDAfterCount(counter.moduleName.report, 1, function(err, result){
         nodeData.ID = result.value.sequence_value;

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

@@ -2,9 +2,9 @@
  * Created by Tony on 2017/3/13.
  */
 
-var express = require('express');
-var rptRouter = express.Router();
-var reportController = require('./../controllers/rpt_controller');
+let express = require('express');
+let rptRouter = express.Router();
+let reportController = require('./../controllers/rpt_controller');
 
 rptRouter.post('/getReport', reportController.getReportAllPages);
 rptRouter.get('/getExcel/:id/:pm/:size/:rptName', reportController.getExcel);

+ 4 - 6
modules/reports/routes/rpt_tpl_router.js

@@ -1,13 +1,11 @@
-/**
- * Created by Tony on 2017/6/1.
- */
-var express = require('express');
-var rptTplRouter = express.Router();
-var reportTplController = require('./../controllers/rpt_tpl_controller');
+let express = require("express");
+let rptTplRouter = express.Router();
+let reportTplController = require('./../controllers/rpt_tpl_controller');
 
 //rptTplRouter.post('/getReport', reportTplController.getReportAllPages);
 rptTplRouter.post('/createTplTreeNode', reportTplController.createTplTreeNode);
 rptTplRouter.post('/getRptTplTree', reportTplController.getRptTplTree);
 rptTplRouter.post('/updateTptTplNodes', reportTplController.updateTreeNodes);
+rptTplRouter.post('/deleteTptTplNodes', reportTplController.deleteTptTplNodes);
 
 module.exports = rptTplRouter;

+ 10 - 10
modules/reports/rpt_component/Jpc_Band.js

@@ -1,22 +1,22 @@
-var JV = require('./jpc_value_define');
-var JpcCommonHelper = require('./helper/jpc_helper_common');
-var JpcBandHelper = require('./helper/jpc_helper_band');
+let JV = require('./jpc_value_define');
+let JpcCommonHelper = require('./helper/jpc_helper_common');
+let JpcBandHelper = require('./helper/jpc_helper_band');
 
-var JpcBand = {
+let JpcBand = {
     createNew: function(rptTpl, defProperties) {
-        var me = this;
-        var JpcBandResult = {};
+        let me = this;
+        let JpcBandResult = {};
         if (rptTpl[JV.NODE_BAND_COLLECTION]) {
-            for (var i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
+            for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
                 me.createSingle(rptTpl[JV.NODE_BAND_COLLECTION][i], JpcBandResult, rptTpl, defProperties);
             }
         }
         return JpcBandResult;
     },
     createSingle: function(bandNode, parentObj, rptTpl, defProperties) {
-        var me = this;
+        let me = this;
         if (bandNode && bandNode[JV.BAND_PROP_NAME]) {
-            var item = {Left:0, Right:0, Top:0, Bottom:0};
+            let item = {Left:0, Right:0, Top:0, Bottom:0};
             item[JV.BAND_PROP_STYLE] = JpcCommonHelper.getStyle(bandNode[JV.BAND_PROP_STYLE], defProperties.styles, null);
             item[JV.BAND_PROP_CONTROL] = JpcCommonHelper.getControl(bandNode[JV.BAND_PROP_CONTROL], defProperties.ctrls, null);
             if (bandNode[JV.BAND_PROP_HEIGHT]) {
@@ -37,7 +37,7 @@ var JpcBand = {
                 item[JV.BAND_PROP_MERGE_BORDER] = bandNode[JV.BAND_PROP_MERGE_BORDER];
             }
             if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
-                for (var i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
+                for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
                     me.createSingle(bandNode[JV.BAND_PROP_SUB_BANDS][i], parentObj, rptTpl, defProperties);
                 }
             }

+ 23 - 23
modules/reports/rpt_component/Jpc_Data.js

@@ -1,22 +1,22 @@
-var JV = require('./jpc_value_define');
-var JpcData = {
+let JV = require('./jpc_value_define');
+let JpcData = {
     createNew: function() {
-        var JpcDataRst = {};
+        let JpcDataRst = {};
         JpcDataRst.dataSeq = [];
         JpcDataRst.analyzeData = function(rptTpl, dataObj) {
-            var me = this;
+            let me = this;
             if ((rptTpl) && (dataObj)) {
                 //1. get ID fields
-                var masterIDs = [];
-                for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS].length; i++) {
-                    var mstFieldObj = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS][i];
+                let masterIDs = [];
+                for (let i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS].length; i++) {
+                    let mstFieldObj = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS][i];
                     if ((mstFieldObj[JV.PROP_IS_ID]) && (mstFieldObj[JV.PROP_IS_ID] === 'T')) {
                         masterIDs.push({"idx": i, "seq": mstFieldObj[JV.PROP_ID_SEQ]});
                     }
                 }
-                var detailIDs = [];
-                for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS].length; i++) {
-                    var dtlFieldObj = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS][i];
+                let detailIDs = [];
+                for (let i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS].length; i++) {
+                    let dtlFieldObj = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS][i];
                     if ((dtlFieldObj[JV.PROP_IS_ID]) && (dtlFieldObj[JV.PROP_IS_ID] === 'T')) {
                         detailIDs.push({"idx": i, "seq": dtlFieldObj[JV.PROP_ID_SEQ]});
                     }
@@ -34,24 +34,24 @@ var JpcData = {
                 }
                 //3. prepare data sequence
                 if (masterIDs.length > 0) {
-                    var mst_dt_len = 0, dtl_dt_len = 0, mst_fields = [];
-                    for (var i = 0; i < masterIDs.length; i++) {
+                    let mst_dt_len = 0, dtl_dt_len = 0, mst_fields = [];
+                    for (let i = 0; i < masterIDs.length; i++) {
                         mst_fields.push(dataObj[JV.DATA_MASTER_DATA][masterIDs[i]["idx"]]);
                         mst_dt_len = dataObj[JV.DATA_MASTER_DATA][masterIDs[i]["idx"]].length;
                     }
-                    var dtl_fields = [];
-                    for (var i = 0; i < detailIDs.length; i++) {
+                    let dtl_fields = [];
+                    for (let i = 0; i < detailIDs.length; i++) {
                         dtl_fields.push(dataObj[JV.DATA_DETAIL_DATA][detailIDs[i]["idx"]]);
                         dtl_dt_len = dataObj[JV.DATA_DETAIL_DATA][detailIDs[i]["idx"]].length;
                     }
-                    var sIdx = 0;
-                    var isEqual = true;
-                    for (var i = 0; i < mst_dt_len; i++) {
+                    let sIdx = 0;
+                    let isEqual = true;
+                    for (let i = 0; i < mst_dt_len; i++) {
                         me.dataSeq.push([]);
                         //then compare the master/detail ID-field value
-                        for (var j = sIdx; j < dtl_dt_len; j++) {
+                        for (let j = sIdx; j < dtl_dt_len; j++) {
                             isEqual = true;
-                            for (var k = 0; k < mst_fields.length; k++) {
+                            for (let k = 0; k < mst_fields.length; k++) {
                                 if (!(mst_fields[k][i] === dtl_fields[k][j])) {
                                     isEqual = false;
                                     break;
@@ -63,9 +63,9 @@ var JpcData = {
                                 sIdx = j;
                                 //below logic is for the data robustness purpose, to avoid those strange record(detail level) which could not match even one of the master record!
                                 if (i < mst_dt_len - 1 && j < dtl_dt_len - 1) {
-                                    for (var j1 = j; j1 < dtl_dt_len; j1++) {
+                                    for (let j1 = j; j1 < dtl_dt_len; j1++) {
                                         isEqual = true;
-                                        for (var k = 0; k < mst_fields.length; k++) {
+                                        for (let k = 0; k < mst_fields.length; k++) {
                                             if (!(mst_fields[k][i + 1] === dtl_fields[k][j1])) {
                                                 isEqual = false;
                                                 break;
@@ -82,9 +82,9 @@ var JpcData = {
                         }
                     }
                 } else { //if no master data
-                    var field = dataObj[JV.DATA_DETAIL_DATA][0];
+                    let field = dataObj[JV.DATA_DETAIL_DATA][0];
                     me.dataSeq = [[]];
-                    for (var i = 0; i < field.length; i++) {
+                    for (let i = 0; i < field.length; i++) {
                         me.dataSeq[0].push(i);
                     }
                 }

+ 10 - 10
modules/reports/rpt_component/Jpc_Field.js

@@ -1,29 +1,29 @@
-var JV = require('./jpc_value_define');
-var JpcField = {
+let JV = require('./jpc_value_define');
+let JpcField = {
     createNew: function(rptTpl) {
-        var JpcFieldResult = {};
-        var me = this;
+        let JpcFieldResult = {};
+        let me = this;
         JpcFieldResult[JV.NODE_DISCRETE_FIELDS] = {};
         if (rptTpl[JV.NODE_FIELD_MAP] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
-            for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS].length; i++) {
+            for (let i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS].length; i++) {
                 me.createSingle(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS][i], JpcFieldResult[JV.NODE_DISCRETE_FIELDS], rptTpl, JV.DATA_DISCRETE_DATA, i);
             }
         }
         JpcFieldResult[JV.NODE_MASTER_FIELDS] = {};
         if (rptTpl[JV.NODE_FIELD_MAP] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
-            for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS].length; i++) {
+            for (let i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS].length; i++) {
                 me.createSingle(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS][i], JpcFieldResult[JV.NODE_MASTER_FIELDS], rptTpl, JV.DATA_MASTER_DATA, i);
             }
         }
         JpcFieldResult[JV.NODE_DETAIL_FIELDS] = {};
         if (rptTpl[JV.NODE_FIELD_MAP] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
-            for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS].length; i++) {
+            for (let i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS].length; i++) {
                 me.createSingle(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS][i], JpcFieldResult[JV.NODE_DETAIL_FIELDS], rptTpl, JV.DATA_DETAIL_DATA, i);
             }
         }
         JpcFieldResult[JV.NODE_NO_MAPPING_FIELDS] = {};
         if (rptTpl[JV.NODE_NO_MAPPING_FIELDS]) {
-            for (var i = 0; i < rptTpl[JV.NODE_NO_MAPPING_FIELDS].length; i++) {
+            for (let i = 0; i < rptTpl[JV.NODE_NO_MAPPING_FIELDS].length; i++) {
                 me.createSingle(rptTpl[JV.NODE_NO_MAPPING_FIELDS][i], JpcFieldResult[JV.NODE_NO_MAPPING_FIELDS], rptTpl, "NA", JV.BLANK_FIELD_INDEX);
             }
         }
@@ -31,9 +31,9 @@ var JpcField = {
         return JpcFieldResult;
     },
     createSingle: function(fieldNode, parentObj, rptTpl, dataNodeName, sequence) {
-        var me = this;
+        let me = this;
         if (fieldNode && fieldNode[JV.PROP_ID]) {
-            var item = {};
+            let item = {};
             item[JV.PROP_ID] = fieldNode[JV.PROP_ID];
             item[JV.PROP_NAME] = fieldNode[JV.PROP_NAME];
             item[JV.PROP_DATA_TYPE] = fieldNode[JV.PROP_DATA_TYPE];

+ 6 - 6
modules/reports/rpt_component/Jpc_Function.js

@@ -1,11 +1,11 @@
-var JV = require('./jpc_value_define');
-var JpcFunc = {
+let JV = require('./jpc_value_define');
+let JpcFunc = {
     createNew: function (rptTpl) {
-        var me = this;
-        var rst = [];
+        let me = this;
+        let rst = [];
         if (rptTpl[JV.NODE_FORMULAS]) {
-            for (var i = 0; i < rptTpl[JV.NODE_FORMULAS].length; i++) {
-                var item = {};
+            for (let i = 0; i < rptTpl[JV.NODE_FORMULAS].length; i++) {
+                let item = {};
                 item[JV.PROP_RUN_TYPE] = rptTpl[JV.NODE_FORMULAS][i][JV.PROP_RUN_TYPE];
                 item[JV.PROP_EXPRESSION] = rptTpl[JV.NODE_FORMULAS][i][JV.PROP_EXPRESSION];
                 rst.push(item);

+ 7 - 7
modules/reports/rpt_component/Jpc_Param.js

@@ -1,19 +1,19 @@
-var JV = require('./jpc_value_define');
-var JpcParam = {
+let JV = require('./jpc_value_define');
+let JpcParam = {
     createNew: function(rptTpl) {
-        var JpcParamResult = {};
-        var me = this;
+        let JpcParamResult = {};
+        let me = this;
         if (rptTpl[JV.NODE_DISCRETE_PARAMS]) {
-            for (var i = 0; i < rptTpl[JV.NODE_DISCRETE_PARAMS].length; i++) {
+            for (let i = 0; i < rptTpl[JV.NODE_DISCRETE_PARAMS].length; i++) {
                 me.createSingle(rptTpl[JV.NODE_DISCRETE_PARAMS][i], JpcParamResult, rptTpl, i);
             }
         }
         return JpcParamResult;
     },
     createSingle: function(paramNode, parentObj, rptTpl, sequence) {
-        var me = this;
+        let me = this;
         if (paramNode && paramNode[JV.PROP_ID]) {
-            var item = {};
+            let item = {};
             item[JV.PROP_ID] = paramNode[JV.PROP_ID];
             item[JV.PROP_NAME] = paramNode[JV.PROP_NAME];
             item[JV.PROP_DATA_TYPE] = paramNode[JV.PROP_DATA_TYPE];

+ 6 - 6
modules/reports/rpt_component/Jpc_RTE.js

@@ -2,10 +2,10 @@
  * Created by Tony on 2016/12/28.
  */
 
-var JV = require('./jpc_value_define');
-var JE = {
+let JV = require('./jpc_value_define');
+let JE = {
     F: function(fID, $CURRENT_RPT) {
-        var rst = null;
+        let rst = null;
         if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS][JV.PROP_ID + "_" + fID])) {
             rst = $CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS][JV.PROP_ID + "_" + fID];
         } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS][JV.PROP_ID + "_" + fID])) {
@@ -20,7 +20,7 @@ var JE = {
         return rst;
     },
     P: function(pID, $CURRENT_RPT) {
-        var rst = null;
+        let rst = null;
         if ($CURRENT_RPT && ($CURRENT_RPT.params[JV.PROP_ID + "_" + pID])) {
             rst = $CURRENT_RPT.params[JV.PROP_ID + "_" + pID];
         } else {
@@ -29,14 +29,14 @@ var JE = {
         return rst;
     },
     getCurrentPage: function ($CURRENT_RPT) {
-        var rst = 0;
+        let rst = 0;
         if ($CURRENT_RPT) {
             rst = $CURRENT_RPT.runTimePageData.currentPage;
         }
         return rst;
     },
     getTotalPage: function ($CURRENT_RPT) {
-        var rst = 0;
+        let rst = 0;
         if ($CURRENT_RPT) {
             rst = $CURRENT_RPT.totalPages;
         }

+ 8 - 8
modules/reports/rpt_component/helper/Jpc_Helper_Area.js

@@ -1,13 +1,13 @@
-var JV = require('../jpc_value_define');
+let JV = require('../jpc_value_define');
 
-var JpcAreaHelper = {
+let JpcAreaHelper = {
     outputArea: function(areaNode, band, unitFactor, rowAmount, rowIdx, colAmount, colIdx, multipleDispCol, multipleColIdx,syncHeight, syncWidth) {
-        var rst = {}, maxMultiColumns = 3;
+        let rst = {}, maxMultiColumns = 3;
         if (multipleDispCol > 0 && multipleDispCol <= maxMultiColumns) {
             //1. calculate left/right
-            var areaWidth = 1.0 * (band[JV.PROP_RIGHT] - band[JV.PROP_LEFT]) / multipleDispCol;
+            let areaWidth = 1.0 * (band[JV.PROP_RIGHT] - band[JV.PROP_LEFT]) / multipleDispCol;
             areaWidth = areaWidth / colAmount;
-            var innerLeft = 0.0, innerRight = areaWidth;
+            let innerLeft = 0.0, innerRight = areaWidth;
             switch (areaNode[JV.PROP_H_CALCULATION]) {
                 case JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE] :
                     innerLeft = (1.0 * areaNode[JV.PROP_LEFT] * areaWidth / JV.HUNDRED_PERCENT);
@@ -19,9 +19,9 @@ var JpcAreaHelper = {
                     break;
             }
             //2. calculate top/bottom
-            var  areaHeight = 1.0 * (band[JV.PROP_BOTTOM] - band[JV.PROP_TOP]);
+            let  areaHeight = 1.0 * (band[JV.PROP_BOTTOM] - band[JV.PROP_TOP]);
             areaHeight = areaHeight / rowAmount;
-            var innerTop = 0.0, innerBottom = areaHeight;
+            let innerTop = 0.0, innerBottom = areaHeight;
             switch (areaNode[JV.PROP_V_CALCULATION]) {
                 case JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE] :
                     innerTop = (1.0 * areaNode[JV.PROP_TOP] * areaHeight / JV.HUNDRED_PERCENT);
@@ -33,7 +33,7 @@ var JpcAreaHelper = {
                     break;
             }
             //
-            var rstLeft = 0.0, rstRight = 0.0, rstTop = 0.0, rstBottom = 0.0;
+            let rstLeft = 0.0, rstRight = 0.0, rstTop = 0.0, rstBottom = 0.0;
             if (syncHeight) {
                 rstBottom = Math.round(1.0 * band[JV.PROP_TOP] + areaHeight * (rowIdx + 1) + innerTop);
             } else {

+ 11 - 11
modules/reports/rpt_component/helper/Jpc_Helper_Band.js

@@ -1,24 +1,24 @@
-var JV = require('../jpc_value_define');
-var JpcCommonHelper = require('./jpc_helper_common');
+let JV = require('../jpc_value_define');
+let JpcCommonHelper = require('./jpc_helper_common');
 
-var JpcBandHelper = {
+let JpcBandHelper = {
     getBandTypeValByString: function(bandType) {
-        var rst = JV.PAGE_STATUS.indexOf(bandType);
+        let rst = JV.PAGE_STATUS.indexOf(bandType);
         if (rst < 0) rst = JV.STATUS_NORMAL;
         return rst;
     },
     setBandArea: function(bands, rptTpl, pageStatus) {
-        var me = this;
+        let me = this;
         if (rptTpl[JV.NODE_BAND_COLLECTION]) {
-            var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
-            var orgArea = JpcCommonHelper.getReportArea(rptTpl, unitFactor);
-            for (var i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
+            let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+            let orgArea = JpcCommonHelper.getReportArea(rptTpl, unitFactor);
+            for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
                 me.setBandPos(bands, rptTpl[JV.NODE_BAND_COLLECTION][i], orgArea, unitFactor, pageStatus);
             }
         }
     },
     setBandPos: function(bands, bandNode, orgArea, unitFactor, pageStatus) {
-        var me = this, band = bands[bandNode[JV.BAND_PROP_NAME]];
+        let me = this, band = bands[bandNode[JV.BAND_PROP_NAME]];
         //1. initialize
         band[JV.PROP_LEFT] = orgArea[JV.IDX_LEFT];
         band[JV.PROP_TOP] = orgArea[JV.IDX_TOP];
@@ -62,8 +62,8 @@ var JpcBandHelper = {
             }
             //3. set sub-bands
             if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
-                var bandArea = [band.Left, band.Top, band.Right, band.Bottom];
-                for (var i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
+                let bandArea = [band.Left, band.Top, band.Right, band.Bottom];
+                for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
                     me.setBandPos(bands, bandNode[JV.BAND_PROP_SUB_BANDS][i], bandArea, unitFactor, pageStatus);
                 }
             }

+ 25 - 25
modules/reports/rpt_component/helper/Jpc_Helper_Common.js

@@ -1,14 +1,14 @@
-var JV = require('../jpc_value_define');
+let JV = require('../jpc_value_define');
 
-var JpcCommonHelper = {
+let JpcCommonHelper = {
     commonConstant: {},
     getResultByID: function (KeyID, collectionList) {
-        var rst = null;
+        let rst = null;
         if (KeyID) {
-            for (var i = 0; i < collectionList.length; i++) {
-                var collection = collectionList[i];
+            for (let i = 0; i < collectionList.length; i++) {
+                let collection = collectionList[i];
                 if (collection && collection instanceof Array) {
-                    for (var j = 0; j < collection.length; j++) {
+                    for (let j = 0; j < collection.length; j++) {
                         if (collection[j][JV.PROP_ID] === KeyID) {
                             rst = collection[j];
                             break;
@@ -21,38 +21,38 @@ var JpcCommonHelper = {
         return rst;
     },
     getFont: function(fontName, dftFonts, rptTpl) {
-        var me = this, rst = null, list = [];
+        let me = this, rst = null, list = [];
         if (rptTpl) list.push(rptTpl[JV.NODE_FONT_COLLECTION]);
         list.push(dftFonts);
         rst = me.getResultByID(fontName, list);
         return rst;
     },
     getStyle: function(styleName, dftStyles, rptTpl) {
-        var me = this, rst = null, list = [];
+        let me = this, rst = null, list = [];
         if (rptTpl) list.push(rptTpl[JV.NODE_STYLE_COLLECTION]);
         list.push(dftStyles);
         rst = me.getResultByID(styleName, list);
         return rst;
     },
     getControl: function(controlName, dftControls, rptTpl) {
-        var me = this, rst = null, list = [];
+        let me = this, rst = null, list = [];
         if (rptTpl) list.push(rptTpl[JV.NODE_CONTROL_COLLECTION]);
         list.push(dftControls);
         rst = me.getResultByID(controlName, list);
         return rst;
     },
     getLayoutAlignment: function(alignStr) {
-        var rst = JV.LAYOUT.indexOf(alignStr);
+        let rst = JV.LAYOUT.indexOf(alignStr);
         if (rst < 0) rst = JV.LAYOUT_FULFILL;
         return rst;
     },
     getPosCalculationType: function (typeStr) {
-        var rst = JV.CAL_TYPE.indexOf(typeStr);
+        let rst = JV.CAL_TYPE.indexOf(typeStr);
         if (rst < 0) rst = JV.CAL_TYPE_ABSTRACT;
         return rst;
     },
     getScreenDPI: function() {
-        var me = this, arrDPI = [];
+        let me = this, arrDPI = [];
         if (!me.commonConstant.resolution) {
             arrDPI = [96,96];
             me.commonConstant.resolution = arrDPI;
@@ -62,14 +62,14 @@ var JpcCommonHelper = {
         return arrDPI;
     },
     getScreenDPI_bk: function() {
-        var me = this, arrDPI = [];
+        let me = this, arrDPI = [];
         if (!me.commonConstant.resolution) {
             if (window) {
                 if (window.screen.deviceXDPI != undefined) {
                     arrDPI.push(window.screen.deviceXDPI);
                     arrDPI.push(window.screen.deviceYDPI);
                 } else {
-                    var tmpNode = document.createElement("DIV");
+                    let tmpNode = document.createElement("DIV");
                     tmpNode.style.cssText = "width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden";
                     document.body.appendChild(tmpNode);
                     arrDPI.push(parseInt(tmpNode.offsetWidth));
@@ -86,13 +86,13 @@ var JpcCommonHelper = {
         return arrDPI;
     },
     getUnitFactor: function(rptTpl) {
-        var me = this;
+        let me = this;
         return me.translateUnit(rptTpl[JV.NODE_MAIN_INFO][JV.PROP_UNITS]);
     },
     translateUnit: function(unitStr) {
-        var me = this, rst = 1.0;
+        let me = this, rst = 1.0;
         if (unitStr) {
-            var resolution = me.getScreenDPI();
+            let resolution = me.getScreenDPI();
             if (JV.MEASUREMENT.PIXEL.indexOf(unitStr) >= 0) {
                 rst = 1.0;
             } else if (JV.MEASUREMENT.CM.indexOf(unitStr) >= 0) {
@@ -104,9 +104,9 @@ var JpcCommonHelper = {
         return rst;
     },
     getPageSize: function (rptTpl) {
-        var me = this, size = null;
-        var sizeStr = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE];
-        var sizeIdx = JV.PAGES_SIZE_STR.indexOf(sizeStr);
+        let me = this, size = null;
+        let sizeStr = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE];
+        let sizeIdx = JV.PAGES_SIZE_STR.indexOf(sizeStr);
         if (sizeIdx >= 0) {
             size = JV.PAGES_SIZE[sizeIdx].slice(0);
         } else if (sizeStr === JV.PAGE_SELF_DEFINE) {
@@ -114,17 +114,17 @@ var JpcCommonHelper = {
         } else {
             size = JV.SIZE_A4.slice(0);
         }
-        var page_orientation = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION];
+        let page_orientation = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION];
         if (page_orientation === JV.ORIENTATION_LANDSCAPE || page_orientation === JV.ORIENTATION_LANDSCAPE_CHN) {
             //swap x,y
-            var tmp = size[0];
+            let tmp = size[0];
             size[0] = size[1];
             size[1] = tmp;
         }
         return size;
     },
     getReportArea: function(rptTpl, unitFactor) {
-        var me = this, resolution = me.getScreenDPI(), rst = [], size = me.getPageSize(rptTpl);
+        let me = this, resolution = me.getScreenDPI(), rst = [], size = me.getPageSize(rptTpl);
         size[0] = resolution[0] * size[0];
         size[1] = resolution[0] * size[1];
         rst.push(unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT]);
@@ -134,8 +134,8 @@ var JpcCommonHelper = {
         return rst;
     },
     getSegIdxByPageIdx: function(page, page_seg_map) {
-        var rst = -1;
-        for (var pIdx = 0; pIdx < page_seg_map.length; pIdx++) {
+        let rst = -1;
+        for (let pIdx = 0; pIdx < page_seg_map.length; pIdx++) {
             if (page_seg_map[pIdx][0] == page) {
                 rst = page_seg_map[pIdx][1];
                 break;

+ 17 - 17
modules/reports/rpt_component/helper/Jpc_Helper_Discrete.js

@@ -1,32 +1,32 @@
-var JV = require('../jpc_value_define');
-var JE = require('../jpc_rte');
-var JpcTextHelper = require('./jpc_helper_text');
-var JpcCommonOutputHelper = require('./jpc_helper_common_output');
-var JpcAreaHelper = require('./jpc_helper_area');
+let JV = require('../jpc_value_define');
+let JE = require('../jpc_rte');
+let JpcTextHelper = require('./jpc_helper_text');
+let JpcCommonOutputHelper = require('./jpc_helper_common_output');
+let JpcAreaHelper = require('./jpc_helper_area');
 
-var JpcDiscreteHelper = {
+let JpcDiscreteHelper = {
     outputDiscreteInfo: function (discreteArray, bands, dataObj, unitFactor, pageStatus, segIdx, multiCols, multiColIdx, $CURRENT_RPT) {
-        var rst = [];
+        let rst = [];
         if (discreteArray && dataObj) {
-            for (var i = 0; i < discreteArray.length; i++) {
-                var band = bands[discreteArray[i][JV.PROP_BAND_NAME]];
+            for (let i = 0; i < discreteArray.length; i++) {
+                let band = bands[discreteArray[i][JV.PROP_BAND_NAME]];
                 if (band && pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
                     if (discreteArray[i][JV.PROP_TEXT]) {
                         rst.push(JpcTextHelper.outputText(discreteArray[i][JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, multiCols, multiColIdx));
                     }
                     if (discreteArray[i][JV.PROP_TEXTS]) {
-                        for (var j = 0; j < discreteArray[i][JV.PROP_TEXTS].length; j++) {
+                        for (let j = 0; j < discreteArray[i][JV.PROP_TEXTS].length; j++) {
                             rst.push(JpcTextHelper.outputText(discreteArray[i][JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, multiCols, multiColIdx));
                         }
                     }
                     if (discreteArray[i][JV.PROP_DISCRETE_FIELDS]) {
-                        for (var j = 0; j < discreteArray[i][JV.PROP_DISCRETE_FIELDS].length; j++) {
-                            var df = discreteArray[i][JV.PROP_DISCRETE_FIELDS][j];
-                            var value = "";
+                        for (let j = 0; j < discreteArray[i][JV.PROP_DISCRETE_FIELDS].length; j++) {
+                            let df = discreteArray[i][JV.PROP_DISCRETE_FIELDS][j];
+                            let value = "";
                             if (df[JV.PROP_FIELD_ID]) {
-                                var field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
+                                let field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
                                 if (field.DataSeq != JV.BLANK_FIELD_INDEX) {
-                                    var data = dataObj[field.DataNodeName][field.DataSeq];
+                                    let data = dataObj[field.DataNodeName][field.DataSeq];
                                     if (data && data.length > 0) {
                                         if (data.length > segIdx) {
                                             value = data[segIdx];
@@ -39,10 +39,10 @@ var JpcDiscreteHelper = {
                                     else value = "";
                                 }
                             } else if (df[JV.PROP_PARAM_ID]) {
-                                var param = JE.P(df[JV.PROP_PARAM_ID], $CURRENT_RPT);
+                                let param = JE.P(df[JV.PROP_PARAM_ID], $CURRENT_RPT);
                                 value = param[JV.PROP_DFT_VALUE];
                             }
-                            var item = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(df, value, null);
+                            let item = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(df, value, null);
                             //position
                             item[JV.PROP_AREA] = JpcAreaHelper.outputArea(df[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, multiCols, multiColIdx, false, false);
                             rst.push(item);

+ 9 - 9
modules/reports/rpt_component/helper/Jpc_Helper_Field.js

@@ -1,8 +1,8 @@
-var JV = require('../jpc_value_define');
+let JV = require('../jpc_value_define');
 
-var JpcFieldHelper = {
+let JpcFieldHelper = {
     getValue: function(dataField, valueIdx) {
-        var rst = "";
+        let rst = "";
         if (dataField && (dataField.length > valueIdx) && (valueIdx >= 0)) {
             rst = dataField[valueIdx];
         }
@@ -10,8 +10,8 @@ var JpcFieldHelper = {
     },
     decorateValue: function (cell, controls) {
         if (controls) {
-            var val = cell[JV.PROP_VALUE];
-            var showZero = controls[cell[JV.PROP_CONTROL]][JV.PROP_SHOW_ZERO];
+            let val = cell[JV.PROP_VALUE];
+            let showZero = controls[cell[JV.PROP_CONTROL]][JV.PROP_SHOW_ZERO];
             if (showZero && showZero == 'F' ) {
                 if (0.0 == 1.0 * (0 + val)) {
                     cell[JV.PROP_VALUE] = "";
@@ -21,10 +21,10 @@ var JpcFieldHelper = {
     },
     findAndPutDataFieldIdx: function (rptTpl, tab_fields, rstFields, rstFieldsIdx) {
         if (tab_fields) {
-            var detail_fields = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS];
-            for (var i = 0; i < tab_fields.length; i++) {
-                var isFounded = false;
-                for (var j = 0; j < detail_fields.length; j++) {
+            let detail_fields = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS];
+            for (let i = 0; i < tab_fields.length; i++) {
+                let isFounded = false;
+                for (let j = 0; j < detail_fields.length; j++) {
                     if (tab_fields[i]["FieldID"] == detail_fields[j]["ID"]) {
                         isFounded = true;
                         if (rstFields) rstFields.push(tab_fields[i]);

+ 5 - 5
modules/reports/rpt_component/helper/Jpc_Helper_Text.js

@@ -1,10 +1,10 @@
-var JV = require('../jpc_value_define');
-var JpcCommonOutputHelper = require('./jpc_helper_common_output');
-var JpcAreaHelper = require('./jpc_helper_area');
+let JV = require('../jpc_value_define');
+let JpcCommonOutputHelper = require('./jpc_helper_common_output');
+let JpcAreaHelper = require('./jpc_helper_area');
 
-var JpcTextHelper = {
+let JpcTextHelper = {
     outputText: function (textNode, band, unitFactor, rows, rowIdx, cols, colIdx, multiCols, multiColIdx) {
-        var rst = JpcCommonOutputHelper.createCommonOutput(textNode, textNode[JV.PROP_LABEL], null);
+        let rst = JpcCommonOutputHelper.createCommonOutput(textNode, textNode[JV.PROP_LABEL], null);
         //position
         rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(textNode[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, multiCols, multiColIdx, false, false);
         return rst;

+ 7 - 7
modules/reports/rpt_component/helper/jpc_helper_common_output.js

@@ -1,9 +1,9 @@
-var JV = require('../jpc_value_define');
-var JpcFieldHelper = require('./jpc_helper_field');
+let JV = require('../jpc_value_define');
+let JpcFieldHelper = require('./jpc_helper_field');
 
-var JpcCommonOutputHelper = {
+let JpcCommonOutputHelper = {
     createCommonOutputWithoutDecorate: function (node, value, controls) {
-        var rst = {};
+        let rst = {};
         //1. font/style/control
         rst[JV.PROP_FONT] = node[[JV.PROP_FONT]];
         rst[JV.PROP_CONTROL] = node[[JV.PROP_CONTROL]];
@@ -12,7 +12,7 @@ var JpcCommonOutputHelper = {
         rst[JV.PROP_VALUE] = value;
         if (node[JV.PROP_FORMAT]) {
             if (!(isNaN(parseFloat(rst[JV.PROP_VALUE])))) {
-                var dotIdx = node[JV.PROP_FORMAT].indexOf(".");
+                let dotIdx = node[JV.PROP_FORMAT].indexOf(".");
                 if (dotIdx >= 0) {
                     rst[JV.PROP_VALUE] = parseFloat(rst[JV.PROP_VALUE]).toFixed(node[JV.PROP_FORMAT].length - dotIdx - 1);
                 } else {
@@ -29,7 +29,7 @@ var JpcCommonOutputHelper = {
         return rst;
     },
     createCommonOutput: function (node, value, controls) {
-        var rst = {};
+        let rst = {};
         //1. font/style/control
         rst[JV.PROP_FONT] = node[[JV.PROP_FONT]];
         rst[JV.PROP_CONTROL] = node[[JV.PROP_CONTROL]];
@@ -39,7 +39,7 @@ var JpcCommonOutputHelper = {
         JpcFieldHelper.decorateValue(rst, controls);
         if (node[JV.PROP_FORMAT]) {
             if (!(isNaN(parseFloat(rst[JV.PROP_VALUE])))) {
-                var dotIdx = node[JV.PROP_FORMAT].indexOf(".");
+                let dotIdx = node[JV.PROP_FORMAT].indexOf(".");
                 if (dotIdx >= 0) {
                     rst[JV.PROP_VALUE] = parseFloat(rst[JV.PROP_VALUE]).toFixed(node[JV.PROP_FORMAT].length - dotIdx - 1);
                 } else {

+ 42 - 42
modules/reports/rpt_component/helper/jpc_helper_cross_tab.js

@@ -1,12 +1,12 @@
-var JV = require('../jpc_value_define');
-var JpcCommonHelper = require('./jpc_helper_common');
+let JV = require('../jpc_value_define');
+let JpcCommonHelper = require('./jpc_helper_common');
 
-var JpcCrossTabHelper = {
+let JpcCrossTabHelper = {
     getColIDX: function(cl, val) {
-        var rst = -1;
-        for (var i = 0; i < cl.length; i++) {
-            var ca = cl[i];
-            for (var j = 0; j < ca.length; j++) {
+        let rst = -1;
+        for (let i = 0; i < cl.length; i++) {
+            let ca = cl[i];
+            for (let j = 0; j < ca.length; j++) {
                 if (ca[j] == val) {
                     rst = i;
                     break;
@@ -19,25 +19,25 @@ var JpcCrossTabHelper = {
         return rst;
     },
     pushToSeg: function(segArr, dataSeq, segIdx, sIdx, eIdx) {
-        var arrIdx = [];
-        for (var k = sIdx; k < eIdx; k++) {
+        let arrIdx = [];
+        for (let k = sIdx; k < eIdx; k++) {
             arrIdx.push(dataSeq[segIdx][k]);
         }
         segArr.push(arrIdx);
     },
     sortFieldValue: function(sIDX, eIDX, sortOrder, dataField, dataValSeq) {
-        var tmpSeq = [];
+        let tmpSeq = [];
         if ((sortOrder) && (sortOrder != JV.TAB_FIELD_PROP_SORT_VAL_NOSORT)) {
             if (sIDX >= 0 && eIDX >= sIDX && dataValSeq.length > eIDX) {
-                var reversed = 1;
+                let reversed = 1;
                 if (sortOrder === JV.TAB_FIELD_PROP_SORT_VAL_DESC) {
                     reversed = -1;
                 }
-                for (var i = sIDX; i <= eIDX; i++) {
+                for (let i = sIDX; i <= eIDX; i++) {
                     tmpSeq.push(dataValSeq[i]);
                 }
                 tmpSeq.sort(function(idx1, idx2) {
-                    var rst = 0;
+                    let rst = 0;
                     if (isNaN(parseFloat(dataField[idx1])) || isNaN(parseFloat(dataField[idx1]))) {
                         if (dataField[idx1] > dataField[idx2]) {
                             rst = reversed;
@@ -56,15 +56,15 @@ var JpcCrossTabHelper = {
             }
         }
         if (tmpSeq.length > 0) {
-            for (var i = sIDX; i <= eIDX; i++) {
+            for (let i = sIDX; i <= eIDX; i++) {
                 dataValSeq[i] = tmpSeq[i - sIDX];
             }
         }
         return tmpSeq;
     },
     checkIfEqual: function(dataFields, seq1, seq2) {
-        var rst = true;
-        for (var i = 0; i < dataFields.length; i++) {
+        let rst = true;
+        for (let i = 0; i < dataFields.length; i++) {
             if ((dataFields[i][seq1] !== dataFields[i][seq2])) {
                 rst = false;
                 break;
@@ -73,15 +73,15 @@ var JpcCrossTabHelper = {
         return rst;
     },
     sortTabFields: function(tabFields, fieldSeqs, data_details, dataSeq) {
-        var me = this;
-        var sIDX = 0, eIDX = -1, isFirstSort = true;
-        for (var i = 0; i < tabFields.length; i++) {
-            var tabField = tabFields[i];
+        let me = this;
+        let sIDX = 0, eIDX = -1, isFirstSort = true;
+        for (let i = 0; i < tabFields.length; i++) {
+            let tabField = tabFields[i];
             if (tabField[JV.TAB_FIELD_PROP_SORT] != JV.TAB_FIELD_PROP_SORT_VAL_NOSORT) {
                 if (isFirstSort) {
                     isFirstSort = false;
                     //first field, should sort all data items
-                    for (var j = 0; j < dataSeq.length; j++) {
+                    for (let j = 0; j < dataSeq.length; j++) {
                         sIDX = 0;
                         eIDX = dataSeq[j].length - 1;
                         //sort the field value here
@@ -89,13 +89,13 @@ var JpcCrossTabHelper = {
                     }
                 } else {
                     //then sort the rest fields one by one
-                    for (var j = 0; j < dataSeq.length; j++) {
-                        var chkFields = [];
-                        for (var k = 0; k < i; k++) {
+                    for (let j = 0; j < dataSeq.length; j++) {
+                        let chkFields = [];
+                        for (let k = 0; k < i; k++) {
                             chkFields.push(data_details[fieldSeqs[k]]);
                         }
                         sIDX = 0, eIDX = -1;
-                        for (var m = 1; m < dataSeq[j].length; m++) {
+                        for (let m = 1; m < dataSeq[j].length; m++) {
                             if (!(me.checkIfEqual(chkFields, dataSeq[j][m - 1], dataSeq[j][m]))) {
                                 eIDX = m - 1;
                             } else if (m == dataSeq[j].length - 1) {
@@ -115,12 +115,12 @@ var JpcCrossTabHelper = {
         }
     },
     getMaxTabCntPerPage: function(bands, rptTpl, tabNodeName, tabMeasurePropName, measureForCal) {
-        var rst = 1;
+        let rst = 1;
         if (rptTpl[JV.NODE_CROSS_INFO][tabNodeName]) {
-            var tab = rptTpl[JV.NODE_CROSS_INFO][tabNodeName];
-            var maxFieldMeasure = 1.0;
+            let tab = rptTpl[JV.NODE_CROSS_INFO][tabNodeName];
+            let maxFieldMeasure = 1.0;
             if (JV.CAL_TYPE_ABSTRACT == JpcCommonHelper.getPosCalculationType(tab[JV.PROP_CALCULATION])) {
-                var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+                let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
                 maxFieldMeasure = 1.0 * rptTpl[JV.NODE_CROSS_INFO][tabNodeName][tabMeasurePropName] * unitFactor;
             } else {
                 maxFieldMeasure = measureForCal * rptTpl[JV.NODE_CROSS_INFO][tabNodeName][tabMeasurePropName] / JV.HUNDRED_PERCENT;
@@ -130,45 +130,45 @@ var JpcCrossTabHelper = {
         return rst;
     },
     getMaxRowsPerPage: function(bands, rptTpl) {
-        var me = this, rst = 1;
-        var band = bands[rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW][JV.PROP_BAND_NAME]];
+        let me = this, rst = 1;
+        let band = bands[rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW][JV.PROP_BAND_NAME]];
         if (band) {
             rst =  me.getMaxTabCntPerPage(bands, rptTpl, JV.NODE_CROSS_ROW, JV.PROP_CMN_HEIGHT, band.Bottom - band.Top);
         }
         return rst;
     },
     getMaxColsPerPage: function(bands, rptTpl) {
-        var me = this, rst = 1;
-        var band = bands[rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL][JV.PROP_BAND_NAME]];
+        let me = this, rst = 1;
+        let band = bands[rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL][JV.PROP_BAND_NAME]];
         if (band) {
             rst =  me.getMaxTabCntPerPage(bands, rptTpl, JV.NODE_CROSS_COL, JV.PROP_CMN_WIDTH, band.Right - band.Left);
         }
         return rst;
     },
     chkTabEnd: function(tabType, rptTpl, bands, sortedSequence, segIdx, preRec, nextRec) {
-        var me = this, rst = true;
-        var remainAmt = preRec + nextRec - sortedSequence[segIdx].length;
+        let me = this, rst = true;
+        let remainAmt = preRec + nextRec - sortedSequence[segIdx].length;
         rst = me.hasEnoughSpace(tabType, rptTpl, bands, remainAmt);
         return rst;
     },
     hasEnoughSpace: function (tabType, rptTpl, bands, remainAmt) {
         if (remainAmt < 0) return false;
-        var rst = true, measurement = 1.0, douDiffForCompare = 0.00001;
-        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
-        var band = null;
+        let rst = true, measurement = 1.0, douDiffForCompare = 0.00001;
+        let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        let band = null;
         if (rptTpl[JV.NODE_CROSS_INFO][tabType]) {
             band = bands[rptTpl[JV.NODE_CROSS_INFO][tabType][JV.PROP_BAND_NAME]];
         }
         if (band != null && band != undefined) {
             if (tabType === JV.NODE_CROSS_ROW_SUM || tabType === JV.NODE_CROSS_ROW_EXT) {
                 measurement = 1.0 * rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW][JV.PROP_CMN_HEIGHT] * unitFactor;
-                var spareHeight = measurement * remainAmt;
-                var douH = 1.0 * (band.Bottom - band.Top);
+                let spareHeight = measurement * remainAmt;
+                let douH = 1.0 * (band.Bottom - band.Top);
                 rst = (spareHeight >= douH) || (spareHeight - douH <= douDiffForCompare);
             } else if (tabType === JV.NODE_CROSS_COL_SUM) {
                 measurement = 1.0 * rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL][JV.PROP_CMN_WIDTH] * unitFactor;
-                var spareWidth = measurement * remainAmt;
-                var douW = 1.0 * (band.Right - band.Left);
+                let spareWidth = measurement * remainAmt;
+                let douW = 1.0 * (band.Right - band.Left);
                 rst = (spareWidth >= douW) || (spareWidth - douW <= douDiffForCompare);
             }
         }

+ 16 - 16
modules/reports/rpt_component/helper/jpc_helper_flow_tab.js

@@ -1,15 +1,15 @@
-var JV = require('../jpc_value_define');
-var JpcCommonHelper = require('./jpc_helper_common');
+let JV = require('../jpc_value_define');
+let JpcCommonHelper = require('./jpc_helper_common');
 
-var JpcFlowTabHelper = {
+let JpcFlowTabHelper = {
     getMaxRowsPerPage: function(bands, rptTpl) {
-        var me = this, rst = 1;
-        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let me = this, rst = 1;
+        let tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var maxFieldMeasure = 1.0;
+            let maxFieldMeasure = 1.0;
             if (JV.CAL_TYPE_ABSTRACT == JpcCommonHelper.getPosCalculationType(tab[JV.PROP_CALCULATION])) {
-                var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+                let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
                 maxFieldMeasure = 1.0 * rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_CMN_HEIGHT] * unitFactor;
             } else {
                 maxFieldMeasure = (band.Bottom - band.Top) * rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_CMN_HEIGHT] / JV.HUNDRED_PERCENT;
@@ -19,21 +19,21 @@ var JpcFlowTabHelper = {
         return rst;
     },
     chkSegEnd: function (bands, rptTpl, sortedSequence, segIdx, preRec, nextRec) {
-        var me = this, rst = true;
-        var remainAmt = preRec + nextRec - sortedSequence[segIdx].length;
+        let me = this, rst = true;
+        let remainAmt = preRec + nextRec - sortedSequence[segIdx].length;
         rst = me.hasEnoughSpace(rptTpl, bands, remainAmt);
         return rst;
     },
     hasEnoughSpace: function (rptTpl, bands, remainAmt) {
         if (remainAmt < 0) return false;
-        var rst = true, measurement = 1.0, douDiffForCompare = 0.00001;
-        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
-        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let rst = true, measurement = 1.0, douDiffForCompare = 0.00001;
+        let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        let tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band != null && band != undefined) {
             measurement = 1.0 * tab[JV.PROP_CMN_HEIGHT] * unitFactor;
-            var spareHeight = measurement * remainAmt;
-            var douH = 1.0 * (band.Bottom - band.Top);
+            let spareHeight = measurement * remainAmt;
+            let douH = 1.0 * (band.Bottom - band.Top);
             rst = (spareHeight >= douH) || (spareHeight - douH <= douDiffForCompare);
         }
         return rst;

+ 27 - 27
modules/reports/rpt_component/jpc_bill_tab.js

@@ -1,48 +1,48 @@
-var JV = require('./jpc_value_define');
-var JpcFieldHelper = require('./helper/jpc_helper_field');
-var JpcBandHelper = require('./helper/jpc_helper_band');
-var JpcBand = require('./jpc_band');
-var JpcFlowTabHelper = require('./helper/jpc_helper_flow_tab');
-var JpcCommonHelper = require('./helper/jpc_helper_common');
-var JpcDiscreteHelper = require('./helper/jpc_helper_discrete');
-var JpcTextHelper = require('./helper/jpc_helper_text');
-var JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');
-var JpcAreaHelper = require('./helper/jpc_helper_area');
+let JV = require('./jpc_value_define');
+let JpcFieldHelper = require('./helper/jpc_helper_field');
+let JpcBandHelper = require('./helper/jpc_helper_band');
+let JpcBand = require('./jpc_band');
+let JpcFlowTabHelper = require('./helper/jpc_helper_flow_tab');
+let JpcCommonHelper = require('./helper/jpc_helper_common');
+let JpcDiscreteHelper = require('./helper/jpc_helper_discrete');
+let JpcTextHelper = require('./helper/jpc_helper_text');
+let JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');
+let JpcAreaHelper = require('./helper/jpc_helper_area');
 
-var JpcBillTabSrv = function(){};
+let JpcBillTabSrv = function(){};
 JpcBillTabSrv.prototype.createNew = function(){
-    var JpcBillTabResult = {};
+    let JpcBillTabResult = {};
     JpcBillTabResult.initialize = function() {
-        var me = this;
+        let me = this;
         me.disp_fields_idx = [];
     };
     JpcBillTabResult.sorting = function(rptTpl) {
-        var me = this;
+        let me = this;
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT][JV.PROP_BILL_FIELDS], null, me.disp_fields_idx);
     };
     JpcBillTabResult.outputAsSimpleJSONPage = function (rptTpl, dataObj, page, bands, controls, $CURRENT_RPT) {
-        var me = this, rst = [], tabRstLst = [];
+        let me = this, rst = [], tabRstLst = [];
         //1 calculate the band position
-        var pageStatus = [true, false, false, false, false, false, false, false];
+        let pageStatus = [true, false, false, false, false, false, false, false];
         JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
         //2. start to output detail-part
-        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
         //2.1 output content
         tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus));
         //2.2 output discrete
         tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, $CURRENT_RPT));
     }
     JpcBillTabResult.outputContent = function(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus) {
-        var me = this, rst = [];
-        var tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let me = this, rst = [];
+        let tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
-                var tab_fields = tab[JV.PROP_BILL_FIELDS];
-                var data_details = dataObj[JV.DATA_MASTER_DATA];
-                for (var i = 0; i < tab_fields.length; i++) {
-                    var tab_field = tab_fields[i];
-                    var data_field = null;
+                let tab_fields = tab[JV.PROP_BILL_FIELDS];
+                let data_details = dataObj[JV.DATA_MASTER_DATA];
+                for (let i = 0; i < tab_fields.length; i++) {
+                    let tab_field = tab_fields[i];
+                    let data_field = null;
                     if (me.disp_fields_idx[i] != JV.BLANK_FIELD_INDEX) {
                         data_field = data_details[me.disp_fields_idx[i]];
                     } else {
@@ -52,7 +52,7 @@ JpcBillTabSrv.prototype.createNew = function(){
                         }
                     }
                     if (!(tab_field[JV.PROP_HIDDEN])) {
-                        var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, JpcFieldHelper.getValue(data_field, page - 1), controls);
+                        let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, JpcFieldHelper.getValue(data_field, page - 1), controls);
                         cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, true, false);
                         rst.push(cellItem);
                     }
@@ -61,7 +61,7 @@ JpcBillTabSrv.prototype.createNew = function(){
                     rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
                 }
                 if (tab[JV.PROP_TEXTS]) {
-                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                    for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
                         rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
                     }
                 }

+ 158 - 158
modules/reports/rpt_component/jpc_cross_tab.js

@@ -1,37 +1,37 @@
-var JV = require('./jpc_value_define');
-var JpcFieldHelper = require('./helper/jpc_helper_field');
-var JpcBandHelper = require('./helper/jpc_helper_band');
-var JpcBand = require('./jpc_band');
-var JpcFlowTabHelper = require('./helper/jpc_helper_flow_tab');
-var JpcCrossTabHelper = require('./helper/jpc_helper_cross_tab');
-var JpcCommonHelper = require('./helper/jpc_helper_common');
-var JpcDiscreteHelper = require('./helper/jpc_helper_discrete');
-var JpcTextHelper = require('./helper/jpc_helper_text');
-var JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');
-var JpcAreaHelper = require('./helper/jpc_helper_area');
+let JV = require('./jpc_value_define');
+let JpcFieldHelper = require('./helper/jpc_helper_field');
+let JpcBandHelper = require('./helper/jpc_helper_band');
+let JpcBand = require('./jpc_band');
+let JpcFlowTabHelper = require('./helper/jpc_helper_flow_tab');
+let JpcCrossTabHelper = require('./helper/jpc_helper_cross_tab');
+let JpcCommonHelper = require('./helper/jpc_helper_common');
+let JpcDiscreteHelper = require('./helper/jpc_helper_discrete');
+let JpcTextHelper = require('./helper/jpc_helper_text');
+let JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');
+let JpcAreaHelper = require('./helper/jpc_helper_area');
 
-var JpcCrossTabSrv = function(){};
+let JpcCrossTabSrv = function(){};
 JpcCrossTabSrv.prototype.createNew = function(){
     function private_addTabValue(tabValuedIdxLst, sortedSequence, segIdx, preRec, nextRec, dispSerialIdxLst, sorted_sum_value_Lst, rst_sum_value_Lst) {
         if (tabValuedIdxLst) {
-            var serial1stTier = null;
+            let serial1stTier = null;
             if (dispSerialIdxLst) serial1stTier = [];
-            var pgseg1stTier = [];
-            var sumVal = [];
-            var sumValL = 1;
+            let pgseg1stTier = [];
+            let sumVal = [];
+            let sumValL = 1;
             if (sortedSequence) {
-                var arrDupVals = sortedSequence[segIdx];
-                var arrDupSumVals = null;
+                let arrDupVals = sortedSequence[segIdx];
+                let arrDupSumVals = null;
                 if (sorted_sum_value_Lst != null) {
                     arrDupSumVals = sorted_sum_value_Lst[segIdx];
                     sumValL = arrDupSumVals[0].length;
                 }
 
-                for (var i = 0; i < nextRec; i++) {
+                for (let i = 0; i < nextRec; i++) {
                     if (arrDupVals.length <= preRec + i) {
                         pgseg1stTier[i] = JV.BLANK_VALUE_INDEX;
                         sumVal[i] = [];
-                        for (var ei = 0; ei < sumValL; ei++) {
+                        for (let ei = 0; ei < sumValL; ei++) {
                             sumVal[i][ei] = null;
                         }
                         if (serial1stTier != null) {
@@ -39,7 +39,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                         }
                         continue;
                     }
-                    var duplicateValueArr = arrDupVals[preRec + i];
+                    let duplicateValueArr = arrDupVals[preRec + i];
                     pgseg1stTier[i] = duplicateValueArr[0];
                     if (arrDupSumVals != null) sumVal[i] = arrDupSumVals[preRec + i];
 
@@ -56,7 +56,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 }
             } else {
                 //should push blank value index rather than null
-                for (var i = 0; i < nextRec; i++) {
+                for (let i = 0; i < nextRec; i++) {
                     pgseg1stTier[i] = JV.BLANK_VALUE_INDEX;
                     sumVal[i] = null;
                     if (serial1stTier != null) {
@@ -76,12 +76,12 @@ JpcCrossTabSrv.prototype.createNew = function(){
     function private_addContentValue(dispValueIdxLst_Content, sortedContentSequence, segIdx, counterRowRec, maxRowRec, counterColRec, maxColRec, page_seg_map, pageIdx) {
         if (dispValueIdxLst_Content != null) {
             page_seg_map.push([pageIdx,segIdx]);
-            var arrContents = [];
+            let arrContents = [];
             if (sortedContentSequence != null) {
-                var arrAllContent = sortedContentSequence[segIdx];
-                for (var i = 0; i < maxRowRec; i++) {
+                let arrAllContent = sortedContentSequence[segIdx];
+                for (let i = 0; i < maxRowRec; i++) {
                     arrContents.push([]);
-                    for (var j = 0; j < maxColRec; j++) {
+                    for (let j = 0; j < maxColRec; j++) {
                         if (arrAllContent.length <= counterRowRec + i || arrAllContent[counterRowRec + i].length <= counterColRec + j) {
                             arrContents[i][j] = JV.BLANK_VALUE_INDEX;
                         } else {
@@ -92,9 +92,9 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 dispValueIdxLst_Content.push(arrContents);
             } else {
                 //should push blank value index rather than null
-                for (var i = 0; i < maxRowRec; i++) {
+                for (let i = 0; i < maxRowRec; i++) {
                     arrContents.push([]);
-                    for (var j = 0; j < maxColRec; j++) {
+                    for (let j = 0; j < maxColRec; j++) {
                         arrContents[i][j] = JV.BLANK_VALUE_INDEX;
                     }
                 }
@@ -103,26 +103,26 @@ JpcCrossTabSrv.prototype.createNew = function(){
         }
     }
     function private_SortAndOptimize(rptTpl, dataObj, dataSeq, sortTab, rstFieldsIdx) {
-        var result = [];
-        var tab = rptTpl[JV.NODE_CROSS_INFO][sortTab];
+        let result = [];
+        let tab = rptTpl[JV.NODE_CROSS_INFO][sortTab];
         if (tab) {
-            var sIDX = 0;
+            let sIDX = 0;
             //1. prepare and sort by tab-field
-            var fields = [];
+            let fields = [];
             JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, tab[JV.TAB_CROSS_FIELDS], fields, rstFieldsIdx);
-            var data_details = dataObj[JV.DATA_DETAIL_DATA];
+            let data_details = dataObj[JV.DATA_DETAIL_DATA];
             JpcCrossTabHelper.sortTabFields(fields, rstFieldsIdx, data_details, dataSeq);
             //2. distinguish sort tab fields value
-            var b1 = false;
-            for (var i = 0; i < dataSeq.length; i++) {
+            let b1 = false;
+            for (let i = 0; i < dataSeq.length; i++) {
                 sIDX = 0;
-                var segArr = [];
+                let segArr = [];
                 if (dataSeq[i].length == 1) {
                     JpcCrossTabHelper.pushToSeg(segArr, dataSeq, i, 0, 1);
                 } else {
-                    for (var j = 1; j < dataSeq[i].length; j++) {
+                    for (let j = 1; j < dataSeq[i].length; j++) {
                         b1 = false;
-                        for (var k = 0; k < rstFieldsIdx.length; k++) {
+                        for (let k = 0; k < rstFieldsIdx.length; k++) {
                             if (data_details[rstFieldsIdx[k]][dataSeq[i][j - 1]] != data_details[rstFieldsIdx[k]][dataSeq[i][j]]) {
                                 b1 = true;
                                 break;
@@ -145,26 +145,26 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return result;
     }
     function private_SortForDisplayContent(rptTpl, rowSeq, colSeq, rstFieldsIdx){
-        var result = [];
-        var tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
+        let result = [];
+        let tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
         if (tab) {
             JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, tab[JV.TAB_CROSS_FIELDS], null, rstFieldsIdx);
         }
-        for (var i = 0; i < rowSeq.length; i++) {
-            var rl = rowSeq[i], cl = colSeq[i];
-            var ds = [];
+        for (let i = 0; i < rowSeq.length; i++) {
+            let rl = rowSeq[i], cl = colSeq[i];
+            let ds = [];
             //1. initialize to blank value index
-            for (var j = 0; j < rl.length; j++) {
+            for (let j = 0; j < rl.length; j++) {
                 ds.push([]);
-                for (var k = 0; k < cl.length; k++) {
+                for (let k = 0; k < cl.length; k++) {
                     ds[j].push(JV.BLANK_VALUE_INDEX);
                 }
             }
             //2. then fill up the right index
-            for (var j = 0; j < rl.length; j++) {
-                var ra = rl[j];
-                for (var k = 0; k < ra.length; k++) {
-                    var colIdx = JpcCrossTabHelper.getColIDX(cl, ra[k]);
+            for (let j = 0; j < rl.length; j++) {
+                let ra = rl[j];
+                for (let k = 0; k < ra.length; k++) {
+                    let colIdx = JpcCrossTabHelper.getColIDX(cl, ra[k]);
                     if (colIdx >= 0) {
                         ds[j][colIdx] = ra[k];
                     }
@@ -175,9 +175,9 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return result;
     }
 
-    var JpcCrossTabResult = {};
+    let JpcCrossTabResult = {};
     JpcCrossTabResult.initialize = function() {
-        var me = this;
+        let me = this;
         me.dispValueIdxLst_Row = [];
         me.dispValueIdxLst_Col = [];
         me.dispValueIdxLst_Content = [];
@@ -195,27 +195,27 @@ JpcCrossTabSrv.prototype.createNew = function(){
         me.pageStatusLst = [];
     };
     JpcCrossTabResult.sorting = function(rptTpl, dataObj, dataSeq) {
-        var me = this;
+        let me = this;
         //IMPORTANT: the data should be sorted in SQL/NoSQL level!
         me.sortedRowSequence = private_SortAndOptimize(rptTpl, dataObj, dataSeq, JV.NODE_CROSS_ROW, me.row_fields_idx);
         me.sortedColSequence = private_SortAndOptimize(rptTpl, dataObj, dataSeq, JV.NODE_CROSS_COL, me.col_fields_idx);
         me.sortedContentSequence = private_SortForDisplayContent(rptTpl, me.sortedRowSequence, me.sortedColSequence, me.content_fields_idx);
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL_SUM][JV.TAB_CROSS_FIELDS], null, me.col_sum_fields_idx);
         //pre-sum the data(for col sum display)
-        var data_details = dataObj[JV.DATA_DETAIL_DATA],
+        let data_details = dataObj[JV.DATA_DETAIL_DATA],
             data_fields = [];
-        for (var i = 0; i < me.col_sum_fields_idx.length; i++) {
-            var data_field = data_details[me.col_sum_fields_idx[i]];
+        for (let i = 0; i < me.col_sum_fields_idx.length; i++) {
+            let data_field = data_details[me.col_sum_fields_idx[i]];
             data_fields.push(data_field);
         }
-        for (var i = 0; i < me.sortedRowSequence.length; i++) { //seg level
+        for (let i = 0; i < me.sortedRowSequence.length; i++) { //seg level
             if (me.sortedRowSequence[i].length > 0) {
                 me.col_sum_fields_value_total.push([]);
-                for (var j = 0; j < me.sortedRowSequence[i].length; j++) {
-                    var rowGrandTotal = [];
-                    for (var di = 0; di < data_fields.length; di++) {
+                for (let j = 0; j < me.sortedRowSequence[i].length; j++) {
+                    let rowGrandTotal = [];
+                    for (let di = 0; di < data_fields.length; di++) {
                         rowGrandTotal.push(0.0);
-                        for (var k = 0; k < me.sortedRowSequence[i][j].length; k++) {
+                        for (let k = 0; k < me.sortedRowSequence[i][j].length; k++) {
                             //3. start to sum
                             rowGrandTotal[di] = rowGrandTotal[di] + 1.0 * JpcFieldHelper.getValue(data_fields[di], me.sortedRowSequence[i][j][k]);
                         }
@@ -227,12 +227,12 @@ JpcCrossTabSrv.prototype.createNew = function(){
         }
     };
     JpcCrossTabResult.preSetupPages = function(rptTpl, defProperties) {
-        var rst = 0, me = this;
+        let rst = 0, me = this;
         //1. original initialize
-        var maxRowRec = 1, maxColRec = 1, counterRowRec = 0, counterColRec = 0, pageIdx = 0, segCnt = me.sortedContentSequence.length;
-        var pageStatus = [true, true, false, true, false, false, false, false];
+        let maxRowRec = 1, maxColRec = 1, counterRowRec = 0, counterColRec = 0, pageIdx = 0, segCnt = me.sortedContentSequence.length;
+        let pageStatus = [true, true, false, true, false, false, false, false];
         //2. calculate the page info one by one
-        var bands = JpcBand.createNew(rptTpl, defProperties);
+        let bands = JpcBand.createNew(rptTpl, defProperties);
         function private_resetBandArea() {
             JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
             maxRowRec = JpcCrossTabHelper.getMaxRowsPerPage(bands, rptTpl);
@@ -240,45 +240,45 @@ JpcCrossTabSrv.prototype.createNew = function(){
         }
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_EXT][JV.TAB_CROSS_FIELDS], null, me.row_extension_fields_idx);
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_SUM_EXT][JV.TAB_CROSS_FIELDS], null, me.row_sum_extension_fields_idx);
-        for (var segIdx = 0; segIdx < segCnt; segIdx++) {
+        for (let segIdx = 0; segIdx < segCnt; segIdx++) {
             //2.1. seg level initialize
             private_resetBandArea();
-            var orgMaxRowRec = maxRowRec, orgMaxColRec = maxColRec;
-            var rowSplitCnt = Math.ceil(1.0 * me.sortedRowSequence[segIdx].length / maxRowRec);
-            var colSplitCnt = Math.ceil(1.0 * me.sortedColSequence[segIdx].length / maxColRec);
+            let orgMaxRowRec = maxRowRec, orgMaxColRec = maxColRec;
+            let rowSplitCnt = Math.ceil(1.0 * me.sortedRowSequence[segIdx].length / maxRowRec);
+            let colSplitCnt = Math.ceil(1.0 * me.sortedColSequence[segIdx].length / maxColRec);
             pageStatus[JV.STATUS_CROSS_ROW_END] = true;
             private_resetBandArea();
-            var hasAdHocRow = !JpcCrossTabHelper.chkTabEnd(JV.NODE_CROSS_ROW_SUM, rptTpl, bands, me.sortedRowSequence, segIdx, (rowSplitCnt - 1) * orgMaxRowRec, maxRowRec);
+            let hasAdHocRow = !JpcCrossTabHelper.chkTabEnd(JV.NODE_CROSS_ROW_SUM, rptTpl, bands, me.sortedRowSequence, segIdx, (rowSplitCnt - 1) * orgMaxRowRec, maxRowRec);
             if (hasAdHocRow) {
                 hasAdHocRow = !JpcCrossTabHelper.chkTabEnd(JV.NODE_CROSS_ROW_EXT, rptTpl, bands, me.sortedRowSequence, segIdx, (rowSplitCnt - 1) * orgMaxRowRec, maxRowRec);
             }
             pageStatus[JV.STATUS_CROSS_ROW_END] = false;
             pageStatus[JV.STATUS_CROSS_COL_END] = true;
             private_resetBandArea();
-            var hasAdHocCol = !JpcCrossTabHelper.chkTabEnd(JV.NODE_CROSS_COL_SUM, rptTpl, bands, me.sortedColSequence, segIdx, (colSplitCnt - 1) * orgMaxColRec, maxColRec);
+            let hasAdHocCol = !JpcCrossTabHelper.chkTabEnd(JV.NODE_CROSS_COL_SUM, rptTpl, bands, me.sortedColSequence, segIdx, (colSplitCnt - 1) * orgMaxColRec, maxColRec);
             pageStatus[JV.STATUS_CROSS_COL_END] = false;
             private_resetBandArea();
             if (hasAdHocRow) rowSplitCnt++;
             if (hasAdHocCol) colSplitCnt++;
             //2.2
-            for (var colIdx = 0; colIdx < colSplitCnt; colIdx++) {
+            for (let colIdx = 0; colIdx < colSplitCnt; colIdx++) {
                 pageStatus[JV.STATUS_CROSS_COL_END] = colIdx == (colSplitCnt - 1)?true:false;
                 private_resetBandArea();
                 counterColRec = orgMaxColRec * colIdx;
-                var currentSortedContentSequence = me.sortedContentSequence;
-                var currentSortedColSequence = me.sortedColSequence;
+                let currentSortedContentSequence = me.sortedContentSequence;
+                let currentSortedColSequence = me.sortedColSequence;
                 if (hasAdHocCol && colIdx == (colSplitCnt - 1)) {
                     currentSortedColSequence = null;
                     currentSortedContentSequence = null;
                     counterColRec = 0;
                 }
-                for (var rowIdx = 0; rowIdx < rowSplitCnt; rowIdx++) {
+                for (let rowIdx = 0; rowIdx < rowSplitCnt; rowIdx++) {
                     pageStatus[JV.STATUS_CROSS_ROW_END] = rowIdx == (rowSplitCnt - 1)?true:false;
                     private_resetBandArea();
                     me.pageStatusLst.push(pageStatus.slice(0));
                     pageIdx++;
                     counterRowRec = orgMaxRowRec * rowIdx;
-                    var currentSortedRowSequence = me.sortedRowSequence;
+                    let currentSortedRowSequence = me.sortedRowSequence;
                     if (hasAdHocRow && rowIdx == (rowSplitCnt - 1)) {
                         currentSortedRowSequence = null;
                         currentSortedContentSequence = null;
@@ -297,12 +297,12 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcCrossTabResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, page, bands, controls, $CURRENT_RPT) {
-        var me = this, rst = [], tabRstLst = [];
-        var segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
+        let me = this, rst = [], tabRstLst = [];
+        let segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
         //1 calculate the band position
         JpcBandHelper.setBandArea(bands, rptTpl, me.pageStatusLst[page - 1]);
         //2. start to output detail-part
-        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
         //2.1 Row-Tab
         tabRstLst.push(me.outputRowTab(rptTpl, dataObj, page, bands, unitFactor, controls));
         //2.2 Col-Tab
@@ -317,29 +317,29 @@ JpcCrossTabSrv.prototype.createNew = function(){
         tabRstLst.push(me.outputSumTabExt(rptTpl, dataObj, page, bands, unitFactor, segIdx, controls));
         //2.5 Discrete
         tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT));
-        for (var i = 0; i < tabRstLst.length; i++) {
+        for (let i = 0; i < tabRstLst.length; i++) {
             rst = rst.concat(tabRstLst[i]);
             tabRstLst[i] = null;
         }
         return rst;
     };
     JpcCrossTabResult.outputRowTab = function(rptTpl, dataObj, page, bands, unitFactor, controls) {
-        var me = this, rst = [];
-        var tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let me = this, rst = [];
+        let tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
-                var tab_fields = tab[JV.TAB_CROSS_FIELDS];
-                var data_details = dataObj[JV.DATA_DETAIL_DATA];
-                var valuesIdx = me.dispValueIdxLst_Row[page - 1];
-                var serialsIdx = me.dispSerialIdxLst_Row[page - 1];
-                for (var i = 0; i < me.row_fields_idx.length; i++) {
-                    var tab_field = tab_fields[i];
-                    var data_field = data_details[me.row_fields_idx[i]];
+                let tab_fields = tab[JV.TAB_CROSS_FIELDS];
+                let data_details = dataObj[JV.DATA_DETAIL_DATA];
+                let valuesIdx = me.dispValueIdxLst_Row[page - 1];
+                let serialsIdx = me.dispSerialIdxLst_Row[page - 1];
+                for (let i = 0; i < me.row_fields_idx.length; i++) {
+                    let tab_field = tab_fields[i];
+                    let data_field = data_details[me.row_fields_idx[i]];
                     if (!(tab_field[JV.PROP_HIDDEN])) {
-                        var rows = valuesIdx.length;
-                        for (var rowIdx = 0; rowIdx < rows; rowIdx++) {
+                        let rows = valuesIdx.length;
+                        for (let rowIdx = 0; rowIdx < rows; rowIdx++) {
                             rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[rowIdx], serialsIdx[rowIdx], rows, rowIdx, 1, 0, unitFactor, true, controls));
                         }
                     }
@@ -349,21 +349,21 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcCrossTabResult.outputColTab = function(rptTpl, dataObj, page, bands, unitFactor, controls) {
-        var me = this, rst = [], firstTextOutput = true;
-        var tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let me = this, rst = [], firstTextOutput = true;
+        let tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
-                var tab_fields = tab[JV.TAB_CROSS_FIELDS];
-                var data_details = dataObj[JV.DATA_DETAIL_DATA];
-                var valuesIdx = me.dispValueIdxLst_Col[page - 1];
-                for (var i = 0; i < me.col_fields_idx.length; i++) {
-                    var tab_field = tab_fields[i];
-                    var data_field = data_details[me.col_fields_idx[i]];
+                let tab_fields = tab[JV.TAB_CROSS_FIELDS];
+                let data_details = dataObj[JV.DATA_DETAIL_DATA];
+                let valuesIdx = me.dispValueIdxLst_Col[page - 1];
+                for (let i = 0; i < me.col_fields_idx.length; i++) {
+                    let tab_field = tab_fields[i];
+                    let data_field = data_details[me.col_fields_idx[i]];
                     if (!(tab_field[JV.PROP_HIDDEN])) {
-                        var cols = valuesIdx.length;
-                        for (var colIdx = 0; colIdx < cols; colIdx++) {
+                        let cols = valuesIdx.length;
+                        for (let colIdx = 0; colIdx < cols; colIdx++) {
                             rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
                             //2. output texts
                             if (firstTextOutput) {
@@ -371,7 +371,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                                     rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                 }
                                 if (tab[JV.PROP_TEXTS]) {
-                                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                                    for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
                                         rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                     }
                                 }
@@ -385,23 +385,23 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcCrossTabResult.outputContent = function (rptTpl, dataObj, page, bands, unitFactor, controls) {
-        var me = this, rst = [];
-        var tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let me = this, rst = [];
+        let tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
-                var tab_fields = tab[JV.TAB_CROSS_FIELDS];
-                var data_details = dataObj[JV.DATA_DETAIL_DATA];
-                var contentValuesIdx = me.dispValueIdxLst_Content[page - 1];
-                for (var i = 0; i < tab_fields.length; i++) {
-                    var tab_field = tab_fields[i];
-                    var data_field = data_details[me.content_fields_idx[i]];
+                let tab_fields = tab[JV.TAB_CROSS_FIELDS];
+                let data_details = dataObj[JV.DATA_DETAIL_DATA];
+                let contentValuesIdx = me.dispValueIdxLst_Content[page - 1];
+                for (let i = 0; i < tab_fields.length; i++) {
+                    let tab_field = tab_fields[i];
+                    let data_field = data_details[me.content_fields_idx[i]];
                     if (!(tab_field[JV.PROP_HIDDEN])) {
-                        var rows = contentValuesIdx.length;
-                        for (var rowIdx = 0; rowIdx < rows; rowIdx++) {
-                            var cols = contentValuesIdx[rowIdx].length;
-                            for (var colIdx = 0; colIdx < cols; colIdx++) {
+                        let rows = contentValuesIdx.length;
+                        for (let rowIdx = 0; rowIdx < rows; rowIdx++) {
+                            let cols = contentValuesIdx[rowIdx].length;
+                            for (let colIdx = 0; colIdx < cols; colIdx++) {
                                 rst.push(me.outputTabField(band, tab_field, data_field, contentValuesIdx[rowIdx][colIdx], -1, rows, rowIdx, cols, colIdx, unitFactor, true, controls));
                             }
                         }
@@ -412,34 +412,34 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcCrossTabResult.outputTabSum = function (rptTpl, dataObj, page, bands, unitFactor, tabNodeName, controls) {
-        var me = this, rst = [],
+        let me = this, rst = [],
             tab = rptTpl[JV.NODE_CROSS_INFO][tabNodeName],
             band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
-                var tab_fields = tab[JV.TAB_CROSS_FIELDS];
-                for (var i = 0; i < me.dispSumValueLst_Col[page - 1].length; i++) {
+                let tab_fields = tab[JV.TAB_CROSS_FIELDS];
+                for (let i = 0; i < me.dispSumValueLst_Col[page - 1].length; i++) {
                     if (me.dispSumValueLst_Col[page - 1][i] != null) {
-                        for (var j = 0; j < me.dispSumValueLst_Col[page - 1][i].length; j++) {
-                            var tab_field = tab_fields[j];
-                            var val = me.dispSumValueLst_Col[page - 1][i][j];
-                            var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
+                        for (let j = 0; j < me.dispSumValueLst_Col[page - 1][i].length; j++) {
+                            let tab_field = tab_fields[j];
+                            let val = me.dispSumValueLst_Col[page - 1][i][j];
+                            let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
                             cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, me.dispSumValueLst_Col[page - 1].length, i, 1, 0, 1, 0, true, false);
                             rst.push(cellItem);
                         }
                     } else {
-                        var sumL = 1;
-                        for (var si = 0; si < me.dispSumValueLst_Col.length; si++) {
+                        let sumL = 1;
+                        for (let si = 0; si < me.dispSumValueLst_Col.length; si++) {
                             if (me.dispSumValueLst_Col[si][0] != null) {
                                 sumL = me.dispSumValueLst_Col[si][0].length;
                                 break;
                             }
                         }
-                        for (var j = 0; j < sumL; j++) {
-                            var tab_field = tab_fields[j];
-                            var val = null;
-                            var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
+                        for (let j = 0; j < sumL; j++) {
+                            let tab_field = tab_fields[j];
+                            let val = null;
+                            let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
                             cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, me.dispSumValueLst_Col[page - 1].length, i, 1, 0, 1, 0, true, false);
                             rst.push(cellItem);
                         }
@@ -450,21 +450,21 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcCrossTabResult.outputTabExt = function (rptTpl, dataObj, page, bands, unitFactor, controls) {
-        var me = this, rst = [], firstTextOutput = true,
+        let me = this, rst = [], firstTextOutput = true,
             tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_EXT];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
-                var tab_fields = tab[JV.TAB_CROSS_FIELDS],
+                let tab_fields = tab[JV.TAB_CROSS_FIELDS],
                     data_details = dataObj[JV.DATA_DETAIL_DATA],
                     valuesIdx = me.dispValueIdxLst_Col[page - 1];
-                for (var i = 0; i < me.row_extension_fields_idx.length; i++) {
-                    var tab_field = tab_fields[i];
-                    var data_field = data_details[me.row_extension_fields_idx[i]];
+                for (let i = 0; i < me.row_extension_fields_idx.length; i++) {
+                    let tab_field = tab_fields[i];
+                    let data_field = data_details[me.row_extension_fields_idx[i]];
                     if (!(tab_field[JV.PROP_HIDDEN])) {
-                        var cols = valuesIdx.length;
-                        for (var colIdx = 0; colIdx < cols; colIdx++) {
+                        let cols = valuesIdx.length;
+                        for (let colIdx = 0; colIdx < cols; colIdx++) {
                             rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
                             //2. output texts if has
                             if (firstTextOutput) {
@@ -472,7 +472,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                                     rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                 }
                                 if (tab[JV.PROP_TEXTS]) {
-                                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                                    for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
                                         rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                     }
                                 }
@@ -486,35 +486,35 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcCrossTabResult.outputSumTabExt = function (rptTpl, dataObj, page, bands, unitFactor, segIdx, controls) {
-        var me = this, rst = [],
+        let me = this, rst = [],
             tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_SUM_EXT];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true && pageStatus[JV.STATUS_CROSS_ROW_END] === true) {
-                var tab_fields = tab[JV.TAB_CROSS_FIELDS],
+                let tab_fields = tab[JV.TAB_CROSS_FIELDS],
                     data_details = dataObj[JV.DATA_DETAIL_DATA],
                     data_fields = [];
-                for (var i = 0; i < me.row_sum_extension_fields_idx.length; i++) {
-                    var data_field = data_details[me.row_sum_extension_fields_idx[i]];
+                for (let i = 0; i < me.row_sum_extension_fields_idx.length; i++) {
+                    let data_field = data_details[me.row_sum_extension_fields_idx[i]];
                     data_fields.push(data_field);
                 }
                 //2. initialize grand total value
-                var rowGrandTotal = [];
-                for (var di = 0; di < data_fields.length; di++) {
+                let rowGrandTotal = [];
+                for (let di = 0; di < data_fields.length; di++) {
                     rowGrandTotal[di] = 0.0;
                     //3. start to sum
-                    for (var i = 0; i < me.sortedColSequence[segIdx].length; i++) {
+                    for (let i = 0; i < me.sortedColSequence[segIdx].length; i++) {
                         //me.sortedColSequence[segIdx][i][0] //this is the data field value index!
                         rowGrandTotal[di] = rowGrandTotal[di] + 1.0 * JpcFieldHelper.getValue(data_fields[di], me.sortedColSequence[segIdx][i][0]);
                     }
                 }
                 //4. output
-                for (var di = 0; di < tab_fields.length; di++) {
-                    var tab_field = tab_fields[di];
+                for (let di = 0; di < tab_fields.length; di++) {
+                    let tab_field = tab_fields[di];
                     if (!tab_field[JV.PROP_HIDDEN]) {
-                        var val = rowGrandTotal[di];
-                        var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
+                        let val = rowGrandTotal[di];
+                        let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
                         cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
                         rst.push(cellItem);
                     }
@@ -524,7 +524,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                     rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
                 }
                 if (tab[JV.PROP_TEXTS]) {
-                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                    for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
                         rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
                     }
                 }
@@ -533,7 +533,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcCrossTabResult.outputTabField = function (band, tab_field, data_field, valueIdx, serialIdx, rows, rowIdx, cols, colIdx, unitFactor, isRow, controls) {
-        var me = this, rst = null;
+        let me = this, rst = null;
         if (isRow == true && tab_field[JV.PROP_IS_SERIAL] && tab_field[JV.PROP_IS_SERIAL] == true) {
             if (serialIdx >= 0) rst = JpcCommonOutputHelper.createCommonOutput(tab_field, serialIdx + 1)
             else rst = JpcCommonOutputHelper.createCommonOutput(tab_field, "", controls);

+ 50 - 50
modules/reports/rpt_component/jpc_ex.js

@@ -1,33 +1,33 @@
-var JV = require('./jpc_value_define');
-var JpcBand = require('./jpc_band');
-var JpcFlowTab = require('./jpc_flow_tab');
-var JpcBillTab = require('./jpc_bill_tab');
-var JpcCrossTab = require('./jpc_cross_tab');
-var JpcField = require('./jpc_field');
-var JpcParam = require('./jpc_param');
-var JpcFunc = require('./jpc_function');
-var JpcData = require('./jpc_data');
-var JpcCommonHelper = require('./helper/jpc_helper_common');
-var JE = require('./jpc_rte'); //Important: for self-define function execution purpose
+let JV = require('./jpc_value_define');
+let JpcBand = require('./jpc_band');
+let JpcFlowTab = require('./jpc_flow_tab');
+let JpcBillTab = require('./jpc_bill_tab');
+let JpcCrossTab = require('./jpc_cross_tab');
+let JpcField = require('./jpc_field');
+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
 
-var JpcExSrv = function(){};
+let JpcExSrv = function(){};
 JpcExSrv.prototype.createNew = function(){
     function private_buildDftItems(rptTpl, dftCollection, propArray, nodeName) {
-        var rst = {};
+        let rst = {};
         if (dftCollection) {
-            for (var i = 0; i < dftCollection.length; i++) {
-                var item = {};
-                for (var j = 0; j < propArray.length; j++) {
+            for (let i = 0; i < dftCollection.length; i++) {
+                let item = {};
+                for (let j = 0; j < propArray.length; j++) {
                     item[propArray[j]] = dftCollection[i][propArray[j]];
                 }
                 rst[dftCollection[i][JV.PROP_ID]] = item;
             }
             if (rptTpl && rptTpl[nodeName] && rptTpl[nodeName].length > 0) {
-                for (var i = 0; i < rptTpl[nodeName].length; i++) {
-                    var rptDftItem = rptTpl[nodeName][i];
+                for (let i = 0; i < rptTpl[nodeName].length; i++) {
+                    let rptDftItem = rptTpl[nodeName][i];
                     if (rst[rptDftItem[JV.PROP_ID]] == undefined) {
-                        var item = {};
-                        for (var j = 0; j < propArray.length; j++) {
+                        let item = {};
+                        for (let j = 0; j < propArray.length; j++) {
                             item[propArray[j]] = rptDftItem[propArray[j]];
                         }
                         rst[rptDftItem[JV.PROP_ID]] = item;
@@ -38,22 +38,22 @@ JpcExSrv.prototype.createNew = function(){
         return rst;
     }
     function private_buildDftControls(rptTpl, dftControlCollection) {
-        var rst = private_buildDftItems(rptTpl,dftControlCollection, JV.CONTROL_PROPS, JV.NODE_CONTROL_COLLECTION);
+        let rst = private_buildDftItems(rptTpl,dftControlCollection, JV.CONTROL_PROPS, JV.NODE_CONTROL_COLLECTION);
         return rst;
     }
     function private_buildDftFonts(rptTpl, dftFontCollection) {
-        var rst = private_buildDftItems(rptTpl,dftFontCollection, JV.FONT_PROPS, JV.NODE_FONT_COLLECTION);
+        let rst = private_buildDftItems(rptTpl,dftFontCollection, JV.FONT_PROPS, JV.NODE_FONT_COLLECTION);
         return rst;
     }
     function private_buildDftStyles(rptTpl, dftStyleCollection) {
-        var rst = {};
+        let rst = {};
         if (dftStyleCollection) {
-            for (var i = 0; i < dftStyleCollection.length; i++) {
-                var item = {};
+            for (let i = 0; i < dftStyleCollection.length; i++) {
+                let item = {};
                 if (dftStyleCollection[i][JV.PROP_BORDER_STYLE] && dftStyleCollection[i][JV.PROP_BORDER_STYLE].length > 0) {
-                    for (var j = 0; j < dftStyleCollection[i][JV.PROP_BORDER_STYLE].length; j++) {
-                        var borderItem = {};
-                        for (var k = 0; k < JV.BORDER_STYLE_PROPS.length; k++) {
+                    for (let j = 0; j < dftStyleCollection[i][JV.PROP_BORDER_STYLE].length; j++) {
+                        let borderItem = {};
+                        for (let k = 0; k < JV.BORDER_STYLE_PROPS.length; k++) {
                             borderItem[JV.BORDER_STYLE_PROPS[k]] = dftStyleCollection[i][JV.PROP_BORDER_STYLE][j][JV.BORDER_STYLE_PROPS[k]];
                         }
                         item[dftStyleCollection[i][JV.PROP_BORDER_STYLE][j][JV.PROP_POSITION]] = borderItem;
@@ -62,13 +62,13 @@ JpcExSrv.prototype.createNew = function(){
                 rst[dftStyleCollection[i][JV.PROP_ID]] = item;
             }
             if (rptTpl && rptTpl[JV.NODE_STYLE_COLLECTION] && rptTpl[JV.NODE_STYLE_COLLECTION].length > 0) {
-                for (var i = 0; i < rptTpl[JV.NODE_STYLE_COLLECTION].length; i++) {
-                    var rptDftItem = rptTpl[JV.NODE_STYLE_COLLECTION][i];
+                for (let i = 0; i < rptTpl[JV.NODE_STYLE_COLLECTION].length; i++) {
+                    let rptDftItem = rptTpl[JV.NODE_STYLE_COLLECTION][i];
                     if (rst[rptDftItem[JV.PROP_ID]] == undefined) {
-                        var item = {};
-                        for (var j = 0; j < rptDftItem[JV.PROP_BORDER_STYLE].length; j++) {
-                            var borderItem = {};
-                            for (var k = 0; k < JV.BORDER_STYLE_PROPS.length; k++) {
+                        let item = {};
+                        for (let j = 0; j < rptDftItem[JV.PROP_BORDER_STYLE].length; j++) {
+                            let borderItem = {};
+                            for (let k = 0; k < JV.BORDER_STYLE_PROPS.length; k++) {
                                 borderItem[JV.BORDER_STYLE_PROPS[k]] = rptDftItem[JV.PROP_BORDER_STYLE][j][JV.BORDER_STYLE_PROPS[k]];
                             }
                             item[rptDftItem[JV.PROP_BORDER_STYLE][j][JV.PROP_POSITION]] = borderItem;
@@ -80,10 +80,10 @@ JpcExSrv.prototype.createNew = function(){
         }
         return rst;
     }
-    var JpcResult = {};
+    let JpcResult = {};
     //JpcResult.report_title
     JpcResult.initialize = function(rptTpl) {
-        var me = this;
+        let me = this;
         if (rptTpl[JV.NODE_FLOW_INFO]) {
             me.flowTab = JpcFlowTab.createNew();
             me.flowTab.initialize();
@@ -92,7 +92,7 @@ JpcExSrv.prototype.createNew = function(){
             me.billTab = JpcBillTab.createNew();
             me.billTab.initialize();
         }
-        //var dt1 = new Date();
+        //let dt1 = new Date();
         if (rptTpl[JV.NODE_CROSS_INFO]) {
             me.crossTab = JpcCrossTab.createNew();
             me.crossTab.initialize();
@@ -105,20 +105,20 @@ JpcExSrv.prototype.createNew = function(){
     };
 
     JpcResult.analyzeData = function(rptTpl, dataObj, defProperties) {
-        var me = this;
+        let me = this;
         //1. data object
-        var dataHelper = JpcData.createNew();
+        let dataHelper = JpcData.createNew();
         dataHelper.analyzeData(rptTpl, dataObj);
         //2. tab object
         //pre-condition: the data should be sorted in SQL/NoSQL level!
-        //var dt1 = new Date();
+        //let dt1 = new Date();
         if (me.flowTab) {
             me.flowTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0));
         }
         if (me.crossTab) {
             me.crossTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0));
         }
-        //var dt2 = new Date();
+        //let dt2 = new Date();
         //alert(dt2 - dt1);
         //3. formulas
         me.executeFormulas(JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
@@ -129,7 +129,7 @@ JpcExSrv.prototype.createNew = function(){
         dataHelper = null;
     };
     JpcResult.paging = function(rptTpl, dataObj, defProperties) {
-        var me = this;
+        let me = this;
         if (me.flowTab) {
             me.totalPages = me.flowTab.preSetupPages(rptTpl, dataObj, defProperties);
         } else if (me.crossTab) {
@@ -139,10 +139,10 @@ JpcExSrv.prototype.createNew = function(){
         }
     };
     JpcResult.executeFormulas = function(runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) {
-        var me = this;
-        for (var i = 0; i < me.formulas.length; i++) {
+        let me = this;
+        for (let i = 0; i < me.formulas.length; i++) {
             if (me.formulas[i][JV.PROP_RUN_TYPE] === runType) {
-                var expression = me.formulas[i][JV.PROP_EXPRESSION];
+                let expression = me.formulas[i][JV.PROP_EXPRESSION];
                 if (expression) {
                     eval(expression);
                 }
@@ -150,22 +150,22 @@ JpcExSrv.prototype.createNew = function(){
         }
     };
     JpcResult.outputAsSimpleJSONPageArray = function(rptTpl, dataObj, startPage, endPage, defProperties) {
-        var me = this, rst = {};
+        let me = this, rst = {};
         if ((startPage > 0) && (startPage <= endPage) && (endPage <= me.totalPages)) {
             rst[JV.NODE_CONTROL_COLLECTION] = private_buildDftControls(rptTpl, (defProperties == null)?null:defProperties.ctrls);
             rst[JV.NODE_STYLE_COLLECTION] = private_buildDftStyles(rptTpl, (defProperties == null)?null:defProperties.styles);
             rst[JV.NODE_FONT_COLLECTION] = private_buildDftFonts(rptTpl, (defProperties == null)?null:defProperties.fonts);
             rst[JV.NODE_PAGE_INFO] = JpcCommonHelper.getPageSize(rptTpl);
             rst.items = [];
-            var bands = JpcBand.createNew(rptTpl, defProperties);
+            let bands = JpcBand.createNew(rptTpl, defProperties);
             try {
-                for (var page = startPage; page <= endPage; page++) {
+                for (let page = startPage; page <= endPage; page++) {
                     me.runTimePageData.currentPage = page;
                     me.executeFormulas(JV.RUN_TYPE_BEFORE_OUTPUT, rptTpl, dataObj, me);
                     rst.items.push(me.outputAsSimpleJSONPage(rptTpl, dataObj, bands, page, rst[JV.NODE_CONTROL_COLLECTION]));
                 }
                 if (bands[JV.BAND_PROP_MERGE_BAND]) {
-                    var mergedBand = {}, band = bands[JV.BAND_PROP_MERGE_BAND];
+                    let mergedBand = {}, band = bands[JV.BAND_PROP_MERGE_BAND];
                     mergedBand[JV.PROP_LEFT] = band[JV.PROP_LEFT].toFixed(0);
                     mergedBand[JV.PROP_RIGHT] = band[JV.PROP_RIGHT].toFixed(0);
                     mergedBand[JV.PROP_TOP] = band[JV.PROP_TOP].toFixed(0);
@@ -180,7 +180,7 @@ JpcExSrv.prototype.createNew = function(){
         return rst;
     };
     JpcResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, bands, page, controls) {
-        var me = this, rst = null;
+        let me = this, rst = null;
         if (me.totalPages >= page) {
             rst = {};
             rst[JV.PROP_PAGE_SEQ] = page;

+ 64 - 64
modules/reports/rpt_component/jpc_flow_tab.js

@@ -1,20 +1,20 @@
-var JV = require('./jpc_value_define');
-var JE = require('./jpc_rte');
-var JpcFieldHelper = require('./helper/jpc_helper_field');
-var JpcBandHelper = require('./helper/jpc_helper_band');
-var JpcBand = require('./jpc_band');
-var JpcFlowTabHelper = require('./helper/jpc_helper_flow_tab');
-var JpcCommonHelper = require('./helper/jpc_helper_common');
-var JpcDiscreteHelper = require('./helper/jpc_helper_discrete');
-var JpcTextHelper = require('./helper/jpc_helper_text');
-var JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');
-var JpcAreaHelper = require('./helper/jpc_helper_area');
+let JV = require('./jpc_value_define');
+let JE = require('./jpc_rte');
+let JpcFieldHelper = require('./helper/jpc_helper_field');
+let JpcBandHelper = require('./helper/jpc_helper_band');
+let JpcBand = require('./jpc_band');
+let JpcFlowTabHelper = require('./helper/jpc_helper_flow_tab');
+let JpcCommonHelper = require('./helper/jpc_helper_common');
+let JpcDiscreteHelper = require('./helper/jpc_helper_discrete');
+let JpcTextHelper = require('./helper/jpc_helper_text');
+let JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');
+let JpcAreaHelper = require('./helper/jpc_helper_area');
 
-var JpcFlowTabSrv = function(){};
+let JpcFlowTabSrv = function(){};
 JpcFlowTabSrv.prototype.createNew = function(){
     function private_addPageValue(ValuedIdxLst, sortedSequence, preRec, nextRec,page_seg_map, segIdx, pageIdx) {
-        var vIdx = [];
-        for (var vi = 0; vi < nextRec; vi++) {
+        let vIdx = [];
+        for (let vi = 0; vi < nextRec; vi++) {
             if (sortedSequence.length > preRec + vi) {
                 vIdx.push(sortedSequence[preRec + vi]);
             } else {
@@ -24,9 +24,9 @@ JpcFlowTabSrv.prototype.createNew = function(){
         page_seg_map.push([pageIdx, segIdx]);
         ValuedIdxLst.push(vIdx);
     }
-    var JpcFlowTabResult = {};
+    let JpcFlowTabResult = {};
     JpcFlowTabResult.initialize = function() {
-        var me = this;
+        let me = this;
         me.segments = [];
         me.dispValueIdxLst = [];
         me.page_seg_map = [];
@@ -41,26 +41,26 @@ JpcFlowTabSrv.prototype.createNew = function(){
         me.multiCols = 1;
     };
     JpcFlowTabResult.sorting = function(rptTpl, dataObj, dataSeq) {
-        var me = this;
+        let me = this;
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_SEG_SUM][JV.PROP_SUM_FIELDS], me.seg_sum_tab_fields, me.seg_sum_fields_idx);
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_PAGE_SUM][JV.PROP_SUM_FIELDS], null, me.page_sum_fields_idx);
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_GROUP][JV.PROP_GROUP_FIELDS], null, me.group_fields_idx);
-        for (var si = 0; si < dataSeq.length; si++) {
+        for (let si = 0; si < dataSeq.length; si++) {
             me.segments.push(dataSeq[si].slice(0));
         }
         //pre-sum the data(for seg sum display)
-        var data_details = dataObj[JV.DATA_DETAIL_DATA],
+        let data_details = dataObj[JV.DATA_DETAIL_DATA],
             data_fields = [];
-        for (var i = 0; i < me.seg_sum_fields_idx.length; i++) {
-            var data_field = data_details[me.seg_sum_fields_idx[i]];
+        for (let i = 0; i < me.seg_sum_fields_idx.length; i++) {
+            let data_field = data_details[me.seg_sum_fields_idx[i]];
             data_fields.push(data_field);
         }
-        for (var i = 0; i < me.segments.length; i++) { //seg level
+        for (let i = 0; i < me.segments.length; i++) { //seg level
             if (me.segments[i].length > 0) {
-                var rowGrandTotal = [];
-                for (var di = 0; di < data_fields.length; di++) {
+                let rowGrandTotal = [];
+                for (let di = 0; di < data_fields.length; di++) {
                     rowGrandTotal.push(0.0);
-                    for (var j = 0; j < me.segments[i].length; j++) {
+                    for (let j = 0; j < me.segments[i].length; j++) {
                         //3. start to sum
                         rowGrandTotal[di] = rowGrandTotal[di] + 1.0 * JpcFieldHelper.getValue(data_fields[di], me.segments[i][j]);
                     }
@@ -71,10 +71,10 @@ JpcFlowTabSrv.prototype.createNew = function(){
         }
     };
     JpcFlowTabResult.preSetupPages = function (rptTpl, dataOjb, defProperties) {
-        var rst = 0, me = this, counterRowRec = 0, maxRowRec = 1, pageIdx = 0;
+        let rst = 0, me = this, counterRowRec = 0, maxRowRec = 1, pageIdx = 0;
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS], null, me.disp_fields_idx);
-        var bands = JpcBand.createNew(rptTpl, defProperties);
-        var pageStatus = [true, true, false, false, false, false, false, false];
+        let bands = JpcBand.createNew(rptTpl, defProperties);
+        let pageStatus = [true, true, false, false, false, false, false, false];
         if (rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN]) {
             me.multiCols = 1 * rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN];
         }
@@ -82,18 +82,18 @@ JpcFlowTabSrv.prototype.createNew = function(){
             JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
             maxRowRec = JpcFlowTabHelper.getMaxRowsPerPage(bands, rptTpl);
         }
-        for (var segIdx = 0; segIdx < me.segments.length; segIdx++) {
+        for (let segIdx = 0; segIdx < me.segments.length; segIdx++) {
             private_resetBandArea();
-            var orgMaxRowRec = maxRowRec;
-            var rowSplitCnt = Math.ceil(1.0 * me.segments[segIdx].length / orgMaxRowRec);
+            let orgMaxRowRec = maxRowRec;
+            let rowSplitCnt = Math.ceil(1.0 * me.segments[segIdx].length / orgMaxRowRec);
             pageStatus[JV.STATUS_SEGMENT_END] = true;
             private_resetBandArea();
-            var hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, me.segments, segIdx, (rowSplitCnt - 1) * orgMaxRowRec, maxRowRec);
+            let hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, me.segments, segIdx, (rowSplitCnt - 1) * orgMaxRowRec, maxRowRec);
             if (hasAdHocRow) rowSplitCnt++;
             if (rowSplitCnt % me.multiCols > 0) {
                 rowSplitCnt++
             }
-            for (var rowIdx = 0; rowIdx < rowSplitCnt; rowIdx++) {
+            for (let rowIdx = 0; rowIdx < rowSplitCnt; rowIdx++) {
                 pageStatus[JV.STATUS_SEGMENT_END] = rowIdx == (rowSplitCnt - 1)?true:false;
                 if (pageIdx > 0) pageStatus[JV.STATUS_REPORT_START] = false;
                 private_resetBandArea();
@@ -109,14 +109,14 @@ JpcFlowTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcFlowTabResult.outputAsSimpleJSONPage = function (rptTpl, dataObj, page, bands, controls, $CURRENT_RPT) {
-        var me = this, rst = [], tabRstLst = [];
-        var segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
+        let me = this, rst = [], tabRstLst = [];
+        let segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
         //1 calculate the band position
         JpcBandHelper.setBandArea(bands, rptTpl, me.pageStatusLst[page - 1]);
         //2. start to output detail-part
-        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
-        for (var pi = 0; pi < me.multiCols; pi++) {
-            var actualPage = (page - 1) * me.multiCols + pi + 1;
+        let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        for (let pi = 0; pi < me.multiCols; pi++) {
+            let actualPage = (page - 1) * me.multiCols + pi + 1;
             //2.1 Content-Tab
             tabRstLst.push(me.outputContent(rptTpl, dataObj, actualPage, bands, unitFactor, controls, pi));
             //2.2 Column tab
@@ -129,25 +129,25 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_FLOW_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[actualPage - 1], segIdx, 1, pi, $CURRENT_RPT));
             }
         }
-        for (var i = 0; i < tabRstLst.length; i++) {
+        for (let i = 0; i < tabRstLst.length; i++) {
             rst = rst.concat(tabRstLst[i]);
             tabRstLst[i] = null;
         }
         return rst;
     };
     JpcFlowTabResult.outputContent = function(rptTpl, dataObj, page, bands, unitFactor, controls, multiColIdx, $CURRENT_RPT) {
-        var me = this, rst = [];
-        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let me = this, rst = [];
+        let tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
-                var tab_fields = tab[JV.PROP_FLOW_FIELDS];
-                var data_details = dataObj[JV.DATA_DETAIL_DATA];
-                var contentValuesIdx = me.dispValueIdxLst[page - 1];
-                for (var i = 0; i < tab_fields.length; i++) {
-                    var tab_field = tab_fields[i];
-                    var data_field = null;
+                let tab_fields = tab[JV.PROP_FLOW_FIELDS];
+                let data_details = dataObj[JV.DATA_DETAIL_DATA];
+                let contentValuesIdx = me.dispValueIdxLst[page - 1];
+                for (let i = 0; i < tab_fields.length; i++) {
+                    let tab_field = tab_fields[i];
+                    let data_field = null;
                     if (me.disp_fields_idx[i] != JV.BLANK_FIELD_INDEX) {
                         data_field = data_details[me.disp_fields_idx[i]];
                     } else {
@@ -157,7 +157,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                         }
                     }
                     if (!(tab_field[JV.PROP_HIDDEN])) {
-                        for (var rowIdx = 0; rowIdx < contentValuesIdx.length; rowIdx++) {
+                        for (let rowIdx = 0; rowIdx < contentValuesIdx.length; rowIdx++) {
                             rst.push(me.outputTabField(band, tab_field, data_field, contentValuesIdx[rowIdx], -1, contentValuesIdx.length, rowIdx, 1, 0, unitFactor, true, controls, multiColIdx));
                         }
                     }
@@ -167,17 +167,17 @@ JpcFlowTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcFlowTabResult.outputColumn = function (rptTpl, dataObj, page, segIdx, bands, unitFactor, controls, multiColIdx) {
-        var me = this, rst = [];
-        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_COLUMN];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let me = this, rst = [];
+        let tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_COLUMN];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
                 if (tab[JV.PROP_TEXT]) {
                     rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, me.multiCols, multiColIdx));
                 }
                 if (tab[JV.PROP_TEXTS]) {
-                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                    for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
                         rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, me.multiCols, multiColIdx));
                     }
                 }
@@ -189,15 +189,15 @@ JpcFlowTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcFlowTabResult.outputSegSum = function (rptTpl, dataObj, page, segIdx, bands, unitFactor, controls) {
-        var me = this, rst = [];
-        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_SEG_SUM];
-        var band = bands[tab[JV.PROP_BAND_NAME]];
+        let me = this, rst = [];
+        let tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_SEG_SUM];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
         if (band) {
-            var pageStatus = me.pageStatusLst[page - 1];
+            let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
-                var tab_fields = me.seg_sum_tab_fields;
-                for (var i = 0; i < tab_fields.length; i++) {
-                    var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_fields[i], me.segSumValLst[segIdx][i], controls);
+                let tab_fields = me.seg_sum_tab_fields;
+                for (let i = 0; i < tab_fields.length; i++) {
+                    let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_fields[i], me.segSumValLst[segIdx][i], controls);
                     cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_fields[i][JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0, true, false);
                     rst.push(cellItem);
                 }
@@ -205,7 +205,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                     rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0));
                 }
                 if (tab[JV.PROP_TEXTS]) {
-                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                    for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
                         rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0));
                     }
                 }
@@ -217,7 +217,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcFlowTabResult.outputTabField = function (band, tab_field, data_field, valueIdx, serialIdx, rows, rowIdx, cols, colIdx, unitFactor, isRow, controls, multiColIdx) {
-        var me = this, rst = null;
+        let me = this, rst = null;
         rst = JpcCommonOutputHelper.createCommonOutput(tab_field, JpcFieldHelper.getValue(data_field, valueIdx), controls);
         rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
         return rst;

+ 1 - 1
modules/reports/rpt_component/jpc_value_define.js

@@ -1,4 +1,4 @@
-var JV = {
+let JV = {
     NODE_CROSS_INFO: "交叉表_信息",
     NODE_CROSS_ROW: "交叉行",
     NODE_CROSS_COL: "交叉列",

+ 103 - 103
modules/reports/util/rpt_excel_util.js

@@ -1,16 +1,16 @@
 /**
  * Created by Tony on 2017/4/1.
  */
-var JV = require('../rpt_component/jpc_value_define');
-var fs = require('fs');
-var JSZip = require("jszip");
-var strUtil = require('../../../public/stringUtil');
-var jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
-var DPI = jpcCmnHelper.getScreenDPI()[0];
+let JV = require('../rpt_component/jpc_value_define');
+let fs = require('fs');
+let JSZip = require("jszip");
+let strUtil = require('../../../public/stringUtil');
+let jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
+let DPI = jpcCmnHelper.getScreenDPI()[0];
 const dftHeadXml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
 
 function writeContentTypes(sheets) {
-    var rst = [];
+    let rst = [];
     rst.push(dftHeadXml + '\r\n');
     rst.push('<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">');
     //...
@@ -21,7 +21,7 @@ function writeContentTypes(sheets) {
     rst.push('<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>');
     rst.push('<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>');
     rst.push('<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>');
-    for (var i = 0; i < sheets.length; i++) {
+    for (let i = 0; i < sheets.length; i++) {
         rst.push('<Override PartName="/xl/worksheets/sheet' + (i + 1) + '.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>')
     }
     rst.push('<Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>');
@@ -29,7 +29,7 @@ function writeContentTypes(sheets) {
     return rst;
 }
 function writeRootRels(){
-    var rst = [];
+    let rst = [];
     rst.push(dftHeadXml + '\r\n');
     rst.push('<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">');
     rst.push('<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>');
@@ -39,7 +39,7 @@ function writeRootRels(){
     return rst;
 }
 function writeApp(sheets) {
-    var rst = [];
+    let rst = [];
     rst.push(dftHeadXml + '\r\n');
     rst.push('<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">');
     rst.push('<Application>Microsoft Excel</Application>');
@@ -53,7 +53,7 @@ function writeApp(sheets) {
     rst.push('</HeadingPairs>');
     rst.push('<TitlesOfParts>');
     rst.push('<vt:vector size="' + sheets.length + '" baseType="lpstr">');
-    for (var i = 0; i < sheets.length; i++) {
+    for (let i = 0; i < sheets.length; i++) {
         rst.push('<vt:lpstr>' + sheets[i].sheetName + '</vt:lpstr>')
     }
     rst.push('</vt:vector>');
@@ -68,9 +68,9 @@ function writeApp(sheets) {
     return rst;
 }
 function writeCore() {
-    var rst = [];
+    let rst = [];
     p_fillZero = function(val){
-        var rst = val;
+        let rst = val;
         if (val < 10) {
             rst = '0' + val;
         }
@@ -80,7 +80,7 @@ function writeCore() {
     rst.push('<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">');
     rst.push('<dc:creator>SmartCost</dc:creator>');
     rst.push('<cp:lastModifiedBy>SmartCost</cp:lastModifiedBy>');
-    var dt = new Date(), dtStr = dt.getFullYear() + '-' + p_fillZero(dt.getMonth()+1) + '-' + p_fillZero(dt.getDate()) + 'T' +
+    let dt = new Date(), dtStr = dt.getFullYear() + '-' + p_fillZero(dt.getMonth()+1) + '-' + p_fillZero(dt.getDate()) + 'T' +
         p_fillZero(dt.getHours()) + ':' + p_fillZero(dt.getMinutes()) + ':' + p_fillZero(dt.getSeconds()) + 'Z';
     rst.push('<dcterms:created xsi:type="dcterms:W3CDTF">' + dtStr + '</dcterms:created>');
     rst.push('<dcterms:modified xsi:type="dcterms:W3CDTF">' + dtStr + '</dcterms:modified>');
@@ -89,14 +89,14 @@ function writeCore() {
     return rst;
 }
 function writeXlWorkBook(sheets){
-    var rst = [];
+    let rst = [];
     rst.push(dftHeadXml + '\r\n');
     rst.push('<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">');
     rst.push('<fileVersion appName="xl" lastEdited="4" lowestEdited="4" rupBuild="4505"/>');
     rst.push('<workbookPr defaultThemeVersion="124226"/>');
     rst.push('<bookViews><workbookView xWindow="360" yWindow="345" windowWidth="14655" windowHeight="4305"/></bookViews>');
     rst.push('<sheets>');
-    for (var i = 0; i < sheets.length; i++) {
+    for (let i = 0; i < sheets.length; i++) {
         rst.push('<sheet name="' + sheets[i].sheetName + '" sheetId="' + (i + 1) + '" r:id="rId' + (i + 1) + '"/>')
     }
     rst.push('</sheets>');
@@ -106,10 +106,10 @@ function writeXlWorkBook(sheets){
     return rst;
 }
 function writeXlRels(sheets){
-    var rst = [], idx = 1;
+    let rst = [], idx = 1;
     rst.push(dftHeadXml + '\r\n');
     rst.push('<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">');
-    for (var i = 0; i < sheets.length; i++) {
+    for (let i = 0; i < sheets.length; i++) {
         rst.push('<Relationship Id="rId' + idx + '" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet' + (i + 1) + '.xml"/>')
         idx++;
     }
@@ -123,17 +123,17 @@ function writeXlRels(sheets){
     return rst;
 }
 function writeTheme(){
-    var rst = fs.readFileSync(__dirname + '/excel_base_files/theme1.xml', 'utf8', 'r');
+    let rst = fs.readFileSync(__dirname + '/excel_base_files/theme1.xml', 'utf8', 'r');
     return rst;
 }
 function writeStyles(stylesObj){
-    var rst = [];
+    let rst = [];
     rst.push(dftHeadXml + '\r\n');
     rst.push('<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">');
     //1. push fonts
     rst.push('<fonts count="' + stylesObj.fonts.length + '">')
-    for (var i = 0; i < stylesObj.fonts.length; i++) {
-        var font = stylesObj.fonts[i];
+    for (let i = 0; i < stylesObj.fonts.length; i++) {
+        let font = stylesObj.fonts[i];
         rst.push('<font>');
         if (strUtil.convertStrToBoolean(font[JV.FONT_PROPS[3]])) {
             rst.push('<b/>');
@@ -153,14 +153,14 @@ function writeStyles(stylesObj){
         if (border[borderDirection][JV.PROP_LINE_WEIGHT] == 0) {
             rst.push('<' + borderDirection.toLowerCase() + '/>');
         } else {
-            var bW = 'thin';
+            let bW = 'thin';
             if (border[borderDirection][JV.PROP_LINE_WEIGHT] == 2) bW = 'medium';
             if (border[borderDirection][JV.PROP_LINE_WEIGHT] > 2) bW = 'thick';
             rst.push('<' + borderDirection.toLowerCase() + ' style="' + bW + '">' + '<color indexed="64"/>' + '</' + borderDirection.toLowerCase() + '>');
         }
     };
-    for (var i = 0; i < stylesObj.borders.length; i++) {
-        var border = stylesObj.borders[i];
+    for (let i = 0; i < stylesObj.borders.length; i++) {
+        let border = stylesObj.borders[i];
         rst.push('<border>');
         private_setBorder(border, JV.PROP_LEFT);
         private_setBorder(border, JV.PROP_RIGHT);
@@ -174,10 +174,10 @@ function writeStyles(stylesObj){
     rst.push('<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"><alignment vertical="center"/></xf></cellStyleXfs>');
     //5. push cellXfs
     rst.push('<cellXfs count="' + stylesObj.cellXfs.length + '">');
-    for (var i = 0; i < stylesObj.cellXfs.length; i++) {
-        var excelStyle = stylesObj.cellXfs[i];
+    for (let i = 0; i < stylesObj.cellXfs.length; i++) {
+        let excelStyle = stylesObj.cellXfs[i];
         rst.push('<xf numFmtId="0" fontId="' + excelStyle.fontId + '" fillId="0" borderId="' + excelStyle.borderId + '" xfId="0">');
-        var alignStr = '<alignment horizontal="' + excelStyle[JV.CONTROL_PROPS[2]] + '" vertical="' + excelStyle[JV.CONTROL_PROPS[3]] + '"';
+        let alignStr = '<alignment horizontal="' + excelStyle[JV.CONTROL_PROPS[2]] + '" vertical="' + excelStyle[JV.CONTROL_PROPS[3]] + '"';
         if (strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[1]])) {
             alignStr = alignStr + ' shrinkToFit="1"';
         }
@@ -197,11 +197,11 @@ function writeStyles(stylesObj){
     return rst;
 }
 function writeSharedString(sharedStrList){
-    var rst = [];
+    let rst = [];
     if (sharedStrList && sharedStrList.length > 0) {
         rst.push(dftHeadXml + '\r\n');
         rst.push('<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="' + sharedStrList.length + '" uniqueCount="' + sharedStrList.length + '">');
-        for (var i = 0; i < sharedStrList.length; i++) {
+        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>');
@@ -214,9 +214,9 @@ function writeSharedString(sharedStrList){
     return rst;
 }
 function writeSheets(pageData, sharedStrList, stylesObj){
-    var rst = [];
+    let rst = [];
     private_pushDftFont = function(){
-        var font = {};
+        let font = {};
         if (!(stylesObj.fonts)) {
             stylesObj.fonts = [];
         }
@@ -227,20 +227,20 @@ function writeSheets(pageData, sharedStrList, stylesObj){
         stylesObj.fonts.push(font);
     };
     private_pushDftFont();
-    for (var i = 0; i < pageData.items.length; i++) {
+    for (let i = 0; i < pageData.items.length; i++) {
         rst.push(writeSheet(pageData, pageData.items[i], sharedStrList, stylesObj));
     }
     return rst;
 }
 function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
-    var rst = [], xPos = [], yPos = [], headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
-    var cacheBorderCell = {};
+    let rst = [], xPos = [], yPos = [], headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+    let cacheBorderCell = {};
     xPos.push(0);
     yPos.push(0);
     private_pre_analyze_pos = function(){
-        var cell, pos;
+        let cell, pos;
         sheetData.cells.sort(function(cell1, cell2) {
-            var rst = 0;
+            let rst = 0;
             if (cell1[JV.PROP_AREA][JV.PROP_TOP] > cell2[JV.PROP_AREA][JV.PROP_TOP]) {
                 rst = 1;
             } else if (cell1[JV.PROP_AREA][JV.PROP_TOP] < cell2[JV.PROP_AREA][JV.PROP_TOP]) {
@@ -254,7 +254,7 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
             }
             return rst;
         });
-        for (var i = 0; i < sheetData.cells.length; i++) {
+        for (let i = 0; i < sheetData.cells.length; i++) {
             cell = sheetData.cells[i];
             pos = cell[JV.PROP_AREA][JV.PROP_LEFT];
             if (xPos.indexOf(pos) < 0) xPos.push(pos);
@@ -269,26 +269,26 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         yPos.sort(private_array_sort);
     };
     private_array_sort = function(i1, i2){
-        var rst = 0;
+        let rst = 0;
         if (i1 > i2) {rst = 1} else
         if (i1 < i2) rst = -1;
         return rst;
     };
     private_getCellIdxStr = function(idx){
-        var rst = 'A';
+        let rst = 'A';
         if (idx < 26) {
             rst = headerStr[idx];
         } else if (idx < 26*26+26) {
-            var ti = Math.floor(idx / 26), tj = idx % 26;
+            let ti = Math.floor(idx / 26), tj = idx % 26;
             rst = headerStr[ti - 1] + headerStr[tj];
         } else if (idx < 26*26*26+26) {
-            var ti = Math.floor(idx / (26*26)), tj = Math.floor((idx - ti * 26*26) / 26), tk = idx % 26;
+            let ti = Math.floor(idx / (26*26)), tj = Math.floor((idx - ti * 26*26) / 26), tk = idx % 26;
             rst = headerStr[ti - 1] + headerStr[tj-1] + headerStr[tk];
         }
         return rst;
     };
     private_getSharedStrIdx = function(val) {
-        var rst = sharedStrList.indexOf(val);
+        let rst = sharedStrList.indexOf(val);
         if (rst < 0) {
             sharedStrList.push(val);
             rst = sharedStrList.length - 1;
@@ -296,14 +296,14 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         return rst;
     };
     private_getFontId = function(cell) {
-        var rst = 0, hasFont = false;
+        let rst = 0, hasFont = false;
         if (!(stylesObj.fonts)) {
             stylesObj.fonts = [];
-            //for (var i = 0; i < sheetData.font_collection)
+            //for (let i = 0; i < sheetData.font_collection)
         }
-        var sheetFont = pageData.font_collection[cell.font];
-        for (var i = 0; i < stylesObj.fonts.length; i++) {
-            var font = stylesObj.fonts[i];
+        let sheetFont = pageData.font_collection[cell.font];
+        for (let i = 0; i < stylesObj.fonts.length; i++) {
+            let font = stylesObj.fonts[i];
             if (sheetFont) {
                 if (font[JV.FONT_PROPS[0]] === sheetFont[JV.FONT_PROPS[0]] && font.size === Math.round(sheetFont[JV.FONT_PROPS[1]] * 3 / 4) && font[JV.FONT_PROPS[3]] == sheetFont[JV.FONT_PROPS[3]]) {
                     hasFont = true;
@@ -315,7 +315,7 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
             }
         }
         if (!hasFont) {
-            var font = {};
+            let font = {};
             font[JV.FONT_PROPS[0]] = sheetFont[JV.FONT_PROPS[0]]; //font name
             font.size = Math.round(sheetFont[JV.FONT_PROPS[1]] * 3 / 4);
             font.charset = 134;
@@ -327,7 +327,7 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         return rst;
     };
     private_checkBorder = function(cell, border, sheetBorder) {
-        var rst = true, borderLineWidths = [], sheetBorderLineWidths = [];
+        let rst = true, borderLineWidths = [], sheetBorderLineWidths = [];
         borderLineWidths.push(border[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]);
         borderLineWidths.push(border[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]);
         borderLineWidths.push(border[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]);
@@ -352,7 +352,7 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         } else {
             sheetBorderLineWidths.push(0);
         }
-        for (var i = 0; i < 4; i++) {
+        for (let i = 0; i < 4; i++) {
             if (borderLineWidths[i] != sheetBorderLineWidths[i]) {
                 rst = false;
                 break;
@@ -361,15 +361,15 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         return rst;
     };
     private_chkAndGetMergeLine = function(cell, sheetBorder, borderStr) {
-        var rst = sheetBorder[borderStr][JV.PROP_LINE_WEIGHT], mergeBorder = pageData[JV.BAND_PROP_MERGE_BAND];
+        let rst = sheetBorder[borderStr][JV.PROP_LINE_WEIGHT], mergeBorder = pageData[JV.BAND_PROP_MERGE_BAND];
         if (cell[JV.PROP_AREA][borderStr] == mergeBorder[borderStr]) {
-            var destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBorder[JV.PROP_STYLE][JV.PROP_ID]];
+            let destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBorder[JV.PROP_STYLE][JV.PROP_ID]];
             rst = destStyle[borderStr][JV.PROP_LINE_WEIGHT];
         }
         return parseInt(rst);
     };
     private_getIniBorder = function() {
-        var rst = {};
+        let rst = {};
         rst[JV.PROP_LEFT] = {};
         rst[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT] = 0;
         rst[JV.PROP_RIGHT] = {};
@@ -381,13 +381,13 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         return rst;
     };
     private_getBorderId = function(cell) {
-        var rst = 0, hasBorder = false;
+        let rst = 0, hasBorder = false;
         if (!(stylesObj.borders)) {
             stylesObj.borders = [];
         }
-        var sheetBorder = pageData[JV.NODE_STYLE_COLLECTION][cell.style];
-        for (var i = 0; i < stylesObj.borders.length; i++) {
-            var border = stylesObj.borders[i];
+        let sheetBorder = pageData[JV.NODE_STYLE_COLLECTION][cell.style];
+        for (let i = 0; i < stylesObj.borders.length; i++) {
+            let border = stylesObj.borders[i];
             if (private_checkBorder(cell, border, sheetBorder)) {
                 hasBorder = true;
                 rst = i;
@@ -395,7 +395,7 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
             }
         }
         if (!hasBorder) {
-            var border = private_getIniBorder();
+            let border = private_getIniBorder();
             if (sheetBorder && sheetBorder[JV.PROP_LEFT]) {
                 border[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_LEFT);
             }
@@ -414,8 +414,8 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         return rst;
     };
     private_checkControl = function(cellControl, sheetControl) {
-        var rst = true;
-        for (var i = 0; i < JV.CONTROL_PROPS.length; i++) {
+        let rst = true;
+        for (let i = 0; i < JV.CONTROL_PROPS.length; i++) {
             if (cellControl[JV.CONTROL_PROPS[i]] != sheetControl[JV.CONTROL_PROPS[i]]) {
                 rst = false;
                 break;
@@ -424,13 +424,13 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         return rst;
     };
     private_getStyleId = function(cell) {
-        var rst = 1, hasStyle = false;
+        let rst = 1, hasStyle = false;
         if (!(stylesObj.cellXfs)) stylesObj.cellXfs = [];
-        var fontId = private_getFontId(cell);
-        var borderId = private_getBorderId(cell);
-        var cellControl = pageData[JV.NODE_CONTROL_COLLECTION][cell[JV.PROP_CONTROL]];
-        for (var i = 0; i < stylesObj.cellXfs.length; i++) {
-            var sheetControl = stylesObj.cellXfs[i];
+        let fontId = private_getFontId(cell);
+        let borderId = private_getBorderId(cell);
+        let cellControl = pageData[JV.NODE_CONTROL_COLLECTION][cell[JV.PROP_CONTROL]];
+        for (let i = 0; i < stylesObj.cellXfs.length; i++) {
+            let sheetControl = stylesObj.cellXfs[i];
             if (sheetControl.fontId == fontId && sheetControl.borderId == borderId) {
                 if (private_checkControl(cellControl, sheetControl)) {
                     rst = i;
@@ -440,10 +440,10 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
             }
         }
         if (!hasStyle) {
-            var sheetControl = {};
+            let sheetControl = {};
             sheetControl.fontId = fontId;
             sheetControl.borderId = borderId;
-            for (var i = 0; i < JV.CONTROL_PROPS.length; i++) {
+            for (let i = 0; i < JV.CONTROL_PROPS.length; i++) {
                 sheetControl[JV.CONTROL_PROPS[i]] = cellControl[JV.CONTROL_PROPS[i]];
             }
             stylesObj.cellXfs.push(sheetControl);
@@ -454,8 +454,8 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
     private_setCols = function(){
         //remark: 1 excel width = 2.117 mm
         rst.push('<cols>');
-        var w = 0;
-        for (var i = 1; i < xPos.length - 1; i++) {
+        let w = 0;
+        for (let i = 1; i < xPos.length - 1; i++) {
             w = 1.0 * (xPos[i + 1] - xPos[i]) / DPI * 25.4 / 2.117;
             w = Math.round(w * 1000) / 1000;
             rst.push('<col min="' + i +'" max="' + i +'" width="' + w + '" customWidth="1"/>');
@@ -463,10 +463,10 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         rst.push('</cols>');
     };
     private_setMergedCells = function() {
-        var cell, idxR, idxL, idxT, idxB, cnt = 0;
+        let cell, idxR, idxL, idxT, idxB, cnt = 0;
         rst.push('<mergeCells count="?">');
-        var startIdx = rst.length - 1;
-        for (var i = 0; i < sheetData.cells.length; i++) {
+        let startIdx = rst.length - 1;
+        for (let i = 0; i < sheetData.cells.length; i++) {
             cell = sheetData.cells[i];
             idxR = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_RIGHT]);
             idxL = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_LEFT]);
@@ -481,7 +481,7 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         rst.push('</mergeCells>');
     };
     private_chkIfNeedCacheCell = function(cell){
-        var rst = false;
+        let rst = false;
         if (cell[JV.PROP_AREA][JV.PROP_LEFT] == pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_LEFT] ||
             cell[JV.PROP_AREA][JV.PROP_RIGHT] == pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_RIGHT] ||
             cell[JV.PROP_AREA][JV.PROP_TOP] == pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP] ||
@@ -496,8 +496,8 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         return rst;
     };
     private_cacheMergeBandBorderIdxs = function() {
-        var cell, idxR, idxL, idxT, idxB;
-        for (var i = 0; i < sheetData.cells.length; i++) {
+        let cell, idxR, idxL, idxT, idxB;
+        for (let i = 0; i < sheetData.cells.length; i++) {
             cell = sheetData.cells[i];
             idxR = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_RIGHT]);
             idxL = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_LEFT]);
@@ -505,8 +505,8 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
             idxT = yPos.indexOf(cell[JV.PROP_AREA][JV.PROP_TOP]);
             if (idxR - idxL > 1 || idxB - idxT > 1) {
                 if (private_chkIfNeedCacheCell(cell)) {
-                    for (var xi = idxL; xi < idxR; xi++) {
-                        for (var yj = idxT; yj < idxB; yj++) {
+                    for (let xi = idxL; xi < idxR; xi++) {
+                        for (let yj = idxT; yj < idxB; yj++) {
                             cacheBorderCell[private_getCellIdxStr(xi - 1) + yj] = cell;
                         }
                     }
@@ -515,7 +515,7 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
         }
     };
     private_getMergedCellStyleId = function(preStyleId, colIdxStr) {
-        var rst = preStyleId;
+        let rst = preStyleId;
         if (cacheBorderCell[colIdxStr]) {
             rst = private_getStyleId(cacheBorderCell[colIdxStr]);
         }
@@ -524,17 +524,17 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
     private_setSheetData = function(){
         //remark: 1 excel height = 0.3612 mm
         rst.push('<sheetData>');
-        var spanX = xPos.length - 2, cellIdx = 0, h = 0,
+        let spanX = xPos.length - 2, cellIdx = 0, h = 0,
             hasMoreCols = true, nextColIdx = -1,
             nextRowIdx = yPos.indexOf(sheetData.cells[cellIdx][JV.PROP_AREA][JV.PROP_TOP])
             ;
         private_cacheMergeBandBorderIdxs();
-        for (var i = 1; i < yPos.length - 1; i++) {
+        for (let i = 1; i < yPos.length - 1; i++) {
             h = 1.0 * (yPos[i+1] - yPos[i]) / DPI * 25.4 / 0.3612;
             h = Math.round(h * 1000) / 1000;
             rst.push('<row r="' + i + '" spans="1:' + spanX + '" ht="' + h + '" customHeight="1">');
             //then put the cells of this row
-            var colIdxStr = '';
+            let colIdxStr = '';
             hasMoreCols = true;
             while (nextRowIdx < i) {
                 if (cellIdx >= sheetData.cells.length || nextRowIdx > i) {
@@ -548,18 +548,18 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
                 hasMoreCols = false;
             }
             nextColIdx = xPos.indexOf(sheetData.cells[cellIdx][JV.PROP_AREA][JV.PROP_LEFT]);
-            var preStyleIdx = 1;
-            for (var j = 1; j < xPos.length - 1; j++) {
+            let preStyleIdx = 1;
+            for (let j = 1; j < xPos.length - 1; j++) {
                 colIdxStr = private_getCellIdxStr(j - 1);
                 if (hasMoreCols) {
                     if (nextColIdx == j) {
-                        var styleIdx = private_getStyleId(sheetData.cells[cellIdx]);
+                        let styleIdx = private_getStyleId(sheetData.cells[cellIdx]);
                         preStyleIdx = styleIdx;
                         if (strUtil.isEmptyString(sheetData.cells[cellIdx][JV.PROP_VALUE])) {
                             rst.push('<c r="' + colIdxStr + i + '" s="' + styleIdx + '"/>');
                             //should setup the right style instead!
                         } else {
-                            var valIdx = private_getSharedStrIdx(sheetData.cells[cellIdx][JV.PROP_VALUE]);
+                            let valIdx = private_getSharedStrIdx(sheetData.cells[cellIdx][JV.PROP_VALUE]);
                             rst.push('<c r="' + colIdxStr + i + '" s="' + styleIdx + '" t="s">');
                             rst.push('<v>' + valIdx + '</v>');
                             rst.push('</c>');
@@ -596,7 +596,7 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
     private_pre_analyze_pos();
     rst.push(dftHeadXml + '\r\n');
     rst.push('<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">');
-    var colStr = private_getCellIdxStr(xPos.length - 3);
+    let colStr = private_getCellIdxStr(xPos.length - 3);
     rst.push('<dimension ref="A1:' + colStr + '' + yPos.length + '"/>');
     rst.push('<sheetViews><sheetView tabSelected="1" workbookViewId="0">');
     rst.push('<selection sqref="A1:' + colStr + '1"/>');
@@ -616,23 +616,23 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
 
 module.exports = {
     exportExcel: function (pageData, fName, options, callback) {
-        var rptOptions = (options || {singlePage: false, fileName: 'report'});
-        var sheets = [];
-        for (var i = 0; i < pageData.items.length; i++) {
+        let rptOptions = (options || {singlePage: false, fileName: 'report'});
+        let sheets = [];
+        for (let i = 0; i < pageData.items.length; i++) {
             sheets.push({sheetName: '第' + (i + 1) + '页'});
         }
         //1.
-        var file = '[Content_Types].xml';
-        var data = writeContentTypes(sheets);
-        var zip = new JSZip();
+        let file = '[Content_Types].xml';
+        let data = writeContentTypes(sheets);
+        let zip = new JSZip();
         zip.file(file, data.join(''), {compression: 'DEFLATE'});
         //2.
-        var zip_rels = zip.folder('_rels');
+        let zip_rels = zip.folder('_rels');
         file = '.rels';
         data = writeRootRels();
         zip_rels.file(file, data.join(''), {compression: 'DEFLATE'});
         //3.
-        var zip_docProps = zip.folder('docProps');
+        let zip_docProps = zip.folder('docProps');
         file = 'app.xml';
         data = writeApp(sheets);
         zip_docProps.file(file, data.join(''), {compression: 'DEFLATE'});
@@ -640,24 +640,24 @@ module.exports = {
         data = writeCore();
         zip_docProps.file(file, data.join(''), {compression: 'DEFLATE'});
         //4.
-        var zip_xl = zip.folder('xl');
+        let zip_xl = zip.folder('xl');
         file = 'workbook.xml';
         data = writeXlWorkBook(sheets);
         zip_xl.file(file, data.join(''), {compression: 'DEFLATE'});
-        var zip_rels2 = zip_xl.folder('_rels');
+        let zip_rels2 = zip_xl.folder('_rels');
         file = 'workbook.xml.rels';
         data = writeXlRels(sheets);
         zip_rels2.file(file, data.join(''), {compression: 'DEFLATE'});
         //5.
-        var zip_theme = zip_xl.folder('theme');
+        let zip_theme = zip_xl.folder('theme');
         file = 'theme1.xml';
         data = writeTheme();
         zip_theme.file(file, data, {compression: 'DEFLATE'});
         //6.
-        var zip_worksheets = zip_xl.folder('worksheets');
-        var sharedStrList = [], stylesObj = {};
+        let zip_worksheets = zip_xl.folder('worksheets');
+        let sharedStrList = [], stylesObj = {};
         data = writeSheets(pageData, sharedStrList, stylesObj);
-        for (var i = 0; i < data.length; i++) {
+        for (let i = 0; i < data.length; i++) {
             file = 'sheet' + (i + 1) + '.xml';
             zip_worksheets.file(file, data[i].join(''), {compression: 'DEFLATE'});
         }
@@ -669,7 +669,7 @@ module.exports = {
         zip_xl.file(file, data.join(''), {compression: 'DEFLATE'});
 
         if (fName) {
-            var newName = '' + (new Date()).valueOf();
+            let newName = '' + (new Date()).valueOf();
             zip.generateNodeStream({type:'nodebuffer',streamFiles:true})
                 .pipe(fs.createWriteStream(__dirname.slice(0, __dirname.length - 21) + '/tmp/' + newName + '.xlsx'))
                 .on('finish', function () {

+ 5 - 5
modules/reports/util/rpt_util.js

@@ -1,10 +1,10 @@
 /**
  * Created by Tony on 2017/3/24.
  */
-var cache = require('../../../public/cache/cacheUtil');
-var cmn_ctrl = require('../models/cfg_control');
-var cmn_font = require('../models/cfg_font');
-var cmn_style = require('../models/cfg_style');
+let cache = require('../../../public/cache/cacheUtil');
+let cmn_ctrl = require('../models/cfg_control');
+let cmn_font = require('../models/cfg_font');
+let cmn_style = require('../models/cfg_style');
 
 const RPT_CFG_GRP = 'rpt_cfg';
 
@@ -27,7 +27,7 @@ module.exports = {
         });
     },
     getReportDefaultCache: function () {
-        var rst = {ctrls: null, fonts: null, styles: null};
+        let rst = {ctrls: null, fonts: null, styles: null};
         rst.ctrls = cache.getCache(RPT_CFG_GRP,'common_ctrls');
         rst.fonts = cache.getCache(RPT_CFG_GRP,'common_fonts');
         rst.styles = cache.getCache(RPT_CFG_GRP,'common_styles');

+ 14 - 14
operation.js

@@ -1,19 +1,19 @@
-var express = require('express');
+let express = require('express');
 
-var config = require("./config/config.js");
+let config = require("./config/config.js");
 config.setToQaDb();
 //config.setupCache();
-var cfgCacheUtil = require("./config/cacheCfg");
+let cfgCacheUtil = require("./config/cacheCfg");
 cfgCacheUtil.setupDftCache();
 
-var path = require('path');
-var session = require('express-session');
-var DBStore = require('connect-mongo')(session);
+let path = require('path');
+let session = require('express-session');
+let DBStore = require('connect-mongo')(session);
 
-var URL = require('url')
+let URL = require('url')
 
-var app = express();
-var _rootDir = __dirname;
+let app = express();
+let _rootDir = __dirname;
 
 app.use(express.static(_rootDir));
 
@@ -21,7 +21,7 @@ app.set('views', path.join(__dirname, 'web'));
 app.engine('.html', require('ejs').__express);
 app.set('view engine', 'html');
 
-var bodyParser = require('body-parser');
+let bodyParser = require('body-parser');
 app.use(bodyParser.urlencoded({extended: false}));
 app.use(bodyParser.json());
 
@@ -39,7 +39,7 @@ app.use(session({
 }));
 
 app.use(function (req, res, next) {
-    var url = req.originalUrl, referer;
+    let url = req.originalUrl, referer;
     if (!/^\/login/.test(req.originalUrl) && !req.session.userAccount) {
         if (/\/api/.test(req.originalUrl)) {
             referer = URL.parse(req.headers.referer);
@@ -53,7 +53,7 @@ app.use(function (req, res, next) {
 
 app.use('/', require('./modules/users/routes/users_route'));
 
-var rpt_Router = require("./modules/reports/routes/report_router");
+let rpt_Router = require("./modules/reports/routes/report_router");
 app.get('/report',  function(req, res) {
     if (!req.session.userAccount) {
         res.redirect('/login');
@@ -66,7 +66,7 @@ app.get('/report',  function(req, res) {
 });
 app.use("/report_api", rpt_Router);
 
-var rptTpl_Router = require("./modules/reports/routes/rpt_tpl_router");
+let rptTpl_Router = require("./modules/reports/routes/rpt_tpl_router");
 app.get('/rpt_tpl',  function(req, res) {
     if (!req.session.userAccount) {
         res.redirect('/login');
@@ -79,7 +79,7 @@ app.get('/rpt_tpl',  function(req, res) {
 });
 app.use("/report_tpl_api", rptTpl_Router);
 
-var rationRepository_Router = require("./modules/ration_repository/routes/ration_rep_routes");
+let rationRepository_Router = require("./modules/ration_repository/routes/ration_rep_routes");
 app.get('/rationRepository/main', function(req, res) {
     res.render('maintain/ration_repository/main.html',
         {

+ 2 - 1
public/web/common_ajax.js

@@ -59,13 +59,14 @@ var CommonAjax = {
             }
         });
     },
-    postEx: function(url, params, dftTimeOutMilSec, successCallback, failCallback, exceptionCallback){
+    postEx: function(url, params, dftTimeOutMilSec, isAsync, successCallback, failCallback, exceptionCallback){
         $.ajax({
             type:"POST",
             url: url,
             data: {'params': JSON.stringify(params)},
             dataType: 'json',
             cache: false,
+            async: isAsync,
             timeout: dftTimeOutMilSec,
             success: function(result){
                 if (!result.error) {

+ 63 - 60
web/maintain/report/js/rpt_tpl_main.js

@@ -1,29 +1,28 @@
-/**
- * Created by Tony on 2017/6/1.
- */
-var rptTplObj = {
+'use strict'
+
+let rptTplObj = {
     iniPage: function() {
-        var me = this
+        let me = this
         zTreeOprObj.getReportTemplateTree(RT.GrpType.CONSTRUCT);
     }
 }
 
-var zTreeOprObj = {
+let zTreeOprObj = {
     treeObj: null,
     currentNode: null,
     getReportTemplateTree: function(grpType) {
-        var me = zTreeOprObj, params = {};
+        let me = zTreeOprObj, params = {};
         params.grpType = grpType;
         params.userId = userID;
         params.tplType = RT.TplType.ALL;
-        CommonAjax.postEx("report_tpl_api/getRptTplTree", params, 20000, function(result){
+        CommonAjax.postEx("report_tpl_api/getRptTplTree", params, 20000, true, function(result){
             zTreeHelper.createTree(result, setting, "rptTplTree", me);
             me.refreshNodes();
         }, null, null
         );
     },
     refreshNodes: function() {
-        var me = this;
+        let me = this;
         private_setupIsParent = function(node){
             if (node.nodeType == RT.NodeType.NODE) {
                 node.isParent = true;
@@ -31,26 +30,30 @@ var zTreeOprObj = {
                 node.isParent = false;
             }
             if (node.items && node.items.length) {
-                for (var i = 0; i < node.items.length; i++) {
+                for (let i = 0; i < node.items.length; i++) {
                     private_setupIsParent(node.items[i]);
                 }
             }
         };
-        var topNodes = me.treeObj.getNodes();
-        for (var i = 0; i < topNodes.length; i++) {
+        let topNodes = me.treeObj.getNodes();
+        for (let i = 0; i < topNodes.length; i++) {
             private_setupIsParent(topNodes[i]);
         }
         me.treeObj.refresh();
     },
     addRootNode: function() {
-        var me = this, rawNode = me.createIniRootNode(), lastNodeId = -1;
+        let me = this, rawNode = me.createIniRootNode(), lastNodeId = -1, lastNode = null;
         if (me.treeObj) {
-            var rootNodes = me.treeObj.getNodes();
+            let rootNodes = me.treeObj.getNodes();
             if (rootNodes.length > 0) {
                 lastNodeId = rootNodes[rootNodes.length - 1].ID;
+                lastNode = rootNodes[rootNodes.length - 1];
             }
             me.addNewNode(rawNode, lastNodeId, function(rst){
-                var newNodes = [], isSilent = false;
+                let newNodes = [], isSilent = false;
+                if (lastNode) {
+                    lastNode.NextSiblingID = rst.ID;
+                }
                 rawNode.ID = rst.ID;
                 rawNode.isParent = true;
                 rawNode.items = [];
@@ -65,30 +68,34 @@ var zTreeOprObj = {
     },
     updateNodes: function(nodes){
         if (nodes && nodes.length > 0) {
-            var me = this;
-            for (var i = 0; i < nodes.length; i++) {
+            let me = this;
+            for (let i = 0; i < nodes.length; i++) {
                 if (nodes[i].__v != null) node.__v = nodes[i].__v + 1
                 else nodes[i].__v = 0;
             }
-            var params = {};
+            let params = {};
             params.nodes = nodes;
-            CommonAjax.postEx("report_tpl_api/updateTptTplNodes", params, 5000, null, null, null);
+            CommonAjax.postEx("report_tpl_api/updateTptTplNodes", params, 5000, true, null, null, null);
         }
     },
     addTplNode: function (){
-        var me = this;
+        let me = this;
         if (me.currentNode) {
-            var rawNode = me.createIniRootNode(), lastNodeId = -1;
+            let rawNode = me.createIniRootNode(), lastNodeId = -1, lastNode = null;
             rawNode.nodeType = RT.NodeType.TEMPLATE;
             rawNode.ParentID = me.currentNode.ID;
             rawNode.name = "新增报表模板";
             if (me.treeObj) {
-                var nodes = me.currentNode.items;
+                let nodes = me.currentNode.items;
                 if (nodes.length > 0) {
                     lastNodeId = nodes[nodes.length - 1].ID;
+                    lastNode = nodes[nodes.length - 1];
                 }
                 me.addNewNode(rawNode, lastNodeId, function(rst){
-                    var newNodes = [], isSilent = false;
+                    let newNodes = [], isSilent = false;
+                    if (lastNode) {
+                        lastNode.NextSiblingID = rst.ID;
+                    }
                     rawNode.ID = rst.ID;
                     rawNode.isParent = false;
                     rawNode.items = [];
@@ -103,13 +110,13 @@ var zTreeOprObj = {
         }
     },
     addNewNode: function(rawNode, lastNodeId, callback, failcallback) {
-        var params = {};
+        let params = {};
         params.lastNodeId = lastNodeId;
         params.rawNodeData = rawNode;
-        CommonAjax.postEx("report_tpl_api/createTplTreeNode", params, 5000, callback, failcallback, null);
+        CommonAjax.postEx("report_tpl_api/createTplTreeNode", params, 5000, true, callback, failcallback, null);
     },
     createIniRootNode: function() {
-        var rst = {
+        let rst = {
             ID: -1,
             ParentID: -1,
             NextSiblingID: -1,
@@ -123,7 +130,7 @@ var zTreeOprObj = {
         return rst;
     },
     createNodeFromZTreeNode: function(treeNode) {
-        var rst = {};
+        let rst = {};
         rst.ID = treeNode.ID;
         rst.ParentID = treeNode.ParentID;
         rst.NextSiblingID = treeNode.NextSiblingID;
@@ -136,27 +143,33 @@ var zTreeOprObj = {
         return rst;
     },
     addHoverDom: function(treeId, treeNode) {
-        var me = zTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
-        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
-        var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子节点' onfocus='this.blur();'></span>";
+        let me = zTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
+        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0 || treeNode.nodeType == RT.NodeType.TEMPLATE) return;
+        let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子节点' onfocus='this.blur();'></span>";
         sObj.after(addStr);
-        var btn = $("#addBtn_"+treeNode.tId);
+        let btn = $("#addBtn_"+treeNode.tId);
         if (btn) btn.bind("click", function(){
-            var rawNode = me.createIniRootNode(), lastNodeId = -1, insertIdx = -1;
+            let rawNode = me.createIniRootNode(), lastNodeId = -1, insertIdx = -1, lastNode = null;
             rawNode.ParentID = treeNode.ID;
             rawNode.name = "新增子节点";
             if (treeNode.items.length > 0) {
-                lastNodeId = treeNode.items[treeNode.items.length - 1].ID;
-                for (var i = treeNode.items.length - 1; i >= 0; i--) {
+                for (let i = treeNode.items.length - 1; i >= 0; i--) {
                     if (treeNode.items[i].nodeType == RT.NodeType.NODE) {
                         lastNodeId = treeNode.items[i].ID;
+                        lastNode = treeNode.items[i];
                         rawNode.NextSiblingID = treeNode.items[i].NextSiblingID;
                         insertIdx = i + 1;
+                    } else {
+                        rawNode.NextSiblingID = treeNode.items[i].ID;
+                        insertIdx = i;
                     }
                 }
             }
             zTreeOprObj.addNewNode(rawNode, lastNodeId, function(rst){
-                var newNodes = [], isSilent = false;
+                let newNodes = [], isSilent = false;
+                if (lastNode) {
+                    lastNode.NextSiblingID = rst.ID;
+                }
                 rawNode.ID = rst.ID;
                 rawNode.isParent = true;
                 rawNode.items = [];
@@ -174,46 +187,36 @@ var zTreeOprObj = {
         $("#addBtn_"+treeNode.tId).unbind().remove();
     },
     onBeforeRemove: function(treeId, treeNode){
-        var nodeIds = [], preNode = treeNode.getPreNode(), preNodeId = -1;
+        let nodeIds = [], preNode = treeNode.getPreNode(), preNodeId = -1, canRemove = false, params = {};
         if (preNode) {
             preNodeId = preNode.ID;
         }
         private_fetchAllSubItems = function(pItem){
             nodeIds.push(pItem.ID);
             if (pItem.items && pItem.items.length > 0) {
-                for (var i = 0; i < pItem.items.length; i++) {
+                for (let i = 0; i < pItem.items.length; i++) {
                     private_fetchAllSubItems(pItem.items[i]);
                 }
             }
         };
         nodeIds.push(treeNode.ID);
-        for (var i = 0; i < treeNode.items.length; i++) {
+        for (let i = 0; i < treeNode.items.length; i++) {
             private_fetchAllSubItems(treeNode.items[i]);
         }
-        //$.ajax({
-        //    type:"POST",
-        //    url:"api/deleteNodes",
-        //    data:{"nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
-        //    dataType:"json",
-        //    cache:false,
-        //    timeout:5000,
-        //    success:function(result,textStatus,status){
-        //        var pNode = treeNode.getParentNode();
-        //        if (pNode && pNode.items && pNode.items.length == 1) {
-        //            pNode.isParent = false;
-        //        }
-        //    },
-        //    error:function(){
-        //    }
-        //});
-        return true;
+        params.nodeIds = nodeIds;
+        params.preNodeId = preNodeId;
+        params.preNodeNextId = treeNode.NextSiblingID;
+        CommonAjax.postEx("report_tpl_api/deleteTptTplNodes", params, 5000, false, function(data){
+            canRemove = true;
+        }, null, null);
+        return canRemove;
     },
     onRemove: function(e, treeId, treeNode){
-        var me = zTreeOprObj, pNode = me.treeObj.getNodeByTId(treeNode.parentTId);
+        let me = zTreeOprObj, pNode = me.treeObj.getNodeByTId(treeNode.parentTId);
         if (pNode && pNode.items && pNode.items.length == 0) {
-            pNode.isParent = false;
+            if (pNode.nodeType == RT.NodeType.NODE) pNode.isParent = true
+            else pNode.isParent = false;
             me.treeObj.refresh();
-            //me.treeObj.updateNode(pNode, false); //这方法有后遗症,多次操作后会造成节点新增子节点时,父节点icon显示不正确
         }
     },
     beforeRename: function(treeId, treeNode, newName, isCancel) {
@@ -223,12 +226,12 @@ var zTreeOprObj = {
         return true;
     },
     onRename : function(e, treeId, treeNode, isCancel) {
-        var me = zTreeOprObj, nodes = [];
+        let me = zTreeOprObj, nodes = [];
         nodes.push(me.createNodeFromZTreeNode(treeNode));
         me.updateNodes(nodes);
     },
     onClick: function(event,treeId,treeNode) {
-        var me = zTreeOprObj;
+        let me = zTreeOprObj;
         if (treeNode.nodeType == RT.NodeType.NODE) {
             me.currentNode = treeNode;
         } else if (treeNode.nodeType == RT.NodeType.TEMPLATE) {