rpt_main.js 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175
  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. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  581. if (result) {
  582. let uuIdUrls = [];
  583. for (let uuIdObj of result) {
  584. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  585. uuIdUrls.push(uuIdUrl);
  586. }
  587. downloadReport(uuIdUrls);
  588. } else {
  589. //
  590. }
  591. }, null, null
  592. );
  593. },
  594. requestSumAndNormalRptForAllInOneExcel: function () {
  595. let orgRptName = projectObj.project.projectInfo.name;
  596. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  597. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, null, null, null);
  598. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  599. params.rptName = orgRptName;
  600. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  601. if (result) {
  602. let uuIdUrls = [];
  603. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  604. uuIdUrls.push(uuIdUrl);
  605. downloadReport(uuIdUrls);
  606. } else {
  607. //
  608. }
  609. }, null, null
  610. );
  611. },
  612. showPage: function (pageNum, canvas) {
  613. let me = zTreeOprObj;
  614. if (pageNum >= 1 && pageNum <= me.maxPages) {
  615. me.currentPage = pageNum;
  616. JpcCanvasOutput.cleanCanvas(canvas);
  617. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  618. JpcCanvasOutput.drawToCanvas(me.currentRptPageRst, canvas, me.currentPage);
  619. }
  620. me.displayPageValue();
  621. },
  622. displayPageValue: function() {
  623. let me = zTreeOprObj;
  624. $("#rpt_page_num").get(0).value = me.currentPage + "/" + me.maxPages;
  625. }
  626. };
  627. let canvasOprObj = {
  628. canvasOnMouseMove: function (event) {
  629. if (zTreeOprObj.currentNode) {
  630. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  631. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  632. if (x < PRE_PAGE_OFFSET) {
  633. canvas.style.cursor = "url(/web/building_saas/img/PreviousPage.cur), auto";
  634. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  635. canvas.style.cursor = "url(/web/building_saas/img/NextPage.cur), auto";
  636. } else {
  637. canvas.style.cursor = "";
  638. }
  639. }
  640. },
  641. canvasOnClick: function(event){
  642. if (zTreeOprObj.currentNode) {
  643. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  644. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  645. if (x < FIRST_PAGE_OFFSET) {
  646. zTreeOprObj.showPage(1, canvas);
  647. } else if (x < PRE_PAGE_OFFSET) {
  648. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  649. } else if ((canvas.width - x) < LAST_PAGE_OFFSET) {
  650. zTreeOprObj.showPage(zTreeOprObj.maxPages, canvas);
  651. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  652. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  653. }
  654. }
  655. }
  656. };
  657. let rptControlObj = {
  658. currentOutputType: "Excel",
  659. currentDownloadUrl: null,
  660. currentDownloadIdx: 0,
  661. getCurrentPageSize: function() {
  662. // let rst = "A4";
  663. let rst = document.getElementById("btnRptPageSize").innerHTML.trim();
  664. //btnRptPageSize
  665. return rst;
  666. },
  667. getCurrentOrientation: function() {
  668. // let rst = "横向";
  669. let rst = document.getElementById("btnRptOrientation").innerHTML.trim();
  670. return rst;
  671. },
  672. getCurrentReportOption: function() {
  673. //
  674. },
  675. changeType: function(newType) {
  676. let me = rptControlObj;
  677. let excelDom = document.getElementById("EXCEL_TYPE");
  678. let pdfDom = document.getElementById("PDF_TYPE");
  679. if (newType === "Excel") {
  680. excelDom.className = "btn btn-block btn-primary";
  681. pdfDom.className = "btn btn-block btn-outline-secondary";
  682. me.currentOutputType = newType;
  683. } else if (newType === "PDF") {
  684. excelDom.className = "btn btn-block btn-outline-secondary";
  685. pdfDom.className = "btn btn-block btn-primary";
  686. me.currentOutputType = newType;
  687. } else {
  688. //me.currentOutputType = newType;
  689. }
  690. },
  691. outputRpt: function() {
  692. let me = rptControlObj;
  693. if (me.currentOutputType === "Excel") {
  694. me.getExcel();
  695. } else if (me.currentOutputType === "PDF") {
  696. me.getPDF();
  697. } else {
  698. //other types if needed.
  699. }
  700. },
  701. getTplIdsCommon: function (refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names) {
  702. for (let node of zTreeOprObj.checkedRptTplNodes) {
  703. if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
  704. if (node['flags']['reportType'] === 'billSummary') {
  705. refBillSumPrjsIds.push(node.refId);
  706. if (bill_rpt_names) bill_rpt_names.push(node.name);
  707. } else if (node['flags']['reportType'] === 'gljSummary') {
  708. refGljSumPrjsIds.push(node.refId);
  709. if (glj_rpt_names) glj_rpt_names.push(node.name);
  710. }
  711. } else {
  712. refRptTplIds.push(node.refId);
  713. if (rpt_names) rpt_names.push(node.name);
  714. }
  715. }
  716. },
  717. creatCommonExportParam: function (refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds) {
  718. let nodes = (zTreeOprObj.prjFolderTreeObj === null)?[]:zTreeOprObj.prjFolderTreeObj.getCheckedNodes(true);
  719. let rst = {};
  720. rst.prj_id = projectObj.project.projectInfo.ID;
  721. rst.rpt_ids = refRptTplIds;
  722. rst.rpt_bill_tpl_ids = refBillSumPrjsIds;
  723. rst.rpt_glj_tpl_ids = refGljSumPrjsIds;
  724. rst.prjIds = [];
  725. zTreeOprObj.selectedPrjIDs = [];
  726. for (let node of nodes) {
  727. rst.prjIds.push(node.ID);
  728. zTreeOprObj.selectedPrjIDs.push(node.ID);
  729. }
  730. // rst.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  731. // rst.rpt_names = rpt_names;
  732. // rst.isOneSheet = true;
  733. rst.pageSize = rptControlObj.getCurrentPageSize();
  734. rst.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:rptControlObj.getCurrentOrientation());
  735. rst.custCfg = zTreeOprObj.reportPageCfg;
  736. rst.option = "normal";
  737. return rst;
  738. },
  739. getAllInOneBook: function () {
  740. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  741. let me = rptControlObj;
  742. let orgRptName = projectObj.project.projectInfo.name;
  743. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  744. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  745. if (zTreeOprObj.selectedPrjIDs.length > 0 && (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0)) {
  746. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  747. params.rptName = orgRptName;
  748. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  749. if (result) {
  750. let uuIdUrls = [];
  751. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  752. uuIdUrls.push(uuIdUrl);
  753. downloadReport(uuIdUrls);
  754. } else {
  755. //
  756. }
  757. }, null, null
  758. );
  759. } else {
  760. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  761. $("#divReqBillSummary")[0].style.display = "none";
  762. $("#divReqGljSummary")[0].style.display = "none";
  763. $("#divReqCommonSummaryExcel")[0].style.display = "";
  764. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  765. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  766. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  767. } else if (refRptTplIds.length > 0) {
  768. let params = {};
  769. params.prj_id = projectObj.project.projectInfo.ID;
  770. params.rpt_ids = refRptTplIds;
  771. params.rptName = orgRptName;
  772. params.pageSize = me.getCurrentPageSize();
  773. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  774. params.custCfg = zTreeOprObj.reportPageCfg;
  775. params.option = "normal";
  776. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  777. if (result) {
  778. let uuIdUrls = [];
  779. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  780. uuIdUrls.push(uuIdUrl);
  781. downloadReport(uuIdUrls);
  782. } else {
  783. //
  784. }
  785. }, null, null
  786. );
  787. }
  788. }
  789. }
  790. },
  791. getAllIndividualExcelBook: function () {
  792. let me = rptControlObj;
  793. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  794. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  795. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  796. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  797. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  798. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  799. params.prj_id = projectObj.project.projectInfo.ID;
  800. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  801. params.rpt_names = rpt_names;
  802. params.isOneSheet = true;
  803. params.rptName = projectObj.project.projectInfo.name;
  804. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  805. if (result) {
  806. let uuIdUrls = [];
  807. for (let uuIdObj of result) {
  808. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  809. uuIdUrls.push(uuIdUrl);
  810. }
  811. downloadReport(uuIdUrls);
  812. } else {
  813. //
  814. }
  815. }, null, null
  816. );
  817. } else {
  818. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  819. $("#divReqBillSummary")[0].style.display = "none";
  820. $("#divReqGljSummary")[0].style.display = "none";
  821. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  822. $("#divReqCommonSummaryMultiExcel")[0].style.display = "";
  823. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  824. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  825. } else if (refRptTplIds.length > 0) {
  826. let params = {};
  827. params.prj_id = projectObj.project.projectInfo.ID;
  828. params.rpt_ids = refRptTplIds;
  829. params.rpt_names = rpt_names;
  830. params.pageSize = me.getCurrentPageSize();
  831. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  832. params.isOneSheet = true;
  833. params.custCfg = zTreeOprObj.reportPageCfg;
  834. params.option = "normal";
  835. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  836. if (result) {
  837. let uuIdUrls = [];
  838. for (let uuIdObj of result) {
  839. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  840. uuIdUrls.push(uuIdUrl);
  841. }
  842. downloadReport(uuIdUrls);
  843. } else {
  844. //
  845. }
  846. }, null, null
  847. );
  848. }
  849. }
  850. }
  851. },
  852. checkAndGetExcel: function () {
  853. if (zTreeOprObj.treeObj) {
  854. let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
  855. if (chkNodes.length > 0) {
  856. $("#show_excel_output_cfg").trigger("click");
  857. } else {
  858. rptControlObj.getAllIndividualExcelBook();
  859. }
  860. }
  861. },
  862. getExcel: function () {
  863. let me = rptControlObj;
  864. if ($("#excelExportType_AllInOneBook").get(0).checked) {
  865. me.getAllInOneBook();
  866. } else if ($("#excelExportType_IndividualBook").get(0).checked) {
  867. me.getAllIndividualExcelBook();
  868. }
  869. },
  870. getPDF: function () {
  871. let me = rptControlObj;
  872. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  873. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  874. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  875. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  876. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  877. let params = rptControlObj.creatCommonExportParam();
  878. params.prj_id = projectObj.project.projectInfo.ID;
  879. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  880. params.rpt_ids = refRptTplIds;
  881. params.rpt_bill_tpl_ids = refBillSumPrjsIds;
  882. params.rpt_glj_tpl_ids = refGljSumPrjsIds;
  883. params.rpt_names = rpt_names;
  884. params.isOneSheet = true;
  885. params.rptName = projectObj.project.projectInfo.name;
  886. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  887. if (result) {
  888. let uuIdUrls = [];
  889. for (let uuIdObj of result) {
  890. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  891. uuIdUrls.push(uuIdUrl);
  892. }
  893. downloadReport(uuIdUrls);
  894. } else {
  895. //
  896. }
  897. }, null, null
  898. );
  899. } else {
  900. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  901. $("#divReqBillSummary")[0].style.display = "none";
  902. $("#divReqGljSummary")[0].style.display = "none";
  903. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  904. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  905. $("#divReqCommonSummaryPDF")[0].style.display = "";
  906. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  907. } else if (refRptTplIds.length > 0) {
  908. let params = {};
  909. params.prj_id = projectObj.project.projectInfo.ID;
  910. params.rpt_ids = refRptTplIds;
  911. params.rpt_names = rpt_names;
  912. params.pageSize = me.getCurrentPageSize();
  913. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  914. params.custCfg = zTreeOprObj.reportPageCfg;
  915. params.option = "normal";
  916. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  917. if (result) {
  918. let uuIdUrls = [];
  919. for (let uuIdObj of result) {
  920. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  921. uuIdUrls.push(uuIdUrl);
  922. }
  923. downloadReport(uuIdUrls);
  924. } else {
  925. //
  926. }
  927. }, null, null
  928. );
  929. }
  930. }
  931. }
  932. },
  933. getPdfFontCallback: function(fontProperty) {
  934. let me = rptControlObj;
  935. rptTplObj.pdfFont['SmartSimsun'].push(fontProperty);
  936. if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
  937. me.getPDFEx();
  938. }
  939. },
  940. getPDFPre: function () {
  941. let me = rptControlObj;
  942. if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
  943. me.getPDFEx();
  944. } else {
  945. dynamicLoadJs('http://d2.smartcost.com.cn/cach/SmartSimsun-normal.js', me.getPdfFontCallback('normal'));
  946. dynamicLoadJs('http://d2.smartcost.com.cn/cach/SmartSimsun-bold.js', me.getPdfFontCallback('bold'));
  947. }
  948. },
  949. getPDFEx: function () {
  950. let me = rptControlObj;
  951. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  952. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  953. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  954. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  955. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  956. let params = rptControlObj.creatCommonExportParam();
  957. params.prj_id = projectObj.project.projectInfo.ID;
  958. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  959. params.rpt_ids = refRptTplIds;
  960. params.rpt_bill_tpl_ids = refBillSumPrjsIds;
  961. params.rpt_glj_tpl_ids = refGljSumPrjsIds;
  962. params.rpt_names = rpt_names;
  963. params.isOneSheet = true;
  964. params.rptName = projectObj.project.projectInfo.name;
  965. CommonAjax.postEx("report_api/getMultiReports", params, 30000, true,
  966. function(result){
  967. let pageSize = rptControlObj.getCurrentPageSize();
  968. for (let idx = 0; idx < result.length; idx++) {
  969. let pageData = result[idx];
  970. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
  971. }
  972. },
  973. function(failRst){
  974. console.log(failRst);
  975. },
  976. function(exceptionRst){
  977. console.log(exceptionRst);
  978. }
  979. );
  980. } else {
  981. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  982. $("#divReqBillSummary")[0].style.display = "none";
  983. $("#divReqGljSummary")[0].style.display = "none";
  984. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  985. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  986. $("#divReqCommonSummaryPDF")[0].style.display = "";
  987. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  988. } else if (refRptTplIds.length > 0) {
  989. if (refRptTplIds.length > 1) {
  990. let params = {};
  991. params.prj_id = projectObj.project.projectInfo.ID;
  992. params.rpt_ids = refRptTplIds;
  993. params.rpt_names = rpt_names;
  994. params.pageSize = me.getCurrentPageSize();
  995. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  996. params.custCfg = zTreeOprObj.reportPageCfg;
  997. params.option = "normal";
  998. CommonAjax.postEx("report_api/getMultiReports", params, 30000, true,
  999. function(result){
  1000. let pageSize = rptControlObj.getCurrentPageSize();
  1001. for (let idx = 0; idx < result.length; idx++) {
  1002. let pageData = result[idx];
  1003. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx]);
  1004. }
  1005. },
  1006. function(failRst){
  1007. console.log(failRst);
  1008. },
  1009. function(exceptionRst){
  1010. console.log(exceptionRst);
  1011. }
  1012. );
  1013. } else {
  1014. //这个分支是为了减少请求,用户已经点过的表,又没有勾选,那么就直接导出成PDF
  1015. let pageSize = rptControlObj.getCurrentPageSize();
  1016. let pageData = zTreeOprObj.currentRptPageRst;
  1017. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[0]);
  1018. }
  1019. }
  1020. }
  1021. }
  1022. },
  1023. firstPage: function(dom) {
  1024. let canvas = document.getElementById("rptCanvas");
  1025. zTreeOprObj.showPage(1, canvas);
  1026. },
  1027. prePage: function(dom) {
  1028. let canvas = document.getElementById("rptCanvas");
  1029. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  1030. },
  1031. nextPage: function(dom) {
  1032. let canvas = document.getElementById("rptCanvas");
  1033. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  1034. },
  1035. lastPage: function(dom) {
  1036. let me = zTreeOprObj;
  1037. let canvas = document.getElementById("rptCanvas");
  1038. zTreeOprObj.showPage(me.maxPages, canvas);
  1039. },
  1040. onKeydown: function (event, dom) {
  1041. let me = zTreeOprObj, keyPressed = null;
  1042. if (window.event) {
  1043. keyPressed = window.event.keyCode; // IE/Chrome
  1044. } else {
  1045. keyPressed = event.which; // Firefox
  1046. }
  1047. if (keyPressed === 13) {
  1048. let pageNum = 1;
  1049. try {
  1050. pageNum = parseInt(dom.value);
  1051. } catch (e) {
  1052. pageNum = 1;
  1053. }
  1054. let canvas = document.getElementById("rptCanvas");
  1055. if (pageNum < 1) {
  1056. pageNum = 1;
  1057. } else if (pageNum > me.maxPages) {
  1058. pageNum = me.maxPages;
  1059. }
  1060. zTreeOprObj.showPage(pageNum, canvas);
  1061. return false;
  1062. }
  1063. },
  1064. changeMargin: function(marginPropStr, marginDom) {
  1065. zTreeOprObj.reportPageCfg.margins[marginPropStr] = marginDom.value;
  1066. },
  1067. changeFontMain: function(CfgDispName, fontProperty, fontDom) {
  1068. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  1069. if (font["CfgDispName"] === CfgDispName) {
  1070. font[fontProperty] = fontDom.value;
  1071. break;
  1072. }
  1073. }
  1074. },
  1075. changeCfgOption: function (optStr, dom) {
  1076. zTreeOprObj.reportPageCfg[optStr] = dom.checked;
  1077. },
  1078. changeFontAdhoc: function(CfgDispName, fontProperty, fontDom) {
  1079. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  1080. if (font["CfgDispName"] === CfgDispName) {
  1081. if (font[fontProperty] === 'T') {
  1082. font[fontProperty] = 'F';
  1083. fontDom.className = "btn btn-sm btn-outline-secondary";
  1084. } else {
  1085. font[fontProperty] = 'T';
  1086. fontDom.className = "btn btn-sm btn-outline-secondary active";
  1087. }
  1088. break;
  1089. }
  1090. }
  1091. },
  1092. restoreCustCFG: function () {
  1093. let me = this;
  1094. zTreeOprObj.renderRptCfg(zTreeOprObj.defReportPageCfg);
  1095. zTreeOprObj.extractRptCfg(zTreeOprObj.reportPageCfg);
  1096. me.saveCustCfg();
  1097. },
  1098. saveCustCfg: function() {
  1099. let params = {};
  1100. params.custCfg = zTreeOprObj.reportPageCfg;
  1101. CommonAjax.postEx("report_tpl_api/saveCustomerCfg", params, 20000, true, function(result){
  1102. // alert("Save successfully!");
  1103. $("#update_msg_response")[0].style.color = "green";
  1104. $("#update_msg_response")[0].innerHTML = " (保存成功!)";
  1105. setTimeout(function(){
  1106. $("#update_msg_response")[0].innerHTML = "";
  1107. }, 1000);
  1108. }, function (failRst) {
  1109. $("#update_msg_response")[0].style.color = "red";
  1110. $("#update_msg_response")[0].innerHTML = " (保存失败!)";
  1111. setTimeout(function(){
  1112. $("#update_msg_response")[0].innerHTML = "";
  1113. }, 1000);
  1114. }, null
  1115. );
  1116. },
  1117. confirmCfgChange: function() {
  1118. zTreeOprObj.changeCfg();
  1119. }
  1120. };
  1121. function downloadReport(urls) {
  1122. //考虑到多个报表下载,一些浏览器(如chrome)不允许一下子下载多个文件,得缓缓处理,统一在这处理
  1123. rptControlObj.currentDownloadUrl = null;
  1124. rptControlObj.currentDownloadIdx = 0;
  1125. let private_download = function() {
  1126. if (rptControlObj.currentDownloadIdx >= 0 && rptControlObj.currentDownloadIdx < urls.length) {
  1127. rptControlObj.currentDownloadUrl = urls[rptControlObj.currentDownloadIdx];
  1128. rptControlObj.currentDownloadIdx++;
  1129. window.location = rptControlObj.currentDownloadUrl;
  1130. setTimeout(private_download, 2000);
  1131. }
  1132. }
  1133. private_download();
  1134. }
  1135. function dynamicLoadJs(url, callback) {
  1136. let head = document.getElementsByTagName('head')[0];
  1137. let script = document.createElement('script');
  1138. script.type = 'text/javascript';
  1139. script.src = url;
  1140. if(callback) {
  1141. script.onload = script.onreadystatechange = function () {
  1142. if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete"){
  1143. callback();
  1144. script.onload = script.onreadystatechange = null;
  1145. }
  1146. };
  1147. }
  1148. head.appendChild(script);
  1149. }
  1150. function dynamicLoadCss(url) {
  1151. let head = document.getElementsByTagName('head')[0];
  1152. let link = document.createElement('link');
  1153. link.type='text/css';
  1154. link.rel = 'stylesheet';
  1155. link.href = url;
  1156. head.appendChild(link);
  1157. }