jpc_helper_band.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. let JV = require('../jpc_value_define');
  2. let JpcCommonHelper = require('./jpc_helper_common');
  3. let JpcBandHelper = {
  4. getBandTypeValByString: function(bandType) {
  5. let rst = JV.PAGE_STATUS.indexOf(bandType);
  6. if (rst < 0) rst = JV.STATUS_NORMAL;
  7. return rst;
  8. },
  9. setBandArea: function(bands, rptTpl, pageStatus, isOnlyNormalStatus, isOnlyExStatus) {
  10. let me = this;
  11. if (rptTpl[JV.NODE_BAND_COLLECTION]) {
  12. isOnlyNormalStatus = isOnlyNormalStatus||false;
  13. isOnlyExStatus = isOnlyExStatus||false;
  14. let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  15. let orgArea = JpcCommonHelper.getReportArea(rptTpl, unitFactor);
  16. for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
  17. me.setBandPos(bands, rptTpl[JV.NODE_BAND_COLLECTION][i], orgArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus);
  18. }
  19. }
  20. },
  21. setBandPos: function(bands, bandNode, orgArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus) {
  22. let me = this, band = bands[bandNode[JV.BAND_PROP_NAME]];
  23. //0. for multi flow purpose
  24. if (isOnlyNormalStatus) {
  25. if (bandNode.hasOwnProperty(JV.PROP_BAND_EX_ONLY) && JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_EX_ONLY])) {
  26. return;
  27. }
  28. }
  29. if (isOnlyExStatus) {
  30. if (bandNode.hasOwnProperty(JV.PROP_BAND_NORMAL_ONLY) && !(JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_NORMAL_ONLY]))) {
  31. return;
  32. }
  33. }
  34. //1. initialize
  35. band[JV.PROP_LEFT] = orgArea[JV.IDX_LEFT];
  36. band[JV.PROP_TOP] = orgArea[JV.IDX_TOP];
  37. band[JV.PROP_RIGHT] = orgArea[JV.IDX_RIGHT];
  38. band[JV.PROP_BOTTOM] = orgArea[JV.IDX_BOTTOM];
  39. //2. set this band
  40. if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
  41. switch (band[JV.BAND_PROP_ALIGNMENT]) {
  42. case JV.LAYOUT_TOP:
  43. if (band[JV.PROP_CALCULATION] == JV.CAL_TYPE_ABSTRACT) {
  44. band.Bottom = band.Top + unitFactor * band[JV.BAND_PROP_HEIGHT];
  45. } else {
  46. band.Bottom = band.Top + (band.Bottom - band.Top) * band[JV.BAND_PROP_HEIGHT] / 100;
  47. }
  48. orgArea[JV.IDX_TOP] = band.Bottom;
  49. break;
  50. case JV.LAYOUT_BOTTOM:
  51. if (band[JV.PROP_CALCULATION] == JV.CAL_TYPE_ABSTRACT) {
  52. band.Top = band.Bottom - unitFactor * band[JV.BAND_PROP_HEIGHT];
  53. } else {
  54. band.Top = band.Bottom - (band.Bottom - band.Top) * band[JV.BAND_PROP_HEIGHT] / 100;
  55. }
  56. orgArea[JV.IDX_BOTTOM] = band.Top;
  57. break;
  58. case JV.LAYOUT_LEFT:
  59. if (band[JV.PROP_CALCULATION] == JV.CAL_TYPE_ABSTRACT) {
  60. band.Right = band.Left + unitFactor * band[JV.BAND_PROP_WIDTH];
  61. } else {
  62. band.Right = band.Left + (band.Right - band.Left) * band[JV.BAND_PROP_WIDTH] / 100;
  63. }
  64. orgArea[JV.IDX_LEFT] = band.Right;
  65. break;
  66. case JV.LAYOUT_RIGHT:
  67. if (band[JV.PROP_CALCULATION] == JV.CAL_TYPE_ABSTRACT) {
  68. band.Left = band.Right - unitFactor * band[JV.BAND_PROP_WIDTH];
  69. } else {
  70. band.Left = band.Right - (band.Right - band.Left) * band[JV.BAND_PROP_WIDTH] / 100;
  71. }
  72. orgArea[JV.IDX_RIGHT] = band.Left;
  73. break;
  74. }
  75. //3. set sub-bands
  76. if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
  77. let bandArea = [band.Left, band.Top, band.Right, band.Bottom];
  78. for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
  79. me.setBandPos(bands, bandNode[JV.BAND_PROP_SUB_BANDS][i], bandArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus);
  80. }
  81. }
  82. }
  83. },
  84. resetBandPos: function (bandCollection, bands, contentBand, offsetY) {
  85. let orgY = contentBand.Bottom;
  86. function chkAndResetPos(targetBand) {
  87. let band = bands[targetBand.Name];
  88. if (band) {
  89. if (band === contentBand) {
  90. band.Bottom += offsetY;
  91. } else {
  92. if (band.Top >= orgY) {
  93. band.Top += offsetY;
  94. band.Bottom += offsetY;
  95. }
  96. }
  97. if (targetBand[JV.BAND_PROP_SUB_BANDS]) {
  98. for (let i = 0; i < targetBand[JV.BAND_PROP_SUB_BANDS].length; i++) {
  99. chkAndResetPos(targetBand[JV.BAND_PROP_SUB_BANDS][i]);
  100. }
  101. }
  102. }
  103. }
  104. for (let i = 0; i < bandCollection.length; i++) {
  105. chkAndResetPos(bandCollection[i]);
  106. }
  107. }
  108. };
  109. module.exports = JpcBandHelper;