rpt_main.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  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. let private_remove_hide_item = function (items) {
  35. if (items && items.length > 0) {
  36. for (let i = items.length - 1; i >= 0; i--) {
  37. if (!(items[i].released) && items[i].nodeType === 2) {
  38. items.splice(i, 1);
  39. } else {
  40. if (items[i].items && items[i].items.length > 0) {
  41. private_remove_hide_item(items[i].items);
  42. }
  43. }
  44. }
  45. }
  46. }
  47. private_remove_hide_item(result);
  48. for (let topNode of result) {
  49. if (topNode.userId === "-100") {
  50. topNode.name = topNode.name + " - 标准报表";
  51. } else {
  52. topNode.name = topNode.name + " - 定制报表";
  53. }
  54. }
  55. zTreeHelper.createTreeDirectly(result, rpt_tpl_setting, "rptTplTree", me);
  56. me.refreshNodes();
  57. }, null, null);
  58. },
  59. getCustomerCfg: function() {
  60. let me = zTreeOprObj, params = {};
  61. params.engineerId = projectInfoObj.projectInfo.property.engineering;
  62. CommonAjax.postEx("report_tpl_api/getCustomizeCfg", params, 20000, true, function(result){
  63. if (result) {
  64. me.reportPageCfg = result;
  65. $("#elementMargin_Left").get(0).value = result.margins.Left;
  66. $("#elementMargin_Right").get(0).value = result.margins.Right;
  67. $("#elementMargin_Top").get(0).value = result.margins.Top;
  68. $("#elementMargin_Bottom").get(0).value = result.margins.Bottom;
  69. for (let font of result.fonts) {
  70. let fontPropSuffix = "title";
  71. if (font.CfgDispName === "表标题") {
  72. fontPropSuffix = "title";
  73. } else if (font.CfgDispName === "列标题") {
  74. fontPropSuffix = "column";
  75. } else if (font.CfgDispName === "正文内容") {
  76. fontPropSuffix = "content";
  77. } else if (font.CfgDispName === "合计") {
  78. fontPropSuffix = "summary";
  79. } else if (font.CfgDispName === "表眉/表脚") {
  80. fontPropSuffix = "header_footer";
  81. }
  82. document.getElementById("fontName_" + fontPropSuffix).value = font.Name;
  83. document.getElementById("fontHeight_" + fontPropSuffix).value = font.FontHeight;
  84. document.getElementById("font_bold_" + fontPropSuffix).className = (font.FontBold === "T")?"btn btn-sm btn-outline-secondary active":"btn btn-sm btn-outline-secondary";
  85. document.getElementById("font_italic_" + fontPropSuffix).className = (font.FontItalic === "T")?"btn btn-sm btn-outline-secondary active":"btn btn-sm btn-outline-secondary";
  86. document.getElementById("font_underline_" + fontPropSuffix).className = (font.FontUnderline === "T")?"btn btn-sm btn-outline-secondary active":"btn btn-sm btn-outline-secondary";
  87. }
  88. document.getElementById("rpt_vertical_line").checked = result.showVerticalLine;
  89. document.getElementById("rpt_narrow").checked = result.isNarrow;
  90. document.getElementById("rpt_fill_zero").checked = result.fillZero;
  91. } else {
  92. me.reportPageCfg = null;
  93. }
  94. }, null, null
  95. );
  96. },
  97. refreshNodes: function() {
  98. let me = this;
  99. let private_setupIsParent = function(node){
  100. node.isParent = (node.nodeType === RT.NodeType.NODE || node.level === 0);
  101. if (node.items && node.items.length) {
  102. for (let i = 0; i < node.items.length; i++) {
  103. private_setupIsParent(node.items[i]);
  104. }
  105. }
  106. };
  107. let topNodes = me.treeObj.getNodes();
  108. for (let i = 0; i < topNodes.length; i++) {
  109. private_setupIsParent(topNodes[i]);
  110. }
  111. me.treeObj.refresh();
  112. },
  113. onCheck: function() {
  114. //count();
  115. //if (clearFlag) {
  116. // clearCheckedOldNodes();
  117. //}
  118. },
  119. onClick: function(event,treeId,treeNode) {
  120. let me = zTreeOprObj;
  121. if (treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
  122. let params = {};
  123. let pageSize = rptControlObj.getCurrentPageSize();
  124. params.pageSize = pageSize;
  125. params.rpt_tpl_id = treeNode.refId;
  126. params.prj_id = projectInfoObj.projectInfo.ID;
  127. params.custCfg = me.reportPageCfg;
  128. me.currentNode = treeNode;
  129. me.requestReport(params);
  130. }
  131. },
  132. changePageSize: function(dom) {
  133. let me = zTreeOprObj,
  134. targetDom = document.getElementById("btnRptPageSize");
  135. let tmpStr = targetDom.innerHTML.trim();
  136. targetDom.innerHTML = dom.innerHTML.trim();
  137. dom.innerHTML = tmpStr;
  138. me.changeCfg();
  139. },
  140. changeOrientation: function(dom) {
  141. let me = zTreeOprObj,
  142. targetDom = document.getElementById("btnRptOrientation");
  143. let tmpStr = targetDom.innerHTML.trim();
  144. targetDom.innerHTML = dom.innerHTML.trim();
  145. dom.innerHTML = tmpStr;
  146. me.changeCfg();
  147. },
  148. changeCfg: function() {
  149. let me = zTreeOprObj;
  150. let params = {};
  151. params.pageSize = rptControlObj.getCurrentPageSize();
  152. params.orientation = rptControlObj.getCurrentOrientation();
  153. params.rpt_tpl_id = me.currentNode.refId;
  154. params.prj_id = projectInfoObj.projectInfo.ID;
  155. params.custCfg = me.reportPageCfg;
  156. me.requestReport(params);
  157. },
  158. resetAfter: function (pageRst) {
  159. let size = pageRst[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
  160. if (size[0] > size[1]) {
  161. document.getElementById("btnRptOrientation").innerHTML = "横向";
  162. document.getElementById("hrefRptOrientation").innerHTML = "纵向";
  163. } else {
  164. document.getElementById("btnRptOrientation").innerHTML = "纵向";
  165. document.getElementById("hrefRptOrientation").innerHTML = "横向";
  166. }
  167. },
  168. requestReport: function (params) {
  169. let me = zTreeOprObj;
  170. CommonAjax.postEx("report_api/getReport", params, 5000, true,
  171. function(result){
  172. let pageRst = result;
  173. if (pageRst) {
  174. me.resetAfter(pageRst);
  175. let canvas = document.getElementById("rptCanvas");
  176. me.currentRptPageRst = pageRst;
  177. me.maxPages = pageRst.items.length;
  178. me.currentPage = 1;
  179. me.displayPageValue();
  180. let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
  181. canvas.width = size[0] + 20;
  182. if (size[1] > size[0]) {
  183. canvas.height = size[1] + 100;
  184. } else {
  185. canvas.height = size[1] + 50;
  186. }
  187. me.showPage(1, canvas);
  188. }
  189. }, null, null
  190. );
  191. },
  192. showPage: function (pageNum, canvas) {
  193. let me = zTreeOprObj;
  194. if (pageNum >= 1 && pageNum <= me.maxPages) {
  195. me.currentPage = pageNum;
  196. JpcCanvasOutput.cleanCanvas(canvas);
  197. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  198. JpcCanvasOutput.drawToCanvas(me.currentRptPageRst, canvas, me.currentPage);
  199. }
  200. me.displayPageValue();
  201. },
  202. displayPageValue: function() {
  203. let me = zTreeOprObj;
  204. $("#rpt_page_num").get(0).value = me.currentPage + "/" + me.maxPages;
  205. }
  206. };
  207. let canvasOprObj = {
  208. canvasOnMouseMove: function (event) {
  209. if (zTreeOprObj.currentNode) {
  210. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  211. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  212. if (x < FIRST_PAGE_OFFSET) {
  213. canvas.style.cursor = "url(/web/building_saas/img/FirstPageSimple.cur), auto";
  214. } else if (x < PRE_PAGE_OFFSET) {
  215. canvas.style.cursor = "url(/web/building_saas/img/PreviousPageSimple.cur), auto";
  216. } else if ((canvas.width - x) < LAST_PAGE_OFFSET) {
  217. canvas.style.cursor = "url(/web/building_saas/img/LastPageSimple.cur), auto";
  218. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  219. canvas.style.cursor = "url(/web/building_saas/img/NextPageSimple.cur), auto";
  220. } else {
  221. canvas.style.cursor = "";
  222. }
  223. }
  224. },
  225. canvasOnClick: function(event){
  226. if (zTreeOprObj.currentNode) {
  227. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  228. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  229. if (x < FIRST_PAGE_OFFSET) {
  230. zTreeOprObj.showPage(1, canvas);
  231. } else if (x < PRE_PAGE_OFFSET) {
  232. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  233. } else if ((canvas.width - x) < LAST_PAGE_OFFSET) {
  234. zTreeOprObj.showPage(zTreeOprObj.maxPages, canvas);
  235. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  236. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  237. }
  238. }
  239. }
  240. };
  241. let rptControlObj = {
  242. currentOutputType: "Excel",
  243. getCurrentPageSize: function() {
  244. // let rst = "A4";
  245. let rst = document.getElementById("btnRptPageSize").innerHTML.trim();
  246. //btnRptPageSize
  247. return rst;
  248. },
  249. getCurrentOrientation: function() {
  250. // let rst = "横向";
  251. let rst = document.getElementById("btnRptOrientation").innerHTML.trim();
  252. return rst;
  253. },
  254. getCurrentReportOption: function() {
  255. //
  256. },
  257. changeType: function(newType) {
  258. let me = rptControlObj;
  259. let excelDom = document.getElementById("EXCEL_TYPE");
  260. let pdfDom = document.getElementById("PDF_TYPE");
  261. if (newType === "Excel") {
  262. excelDom.className = "btn btn-block btn-primary";
  263. pdfDom.className = "btn btn-block btn-outline-secondary";
  264. me.currentOutputType = newType;
  265. } else if (newType === "PDF") {
  266. excelDom.className = "btn btn-block btn-outline-secondary";
  267. pdfDom.className = "btn btn-block btn-primary";
  268. me.currentOutputType = newType;
  269. } else {
  270. //me.currentOutputType = newType;
  271. }
  272. },
  273. outputRpt: function() {
  274. let me = rptControlObj;
  275. if (me.currentOutputType === "Excel") {
  276. me.getExcel();
  277. } else if (me.currentOutputType === "PDF") {
  278. me.getPDF();
  279. } else {
  280. //other types if needed.
  281. }
  282. },
  283. getExcel: function() {
  284. let me = rptControlObj;
  285. //目前只支持当前打开报表
  286. //zTreeOprObj.currentRptPageRst
  287. if (zTreeOprObj.currentNode && zTreeOprObj.currentNode.refId) {
  288. let orgRptName = zTreeOprObj.currentNode.name;
  289. orgRptName = orgRptName.replace('【', '').replace('】','').replace('-','_').replace(' ','');
  290. let url = "/report_api/getExcel/" + projectInfoObj.projectInfo.ID + "/" + zTreeOprObj.currentNode.refId + "/" +
  291. me.getCurrentPageSize() + "/" + me.getCurrentOrientation() + "/" + orgRptName + "/" + false + "/" + 'normal';
  292. window.location = url;//这里不能使用get方法跳转,否则下载不成功
  293. }
  294. },
  295. getPDF: function() {
  296. let me = rptControlObj;
  297. //目前只支持当前打开报表
  298. //zTreeOprObj.currentRptPageRst
  299. if (zTreeOprObj.currentNode && zTreeOprObj.currentNode.refId) {
  300. let orgRptName = zTreeOprObj.currentNode.name;
  301. orgRptName = orgRptName.replace('【', '').replace('】','').replace('-','_');
  302. let url = "/report_api/getPDF/" + projectInfoObj.projectInfo.ID + "/" + zTreeOprObj.currentNode.refId + "/" +
  303. me.getCurrentPageSize() + "/" + me.getCurrentOrientation() + "/" + orgRptName;
  304. window.location = url;//这里不能使用get方法跳转,否则下载不成功
  305. }
  306. },
  307. firstPage: function(dom) {
  308. let canvas = document.getElementById("rptCanvas");
  309. zTreeOprObj.showPage(1, canvas);
  310. },
  311. prePage: function(dom) {
  312. let canvas = document.getElementById("rptCanvas");
  313. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  314. },
  315. nextPage: function(dom) {
  316. let canvas = document.getElementById("rptCanvas");
  317. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  318. },
  319. lastPage: function(dom) {
  320. let me = zTreeOprObj;
  321. let canvas = document.getElementById("rptCanvas");
  322. zTreeOprObj.showPage(me.maxPages, canvas);
  323. },
  324. onKeydown: function (event, dom) {
  325. let me = zTreeOprObj, keyPressed = null;
  326. if (window.event) {
  327. keyPressed = window.event.keyCode; // IE/Chrome
  328. } else {
  329. keyPressed = event.which; // Firefox
  330. }
  331. if (keyPressed == 13) {
  332. let pageNum = 1;
  333. try {
  334. pageNum = parseInt(dom.value);
  335. } catch (e) {
  336. pageNum = 1;
  337. }
  338. let canvas = document.getElementById("rptCanvas");
  339. if (pageNum < 1) {
  340. pageNum = 1;
  341. } else if (pageNum > me.maxPages) {
  342. pageNum = me.maxPages;
  343. }
  344. zTreeOprObj.showPage(pageNum, canvas);
  345. return false;
  346. }
  347. },
  348. changeMargin: function(marginPropStr, marginDom) {
  349. zTreeOprObj.reportPageCfg.margins[marginPropStr] = marginDom.value;
  350. },
  351. changeFontMain: function(CfgDispName, fontProperty, fontDom) {
  352. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  353. if (font["CfgDispName"] === CfgDispName) {
  354. font[fontProperty] = fontDom.value;
  355. break;
  356. }
  357. }
  358. },
  359. changeCfgOption: function (optStr, dom) {
  360. zTreeOprObj.reportPageCfg[optStr] = dom.checked;
  361. },
  362. changeFontAdhoc: function(CfgDispName, fontProperty, fontDom) {
  363. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  364. if (font["CfgDispName"] === CfgDispName) {
  365. if (font[fontProperty] === 'T') {
  366. font[fontProperty] = 'F';
  367. fontDom.className = "btn btn-sm btn-outline-secondary";
  368. } else {
  369. font[fontProperty] = 'T';
  370. fontDom.className = "btn btn-sm btn-outline-secondary active";
  371. }
  372. break;
  373. }
  374. }
  375. },
  376. saveCustCfg: function() {
  377. let params = {};
  378. params.custCfg = zTreeOprObj.reportPageCfg;
  379. CommonAjax.postEx("report_tpl_api/saveCustomerCfg", params, 20000, true, function(result){
  380. alert("Save successfully!");
  381. }, null, null
  382. );
  383. },
  384. confirmCfgChange: function() {
  385. // let me = zTreeOprObj;
  386. let treeNode = zTreeOprObj.currentNode;
  387. if (treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
  388. let params = {};
  389. let pageSize = rptControlObj.getCurrentPageSize();
  390. params.pageSize = pageSize;
  391. params.rpt_tpl_id = treeNode.refId;
  392. params.prj_id = projectInfoObj.projectInfo.ID;
  393. params.custCfg = zTreeOprObj.reportPageCfg;
  394. zTreeOprObj.requestReport(params);
  395. }
  396. }
  397. };