'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++) { if (preVal !== dataObj.splitArcVals[idx]) { preVal = dataObj.splitArcVals[idx]; pgIdx++; } 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();