section_tree.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. /**
  2. * Created by Tony on 2017/4/27.
  3. */
  4. var pageOprObj = {
  5. rationLibName : null,
  6. rationLibId : null,
  7. initPage : function() {
  8. var me = this, rationLibId = getQueryString("repository"),//获取定额库参数
  9. rationLibName = storageUtil.getSessionCache("RationGrp","repositoryID_" + rationLibId);
  10. if (rationLibName) {
  11. var html = $("#rationname")[0].outerHTML;
  12. html = html.replace("XXX定额库", rationLibName);
  13. $("#rationname")[0].outerHTML = html;
  14. me.rationLibName = rationLibName;
  15. me.rationLibId = rationLibId;
  16. zTreeOprObj.getRationTree(rationLibId);
  17. }
  18. }
  19. }
  20. var zTreeOprObj = {
  21. treeObj: null,
  22. getRationTree: function(rationLibId){
  23. var me = this;
  24. $.ajax({
  25. type:"POST",
  26. url:"api/getRationTree",
  27. data:{"rationLibId": rationLibId},
  28. dataType:"json",
  29. cache:false,
  30. timeout:20000,
  31. success:function(result,textStatus,status){
  32. if(status.status == 200) {
  33. if (result.data.length > 0) {
  34. storageUtil.setSessionCache("RationGrp","repositoryID",result.data[0].rationRepId);
  35. }
  36. zTreeHelper.createTree(result.data, setting, "rationChapterTree", me);
  37. }
  38. },
  39. error:function(err){
  40. alert(err.responseJSON.error);
  41. }
  42. })
  43. },
  44. addRootNode: function() {
  45. $('#addRootA').css("opacity", "0.2");
  46. $('#addRootA').addClass("disabled");
  47. var me = zTreeOprObj, rawNode = {ParentID: -1, NextSiblingID: -1, name: "新增节点"}, lastNodeId = -1;
  48. if (me.treeObj) {
  49. var rootNodes = me.treeObj.getNodes();
  50. if (rootNodes.length > 0) {
  51. lastNodeId = rootNodes[rootNodes.length - 1].ID;
  52. }
  53. }
  54. me.addNewNode(rawNode, lastNodeId, function(err, rst){
  55. if (!(err)) {
  56. if(rootNodes.length > 0){
  57. rootNodes[rootNodes.length - 1].NextSiblingID = rst.data.ID;
  58. }
  59. var newNodes = [], isSilent = false;
  60. newNodes.push({ rationRepId: rst.data.rationRepId, Previous_ID: lastNodeId, ID: rst.data.ID, ParentID:-1, NextSiblingID:-1, name:"新增节点",isParent:false, items:[]});
  61. if (me.treeObj) {
  62. me.treeObj.addNodes(null, -1, newNodes, isSilent);
  63. } else {
  64. me.treeObj = $.fn.zTree.init($("#rationChapterTree"), setting, newNodes);
  65. }
  66. $('#addRootA').css("opacity", "");
  67. $('#addRootA').removeClass("disabled");
  68. }
  69. });
  70. },
  71. addNewNode : function(rawNode, lastNodeId, callback){
  72. $.ajax({
  73. type:"POST",
  74. url:"api/createNewNode",
  75. data:{"rationLibId":pageOprObj.rationLibId,"lastNodeId": lastNodeId, "lastOpr": userAccount, "rawNodeData": JSON.stringify(rawNode)},
  76. dataType:"json",
  77. cache:false,
  78. timeout:1000,
  79. success: function(result,textStatus,status){
  80. callback(false, result);
  81. },
  82. error:function(err){
  83. callback(err);
  84. }
  85. })
  86. },
  87. beforeRename: function(treeId, treeNode, newName, isCancel) {
  88. if (newName.length == 0) {
  89. return false;
  90. }
  91. return true;
  92. },
  93. onRename : function(e, treeId, treeNode, isCancel) {
  94. var nodes = [];
  95. nodes.push(treeNode);
  96. zTreeOprObj.updateNodes(nodes);
  97. },
  98. onBeforeRemove: function(treeId, treeNode){
  99. var nodeIds = [], preNode = treeNode.getPreNode(), preNodeId = -1;
  100. if (preNode) {
  101. preNodeId = preNode.ID;
  102. }
  103. private_fetchAllSubItems = function(pItem){
  104. nodeIds.push(pItem.ID);
  105. if (pItem.items && pItem.items.length > 0) {
  106. for (var i = 0; i < pItem.items.length; i++) {
  107. private_fetchAllSubItems(pItem.items[i]);
  108. }
  109. }
  110. };
  111. nodeIds.push(treeNode.ID);
  112. for (var i = 0; i < treeNode.items.length; i++) {
  113. private_fetchAllSubItems(treeNode.items[i]);
  114. }
  115. $.ajax({
  116. type:"POST",
  117. url:"api/deleteNodes",
  118. data:{"repId": pageOprObj.rationLibId, "lastOpr": userAccount, "nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
  119. dataType:"json",
  120. cache:false,
  121. timeout:5000,
  122. success:function(result,textStatus,status){
  123. var pNode = treeNode.getParentNode();
  124. if (pNode && pNode.items && pNode.items.length == 1) {
  125. pNode.isParent = false;
  126. }
  127. },
  128. error:function(){
  129. }
  130. });
  131. return true;
  132. },
  133. onRemove: function(e, treeId, treeNode){
  134. var me = zTreeOprObj, pNode = me.treeObj.getNodeByTId(treeNode.parentTId);
  135. if (pNode && pNode.items && pNode.items.length == 0) {
  136. pNode.isParent = false;
  137. me.treeObj.refresh();
  138. //me.treeObj.updateNode(pNode, false); //这方法有后遗症,多次操作后会造成节点新增子节点时,父节点icon显示不正确
  139. }
  140. },
  141. beforeDrop: function (treeId, treeNodes, targetNode, moveType) {
  142. let me = zTreeOprObj;
  143. if(moveType){
  144. me.treeObj.setting.edit.enable = false;
  145. let treeNode = treeNodes[0], updateNodes = [];
  146. //升级
  147. if(treeNode.level !== targetNode.level && moveType === 'prev'){
  148. if(treeNode.Previous_ID !== -1){
  149. treeNode.getPreNode().NextSiblingID = treeNode.NextSiblingID;
  150. updateNodes.push(treeNode.getPreNode());
  151. }
  152. if(treeNode.NextSiblingID !== -1){
  153. treeNode.getNextNode().Previous_ID = treeNode.Previous_ID;
  154. }
  155. if(targetNode.Previous_ID !== -1){
  156. targetNode.getPreNode().NextSiblingID = treeNode.ID;
  157. updateNodes.push(targetNode.getPreNode());
  158. }
  159. treeNode.ParentID = targetNode.getParentNode() ? targetNode.getParentNode().ID : -1;
  160. treeNode.NextSiblingID = targetNode.ID;
  161. treeNode.Previous_ID = targetNode.Previous_ID;
  162. targetNode.Previous_ID = treeNode.ID;
  163. updateNodes.push(treeNode);
  164. //updateNodes.push(targetNode);
  165. }
  166. //升级
  167. else if(treeNode.level !== targetNode.level && moveType === 'next'){
  168. if(treeNode.Previous_ID !== -1){
  169. treeNode.getPreNode().NextSiblingID = treeNode.NextSiblingID;
  170. updateNodes.push(treeNode.getPreNode());
  171. }
  172. if(treeNode.NextSiblingID !== -1){
  173. treeNode.getNextNode().Previous_ID = treeNode.Previous_ID;
  174. }
  175. if(targetNode.NextSiblingID !== -1){
  176. targetNode.getNextNode().Previous_ID = treeNode.ID;
  177. }
  178. treeNode.NextSiblingID = targetNode.NextSiblingID;
  179. treeNode.Previous_ID = targetNode.ID;
  180. treeNode.ParentID = targetNode.getParentNode() ? targetNode.getParentNode().ID : -1;
  181. targetNode.NextSiblingID = treeNode.ID;
  182. updateNodes.push(treeNode);
  183. updateNodes.push(targetNode);
  184. }
  185. //上移
  186. else if(treeNode.level === targetNode.level && moveType === 'prev'){
  187. console.log(1);
  188. if(targetNode.Previous_ID !== -1){
  189. let targetPrev = me.treeObj.getNodeByParam('ID', targetNode.Previous_ID, null);
  190. targetPrev.NextSiblingID = treeNode.ID;
  191. updateNodes.push(targetPrev);
  192. }
  193. targetNode.NextSiblingID = treeNode.NextSiblingID;
  194. treeNode.NextSiblingID = targetNode.ID;
  195. treeNode.Previous_ID = targetNode.Previous_ID;
  196. targetNode.Previous_ID = treeNode.ID;
  197. updateNodes.push(treeNode);
  198. updateNodes.push(targetNode);
  199. }
  200. //下移
  201. else if(treeNode.level === targetNode.level && moveType === 'next'){
  202. if(treeNode.Previous_ID !== -1){
  203. let treeNodePrev = me.treeObj.getNodeByParam('ID', treeNode.Previous_ID, null);
  204. treeNodePrev.NextSiblingID = targetNode.ID;
  205. updateNodes.push(treeNodePrev);
  206. }
  207. treeNode.Previous_ID = targetNode.ID;
  208. treeNode.NextSiblingID = targetNode.NextSiblingID;
  209. targetNode.Previous_ID = treeNode.Previous_ID;
  210. targetNode.NextSiblingID = treeNode.ID;
  211. updateNodes.push(treeNode);
  212. updateNodes.push(targetNode);
  213. }
  214. //
  215. else if(moveType === 'inner'){
  216. if( treeNode.Previous_ID !== -1){
  217. treeNode.getPreNode().NextSiblingID = treeNode.NextSiblingID;
  218. updateNodes.push(treeNode.getPreNode());
  219. }
  220. if(treeNode.NextSiblingID !== -1){
  221. treeNode.getNextNode().Previous_ID = treeNode.Previous_ID;
  222. }
  223. if(targetNode.items.length > 0){
  224. targetNode.items[targetNode.items.length -1].NextSiblingID = treeNode.ID;
  225. treeNode.Previous_ID = targetNode.items[targetNode.items.length -1].ID;
  226. updateNodes.push(targetNode.items[targetNode.items.length -1]);
  227. }
  228. else{
  229. treeNode.Previous_ID = -1;
  230. }
  231. treeNode.ParentID = targetNode.ID;
  232. treeNode.NextSiblingID = -1;
  233. updateNodes.push(treeNode);
  234. }
  235. if(updateNodes.length > 0){
  236. me.updateNodes(updateNodes, function () {
  237. me.treeObj.setting.edit.enable= true;
  238. });
  239. }
  240. }
  241. },
  242. onDrop: function (event, treeId, treeNodes, targetNode, moveType) {
  243. },
  244. updateNodes: function(nodes, callback){
  245. if (nodes && nodes.length > 0) {
  246. var reqData = []
  247. for (var i = 0; i < nodes.length; i++) {
  248. var node = {};
  249. node.rationRepId = nodes[i].rationRepId;
  250. node.ID = nodes[i].ID;
  251. node.ParentID = nodes[i].ParentID;
  252. node.NextSiblingID = nodes[i].NextSiblingID;
  253. node.name = nodes[i].name;
  254. if (nodes[i].__v != null) node.__v = nodes[i].__v + 1
  255. else node.__v = 0;
  256. reqData.push(node);
  257. }
  258. console.log(reqData);
  259. $.ajax({
  260. type:"POST",
  261. url:"api/updateNodes",
  262. data:{"repId": pageOprObj.rationLibId,"lastOpr": userAccount, "nodes": JSON.stringify(reqData)},
  263. dataType:"json",
  264. cache:false,
  265. timeout:5000,
  266. success:function(result,textStatus,status){
  267. if(callback){
  268. callback();
  269. }
  270. console.log(status + ' : ' + result);
  271. },
  272. error:function(){
  273. }
  274. })
  275. }
  276. },
  277. addHoverDom: function(treeId, treeNode) {
  278. if(typeof treeNode.doing !== 'undefined' && treeNode.doing){
  279. return false;
  280. }
  281. hoverOpr();
  282. function hoverOpr(){
  283. var me = zTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
  284. if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
  285. var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子节点' onfocus='this.blur();'></span>";
  286. sObj.after(addStr);
  287. var btn = $("#addBtn_"+treeNode.tId);
  288. if (btn) btn.bind("click", function(){
  289. treeNode.doing = true;
  290. var rawNode = {ParentID: treeNode.ID, NextSiblingID: -1, name: "新增子节点"}, lastNodeId = -1, lastNode = null;
  291. if (treeNode.items.length > 0) {
  292. lastNodeId = treeNode.items[treeNode.items.length - 1].ID;
  293. lastNode = treeNode.items[treeNode.items.length - 1];
  294. }
  295. zTreeOprObj.addNewNode(rawNode, lastNodeId, function(err, rst){
  296. if (!(err)) {
  297. var newNodes = [], isSilent = false;
  298. if (lastNode) {
  299. lastNode.NextSiblingID = rst.ID;
  300. }
  301. newNodes.push({ rationRepId: rst.data.rationRepId, ID: rst.data.ID, Previous_ID: lastNodeId, ParentID: rst.data.ParentID, NextSiblingID:-1, name:"新增子节点",isParent:false, items:[]});
  302. treeNode.isParent = true;
  303. console.log(newNodes);
  304. if (me.treeObj) {
  305. me.treeObj.addNodes(treeNode, -1, newNodes, isSilent);
  306. } else {
  307. me.treeObj = $.fn.zTree.init($("#rationChapterTree"), setting, newNodes);
  308. }
  309. }
  310. treeNode.doing = false;
  311. hoverOpr();
  312. });
  313. });
  314. }
  315. },
  316. removeHoverDom: function(treeId, treeNode) {
  317. $("#addBtn_"+treeNode.tId).unbind().remove();
  318. },
  319. onClick: function(event,treeId,treeNode) {
  320. console.log(`treeNode`);
  321. console.log(treeNode);
  322. var sectionID = treeNode.ID;
  323. if (!(treeNode.items) || treeNode.items.length == 0) {
  324. rationOprObj.getRationItems(sectionID);
  325. } else {
  326. sheetCommonObj.cleanSheet(rationOprObj.workBook.getSheet(0), rationOprObj.setting, -1);
  327. sheetCommonObj.shieldAllCells(rationOprObj.workBook.getSheet(0));
  328. }
  329. sheetCommonObj.cleanSheet(rationGLJOprObj.sheet, rationGLJOprObj.setting, -1);
  330. sheetCommonObj.shieldAllCells(rationGLJOprObj.sheet);
  331. }
  332. };