chapterTree.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /**
  2. * Created by Tony on 2017/4/27.
  3. */
  4. var pageOprObj = {
  5. rationLibName : null,
  6. initPage : function() {
  7. var me = this, rationLibName = getQueryString("repository");//获取定额库参数
  8. if (rationLibName) {
  9. me.rationLibName = rationLibName;
  10. zTreeOprObj.getRationTree(rationLibName);
  11. }
  12. }
  13. }
  14. var zTreeOprObj = {
  15. treeObj: null,
  16. getRationTree: function(rationLibName){
  17. var me = this;
  18. $.ajax({
  19. type:"POST",
  20. url:"api/getRationTree",
  21. data:{"rationLibName": rationLibName},
  22. dataType:"json",
  23. cache:false,
  24. timeout:20000,
  25. success:function(result,textStatus,status){
  26. if(status.status == 200) {
  27. me.createRationTree(result.data);
  28. }
  29. },
  30. error:function(err){
  31. alert(err.responseJSON.error);
  32. }
  33. })
  34. },
  35. createRationTree: function(sourceData){
  36. var me = zTreeOprObj, treeArr = tree_Data_Helper.buildTreeNodeDirectly(sourceData);
  37. me.treeObj = $.fn.zTree.init($("#rationChapterTree"), setting, treeArr);
  38. me.treeObj.expandAll(true);
  39. },
  40. addRootNode: function() {
  41. var me = zTreeOprObj, rawNode = {ParentID: -1, NextSiblingID: -1, name: "新增节点"}, lastNodeId = -1;
  42. if (me.treeObj) {
  43. var rootNodes = me.treeObj.getNodes();
  44. if (rootNodes.length > 0) {
  45. lastNodeId = rootNodes[rootNodes.length - 1].ID;
  46. }
  47. }
  48. me.addNewNode(rawNode, lastNodeId, function(err, rst){
  49. if (!(err)) {
  50. var newNodes = [], isSilent = false;
  51. newNodes.push({ rationRepId: rst.data.rationRepId, ID: rst.data.ID, ParentID:-1, NextSiblingID:-1, name:"新增节点",isParent:false, items:[]});
  52. if (me.treeObj) {
  53. me.treeObj.addNodes(null, -1, newNodes, isSilent);
  54. } else {
  55. me.treeObj = $.fn.zTree.init($("#rationChapterTree"), setting, newNodes);
  56. }
  57. }
  58. });
  59. },
  60. addNewNode : function(rawNode, lastNodeId, callback){
  61. $.ajax({
  62. type:"POST",
  63. url:"api/createNewNode",
  64. data:{"rationLibName":pageOprObj.rationLibName,"lastNodeId": lastNodeId, "rawNodeData": JSON.stringify(rawNode)},
  65. dataType:"json",
  66. cache:false,
  67. timeout:1000,
  68. success: function(result,textStatus,status){
  69. callback(false, result);
  70. },
  71. error:function(err){
  72. callback(err);
  73. }
  74. })
  75. },
  76. beforeRename: function(treeId, treeNode, newName, isCancel) {
  77. if (newName.length == 0) {
  78. return false;
  79. }
  80. return true;
  81. },
  82. onRename : function(e, treeId, treeNode, isCancel) {
  83. var nodes = [];
  84. nodes.push(treeNode);
  85. zTreeOprObj.updateNodes(nodes);
  86. },
  87. onBeforeRemove: function(treeId, treeNode){
  88. var nodeIds = [], preNode = treeNode.getPreNode(), preNodeId = -1;
  89. if (preNode) {
  90. preNodeId = preNode.ID;
  91. }
  92. private_fetchAllSubItems = function(pItem){
  93. nodeIds.push(pItem.ID);
  94. if (pItem.items && pItem.items.length > 0) {
  95. for (var i = 0; i < pItem.items.length; i++) {
  96. private_fetchAllSubItems(pItem.items[i]);
  97. }
  98. }
  99. };
  100. nodeIds.push(treeNode.ID);
  101. for (var i = 0; i < treeNode.items.length; i++) {
  102. private_fetchAllSubItems(treeNode.items[i]);
  103. }
  104. $.ajax({
  105. type:"POST",
  106. url:"api/deleteNodes",
  107. data:{"nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
  108. dataType:"json",
  109. cache:false,
  110. timeout:5000,
  111. success:function(result,textStatus,status){
  112. var pNode = treeNode.getParentNode();
  113. if (pNode && pNode.items && pNode.items.length == 1) {
  114. pNode.isParent = false;
  115. }
  116. },
  117. error:function(){
  118. }
  119. });
  120. return true;
  121. },
  122. onRemove: function(e, treeId, treeNode){
  123. var me = zTreeOprObj, pNode = me.treeObj.getNodeByTId(treeNode.parentTId);
  124. if (pNode && pNode.items && pNode.items.length == 0) {
  125. pNode.isParent = false;
  126. me.treeObj.refresh();
  127. //me.treeObj.updateNode(pNode, false); //这方法有后遗症,多次操作后会造成节点新增子节点时,父节点icon显示不正确
  128. }
  129. },
  130. beforeDrag: function(treeId, treeNodes) {
  131. return false;
  132. },
  133. updateNodes: function(nodes){
  134. if (nodes && nodes.length > 0) {
  135. var reqData = []
  136. for (var i = 0; i < nodes.length; i++) {
  137. var node = {};
  138. node.rationRepId = nodes[i].rationRepId;
  139. node.ID = nodes[i].ID;
  140. node.ParentID = nodes[i].ParentID;
  141. node.NextSiblingID = nodes[i].NextSiblingID;
  142. node.name = nodes[i].name;
  143. if (nodes[i].__v != null) node.__v = nodes[i].__v + 1
  144. else node.__v = 0;
  145. reqData.push(node);
  146. }
  147. $.ajax({
  148. type:"POST",
  149. url:"api/updateNodes",
  150. data:{"nodes": JSON.stringify(reqData)},
  151. dataType:"json",
  152. cache:false,
  153. timeout:5000,
  154. success:function(result,textStatus,status){
  155. console.log(status + ' : ' + result);
  156. },
  157. error:function(){
  158. }
  159. })
  160. }
  161. },
  162. addHoverDom: function(treeId, treeNode) {
  163. var me = zTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
  164. //if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0||(treeNode.level==2)) return;
  165. if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
  166. var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='add node' onfocus='this.blur();'></span>";
  167. sObj.after(addStr);
  168. var btn = $("#addBtn_"+treeNode.tId);
  169. if (btn) btn.bind("click", function(){
  170. var rawNode = {ParentID: treeNode.ID, NextSiblingID: -1, name: "新增子节点"}, lastNodeId = -1;
  171. if (treeNode.items.length > 0) {
  172. lastNodeId = treeNode.items[treeNode.items.length - 1].ID;
  173. }
  174. zTreeOprObj.addNewNode(rawNode, lastNodeId, function(err, rst){
  175. if (!(err)) {
  176. var newNodes = [], isSilent = false;
  177. newNodes.push({ rationRepId: rst.data.rationRepId, ID: rst.data.ID, ParentID: rst.data.ParentID, NextSiblingID:-1, name:"新增子节点",isParent:false, items:[]});
  178. treeNode.isParent = true;
  179. if (me.treeObj) {
  180. me.treeObj.addNodes(treeNode, -1, newNodes, isSilent);
  181. } else {
  182. me.treeObj = $.fn.zTree.init($("#rationChapterTree"), setting, newNodes);
  183. }
  184. }
  185. });
  186. });
  187. },
  188. removeHoverDom: function(treeId, treeNode) {
  189. $("#addBtn_"+treeNode.tId).unbind().remove();
  190. },
  191. onClick: function(event,treeId,treeNode) {
  192. var sectionID = treeNode.ID;
  193. if (!(treeNode.items) || treeNode.items.length == 0) {
  194. rationOprObj.getRationItems(sectionID);
  195. }
  196. }
  197. };