chapterTree.js 7.9 KB

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