rpt_tpl_main.js 15 KB

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