jpc_bill_tab.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. 'use strict';
  2. const JV = require('./jpc_value_define');
  3. const JE = require('./jpc_rte');
  4. const JpcFieldHelper = require('./helper/jpc_helper_field');
  5. const JpcBandHelper = require('./helper/jpc_helper_band');
  6. const JpcCommonHelper = require('./helper/jpc_helper_common');
  7. const JpcDiscreteHelper = require('./helper/jpc_helper_discrete');
  8. const JpcTextHelper = require('./helper/jpc_helper_text');
  9. const JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');
  10. const JpcAreaHelper = require('./helper/jpc_helper_area');
  11. const JpcBillTabSrv = function() {};
  12. JpcBillTabSrv.prototype.createNew = function() {
  13. const JpcBillTabResult = {};
  14. JpcBillTabResult.initialize = function() {
  15. const me = this;
  16. me.disp_fields_idx = [];
  17. me.signatureRst = [];
  18. me.signatureDateRst = [];
  19. me.signatureAuditRst = [];
  20. };
  21. JpcBillTabResult.sorting = function(rptTpl) {
  22. const me = this;
  23. JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT][JV.PROP_BILL_FIELDS], null, me.disp_fields_idx);
  24. };
  25. JpcBillTabResult.paging = function(rptTpl, dataObj) {
  26. let rst = 0;
  27. function getDataLength(fields_str) {
  28. const dataFields = dataObj[fields_str];
  29. if (dataFields && dataFields.length > 0) {
  30. rst = dataFields[0].length;
  31. }
  32. }
  33. if (rptTpl[JV.NODE_FIELD_MAP]) {
  34. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
  35. getDataLength(JV.DATA_DETAIL_DATA);
  36. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
  37. getDataLength(JV.DATA_MASTER_DATA);
  38. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
  39. getDataLength(JV.DATA_DISCRETE_DATA);
  40. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_PARAMS]) {
  41. rst = 1;
  42. }
  43. }
  44. return rst;
  45. };
  46. JpcBillTabResult.outputAsPreviewPage = function(rptTpl, bands, controls, $CURRENT_RPT) {
  47. const me = this;
  48. let rst = [];
  49. // const vIdx = [];
  50. // 只预览第一页的数据
  51. const pageStatus = [true, true, false, true, false, false, false, false];
  52. JpcBandHelper.setBandArea(bands, rptTpl, pageStatus, true, false);
  53. const unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  54. rst = rst.concat(me.outputPreviewContent(rptTpl, bands, unitFactor, controls, pageStatus));
  55. rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus));
  56. return rst;
  57. };
  58. JpcBillTabResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, page, bands, controls, $CURRENT_RPT, customizeCfg) {
  59. const me = this;
  60. let rst = [];
  61. me.signatureRst = [];
  62. me.signatureDateRst = [];
  63. me.signatureAuditRst = [];
  64. const tabRstLst = [];
  65. // 1. calculate the band position
  66. const pageStatus = [true, false, false, false, false, false, false, false];
  67. JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
  68. // 2. start to output detail-part
  69. const unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  70. // 2.1 output content
  71. tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg));
  72. // 2.2 output discrete
  73. 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));
  74. for (let i = 0; i < tabRstLst.length; i++) {
  75. rst = rst.concat(tabRstLst[i]);
  76. tabRstLst[i] = null;
  77. }
  78. return rst;
  79. };
  80. JpcBillTabResult.outputPreviewContent = function(rptTpl, bands, unitFactor, controls, pageStatus) {
  81. let rst = [];
  82. const tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
  83. const band = bands[tab[JV.PROP_BAND_NAME]];
  84. if (band) {
  85. if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
  86. const tab_fields = tab[JV.PROP_BILL_FIELDS];
  87. for (let i = 0; i < tab_fields.length; i++) {
  88. const tab_field = tab_fields[i];
  89. if (!(tab_field[JV.PROP_HIDDEN])) {
  90. const cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, '', controls);
  91. cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  92. rst.push(cellItem);
  93. }
  94. }
  95. if (tab[JV.PROP_TEXT]) {
  96. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
  97. }
  98. if (tab[JV.PROP_TEXTS]) {
  99. for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
  100. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
  101. }
  102. }
  103. if (tab[JV.NODE_DISCRETE_INFO]) {
  104. rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus));
  105. }
  106. }
  107. }
  108. return rst;
  109. };
  110. JpcBillTabResult.outputContent = function(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg) {
  111. const me = this;
  112. let rst = [];
  113. const tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
  114. const band = bands[tab[JV.PROP_BAND_NAME]];
  115. if (band) {
  116. if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
  117. const tab_fields = tab[JV.PROP_BILL_FIELDS];
  118. let data_details = null;
  119. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
  120. data_details = dataObj[JV.DATA_DETAIL_DATA];
  121. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
  122. data_details = dataObj[JV.DATA_MASTER_DATA];
  123. }
  124. let flexiblePrecisionRefObj = null;
  125. let flexibleRefField;
  126. let precision_ref_data;
  127. let isPic = false;
  128. for (let i = 0; i < tab_fields.length; i++) {
  129. const tab_field = tab_fields[i];
  130. if (!JpcDiscreteHelper.setupSignatureFieldParam(me.signatureRst, me.signatureDateRst, me.signatureAuditRst, $CURRENT_RPT, band, unitFactor, tab_field)) {
  131. let data_field = null;
  132. const map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
  133. isPic = (map_data_field.isPic !== undefined && map_data_field.isPic);
  134. if (me.disp_fields_idx.length > i && me.disp_fields_idx[i] !== JV.BLANK_FIELD_INDEX && (typeof me.disp_fields_idx[i] !== 'object')) {
  135. data_field = data_details[me.disp_fields_idx[i]];
  136. } else {
  137. if (map_data_field) {
  138. data_field = map_data_field[JV.PROP_AD_HOC_DATA];
  139. }
  140. }
  141. if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
  142. if (flexiblePrecisionRefObj === null) {
  143. flexiblePrecisionRefObj = {};
  144. flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
  145. precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
  146. for (const decimalObj of map_data_field.flexiblePrecisionRefObj) {
  147. flexiblePrecisionRefObj['refUnit_' + decimalObj.unit] = decimalObj.decimal;
  148. }
  149. }
  150. JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, page - 1, customizeCfg);
  151. } else {
  152. if (page === 1) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
  153. }
  154. if (!(tab_field[JV.PROP_HIDDEN])) {
  155. const val = JpcFieldHelper.getValue(data_field, page - 1);
  156. const cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
  157. cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  158. if (isPic && cellItem[JV.PROP_VALUE] !== undefined && cellItem[JV.PROP_VALUE] !== null && cellItem[JV.PROP_VALUE] !== '') {
  159. if (Array.isArray(me.signatureRst)) {
  160. if (cellItem[JV.PROP_VALUE][0] !== '/') {
  161. cellItem[JV.PROP_VALUE] = '/' + cellItem[JV.PROP_VALUE];
  162. }
  163. const signatureItem = { signature_name: JV.SIGNATURE_NAME_DUMMY, path: cellItem[JV.PROP_VALUE], pic: null }; // 这里的pic数据在指标中里已经处理过了
  164. signatureItem[JV.PROP_CONTROL] = cellItem[[JV.PROP_CONTROL]];
  165. signatureItem[JV.PROP_STYLE] = cellItem[[JV.PROP_STYLE]];
  166. signatureItem[JV.PROP_AREA] = cellItem[JV.PROP_AREA];
  167. me.signatureRst.push(signatureItem);
  168. cellItem[JV.PROP_VALUE] = '';
  169. }
  170. }
  171. rst.push(cellItem); // 不管是不是Pic,都得保留一个壳子
  172. }
  173. }
  174. /*
  175. if (JE.isSignature(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT)) {
  176. // 这里输出到signatureRst
  177. const map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
  178. const signatureItem = { signature_name: map_data_field[JV.PROP_NAME], path: null, pic: null };
  179. signatureItem[JV.PROP_CONTROL] = tab_field[[JV.PROP_CONTROL]];
  180. signatureItem[JV.PROP_STYLE] = tab_field[[JV.PROP_STYLE]];
  181. signatureItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  182. me.signatureRst.push(signatureItem);
  183. } else if (JE.isDynamicParam(tab_field[JV.PROP_PARAM_ID], $CURRENT_RPT)) {
  184. // 这里输出到signatureDateRst
  185. let pID = 0;
  186. if (tab_field.hasOwnProperty(JV.PROP_PARAM_ID)) {
  187. pID = tab_field[JV.PROP_PARAM_ID];
  188. } else {
  189. pID = tab_field[JV.PROP_ID];
  190. }
  191. const param = JE.P(pID, $CURRENT_RPT);
  192. const signatureDateItem = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(tab_field, tab_field[JV.PROP_DFT_VALUE], true);
  193. signatureDateItem.signature_name = param[JV.PROP_NAME];
  194. signatureDateItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  195. me.signatureDateRst.push(signatureDateItem);
  196. } else if (JE.isSignatureAudit(tab_field[JV.PROP_PARAM_ID], $CURRENT_RPT)) {
  197. let pID = 0;
  198. if (tab_field.hasOwnProperty(JV.PROP_PARAM_ID)) {
  199. pID = tab_field[JV.PROP_PARAM_ID];
  200. } else {
  201. pID = tab_field[JV.PROP_ID];
  202. }
  203. const param = JE.P(pID, $CURRENT_RPT);
  204. const signatureAuditItem = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(tab_field, tab_field[JV.PROP_DFT_VALUE], true);
  205. signatureAuditItem.signature_name = param[JV.PROP_NAME];
  206. signatureAuditItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  207. me.signatureAuditRst.push(signatureAuditItem);
  208. } else {
  209. //
  210. }
  211. */
  212. }
  213. if (tab[JV.PROP_TEXT]) {
  214. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
  215. }
  216. if (tab[JV.PROP_TEXTS]) {
  217. for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
  218. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
  219. }
  220. }
  221. if (tab[JV.NODE_DISCRETE_INFO]) {
  222. 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));
  223. }
  224. }
  225. }
  226. return rst;
  227. };
  228. return JpcBillTabResult;
  229. };
  230. module.exports = new JpcBillTabSrv();