rpt_main.js 61 KB

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