rpt_tpl_calculation.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. /**
  2. * Created by Tony on 2017/7/7.
  3. */
  4. let calculationTreeOprObj = {
  5. treeObj: null,
  6. extCodeTreeObj: null,
  7. currentNode: null,
  8. currentExtCodeNode: null,
  9. iniTree: function (rptTpl) {
  10. var me = this;
  11. let fieldMapList = me.buildTreeData(rptTpl);
  12. me.treeObj = $.fn.zTree.init(
  13. $("#rpt_tpl_formulas"),
  14. caculationSetting,
  15. fieldMapList
  16. );
  17. me.treeObj.expandAll(true);
  18. $("#exprDetail")[0].style.display = "none";
  19. },
  20. iniExtCodeTpl: function () {
  21. let me = this,
  22. params = {};
  23. CommonAjax.postEx(
  24. "report_tpl_api/getExtCodeTpl",
  25. params,
  26. 10000,
  27. true,
  28. function (result) {
  29. me.extCodeTreeObj = $.fn.zTree.init(
  30. $("#rpt_ext_code_tpl"),
  31. extCodeSetting,
  32. result
  33. );
  34. let nodes = me.extCodeTreeObj.getNodes();
  35. for (let node of nodes) {
  36. me.extCodeTreeObj.expandNode(node, true, false);
  37. }
  38. // me.extCodeTreeObj.expandAll(true);
  39. },
  40. null,
  41. null
  42. );
  43. },
  44. buildRunType: function () {
  45. let et = $("#exprRunType");
  46. et.append(`<option value="${JV.RUN_TYPE_BEFORE_PAGING}">默认运行</option>`);
  47. et.append(`<option value="${JV.RUN_TYPE_BEFORE_OUTPUT}">每页实时运行</option>`);
  48. et.append(`<option value="${JV.RUN_TYPE_BEFORE_ANALYZING}">数据分析前运行</option>`);
  49. et.append(`<option value="${JV.RUN_TYPE_BEFORE_COMBINE}">合并单元格前事件</option>`);
  50. et.append(`<option value="${JV.RUN_TYPE_AFTER_COMBINE}">合并单元格后事件</option>`);
  51. et.append(`<option value="${JV.RUN_TYPE_BEFORE_GROUP_TEXT_OUT}">分组text输出前事件</option>`);
  52. et.append(`<option value="${JV.RUN_TYPE_RESET_CROSS_COLUMNS}">重设交叉表列数</option>`);
  53. },
  54. buildTreeData: function (rptTpl) {
  55. let me = this,
  56. rst = { Name: "计算式", items: [] };
  57. if (rptTpl[JV.NODE_FORMULAS]) {
  58. for (let cItem of rptTpl[JV.NODE_FORMULAS]) {
  59. let node = {};
  60. me.copyContent(cItem, node);
  61. node[JV.PROP_NAME] = cItem[JV.PROP_NAME];
  62. node[JV.PROP_RUN_TYPE] = cItem[JV.PROP_RUN_TYPE];
  63. node[JV.PROP_EXPRESSION] = cItem[JV.PROP_EXPRESSION];
  64. node["format"] = cItem["format"] ? cItem["format"] : "";
  65. rst.items.push(node);
  66. }
  67. }
  68. return rst;
  69. },
  70. copyContent: function (source, target) {
  71. target[JV.PROP_NAME] = source[JV.PROP_NAME];
  72. target[JV.PROP_RUN_TYPE] = source[JV.PROP_RUN_TYPE];
  73. target[JV.PROP_EXPRESSION] = source[JV.PROP_EXPRESSION];
  74. target["format"] = source["format"] ? source["format"] : "";
  75. },
  76. changeRunType: function (dom) {
  77. let me = calculationTreeOprObj;
  78. if (me.currentNode) {
  79. me.currentNode[JV.PROP_RUN_TYPE] = dom.value;
  80. }
  81. },
  82. setExtCodeTemplate: function (dom) {
  83. let me = calculationTreeOprObj;
  84. if (me.currentExtCodeNode && me.currentExtCodeNode["Template"] !== "") {
  85. $("#exprContent")[0].value = me.currentExtCodeNode["Template"];
  86. editor2.setValue($("#exprContent")[0].value);
  87. }
  88. },
  89. addExtCodeTemplate: function (dom) {
  90. let me = calculationTreeOprObj;
  91. if (me.currentExtCodeNode && me.currentExtCodeNode["Template"] !== "") {
  92. $("#exprContent")[0].value += me.currentExtCodeNode["Template"];
  93. editor2.setValue($("#exprContent")[0].value);
  94. }
  95. },
  96. changeFormat: function (dom) {
  97. let me = calculationTreeOprObj;
  98. if (me.currentNode) {
  99. me.currentNode["format"] = dom.value;
  100. }
  101. },
  102. changeExpression: function (dom) {
  103. let me = calculationTreeOprObj;
  104. if (me.currentNode) {
  105. me.currentNode[JV.PROP_EXPRESSION] = dom.value;
  106. }
  107. },
  108. onClick: function (event, treeId, treeNode) {
  109. let me = calculationTreeOprObj;
  110. me.currentNode = treeNode;
  111. if (treeNode.level === 0) {
  112. $("#exprDetail")[0].style.display = "none";
  113. } else {
  114. $("#exprDetail")[0].style.display = "";
  115. if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_PAGING) {
  116. $("#exprRunType")[0].selectedIndex = 0;
  117. } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_OUTPUT) {
  118. $("#exprRunType")[0].selectedIndex = 1;
  119. } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_ANALYZING) {
  120. $("#exprRunType")[0].selectedIndex = 2;
  121. } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_COMBINE) {
  122. $("#exprRunType")[0].selectedIndex = 3;
  123. } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_AFTER_COMBINE) {
  124. $("#exprRunType")[0].selectedIndex = 4;
  125. } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_GROUP_TEXT_OUT) {
  126. $("#exprRunType")[0].selectedIndex = 5;
  127. } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_RESET_CROSS_COLUMNS) {
  128. $("#exprRunType")[0].selectedIndex = 6;
  129. } else {
  130. $("#exprRunType")[0].selectedIndex = 2;
  131. }
  132. $("#exprFormat")[0].value = treeNode["format"] ? treeNode["format"] : "";
  133. $("#exprContent")[0].value = treeNode[JV.PROP_EXPRESSION];
  134. editor2.setValue($("#exprContent")[0].value);
  135. }
  136. },
  137. onExtCodeTreeClick: function (event, treeId, treeNode) {
  138. let me = calculationTreeOprObj;
  139. me.currentExtCodeNode = treeNode;
  140. },
  141. onBeforeRemove: function (treeId, treeNode) {
  142. let rst = false;
  143. if (treeNode.level > 0) {
  144. rst = confirm("请确认是否真的删除?");
  145. }
  146. return rst;
  147. },
  148. beforeRename: function (treeId, treeNode, newName, isCancel) {
  149. if (isCancel) {
  150. return true;
  151. }
  152. if (treeNode.level === 0) {
  153. return false;
  154. }
  155. return true;
  156. },
  157. onBeforeDrop: function (treeId, treeNodes, targetNode, moveType) {
  158. let rst = false;
  159. if (
  160. targetNode.level === 1 &&
  161. (moveType === "next" || moveType === "prev")
  162. ) {
  163. return true;
  164. }
  165. return rst;
  166. },
  167. addHoverDom: function (treeId, treeNode) {
  168. let me = calculationTreeOprObj,
  169. sObj = $("#" + treeNode.tId + "_span");
  170. if (
  171. treeNode.editNameFlag ||
  172. $("#addBtn_" + treeNode.tId).length > 0 ||
  173. treeNode.level > 0
  174. ) {
  175. return;
  176. } else {
  177. let addStr =
  178. "<span class='button add' id='addBtn_" +
  179. treeNode.tId +
  180. "' title='新增' onfocus='this.blur();'></span>";
  181. sObj.after(addStr);
  182. let btn = $("#addBtn_" + treeNode.tId);
  183. btn.bind("click", function () {
  184. let newNodes = [],
  185. node = {};
  186. node[JV.PROP_NAME] = "新计算式";
  187. node[JV.PROP_RUN_TYPE] = JV.RUN_TYPE_BEFORE_PAGING;
  188. node[JV.PROP_EXPRESSION] = "";
  189. node["format"] = "";
  190. newNodes.push(node);
  191. me.treeObj.addNodes(treeNode, -1, newNodes, true);
  192. });
  193. }
  194. },
  195. removeHoverDom: function (treeId, treeNode) {
  196. $("#addBtn_" + treeNode.tId)
  197. .unbind()
  198. .remove();
  199. },
  200. extractCalculation: function (rptTpl) {
  201. let me = this,
  202. newCaclList = [];
  203. let topNode = me.treeObj.getNodes()[0];
  204. for (let node of topNode.items) {
  205. let item = {};
  206. me.copyContent(node, item);
  207. newCaclList.push(item);
  208. }
  209. rptTpl[JV.NODE_FORMULAS] = newCaclList;
  210. },
  211. };
  212. $(document).ready(function () {
  213. editor2.on("change", function () {
  214. let me = calculationTreeOprObj;
  215. if (me.currentNode) {
  216. me.currentNode[JV.PROP_EXPRESSION] = editor2.getValue();
  217. }
  218. });
  219. });