| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 | 'use strict';const JV = require('./jpc_value_define');const JE = require('./jpc_rte');const JpcFieldHelper = require('./helper/jpc_helper_field');const JpcBandHelper = require('./helper/jpc_helper_band');const JpcCommonHelper = require('./helper/jpc_helper_common');const JpcDiscreteHelper = require('./helper/jpc_helper_discrete');const JpcTextHelper = require('./helper/jpc_helper_text');const JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');const JpcAreaHelper = require('./helper/jpc_helper_area');const JpcBillTabSrv = function() {};JpcBillTabSrv.prototype.createNew = function() {    const JpcBillTabResult = {};    JpcBillTabResult.initialize = function() {        const me = this;        me.disp_fields_idx = [];        me.signatureRst = [];        me.signatureDateRst = [];        me.signatureAuditRst = [];        me.figureRst = [];        me.totalPages = 0;    };    JpcBillTabResult.sorting = function(rptTpl) {        const me = this;        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT][JV.PROP_BILL_FIELDS], null, me.disp_fields_idx);    };    JpcBillTabResult.paging = function(rptTpl, dataObj) {        let rst = 0;        const me = this;        function getDataLength(fields_str) {            const dataFields = dataObj[fields_str];            if (dataFields && dataFields.length > 0) {                rst = dataFields[0].length;            }        }        if (rptTpl[JV.NODE_FIELD_MAP]) {            if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {                getDataLength(JV.DATA_DETAIL_DATA);            } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {                getDataLength(JV.DATA_MASTER_DATA);            } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {                getDataLength(JV.DATA_DISCRETE_DATA);            } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_PARAMS]) {                rst = 1;            }        }        me.totalPages = rst;        if (dataObj.splitArcVals && dataObj.splitField) {            // 账单式表 分割            let preVal = dataObj.splitArcVals[0];            let pgIdx = 1;            const pagesForPreSplit = [];            const splitFieldInfo = { Name: dataObj.splitField.Name, ID: dataObj.splitField.ID, splitPageValues: [] };            pagesForPreSplit.push(pgIdx);            splitFieldInfo.splitPageValues.push(preVal);            for (let idx = 1; idx < dataObj.splitArcVals.length; idx++) {                pgIdx++;                if (preVal !== dataObj.splitArcVals[idx]) {                    preVal = dataObj.splitArcVals[idx];                    pagesForPreSplit.push(pgIdx);                    splitFieldInfo.splitPageValues.push(preVal);                }            }            dataObj.splitArcPages = pagesForPreSplit;            dataObj.splitArcPagesInfo = splitFieldInfo;        }        return rst;    };    JpcBillTabResult.outputAsPreviewPage = function(rptTpl, bands, controls, $CURRENT_RPT) {        const me = this;        let rst = [];        // const vIdx = [];        // 只预览第一页的数据        const pageStatus = [true, true, true, true, true, true, true, true];        JpcBandHelper.setBandArea(bands, rptTpl, pageStatus, true, false);        const unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);        me.signatureRst = [];        me.signatureDateRst = [];        me.signatureAuditRst = [];        me.interactRst = [];        rst = rst.concat(me.outputPreviewContent(rptTpl, bands, unitFactor, controls, pageStatus, $CURRENT_RPT));        rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus, $CURRENT_RPT, me.interactRst, me.signatureRst, me.signatureDateRst, me.signatureAuditRst));        return rst;    };    JpcBillTabResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, page, bands, controls, fonts, $CURRENT_RPT, customizeCfg) {        const me = this;        let rst = [];        me.signatureRst = [];        me.signatureDateRst = [];        me.signatureAuditRst = [];        me.interactRst = [];        const tabRstLst = [];        // 1. calculate the band position        const pageStatus = [true, false, false, false, false, false, false, false];        if (page === 1) {            pageStatus[JV.STATUS_REPORT_START] = true;            pageStatus[JV.STATUS_SEGMENT_START] = true;        }        if (page === me.totalPages) {            pageStatus[JV.STATUS_REPORT_END] = true;            pageStatus[JV.STATUS_SEGMENT_END] = true;        }        JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);        // 2. start to output detail-part        const unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);        //  2.1 output content        tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg));        //  2.2 output discrete        tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 0, 1, 0, $CURRENT_RPT, customizeCfg, me.signatureRst, me.signatureDateRst, me.signatureAuditRst, me.interactRst));        for (let i = 0; i < tabRstLst.length; i++) {            rst = rst.concat(tabRstLst[i]);            tabRstLst[i] = null;        }        return rst;    };    JpcBillTabResult.outputPreviewContent = function(rptTpl, bands, unitFactor, controls, pageStatus, $CURRENT_RPT) {        const me = this;        let rst = [];        const tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];        const band = bands[tab[JV.PROP_BAND_NAME]];        if (band) {            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {                const tab_fields = tab[JV.PROP_BILL_FIELDS];                for (let i = 0; i < tab_fields.length; i++) {                    const tab_field = tab_fields[i];                    if (!(tab_field[JV.PROP_HIDDEN])) {                        if (!JpcDiscreteHelper.setupSignatureFieldParam(me.signatureRst, me.signatureDateRst, me.signatureAuditRst, me.interactRst, $CURRENT_RPT, band, unitFactor, tab_field)) {                            const cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, '', controls);                            cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);                            if (JE.isInterActionParam(tab_field[JV.PROP_PARAM_ID], $CURRENT_RPT)) {                                const iParam = JE.P(tab_field[JV.PROP_PARAM_ID], $CURRENT_RPT);                                cellItem[JV.PROP_BAND_NAME] = band.Name;                                cellItem[JV.PROP_DATA_TYPE] = iParam[JV.PROP_DATA_TYPE];                                cellItem[JV.PROP_LABEL] = iParam[JV.PROP_NAME];                                cellItem[JV.PROP_PREFIX] = tab_field[JV.PROP_PREFIX];                                this.interactRst.push(cellItem);                            } else {                                rst.push(cellItem);                            }                        }                    }                }                if (tab[JV.PROP_TEXT]) {                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));                }                if (tab[JV.PROP_TEXTS]) {                    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));                    }                }                if (tab[JV.NODE_DISCRETE_INFO]) {                    rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus, $CURRENT_RPT, this.interactRst, me.signatureRst, me.signatureDateRst, me.signatureAuditRst));                }            }        }        return rst;    };    JpcBillTabResult.outputContent = function(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg) {        const me = this;        let rst = [];        const tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];        const band = bands[tab[JV.PROP_BAND_NAME]];        if (band) {            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {                const tab_fields = tab[JV.PROP_BILL_FIELDS];                let data_details = null;                if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {                    data_details = dataObj[JV.DATA_DETAIL_DATA];                } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {                    data_details = dataObj[JV.DATA_MASTER_DATA];                }                let flexiblePrecisionRefObj = null;                let flexibleRefField;                let precision_ref_data;                let isPic = false;                for (let i = 0; i < tab_fields.length; i++) {                    const tab_field = tab_fields[i];                    if (!JpcDiscreteHelper.setupSignatureFieldParam(me.signatureRst, me.signatureDateRst, me.signatureAuditRst, me.interactRst, $CURRENT_RPT, band, unitFactor, tab_field)) {                        let data_field = null;                        const map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);                        isPic = (map_data_field.isPic !== undefined && map_data_field.isPic);                        if (me.disp_fields_idx.length > i && me.disp_fields_idx[i] !== JV.BLANK_FIELD_INDEX && (typeof me.disp_fields_idx[i] !== 'object')) {                            data_field = data_details[me.disp_fields_idx[i]];                        } else {                            if (map_data_field) {                                data_field = map_data_field[JV.PROP_AD_HOC_DATA];                            }                        }                        if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {                            if (flexiblePrecisionRefObj === null) {                                flexiblePrecisionRefObj = {};                                flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);                                precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];                                for (const decimalObj of map_data_field.flexiblePrecisionRefObj) {                                    flexiblePrecisionRefObj['refUnit_' + decimalObj.unit] = decimalObj.decimal;                                }                            }                            JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, page - 1, customizeCfg);                        } else {                            if (page === 1) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);                        }                        if (!(tab_field[JV.PROP_HIDDEN])) {                            const val = JpcFieldHelper.getValue(data_field, page - 1);                            const 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);                            if (isPic && cellItem[JV.PROP_VALUE] !== undefined && cellItem[JV.PROP_VALUE] !== null && cellItem[JV.PROP_VALUE] !== '') {                                if (Array.isArray(me.signatureRst)) {                                    if (cellItem[JV.PROP_VALUE][0] !== '/') {                                        cellItem[JV.PROP_VALUE] = '/' + cellItem[JV.PROP_VALUE];                                    }                                    const signatureItem = { signature_name: JV.SIGNATURE_NAME_DUMMY, path: cellItem[JV.PROP_VALUE], pic: null }; // 这里的pic数据在指标中里已经处理过了                                    signatureItem[JV.PROP_CONTROL] = cellItem[[JV.PROP_CONTROL]];                                    signatureItem[JV.PROP_STYLE] = cellItem[[JV.PROP_STYLE]];                                    signatureItem[JV.PROP_AREA] = cellItem[JV.PROP_AREA];                                    me.signatureRst.push(signatureItem);                                    cellItem[JV.PROP_VALUE] = '';                                }                            }                            rst.push(cellItem); // 不管是不是Pic,都得保留一个壳子                        }                    }                }                if (tab[JV.PROP_TEXT]) {                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));                }                if (tab[JV.PROP_TEXTS]) {                    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));                    }                }                if (tab[JV.NODE_DISCRETE_INFO]) {                    rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 0, 1, 0, customizeCfg, me.signatureRst, me.signatureDateRst, me.signatureAuditRst, me.interactRst));                }            }        }        return rst;    };    return JpcBillTabResult;};module.exports = new JpcBillTabSrv();
 |