rpt_main.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. /**
  2. * Created by Tony on 2017/6/26.
  3. */
  4. 'use strict'
  5. const PRE_PAGE_OFFSET = 150;
  6. const NEXT_PAGE_OFFSET = 160;
  7. const FIRST_PAGE_OFFSET = 50;
  8. const LAST_PAGE_OFFSET = 60;
  9. let rptTplObj = {
  10. hasInitialized: false,
  11. iniPage: function() {
  12. let me = this;
  13. if (!me.hasInitialized) {
  14. zTreeOprObj.getCustomerCfg();
  15. zTreeOprObj.getReportTemplateTree();
  16. me.hasInitialized = true;
  17. let canvas = document.getElementById("rptCanvas");
  18. canvas.onclick = canvasOprObj.canvasOnClick;
  19. canvas.onmousemove = canvasOprObj.canvasOnMouseMove;
  20. }
  21. }
  22. }
  23. let zTreeOprObj = {
  24. treeObj: null,
  25. currentNode: null,
  26. currentRptPageRst: null,
  27. reportPageCfg: null,
  28. currentPage: 1,
  29. maxPages: 0,
  30. getReportTemplateTree: function() {
  31. let me = zTreeOprObj, params = {};
  32. params.engineerId = projectInfoObj.projectInfo.property.engineering;
  33. CommonAjax.postEx("report_tpl_api/getRptTplTree", params, 20000, true, function(result){
  34. zTreeHelper.createTreeDirectly(result, rpt_tpl_setting, "rptTplTree", me);
  35. me.refreshNodes();
  36. }, null, null
  37. );
  38. },
  39. getCustomerCfg: function() {
  40. let me = zTreeOprObj, params = {};
  41. params.engineerId = projectInfoObj.projectInfo.property.engineering;
  42. CommonAjax.postEx("report_tpl_api/getCustomizeCfg", params, 20000, true, function(result){
  43. if (result) {
  44. me.reportPageCfg = result;
  45. } else {
  46. me.reportPageCfg = null;
  47. }
  48. }, null, null
  49. );
  50. },
  51. refreshNodes: function() {
  52. let me = this;
  53. let private_setupIsParent = function(node){
  54. node.isParent = (node.nodeType === RT.NodeType.NODE || node.level === 0);
  55. if (node.items && node.items.length) {
  56. for (let i = 0; i < node.items.length; i++) {
  57. private_setupIsParent(node.items[i]);
  58. }
  59. }
  60. };
  61. let topNodes = me.treeObj.getNodes();
  62. for (let i = 0; i < topNodes.length; i++) {
  63. private_setupIsParent(topNodes[i]);
  64. }
  65. me.treeObj.refresh();
  66. },
  67. onCheck: function() {
  68. //count();
  69. //if (clearFlag) {
  70. // clearCheckedOldNodes();
  71. //}
  72. },
  73. onClick: function(event,treeId,treeNode) {
  74. let me = zTreeOprObj;
  75. if (treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
  76. let params = {};
  77. let pageSize = rptControlObj.getCurrentPageSize();
  78. params.pageSize = pageSize;
  79. params.rpt_tpl_id = treeNode.refId;
  80. params.prj_id = projectInfoObj.projectInfo.ID;
  81. me.currentNode = treeNode;
  82. me.requestReport(params);
  83. }
  84. },
  85. changePageSize: function(dom) {
  86. let me = zTreeOprObj,
  87. targetDom = document.getElementById("btnRptPageSize");
  88. let tmpStr = targetDom.innerHTML.trim();
  89. targetDom.innerHTML = dom.innerHTML.trim();
  90. dom.innerHTML = tmpStr;
  91. me.changeCfg();
  92. },
  93. changeOrientation: function(dom) {
  94. let me = zTreeOprObj,
  95. targetDom = document.getElementById("btnRptOrientation");
  96. let tmpStr = targetDom.innerHTML.trim();
  97. targetDom.innerHTML = dom.innerHTML.trim();
  98. dom.innerHTML = tmpStr;
  99. me.changeCfg();
  100. },
  101. changeCfg: function() {
  102. let me = zTreeOprObj;
  103. let params = {};
  104. params.pageSize = rptControlObj.getCurrentPageSize();
  105. params.orientation = rptControlObj.getCurrentOrientation();
  106. params.rpt_tpl_id = me.currentNode.refId;
  107. params.prj_id = projectInfoObj.projectInfo.ID;
  108. params.custCfg = me.reportPageCfg;
  109. me.requestReport(params);
  110. },
  111. resetAfter: function (pageRst) {
  112. let size = pageRst[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
  113. if (size[0] > size[1]) {
  114. document.getElementById("btnRptOrientation").innerHTML = "横向";
  115. document.getElementById("hrefRptOrientation").innerHTML = "纵向";
  116. } else {
  117. document.getElementById("btnRptOrientation").innerHTML = "纵向";
  118. document.getElementById("hrefRptOrientation").innerHTML = "横向";
  119. }
  120. },
  121. requestReport: function (params) {
  122. let me = zTreeOprObj;
  123. CommonAjax.postEx("report_api/getReport", params, 5000, true,
  124. function(result){
  125. let pageRst = result;
  126. if (pageRst) {
  127. me.resetAfter(pageRst);
  128. let canvas = document.getElementById("rptCanvas");
  129. me.currentRptPageRst = pageRst;
  130. me.maxPages = pageRst.items.length;
  131. me.currentPage = 1;
  132. me.displayPageValue();
  133. let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
  134. canvas.width = size[0] + 20;
  135. if (size[1] > size[0]) {
  136. canvas.height = size[1] + 100;
  137. } else {
  138. canvas.height = size[1] + 50;
  139. }
  140. me.showPage(1, canvas);
  141. }
  142. }, null, null
  143. );
  144. },
  145. showPage: function (pageNum, canvas) {
  146. let me = zTreeOprObj;
  147. if (pageNum >= 1 && pageNum <= me.maxPages) {
  148. me.currentPage = pageNum;
  149. JpcCanvasOutput.cleanCanvas(canvas);
  150. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  151. JpcCanvasOutput.drawToCanvas(me.currentRptPageRst, canvas, me.currentPage);
  152. }
  153. me.displayPageValue();
  154. },
  155. displayPageValue: function() {
  156. let me = zTreeOprObj;
  157. $("#rpt_page_num").get(0).value = me.currentPage + "/" + me.maxPages;
  158. }
  159. };
  160. let canvasOprObj = {
  161. canvasOnMouseMove: function (event) {
  162. if (zTreeOprObj.currentNode) {
  163. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  164. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  165. if (x < FIRST_PAGE_OFFSET) {
  166. canvas.style.cursor = "url(/web/building_saas/img/FirstPageSimple.cur), auto";
  167. } else if (x < PRE_PAGE_OFFSET) {
  168. canvas.style.cursor = "url(/web/building_saas/img/PreviousPageSimple.cur), auto";
  169. } else if ((canvas.width - x) < LAST_PAGE_OFFSET) {
  170. canvas.style.cursor = "url(/web/building_saas/img/LastPageSimple.cur), auto";
  171. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  172. canvas.style.cursor = "url(/web/building_saas/img/NextPageSimple.cur), auto";
  173. } else {
  174. canvas.style.cursor = "";
  175. }
  176. }
  177. },
  178. canvasOnClick: function(event){
  179. if (zTreeOprObj.currentNode) {
  180. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  181. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  182. if (x < FIRST_PAGE_OFFSET) {
  183. zTreeOprObj.showPage(1, canvas);
  184. } else if (x < PRE_PAGE_OFFSET) {
  185. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  186. } else if ((canvas.width - x) < LAST_PAGE_OFFSET) {
  187. zTreeOprObj.showPage(zTreeOprObj.maxPages, canvas);
  188. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  189. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  190. }
  191. }
  192. }
  193. };
  194. let rptControlObj = {
  195. currentOutputType: "Excel",
  196. getCurrentPageSize: function() {
  197. // let rst = "A4";
  198. let rst = document.getElementById("btnRptPageSize").innerHTML.trim();
  199. //btnRptPageSize
  200. return rst;
  201. },
  202. getCurrentOrientation: function() {
  203. // let rst = "横向";
  204. let rst = document.getElementById("btnRptOrientation").innerHTML.trim();
  205. return rst;
  206. },
  207. getCurrentReportOption: function() {
  208. //
  209. },
  210. changeType: function(newType) {
  211. let me = rptControlObj;
  212. let excelDom = document.getElementById("EXCEL_TYPE");
  213. let pdfDom = document.getElementById("PDF_TYPE");
  214. if (newType === "Excel") {
  215. excelDom.className = "btn btn-block btn-primary";
  216. pdfDom.className = "btn btn-block btn-outline-secondary";
  217. me.currentOutputType = newType;
  218. } else if (newType === "PDF") {
  219. excelDom.className = "btn btn-block btn-outline-secondary";
  220. pdfDom.className = "btn btn-block btn-primary";
  221. me.currentOutputType = newType;
  222. } else {
  223. //me.currentOutputType = newType;
  224. }
  225. },
  226. outputRpt: function() {
  227. let me = rptControlObj;
  228. if (me.currentOutputType === "Excel") {
  229. me.getExcel();
  230. } else if (me.currentOutputType === "PDF") {
  231. me.getPDF();
  232. } else {
  233. //other types if needed.
  234. }
  235. },
  236. getExcel: function() {
  237. let me = rptControlObj;
  238. //目前只支持当前打开报表
  239. //zTreeOprObj.currentRptPageRst
  240. if (zTreeOprObj.currentNode && zTreeOprObj.currentNode.refId) {
  241. let orgRptName = zTreeOprObj.currentNode.name;
  242. orgRptName = orgRptName.replace('【', '').replace('】','').replace('-','_').replace(' ','');
  243. let url = "/report_api/getExcel/" + projectInfoObj.projectInfo.ID + "/" + zTreeOprObj.currentNode.refId + "/" +
  244. me.getCurrentPageSize() + "/" + me.getCurrentOrientation() + "/" + orgRptName + "/" + false + "/" + 'normal';
  245. window.location = url;//这里不能使用get方法跳转,否则下载不成功
  246. }
  247. },
  248. getPDF: function() {
  249. let me = rptControlObj;
  250. //目前只支持当前打开报表
  251. //zTreeOprObj.currentRptPageRst
  252. if (zTreeOprObj.currentNode && zTreeOprObj.currentNode.refId) {
  253. let orgRptName = zTreeOprObj.currentNode.name;
  254. orgRptName = orgRptName.replace('【', '').replace('】','').replace('-','_');
  255. let url = "/report_api/getPDF/" + projectInfoObj.projectInfo.ID + "/" + zTreeOprObj.currentNode.refId + "/" +
  256. me.getCurrentPageSize() + "/" + me.getCurrentOrientation() + "/" + orgRptName;
  257. window.location = url;//这里不能使用get方法跳转,否则下载不成功
  258. }
  259. },
  260. prePage: function(dom) {
  261. let canvas = document.getElementById("rptCanvas");
  262. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  263. },
  264. nextPage: function(dom) {
  265. let canvas = document.getElementById("rptCanvas");
  266. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  267. }
  268. };