rpt_tpl_main.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. 'use strict'
  2. let rptTplObj = {
  3. iniPage: function() {
  4. zTreeOprObj.getReportTemplateTree(RT.GrpType.CONSTRUCT);
  5. bandTreeOprObj.getReportTplCfg();
  6. selectableFiledTreeOprObj.iniTree();
  7. preview_util.drawBorder($("#tplCanvas")[0]);
  8. }
  9. }
  10. let zTreeOprObj = {
  11. treeObj: null,
  12. currentNode: null,
  13. getReportTemplateTree: function(grpType) {
  14. let me = zTreeOprObj, params = {};
  15. params.grpType = grpType;
  16. params.userId = (userAccount === 'admin')?('-100'):userID;
  17. params.tplType = RT.TplType.ALL;
  18. CommonAjax.postEx("report_tpl_api/getRptTplTree", params, 20000, true, function(result){
  19. zTreeHelper.createTree(result, setting, "rptTplTree", me);
  20. me.refreshNodes();
  21. }, null, null
  22. );
  23. },
  24. refreshNodes: function() {
  25. let me = this;
  26. let private_setupIsParent = function(node){
  27. if (node.nodeType == RT.NodeType.NODE) {
  28. node.isParent = true;
  29. } else {
  30. node.isParent = false;
  31. }
  32. if (node.items && node.items.length) {
  33. for (let i = 0; i < node.items.length; i++) {
  34. private_setupIsParent(node.items[i]);
  35. }
  36. }
  37. };
  38. let topNodes = me.treeObj.getNodes();
  39. for (let i = 0; i < topNodes.length; i++) {
  40. private_setupIsParent(topNodes[i]);
  41. }
  42. me.treeObj.refresh();
  43. },
  44. moveUpNode: function() {
  45. let me = this, nodes = [];
  46. if (me.currentNode && me.currentNode.getPreNode()) {
  47. let preNode = me.currentNode.getPreNode(), pre_preNode = preNode.getPreNode();
  48. me.treeObj.moveNode(preNode, me.currentNode, "prev", true);
  49. //then update the db
  50. if (pre_preNode) {
  51. pre_preNode.NextSiblingID = me.currentNode.ID;
  52. nodes.push(me.createNodeFromZTreeNode(pre_preNode));
  53. }
  54. preNode.NextSiblingID = me.currentNode.NextSiblingID;
  55. me.currentNode.NextSiblingID = preNode.ID;
  56. nodes.push(me.createNodeFromZTreeNode(me.currentNode));
  57. nodes.push(me.createNodeFromZTreeNode(preNode));
  58. me.updateNodes(nodes);
  59. }
  60. },
  61. moveDownNode: function() {
  62. let me = this, nodes = [];
  63. if (me.currentNode && me.currentNode.getNextNode()) {
  64. let preNode = me.currentNode.getPreNode(), nextNode = me.currentNode.getNextNode();
  65. me.treeObj.moveNode(nextNode, me.currentNode, "next", true);
  66. //then update the db
  67. if (preNode) {
  68. preNode.NextSiblingID = nextNode.ID;
  69. nodes.push(me.createNodeFromZTreeNode(preNode));
  70. }
  71. me.currentNode.NextSiblingID = nextNode.NextSiblingID;
  72. nextNode.NextSiblingID = me.currentNode.ID;
  73. nodes.push(me.createNodeFromZTreeNode(me.currentNode));
  74. nodes.push(me.createNodeFromZTreeNode(nextNode));
  75. me.updateNodes(nodes);
  76. }
  77. },
  78. addRootNode: function() {
  79. let me = this, rawNode = me.createIniRootNode(), lastNodeId = -1, lastNode = null;
  80. if (me.treeObj) {
  81. let rootNodes = me.treeObj.getNodes();
  82. if (rootNodes.length > 0) {
  83. lastNodeId = rootNodes[rootNodes.length - 1].ID;
  84. lastNode = rootNodes[rootNodes.length - 1];
  85. }
  86. me.addNewNode(rawNode, lastNodeId, function(rst){
  87. let newNodes = [], isSilent = false;
  88. if (lastNode) {
  89. lastNode.NextSiblingID = rst.ID;
  90. }
  91. rawNode.ID = rst.ID;
  92. rawNode.isParent = true;
  93. rawNode.items = [];
  94. newNodes.push(rawNode);
  95. if (me.treeObj) {
  96. me.treeObj.addNodes(null, -1, newNodes, isSilent);
  97. } else {
  98. me.treeObj = $.fn.zTree.init($("#rptTplTree"), setting, newNodes);
  99. }
  100. }, null);
  101. }
  102. },
  103. updateNodes: function(nodes){
  104. if (nodes && nodes.length > 0) {
  105. let me = this;
  106. for (let i = 0; i < nodes.length; i++) {
  107. if (nodes[i].__v != null) node.__v = nodes[i].__v + 1
  108. else nodes[i].__v = 0;
  109. }
  110. let params = {};
  111. params.nodes = nodes;
  112. CommonAjax.postEx("report_tpl_api/updateRptTplNodes", params, 5000, true, null, null, null);
  113. }
  114. },
  115. addTplNode: function (){
  116. let me = this;
  117. if (me.currentNode && me.currentNode.nodeType === RT.NodeType.NODE) {
  118. let rawNode = me.createIniRootNode(), lastNodeId = -1, lastNode = null;
  119. rawNode.nodeType = RT.NodeType.TEMPLATE;
  120. rawNode.ParentID = me.currentNode.ID;
  121. rawNode.name = "新增报表模板";
  122. if (me.treeObj) {
  123. let nodes = me.currentNode.items;
  124. if (nodes.length > 0) {
  125. lastNodeId = nodes[nodes.length - 1].ID;
  126. lastNode = nodes[nodes.length - 1];
  127. }
  128. me.addNewNode(rawNode, lastNodeId, function(rst){
  129. let newNodes = [], isSilent = false;
  130. if (lastNode) {
  131. lastNode.NextSiblingID = rst.ID;
  132. }
  133. rawNode.ID = rst.ID;
  134. rawNode.isParent = false;
  135. rawNode.items = [];
  136. newNodes.push(rawNode);
  137. if (me.treeObj) {
  138. me.treeObj.addNodes(me.currentNode, -1, newNodes, isSilent);
  139. } else {
  140. me.treeObj = $.fn.zTree.init($("#rptTplTree"), setting, newNodes);
  141. }
  142. }, null);
  143. }
  144. }
  145. },
  146. addNewNode: function(rawNode, lastNodeId, callback, failCallback) {
  147. let params = {};
  148. params.lastNodeId = lastNodeId;
  149. params.rawNodeData = rawNode;
  150. CommonAjax.postEx("report_tpl_api/createTplTreeNode", params, 5000, true, callback, failCallback, null);
  151. },
  152. createIniRootNode: function() {
  153. let rst = {
  154. ID: -1,
  155. ParentID: -1,
  156. NextSiblingID: -1,
  157. grpType: RT.GrpType.CONSTRUCT,
  158. nodeType: RT.NodeType.NODE,
  159. tplType: RT.TplType.ALL,
  160. userId: (userAccount === 'admin')?('-100'):userID,
  161. refId: -1,
  162. name: '新增节点'
  163. };
  164. return rst;
  165. },
  166. createNodeFromZTreeNode: function(treeNode) {
  167. let rst = {};
  168. rst.ID = treeNode.ID;
  169. rst.ParentID = treeNode.ParentID;
  170. rst.NextSiblingID = treeNode.NextSiblingID;
  171. rst.grpType = treeNode.grpType;
  172. rst.nodeType = treeNode.nodeType;
  173. rst.tplType = treeNode.tplType;
  174. rst.userId = treeNode.userId;
  175. rst.refId = treeNode.refId;
  176. rst.name = treeNode.name;
  177. return rst;
  178. },
  179. addHoverDom: function(treeId, treeNode) {
  180. let me = zTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
  181. if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0 || treeNode.nodeType == RT.NodeType.TEMPLATE) return;
  182. let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子节点' onfocus='this.blur();'></span>";
  183. sObj.after(addStr);
  184. let btn = $("#addBtn_"+treeNode.tId);
  185. if (btn) btn.bind("click", function(){
  186. let rawNode = me.createIniRootNode(), lastNodeId = -1, insertIdx = -1, lastNode = null;
  187. rawNode.ParentID = treeNode.ID;
  188. rawNode.name = "新增子节点";
  189. if (treeNode.items.length > 0) {
  190. for (let i = treeNode.items.length - 1; i >= 0; i--) {
  191. if (treeNode.items[i].nodeType == RT.NodeType.NODE) {
  192. lastNodeId = treeNode.items[i].ID;
  193. lastNode = treeNode.items[i];
  194. rawNode.NextSiblingID = treeNode.items[i].NextSiblingID;
  195. insertIdx = i + 1;
  196. break;
  197. } else {
  198. rawNode.NextSiblingID = treeNode.items[i].ID;
  199. insertIdx = i;
  200. }
  201. }
  202. }
  203. zTreeOprObj.addNewNode(rawNode, lastNodeId, function(rst){
  204. let newNodes = [], isSilent = false;
  205. if (lastNode) {
  206. lastNode.NextSiblingID = rst.ID;
  207. }
  208. rawNode.ID = rst.ID;
  209. rawNode.NextSiblingID = rst.NextSiblingID;
  210. rawNode.isParent = true;
  211. rawNode.items = [];
  212. newNodes.push(rawNode);
  213. treeNode.isParent = true;
  214. if (me.treeObj) {
  215. me.treeObj.addNodes(treeNode, insertIdx, newNodes, isSilent);
  216. } else {
  217. me.treeObj = $.fn.zTree.init($("#rptTplTree"), setting, newNodes);
  218. }
  219. }, null);
  220. });
  221. },
  222. removeHoverDom: function(treeId, treeNode) {
  223. $("#addBtn_"+treeNode.tId).unbind().remove();
  224. },
  225. onBeforeRemove: function(treeId, treeNode){
  226. let nodeIds = [], preNode = treeNode.getPreNode(), preNodeId = -1, canRemove = false, params = {};
  227. if (preNode) {
  228. preNodeId = preNode.ID;
  229. }
  230. let private_fetchAllSubItems = function(pItem){
  231. nodeIds.push(pItem.ID);
  232. if (pItem.items && pItem.items.length > 0) {
  233. for (let i = 0; i < pItem.items.length; i++) {
  234. private_fetchAllSubItems(pItem.items[i]);
  235. }
  236. }
  237. };
  238. nodeIds.push(treeNode.ID);
  239. for (let i = 0; i < treeNode.items.length; i++) {
  240. private_fetchAllSubItems(treeNode.items[i]);
  241. }
  242. params.nodeIds = nodeIds;
  243. params.preNodeId = preNodeId;
  244. params.preNodeNextId = treeNode.NextSiblingID;
  245. CommonAjax.postEx("report_tpl_api/deleteRptTplNodes", params, 5000, false, function(data){
  246. canRemove = true;
  247. }, null, null);
  248. return canRemove;
  249. },
  250. onRemove: function(e, treeId, treeNode){
  251. let me = zTreeOprObj, pNode = me.treeObj.getNodeByTId(treeNode.parentTId);
  252. if (pNode && pNode.items && pNode.items.length == 0) {
  253. if (pNode.nodeType == RT.NodeType.NODE) pNode.isParent = true
  254. else pNode.isParent = false;
  255. me.treeObj.refresh();
  256. }
  257. },
  258. beforeRename: function(treeId, treeNode, newName, isCancel) {
  259. if (newName.length == 0) {
  260. return false;
  261. }
  262. return true;
  263. },
  264. onRename : function(e, treeId, treeNode, isCancel) {
  265. let me = zTreeOprObj, nodes = [];
  266. nodes.push(me.createNodeFromZTreeNode(treeNode));
  267. me.updateNodes(nodes);
  268. if (treeNode.nodeType == RT.NodeType.TEMPLATE && treeNode.refId >= 0) {
  269. if (treeNode.rptTpl != null) {
  270. treeNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME] = treeNode.name;
  271. $("#rptTplName")[0].value = treeNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME];
  272. } else {
  273. me.onClick(e, treeId, treeNode);
  274. }
  275. }
  276. },
  277. onClick: function(event,treeId,treeNode) {
  278. let me = zTreeOprObj;
  279. me.currentNode = treeNode;
  280. bandTreeOprObj.currentNode = null;
  281. if (treeNode.nodeType == RT.NodeType.NODE) {
  282. $("#rpt_tpl_display_label")[0].innerText = "...";
  283. } else if (treeNode.nodeType == RT.NodeType.TEMPLATE) {
  284. let showText = treeNode.name, parentNode = treeNode.getParentNode();
  285. while (parentNode !== null) {
  286. showText = parentNode.name + ' > ' + showText;
  287. parentNode = parentNode.getParentNode();
  288. }
  289. $("#rpt_tpl_display_label")[0].innerText = showText;
  290. if (treeNode.refId < 0) {
  291. //创建新报表模板
  292. $('#rptTypeSelectionModal').modal('show');
  293. } else {
  294. //显示报表模板
  295. me.chkAndRreshRefTpl();
  296. }
  297. }
  298. },
  299. createNewTpl: function () {
  300. let me = zTreeOprObj, params = {};
  301. if (me.currentNode && me.currentNode.nodeType == RT.NodeType.TEMPLATE) {
  302. params.treeNodeId = me.currentNode.ID;
  303. let rptTypeId = common_rpt_type_ids.flow;
  304. if ($("#crossTypeOpt")[0].checked) rptTypeId = common_rpt_type_ids.cross;
  305. if ($("#billTypeOpt")[0].checked) rptTypeId = common_rpt_type_ids.bill;
  306. params.rptDftTplId = rptTypeId
  307. CommonAjax.postEx("report_tpl_api/createDftRptTpl", params, 20000, true, function(result){
  308. me.currentNode.rptTpl = result;
  309. }, null, null
  310. );
  311. }
  312. },
  313. chkAndRreshRefTpl: function() {
  314. let me = zTreeOprObj, params = {};
  315. if (me.currentNode && me.currentNode.nodeType == RT.NodeType.TEMPLATE && me.currentNode.refId > 0) {
  316. if (!(me.currentNode.rptTpl)) {
  317. params.rptTplId = me.currentNode.refId;
  318. CommonAjax.postEx("report_tpl_api/getRefRptTpl", params, 20000, true, function(result){
  319. me.currentNode.rptTpl = result;
  320. me.currentNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME] = me.currentNode.name;
  321. tplHelper.refreshTplView(me.currentNode.rptTpl);
  322. }, null, null
  323. );
  324. } else {
  325. me.currentNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME] = me.currentNode.name;
  326. tplHelper.refreshTplView(me.currentNode.rptTpl);
  327. }
  328. }
  329. },
  330. getRefTpl: function() {
  331. let me = zTreeOprObj, rst = null;
  332. if (me.currentNode && me.currentNode.nodeType == RT.NodeType.TEMPLATE && me.currentNode.refId > 0) {
  333. rst = me.currentNode.rptTpl
  334. }
  335. return rst;
  336. },
  337. extractMainInfo: function (rptTpl) {
  338. //模板信息
  339. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME] = $("#rptTplName")[0].value;
  340. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = JV.PAGES_SIZE_STR[$("#rptTplPageSize")[0].selectedIndex];
  341. if ($("#rptTplPageOrientation")[0].selectedIndex == 1) {
  342. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] = JV.ORIENTATION_PORTRAIT;
  343. } else {
  344. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] = JV.ORIENTATION_LANDSCAPE;
  345. }
  346. if (rptTpl[JV.NODE_FLOW_INFO]) {
  347. rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN] = parseInt($("#rptTplMultiCols")[0].value);
  348. }
  349. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT] = $("#rptTplMarginLeft")[0].value;
  350. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT] = $("#rptTplMarginRight")[0].value;
  351. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP] = $("#rptTplMarginTop")[0].value;
  352. rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM] = $("#rptTplMarginBottom")[0].value;
  353. }
  354. };