jpc_helper_common_output.js 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. 'use strict';
  2. const JV = require('../jpc_value_define');
  3. const JpcFieldHelper = require('./jpc_helper_field');
  4. const REG1 = new RegExp('\n\r', 'g');
  5. const REG2 = new RegExp('\r\n', 'g');
  6. const REG3 = new RegExp('\n', 'g');
  7. const REG4 = new RegExp('\r', 'g');
  8. const REG5 = new RegExp('\t', 'g');
  9. const OFFSET_FLOAT = 0.0000000001;
  10. const JpcCommonOutputHelper = {
  11. createCommonOutputWithoutDecorate: function(node, value, forceCombine) {
  12. const me = this;
  13. const rst = {};
  14. // 1. font/style/control
  15. rst[JV.PROP_FONT] = node[[JV.PROP_FONT]];
  16. rst[JV.PROP_CONTROL] = node[[JV.PROP_CONTROL]];
  17. rst[JV.PROP_STYLE] = node[[JV.PROP_STYLE]];
  18. // 2. value
  19. if (typeof value === 'string') {
  20. value = value.replace(REG1, '|').replace(REG2, '|').replace(REG3, '|').replace(REG4, '|').replace(REG5, '');
  21. }
  22. rst[JV.PROP_VALUE] = value;
  23. me.formatCell(node[JV.PROP_FORMAT], rst);
  24. // innerFormat(node[JV.PROP_FORMAT], rst);
  25. if (node[JV.PROP_PREFIX] && rst[JV.PROP_VALUE] !== null) {
  26. rst[JV.PROP_VALUE] = node[JV.PROP_PREFIX] + rst[JV.PROP_VALUE];
  27. } else if (node[JV.PROP_PREFIX] && forceCombine) {
  28. rst[JV.PROP_VALUE] = node[JV.PROP_PREFIX];
  29. }
  30. if (node[JV.PROP_SUFFIX] && rst[JV.PROP_VALUE] !== null) {
  31. rst[JV.PROP_VALUE] = rst[JV.PROP_VALUE] + node[JV.PROP_SUFFIX];
  32. } else if (node[JV.PROP_SUFFIX] && forceCombine) {
  33. rst[JV.PROP_VALUE] = node[JV.PROP_SUFFIX];
  34. }
  35. return rst;
  36. },
  37. createCommonOutput: function(node, value, controls) {
  38. const me = this;
  39. const rst = {};
  40. // 1. font/style/control
  41. rst[JV.PROP_FONT] = node[[JV.PROP_FONT]];
  42. rst[JV.PROP_CONTROL] = node[[JV.PROP_CONTROL]];
  43. rst[JV.PROP_STYLE] = node[[JV.PROP_STYLE]];
  44. // 2. value
  45. rst[JV.PROP_VALUE] = value;
  46. JpcFieldHelper.decorateValue(rst, controls);
  47. me.formatCell(node[JV.PROP_FORMAT], rst);
  48. // innerFormat(node[JV.PROP_FORMAT], rst);
  49. if (node[JV.PROP_PREFIX] && rst[JV.PROP_VALUE] !== null && rst[JV.PROP_VALUE] !== '') {
  50. rst[JV.PROP_VALUE] = node[JV.PROP_PREFIX] + rst[JV.PROP_VALUE];
  51. }
  52. if (node[JV.PROP_SUFFIX] && rst[JV.PROP_VALUE] !== null && rst[JV.PROP_VALUE] !== '') {
  53. rst[JV.PROP_VALUE] = rst[JV.PROP_VALUE] + node[JV.PROP_SUFFIX];
  54. }
  55. return rst;
  56. },
  57. formatCell: function(formatStr, rstCell) {
  58. if (formatStr) {
  59. const rstCellFloatVal = parseFloat(rstCell[JV.PROP_VALUE]);
  60. if (!(isNaN(rstCellFloatVal))) {
  61. const dotIdx = formatStr.indexOf('.');
  62. if (dotIdx >= 0) {
  63. let tmpStr = (rstCellFloatVal + OFFSET_FLOAT).toFixed(formatStr.length - dotIdx - 1);
  64. const digStr = formatStr.substr(dotIdx + 1, formatStr.length - dotIdx);
  65. for (let sIdx = digStr.length - 1; sIdx >= 0; sIdx--) {
  66. if (digStr[sIdx] === '#') {
  67. if (tmpStr.length > 0 && tmpStr[tmpStr.length - 1] === '0') {
  68. tmpStr = tmpStr.substr(0, tmpStr.length - 1);
  69. } else {
  70. break;
  71. }
  72. } else {
  73. break;
  74. }
  75. }
  76. if (tmpStr[tmpStr.length - 1] === '.') tmpStr = tmpStr.substr(0, tmpStr.length - 1);
  77. rstCell[JV.PROP_VALUE] = tmpStr;
  78. } else {
  79. rstCell[JV.PROP_VALUE] = (rstCellFloatVal + OFFSET_FLOAT).toFixed(0);
  80. }
  81. const commaIdx = formatStr.indexOf(',');
  82. if (commaIdx >= 0) {
  83. rstCell[JV.PROP_VALUE] = comdify(rstCell[JV.PROP_VALUE].toString());
  84. }
  85. }
  86. }
  87. },
  88. };
  89. function comdify(numStr) {
  90. const re = /\d{1,3}(?=(\d{3})+$)/g;
  91. return numStr.replace(/^(\d+)((\.\d+)?)$/, function(s, s1, s2) { return s1.replace(re, '$&,') + s2; });
  92. }
  93. module.exports = JpcCommonOutputHelper;