rpt_main.js 62 KB

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