rpt_main.js 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283
  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 = 300000;
  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, 300000, 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. let topItem = [{name: '所有相关项目', items: selectedProjects}];
  407. // me.prjFolderTreeObj = $.fn.zTree.init($("#prjFolderTree"), rpt_prj_folder_setting, selectedProjects);
  408. me.prjFolderTreeObj = $.fn.zTree.init($("#prjFolderTree"), rpt_prj_folder_setting, topItem);
  409. me.prjFolderTreeObj.expandAll(true);
  410. } else {
  411. alert('error: ' + result.message);
  412. }
  413. },
  414. error: function(jqXHR, textStatus, errorThrown){
  415. hintBox.unWaitBox();
  416. alert('error ' + textStatus + " " + errorThrown);
  417. }
  418. });
  419. },
  420. requestPrjFolderForBillsSummary: function () {
  421. let me = zTreeOprObj;
  422. $("#divReqBillSummary")[0].style.display = "";
  423. $("#divReqGljSummary")[0].style.display = "none";
  424. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  425. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  426. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  427. me.requestPrjFolderCommon();
  428. },
  429. requestPrjFolderForGljSummary: function () {
  430. let me = zTreeOprObj;
  431. $("#divReqBillSummary")[0].style.display = "none";
  432. $("#divReqGljSummary")[0].style.display = "";
  433. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  434. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  435. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  436. me.requestPrjFolderCommon();
  437. },
  438. requestBillsSummaryRpt: function () {
  439. let me = zTreeOprObj;
  440. let nodes = me.prjFolderTreeObj.getCheckedNodes(true);
  441. if (nodes.length > 0) {
  442. if (nodes[0].level === 0) {
  443. nodes.splice(0, 1);
  444. }
  445. hintBox.waitBox();
  446. let params = {};
  447. params.pageSize = rptControlObj.getCurrentPageSize();
  448. params.rpt_tpl_id = me.currentNode.refId;
  449. params.custCfg = me.reportPageCfg;
  450. params.prjIds = [];
  451. me.selectedPrjIDs = [];
  452. for (let node of nodes) {
  453. params.prjIds.push(node.ID);
  454. me.selectedPrjIDs.push(node.ID);
  455. }
  456. CommonAjax.postEx("report_api/getBillsSummaryReport", params, 60000, true,
  457. function(result){
  458. hintBox.unWaitBox();
  459. let pageRst = result;
  460. let canvas = document.getElementById("rptCanvas");
  461. if (pageRst && pageRst.items && pageRst.items.length > 0) {
  462. me.resetAfter(pageRst);
  463. me.currentRptPageRst = pageRst;
  464. me.maxPages = pageRst.items.length;
  465. me.currentPage = 1;
  466. me.displayPageValue();
  467. let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
  468. canvas.width = size[0] + 20;
  469. if (size[1] > size[0]) {
  470. canvas.height = size[1] + 100;
  471. } else {
  472. canvas.height = size[1] + 50;
  473. }
  474. me.showPage(1, canvas);
  475. } else {
  476. //返回了无数据表
  477. JpcCanvasOutput.cleanCanvas(canvas);
  478. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  479. }
  480. }, function(err){
  481. hintBox.unWaitBox();
  482. }, function(ex){
  483. hintBox.unWaitBox();
  484. }
  485. );
  486. }
  487. },
  488. requestGljSummaryRpt: function () {
  489. let me = zTreeOprObj;
  490. let nodes = me.prjFolderTreeObj.getCheckedNodes(true);
  491. if (nodes.length > 0) {
  492. if (nodes[0].level === 0) {
  493. nodes.splice(0, 1);
  494. }
  495. hintBox.waitBox();
  496. let params = {};
  497. params.pageSize = rptControlObj.getCurrentPageSize();
  498. params.rpt_tpl_id = me.currentNode.refId;
  499. params.custCfg = me.reportPageCfg;
  500. params.prjIds = [];
  501. zTreeOprObj.selectedPrjIDs = [];
  502. for (let node of nodes) {
  503. params.prjIds.push(node.ID);
  504. zTreeOprObj.selectedPrjIDs.push(node.ID);
  505. }
  506. CommonAjax.postEx("report_api/getGljSummaryReport", params, 60000, true,
  507. function(result){
  508. hintBox.unWaitBox();
  509. let pageRst = result;
  510. let canvas = document.getElementById("rptCanvas");
  511. if (pageRst && pageRst.items && pageRst.items.length > 0) {
  512. me.resetAfter(pageRst);
  513. me.currentRptPageRst = pageRst;
  514. me.maxPages = pageRst.items.length;
  515. me.currentPage = 1;
  516. me.displayPageValue();
  517. let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
  518. canvas.width = size[0] + 20;
  519. if (size[1] > size[0]) {
  520. canvas.height = size[1] + 100;
  521. } else {
  522. canvas.height = size[1] + 50;
  523. }
  524. me.showPage(1, canvas);
  525. } else {
  526. //返回了无数据表
  527. JpcCanvasOutput.cleanCanvas(canvas);
  528. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  529. }
  530. }, function(err){
  531. hintBox.unWaitBox();
  532. }, function(ex){
  533. hintBox.unWaitBox();
  534. }
  535. );
  536. }
  537. },
  538. requestSumAndNormalRptForPDF: function () {
  539. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  540. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  541. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  542. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  543. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  544. params.rpt_names = rpt_names;
  545. params.isOneSheet = true;
  546. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  547. if (result) {
  548. let uuIdUrls = [];
  549. for (let uuIdObj of result) {
  550. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  551. uuIdUrls.push(uuIdUrl);
  552. }
  553. downloadReport(uuIdUrls);
  554. } else {
  555. //
  556. }
  557. }, null, null
  558. );
  559. },
  560. requestSumAndNormalRptForPDF_Ex: function () {
  561. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  562. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  563. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  564. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  565. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  566. params.rpt_names = rpt_names;
  567. params.isOneSheet = true;
  568. CommonAjax.postEx("report_api/getMultiReports", params, WAIT_TIME_EXPORT, true,
  569. function(result){
  570. let pageSize = rptControlObj.getCurrentPageSize();
  571. for (let idx = 0; idx < result.length; idx++) {
  572. let pageData = result[idx];
  573. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
  574. }
  575. },
  576. function(failRst){
  577. console.log(failRst);
  578. },
  579. function(exceptionRst){
  580. console.log(exceptionRst);
  581. }
  582. );
  583. },
  584. requestSumAndNormalRptForMultiExcel: function () {
  585. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  586. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  587. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  588. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  589. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  590. params.rpt_names = rpt_names;
  591. params.isOneSheet = true;
  592. $.bootstrapLoading.start();
  593. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  594. if (result) {
  595. $.bootstrapLoading.end();
  596. let uuIdUrls = [];
  597. for (let uuIdObj of result) {
  598. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  599. uuIdUrls.push(uuIdUrl);
  600. }
  601. downloadReport(uuIdUrls);
  602. } else {
  603. $.bootstrapLoading.end();
  604. }
  605. },
  606. function(failRst){
  607. $.bootstrapLoading.end();
  608. console.log(failRst);
  609. },
  610. function(exceptionRst){
  611. $.bootstrapLoading.end();
  612. console.log(exceptionRst);
  613. }
  614. );
  615. },
  616. requestSumAndNormalRptForAllInOneExcel: function () {
  617. let orgRptName = projectObj.project.projectInfo.name;
  618. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  619. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, null, null, null);
  620. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  621. params.rptName = orgRptName;
  622. $.bootstrapLoading.start();
  623. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  624. if (result) {
  625. $.bootstrapLoading.end();
  626. let uuIdUrls = [];
  627. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  628. uuIdUrls.push(uuIdUrl);
  629. downloadReport(uuIdUrls);
  630. } else {
  631. $.bootstrapLoading.end();
  632. }
  633. },
  634. function(failRst){
  635. $.bootstrapLoading.end();
  636. console.log(failRst);
  637. },
  638. function(exceptionRst){
  639. $.bootstrapLoading.end();
  640. console.log(exceptionRst);
  641. }
  642. );
  643. },
  644. showPage: function (pageNum, canvas) {
  645. let me = zTreeOprObj;
  646. if (pageNum >= 1 && pageNum <= me.maxPages) {
  647. me.currentPage = pageNum;
  648. JpcCanvasOutput.cleanCanvas(canvas);
  649. JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
  650. // JpcCanvasOutput.drawWaterMarks(canvas, zTreeOprObj.waterMarks);
  651. JpcCanvasOutput.drawToCanvas(me.currentRptPageRst, canvas, me.currentPage);
  652. }
  653. me.displayPageValue();
  654. },
  655. displayPageValue: function() {
  656. let me = zTreeOprObj;
  657. $("#rpt_page_num").get(0).value = me.currentPage + "/" + me.maxPages;
  658. }
  659. };
  660. let canvasOprObj = {
  661. canvasOnMouseMove: function (event) {
  662. if (zTreeOprObj.currentNode) {
  663. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  664. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  665. if (x < PRE_PAGE_OFFSET) {
  666. canvas.style.cursor = "url(/web/building_saas/img/PreviousPage.cur), auto";
  667. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  668. canvas.style.cursor = "url(/web/building_saas/img/NextPage.cur), auto";
  669. } else {
  670. canvas.style.cursor = "";
  671. }
  672. }
  673. },
  674. canvasOnClick: function(event){
  675. if (zTreeOprObj.currentNode) {
  676. let x = event.offsetX - JpcCanvasOutput.offsetX, canvas = event.originalTarget;
  677. if (!(canvas)) canvas = event.target; //chrome浏览器不认event.originalTarget,只认event.target或event.currentTarget
  678. if (x < FIRST_PAGE_OFFSET) {
  679. zTreeOprObj.showPage(1, canvas);
  680. } else if (x < PRE_PAGE_OFFSET) {
  681. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  682. } else if ((canvas.width - x) < LAST_PAGE_OFFSET) {
  683. zTreeOprObj.showPage(zTreeOprObj.maxPages, canvas);
  684. } else if ((canvas.width - x) < NEXT_PAGE_OFFSET) {
  685. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  686. }
  687. }
  688. }
  689. };
  690. let rptControlObj = {
  691. currentOutputType: "Excel",
  692. currentDownloadUrl: null,
  693. currentDownloadIdx: 0,
  694. getCurrentPageSize: function() {
  695. // let rst = "A4";
  696. let rst = document.getElementById("btnRptPageSize").innerHTML.trim();
  697. //btnRptPageSize
  698. return rst;
  699. },
  700. getCurrentOrientation: function() {
  701. // let rst = "横向";
  702. let rst = document.getElementById("btnRptOrientation").innerHTML.trim();
  703. return rst;
  704. },
  705. getCurrentReportOption: function() {
  706. //
  707. },
  708. changeType: function(newType) {
  709. let me = rptControlObj;
  710. let excelDom = document.getElementById("EXCEL_TYPE");
  711. let pdfDom = document.getElementById("PDF_TYPE");
  712. if (newType === "Excel") {
  713. excelDom.className = "btn btn-block btn-primary";
  714. pdfDom.className = "btn btn-block btn-outline-secondary";
  715. me.currentOutputType = newType;
  716. } else if (newType === "PDF") {
  717. excelDom.className = "btn btn-block btn-outline-secondary";
  718. pdfDom.className = "btn btn-block btn-primary";
  719. me.currentOutputType = newType;
  720. } else {
  721. //me.currentOutputType = newType;
  722. }
  723. },
  724. outputRpt: function() {
  725. let me = rptControlObj;
  726. if (me.currentOutputType === "Excel") {
  727. me.getExcel();
  728. } else if (me.currentOutputType === "PDF") {
  729. me.getPDF();
  730. } else {
  731. //other types if needed.
  732. }
  733. },
  734. getTplIdsCommon: function (refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names) {
  735. for (let node of zTreeOprObj.checkedRptTplNodes) {
  736. if (node.hasOwnProperty('flags') && node.flags.hasOwnProperty('reportType') && node['flags']['reportType'] !== 'NA') {
  737. if (node['flags']['reportType'] === 'billSummary') {
  738. refBillSumPrjsIds.push(node.refId);
  739. if (bill_rpt_names) bill_rpt_names.push(node.name);
  740. } else if (node['flags']['reportType'] === 'gljSummary') {
  741. refGljSumPrjsIds.push(node.refId);
  742. if (glj_rpt_names) glj_rpt_names.push(node.name);
  743. }
  744. } else {
  745. refRptTplIds.push(node.refId);
  746. if (rpt_names) rpt_names.push(node.name);
  747. }
  748. }
  749. },
  750. creatCommonExportParam: function (refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds) {
  751. let nodes = (zTreeOprObj.prjFolderTreeObj === null)?[]:zTreeOprObj.prjFolderTreeObj.getCheckedNodes(true);
  752. let rst = {};
  753. rst.prj_id = projectObj.project.projectInfo.ID;
  754. rst.rpt_ids = refRptTplIds;
  755. rst.rpt_bill_tpl_ids = refBillSumPrjsIds;
  756. rst.rpt_glj_tpl_ids = refGljSumPrjsIds;
  757. rst.prjIds = [];
  758. zTreeOprObj.selectedPrjIDs = [];
  759. for (let node of nodes) {
  760. if (node.level > 0) {
  761. rst.prjIds.push(node.ID);
  762. zTreeOprObj.selectedPrjIDs.push(node.ID);
  763. }
  764. }
  765. // rst.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  766. // rst.rpt_names = rpt_names;
  767. // rst.isOneSheet = true;
  768. rst.pageSize = rptControlObj.getCurrentPageSize();
  769. rst.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:rptControlObj.getCurrentOrientation());
  770. rst.custCfg = zTreeOprObj.reportPageCfg;
  771. rst.option = "normal";
  772. return rst;
  773. },
  774. getAllInOneBook: function () {
  775. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  776. let me = rptControlObj;
  777. let orgRptName = projectObj.project.projectInfo.name;
  778. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  779. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  780. if (zTreeOprObj.selectedPrjIDs.length > 0 && (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0)) {
  781. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  782. params.rptName = orgRptName;
  783. $.bootstrapLoading.start();
  784. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  785. if (result) {
  786. $.bootstrapLoading.end();
  787. let uuIdUrls = [];
  788. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  789. uuIdUrls.push(uuIdUrl);
  790. downloadReport(uuIdUrls);
  791. } else {
  792. $.bootstrapLoading.end();
  793. }
  794. },
  795. function(failRst){
  796. $.bootstrapLoading.end();
  797. console.log(failRst);
  798. },
  799. function(exceptionRst){
  800. $.bootstrapLoading.end();
  801. console.log(exceptionRst);
  802. }
  803. );
  804. } else {
  805. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  806. $("#divReqBillSummary")[0].style.display = "none";
  807. $("#divReqGljSummary")[0].style.display = "none";
  808. $("#divReqCommonSummaryExcel")[0].style.display = "";
  809. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  810. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  811. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  812. } else if (refRptTplIds.length > 0) {
  813. let params = {};
  814. params.prj_id = projectObj.project.projectInfo.ID;
  815. params.rpt_ids = refRptTplIds;
  816. params.rptName = orgRptName;
  817. params.pageSize = me.getCurrentPageSize();
  818. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  819. params.custCfg = zTreeOprObj.reportPageCfg;
  820. params.option = "normal";
  821. $.bootstrapLoading.start();
  822. CommonAjax.postEx("report_api/createExcelFilesInOneBook", params, WAIT_TIME_EXPORT, true, function(result){
  823. if (result) {
  824. $.bootstrapLoading.end();
  825. let uuIdUrls = [];
  826. let uuIdUrl = "/report_api/getFileByUUID/" + result.uuid + "/" + stringUtil.replaceAll(result.reportName, "#", "_") + "/xlsx";
  827. uuIdUrls.push(uuIdUrl);
  828. downloadReport(uuIdUrls);
  829. } else {
  830. $.bootstrapLoading.end();
  831. }
  832. },
  833. function(failRst){
  834. $.bootstrapLoading.end();
  835. console.log(failRst);
  836. },
  837. function(exceptionRst){
  838. $.bootstrapLoading.end();
  839. console.log(exceptionRst);
  840. }
  841. );
  842. }
  843. }
  844. }
  845. },
  846. getAllIndividualExcelBook: function () {
  847. let me = rptControlObj;
  848. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  849. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  850. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  851. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  852. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  853. let params = rptControlObj.creatCommonExportParam(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds);
  854. params.prj_id = projectObj.project.projectInfo.ID;
  855. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  856. params.rpt_names = rpt_names;
  857. params.isOneSheet = true;
  858. params.rptName = projectObj.project.projectInfo.name;
  859. $.bootstrapLoading.start();
  860. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  861. if (result) {
  862. $.bootstrapLoading.end();
  863. let uuIdUrls = [];
  864. for (let uuIdObj of result) {
  865. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  866. uuIdUrls.push(uuIdUrl);
  867. }
  868. downloadReport(uuIdUrls);
  869. } else {
  870. $.bootstrapLoading.end();
  871. }
  872. },
  873. function(failRst){
  874. $.bootstrapLoading.end();
  875. console.log(failRst);
  876. },
  877. function(exceptionRst){
  878. $.bootstrapLoading.end();
  879. console.log(exceptionRst);
  880. }
  881. );
  882. } else {
  883. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  884. $("#divReqBillSummary")[0].style.display = "none";
  885. $("#divReqGljSummary")[0].style.display = "none";
  886. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  887. $("#divReqCommonSummaryMultiExcel")[0].style.display = "";
  888. $("#divReqCommonSummaryPDF")[0].style.display = "none";
  889. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  890. } else if (refRptTplIds.length > 0) {
  891. let params = {};
  892. params.prj_id = projectObj.project.projectInfo.ID;
  893. params.rpt_ids = refRptTplIds;
  894. params.rpt_names = rpt_names;
  895. params.pageSize = me.getCurrentPageSize();
  896. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  897. params.isOneSheet = true;
  898. params.custCfg = zTreeOprObj.reportPageCfg;
  899. params.option = "normal";
  900. $.bootstrapLoading.start();
  901. CommonAjax.postEx("report_api/createExcelFiles", params, WAIT_TIME_EXPORT, true, function(result){
  902. if (result) {
  903. $.bootstrapLoading.end();
  904. let uuIdUrls = [];
  905. for (let uuIdObj of result) {
  906. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/xlsx";
  907. uuIdUrls.push(uuIdUrl);
  908. }
  909. downloadReport(uuIdUrls);
  910. } else {
  911. $.bootstrapLoading.end();
  912. }
  913. },
  914. function(failRst){
  915. $.bootstrapLoading.end();
  916. console.log(failRst);
  917. },
  918. function(exceptionRst){
  919. $.bootstrapLoading.end();
  920. console.log(exceptionRst);
  921. }
  922. );
  923. }
  924. }
  925. }
  926. },
  927. checkAndGetExcel: function () {
  928. if (zTreeOprObj.isFreeUser) {
  929. hintBox.versionBox('对不起,您当前使用的是免费公用版,不提供导出、打印报表功能,请联系我们的客服人员。');
  930. return;
  931. }
  932. if (zTreeOprObj.treeObj) {
  933. let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
  934. if (chkNodes.length > 0) {
  935. $("#show_excel_output_cfg").trigger("click");
  936. } else {
  937. rptControlObj.getAllIndividualExcelBook();
  938. }
  939. }
  940. },
  941. getExcel: function () {
  942. let me = rptControlObj;
  943. if ($("#excelExportType_AllInOneBook").get(0).checked) {
  944. me.getAllInOneBook();
  945. } else if ($("#excelExportType_IndividualBook").get(0).checked) {
  946. me.getAllIndividualExcelBook();
  947. }
  948. },
  949. getPDF: 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/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  966. if (result) {
  967. let uuIdUrls = [];
  968. for (let uuIdObj of result) {
  969. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  970. uuIdUrls.push(uuIdUrl);
  971. }
  972. downloadReport(uuIdUrls);
  973. } else {
  974. //
  975. }
  976. }, null, null
  977. );
  978. } else {
  979. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  980. $("#divReqBillSummary")[0].style.display = "none";
  981. $("#divReqGljSummary")[0].style.display = "none";
  982. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  983. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  984. $("#divReqCommonSummaryPDF")[0].style.display = "";
  985. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  986. } else if (refRptTplIds.length > 0) {
  987. let params = {};
  988. params.prj_id = projectObj.project.projectInfo.ID;
  989. params.rpt_ids = refRptTplIds;
  990. params.rpt_names = rpt_names;
  991. params.pageSize = me.getCurrentPageSize();
  992. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  993. params.custCfg = zTreeOprObj.reportPageCfg;
  994. params.option = "normal";
  995. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  996. if (result) {
  997. let uuIdUrls = [];
  998. for (let uuIdObj of result) {
  999. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  1000. uuIdUrls.push(uuIdUrl);
  1001. }
  1002. downloadReport(uuIdUrls);
  1003. } else {
  1004. //
  1005. }
  1006. }, null, null
  1007. );
  1008. }
  1009. }
  1010. }
  1011. },
  1012. _hidePdfIniPage: function () {
  1013. if ($('#ini_PDF_cover').is(':visible')) {
  1014. $("#ini_PDF_Btn_Cancel").trigger("click");
  1015. }
  1016. },
  1017. getPdfFontCallback: function(fontProperty) {
  1018. let me = rptControlObj;
  1019. rptTplObj.pdfFont['SmartSimsun'].push(fontProperty);
  1020. if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
  1021. me._hidePdfIniPage();
  1022. setTimeout(function(){
  1023. me.getPDFEx();
  1024. }, 20);
  1025. // me.getPDFEx();
  1026. }
  1027. },
  1028. getPDFPre: function () {
  1029. let me = rptControlObj;
  1030. if (zTreeOprObj.isFreeUser) {
  1031. hintBox.versionBox('对不起,您当前使用的是免费公用版,不提供导出、打印报表功能,请联系我们的客服人员。');
  1032. return;
  1033. }
  1034. if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
  1035. $.bootstrapLoading.start();
  1036. me.getPDFEx();
  1037. } else {
  1038. // dynamicLoadJs('/lib/jspdf/SmartSimsun-normal.js', 'normal', me.getPdfFontCallback);
  1039. // dynamicLoadJs('/lib/jspdf/SmartSimsun-bold.js', 'bold', me.getPdfFontCallback);
  1040. $("#ini_PDF_Btn").trigger("click");
  1041. dynamicLoadJs('https://d2.smartcost.com.cn/cach/SmartSimsun-normal.js', 'normal', me.getPdfFontCallback);
  1042. dynamicLoadJs('https://d2.smartcost.com.cn/cach/SmartSimsun-bold.js', 'bold', me.getPdfFontCallback);
  1043. }
  1044. },
  1045. getPDFEx: function () {
  1046. let me = rptControlObj;
  1047. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  1048. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  1049. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  1050. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  1051. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  1052. let params = rptControlObj.creatCommonExportParam();
  1053. params.prj_id = projectObj.project.projectInfo.ID;
  1054. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  1055. params.rpt_ids = refRptTplIds;
  1056. params.rpt_bill_tpl_ids = refBillSumPrjsIds;
  1057. params.rpt_glj_tpl_ids = refGljSumPrjsIds;
  1058. params.rpt_names = rpt_names;
  1059. params.isOneSheet = true;
  1060. params.rptName = projectObj.project.projectInfo.name;
  1061. CommonAjax.postEx("report_api/getMultiReports", params, WAIT_TIME_EXPORT, true,
  1062. function(result){
  1063. $.bootstrapLoading.end();
  1064. me._hidePdfIniPage();
  1065. let pageSize = rptControlObj.getCurrentPageSize();
  1066. for (let idx = 0; idx < result.length; idx++) {
  1067. let pageData = result[idx];
  1068. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
  1069. }
  1070. },
  1071. function(failRst){
  1072. $.bootstrapLoading.end();
  1073. me._hidePdfIniPage();
  1074. console.log(failRst);
  1075. },
  1076. function(exceptionRst){
  1077. $.bootstrapLoading.end();
  1078. me._hidePdfIniPage();
  1079. console.log(exceptionRst);
  1080. }
  1081. );
  1082. } else {
  1083. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  1084. $("#divReqBillSummary")[0].style.display = "none";
  1085. $("#divReqGljSummary")[0].style.display = "none";
  1086. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  1087. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  1088. $("#divReqCommonSummaryPDF")[0].style.display = "";
  1089. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  1090. } else if (refRptTplIds.length > 0) {
  1091. if (refRptTplIds.length > 1) {
  1092. let params = {};
  1093. params.prj_id = projectObj.project.projectInfo.ID;
  1094. params.rpt_ids = refRptTplIds;
  1095. params.rpt_names = rpt_names;
  1096. params.pageSize = me.getCurrentPageSize();
  1097. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  1098. params.custCfg = zTreeOprObj.reportPageCfg;
  1099. params.option = "normal";
  1100. CommonAjax.postEx("report_api/getMultiReports", params, WAIT_TIME_EXPORT, true,
  1101. function(result){
  1102. $.bootstrapLoading.end();
  1103. me._hidePdfIniPage();
  1104. let pageSize = rptControlObj.getCurrentPageSize();
  1105. for (let idx = 0; idx < result.length; idx++) {
  1106. let pageData = result[idx];
  1107. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx]);
  1108. }
  1109. },
  1110. function(failRst){
  1111. $.bootstrapLoading.end();
  1112. me._hidePdfIniPage();
  1113. console.log(failRst);
  1114. },
  1115. function(exceptionRst){
  1116. $.bootstrapLoading.end();
  1117. me._hidePdfIniPage();
  1118. console.log(exceptionRst);
  1119. }
  1120. );
  1121. } else {
  1122. //这个分支是为了减少请求,用户已经点过的表,又没有勾选,那么就直接导出成PDF
  1123. let pageSize = rptControlObj.getCurrentPageSize();
  1124. let pageData = zTreeOprObj.currentRptPageRst;
  1125. $.bootstrapLoading.end();
  1126. me._hidePdfIniPage();
  1127. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[0]);
  1128. }
  1129. }
  1130. }
  1131. }
  1132. },
  1133. firstPage: function(dom) {
  1134. let canvas = document.getElementById("rptCanvas");
  1135. zTreeOprObj.showPage(1, canvas);
  1136. },
  1137. prePage: function(dom) {
  1138. let canvas = document.getElementById("rptCanvas");
  1139. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  1140. },
  1141. nextPage: function(dom) {
  1142. let canvas = document.getElementById("rptCanvas");
  1143. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  1144. },
  1145. lastPage: function(dom) {
  1146. let me = zTreeOprObj;
  1147. let canvas = document.getElementById("rptCanvas");
  1148. zTreeOprObj.showPage(me.maxPages, canvas);
  1149. },
  1150. onKeydown: function (event, dom) {
  1151. let me = zTreeOprObj, keyPressed = null;
  1152. if (window.event) {
  1153. keyPressed = window.event.keyCode; // IE/Chrome
  1154. } else {
  1155. keyPressed = event.which; // Firefox
  1156. }
  1157. if (keyPressed === 13) {
  1158. let pageNum = 1;
  1159. try {
  1160. pageNum = parseInt(dom.value);
  1161. } catch (e) {
  1162. pageNum = 1;
  1163. }
  1164. let canvas = document.getElementById("rptCanvas");
  1165. if (pageNum < 1) {
  1166. pageNum = 1;
  1167. } else if (pageNum > me.maxPages) {
  1168. pageNum = me.maxPages;
  1169. }
  1170. zTreeOprObj.showPage(pageNum, canvas);
  1171. return false;
  1172. }
  1173. },
  1174. changeMargin: function(marginPropStr, marginDom) {
  1175. zTreeOprObj.reportPageCfg.margins[marginPropStr] = marginDom.value;
  1176. },
  1177. changeFontMain: function(CfgDispName, fontProperty, fontDom) {
  1178. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  1179. if (font["CfgDispName"] === CfgDispName) {
  1180. font[fontProperty] = fontDom.value;
  1181. break;
  1182. }
  1183. }
  1184. },
  1185. changeCfgOption: function (optStr, dom) {
  1186. zTreeOprObj.reportPageCfg[optStr] = dom.checked;
  1187. },
  1188. changeFontAdhoc: function(CfgDispName, fontProperty, fontDom) {
  1189. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  1190. if (font["CfgDispName"] === CfgDispName) {
  1191. if (font[fontProperty] === 'T') {
  1192. font[fontProperty] = 'F';
  1193. fontDom.className = "btn btn-sm btn-outline-secondary";
  1194. } else {
  1195. font[fontProperty] = 'T';
  1196. fontDom.className = "btn btn-sm btn-outline-secondary active";
  1197. }
  1198. break;
  1199. }
  1200. }
  1201. },
  1202. restoreCustCFG: function () {
  1203. let me = this;
  1204. zTreeOprObj.renderRptCfg(zTreeOprObj.defReportPageCfg);
  1205. zTreeOprObj.extractRptCfg(zTreeOprObj.reportPageCfg);
  1206. me.saveCustCfg();
  1207. },
  1208. saveCustCfg: function() {
  1209. let params = {};
  1210. params.custCfg = zTreeOprObj.reportPageCfg;
  1211. CommonAjax.postEx("report_tpl_api/saveCustomerCfg", params, 20000, true, function(result){
  1212. // alert("Save successfully!");
  1213. $("#update_msg_response")[0].style.color = "green";
  1214. $("#update_msg_response")[0].innerHTML = " (保存成功!)";
  1215. setTimeout(function(){
  1216. $("#update_msg_response")[0].innerHTML = "";
  1217. }, 1000);
  1218. }, function (failRst) {
  1219. $("#update_msg_response")[0].style.color = "red";
  1220. $("#update_msg_response")[0].innerHTML = " (保存失败!)";
  1221. setTimeout(function(){
  1222. $("#update_msg_response")[0].innerHTML = "";
  1223. }, 1000);
  1224. }, null
  1225. );
  1226. },
  1227. confirmCfgChange: function() {
  1228. zTreeOprObj.changeCfg();
  1229. }
  1230. };
  1231. function downloadReport(urls) {
  1232. //考虑到多个报表下载,一些浏览器(如chrome)不允许一下子下载多个文件,得缓缓处理,统一在这处理
  1233. rptControlObj.currentDownloadUrl = null;
  1234. rptControlObj.currentDownloadIdx = 0;
  1235. let private_download = function() {
  1236. if (rptControlObj.currentDownloadIdx >= 0 && rptControlObj.currentDownloadIdx < urls.length) {
  1237. rptControlObj.currentDownloadUrl = urls[rptControlObj.currentDownloadIdx];
  1238. rptControlObj.currentDownloadIdx++;
  1239. window.location = rptControlObj.currentDownloadUrl;
  1240. setTimeout(private_download, 2000);
  1241. }
  1242. }
  1243. private_download();
  1244. }
  1245. function dynamicLoadJs(url, type, callback) {
  1246. let head = document.getElementsByTagName('head')[0];
  1247. let script = document.createElement('script');
  1248. script.type = 'text/javascript';
  1249. script.src = url;
  1250. if(callback) {
  1251. script.onload = script.onreadystatechange = function (event) {
  1252. // console.log('this.readyState: ' + this.readyState);
  1253. callback(type);
  1254. script.onload = script.onreadystatechange = null;
  1255. // if (this.readyState === "loaded" || this.readyState === "complete"){
  1256. // }
  1257. };
  1258. }
  1259. head.appendChild(script);
  1260. }
  1261. function dynamicLoadCss(url) {
  1262. let head = document.getElementsByTagName('head')[0];
  1263. let link = document.createElement('link');
  1264. link.type='text/css';
  1265. link.rel = 'stylesheet';
  1266. link.href = url;
  1267. head.appendChild(link);
  1268. }