chapterTree.js 7.7 KB

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