rpt_main.js 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243
  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. const WAIT_TIME_EXPORT = 12000;
  10. let fontSuffixMapObj = {"表标题": "title", "列标题": "column", "正文内容": "content", "合计": "summary", "表眉/表脚": "header_footer"};
  11. let rptTplObj = {
  12. hasInitialized: false,
  13. pdfFont: {'SmartSimsun': [], 'simhei': [], 'simkai': []},
  14. iniPage: function() {
  15. let me = this;
  16. if (!me.hasInitialized) {
  17. zTreeOprObj.getCustomerCfg();
  18. zTreeOprObj.getReportTemplateTree();
  19. zTreeOprObj.selectedPrjIDs = [];
  20. me.hasInitialized = true;
  21. let canvas = document.getElementById("rptCanvas");
  22. canvas.onclick = canvasOprObj.canvasOnClick;
  23. canvas.onmousemove = canvasOprObj.canvasOnMouseMove;
  24. if (JpcJsPDFHelper.doc === null) {
  25. JpcJsPDFHelper.initialize('p', 'pt', 'a4');
  26. }
  27. // dynamicLoadJs('/lib/jspdf/SmartSimsun-normal.js');
  28. // dynamicLoadJs('/lib/jspdf/SmartSimsun-bold.js', me.pdfFontSimsunCallBack);
  29. // dynamicLoadJs('http://d2.smartcost.com.cn/cach/SmartSimsun-normal.js');
  30. // dynamicLoadJs('http://d2.smartcost.com.cn/cach/SmartSimsun-bold.js', me.pdfFontSimsunCallBack);
  31. }
  32. },
  33. pdfFontSimsunCallBack: function() {
  34. rptTplObj.pdfFont['SmartSimsun'].push('normal');
  35. rptTplObj.pdfFont['SmartSimsun'].push('bold');
  36. },
  37. pdfFontSimkaiCallBack: function() {
  38. rptTplObj.pdfFont['simkai'].push('normal');
  39. rptTplObj.pdfFont['simkai'].push('bold');
  40. },
  41. pdfFontSimheiCallBack: function() {
  42. rptTplObj.pdfFont['simhei'].push('normal');
  43. rptTplObj.pdfFont['simhei'].push('bold');
  44. }
  45. }
  46. let zTreeOprObj = {
  47. treeObj: null,
  48. prjFolderTreeObj: null,
  49. currentNode: null,
  50. checkedRptTplNodes: null,
  51. currentRptPageRst: null,
  52. reportPageCfg: null,
  53. defReportPageCfg: null,
  54. currentPage: 1,
  55. maxPages: 0,
  56. selectedPrjIDs: [],
  57. countChkedRptTpl: function () {
  58. let me = zTreeOprObj;
  59. if (me.treeObj) {
  60. me.checkedRptTplNodes = [];
  61. let chkNodes = me.treeObj.getCheckedNodes(true), cnt = 0, hasCurrentNode = false;
  62. for (let node of chkNodes) {
  63. if (node.nodeType === TPL_TYPE_TEMPLATE) {
  64. cnt++;
  65. me.checkedRptTplNodes.push(node);
  66. if (me.currentNode === node) hasCurrentNode = true;
  67. }
  68. }
  69. if (!hasCurrentNode && cnt === 0 && me.currentNode !== null) {
  70. //这里根据实际需求再做处理
  71. cnt++;
  72. me.checkedRptTplNodes.push(me.currentNode);
  73. }
  74. $("#export_div").find("span").each(function(cIdx,elementSpan){
  75. elementSpan.innerText = cnt;
  76. });
  77. $("#print_div").find("span").each(function(cIdx,elementSpan){
  78. elementSpan.innerText = cnt;
  79. });
  80. }
  81. },
  82. getReportTemplateTree: function() {
  83. let me = zTreeOprObj, params = {};
  84. params.engineerId = projectObj.project.projectInfo.property.engineering;
  85. let private_chk_hide = function (chkTplItem) {
  86. //考虑未来拓展,统一在此判断报表模板是否显示
  87. let rst = false;
  88. // if (chkTplItem.hasOwnProperty('flags') && chkTplItem.flags.hasOwnProperty('taxType') && chkTplItem.flags['taxType'] !== null &&
  89. // parseInt(chkTplItem.flags['taxType']) !== parseInt(projectObj.project.projectInfo.property.taxType)) {
  90. // rst = true;
  91. // }
  92. //重庆养护系统的判断逻辑有所不同
  93. if (chkTplItem.hasOwnProperty('flags') && chkTplItem.flags.hasOwnProperty('valuationType') && chkTplItem.flags['valuationType'] !== null &&
  94. chkTplItem.flags['valuationType'] !== projectObj.project.projectInfo.property.valuationType) {
  95. rst = true;
  96. }
  97. return rst;
  98. };
  99. // projectObj.project.projectInfo.property.taxType === 1 //1: 一般计税 2: 简易计税
  100. CommonAjax.postEx("report_tpl_api/getRptTplTree", params, 20000, true, function(result){
  101. let private_remove_hide_item = function (items, nlv) {
  102. if (items && items.length > 0) {
  103. for (let i = items.length - 1; i >= 0; i--) {
  104. if (!(items[i].released) && items[i].nodeType === 2) {
  105. items.splice(i, 1);
  106. } else if(private_chk_hide(items[i])) {
  107. items.splice(i, 1);
  108. } else {
  109. if (items[i].items && items[i].items.length > 0) {
  110. private_remove_hide_item(items[i].items, nlv + 1);
  111. if (items[i].items.length === 0 && nlv > 0) {
  112. items.splice(i, 1);
  113. }
  114. }
  115. }
  116. }
  117. }
  118. }
  119. let nodeLv = 0;
  120. private_remove_hide_item(result, nodeLv);
  121. for (let topNode of result) {
  122. if (topNode.userId === "-100") {
  123. topNode.name = topNode.name + " - 标准报表";
  124. } else {
  125. topNode.name = topNode.name + " - 定制报表";
  126. }
  127. }
  128. zTreeHelper.createTreeDirectly(result, rpt_tpl_setting, "rptTplTree", me);
  129. me.refreshNodes();
  130. }, null, null);
  131. },
  132. getCustomerCfg: function() {
  133. let me = zTreeOprObj, params = {};
  134. params.engineerId = projectObj.project.projectInfo.property.engineering;
  135. CommonAjax.postEx("report_tpl_api/getCustomizeCfg", params, 20000, true, function(result){
  136. if (result) {
  137. me.defReportPageCfg = result[0];
  138. me.reportPageCfg = result[1];
  139. me.iniFontCfgDom(me.reportPageCfg);
  140. me.renderRptCfg(result[1]);
  141. } else {
  142. me.reportPageCfg = null;
  143. me.defReportPageCfg = null;
  144. }
  145. }, null, null
  146. );
  147. },
  148. iniFontCfgDom: function (cfg) {
  149. for (let font of cfg.fonts) {
  150. let domArrs = [];
  151. let fontPropSuffix = fontSuffixMapObj[font.CfgDispName];
  152. domArrs.push("<div class='row mb-1'>");
  153. //1. label
  154. domArrs.push("<div class='col-3'>" + font.CfgDispName + "</div>");
  155. //2. font name
  156. domArrs.push("<div class='col-3'>");
  157. domArrs.push("<select class='form-control input-sm' id='fontName_" + fontPropSuffix + "' onchange='rptControlObj.changeFontMain(\"" + font.CfgDispName + "\", \"Name\", this)'>");
  158. domArrs.push("<option>宋体</option><option>楷体</option><option>黑体</option>");
  159. domArrs.push("</select>");
  160. domArrs.push("</div>");
  161. //3. font height
  162. domArrs.push("<div class='col-3'>");
  163. domArrs.push("<input class='form-control input-sm' id='fontHeight_" + fontPropSuffix + "' type='number' value='30' step='1' min='6' max='66' " +
  164. "onchange='rptControlObj.changeFontMain(\"" + font.CfgDispName + "\", \"FontHeight\", this)' " +
  165. "onkeyup='rptControlObj.changeFontMain(\"" + font.CfgDispName + "\", \"FontHeight\", this)'>");
  166. domArrs.push("</div>");
  167. //4. font bold italic underline
  168. domArrs.push("<div class='col-3'>");
  169. domArrs.push("<a id='font_bold_" + fontPropSuffix + "' class='btn btn-sm btn-outline-secondary' title='加粗' onclick='rptControlObj.changeFontAdhoc(\"" + font.CfgDispName + "\", \"FontBold\", this)'><i class='fa fa-bold'></i></a>");
  170. domArrs.push("<a id='font_italic_" + fontPropSuffix + "' class='btn btn-sm btn-outline-secondary' title='斜体' onclick='rptControlObj.changeFontAdhoc(\"" + font.CfgDispName + "\", \"FontItalic\", this)'><i class='fa fa-italic'></i></a>");
  171. domArrs.push("<a id='font_underline_" + fontPropSuffix + "' class='btn btn-sm btn-outline-secondary' title='下划线' onclick='rptControlObj.changeFontAdhoc(\"" + font.CfgDispName + "\", \"FontUnderline\", this)'><i class='fa fa-underline'></i></a>");
  172. domArrs.push("</div>");
  173. //
  174. domArrs.push("</div>");
  175. $(domArrs.join("")).insertBefore($("#font_cfg_blank_flag"));
  176. }
  177. },
  178. renderRptCfg: function (cfg) {
  179. $("#elementMargin_Left").get(0).value = cfg.margins.Left;
  180. $("#elementMargin_Right").get(0).value = cfg.margins.Right;
  181. $("#elementMargin_Top").get(0).value = cfg.margins.Top;
  182. $("#elementMargin_Bottom").get(0).value = cfg.margins.Bottom;
  183. for (let font of cfg.fonts) {
  184. let fontPropSuffix = fontSuffixMapObj[font.CfgDispName];
  185. document.getElementById("fontName_" + fontPropSuffix).value = font.Name;
  186. document.getElementById("fontHeight_" + fontPropSuffix).value = font.FontHeight;
  187. document.getElementById("font_bold_" + fontPropSuffix).className = (font.FontBold === "T")?"btn btn-sm btn-outline-secondary active":"btn btn-sm btn-outline-secondary";
  188. document.getElementById("font_italic_" + fontPropSuffix).className = (font.FontItalic === "T")?"btn btn-sm btn-outline-secondary active":"btn btn-sm btn-outline-secondary";
  189. document.getElementById("font_underline_" + fontPropSuffix).className = (font.FontUnderline === "T")?"btn btn-sm btn-outline-secondary active":"btn btn-sm btn-outline-secondary";
  190. }
  191. document.getElementById("rpt_vertical_line").checked = cfg.showVerticalLine;
  192. document.getElementById("rpt_narrow").checked = cfg.isNarrow;
  193. // document.getElementById("rpt_narrow").checked = false;
  194. document.getElementById("rpt_fill_zero").checked = cfg.fillZero;
  195. },
  196. extractRptCfg: function (cfg) {
  197. cfg.margins.Left = $("#elementMargin_Left").get(0).value;
  198. cfg.margins.Right = $("#elementMargin_Right").get(0).value;
  199. cfg.margins.Top = $("#elementMargin_Top").get(0).value;
  200. cfg.margins.Bottom = $("#elementMargin_Bottom").get(0).value;
  201. for (let font of cfg.fonts) {
  202. let fontPropSuffix = fontSuffixMapObj[font.CfgDispName];
  203. font.Name = document.getElementById("fontName_" + fontPropSuffix).value;
  204. font.FontHeight = document.getElementById("fontHeight_" + fontPropSuffix).value;
  205. font.FontBold = (document.getElementById("font_bold_" + fontPropSuffix).className === "btn btn-sm btn-outline-secondary active")?"T":"F";
  206. font.FontItalic = (document.getElementById("font_italic_" + fontPropSuffix).className === "btn btn-sm btn-outline-secondary active")?"T":"F";
  207. font.FontUnderline = (document.getElementById("font_underline_" + fontPropSuffix).className === "btn btn-sm btn-outline-secondary active")?"T":"F";
  208. }
  209. cfg.showVerticalLine = document.getElementById("rpt_vertical_line").checked;
  210. cfg.isNarrow = document.getElementById("rpt_narrow").checked;
  211. cfg.fillZero = document.getElementById("rpt_fill_zero").checked;
  212. },
  213. refreshNodes: function() {
  214. let me = this;
  215. let private_setupIsParent = function(node){
  216. node.isParent = (node.nodeType === RT.NodeType.NODE || node.level === 0);
  217. if (node.items && node.items.length) {
  218. for (let i = 0; i < node.items.length; i++) {
  219. private_setupIsParent(node.items[i]);
  220. }
  221. }
  222. };
  223. let topNodes = me.treeObj.getNodes();
  224. for (let i = 0; i < topNodes.length; i++) {
  225. private_setupIsParent(topNodes[i]);
  226. }
  227. me.treeObj.refresh();
  228. },
  229. onCheck: function(event, treeId, treeNode) {
  230. zTreeOprObj.countChkedRptTpl();
  231. },
  232. onClick: function(event,treeId,treeNode) {
  233. let me = zTreeOprObj;
  234. if (treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
  235. me.currentNode = treeNode;
  236. if (treeNode.hasOwnProperty('flags') && treeNode.flags.hasOwnProperty('reportType') && treeNode['flags']['reportType'] !== 'NA') {
  237. if (treeNode['flags']['reportType'] === 'billSummary') {
  238. me.requestPrjFolderForBillsSummary();
  239. } else if (treeNode['flags']['reportType'] === 'gljSummary') {
  240. me.requestPrjFolderForGljSummary();
  241. }
  242. } else {
  243. let params = {};
  244. let pageSize = rptControlObj.getCurrentPageSize();
  245. params.pageSize = pageSize;
  246. params.rpt_tpl_id = treeNode.refId;
  247. params.prj_id = projectObj.project.projectInfo.ID;
  248. params.custCfg = me.reportPageCfg;
  249. me.requestNormalReport(params);
  250. }
  251. me.countChkedRptTpl();
  252. }
  253. },
  254. changePageSize: function(dom) {
  255. let me = zTreeOprObj,
  256. targetDom = document.getElementById("btnRptPageSize");
  257. let tmpStr = targetDom.innerHTML.trim();
  258. targetDom.innerHTML = dom.innerHTML.trim();
  259. dom.innerHTML = tmpStr;
  260. me.changeCfg();
  261. },
  262. changeOrientation: function(dom) {
  263. let me = zTreeOprObj,
  264. targetDom = document.getElementById("btnRptOrientation");
  265. let tmpStr = targetDom.innerHTML.trim();
  266. targetDom.innerHTML = dom.innerHTML.trim();
  267. dom.innerHTML = tmpStr;
  268. me.changeCfg();
  269. },
  270. changeCfg: function() {
  271. let me = zTreeOprObj;
  272. if (me.currentNode) {
  273. if (me.currentNode.hasOwnProperty('flags') && me.currentNode.flags.hasOwnProperty('reportType') && me.currentNode['flags']['reportType'] !== 'NA') {
  274. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  275. if (me.currentNode['flags']['reportType'] === 'billSummary') {
  276. refBillSumPrjsIds.push(me.currentNode.refId);
  277. } else if (me.currentNode['flags']['reportType'] === 'gljSummary') {
  278. refGljSumPrjsIds.push(me.currentNode.refId);
  279. }
  280. if (zTreeOprObj.selectedPrjIDs.length > 0) {
  281. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  282. params.pageSize = rptControlObj.getCurrentPageSize();
  283. params.orientation = rptControlObj.getCurrentOrientation();
  284. params.rpt_ids = refRptTplIds;
  285. params.rpt_bill_tpl_ids = refBillSumPrjsIds;
  286. params.rpt_glj_tpl_ids = refGljSumPrjsIds;
  287. params.custCfg = me.reportPageCfg;
  288. CommonAjax.postEx("report_api/getMultiReports", params, 10000, true,
  289. function(result){
  290. hintBox.unWaitBox();
  291. let pageRst = result[0];
  292. let canvas = document.getElementById("rptCanvas");
  293. if (pageRst && pageRst.items && pageRst.items.length > 0) {
  294. me.resetAfter(pageRst);
  295. me.currentRptPageRst = pageRst;
  296. me.maxPages = pageRst.items.length;
  297. me.currentPage = 1;
  298. me.displayPageValue();
  299. let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
  300. canvas.width = size[0] + 20;
  301. if (size[1] > size[0]) {
  302. canvas.height = size[1] + 100;
  303. } else {
  304. canvas.height = size[1] + 50;
  305. }
  306. me.showPage(1, canvas);
  307. } else {
  308. //返回了无数据表
  309. JpcCanvasOutput.cleanCanvas(canvas);
  310. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  311. }
  312. }, function(err){
  313. hintBox.unWaitBox();
  314. }, function(ex){
  315. hintBox.unWaitBox();
  316. }
  317. );
  318. } else {
  319. if (me.currentNode['flags']['reportType'] === 'billSummary') {
  320. me.requestPrjFolderForBillsSummary();
  321. } else if (me.currentNode['flags']['reportType'] === 'gljSummary') {
  322. me.requestPrjFolderForGljSummary();
  323. }
  324. }
  325. } else {
  326. let params = {};
  327. params.pageSize = rptControlObj.getCurrentPageSize();
  328. params.orientation = rptControlObj.getCurrentOrientation();
  329. params.rpt_tpl_id = me.currentNode.refId;
  330. params.prj_id = projectObj.project.projectInfo.ID;
  331. params.custCfg = me.reportPageCfg;
  332. me.requestNormalReport(params);
  333. }
  334. }
  335. },
  336. resetAfter: function (pageRst) {
  337. let size = pageRst[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
  338. if (size[0] > size[1]) {
  339. document.getElementById("btnRptOrientation").innerHTML = "横向";
  340. document.getElementById("hrefRptOrientation").innerHTML = "纵向";
  341. } else {
  342. document.getElementById("btnRptOrientation").innerHTML = "纵向";
  343. document.getElementById("hrefRptOrientation").innerHTML = "横向";
  344. }
  345. },
  346. requestNormalReport: function (params) {
  347. let me = zTreeOprObj;
  348. hintBox.waitBox();
  349. CommonAjax.postEx("report_api/getReport", params, 60000, true,
  350. function(result){
  351. hintBox.unWaitBox();
  352. let pageRst = result;
  353. let canvas = document.getElementById("rptCanvas");
  354. if (pageRst && pageRst.items && pageRst.items.length > 0) {
  355. me.resetAfter(pageRst);
  356. me.currentRptPageRst = pageRst;
  357. me.maxPages = pageRst.items.length;
  358. me.currentPage = 1;
  359. me.displayPageValue();
  360. let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
  361. canvas.width = size[0] + 20;
  362. if (size[1] > size[0]) {
  363. canvas.height = size[1] + 100;
  364. } else {
  365. canvas.height = size[1] + 50;
  366. }
  367. me.showPage(1, canvas);
  368. } else {
  369. //返回了无数据表
  370. JpcCanvasOutput.cleanCanvas(canvas);
  371. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  372. }
  373. }, function(err){
  374. hintBox.unWaitBox();
  375. }, function(ex){
  376. hintBox.unWaitBox();
  377. }
  378. );
  379. },
  380. requestPrjFolderCommon: function () {
  381. let me = zTreeOprObj;
  382. hintBox.waitBox();
  383. $.ajax({
  384. type:"POST",
  385. url: '/pm/api/getProjects',
  386. data: {'data': JSON.stringify({"user_id": userID, "compilation": projectObj.project.projectInfo.compilation})},
  387. dataType: 'json',
  388. cache: false,
  389. timeout: 15000,
  390. success: function(result){
  391. hintBox.unWaitBox();
  392. if (result.error === 0) {
  393. //console.log(result.data);
  394. let currPrjParentID = projectObj.project.projectInfo.ParentID;
  395. let selectedProjects = [];
  396. for (let prj of result.data) {
  397. if (currPrjParentID === prj.ParentID) {
  398. selectedProjects.push({name: prj.name, ID: prj.ID});
  399. }
  400. }
  401. $("#show_project_folder").trigger("click");
  402. me.prjFolderTreeObj = $.fn.zTree.init($("#prjFolderTree"), rpt_prj_folder_setting, selectedProjects);
  403. me.prjFolderTreeObj.expandAll(true);
  404. } else {
  405. alert('error: ' + result.message);
  406. }
  407. },
  408. error: function(jqXHR, textStatus, errorThrown){
  409. hintBox.unWaitBox();
  410. alert('error ' + textStatus + " " + errorThrown);
  411. }
  412. });
  413. },
  414. requestPrjFolderForBillsSummary: function () {
  415. let me = zTreeOprObj;
  416. $("#divReqBillSummary")[0].style.display = "";
  417. $("#divReqGljSummary")[0].style.display = "none";
  418. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  419. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  420. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  421. me.requestPrjFolderCommon();
  422. },
  423. requestPrjFolderForGljSummary: function () {
  424. let me = zTreeOprObj;
  425. $("#divReqBillSummary")[0].style.display = "none";
  426. $("#divReqGljSummary")[0].style.display = "";
  427. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  428. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  429. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  430. me.requestPrjFolderCommon();
  431. },
  432. requestBillsSummaryRpt: function () {
  433. let me = zTreeOprObj;
  434. let nodes = me.prjFolderTreeObj.getCheckedNodes(true);
  435. if (nodes.length > 0) {
  436. hintBox.waitBox();
  437. let params = {};
  438. params.pageSize = rptControlObj.getCurrentPageSize();
  439. params.rpt_tpl_id = me.currentNode.refId;
  440. params.custCfg = me.reportPageCfg;
  441. params.prjIds = [];
  442. me.selectedPrjIDs = [];
  443. for (let node of nodes) {
  444. params.prjIds.push(node.ID);
  445. me.selectedPrjIDs.push(node.ID);
  446. }
  447. CommonAjax.postEx("report_api/getBillsSummaryReport", params, 26000, true,
  448. function(result){
  449. hintBox.unWaitBox();
  450. let pageRst = result;
  451. let canvas = document.getElementById("rptCanvas");
  452. if (pageRst && pageRst.items && pageRst.items.length > 0) {
  453. me.resetAfter(pageRst);
  454. me.currentRptPageRst = pageRst;
  455. me.maxPages = pageRst.items.length;
  456. me.currentPage = 1;
  457. me.displayPageValue();
  458. let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
  459. canvas.width = size[0] + 20;
  460. if (size[1] > size[0]) {
  461. canvas.height = size[1] + 100;
  462. } else {
  463. canvas.height = size[1] + 50;
  464. }
  465. me.showPage(1, canvas);
  466. } else {
  467. //返回了无数据表
  468. JpcCanvasOutput.cleanCanvas(canvas);
  469. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  470. }
  471. }, function(err){
  472. hintBox.unWaitBox();
  473. }, function(ex){
  474. hintBox.unWaitBox();
  475. }
  476. );
  477. }
  478. },
  479. requestGljSummaryRpt: function () {
  480. let me = zTreeOprObj;
  481. let nodes = me.prjFolderTreeObj.getCheckedNodes(true);
  482. if (nodes.length > 0) {
  483. hintBox.waitBox();
  484. let params = {};
  485. params.pageSize = rptControlObj.getCurrentPageSize();
  486. params.rpt_tpl_id = me.currentNode.refId;
  487. params.custCfg = me.reportPageCfg;
  488. params.prjIds = [];
  489. zTreeOprObj.selectedPrjIDs = [];
  490. for (let node of nodes) {
  491. params.prjIds.push(node.ID);
  492. zTreeOprObj.selectedPrjIDs.push(node.ID);
  493. }
  494. CommonAjax.postEx("report_api/getGljSummaryReport", params, 26000, true,
  495. function(result){
  496. hintBox.unWaitBox();
  497. let pageRst = result;
  498. let canvas = document.getElementById("rptCanvas");
  499. if (pageRst && pageRst.items && pageRst.items.length > 0) {
  500. me.resetAfter(pageRst);
  501. me.currentRptPageRst = pageRst;
  502. me.maxPages = pageRst.items.length;
  503. me.currentPage = 1;
  504. me.displayPageValue();
  505. let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
  506. canvas.width = size[0] + 20;
  507. if (size[1] > size[0]) {
  508. canvas.height = size[1] + 100;
  509. } else {
  510. canvas.height = size[1] + 50;
  511. }
  512. me.showPage(1, canvas);
  513. } else {
  514. //返回了无数据表
  515. JpcCanvasOutput.cleanCanvas(canvas);
  516. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  517. }
  518. }, function(err){
  519. hintBox.unWaitBox();
  520. }, function(ex){
  521. hintBox.unWaitBox();
  522. }
  523. );
  524. }
  525. },
  526. requestSumAndNormalRptForPDF: function () {
  527. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  528. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  529. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  530. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  531. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  532. params.rpt_names = rpt_names;
  533. params.isOneSheet = true;
  534. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  535. if (result) {
  536. let uuIdUrls = [];
  537. for (let uuIdObj of result) {
  538. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  539. uuIdUrls.push(uuIdUrl);
  540. }
  541. downloadReport(uuIdUrls);
  542. } else {
  543. //
  544. }
  545. }, null, null
  546. );
  547. },
  548. requestSumAndNormalRptForPDF_Ex: function () {
  549. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  550. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  551. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  552. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  553. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  554. params.rpt_names = rpt_names;
  555. params.isOneSheet = true;
  556. CommonAjax.postEx("report_api/getMultiReports", params, 30000, true,
  557. function(result){
  558. let pageSize = rptControlObj.getCurrentPageSize();
  559. for (let idx = 0; idx < result.length; idx++) {
  560. let pageData = result[idx];
  561. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
  562. }
  563. },
  564. function(failRst){
  565. console.log(failRst);
  566. },
  567. function(exceptionRst){
  568. console.log(exceptionRst);
  569. }
  570. );
  571. },
  572. requestSumAndNormalRptForMultiExcel: function () {
  573. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  574. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  575. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  576. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  577. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  578. params.rpt_names = rpt_names;
  579. params.isOneSheet = true;
  580. $.bootstrapLoading.start();
  581. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  582. if (result) {
  583. $.bootstrapLoading.end();
  584. let uuIdUrls = [];
  585. for (let uuIdObj of result) {
  586. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  587. uuIdUrls.push(uuIdUrl);
  588. }
  589. downloadReport(uuIdUrls);
  590. } else {
  591. $.bootstrapLoading.end();
  592. }
  593. },
  594. function(failRst){
  595. $.bootstrapLoading.end();
  596. console.log(failRst);
  597. },
  598. function(exceptionRst){
  599. $.bootstrapLoading.end();
  600. console.log(exceptionRst);
  601. }
  602. );
  603. },
  604. requestSumAndNormalRptForAllInOneExcel: function () {
  605. let orgRptName = projectObj.project.projectInfo.name;
  606. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  607. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, null, null, null);
  608. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  609. params.rptName = orgRptName;
  610. $.bootstrapLoading.start();
  611. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  612. if (result) {
  613. $.bootstrapLoading.end();
  614. let uuIdUrls = [];
  615. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  616. uuIdUrls.push(uuIdUrl);
  617. downloadReport(uuIdUrls);
  618. } else {
  619. $.bootstrapLoading.end();
  620. }
  621. },
  622. function(failRst){
  623. $.bootstrapLoading.end();
  624. console.log(failRst);
  625. },
  626. function(exceptionRst){
  627. $.bootstrapLoading.end();
  628. console.log(exceptionRst);
  629. }
  630. );
  631. },
  632. showPage: function (pageNum, canvas) {
  633. let me = zTreeOprObj;
  634. if (pageNum >= 1 && pageNum <= me.maxPages) {
  635. me.currentPage = pageNum;
  636. JpcCanvasOutput.cleanCanvas(canvas);
  637. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  638. JpcCanvasOutput.drawToCanvas(me.currentRptPageRst, canvas, me.currentPage);
  639. }
  640. me.displayPageValue();
  641. },
  642. displayPageValue: function() {
  643. let me = zTreeOprObj;
  644. $("#rpt_page_num").get(0).value = me.currentPage + "/" + me.maxPages;
  645. }
  646. };
  647. let canvasOprObj = {
  648. canvasOnMouseMove: function (event) {
  649. if (zTreeOprObj.currentNode) {
  650. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  651. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  652. if (x < PRE_PAGE_OFFSET) {
  653. canvas.style.cursor = "url(/web/building_saas/img/PreviousPage.cur), auto";
  654. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  655. canvas.style.cursor = "url(/web/building_saas/img/NextPage.cur), auto";
  656. } else {
  657. canvas.style.cursor = "";
  658. }
  659. }
  660. },
  661. canvasOnClick: function(event){
  662. if (zTreeOprObj.currentNode) {
  663. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  664. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  665. if (x < FIRST_PAGE_OFFSET) {
  666. zTreeOprObj.showPage(1, canvas);
  667. } else if (x < PRE_PAGE_OFFSET) {
  668. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  669. } else if ((canvas.width - x) < LAST_PAGE_OFFSET) {
  670. zTreeOprObj.showPage(zTreeOprObj.maxPages, canvas);
  671. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  672. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  673. }
  674. }
  675. }
  676. };
  677. let rptControlObj = {
  678. currentOutputType: "Excel",
  679. currentDownloadUrl: null,
  680. currentDownloadIdx: 0,
  681. getCurrentPageSize: function() {
  682. // let rst = "A4";
  683. let rst = document.getElementById("btnRptPageSize").innerHTML.trim();
  684. //btnRptPageSize
  685. return rst;
  686. },
  687. getCurrentOrientation: function() {
  688. // let rst = "横向";
  689. let rst = document.getElementById("btnRptOrientation").innerHTML.trim();
  690. return rst;
  691. },
  692. getCurrentReportOption: function() {
  693. //
  694. },
  695. changeType: function(newType) {
  696. let me = rptControlObj;
  697. let excelDom = document.getElementById("EXCEL_TYPE");
  698. let pdfDom = document.getElementById("PDF_TYPE");
  699. if (newType === "Excel") {
  700. excelDom.className = "btn btn-block btn-primary";
  701. pdfDom.className = "btn btn-block btn-outline-secondary";
  702. me.currentOutputType = newType;
  703. } else if (newType === "PDF") {
  704. excelDom.className = "btn btn-block btn-outline-secondary";
  705. pdfDom.className = "btn btn-block btn-primary";
  706. me.currentOutputType = newType;
  707. } else {
  708. //me.currentOutputType = newType;
  709. }
  710. },
  711. outputRpt: function() {
  712. let me = rptControlObj;
  713. if (me.currentOutputType === "Excel") {
  714. me.getExcel();
  715. } else if (me.currentOutputType === "PDF") {
  716. me.getPDF();
  717. } else {
  718. //other types if needed.
  719. }
  720. },
  721. getTplIdsCommon: function (refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names) {
  722. for (let node of zTreeOprObj.checkedRptTplNodes) {
  723. if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
  724. if (node['flags']['reportType'] === 'billSummary') {
  725. refBillSumPrjsIds.push(node.refId);
  726. if (bill_rpt_names) bill_rpt_names.push(node.name);
  727. } else if (node['flags']['reportType'] === 'gljSummary') {
  728. refGljSumPrjsIds.push(node.refId);
  729. if (glj_rpt_names) glj_rpt_names.push(node.name);
  730. }
  731. } else {
  732. refRptTplIds.push(node.refId);
  733. if (rpt_names) rpt_names.push(node.name);
  734. }
  735. }
  736. },
  737. creatCommonExportParam: function (refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds) {
  738. let nodes = (zTreeOprObj.prjFolderTreeObj === null)?[]:zTreeOprObj.prjFolderTreeObj.getCheckedNodes(true);
  739. let rst = {};
  740. rst.prj_id = projectObj.project.projectInfo.ID;
  741. rst.rpt_ids = refRptTplIds;
  742. rst.rpt_bill_tpl_ids = refBillSumPrjsIds;
  743. rst.rpt_glj_tpl_ids = refGljSumPrjsIds;
  744. rst.prjIds = [];
  745. zTreeOprObj.selectedPrjIDs = [];
  746. for (let node of nodes) {
  747. rst.prjIds.push(node.ID);
  748. zTreeOprObj.selectedPrjIDs.push(node.ID);
  749. }
  750. // rst.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  751. // rst.rpt_names = rpt_names;
  752. // rst.isOneSheet = true;
  753. rst.pageSize = rptControlObj.getCurrentPageSize();
  754. rst.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:rptControlObj.getCurrentOrientation());
  755. rst.custCfg = zTreeOprObj.reportPageCfg;
  756. rst.option = "normal";
  757. return rst;
  758. },
  759. getAllInOneBook: function () {
  760. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  761. let me = rptControlObj;
  762. let orgRptName = projectObj.project.projectInfo.name;
  763. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  764. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  765. if (zTreeOprObj.selectedPrjIDs.length > 0 && (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0)) {
  766. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  767. params.rptName = orgRptName;
  768. $.bootstrapLoading.start();
  769. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  770. if (result) {
  771. $.bootstrapLoading.end();
  772. let uuIdUrls = [];
  773. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  774. uuIdUrls.push(uuIdUrl);
  775. downloadReport(uuIdUrls);
  776. } else {
  777. $.bootstrapLoading.end();
  778. }
  779. },
  780. function(failRst){
  781. $.bootstrapLoading.end();
  782. console.log(failRst);
  783. },
  784. function(exceptionRst){
  785. $.bootstrapLoading.end();
  786. console.log(exceptionRst);
  787. }
  788. );
  789. } else {
  790. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  791. $("#divReqBillSummary")[0].style.display = "none";
  792. $("#divReqGljSummary")[0].style.display = "none";
  793. $("#divReqCommonSummaryExcel")[0].style.display = "";
  794. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  795. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  796. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  797. } else if (refRptTplIds.length > 0) {
  798. let params = {};
  799. params.prj_id = projectObj.project.projectInfo.ID;
  800. params.rpt_ids = refRptTplIds;
  801. params.rptName = orgRptName;
  802. params.pageSize = me.getCurrentPageSize();
  803. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  804. params.custCfg = zTreeOprObj.reportPageCfg;
  805. params.option = "normal";
  806. $.bootstrapLoading.start();
  807. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  808. if (result) {
  809. $.bootstrapLoading.end();
  810. let uuIdUrls = [];
  811. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  812. uuIdUrls.push(uuIdUrl);
  813. downloadReport(uuIdUrls);
  814. } else {
  815. $.bootstrapLoading.end();
  816. }
  817. },
  818. function(failRst){
  819. $.bootstrapLoading.end();
  820. console.log(failRst);
  821. },
  822. function(exceptionRst){
  823. $.bootstrapLoading.end();
  824. console.log(exceptionRst);
  825. }
  826. );
  827. }
  828. }
  829. }
  830. },
  831. getAllIndividualExcelBook: function () {
  832. let me = rptControlObj;
  833. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  834. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  835. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  836. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  837. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  838. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  839. params.prj_id = projectObj.project.projectInfo.ID;
  840. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  841. params.rpt_names = rpt_names;
  842. params.isOneSheet = true;
  843. params.rptName = projectObj.project.projectInfo.name;
  844. $.bootstrapLoading.start();
  845. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  846. if (result) {
  847. $.bootstrapLoading.end();
  848. let uuIdUrls = [];
  849. for (let uuIdObj of result) {
  850. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  851. uuIdUrls.push(uuIdUrl);
  852. }
  853. downloadReport(uuIdUrls);
  854. } else {
  855. $.bootstrapLoading.end();
  856. }
  857. },
  858. function(failRst){
  859. $.bootstrapLoading.end();
  860. console.log(failRst);
  861. },
  862. function(exceptionRst){
  863. $.bootstrapLoading.end();
  864. console.log(exceptionRst);
  865. }
  866. );
  867. } else {
  868. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  869. $("#divReqBillSummary")[0].style.display = "none";
  870. $("#divReqGljSummary")[0].style.display = "none";
  871. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  872. $("#divReqCommonSummaryMultiExcel")[0].style.display = "";
  873. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  874. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  875. } else if (refRptTplIds.length > 0) {
  876. let params = {};
  877. params.prj_id = projectObj.project.projectInfo.ID;
  878. params.rpt_ids = refRptTplIds;
  879. params.rpt_names = rpt_names;
  880. params.pageSize = me.getCurrentPageSize();
  881. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  882. params.isOneSheet = true;
  883. params.custCfg = zTreeOprObj.reportPageCfg;
  884. params.option = "normal";
  885. $.bootstrapLoading.start();
  886. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  887. if (result) {
  888. $.bootstrapLoading.end();
  889. let uuIdUrls = [];
  890. for (let uuIdObj of result) {
  891. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  892. uuIdUrls.push(uuIdUrl);
  893. }
  894. downloadReport(uuIdUrls);
  895. } else {
  896. $.bootstrapLoading.end();
  897. }
  898. },
  899. function(failRst){
  900. $.bootstrapLoading.end();
  901. console.log(failRst);
  902. },
  903. function(exceptionRst){
  904. $.bootstrapLoading.end();
  905. console.log(exceptionRst);
  906. }
  907. );
  908. }
  909. }
  910. }
  911. },
  912. checkAndGetExcel: function () {
  913. if (zTreeOprObj.treeObj) {
  914. let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
  915. if (chkNodes.length > 0) {
  916. $("#show_excel_output_cfg").trigger("click");
  917. } else {
  918. rptControlObj.getAllIndividualExcelBook();
  919. }
  920. }
  921. },
  922. getExcel: function () {
  923. let me = rptControlObj;
  924. if ($("#excelExportType_AllInOneBook").get(0).checked) {
  925. me.getAllInOneBook();
  926. } else if ($("#excelExportType_IndividualBook").get(0).checked) {
  927. me.getAllIndividualExcelBook();
  928. }
  929. },
  930. getPDF: function () {
  931. let me = rptControlObj;
  932. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  933. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  934. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  935. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  936. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  937. let params = rptControlObj.creatCommonExportParam();
  938. params.prj_id = projectObj.project.projectInfo.ID;
  939. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  940. params.rpt_ids = refRptTplIds;
  941. params.rpt_bill_tpl_ids = refBillSumPrjsIds;
  942. params.rpt_glj_tpl_ids = refGljSumPrjsIds;
  943. params.rpt_names = rpt_names;
  944. params.isOneSheet = true;
  945. params.rptName = projectObj.project.projectInfo.name;
  946. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  947. if (result) {
  948. let uuIdUrls = [];
  949. for (let uuIdObj of result) {
  950. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  951. uuIdUrls.push(uuIdUrl);
  952. }
  953. downloadReport(uuIdUrls);
  954. } else {
  955. //
  956. }
  957. }, null, null
  958. );
  959. } else {
  960. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  961. $("#divReqBillSummary")[0].style.display = "none";
  962. $("#divReqGljSummary")[0].style.display = "none";
  963. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  964. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  965. $("#divReqCommonSummaryPDF")[0].style.display = "";
  966. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  967. } else if (refRptTplIds.length > 0) {
  968. let params = {};
  969. params.prj_id = projectObj.project.projectInfo.ID;
  970. params.rpt_ids = refRptTplIds;
  971. params.rpt_names = rpt_names;
  972. params.pageSize = me.getCurrentPageSize();
  973. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  974. params.custCfg = zTreeOprObj.reportPageCfg;
  975. params.option = "normal";
  976. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  977. if (result) {
  978. let uuIdUrls = [];
  979. for (let uuIdObj of result) {
  980. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  981. uuIdUrls.push(uuIdUrl);
  982. }
  983. downloadReport(uuIdUrls);
  984. } else {
  985. //
  986. }
  987. }, null, null
  988. );
  989. }
  990. }
  991. }
  992. },
  993. getPdfFontCallback: function(fontProperty) {
  994. let me = rptControlObj;
  995. rptTplObj.pdfFont['SmartSimsun'].push(fontProperty);
  996. if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
  997. me.getPDFEx();
  998. }
  999. },
  1000. getPDFPre: function () {
  1001. let me = rptControlObj;
  1002. $.bootstrapLoading.start();
  1003. if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
  1004. me.getPDFEx();
  1005. } else {
  1006. dynamicLoadJs('/lib/jspdf/SmartSimsun-normal.js',"normal", me.getPdfFontCallback);
  1007. dynamicLoadJs('/lib/jspdf/SmartSimsun-bold.js',"bold", me.getPdfFontCallback);
  1008. // dynamicLoadJs('http://d2.smartcost.com.cn/cach/SmartSimsun-normal.js', me.getPdfFontCallback('normal'));
  1009. // dynamicLoadJs('http://d2.smartcost.com.cn/cach/SmartSimsun-bold.js', me.getPdfFontCallback('bold'));
  1010. }
  1011. },
  1012. getPDFEx: function () {
  1013. let me = rptControlObj;
  1014. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  1015. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  1016. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  1017. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  1018. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  1019. let params = rptControlObj.creatCommonExportParam();
  1020. params.prj_id = projectObj.project.projectInfo.ID;
  1021. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  1022. params.rpt_ids = refRptTplIds;
  1023. params.rpt_bill_tpl_ids = refBillSumPrjsIds;
  1024. params.rpt_glj_tpl_ids = refGljSumPrjsIds;
  1025. params.rpt_names = rpt_names;
  1026. params.isOneSheet = true;
  1027. params.rptName = projectObj.project.projectInfo.name;
  1028. CommonAjax.postEx("report_api/getMultiReports", params, 30000, true,
  1029. function(result){
  1030. $.bootstrapLoading.end();
  1031. let pageSize = rptControlObj.getCurrentPageSize();
  1032. for (let idx = 0; idx < result.length; idx++) {
  1033. let pageData = result[idx];
  1034. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
  1035. }
  1036. },
  1037. function(failRst){
  1038. $.bootstrapLoading.end();
  1039. console.log(failRst);
  1040. },
  1041. function(exceptionRst){
  1042. $.bootstrapLoading.end();
  1043. console.log(exceptionRst);
  1044. }
  1045. );
  1046. } else {
  1047. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  1048. $("#divReqBillSummary")[0].style.display = "none";
  1049. $("#divReqGljSummary")[0].style.display = "none";
  1050. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  1051. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  1052. $("#divReqCommonSummaryPDF")[0].style.display = "";
  1053. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  1054. } else if (refRptTplIds.length > 0) {
  1055. if (refRptTplIds.length > 1) {
  1056. let params = {};
  1057. params.prj_id = projectObj.project.projectInfo.ID;
  1058. params.rpt_ids = refRptTplIds;
  1059. params.rpt_names = rpt_names;
  1060. params.pageSize = me.getCurrentPageSize();
  1061. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  1062. params.custCfg = zTreeOprObj.reportPageCfg;
  1063. params.option = "normal";
  1064. CommonAjax.postEx("report_api/getMultiReports", params, 30000, true,
  1065. function(result){
  1066. $.bootstrapLoading.end();
  1067. let pageSize = rptControlObj.getCurrentPageSize();
  1068. for (let idx = 0; idx < result.length; idx++) {
  1069. let pageData = result[idx];
  1070. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx]);
  1071. }
  1072. },
  1073. function(failRst){
  1074. $.bootstrapLoading.end();
  1075. console.log(failRst);
  1076. },
  1077. function(exceptionRst){
  1078. $.bootstrapLoading.end();
  1079. console.log(exceptionRst);
  1080. }
  1081. );
  1082. } else {
  1083. //这个分支是为了减少请求,用户已经点过的表,又没有勾选,那么就直接导出成PDF
  1084. let pageSize = rptControlObj.getCurrentPageSize();
  1085. let pageData = zTreeOprObj.currentRptPageRst;
  1086. $.bootstrapLoading.end();
  1087. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[0]);
  1088. }
  1089. }
  1090. }
  1091. }
  1092. },
  1093. firstPage: function(dom) {
  1094. let canvas = document.getElementById("rptCanvas");
  1095. zTreeOprObj.showPage(1, canvas);
  1096. },
  1097. prePage: function(dom) {
  1098. let canvas = document.getElementById("rptCanvas");
  1099. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  1100. },
  1101. nextPage: function(dom) {
  1102. let canvas = document.getElementById("rptCanvas");
  1103. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  1104. },
  1105. lastPage: function(dom) {
  1106. let me = zTreeOprObj;
  1107. let canvas = document.getElementById("rptCanvas");
  1108. zTreeOprObj.showPage(me.maxPages, canvas);
  1109. },
  1110. onKeydown: function (event, dom) {
  1111. let me = zTreeOprObj, keyPressed = null;
  1112. if (window.event) {
  1113. keyPressed = window.event.keyCode; // IE/Chrome
  1114. } else {
  1115. keyPressed = event.which; // Firefox
  1116. }
  1117. if (keyPressed === 13) {
  1118. let pageNum = 1;
  1119. try {
  1120. pageNum = parseInt(dom.value);
  1121. } catch (e) {
  1122. pageNum = 1;
  1123. }
  1124. let canvas = document.getElementById("rptCanvas");
  1125. if (pageNum < 1) {
  1126. pageNum = 1;
  1127. } else if (pageNum > me.maxPages) {
  1128. pageNum = me.maxPages;
  1129. }
  1130. zTreeOprObj.showPage(pageNum, canvas);
  1131. return false;
  1132. }
  1133. },
  1134. changeMargin: function(marginPropStr, marginDom) {
  1135. zTreeOprObj.reportPageCfg.margins[marginPropStr] = marginDom.value;
  1136. },
  1137. changeFontMain: function(CfgDispName, fontProperty, fontDom) {
  1138. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  1139. if (font["CfgDispName"] === CfgDispName) {
  1140. font[fontProperty] = fontDom.value;
  1141. break;
  1142. }
  1143. }
  1144. },
  1145. changeCfgOption: function (optStr, dom) {
  1146. zTreeOprObj.reportPageCfg[optStr] = dom.checked;
  1147. },
  1148. changeFontAdhoc: function(CfgDispName, fontProperty, fontDom) {
  1149. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  1150. if (font["CfgDispName"] === CfgDispName) {
  1151. if (font[fontProperty] === 'T') {
  1152. font[fontProperty] = 'F';
  1153. fontDom.className = "btn btn-sm btn-outline-secondary";
  1154. } else {
  1155. font[fontProperty] = 'T';
  1156. fontDom.className = "btn btn-sm btn-outline-secondary active";
  1157. }
  1158. break;
  1159. }
  1160. }
  1161. },
  1162. restoreCustCFG: function () {
  1163. let me = this;
  1164. zTreeOprObj.renderRptCfg(zTreeOprObj.defReportPageCfg);
  1165. zTreeOprObj.extractRptCfg(zTreeOprObj.reportPageCfg);
  1166. me.saveCustCfg();
  1167. },
  1168. saveCustCfg: function() {
  1169. let params = {};
  1170. params.custCfg = zTreeOprObj.reportPageCfg;
  1171. CommonAjax.postEx("report_tpl_api/saveCustomerCfg", params, 20000, true, function(result){
  1172. // alert("Save successfully!");
  1173. $("#update_msg_response")[0].style.color = "green";
  1174. $("#update_msg_response")[0].innerHTML = " (保存成功!)";
  1175. setTimeout(function(){
  1176. $("#update_msg_response")[0].innerHTML = "";
  1177. }, 1000);
  1178. }, function (failRst) {
  1179. $("#update_msg_response")[0].style.color = "red";
  1180. $("#update_msg_response")[0].innerHTML = " (保存失败!)";
  1181. setTimeout(function(){
  1182. $("#update_msg_response")[0].innerHTML = "";
  1183. }, 1000);
  1184. }, null
  1185. );
  1186. },
  1187. confirmCfgChange: function() {
  1188. zTreeOprObj.changeCfg();
  1189. }
  1190. };
  1191. function downloadReport(urls) {
  1192. //考虑到多个报表下载,一些浏览器(如chrome)不允许一下子下载多个文件,得缓缓处理,统一在这处理
  1193. rptControlObj.currentDownloadUrl = null;
  1194. rptControlObj.currentDownloadIdx = 0;
  1195. let private_download = function() {
  1196. if (rptControlObj.currentDownloadIdx >= 0 && rptControlObj.currentDownloadIdx < urls.length) {
  1197. rptControlObj.currentDownloadUrl = urls[rptControlObj.currentDownloadIdx];
  1198. rptControlObj.currentDownloadIdx++;
  1199. window.location = rptControlObj.currentDownloadUrl;
  1200. setTimeout(private_download, 2000);
  1201. }
  1202. }
  1203. private_download();
  1204. }
  1205. function dynamicLoadJs(url, type, callback) {
  1206. let head = document.getElementsByTagName('head')[0];
  1207. let script = document.createElement('script');
  1208. script.type = 'text/javascript';
  1209. script.src = url;
  1210. if(callback) {
  1211. script.onload = script.onreadystatechange = function (event) {
  1212. // console.log('this.readyState: ' + this.readyState);
  1213. callback(type);
  1214. script.onload = script.onreadystatechange = null;
  1215. // if (this.readyState === "loaded" || this.readyState === "complete"){
  1216. // }
  1217. };
  1218. }
  1219. head.appendChild(script);
  1220. }
  1221. function dynamicLoadCss(url) {
  1222. let head = document.getElementsByTagName('head')[0];
  1223. let link = document.createElement('link');
  1224. link.type='text/css';
  1225. link.rel = 'stylesheet';
  1226. link.href = url;
  1227. head.appendChild(link);
  1228. }