rpt_main.js 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287
  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.treeObj) {
  929. let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
  930. if (chkNodes.length > 0) {
  931. $("#show_excel_output_cfg").trigger("click");
  932. } else {
  933. rptControlObj.getAllIndividualExcelBook();
  934. }
  935. }
  936. },
  937. getExcel: function () {
  938. let me = rptControlObj;
  939. if ($("#excelExportType_AllInOneBook").get(0).checked) {
  940. me.getAllInOneBook();
  941. } else if ($("#excelExportType_IndividualBook").get(0).checked) {
  942. me.getAllIndividualExcelBook();
  943. }
  944. },
  945. getPDF: function () {
  946. let me = rptControlObj;
  947. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  948. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  949. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  950. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  951. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  952. let params = rptControlObj.creatCommonExportParam();
  953. params.prj_id = projectObj.project.projectInfo.ID;
  954. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  955. params.rpt_ids = refRptTplIds;
  956. params.rpt_bill_tpl_ids = refBillSumPrjsIds;
  957. params.rpt_glj_tpl_ids = refGljSumPrjsIds;
  958. params.rpt_names = rpt_names;
  959. params.isOneSheet = true;
  960. params.rptName = projectObj.project.projectInfo.name;
  961. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  962. if (result) {
  963. let uuIdUrls = [];
  964. for (let uuIdObj of result) {
  965. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  966. uuIdUrls.push(uuIdUrl);
  967. }
  968. downloadReport(uuIdUrls);
  969. } else {
  970. //
  971. }
  972. }, null, null
  973. );
  974. } else {
  975. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  976. $("#divReqBillSummary")[0].style.display = "none";
  977. $("#divReqGljSummary")[0].style.display = "none";
  978. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  979. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  980. $("#divReqCommonSummaryPDF")[0].style.display = "";
  981. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  982. } else if (refRptTplIds.length > 0) {
  983. let params = {};
  984. params.prj_id = projectObj.project.projectInfo.ID;
  985. params.rpt_ids = refRptTplIds;
  986. params.rpt_names = rpt_names;
  987. params.pageSize = me.getCurrentPageSize();
  988. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  989. params.custCfg = zTreeOprObj.reportPageCfg;
  990. params.option = "normal";
  991. CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
  992. if (result) {
  993. let uuIdUrls = [];
  994. for (let uuIdObj of result) {
  995. let uuIdUrl = "/report_api/getFileByUUID/" + uuIdObj.uuid + "/" + stringUtil.replaceAll(uuIdObj.reportName, "#", "_") + "/pdf";
  996. uuIdUrls.push(uuIdUrl);
  997. }
  998. downloadReport(uuIdUrls);
  999. } else {
  1000. //
  1001. }
  1002. }, null, null
  1003. );
  1004. }
  1005. }
  1006. }
  1007. },
  1008. getPdfFontCallback: function(fontProperty) {
  1009. let me = rptControlObj;
  1010. rptTplObj.pdfFont['SmartSimsun'].push(fontProperty);
  1011. if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
  1012. me.getPDFEx();
  1013. }
  1014. },
  1015. getPDFPre: function () {
  1016. let me = rptControlObj;
  1017. if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
  1018. $.bootstrapLoading.start();
  1019. me.getPDFEx();
  1020. } else {
  1021. // dynamicLoadJs('/lib/jspdf/SmartSimsun-normal.js', 'normal', me.getPdfFontCallback);
  1022. // dynamicLoadJs('/lib/jspdf/SmartSimsun-bold.js', 'bold', me.getPdfFontCallback);
  1023. $("#ini_PDF_Btn").trigger("click");
  1024. dynamicLoadJs('https://d2.smartcost.com.cn/cach/SmartSimsun-normal.js', 'normal', me.getPdfFontCallback);
  1025. dynamicLoadJs('https://d2.smartcost.com.cn/cach/SmartSimsun-bold.js', 'bold', me.getPdfFontCallback);
  1026. }
  1027. },
  1028. getPDFEx: function () {
  1029. let me = rptControlObj;
  1030. if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
  1031. let refRptTplIds = [], refBillSumPrjsIds = [], refGljSumPrjsIds = [];
  1032. let rpt_names = [], bill_rpt_names = [], glj_rpt_names = [];
  1033. rptControlObj.getTplIdsCommon(refRptTplIds, refBillSumPrjsIds, refGljSumPrjsIds, rpt_names, bill_rpt_names, glj_rpt_names);
  1034. if (zTreeOprObj.selectedPrjIDs.length > 0 && (glj_rpt_names.length > 0 || bill_rpt_names.length > 0)) {
  1035. let params = rptControlObj.creatCommonExportParam();
  1036. params.prj_id = projectObj.project.projectInfo.ID;
  1037. params.sum_rpt_names = bill_rpt_names.concat(glj_rpt_names);
  1038. params.rpt_ids = refRptTplIds;
  1039. params.rpt_bill_tpl_ids = refBillSumPrjsIds;
  1040. params.rpt_glj_tpl_ids = refGljSumPrjsIds;
  1041. params.rpt_names = rpt_names;
  1042. params.isOneSheet = true;
  1043. params.rptName = projectObj.project.projectInfo.name;
  1044. CommonAjax.postEx("report_api/getMultiReports", params, WAIT_TIME_EXPORT, true,
  1045. function(result){
  1046. $.bootstrapLoading.end();
  1047. if ($('#ini_PDF_cover').is(':visible')) {
  1048. $("#ini_PDF_Btn_Cancel").trigger("click");
  1049. // $("#ini_PDF_cover").remove();
  1050. }
  1051. let pageSize = rptControlObj.getCurrentPageSize();
  1052. for (let idx = 0; idx < result.length; idx++) {
  1053. let pageData = result[idx];
  1054. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
  1055. }
  1056. },
  1057. function(failRst){
  1058. $.bootstrapLoading.end();
  1059. if ($('#ini_PDF_cover').is(':visible')) {
  1060. $("#ini_PDF_Btn_Cancel").trigger("click");
  1061. // $("#ini_PDF_cover").remove();
  1062. }
  1063. console.log(failRst);
  1064. },
  1065. function(exceptionRst){
  1066. $.bootstrapLoading.end();
  1067. if ($('#ini_PDF_cover').is(':visible')) {
  1068. $("#ini_PDF_Btn_Cancel").trigger("click");
  1069. // $("#ini_PDF_cover").remove();
  1070. }
  1071. console.log(exceptionRst);
  1072. }
  1073. );
  1074. } else {
  1075. if (refBillSumPrjsIds.length > 0 || refGljSumPrjsIds.length > 0) {
  1076. $("#divReqBillSummary")[0].style.display = "none";
  1077. $("#divReqGljSummary")[0].style.display = "none";
  1078. $("#divReqCommonSummaryExcel")[0].style.display = "none";
  1079. $("#divReqCommonSummaryMultiExcel")[0].style.display = "none";
  1080. $("#divReqCommonSummaryPDF")[0].style.display = "";
  1081. zTreeOprObj.requestPrjFolderCommon(); //先处理需要汇总的报表,走另外一个分支
  1082. } else if (refRptTplIds.length > 0) {
  1083. if (refRptTplIds.length > 1) {
  1084. let params = {};
  1085. params.prj_id = projectObj.project.projectInfo.ID;
  1086. params.rpt_ids = refRptTplIds;
  1087. params.rpt_names = rpt_names;
  1088. params.pageSize = me.getCurrentPageSize();
  1089. params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
  1090. params.custCfg = zTreeOprObj.reportPageCfg;
  1091. params.option = "normal";
  1092. CommonAjax.postEx("report_api/getMultiReports", params, WAIT_TIME_EXPORT, true,
  1093. function(result){
  1094. $.bootstrapLoading.end();
  1095. if ($('#ini_PDF_cover').is(':visible')) {
  1096. $("#ini_PDF_Btn_Cancel").trigger("click");
  1097. // $("#ini_PDF_cover").remove();
  1098. }
  1099. let pageSize = rptControlObj.getCurrentPageSize();
  1100. for (let idx = 0; idx < result.length; idx++) {
  1101. let pageData = result[idx];
  1102. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx]);
  1103. }
  1104. },
  1105. function(failRst){
  1106. $.bootstrapLoading.end();
  1107. if ($('#ini_PDF_cover').is(':visible')) {
  1108. $("#ini_PDF_Btn_Cancel").trigger("click");
  1109. // $("#ini_PDF_cover").remove();
  1110. }
  1111. console.log(failRst);
  1112. },
  1113. function(exceptionRst){
  1114. $.bootstrapLoading.end();
  1115. if ($('#ini_PDF_cover').is(':visible')) {
  1116. $("#ini_PDF_Btn_Cancel").trigger("click");
  1117. // $("#ini_PDF_cover").remove();
  1118. }
  1119. console.log(exceptionRst);
  1120. }
  1121. );
  1122. } else {
  1123. //这个分支是为了减少请求,用户已经点过的表,又没有勾选,那么就直接导出成PDF
  1124. let pageSize = rptControlObj.getCurrentPageSize();
  1125. let pageData = zTreeOprObj.currentRptPageRst;
  1126. $.bootstrapLoading.end();
  1127. if ($('#ini_PDF_cover').is(':visible')) {
  1128. $("#ini_PDF_Btn_Cancel").trigger("click");
  1129. // $("#ini_PDF_cover").remove();
  1130. }
  1131. JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[0]);
  1132. }
  1133. }
  1134. }
  1135. }
  1136. },
  1137. firstPage: function(dom) {
  1138. let canvas = document.getElementById("rptCanvas");
  1139. zTreeOprObj.showPage(1, canvas);
  1140. },
  1141. prePage: function(dom) {
  1142. let canvas = document.getElementById("rptCanvas");
  1143. zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
  1144. },
  1145. nextPage: function(dom) {
  1146. let canvas = document.getElementById("rptCanvas");
  1147. zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
  1148. },
  1149. lastPage: function(dom) {
  1150. let me = zTreeOprObj;
  1151. let canvas = document.getElementById("rptCanvas");
  1152. zTreeOprObj.showPage(me.maxPages, canvas);
  1153. },
  1154. onKeydown: function (event, dom) {
  1155. let me = zTreeOprObj, keyPressed = null;
  1156. if (window.event) {
  1157. keyPressed = window.event.keyCode; // IE/Chrome
  1158. } else {
  1159. keyPressed = event.which; // Firefox
  1160. }
  1161. if (keyPressed === 13) {
  1162. let pageNum = 1;
  1163. try {
  1164. pageNum = parseInt(dom.value);
  1165. } catch (e) {
  1166. pageNum = 1;
  1167. }
  1168. let canvas = document.getElementById("rptCanvas");
  1169. if (pageNum < 1) {
  1170. pageNum = 1;
  1171. } else if (pageNum > me.maxPages) {
  1172. pageNum = me.maxPages;
  1173. }
  1174. zTreeOprObj.showPage(pageNum, canvas);
  1175. return false;
  1176. }
  1177. },
  1178. changeMargin: function(marginPropStr, marginDom) {
  1179. zTreeOprObj.reportPageCfg.margins[marginPropStr] = marginDom.value;
  1180. },
  1181. changeFontMain: function(CfgDispName, fontProperty, fontDom) {
  1182. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  1183. if (font["CfgDispName"] === CfgDispName) {
  1184. font[fontProperty] = fontDom.value;
  1185. break;
  1186. }
  1187. }
  1188. },
  1189. changeCfgOption: function (optStr, dom) {
  1190. zTreeOprObj.reportPageCfg[optStr] = dom.checked;
  1191. },
  1192. changeFontAdhoc: function(CfgDispName, fontProperty, fontDom) {
  1193. for (let font of zTreeOprObj.reportPageCfg.fonts) {
  1194. if (font["CfgDispName"] === CfgDispName) {
  1195. if (font[fontProperty] === 'T') {
  1196. font[fontProperty] = 'F';
  1197. fontDom.className = "btn btn-sm btn-outline-secondary";
  1198. } else {
  1199. font[fontProperty] = 'T';
  1200. fontDom.className = "btn btn-sm btn-outline-secondary active";
  1201. }
  1202. break;
  1203. }
  1204. }
  1205. },
  1206. restoreCustCFG: function () {
  1207. let me = this;
  1208. zTreeOprObj.renderRptCfg(zTreeOprObj.defReportPageCfg);
  1209. zTreeOprObj.extractRptCfg(zTreeOprObj.reportPageCfg);
  1210. me.saveCustCfg();
  1211. },
  1212. saveCustCfg: function() {
  1213. let params = {};
  1214. params.custCfg = zTreeOprObj.reportPageCfg;
  1215. CommonAjax.postEx("report_tpl_api/saveCustomerCfg", params, 20000, true, function(result){
  1216. // alert("Save successfully!");
  1217. $("#update_msg_response")[0].style.color = "green";
  1218. $("#update_msg_response")[0].innerHTML = " (保存成功!)";
  1219. setTimeout(function(){
  1220. $("#update_msg_response")[0].innerHTML = "";
  1221. }, 1000);
  1222. }, function (failRst) {
  1223. $("#update_msg_response")[0].style.color = "red";
  1224. $("#update_msg_response")[0].innerHTML = " (保存失败!)";
  1225. setTimeout(function(){
  1226. $("#update_msg_response")[0].innerHTML = "";
  1227. }, 1000);
  1228. }, null
  1229. );
  1230. },
  1231. confirmCfgChange: function() {
  1232. zTreeOprObj.changeCfg();
  1233. }
  1234. };
  1235. function downloadReport(urls) {
  1236. //考虑到多个报表下载,一些浏览器(如chrome)不允许一下子下载多个文件,得缓缓处理,统一在这处理
  1237. rptControlObj.currentDownloadUrl = null;
  1238. rptControlObj.currentDownloadIdx = 0;
  1239. let private_download = function() {
  1240. if (rptControlObj.currentDownloadIdx >= 0 && rptControlObj.currentDownloadIdx < urls.length) {
  1241. rptControlObj.currentDownloadUrl = urls[rptControlObj.currentDownloadIdx];
  1242. rptControlObj.currentDownloadIdx++;
  1243. window.location = rptControlObj.currentDownloadUrl;
  1244. setTimeout(private_download, 2000);
  1245. }
  1246. }
  1247. private_download();
  1248. }
  1249. function dynamicLoadJs(url, type, callback) {
  1250. let head = document.getElementsByTagName('head')[0];
  1251. let script = document.createElement('script');
  1252. script.type = 'text/javascript';
  1253. script.src = url;
  1254. if(callback) {
  1255. script.onload = script.onreadystatechange = function (event) {
  1256. // console.log('this.readyState: ' + this.readyState);
  1257. callback(type);
  1258. script.onload = script.onreadystatechange = null;
  1259. // if (this.readyState === "loaded" || this.readyState === "complete"){
  1260. // }
  1261. };
  1262. }
  1263. head.appendChild(script);
  1264. }
  1265. function dynamicLoadCss(url) {
  1266. let head = document.getElementsByTagName('head')[0];
  1267. let link = document.createElement('link');
  1268. link.type='text/css';
  1269. link.rel = 'stylesheet';
  1270. link.href = url;
  1271. head.appendChild(link);
  1272. }