formulasFun.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // 计算式执行(不同情况的方法会不同)
  2. import { JE } from './jpc_rte';
  3. import formulasDataSetter from './formulasDataSetter';
  4. import * as stringUtil from '../public/stringUtil'
  5. import { ReportDate as useReportDate } from '../public/ReportDate'
  6. import { ICurrent_RPT, IRptTpl, IDataObj, Fields } from '../interface/basic'
  7. import { JV } from './jpc_value_define';
  8. /* eslint-disable import/prefer-default-export */
  9. export const replaceAll = (FindText: RegExp | string, RepText: string, str: string): string => {
  10. const regExp = new RegExp(FindText, 'g');
  11. return str.replace(regExp, RepText);
  12. };
  13. export const formulaExec = (runType: string, $CURRENT_TEMPLATE: IRptTpl, $CURRENT_DATA: IDataObj, $CURRENT_RPT: ICurrent_RPT) => {
  14. formulasDataSetter.setupData($CURRENT_RPT, $CURRENT_DATA);
  15. const {
  16. P,
  17. F,
  18. D,
  19. L,
  20. getCurrentPage,
  21. getTotalPage,
  22. setFieldValue,
  23. setFieldValueArray,
  24. removeFieldValue,
  25. insertFieldValue,
  26. setData,
  27. getNumberArray,
  28. copyPrecision,
  29. copyFixedPrecisionNum,
  30. copyProperty,
  31. setDate,
  32. DLength
  33. } = formulasDataSetter;
  34. const {
  35. isEmptyString,
  36. trim,
  37. leftTrim,
  38. rightTrim,
  39. comdify,
  40. convertToCaptionNum,
  41. convertStrToBoolean,
  42. formatNumber,
  43. } = stringUtil;
  44. const $JV = JV;
  45. const $JE = JE;
  46. const reportDate = useReportDate;
  47. for (let execFmlIdx = 0; execFmlIdx < $CURRENT_RPT.formulas.length; execFmlIdx++) {
  48. if ($CURRENT_RPT.formulas[execFmlIdx].run_type === runType) {
  49. let expression = $CURRENT_RPT.formulas[execFmlIdx].expression;
  50. if (expression) {
  51. // 计算式集合,目前是放置打印信息的,用于配置属性的计算
  52. let $ME = $CURRENT_RPT.formulas[execFmlIdx];
  53. try {
  54. let newExpression = expression;
  55. const { format } = $ME;
  56. // console.log(expression);
  57. //临时处理
  58. if (expression.indexOf(`new Date(`)) {
  59. newExpression = replaceAll(/new Date\(/g, `new reportDate(`, expression)
  60. }
  61. eval(newExpression);
  62. } catch (ex) {
  63. console.log(ex);
  64. }
  65. }
  66. }
  67. }
  68. formulasDataSetter.resetData();
  69. return {
  70. $JE,
  71. $JV,
  72. P,
  73. F,
  74. D,
  75. L,
  76. getCurrentPage,
  77. getTotalPage,
  78. setFieldValue,
  79. setFieldValueArray,
  80. removeFieldValue,
  81. insertFieldValue,
  82. setData,
  83. getNumberArray,
  84. copyPrecision,
  85. copyFixedPrecisionNum,
  86. copyProperty,
  87. setDate,
  88. DLength,
  89. isEmptyString,
  90. trim,
  91. leftTrim,
  92. rightTrim,
  93. comdify,
  94. convertToCaptionNum,
  95. convertStrToBoolean,
  96. formatNumber,
  97. reportDate
  98. };
  99. }
  100. export const combinedGridFormula = ($RUN_TYPE: String, $TEXT: Fields, $TIMES: number, $CURRENT_RPT: ICurrent_RPT) => {
  101. const {
  102. $JE,
  103. $JV,
  104. P,
  105. F,
  106. D,
  107. L,
  108. getCurrentPage,
  109. getTotalPage,
  110. setFieldValue,
  111. setFieldValueArray,
  112. removeFieldValue,
  113. insertFieldValue,
  114. setData,
  115. getNumberArray,
  116. copyPrecision,
  117. copyFixedPrecisionNum,
  118. copyProperty,
  119. setDate,
  120. DLength,
  121. isEmptyString,
  122. trim,
  123. leftTrim,
  124. rightTrim,
  125. comdify,
  126. convertToCaptionNum,
  127. convertStrToBoolean,
  128. formatNumber,
  129. reportDate
  130. }=$CURRENT_RPT.formulasObject;
  131. if ($CURRENT_RPT.formulas) {
  132. for (let execFmlIdx = 0; execFmlIdx < $CURRENT_RPT.formulas.length; execFmlIdx++) {
  133. if ($CURRENT_RPT.formulas[execFmlIdx].run_type === $RUN_TYPE) {
  134. let expression = $CURRENT_RPT.formulas[execFmlIdx].expression;
  135. if (expression) {
  136. let $ME = $CURRENT_RPT.formulas[execFmlIdx];
  137. try {
  138. eval(expression);
  139. } catch (ex) {
  140. console.log(ex);
  141. }
  142. }
  143. }
  144. }
  145. }
  146. formulasDataSetter.resetData();
  147. return {
  148. $JE,
  149. $JV,
  150. P,
  151. F,
  152. D,
  153. L,
  154. getCurrentPage,
  155. getTotalPage,
  156. setFieldValue,
  157. setFieldValueArray,
  158. removeFieldValue,
  159. insertFieldValue,
  160. setData,
  161. getNumberArray,
  162. copyPrecision,
  163. copyFixedPrecisionNum,
  164. copyProperty,
  165. setDate,
  166. DLength,
  167. isEmptyString,
  168. trim,
  169. leftTrim,
  170. rightTrim,
  171. comdify,
  172. convertToCaptionNum,
  173. convertStrToBoolean,
  174. formatNumber,
  175. reportDate
  176. };
  177. }
  178. export default {};