Browse Source

code sync and cross tab UI

TonyKang 6 years ago
parent
commit
387deb304f

+ 27 - 6
modules/reports/rpt_component/helper/jpc_helper_cross_tab.js

@@ -28,7 +28,7 @@ let JpcCrossTabHelper = {
     },
     },
     sortFieldValue: function(sIDX, eIDX, sortOrder, dataField, dataValSeq) {
     sortFieldValue: function(sIDX, eIDX, sortOrder, dataField, dataValSeq) {
         let tmpSeq = [];
         let tmpSeq = [];
-        if ((sortOrder) && (sortOrder != JV.TAB_FIELD_PROP_SORT_VAL_NOSORT)) {
+        if ((sortOrder) && (sortOrder !== JV.TAB_FIELD_PROP_SORT_VAL_NOSORT)) {
             if (sIDX >= 0 && eIDX >= sIDX && dataValSeq.length > eIDX) {
             if (sIDX >= 0 && eIDX >= sIDX && dataValSeq.length > eIDX) {
                 let reversed = 1;
                 let reversed = 1;
                 if (sortOrder === JV.TAB_FIELD_PROP_SORT_VAL_DESC) {
                 if (sortOrder === JV.TAB_FIELD_PROP_SORT_VAL_DESC) {
@@ -39,7 +39,8 @@ let JpcCrossTabHelper = {
                 }
                 }
                 tmpSeq.sort(function(idx1, idx2) {
                 tmpSeq.sort(function(idx1, idx2) {
                     let rst = 0;
                     let rst = 0;
-                    if (isNaN(parseFloat(dataField[idx1])) || isNaN(parseFloat(dataField[idx1]))) {
+                    // if (isNaN(parseFloat(dataField[idx1])) || isNaN(parseFloat(dataField[idx1]))) {
+                    if (typeof (dataField[idx1]) === 'string' || typeof (dataField[idx1]) === 'string' ) {
                         if (dataField[idx1] > dataField[idx2]) {
                         if (dataField[idx1] > dataField[idx2]) {
                             rst = reversed;
                             rst = reversed;
                         } else if (dataField[idx1] < dataField[idx2]) {
                         } else if (dataField[idx1] < dataField[idx2]) {
@@ -78,7 +79,7 @@ let JpcCrossTabHelper = {
         let sIDX = 0, eIDX = -1, isFirstSort = true;
         let sIDX = 0, eIDX = -1, isFirstSort = true;
         for (let i = 0; i < tabFields.length; i++) {
         for (let i = 0; i < tabFields.length; i++) {
             let tabField = tabFields[i];
             let tabField = tabFields[i];
-            if (tabField[JV.TAB_FIELD_PROP_SORT] != JV.TAB_FIELD_PROP_SORT_VAL_NOSORT) {
+            if (tabField[JV.TAB_FIELD_PROP_SORT] !== JV.TAB_FIELD_PROP_SORT_VAL_NOSORT) {
                 if (isFirstSort) {
                 if (isFirstSort) {
                     isFirstSort = false;
                     isFirstSort = false;
                     //first field, should sort all data items
                     //first field, should sort all data items
@@ -86,7 +87,17 @@ let JpcCrossTabHelper = {
                         sIDX = 0;
                         sIDX = 0;
                         eIDX = dataSeq[j].length - 1;
                         eIDX = dataSeq[j].length - 1;
                         //sort the field value here
                         //sort the field value here
-                        me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT],data_details[fieldSeqs[i]], dataSeq[j]);
+                        if (typeof(fieldSeqs[i]) === "object") {
+                            let exFirstField = JE.F(fieldSeqs[i][JV.PROP_ID], $CURRENT_RPT);
+                            if (exFirstField) {
+                                me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT], exFirstField[JV.PROP_AD_HOC_DATA], dataSeq[j]);
+                            } else {
+                                //不排序(健壮性)
+                            }
+                        } else {
+                            me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT],data_details[fieldSeqs[i]], dataSeq[j]);
+                        }
+                        // me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT],data_details[fieldSeqs[i]], dataSeq[j]);
                     }
                     }
                 } else {
                 } else {
                     //then sort the rest fields one by one
                     //then sort the rest fields one by one
@@ -96,7 +107,7 @@ let JpcCrossTabHelper = {
                             if (typeof(fieldSeqs[k]) === "object") {
                             if (typeof(fieldSeqs[k]) === "object") {
                                 let exField = JE.F(fieldSeqs[k][JV.PROP_ID], $CURRENT_RPT);
                                 let exField = JE.F(fieldSeqs[k][JV.PROP_ID], $CURRENT_RPT);
                                 if (exField) {
                                 if (exField) {
-                                    chkFields.push(exField["data_field"]);
+                                    chkFields.push(exField[JV.PROP_AD_HOC_DATA]);
                                 } else {
                                 } else {
                                     chkFields.push(null);
                                     chkFields.push(null);
                                 }
                                 }
@@ -114,7 +125,17 @@ let JpcCrossTabHelper = {
                             };
                             };
                             if (eIDX >= sIDX) {
                             if (eIDX >= sIDX) {
                                 if (eIDX != sIDX) {
                                 if (eIDX != sIDX) {
-                                    me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT],data_details[fieldSeqs[i]], dataSeq[j]);
+                                    if (typeof(fieldSeqs[i]) === "object") {
+                                        let exOtherField = JE.F(fieldSeqs[i][JV.PROP_ID], $CURRENT_RPT);
+                                        if (exOtherField) {
+                                            me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT], exOtherField[JV.PROP_AD_HOC_DATA], dataSeq[j]);
+                                        } else {
+                                            //不排序(健壮性)
+                                        }
+                                    } else {
+                                        me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT],data_details[fieldSeqs[i]], dataSeq[j]);
+                                    }
+                                    // me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT],data_details[fieldSeqs[i]], dataSeq[j]);
                                 }
                                 }
                                 sIDX = m;
                                 sIDX = m;
                                 eIDX = m - 1; //for protection purpose
                                 eIDX = m - 1; //for protection purpose

+ 38 - 8
modules/reports/rpt_component/jpc_cross_tab.js

@@ -123,9 +123,17 @@ JpcCrossTabSrv.prototype.createNew = function(){
                     for (let j = 1; j < dataSeq[i].length; j++) {
                     for (let j = 1; j < dataSeq[i].length; j++) {
                         b1 = false;
                         b1 = false;
                         for (let 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;
+                            if (typeof(rstFieldsIdx[k]) === 'object') {
+                                let map_data_field = JE.F(rstFieldsIdx[k][JV.PROP_ID], $CURRENT_RPT);
+                                if (map_data_field[JV.PROP_AD_HOC_DATA][dataSeq[i][j - 1]] !== map_data_field[JV.PROP_AD_HOC_DATA][dataSeq[i][j]]) {
+                                    b1 = true;
+                                    break;
+                                }
+                            } else {
+                                if (data_details[rstFieldsIdx[k]][dataSeq[i][j - 1]] !== data_details[rstFieldsIdx[k]][dataSeq[i][j]]) {
+                                    b1 = true;
+                                    break;
+                                }
                             }
                             }
                         }
                         }
                         if (b1) {
                         if (b1) {
@@ -206,7 +214,15 @@ JpcCrossTabSrv.prototype.createNew = function(){
         let data_details = dataObj[JV.DATA_DETAIL_DATA],
         let data_details = dataObj[JV.DATA_DETAIL_DATA],
             data_fields = [];
             data_fields = [];
         for (let i = 0; i < me.col_sum_fields_idx.length; i++) {
         for (let i = 0; i < me.col_sum_fields_idx.length; i++) {
-            let data_field = data_details[me.col_sum_fields_idx[i]];
+            let data_field = null;
+            if (typeof me.col_sum_fields_idx[i] === 'object') {
+                let exField = JE.F(me.col_sum_fields_idx[i][JV.PROP_ID], $CURRENT_RPT);
+                if (exField) {
+                    data_field = exField[JV.PROP_AD_HOC_DATA];
+                }
+            } else {
+                data_field = data_details[me.col_sum_fields_idx[i]];
+            }
             data_fields.push(data_field);
             data_fields.push(data_field);
         }
         }
         for (let i = 0; i < me.sortedRowSequence.length; i++) { //seg level
         for (let i = 0; i < me.sortedRowSequence.length; i++) { //seg level
@@ -467,9 +483,16 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 for (let i = 0; i < me.row_fields_idx.length; i++) {
                 for (let i = 0; i < me.row_fields_idx.length; i++) {
                     let tab_field = tab_fields[i];
                     let tab_field = tab_fields[i];
-                    let data_field = data_details[me.row_fields_idx[i]];
-                    let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
                     if (!(tab_field[JV.PROP_HIDDEN])) {
                     if (!(tab_field[JV.PROP_HIDDEN])) {
+                        let data_field = null;
+                        let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
+                        if (typeof me.row_fields_idx[i] !== 'object') {
+                            data_field = data_details[me.row_fields_idx[i]];
+                        } else {
+                            if (map_data_field) {
+                                data_field = map_data_field[JV.PROP_AD_HOC_DATA];
+                            }
+                        }
                         let rows = valuesIdx.length;
                         let rows = valuesIdx.length;
                         for (let rowIdx = 0; rowIdx < rows; rowIdx++) {
                         for (let rowIdx = 0; rowIdx < rows; rowIdx++) {
                             if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
                             if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
@@ -506,9 +529,16 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
                 for (let i = 0; i < me.col_fields_idx.length; i++) {
                 for (let i = 0; i < me.col_fields_idx.length; i++) {
                     let tab_field = tab_fields[i];
                     let tab_field = tab_fields[i];
-                    let data_field = data_details[me.col_fields_idx[i]];
-                    let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
                     if (!(tab_field[JV.PROP_HIDDEN])) {
                     if (!(tab_field[JV.PROP_HIDDEN])) {
+                        let data_field = null;
+                        let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
+                        if (typeof me.col_fields_idx[i] !== 'object') {
+                            data_field = data_details[me.col_fields_idx[i]];
+                        } else {
+                            if (map_data_field) {
+                                data_field = map_data_field[JV.PROP_AD_HOC_DATA];
+                            }
+                        }
                         let cols = valuesIdx.length;
                         let cols = valuesIdx.length;
                         for (let colIdx = 0; colIdx < cols; colIdx++) {
                         for (let colIdx = 0; colIdx < cols; colIdx++) {
                             if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
                             if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {

+ 20 - 17
modules/reports/rpt_component/jpc_ex.js

@@ -168,25 +168,28 @@ JpcExSrv.prototype.createNew = function(){
         let me = this, dftPagingOption = option||JV.PAGING_OPTION_NORMAL;
         let me = this, dftPagingOption = option||JV.PAGING_OPTION_NORMAL;
         //1. data object
         //1. data object
         let 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!
-        //let dt1 = new Date();
-        if (me.flowTab) {
-            me.flowTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0), me);
-            if (me.flowTabEx) {
-                me.flowTabEx.sorting(rptTpl, dataObj, dataHelper.exDataSeq.slice(0), me);
-            }
-        }
-        if (me.billTab) {
-            me.billTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0), me);
-        }
-        //let dt2 = new Date();
-        //alert(dt2 - dt1);
-        //3. formulas
-        me.executeFormulas(JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
         if (me.crossTab) {
         if (me.crossTab) {
+            me.executeFormulas(JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
+            dataHelper.analyzeData(rptTpl, dataObj);
             me.crossTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0), me);
             me.crossTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0), me);
+        } else {
+            dataHelper.analyzeData(rptTpl, dataObj);
+            //2. tab object
+            //pre-condition: the data should be sorted in SQL/NoSQL level!
+            //let dt1 = new Date();
+            if (me.flowTab) {
+                me.flowTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0), me);
+                if (me.flowTabEx) {
+                    me.flowTabEx.sorting(rptTpl, dataObj, dataHelper.exDataSeq.slice(0), me);
+                }
+            }
+            if (me.billTab) {
+                me.billTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0), me);
+            }
+            //let dt2 = new Date();
+            //alert(dt2 - dt1);
+            //3. formulas
+            me.executeFormulas(JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
         }
         }
         //4. paging
         //4. paging
         me.paging(rptTpl, dataObj, defProperties, dftPagingOption, outputType);
         me.paging(rptTpl, dataObj, defProperties, dftPagingOption, outputType);

+ 5 - 54
modules/reports/rpt_component/jpc_flow_tab.js

@@ -199,7 +199,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
             if (typeof(me.seg_sum_fields_idx[i]) === "object") {
             if (typeof(me.seg_sum_fields_idx[i]) === "object") {
                 let exField = JE.F(me.seg_sum_fields_idx[i][JV.PROP_ID], $CURRENT_RPT);
                 let exField = JE.F(me.seg_sum_fields_idx[i][JV.PROP_ID], $CURRENT_RPT);
                 if (exField) {
                 if (exField) {
-                    data_fields.push(exField["data_field"]);
+                    data_fields.push(exField[JV.PROP_AD_HOC_DATA]);
                 } else {
                 } else {
                     data_fields.push(null);
                     data_fields.push(null);
                 }
                 }
@@ -737,59 +737,10 @@ JpcFlowTabSrv.prototype.createNew = function(){
             vIdx.push([-1, JV.DISPLAY_VAL_TYPE_NORMAL, JV.BLANK_VALUE_INDEX]);
             vIdx.push([-1, JV.DISPLAY_VAL_TYPE_NORMAL, JV.BLANK_VALUE_INDEX]);
         }
         }
         let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
         let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
-        // me.multiCols = 1 * rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN];
-        let newMultiCols = 1 * rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN];
         // 2.2 Column tab
         // 2.2 Column tab
-        let private_colone_cells = function(orgCells) {
-            let newRst = [];
-            let newCopyCells = [];
-            newCopyCells.push(orgCells);
-            if (newMultiCols > 1) {
-                let minX = 10000, maxX = -10;
-                for (let cell of orgCells) {
-                    if (minX > parseInt(cell[JV.PROP_AREA][JV.PROP_LEFT])) minX = cell[JV.PROP_AREA][JV.PROP_LEFT];
-                    if (maxX < parseInt(cell[JV.PROP_AREA][JV.PROP_RIGHT])) maxX = cell[JV.PROP_AREA][JV.PROP_RIGHT];
-                }
-                let newW = maxX - minX, newSegW = newW / newMultiCols;
-                for (let i = 1; i < newMultiCols; i++) {
-                    let cells = [];
-                    for (let cell of orgCells) {
-                        let copyCell = {Value: cell.Value, area: {}, font: cell[JV.PROP_FONT], control: cell[JV.PROP_CONTROL], style: cell[JV.PROP_STYLE]};
-                        cells.push(copyCell);
-                        copyCell[JV.PROP_AREA][JV.PROP_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
-                        copyCell[JV.PROP_AREA][JV.PROP_RIGHT] = cell[JV.PROP_AREA][JV.PROP_RIGHT];
-                        copyCell[JV.PROP_AREA][JV.PROP_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
-                        copyCell[JV.PROP_AREA][JV.PROP_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
-                    }
-                    newCopyCells.push(cells);
-                }
-                for (let ci = 0; ci < newCopyCells.length; ci++) {
-                    for (let cCell of newCopyCells[ci]) {
-                        cCell[JV.PROP_AREA][JV.PROP_LEFT] = Math.round(minX + newSegW * ci + (cCell[JV.PROP_AREA][JV.PROP_LEFT] - minX) / newMultiCols);
-                        cCell[JV.PROP_AREA][JV.PROP_RIGHT] = Math.round(minX + newSegW * ci + (cCell[JV.PROP_AREA][JV.PROP_RIGHT] - minX) / newMultiCols);
-                    }
-                }
-            }
-            for (let cCells of newCopyCells) {
-                for (let dCell of cCells) {
-                    newRst.push(dCell);
-                }
-            }
-            return newRst;
-        };
-        let tmpColCells = me.outputColumn(rptTpl, null, 1, 0, bands, unitFactor, 0);
-        if (newMultiCols > 1) {
-            tmpColCells = private_colone_cells(tmpColCells);
-        }
-        rst = rst.concat(tmpColCells);
+        rst = rst.concat(me.outputColumn(rptTpl, null, 1, 0, bands, unitFactor, 0));
         // 2.1 Content-Tab
         // 2.1 Content-Tab
-        let tmpContentCells = me.outputPreviewContent(rptTpl, bands, unitFactor, controls, pageStatus, maxRowRec);
-        if (newMultiCols > 1) {
-            tmpContentCells = private_colone_cells(tmpContentCells);
-        } else {
-            // rst = rst.concat(me.outputPreviewContent(rptTpl, bands, unitFactor, controls, pageStatus, maxRowRec));
-        }
-        rst = rst.concat(tmpContentCells);
+        rst = rst.concat(me.outputPreviewContent(rptTpl, bands, unitFactor, controls, pageStatus, maxRowRec));
         // 2.3 Sum Seg
         // 2.3 Sum Seg
         rst = rst.concat(me.outputPreviewSegSum(rptTpl, bands, unitFactor, controls, pageStatus));
         rst = rst.concat(me.outputPreviewSegSum(rptTpl, bands, unitFactor, controls, pageStatus));
         // 2.4 Sum Page
         // 2.4 Sum Page
@@ -903,10 +854,10 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 let contentValuesIdx = me.dispValueIdxLst[page - 1];
                 let contentValuesIdx = me.dispValueIdxLst[page - 1];
                 let page_sum_data_fields = [];
                 let page_sum_data_fields = [];
                 for (let i = 0; i < me.page_sum_fields_idx.length; i++) {
                 for (let i = 0; i < me.page_sum_fields_idx.length; i++) {
-                    if (typeof(me.page_sum_fields_idx[i])=="object") {
+                    if (typeof(me.page_sum_fields_idx[i]) === "object") {
                         let exField = JE.F(me.page_sum_fields_idx[i][JV.PROP_ID], $CURRENT_RPT);
                         let exField = JE.F(me.page_sum_fields_idx[i][JV.PROP_ID], $CURRENT_RPT);
                         if (exField) {
                         if (exField) {
-                            page_sum_data_fields.push(exField["data_field"]);
+                            page_sum_data_fields.push(exField[JV.PROP_AD_HOC_DATA]);
                         } else {
                         } else {
                             page_sum_data_fields.push(null);
                             page_sum_data_fields.push(null);
                         }
                         }

+ 10 - 2
web/maintain/report/html/rpt_tpl_dtl_field_loc.html

@@ -21,8 +21,12 @@
             <div class="row" id="element_hidden">
             <div class="row" id="element_hidden">
                 <!--
                 <!--
                 <div class="form-group col-md-2">
                 <div class="form-group col-md-2">
-                    <label>排序类型</label>
-                    <select class="form-control" id="elementSortType" onchange=""><option>ascend</option><option>descend</option></select>
+                    <label>指标排序(升序)</label>
+                    <div class="form-check">
+                        <label class="form-check-label">
+                            <input type="checkbox" class="form-check-input" id="eleFieldSort" onchange="rpt_tpl_cfg_helper.crossSortOrderChange(this)">
+                        </label>
+                    </div>
                 </div>
                 </div>
                 -->
                 -->
                 <div class="form-group col-md-1">
                 <div class="form-group col-md-1">
@@ -41,6 +45,10 @@
                         </label>
                         </label>
                     </div>
                     </div>
                 </div>
                 </div>
+                <div class="form-group col-md-2">
+                    <label>排序类型</label>
+                    <select class="form-control" id="elementSortType" onchange="rpt_tpl_cfg_helper.crossSortOrderChange(this)"><option>无排序</option><option>升序</option><option>降序</option></select>
+                </div>
             </div>
             </div>
             <div class="row" id="element_font">
             <div class="row" id="element_font">
                 <div class="form-group col-md-3">
                 <div class="form-group col-md-3">

+ 27 - 0
web/maintain/report/js/rpt_tpl_cfg_helper.js

@@ -124,6 +124,17 @@ let rpt_tpl_cfg_helper = {
             } else {
             } else {
                 $("#eleFieldSerial").get(0).checked = false;
                 $("#eleFieldSerial").get(0).checked = false;
             }
             }
+            if (treeNode[JV.TAB_FIELD_PROP_SORT] !== null && treeNode[JV.TAB_FIELD_PROP_SORT] !== undefined) {
+                if (treeNode[JV.TAB_FIELD_PROP_SORT] === JV.TAB_FIELD_PROP_SORT_VAL_ASC) {
+                    $("#elementSortType").get(0).selectedIndex = 1;
+                } else if (treeNode[JV.TAB_FIELD_PROP_SORT] === JV.TAB_FIELD_PROP_SORT_VAL_DESC) {
+                    $("#elementSortType").get(0).selectedIndex = 2;
+                } else {
+                    $("#elementSortType").get(0).selectedIndex = 0;
+                }
+            } else {
+                $("#elementSortType").get(0).selectedIndex = 0;
+            }
             //setup font
             //setup font
             let fontDom = $("#elementFonts").get(0);
             let fontDom = $("#elementFonts").get(0);
             fontDom.removeAttribute("disabled");
             fontDom.removeAttribute("disabled");
@@ -202,6 +213,22 @@ let rpt_tpl_cfg_helper = {
     crossRowIsSerialChange: function (dom) {
     crossRowIsSerialChange: function (dom) {
         dataInfoMapTreeOprObj.currentNode[JV.PROP_IS_SERIAL] = dom.checked;
         dataInfoMapTreeOprObj.currentNode[JV.PROP_IS_SERIAL] = dom.checked;
     },
     },
+    crossSortOrderChange: function (dom) {
+        switch (dom.selectedIndex) {
+            case 0:
+                dataInfoMapTreeOprObj.currentNode[JV.TAB_FIELD_PROP_SORT] = JV.TAB_FIELD_PROP_SORT_VAL_NOSORT;
+                break;
+            case 1:
+                dataInfoMapTreeOprObj.currentNode[JV.TAB_FIELD_PROP_SORT] = JV.TAB_FIELD_PROP_SORT_VAL_ASC;
+                break;
+            case 2:
+                dataInfoMapTreeOprObj.currentNode[JV.TAB_FIELD_PROP_SORT] = JV.TAB_FIELD_PROP_SORT_VAL_DESC;
+                break;
+            default:
+                dataInfoMapTreeOprObj.currentNode[JV.TAB_FIELD_PROP_SORT] = JV.TAB_FIELD_PROP_SORT_VAL_ASC;
+                break;
+        }
+    },
     fontChange: function(dom) {
     fontChange: function(dom) {
         let me = rpt_tpl_cfg_helper, fontAttr = dom.value;
         let me = rpt_tpl_cfg_helper, fontAttr = dom.value;
         //dataInfoMapTreeOprObj.currentNode
         //dataInfoMapTreeOprObj.currentNode

+ 1 - 0
web/maintain/report/js/rpt_tpl_data_map.js

@@ -402,6 +402,7 @@ let dataInfoMapTreeOprObj = {
         else destination[JV.PROP_IS_AUTO_HEIGHT] = false;
         else destination[JV.PROP_IS_AUTO_HEIGHT] = false;
         if (source[JV.PROP_HIDDEN]) destination[JV.PROP_HIDDEN] = true;
         if (source[JV.PROP_HIDDEN]) destination[JV.PROP_HIDDEN] = true;
         if (source[JV.PROP_IS_SERIAL]) destination[JV.PROP_IS_SERIAL] = true;
         if (source[JV.PROP_IS_SERIAL]) destination[JV.PROP_IS_SERIAL] = true;
+        if (source[JV.TAB_FIELD_PROP_SORT]) destination[JV.TAB_FIELD_PROP_SORT] = source[JV.TAB_FIELD_PROP_SORT];
         if (source[JV.PROP_AREA]) {
         if (source[JV.PROP_AREA]) {
             destination[JV.PROP_AREA] = {};
             destination[JV.PROP_AREA] = {};
             me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]);
             me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]);